Seeq Team John Cox Posted July 8, 2019 Seeq Team Share Posted July 8, 2019 (edited) In some cases you may want to do a calculation (such as an average) for a specific capsule within a condition. In Seeq Formula, the toGroup() function can be used to get a group of capsules from a condition (over a user-specified time period). The pick() function can then be used to select a specific capsule from the group. The Formula example below illustrates calculating an average temperature for a specific capsule in a high temperature condition. // Calculate the average temperature during a user selected capsule of a high temperature // condition. (The high temperature condition ($HighT) was created using the Value Search tool.) // // To prevent an unbounded search for the capsules, must define the search start/end to use in toGroup(). // Here, $capsule simply defines a search time period and does not refer to any specific capsules in the $HighT condition. $capsule = capsule('2019-06-19T09:00Z','2019-07-07T12:00Z') // Pick the 3rd capsule of the $HighT condition during the $capsule time period. // We must specify capsule boundary behavior (Intersect, EnclosedBy, etc.) to // define which $HighTcapsules are used and what their boundaries are (see // CapsuleBoundary documentation within the Formula tool for more information). $SelectedCapsule = $HighT.toGroup($capsule,CapsuleBoundary.EnclosedBy).pick(3) // Calculate the temperature average during the selected capsule. $Temperature.average($SelectedCapsule) Edited July 8, 2019 by John Cox 2 Link to comment Share on other sites More sharing options...
Seeq Team Nuraisyah Rosli Posted June 9, 2021 Seeq Team Share Posted June 9, 2021 (edited) Here's another method to pick a specific capsule within a condition. In this example, the user want to pick the first capsule from condition 2 within condition 1. Use formula tool: $condition1 .removeLongerThan(1d) .transform($c -> $condition2.removeLongerThan(1d).toGroup($c).pick(1)) The output: Edited June 9, 2021 by Nuraisyah Rosli Link to comment Share on other sites More sharing options...
Wouter Posted November 30, 2022 Share Posted November 30, 2022 (edited) The above examples were helpful to select the capsule of A when there are multiple A capsules intersecting with B: A + first B after A: $md = 10d $a.join($b, $md, false) A when first B starts before end of A: $nodata = '2000-01-01T00:00:00Z' $bafa.removeLongerThan($md).transform($capsule -> $a.removeLongerThan($md).toGroup($capsule, CAPSULEBOUNDARY.INTERSECT) .pick(1, // if there are multiple capsules, grab the first capsule($nodata, $nodata)) // otherwise a default capsule ) B could be offline samples of the A process. @John Cox suppose B has properties. How can they be added to (other properties of) A when first B starts before end of A ? Edited November 30, 2022 by Wouter Add question Link to comment Share on other sites More sharing options...
Seeq Team John Cox Posted November 30, 2022 Author Seeq Team Share Posted November 30, 2022 Depending on the details of the use case, adding properties from one condition to another (during a join or some type of combination of the 2 conditions) can be achieved with at least 2 approaches: The mergeProperties() Formula function, introduced in Seeq R56 can be used. You can look up example uses of mergeProperties() in Seeq Formula's documentation. Also note that mergeProperties() has functionality for quantitatively merging numerical property values (max, average, etc.) if the 2 conditions have conflicting values for the same property. The setProperty() Formula function can be used to add property values from one condition to another. It may be necessary to use getProperty() in conjunction with setProperty(): please see the highlighted sections in the screenshot below, which is included here only to show an example of using setProperty() inside of a transform(). Another alternative with setProperty(): you may also consider converting a property value (to be retained from the second condition) to a signal with $condition.toSignal(propertyName), and then use the signal result with setProperty(). You can see examples of adding a signal aggregation as a capsule property in Seeq's Formula documentation for setProperty(). I think one of these approaches should help with your use case. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now