Button Group |
---|
Button Hyperlink |
---|
title | Previous |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Dates+and+Clocks |
---|
|
Button Hyperlink |
---|
title | Up |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Advanced+Topics |
---|
|
Button Hyperlink |
---|
title | Next |
---|
type | standard |
---|
url | https://confluence.ecmwf.int/display/ECFLOW/Indentation |
---|
|
| variables can be used to generate <a href="/wiki/display/ECFLOW/Glossary#term-trigger"><em >trigger</em></a> <a href="/wiki/display/ECFLOW/Glossary#term-dependencies"><em >dependencies</em></a>.</div>
<div >Imagine that we want to chain the families f1 to f6, so that f2 runs after f1, f3 after f2 and so on.</div>
<div >The following will do the trick:</div>
</div>
<div ><div ><pre><span >def</span> <span >create_seqeuntial_suite</span><span >(</span><span >name</span><span >)</span> <span >:</span>
<span >suite</span> <span >=</span> <span >ecflow</span><span >.</span><span >Suite</span><span >(</span><span >name</span><span >)</span>
<span >for</span> <span >i</span> <span >in</span> <span >range</span><span >(</span><span >1</span><span >,</span><span >7</span><span >)</span> <span >:</span>
<span >fam</span> <span >=</span> <span >suite</span><span >.</span><span >add_family</span><span >(</span><span >"f"</span> <span >+</span> <span >str</span><span >(</span><span >i</span><span >))</span>
<span >if</span> <span >i</span> <span >!=</span> <span >1</span><span >:</span>
<span >fam</span><span >.</span><span >add_trigger</span><span >(</span><span >"f"</span> <span >+</span> <span >str</span><span >(</span><span >i</span><span >-</span><span >1</span><span >)</span> <span >+</span> <span >" == complete"</span><span >)</span> <span ># or fam.add_family( "f%d == complete" % (i-1) )</span>
<span >for</span> <span >t</span> <span >in</span> <span >(</span> <span >"a"</span><span >,</span> <span >"b"</span><span >,</span> <span >"c"</span><span >,</span> <span >"d"</span><span >,</span> <span >"e"</span> <span >)</span> <span >:</span>
<span >fam</span><span >.</span><span >add_task</span><span >(</span><span >t</span><span >)</span>
<span >return</span> <span >suite</span>
</pre></div>
</div>
<div >
<div >The following python code shows <strong>examples</strong> of adding the various attributes to a <a href="/wiki/display/ECFLOW/Glossary#term-node"><em >node</em></a> tree.</div>
<div >For a detailed explanation please consult the user manual.</div>
</div>
<div ><div ><pre><span ># provides *examples* of add adding node attributes using the python API</span>
<span ># hence does *not* represent a real suite definition</span>
<span >from</span> <span >ecflow</span> <span >import</span> <span >*</span>
<span >def</span> <span >list_to_int_vec</span><span >(</span> <span >thePythonList</span> <span >):</span>
<span >"""Converts a python list to a C++ IntVec in ecflow extension """</span>
<span >intvec</span> <span >=</span> <span >IntVec</span><span >()</span>
<span >for</span> <span >theInt</span> <span >in</span> <span >thePythonList</span><span >:</span>
<span >IntVec</span><span >.</span><span >append</span><span >(</span><span >intvec</span><span >,</span><span >theInt</span><span >)</span>
<span >return</span> <span >intvec</span>
<span >def</span> <span >list_to_str_vec</span><span >(</span> <span >theList</span> <span >):</span>
<span >"""Converts a python list to a C++ StrVec in ecflow extension"""</span>
<span >strvec</span> <span >=</span> <span >StrVec</span><span >()</span>
<span >for</span> <span >theStr</span> <span >in</span> <span >theList</span><span >:</span>
<span >StrVec</span><span >.</span><span >append</span><span >(</span><span >strvec</span><span >,</span><span >theStr</span><span >)</span>
<span >return</span> <span >strvec</span><span >;</span>
<span >if</span> <span >__name__</span> <span >==</span> <span >"__main__"</span><span >:</span>
<span ># adding variables </span>
<span >suite</span> <span >=</span> <span >Suite</span><span >(</span><span >"s1"</span><span >);</span>
<span >suite</span><span >.</span><span >add_variable</span><span >(</span><span >Variable</span><span >(</span><span >"ECF_HOME"</span><span >,</span><span >"/tmp/"</span><span >))</span>
<span >suite</span><span >.</span><span >add_variable</span><span >(</span><span >"ECF_URL_CMD"</span><span >,</span> <span >"${BROWSER:=firefox} -remote 'openURL(</span><span >%E</span><span >CF_URL_BASE%/</span><span >%E</span><span >CF_URL%)'"</span><span >)</span>
<span ># adding limits</span>
<span >suite</span><span >.</span><span >add_limit</span><span >(</span> <span >Limit</span><span >(</span><span >"limitName1"</span><span >,</span> <span >10</span><span >)</span> <span >)</span>
<span >suite</span><span >.</span><span >add_limit</span><span >(</span> <span >"limitName3"</span><span >,</span> <span >10</span> <span >)</span>
<span ># adding inlimits</span>
<span >suite</span><span >.</span><span >add_inlimit</span><span >(</span> <span >InLimit</span><span >(</span><span >"limitName1"</span><span >,</span><span >"/s1/f1"</span><span >,</span><span >2</span><span >)</span> <span >)</span>
<span >suite</span><span >.</span><span >add_inlimit</span><span >(</span> <span >"limitName3"</span><span >,</span><span >"/s1/f1"</span><span >,</span><span >2</span><span >)</span>
<span ># add short triggers and complete</span>
<span >task</span> <span >=</span> <span >Task</span><span >(</span><span >"task"</span><span >)</span>
<span >task</span><span >.</span><span >add_trigger</span><span >(</span> <span >"t2 == active"</span> <span >)</span>
<span >task</span><span >.</span><span >add_complete</span><span >(</span> <span >"t2 == complete"</span> <span >)</span>
<span ># add long triggers and complete, in example below 'True' mean AND and 'False' means OR</span>
<span >task</span> <span >=</span> <span >Task</span><span >(</span><span >"trigger"</span><span >)</span>
<span >task</span><span >.</span><span >add_part_trigger</span><span >(</span> <span >"t1 == complete"</span> <span >)</span>
<span >task</span><span >.</span><span >add_part_trigger</span><span >(</span> <span >"t2 == active"</span><span >,</span><span >True</span> <span >)</span> <span ># for long and/or expressions, subsequent expr must be and/or</span>
<span >task</span><span >.</span><span >add_part_complete</span><span >(</span> <span >"t3 == complete"</span> <span >)</span>
<span >task</span><span >.</span><span >add_part_complete</span><span >(</span> <span >"t4 == active"</span><span >,</span><span >False</span><span >)</span> <span ># for long and/or expressions, subsequent expr must be and/or</span>
<span ># add events</span>
<span >task</span><span >.</span><span >add_event</span><span >(</span> <span >Event</span><span >(</span><span >1</span><span >)</span> <span >)</span>
<span >task</span><span >.</span><span >add_event</span><span >(</span> <span >2</span> <span >)</span>
<span >task</span><span >.</span><span >add_event</span><span >(</span> <span >Event</span><span >(</span><span >10</span><span >,</span><span >"Eventname"</span><span >)</span> <span >)</span>
<span >task</span><span >.</span><span >add_event</span><span >(</span> <span >10</span><span >,</span><span >"Eventname2"</span> <span >)</span>
<span >task</span><span >.</span><span >add_event</span><span >(</span> <span >"fred"</span> <span >)</span>
<span ># add meter</span>
<span >task</span><span >.</span><span >add_meter</span><span >(</span> <span >Meter</span><span >(</span><span >"metername1"</span><span >,</span><span >0</span><span >,</span><span >100</span><span >,</span><span >50</span><span >)</span> <span >)</span>
<span >task</span><span >.</span><span >add_meter</span><span >(</span> <span >"metername3"</span><span >,</span><span >0</span><span >,</span><span >100</span> <span >)</span>
<span ># add label</span>
<span >task</span><span >.</span><span >add_label</span><span >(</span> <span >Label</span><span >(</span><span >"label_name1"</span><span >,</span> <span >"value"</span><span >)</span> <span >)</span>
<span >task</span><span >.</span><span >add_label</span><span >(</span> <span >"label_name3"</span><span >,</span> <span >"value"</span> <span >)</span>
<span ># add Repeat. A node can only have one repeat, hence we delete the repeat before, adding another</span>
<span >task</span><span >.</span><span >add_repeat</span><span >(</span> <span >RepeatInteger</span><span >(</span><span >"integer"</span><span >,</span><span >0</span><span >,</span><span >100</span><span >,</span><span >2</span><span >)</span> <span >);</span>
<span >task</span><span >.</span><span >delete_repeat</span><span >();</span>
<span >task</span><span >.</span><span >add_repeat</span><span >(</span> <span >RepeatEnumerated</span><span >(</span><span >"enum"</span><span >,</span><span >list_to_str_vec</span><span >(</span> <span >[</span><span >"red"</span><span >,</span> <span >"green"</span><span >,</span> <span >"blue"</span> <span >]</span> <span >))</span> <span >);</span>
<span >task</span><span >.</span><span >delete_repeat</span><span >();</span>
<span >task</span><span >.</span><span >add_repeat</span><span >(</span> <span >RepeatDate</span><span >(</span><span >"date"</span><span >,</span><span >20100111</span><span >,</span><span >20100115</span><span >,</span><span >2</span><span >)</span> <span >)</span>
<span >task</span><span >.</span><span >delete_repeat</span><span >();</span>
<span >task</span><span >.</span><span >add_repeat</span><span >(</span> <span >RepeatString</span><span >(</span><span >"string"</span><span >,</span> <span >list_to_str_vec</span><span >(</span> <span >[</span><span >"a"</span><span >,</span> <span >"b"</span><span >,</span> <span >"c"</span> <span >]</span> <span >))</span> <span >)</span>
<span >task</span><span >.</span><span >delete_repeat</span><span >();</span>
<span ># create a time series, used for adding time and today and cron</span>
<span >start</span> <span >=</span> <span >TimeSlot</span><span >(</span><span >0</span><span >,</span><span >0</span><span >)</span>
<span >finish</span> <span >=</span> <span >TimeSlot</span><span >(</span><span >23</span><span >,</span><span >0</span><span >)</span>
<span >incr</span> <span >=</span> <span >TimeSlot</span><span >(</span><span >0</span><span >,</span><span >30</span><span >)</span>
<span >time_series</span> <span >=</span> <span >TimeSeries</span><span >(</span> <span >start</span><span >,</span> <span >finish</span><span >,</span> <span >incr</span><span >,</span> <span >True</span><span >);</span> <span ># True means relative to suite start</span>
<span ># add a today</span>
<span >task</span><span >.</span><span >add_today</span><span >(</span> <span >"00:30"</span> <span >)</span>
<span >task</span><span >.</span><span >add_today</span><span >(</span> <span >"+00:30"</span> <span >)</span>
<span >task</span><span >.</span><span >add_today</span><span >(</span> <span >"+00:30 20:00 01:00"</span> <span >)</span>
<span >task</span><span >.</span><span >add_today</span><span >(</span> <span >Today</span><span >(</span> <span >time_series</span><span >)</span> <span >)</span>
<span >task</span><span >.</span><span >add_today</span><span >(</span> <span >Today</span><span >(</span> <span >0</span><span >,</span><span >10</span> <span >))</span>
<span >task</span><span >.</span><span >add_today</span><span >(</span> <span >0</span><span >,</span> <span >59</span><span >,</span> <span >True</span> <span >)</span>
<span >task</span><span >.</span><span >add_today</span><span >(</span> <span >Today</span><span >(</span><span >TimeSlot</span><span >(</span><span >20</span><span >,</span><span >10</span><span >))</span> <span >)</span>
<span >task</span><span >.</span><span >add_today</span><span >(</span> <span >Today</span><span >(</span><span >TimeSlot</span><span >(</span><span >20</span><span >,</span><span >20</span><span >),</span><span >False</span><span >))</span>
<span ># add time</span>
<span >task</span><span >.</span><span >add_time</span><span >(</span> <span >"00:30"</span> <span >)</span>
<span >task</span><span >.</span><span >add_time</span><span >(</span> <span >"+00:30"</span> <span >)</span>
<span >task</span><span >.</span><span >add_time</span><span >(</span> <span >"+00:30 20:00 01:00"</span> <span >)</span>
<span >task</span><span >.</span><span >add_time</span><span >(</span> <span >Time</span><span >(</span><span >time_series</span> <span >))</span>
<span >task</span><span >.</span><span >add_time</span><span >(</span> <span >Time</span><span >(</span> <span >0</span><span >,</span><span >10</span> <span >))</span>
<span >task</span><span >.</span><span >add_time</span><span >(</span> <span >0</span><span >,</span> <span >59</span><span >,</span> <span >True</span><span >)</span>
<span >task</span><span >.</span><span >add_time</span><span >(</span> <span >Time</span><span >(</span><span >TimeSlot</span><span >(</span><span >20</span><span >,</span><span >10</span><span >))</span> <span >)</span>
<span >task</span><span >.</span><span >add_time</span><span >(</span> <span >Time</span><span >(</span><span >TimeSlot</span><span >(</span><span >20</span><span >,</span><span >20</span><span >),</span><span >False</span><span >))</span>
<span ># add date</span>
<span >for</span> <span >i</span> <span >in</span> <span >[</span> <span >1</span><span >,</span><span >2</span><span >,</span><span >4</span><span >,</span><span >8</span><span >,</span><span >16</span> <span >]</span> <span >:</span>
<span >task</span><span >.</span><span >add_date</span><span >(</span> <span >i</span><span >,</span><span >0</span><span >,</span><span >0</span><span >)</span> <span ># day,month,year, where corresponding 0 means any possible day,month, year</span>
<span >task</span><span >.</span><span >add_date</span><span >(</span> <span >Date</span><span >(</span><span >1</span><span >,</span><span >1</span><span >,</span><span >2010</span><span >))</span>
<span ># add day</span>
<span >task</span><span >.</span><span >add_day</span><span >(</span> <span >Day</span><span >(</span><span >Days</span><span >.</span><span >sunday</span><span >))</span>
<span >task</span><span >.</span><span >add_day</span><span >(</span> <span >Days</span><span >.</span><span >monday</span><span >)</span>
<span >task</span><span >.</span><span >add_day</span><span >(</span> <span >"tuesday"</span><span >)</span>
<span ># create cron, showing different ways adding the time, to a cron attribute</span>
<span >cron</span> <span >=</span> <span >Cron</span><span >()</span>
<span >cron</span><span >.</span><span >set_week_days</span><span >(</span> <span >list_to_int_vec</span><span >(</span> <span >[</span><span >0</span><span >,</span><span >1</span><span >,</span><span >2</span><span >,</span><span >3</span><span >,</span><span >4</span><span >,</span><span >5</span><span >,</span><span >6</span><span >]</span> <span >)</span> <span >)</span>
<span >cron</span><span >.</span><span >set_days_of_month</span><span >(</span> <span >list_to_int_vec</span><span >(</span> <span >[</span><span >1</span><span >,</span><span >2</span><span >,</span><span >3</span><span >,</span><span >4</span><span >,</span><span >5</span><span >,</span><span >6</span><span >]</span> <span >)</span> <span >)</span>
<span >cron</span><span >.</span><span >set_months</span><span >(</span> <span >list_to_int_vec</span><span >(</span> <span >[</span><span >1</span><span >,</span><span >2</span><span >,</span><span >3</span><span >,</span><span >4</span><span >,</span><span >5</span><span >,</span><span >6</span><span >]</span> <span >)</span> <span >)</span>
<span >start</span> <span >=</span> <span >TimeSlot</span><span >(</span><span >0</span><span >,</span><span >0</span><span >)</span>
<span >finish</span> <span >=</span> <span >TimeSlot</span><span >(</span><span >23</span><span >,</span><span >0</span><span >)</span>
<span >incr</span> <span >=</span> <span >TimeSlot</span><span >(</span><span >0</span><span >,</span><span >30</span><span >)</span>
<span >ts</span> <span >=</span> <span >TimeSeries</span><span >(</span> <span >start</span><span >,</span> <span >finish</span><span >,</span> <span >incr</span><span >,</span> <span >True</span><span >);</span> <span ># True means relative to suite start</span>
<span >cron</span><span >.</span><span >set_time_series</span><span >(</span> <span >ts</span> <span >)</span>
<span >cron1</span> <span >=</span> <span >Cron</span><span >()</span>
<span >cron1</span><span >.</span><span >set_week_days</span><span >(</span> <span >list_to_int_vec</span><span >(</span> <span >[</span><span >0</span><span >,</span><span >1</span><span >,</span><span >2</span><span >,</span><span >3</span><span >,</span><span >4</span><span >,</span><span >5</span><span >,</span><span >6</span><span >]</span> <span >)</span> <span >)</span>
<span >cron1</span><span >.</span><span >set_time_series</span><span >(</span> <span >1</span><span >,</span><span >30</span><span >,</span> <span >True</span> <span >)</span>
<span >cron2</span> <span >=</span> <span >Cron</span><span >()</span>
<span >cron2</span><span >.</span><span >set_week_days</span><span >(</span> <span >list_to_int_vec</span><span >(</span> <span >[</span><span >0</span><span >,</span><span >1</span><span >,</span><span >2</span><span >,</span><span >3</span><span >,</span><span >4</span><span >,</span><span >5</span><span >,</span><span >6</span><span >]</span> <span >)</span> <span >)</span>
<span >cron2</span><span >.</span><span >set_time_series</span><span >(</span> <span >"00:30 01:30 00:01"</span> <span >)</span>
<span >cron3</span> <span >=</span> <span >Cron</span><span >()</span>
<span >cron3</span><span >.</span><span >set_week_days</span><span >(</span> <span >list_to_int_vec</span><span >(</span> <span >[</span><span >0</span><span >,</span><span >1</span><span >,</span><span >2</span><span >,</span><span >3</span><span >,</span><span >4</span><span >,</span><span >5</span><span >,</span><span >6</span><span >]</span> <span >)</span> <span >)</span>
<span >cron3</span><span >.</span><span >set_time_series</span><span >(</span> <span >"+00:30"</span> <span >)</span>
<span ># add auto cancel</span>
<span >t1</span> <span >=</span> <span >Task</span><span >(</span><span >"t1"</span><span >);</span>
<span >t3</span> <span >=</span> <span >Task</span><span >(</span><span >"t3"</span><span >)</span>
<span >t4</span> <span >=</span> <span >Task</span><span >(</span><span >"t4"</span><span >)</span>
<span >t5</span> <span >=</span> <span >Task</span><span >(</span><span >"t5"</span><span >)</span>
<span >t1</span><span >.</span><span >add_autocancel</span><span >(</span> <span >3</span> <span >)</span> <span ># 3 days</span>
<span >t3</span><span >.</span><span >add_autocancel</span><span >(</span> <span >20</span><span >,</span><span >10</span><span >,</span><span >True</span> <span >)</span> <span ># hour,minutes,relative</span>
<span >t4</span><span >.</span><span >add_autocancel</span><span >(</span> <span >TimeSlot</span><span >(</span><span >10</span><span >,</span><span >10</span><span >),</span><span >True</span> <span >)</span> <span ># hour,minutes,relative</span>
<span >t5</span><span >.</span><span >add_autocancel</span><span >(</span> <span >Autocancel</span><span >(</span><span >1</span><span >,</span><span >10</span><span >,</span><span >True</span><span >)</span> <span >)</span> <span ># hour,minutes,relative</span>
<span ># add late</span>
<span >late</span> <span >=</span> <span >Late</span><span >()</span>
<span >late</span><span >.</span><span >submitted</span><span >(</span> <span >TimeSlot</span><span >(</span><span >20</span><span >,</span><span >10</span><span >)</span> <span >)</span>
<span >late</span><span >.</span><span >active</span><span >(</span> <span >TimeSlot</span><span >(</span><span >20</span><span >,</span><span >10</span><span >))</span>
<span >late</span><span >.</span><span >complete</span><span >(</span> <span >TimeSlot</span><span >(</span><span >20</span><span >,</span><span >10</span><span >),</span><span >True</span><span >)</span>
<span >task</span><span >.</span><span >add_late</span><span >(</span> <span >late</span> <span >)</span>
<span >late</span> <span >=</span> <span >Late</span><span >()</span>
<span >late</span><span >.</span><span >submitted</span><span >(</span> <span >20</span><span >,</span><span >10</span> <span >)</span>
<span >late</span><span >.</span><span >active</span><span >(</span> <span >20</span><span >,</span><span >10</span> <span >)</span>
<span >late</span><span >.</span><span >complete</span><span >(</span> <span >20</span><span >,</span><span >10</span><span >,</span><span >True</span><span >)</span>
<span >t1</span><span >.</span><span >add_late</span><span >(</span> <span >late</span> <span >)</span>
<span ># add defstatus, last one set takes effect</span>
<span >task</span><span >.</span><span >add_defstatus</span><span >(</span> <span >DState</span><span >.</span><span >complete</span> <span >)</span>
<span >task</span><span >.</span><span >add_defstatus</span><span >(</span> <span >DState</span><span >.</span><span >queued</span> <span >)</span>
<span >task</span><span >.</span><span >add_defstatus</span><span >(</span> <span >DState</span><span >.</span><span >aborted</span> <span >)</span>
<span >task</span><span >.</span><span >add_defstatus</span><span >(</span> <span >DState</span><span >.</span><span >submitted</span> <span >)</span>
<span >task</span><span >.</span><span >add_defstatus</span><span >(</span> <span >DState</span><span >.</span><span >suspended</span> <span >)</span>
<span >task</span><span >.</span><span >add_defstatus</span><span >(</span> <span >DState</span><span >.</span><span >active</span> <span >)</span>
<span ># add clock,</span>
<span >clock</span> <span >=</span> <span >Clock</span><span >(</span><span >1</span><span >,</span><span >1</span><span >,</span><span >2010</span><span >,</span><span >False</span><span >);</span> <span ># day,month, year, hybrid(true), real(False)</span>
<span >clock</span><span >.</span><span >set_gain</span><span >(</span><span >1</span><span >,</span><span >10</span><span >,</span><span >True</span><span >);</span> <span ># True means positive gain</span>
<span >suite</span> <span >=</span> <span >Suite</span><span >(</span><span >"suite"</span><span >)</span>
<span >suite</span><span >.</span><span >add_clock</span><span >(</span><span >clock</span><span >);</span>
<span >clock</span> <span >=</span> <span >Clock</span><span >(</span><span >1</span><span >,</span><span >1</span><span >,</span><span >2011</span><span >,</span><span >True</span><span >);</span> <span ># day,month,year,hybrid</span>
<span >clock</span><span >.</span><span >set_gain_in_seconds</span><span >(</span><span >12</span><span >,</span><span >True</span><span >);</span>
<span >s1</span> <span >=</span> <span >Suite</span><span >(</span><span >"s1"</span><span >)</span>
<span >s1</span><span >.</span><span >add_clock</span><span >(</span><span >clock</span><span >)</span>
</pre></div>
</div>
</div>
|