Jump to content

Allison Buenemann

Seeq Analytics Engineers
  • Content Count

    18
  • Joined

  • Last visited

  • Points

    2 [ Donate ]

Community Reputation

0 Neutral

Personal Information

  • Company
    Seeq Corporation
  • Title
    Analytics Engineer
  • Level of Seeq User
    Seeq Beginner

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. FAQ: I've got a signal for which the average and standard deviation are believed to be drifting over time. When I view the average and standard deviation in calendar time, it isn't helpful because they are highly dependent upon the production grade that I am running. Is there a better way that I could be viewing my data to get a sense of the drift of the average and standard deviation by production grade over time? Solution 1: Histogram 1. Add your signal of interest and your production grade code signal to the display. 2. Create a condition for all production grades using formula: $gradeCode.toCondition() 3. Use the Histogram tool to calculate the average reactor temperature during each grade campaign and display them aggregated over production grade, and time. The same methods from step 3 can be applied to get a second histogram of the distribution of the standard deviation of the signal of interest by grade over time. Solution 2: Chain View 1. Add your signal of interest and your operating state signal to the display. 2. Use Formula to create a condition for all operating states: $stateSignal.toCondition() 3. Use the Signal from Condition tool to calculate the average temperature over the all operating states condition. 4. Use the Signal from Condition tool to calculate the standard deviation of temperature over the all operating states condition. 5. Use Formula to calculate two new signals for “Avg + 2 SD” and “Avg – 2 SD”. 6. Filter your all operating states condition for only the state that you are interested in viewing. In this example we want to view only the capsules during which the compressor is in stage 2, for which the syntax is: $AllOperatingStates.removeLongerThan(7d).removeShorterThan(4h).filter($capsule -> $capsule.getProperty('Value').isEqualTo('STAGE 2')) This formula is taking our condition for all operating states, keeping only capsules that are between 4h and 7d in length, then filtering those capsules to include only those for which the value is equal to stage 2. 7. Swap to chain view and view a longer time range.
  2. The objective of creating a new signal that has a value equal to the number of instruments reading above a certain threshold can be achieved in one step using Seeq Formula. It is a good bit of code, but the majority is copy and paste. 1. Add all relevant signals to be used in count. 2. Open a new Seeq Formula window and use the following code to get your counter. //Create a value search for when each area temperature is above 80F $HighTempAreaA = $a.valueSearch(isGreaterThan(80)) $HighTempAreaB = $b.valueSearch(isGreaterThan(80)) $HighTempAreaC = $c.valueSearch(isGreaterThan(80)) $HighTempAreaG = $g.valueSearch(isGreaterThan(80)) $HighTempAreaH = $h.valueSearch(isGreaterThan(80)) $HighTempAreaI = $i.valueSearch(isGreaterThan(80)) //Create a new signal for each temperature tag that is 1 if temp > 80, else 0 $AreaA = 0.toSignal().splice(1.toSignal(),$HighTempAreaA) $AreaB = 0.toSignal().splice(1.toSignal(),$HighTempAreaB) $AreaC = 0.toSignal().splice(1.toSignal(),$HighTempAreaC) $AreaG = 0.toSignal().splice(1.toSignal(),$HighTempAreaG) $AreaH = 0.toSignal().splice(1.toSignal(),$HighTempAreaH) $AreaI = 0.toSignal().splice(1.toSignal(),$HighTempAreaI) //Create a new Signal that is the sum of the 1-0 signals for all temperatures add($AreaA, $AreaB, $AreaC, $AreaG, $AreaH, $AreaI) The result is the brown step function below. Optionally add a threshold line and use cursors to validate the counter. Note that this approach works for signals that share a common threshold, but can also be applied to variable thresholds since each 1,0 signal is determined by a unique value search.
  3. Another possible method is to first cleanse the compressor stage signal to remove values equal to 'OFF' and then apply the toCondition() function. This can be done in one step using formula: $CompressorStage.remove(isEqualTo('OFF')).toCondition()
  4. FAQ: I would like to create a condition for the summer season that runs from May 1 - September 30, but when I use the Periodic Condition tool to create a monthly condition and select the months May-September, I get individual monthly capsules rather than one capsule for the entire summer. Is there a better way to do this using Seeq's tools? Solution 1 - Using Seeq Point & Click Tools: 1. Use the Periodic Condition tool to create a condition for May. 2. Use the Periodic Condition tool to create a condition for September. 3. Use the Composite Condition tool (join operator, inclusive of A, inclusive of B) to create a new condition that spans from the beginning of May to the end of September. Solution 2 - Using Seeq Formula: 1. Create a monthly Periodic Condition selecting all of you "summer months". Note that while it looks like one long capsule at the top of the display pane, it is actually 5 adjacent monthly capsules. You can confirm this by looking at the capsules pane in the bottom right hand corner of the application. 2. Use Seeq Formula and the merge() function to merge adjacent capsules. The appropriate syntax for merging adjacent capsules can be found by searching the word "merge" in the search documentation bar within Seeq Formula and scrolling to the example to "merge overlapping AND adjacent capsules". Note now in the capsules pane there are still the individual capsules for summer months, but there is a new green capsule that spans the entire summer as defined in this problem statement.
  5. FAQ: I've got a signal with drop-outs and I want to filter my signal to only visualize samples with values above a threshold. Is there a quick way to do this in Seeq? Solution: We can use Seeq's Signal Filtering capabilities to break down a signal into individual samples and create a new signal that keeps the samples only above your specified threshold. 1. Visualize your signal with drop-outs and determine the threshold value. For this example, we will filter out all samples with a value of less than or equal to 40F. 2. Open a new Seeq Formula window and use the search documentation to look for information on filtering a signal. When we begin to type filter, we see right away an option "filter() Signal". Open the documentation to get an understanding of what the function is doing and example syntax. The first example below is taking a string signal and breaking it down into samples, then keeping samples only if their string value is not equal to 'T4A' (note single or double quotes are required for string inputs). The second example is filtering to remove infinite values or NaN values. The first logical statement "$sample.getValue().isValid()" is keeping only the samples with valid values, removing NaN or other invalid values. The second logical statement "$sample.getValue().isFinite()" is keeping only the samples with finite values. Note that we can string as many logical criteria together as we want here using the && operator. In our case, we want to filter our temperature signal to show only samples with values above 40F. The syntax in the formula input window below "$Temp.filter($sample -> ($sample.getValue().isGreaterThan(40)))" shows how we are able to take our temperature signal, break it down into individual samples, and then only keep samples whose value is greater than 40F. The new filtered signal appears nearly exactly the same as the original, but with the drop-outs removed.
  6. Hi John, The following method can be used to calculate an hourly average and standard deviation over the lagging 24 hours. 1. Create a periodic condition 24 hours in length that begins every hour. Periodic conditions this specific cannot be done in the Periodic Condition wizard tool, but can be done in Formula using the following syntax: periods(24h, 1h) 2. Use signal from condition to calculate an hourly average over the last 24 hours. Make sure to select end as where you want to put the timestamp of the summary statistic. 3. Use a similar method with signal from condition to calculate an hourly standard deviation over the last 24 hours. 4. Use formula to calculate an upper limit for your temp signal equal to your 24 hr lagging average + X*standard deviation. In this example we chose + 3 SD, so the formula syntax is $average + (3*$standardDeviation) 5. Use formula to calculate a lower limit for your temp signal equal to your 24 hr lagging average - X*standard deviation. In this example we chose - 3 SD, so the formula syntax is $average - (3*$standardDeviation) 6. Use the Boundaries tool to transform your upper and lower limit signals into shaded boundaries.
  7. Use case: A piece of equipment has a start-up sequence in which it goes through different discrete states sequentially before completing the sequence and reaching steady state. When the equipment is off, the state is 0. When the equipment enters the start-up sequence it cycles through states 1-6 in the pattern "1-2-3-4-5-6". A successful start-up sequence will have all 6 states in the pattern "1-2-3-4-5-6." If a disruption occurs at any point in the start-up sequence the state number will read as state 7, thus a failed start-up sequence could have the pattern "1-7", "1-2-7", 1-2-3-7", etc. This use case describes methods to identify only the successful start-up sequences. Approach 1: If the signal for the state is numeric (e.g. with discrete numeric values of 0-7) 1. Create a new signal that is the running delta of the STATENUMBER signal. Use Seeq Formula and syntax: $statenumbersignal.runningDelta() 2. Create a new condition for all start-up sequences using value search for when the runningDelta signal just created is greater than zero. 3. Calculate the delta in your STATENUMBER signal over each start-up sequence. This value should always be equal to 6 or 7 as the sequence will either complete successfully (go to 6) or fail and end with a value of 7. Use the signal from condition tool to calculate this. 4. Create a new condition for when this delta in the STATENUMBER signal just created is equal to 6. This must be done in Seeq formula (there is a known issue in using value search for this operation) with the following syntax: $deltaInSTATENUMBERsignal.valueSearch(isEqualTo(6)) Approach 2: If the signal for the state is a string that is easily convertible to a numeric signal. This example is a string with discrete values "STAGE0", "STAGE6", etc. 1. In Seeq formula, use the replace() function with the following syntax: $StringSignalForStateNumber.replace('STATE','') 2. In a new Seeq Formula Window apply the toNumber() function to the signal created in step 1 with the following syntax: $SignalFromStep1.toNumber() - this will create a numeric signal with discrete values of 0-7. Approach 3: If the signal for the state is a string value, not easily converted to a numeric signal or if you wish to proceed using the string signal. 1. Use Value Search to identify STATE6 2. Use Value Search to identify STATE7 3. Use Composite Condition (union operator) to create a combined condition "finalStateinSequence" for the final state in sequence, either STATE6 or STATE7. 4. Use formula to create a condition for all start-up sequences (successful and failed). Syntax: $FinalStateInSequence.inverse().move(0,1h) This formula code is identifying all of the time when the final state in sequence condition is not true and extending those capsules by a short amount of time so that the final state value is contained within the "all start-up sequences" capsules. 5. Use Signal from Condition to identify the ending STATENUMBER value for each of the start-up sequences. 6. Identify your successful start-up sequences by doing a valueSearch in Formula to identify when the ending STATENUMBER is equal to STATE7. Formula syntax: $endingSTATENUMBERsignal.valueSearch(isEqualTo("STATE7"))
  8. Objective: Take a signal for which you have pre-defined upper and lower limits that are determined by an operating mode or production grade. We want to create a vertical boundary around the transition region between the two operating modes that has the greater of the two upper limits and the lower of the two lower limits. Assumptions: A signal for operating mode, product grade, etc exists that can be used to create a condition for all operating modes. The signal can be string or numeric and will be referred to in the solution as $mode. A signal for the maximum (and minimum) limit by operating mode is available. These will be referred to in the solution as $maximumAllModes and $minimumAllModes. If a signal does not exist for these limits, one can be created so long as the maximum and minimum limit are known (can be constant or variable) for each operating mode. This can be done in Seeq Formula using the splice() function. Solution: Use Seeq Formula and the following syntax to create a condition ($allModes) for all operating modes. In R.21.0.41 or greater, $mode.toString.toCondition() In versions prior to R.21.0.41, $mode.toString().toCapsules(max capsule duration) Create a new condition ($transitionRegion) using Seeq Formula that captures the time for some period before and after the transition between capsules occurs. The following syntax grabs a three hour window after the start of each capsule and shifts it backwards by 0.5 hours to capture a small amount of time before and a larger chunk of time following the transition. $allModes.afterStart(3h).move(-0.5h) Calculate the minimum limit during the transition region. Use Seeq Formula and the following syntax to find the minimum value of the $minimumAllModes signal and create a new signal ($minimumTransitionRegion) that apply that value over the condition $transitionRegion. $minimumAllModes.aggregate(minvalue(),$transitionRegion,durationkey()) Calculate the maximum limit during the transition region. Use Seeq Formula and the following syntax to find the maximum value of the $maximumAllModes signal and create a new signal ($maximumTransitionRegion) that apply that value over the condition $transitionRegion. $maximumAllModes.aggregate(maxvalue(),$transitionRegion,durationkey()) Use the boundaries tool to create a new boundary on the original signal with the upper and lower limits. Inputs into the boundaries tool are: Primary signal = the original signal Relationship type = boundary Name = [anything you want] we use transition boundary Upper signal = $maximumTransitionRegion Lower signal = $minimumTransitionRegion The output is a boundary around the transition region like shown in the attached screenshot. vertical boundaries.pdf
  9. FAQ: I want to identify the change in value of my signal after a change has occurred. My signal is generally constant (with typical noise) aside from when an event occurs during which there is a step change in the value of the signal. Solution: In order to compare the actual value of the signal before and after some event, you must first identify the event. Method 1: Running Delta. Note: an approach using the running delta function can be preferred to the derivative function (Method 2) when step changes are present as the derivative is infinite during these steps. Using the derivative function works best if the signal is first cleansed/filtered and the interpolation method changed to linear. Use Seeq Formula to create a new signal that is the running delta of the original signal. Use the syntax: $OrigianlSignal.runningdelta() Use the “Search Documentation” bar on the right side of the Formula window to learn more about the running delta function and syntax Once the new running delta signal has been created, do a value search on when it exceeds some threshold to identify the time periods over which you would like to know the start and end values. Note: if the step changes are occurring in both the increasing and decreasing directions, you can still identify all events by using Seeq Formula to take the absolute value of your running delta function ($runningDeltaSignal.abs()) and applying the value search tool to the absolute value signal. The time periods identified using value search can be further manipulated to yield exactly the time periods that you are interested in using Seeq formula and the grow(), shrink(), and/or move() functions. Once the events during which the step change occurs have been identified, you can calculate statistics on them using the Signal from Condition tool. The inputs to the tool will be your original signal and the new condition that you’ve created to identify the events. A few statistics that you may be interested in: Delta: the end value minus the start value of the signal. This would give you the value drop (or gain) during one of these events. Value at start: this will grab the value of the original signal at the start of the event Value at end: this will grab the value of the original signal at the end of the event Method 1: Derivative. Best approach for most rate of change problems, excluding step changes. Use Low Pass Filter tool or Seeq Formula agileFilter() function to cleanse the original signal to remove typical noise from signal. Use Seeq Formula to create a new signal that is the derivative of the cleansed signal. Use the syntax: $CleansedSignal.derivative() Use the “Search Documentation” bar on the right side of the Formula window to learn more about the derivative() function and syntax Once the new derivative signal has been created, do a value search on when it exceeds some threshold to identify the time periods over which you would like to know the start and end values. Note: if the value changes are occurring in both the increasing and decreasing directions, you can still identify all events by using Seeq Formula to take the absolute value of your derivative function ($derivativeSignal.abs()) and applying the value search tool to the absolute value signal. The time periods identified using value search can be further manipulated to yield exactly the time periods that you are interested in using Seeq formula and the grow(), shrink(), and/or move() functions. Once the events during which the value change occurs have been identified, you can calculate statistics on them using the Signal from Condition tool. The inputs to the tool will be your original signal and the new condition that you’ve created to identify the events. A few statistics that you may be interested in: Delta: the end value minus the start value of the signal. This would give you the value drop (or gain) during one of these events. Value at start: this will grab the value of the original signal at the start of the event Value at end: this will grab the value of the original signal at the end of the event
  10. FAQ: All of my tag names are complicated combinations of letters and numbers. Is there a way that I could save my tags with useful names to use in later analyses without using the "available outside this analysis" check box? Solution: One popular way to do this is to create a dummy analysis where all you do is create aliases for your frequently used signals. Then, when you want to do an analysis using these tags, you can duplicate your dummy analysis, and begin a new analysis with all of your tags already having useful names. To create your new signal, open a Seeq Formula window and change the title to the alias that you want to give your particular tag. Then set the value of this new signal equal to the existing signal. See screenshot attached for an example using Seeq Formula to create an alias of "South Bridge-wall Temperature" for the tag-name "RK.HFGY_36_R901.PV".
  11. Upstream O&G Customer Use Case: I have created a condition for when my well is shut-in based on a value search on the down hole pressure. I've created another condition for the first hour after the well is shut-in. I would like to create another condition that runs from the end of my 1-hour after shut-in condition until the down hold pressure returns to within 10% of it's pre-shut-in value. Once I have isolated this period of time I would like to calculate an hourly rolling average over only that time period and do the same for my 1 hour after shut-in condition. Solution: To address your first question of creating the t>1 hr after shut-in capsule. One method to do this is below: 1. Create a condition for ~5 min before shut-in and shift it by ~5 min to make sure you have the Steady state DHP prior to shut-in. This is done using Formula. The syntax (quotes not part of code) is "$ShutinCondition.beforeStart(5min).move(-5min)". The beforeStart(5 min) creates a new 5 minute long capsule directly preceding your shut-in capsule. The move(-5 min) function shifts this new beforeStart capsule backwards in time by 5 minutes. 2. Calculate a new signal that represents the average DHP over the condition created in step 1. Use signal from Condition with the following inputs: Signal or condition = DHP Summary Statistic = Average Bounding Condition = condition from step 1 Where to place timestamp = Start Interpolation Method = step Max interpolation = a duration longer than the time between shut-in events 3. Calculate a new signal that is the signal created in step 2 (DHP right before shut-in) + 10%. Use Formula and the syntax "$signalFromStep2*(1.10)". 4. Calculate a new signal that is the delta between the DHP and this initial + 10% signal. Use Formula and the syntax "$DHPsignal-$signalFromstep3". 5. Create a condition for when this delta signal created in step 4 drops below zero. Use value search and <0 as inputs. 6. Create a composite condition that joins the end of your existing capsules t<1 hr after shut-in to the start of your condition created in step 5. The inputs to this composite condition will be: Condition A = t<1 hour after shut in Condition B = Delta signal drops below zero Logic = join Not inclusive of A Not inclusive of B Max capsule duration = long enough to capture the time back down to initial DHP. For each of the two new signals you want to create, you can use formula and the following syntax, where $ChooseCondition will be your t<1 hr and t>1 hr conditions in each formula. "$DHP.within($ChooseCondition).runningAggregate(average(),hours())" This will give you a new signal of the 1-hr rolling average of DHP only during the specified condition.
  12. FAQ: I've calculated a scorecard metric that I want to use in a calculation of a condition. While the scorecard metric is visible in trend view, it is not provided as a signal choice in the drop-downs on the tools or in the Seeq formula window. Can my scorecard metric be used in calculations of other signals/conditions? Answer: In the versions of Seeq currently available (R21.0.41 or earlier), the scorecard metric tool does not actually create a signal despite being able to be viewed in trend view. The signal from condition tool requires the same input arguments and produces the same outputs, but as a signal rather than a metric, which can then be used in the calculation of further signals and conditions using Seeq tools or Seeq formula. If there is a desire to use the calculated parameter (via either scorecard metric or signal from condition) in further calculations AND in view it in a scorecard, we recommend first using signal from condition to do the calculation of the parameter, then referencing your signal from condition in the scorecard metric tool (without actually calculating the metric).
  13. FAQ: I want to create a condition where a trend is within a specific range of slope so as to identify instances where it falls inside and outside these ranges. Is this possible? Solution: This can be easily done using a combination of the Formula and Value Search tools in the sequence below. Use formula to calculate a new signal that is the derivative of the original signal. Formula code is: $signal.derivative() Note - if the original signal is step interpolated, the derivative returned may have infinite values. If it is step interpolated, it is best to first change the interpolation method to linear, then take the derivative. Formula code for this method is: $signal.toLinear().derivative() Use the value search tool on your new derivative signal to create a condition when your derivative is above or below a particular value, or in a specified range.
  14. Rolling averages are frequently used in Seeq to smooth signals. Calculating a rolling average requires creating a Periodic Condition and then applying the Signal from Condition tool to aggregate the signal of interest over the bounding periodic condition. Sometimes, we want to calculate a rolling statistic over a time frame not listed in the Periodic Condition tool (anything < hours). To create a periodic condition for periods of time not offered in the tool, the Seeq formula tool can be used with the periods() function. For example, a 15 minute periodic condition can be created by entering "periods(15 min)" into the Seeq formula tool.
  15. Hi Fiene, You can linearly interpolate between data points on your non-continuous signals using Seeq formula tool. First apply the setMaxInterpolation() function to the singal, and follow with the toLinear() function to ensure linear interpolation (if your signal is brought in as step interpolation or other type). Here is the syntax for the Seeq Formula tool: $signal.setMaxInterpolation(X hours).toLinear() In this example syntax, "X hours" should be changed to the amount of time you would like to linearly interpolate between samples. Allison
×
×
  • Create New...