File: Trigger.java

package info (click to toggle)
libsbml 5.10.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 141,800 kB
  • ctags: 98,793
  • sloc: cpp: 804,405; xml: 206,907; ansic: 66,144; cs: 52,916; java: 25,093; python: 23,449; sh: 9,847; perl: 8,414; makefile: 7,580; ruby: 4,760; csh: 3
file content (525 lines) | stat: -rw-r--r-- 21,033 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
/* ----------------------------------------------------------------------------
 * This file was automatically generated by SWIG (http://www.swig.org).
 * Version 2.0.4
 *
 * Do not make changes to this file unless you know what you are doing--modify
 * the SWIG interface file instead.
 * ----------------------------------------------------------------------------- */

package org.sbml.libsbml;

/** 
 *  Implementation of SBML's Trigger construct for Event.
 <p>
 * An {@link Event} object defines when the event can occur, the variables that are
 * affected by the event, and how the variables are affected.  The {@link Trigger}
 * construct in SBML is used to define a mathematical expression that
 * determines when an {@link Event} is <em>triggered</em>.
 <p>
 * A {@link Trigger} object in SBML Level&nbsp;2 and Level&nbsp;3 contains one
 * subelement named 'math' containing a MathML expression.  The expression
 * must evaluate to a value of type <code>boolean.</code>  The exact moment at which
 * the expression evaluates to <code>true</code> is the time point when the {@link Event} is
 * <em>triggered</em>.  In SBML Level&nbsp;3, {@link Trigger} has additional attributes
 * that must be assigned values; they are discussed in a separate section
 * below.
 <p>
 * An event only <em>triggers</em> when its {@link Trigger} expression makes the
 * transition in value from <code>false</code> to <code>true.</code>  The event will also
 * trigger at any subsequent time points when the trigger makes this
 * transition; in other words, an event can be triggered multiple times
 * during a simulation if its trigger condition makes the transition from
 * <code>false</code> to <code>true</code> more than once.  In SBML Level&nbsp;3, the behavior
 * at the very start of simulation (i.e., at <em>t = 0</em>, where
 * <em>t</em> stands for time) is determined in part by the boolean flag
 * 'initialValue'.  This and other additional features introduced in SBML
 * Level&nbsp;3 are discussed further below.
 <p>
 * <h2>Version differences</h2>
 <p>
 * SBML Level&nbsp;3 Version&nbsp;1 introduces two required attributes
 * on the {@link Trigger} object: 'persistent' and 'initialValue'.  The rest of
 * this introduction describes these two attributes.
 <p>
 * <h3>The 'persistent' attribute on {@link Trigger}</h3>
 <p>
 * In the interval between when an {@link Event} object <em>triggers</em> (i.e.,
 * its {@link Trigger} object expression transitions in value from <code>false</code> to
 * <code>true</code>) and when its assignments are to be <em>executed</em>, conditions
 * in the model may change such that the trigger expression transitions
 * back from <code>true</code> to <code>false.</code>  Should the event's assignments still be
 * made if this happens?  Answering this question is the purpose of the
 * 'persistent' attribute on {@link Trigger}.
 <p>
 * If the boolean attribute 'persistent' has a value of <code>true</code>, then once
 * the event is triggered, all of its assignments are always performed when
 * the time of execution is reached.  The name <em>persistent</em> is meant to
 * evoke the idea that the trigger expression does not have to be
 * re-checked after it triggers if 'persistent'=<code>true.</code>  Conversely, if
 * the attribute value is <code>false</code>, then the trigger expression is not
 * assumed to persist: if the expression transitions in value back to 
 * <code>false</code> at any time between when the event triggered and when it is to be
 * executed, the event is no longer considered to have triggered and its
 * assignments are not executed.  (If the trigger expression transitions
 * once more to <code>true</code> after that point, then the event is triggered, but
 * this then constitutes a whole new event trigger-and-execute sequence.)
 <p>
 * The 'persistent' attribute can be especially useful when {@link Event} objects
 * contain {@link Delay} objects, but it is relevant even in a model without delays
 * if the model contains two or more events.  As explained in the
 * introduction to this section, the operation of all events in SBML
 * (delayed or not) is conceptually divided into two phases,
 * <em>triggering</em> and <em>execution</em>; however, unless events have
 * priorities associated with them, SBML does not mandate a particular
 * ordering of event execution in the case of simultaneous events.  Models
 * with multiple events can lead to situations where the execution of one
 * event affects another event's trigger expression value.  If that other
 * event has 'persistent'=<code>false</code>, and its trigger expression evaluates to
 * <code>false</code> before it is to be executed, the event must not be executed
 * after all.
 <p>
 * <h3>The 'initialValue' attribute on {@link Trigger}</h3>
 <p>
 * As mentioned above, an event <em>triggers</em> when the mathematical
 * expression in its {@link Trigger} object transitions in value from <code>false</code> to
 * <code>true.</code>  An unanswered question concerns what happens at the start of a
 * simulation: can event triggers make this transition at <em>t = 0</em>,
 * where <em>t</em> stands for time?
 <p>
 * In order to determine whether an event may trigger at <em>t = 0</em>, it
 * is necessary to know what value the {@link Trigger} object's 'math' expression
 * had immediately prior to <em>t = 0</em>.  This starting value of the
 * trigger expression is determined by the value of the boolean attribute
 * 'initialValue'.  A value of <code>true</code> means the trigger expression is
 * taken to have the value <code>true</code> immediately prior to <em>t = 0</em>.  In
 * that case, the trigger cannot transition in value from <code>false</code> to 
 * <code>true</code> at the moment simulation begins (because it has the value <code>true</code>
 * both before and after <em>t = 0</em>), and can only make the transition
 * from <code>false</code> to <code>true</code> sometime <em>after</em> <em>t = 0</em>.  (To do
 * that, it would also first have to transition to <code>false</code> before it could
 * make the transition from <code>false</code> back to <code>true.</code>)  Conversely, if
 * 'initialValue'=<code>false</code>, then the trigger expression is assumed to start
 * with the value <code>false</code>, and therefore may trigger at <em>t = 0</em> if
 * the expression evaluates to <code>true</code> at that moment.
 <p>
 <p>
 * @see Event
 * @see Delay
 * @see EventAssignment
 */

public class Trigger extends SBase {
   private long swigCPtr;

   protected Trigger(long cPtr, boolean cMemoryOwn)
   {
     super(libsbmlJNI.Trigger_SWIGUpcast(cPtr), cMemoryOwn);
     swigCPtr = cPtr;
   }

   protected static long getCPtr(Trigger obj)
   {
     return (obj == null) ? 0 : obj.swigCPtr;
   }

   protected static long getCPtrAndDisown (Trigger obj)
   {
     long ptr = 0;

     if (obj != null)
     {
       ptr             = obj.swigCPtr;
       obj.swigCMemOwn = false;
     }

     return ptr;
   }

  protected void finalize() {
    delete();
  }

  public synchronized void delete() {
    if (swigCPtr != 0) {
      if (swigCMemOwn) {
        swigCMemOwn = false;
        libsbmlJNI.delete_Trigger(swigCPtr);
      }
      swigCPtr = 0;
    }
    super.delete();
  }

  
/**
   * Creates a new {@link Trigger} using the given SBML <code>level</code> and <code>version</code>
   * values.
   <p>
   * @param level a long integer, the SBML Level to assign to this {@link Trigger}
   <p>
   * @param version a long integer, the SBML Version to assign to this
   * {@link Trigger}
   <p>
   * @throws SBMLConstructorException 
   * Thrown if the given <code>level</code> and <code>version</code> combination, or this kind
   * of SBML object, are either invalid or mismatched with respect to the
   * parent {@link SBMLDocument} object.
   */ public
 Trigger(long level, long version) throws org.sbml.libsbml.SBMLConstructorException {
    this(libsbmlJNI.new_Trigger__SWIG_0(level, version), true);
  }

  
/**
   * Creates a new {@link Trigger} using the given {@link SBMLNamespaces} object
   * <code>sbmlns</code>.
   <p>
   * <p>
 * The {@link SBMLNamespaces} object encapsulates SBML Level/Version/namespaces
 * information.  It is used to communicate the SBML Level, Version, and (in
 * Level&nbsp;3) packages used in addition to SBML Level&nbsp;3 Core.  A
 * common approach to using libSBML's {@link SBMLNamespaces} facilities is to create an
 * {@link SBMLNamespaces} object somewhere in a program once, then hand that object
 * as needed to object constructors that accept {@link SBMLNamespaces} as arguments. 
   <p>
   * @param sbmlns an {@link SBMLNamespaces} object.
   <p>
   * @throws SBMLConstructorException 
   * Thrown if the given <code>level</code> and <code>version</code> combination, or this kind
   * of SBML object, are either invalid or mismatched with respect to the
   * parent {@link SBMLDocument} object.
   */ public
 Trigger(SBMLNamespaces sbmlns) throws org.sbml.libsbml.SBMLConstructorException {
    this(libsbmlJNI.new_Trigger__SWIG_1(SBMLNamespaces.getCPtr(sbmlns), sbmlns), true);
  }

  
/**
   * Copy constructor; creates a copy of this {@link Trigger}.
   <p>
   * @param orig the object to copy.
   <p>
   * @throws SBMLConstructorException 
   * Thrown if the argument <code>orig</code> is <code>null.</code>
   */ public
 Trigger(Trigger orig) throws org.sbml.libsbml.SBMLConstructorException {
    this(libsbmlJNI.new_Trigger__SWIG_2(Trigger.getCPtr(orig), orig), true);
  }

  
/**
   * Creates and returns a deep copy of this {@link Trigger}.
   <p>
   * @return a (deep) copy of this {@link Trigger}.
   */ public
 Trigger cloneObject() {
    long cPtr = libsbmlJNI.Trigger_cloneObject(swigCPtr, this);
    return (cPtr == 0) ? null : new Trigger(cPtr, true);
  }

  
/**
   * Get the mathematical formula for the trigger and return it
   * as an AST.
   <p>
   * @return the math of this {@link Trigger}.
   */ public
 ASTNode getMath() {
    long cPtr = libsbmlJNI.Trigger_getMath(swigCPtr, this);
    return (cPtr == 0) ? null : new ASTNode(cPtr, false);
  }

  
/**
   * (SBML Level&nbsp;3 only) Get the value of the 'initialValue' attribute
   * of this {@link Trigger}.
   <p>
   * @return the boolean value stored as the 'initialValue' attribute value
   * in this {@link Trigger}.
   <p>
   * @note The attribute 'initialValue' is available in SBML Level&nbsp;3
   * Version&nbsp;1 Core, but is not present in lower Levels of SBML.
   */ public
 boolean getInitialValue() {
    return libsbmlJNI.Trigger_getInitialValue(swigCPtr, this);
  }

  
/**
   * (SBML Level&nbsp;3 only) Get the value of the 'persistent' attribute
   * of this {@link Trigger}.
   <p>
   * @return the boolean value stored as the 'persistent' attribute value
   * in this {@link Trigger}.
   <p>
   * @note The attribute 'persistent' is available in SBML Level&nbsp;3
   * Version&nbsp;1 Core, but is not present in lower Levels of SBML.
   */ public
 boolean getPersistent() {
    return libsbmlJNI.Trigger_getPersistent(swigCPtr, this);
  }

  
/**
   * Predicate to test whether the math for this trigger is set.
   <p>
   * @return <code>true</code> if the formula (meaning the 'math' subelement) of
   * this {@link Trigger} is set, <code>false</code> otherwise.
   */ public
 boolean isSetMath() {
    return libsbmlJNI.Trigger_isSetMath(swigCPtr, this);
  }

  
/**
   * (SBML Level&nbsp;3 only) Predicate to test whether the 'initialValue'
   * attribute for this trigger is set.
   <p>
   * @return <code>true</code> if the initialValue attribute of
   * this {@link Trigger} is set, <code>false</code> otherwise.
   <p>
   * @note The attribute 'initialValue' is available in SBML Level&nbsp;3
   * Version&nbsp;1 Core, but is not present in lower Levels of SBML.
   */ public
 boolean isSetInitialValue() {
    return libsbmlJNI.Trigger_isSetInitialValue(swigCPtr, this);
  }

  
/**
   * (SBML Level&nbsp;3 only) Predicate to test whether the 'persistent'
   * attribute for this trigger is set.
   <p>
   * @return <code>true</code> if the persistent attribute of
   * this {@link Trigger} is set, <code>false</code> otherwise.
   <p>
   * @note The attribute 'persistent' is available in SBML Level&nbsp;3
   * Version&nbsp;1 Core, but is not present in lower Levels of SBML.
   */ public
 boolean isSetPersistent() {
    return libsbmlJNI.Trigger_isSetPersistent(swigCPtr, this);
  }

  
/**
   * Sets the trigger expression of this {@link Trigger} instance to a copy of the given
   * {@link ASTNode}.
   <p>
   * @param math an {@link ASTNode} representing a formula tree.
   <p>
   * @return integer value indicating success/failure of the
   * function.   The possible values
   * returned by this function are:
   * <ul>
   * <li> {@link  libsbmlConstants#LIBSBML_OPERATION_SUCCESS LIBSBML_OPERATION_SUCCESS }
   * <li> {@link  libsbmlConstants#LIBSBML_INVALID_OBJECT LIBSBML_INVALID_OBJECT }
   * </ul>
   */ public
 int setMath(ASTNode math) {
    return libsbmlJNI.Trigger_setMath(swigCPtr, this, ASTNode.getCPtr(math), math);
  }

  
/**
   * (SBML Level&nbsp;3 only) Sets the 'initialValue' attribute of this {@link Trigger} instance.
   <p>
   * @param initialValue a boolean representing the initialValue to be set.
   <p>
   * @return integer value indicating success/failure of the
   * function.   The possible values
   * returned by this function are:
   * <ul>
   * <li> {@link  libsbmlConstants#LIBSBML_OPERATION_SUCCESS LIBSBML_OPERATION_SUCCESS }
   * <li> {@link  libsbmlConstants#LIBSBML_UNEXPECTED_ATTRIBUTE LIBSBML_UNEXPECTED_ATTRIBUTE }
   *
   * </ul> <p>
   * @note The attribute 'initialValue' is available in SBML Level&nbsp;3
   * Version&nbsp;1 Core, but is not present in lower Levels of SBML.
   */ public
 int setInitialValue(boolean initialValue) {
    return libsbmlJNI.Trigger_setInitialValue(swigCPtr, this, initialValue);
  }

  
/**
   * (SBML Level&nbsp;3 only) Sets the 'persistent' attribute of this {@link Trigger} instance.
   <p>
   * @param persistent a boolean representing the persistent value to be set.
   <p>
   * @return integer value indicating success/failure of the
   * function.   The possible values
   * returned by this function are:
   * <ul>
   * <li> {@link  libsbmlConstants#LIBSBML_OPERATION_SUCCESS LIBSBML_OPERATION_SUCCESS }
   * <li> {@link  libsbmlConstants#LIBSBML_UNEXPECTED_ATTRIBUTE LIBSBML_UNEXPECTED_ATTRIBUTE }
   *
   * </ul> <p>
   * @note The attribute 'persistent' is available in SBML Level&nbsp;3
   * Version&nbsp;1 Core, but is not present in lower Levels of SBML.
   */ public
 int setPersistent(boolean persistent) {
    return libsbmlJNI.Trigger_setPersistent(swigCPtr, this, persistent);
  }

  
/**
   * Returns the libSBML type code of this object instance.
   <p>
   * <p>
 * LibSBML attaches an identifying code to every kind of SBML object.  These
 * are integer constants known as <em>SBML type codes</em>.  The names of all
 * the codes begin with the characters &ldquo;<code>SBML_</code>&rdquo;. 
 * In the Java language interface for libSBML, the
 * type codes are defined as static integer constants in the interface class
 * {@link libsbmlConstants}.    Note that different Level&nbsp;3 
 * package plug-ins may use overlapping type codes; to identify the package
 * to which a given object belongs, call the <code>getPackageName()</code>
 * method on the object.
   <p>
   * @return the SBML type code for this object:
   * {@link  libsbmlConstants#SBML_TRIGGER SBML_TRIGGER} (default).
   <p>
   * <p>
 * @warning <span class='warning'>The specific integer values of the possible
 * type codes may be reused by different Level&nbsp;3 package plug-ins.
 * Thus, to identifiy the correct code, <strong>it is necessary to invoke
 * both getTypeCode() and getPackageName()</strong>.</span>
   <p>
   * @see #getElementName()
   * @see #getPackageName()
   */ public
 int getTypeCode() {
    return libsbmlJNI.Trigger_getTypeCode(swigCPtr, this);
  }

  
/**
   * Returns the XML element name of this object, which for {@link Trigger}, is
   * always <code>'trigger'.</code>
   <p>
   * @return the name of this element, i.e., <code>'trigger'.</code> 
   */ public
 String getElementName() {
    return libsbmlJNI.Trigger_getElementName(swigCPtr, this);
  }

  
/**
   * Renames all the <code>SIdRef</code> attributes on this element, including any
   * found in MathML.
   <p>
   * <p>
 * In SBML, object identifiers are of a data type called <code>SId</code>.
 * In SBML Level&nbsp;3, an explicit data type called <code>SIdRef</code> was
 * introduced for attribute values that refer to <code>SId</code> values; in
 * previous Levels of SBML, this data type did not exist and attributes were
 * simply described to as 'referring to an identifier', but the effective
 * data type was the same as <code>SIdRef</code>in Level&nbsp;3.  These and
 * other methods of libSBML refer to the type <code>SIdRef</code> for all
 * Levels of SBML, even if the corresponding SBML specification did not
 * explicitly name the data type.
   <p>
   * This method works by looking at all attributes and (if appropriate)
   * mathematical formulas, comparing the identifiers to the value of 
   * <code>oldid</code>.  If any matches are found, the matching identifiers are replaced
   * with <code>newid</code>.  The method does <em>not</em> descend into child elements.
   <p>
   * @param oldid the old identifier
   * @param newid the new identifier
   */ public
 void renameSIdRefs(String oldid, String newid) {
    libsbmlJNI.Trigger_renameSIdRefs(swigCPtr, this, oldid, newid);
  }

  
/**
   * Renames all the <code>UnitSIdRef</code> attributes on this element.
   <p>
   * <p>
 * In SBML, unit definitions have identifiers of type <code>UnitSId</code>.  In
 * SBML Level&nbsp;3, an explicit data type called <code>UnitSIdRef</code> was
 * introduced for attribute values that refer to <code>UnitSId</code> values; in
 * previous Levels of SBML, this data type did not exist and attributes were
 * simply described to as 'referring to a unit identifier', but the effective
 * data type was the same as <code>UnitSIdRef</code> in Level&nbsp;3.  These and
 * other methods of libSBML refer to the type <code>UnitSIdRef</code> for all
 * Levels of SBML, even if the corresponding SBML specification did not
 * explicitly name the data type.
   <p>
   * This method works by looking at all unit identifier attribute values
   * (including, if appropriate, inside mathematical formulas), comparing the
   * unit identifiers to the value of <code>oldid</code>.  If any matches are found,
   * the matching identifiers are replaced with <code>newid</code>.  The method does
   * <em>not</em> descend into child elements.
   <p>
   * @param oldid the old identifier
   * @param newid the new identifier
   */ public
 void renameUnitSIdRefs(String oldid, String newid) {
    libsbmlJNI.Trigger_renameUnitSIdRefs(swigCPtr, this, oldid, newid);
  }

  
/**
   * Replace all nodes with the name 'id' from the child 'math' object with the provided function. 
   <p>
   * @internal
   */ public
 void replaceSIDWithFunction(String id, ASTNode function) {
    libsbmlJNI.Trigger_replaceSIDWithFunction(swigCPtr, this, id, ASTNode.getCPtr(function), function);
  }

  
/**
   * Predicate returning <code>true</code> if
   * all the required elements for this {@link Trigger} object
   * have been set.
   <p>
   * @note The required elements for a {@link Trigger} object are:
   * <ul>
   * <li> 'math'
   *
   * </ul> <p>
   * @return a boolean value indicating whether all the required
   * elements for this object have been defined.
   */ public
 boolean hasRequiredElements() {
    return libsbmlJNI.Trigger_hasRequiredElements(swigCPtr, this);
  }

  
/**
   * Predicate returning <code>true</code> if
   * all the required attributes for this {@link Trigger} object
   * have been set.
   <p>
   * @note The required attributes for a {@link Trigger} object are:
   * <ul>
   * <li> 'persistent' (required in SBML Level&nbsp;3)
   * <li> 'initialValue' (required in SBML Level&nbsp;3)
   *
   * </ul> <p>
   * @return a boolean value indicating whether all the required
   * attributes for this object have been defined.
   */ public
 boolean hasRequiredAttributes() {
    return libsbmlJNI.Trigger_hasRequiredAttributes(swigCPtr, this);
  }

  
/**
   * Finds this {@link Trigger}'s {@link Event} parent and calls unsetTrigger() on it, indirectly deleting itself.  Overridden from the {@link SBase} function since the parent is not a {@link ListOf}.
   <p>
   * @return integer value indicating success/failure of the
   * function.   The possible values
   * returned by this function are:
   * <ul>
   * <li> {@link  libsbmlConstants#LIBSBML_OPERATION_SUCCESS LIBSBML_OPERATION_SUCCESS }
   * <li> {@link  libsbmlConstants#LIBSBML_OPERATION_FAILED LIBSBML_OPERATION_FAILED }
   * </ul>
   */ public
 int removeFromParentAndDelete() {
    return libsbmlJNI.Trigger_removeFromParentAndDelete(swigCPtr, this);
  }

}