Hi Daniel,<div><br></div><div>If I understood your workflow correctly, you are in a case where:</div><div> - you have 3 steps: A, B and C.</div><div> - Initiale step is A, </div><div> - To go from A to B, you need to validate A</div>

<div> - to go from B to C you need to validate B</div><div> - to go from B to A you need to validate B.</div><div><br></div><div>I can see the last case possible (it's probably unintuitive to the user as it is different from typical workflows), a usecase description would help. You are asking for a branchy workflow instead of a linear workflow.</div>

<div><br></div><div>You need to create a connection "from B to A" in addition to "from A to B". So that B step has 1 income(:A) and  2 outcomes (: C and A). When you are in step B, you would need to validate to be able to go to A or C.</div>

<div><br></div><div>Then the question is: would adding a step be feasible with the current implementation of ctkWorkflow ? What would be the changes to bring?</div><div><br></div><div>Before going any further, it is probably worthwhile to ensure that validating B to go from B to A makes sense.</div>

<div><br></div><div>Julien.</div><div><br><div class="gmail_quote">On Fri, Jul 22, 2011 at 11:30 AM, Danielle Pace <span dir="ltr"><<a href="mailto:danielle.pace@kitware.com">danielle.pace@kitware.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi Daniel,<div><br></div><div>Validation is not supposed to occur when going backwards.</div><div><br></div><div>One would go backwards typically to correct a mistake made, or to tune parameters at a previous step to make the current step run better.  The user would often be midway through a step before deciding to go backwards - you wouldn't want to make them "pass" that step before you can go back.</div>


<div><br></div><div>Imagine this example workflow:</div><div>1) Image sharpening - tune parameters and perform edge enhancement - validation is that parameters are ok</div><div>2) Segmentation - tune segmentation parameters and perform segmentation - validation is that an output label map exists and has some specific properties</div>


<div>3) Do something with the label map.</div><div><br></div><div>If you are on step 2, and tried some segmentations that didn't produce valid label maps, you might decide to go back to step 1 and do some more sharpening.  You wouldn't want to have to validate step 2 before going back to step 1.</div>


<div><br></div><div>So - if you have a specific usecase where it makes sense to validate when going backwards, you would have to modify your onExit() for that step - and make sure that the validation passed before going backwards.  It'll likely require a bit of work.  I'd make sure that it truly makes sense to validate going backwards in your workflow.</div>


<div><br></div><div>Hope that helps - please let me know if anything is still unclear.</div><div><br></div><div>Thanks,<br><br>Danielle</div><div><br></div><div><br></div><div><br></div><div><div><div></div><div class="h5">

<br><div class="gmail_quote">On Thu, Jul 21, 2011 at 4:44 PM, Daniel Haehn <span dir="ltr"><<a href="mailto:haehn@bwh.harvard.edu" target="_blank">haehn@bwh.harvard.edu</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Stephen,<br>
<br>
sorry for the confusion :)<br>
<br>
The validate() method considers only the current step. Going backwards<br>
or forwards should only be possible if validation succeeds. If<br>
validation fails the input can be fixed in the current step. This<br>
means you can never get stuck.<br>
<br>
For now, I will call validate() on the onExit() method. This will work<br>
temporary for me.<br>
<br>
Thx,<br>
Daniel<br>
<br>
On Thu, Jul 21, 2011 at 4:34 PM, Stephen Aylward<br>
<div><div></div><div><<a href="mailto:stephen.aylward@kitware.com" target="_blank">stephen.aylward@kitware.com</a>> wrote:<br>
> Hi,<br>
><br>
> Ok - I might not be following this - let me check on the call sequence....<br>
><br>
> s<br>
><br>
> On Thu, Jul 21, 2011 at 4:23 PM, Daniel Haehn <<a href="mailto:haehn@bwh.harvard.edu" target="_blank">haehn@bwh.harvard.edu</a>> wrote:<br>
>> Hi Stephen,<br>
>><br>
>> I think the validate() method should only validate the current step.<br>
>> Then you would be stuck at a step before you fix the input before you<br>
>> can go back or forward. This would make sense to me.<br>
>><br>
>> Daniel<br>
>><br>
>> On Thu, Jul 21, 2011 at 4:16 PM, Stephen Aylward<br>
>> <<a href="mailto:stephen.aylward@kitware.com" target="_blank">stephen.aylward@kitware.com</a>> wrote:<br>
>>> Validating when going backwards seems odd to me.   It might result in<br>
>>> getting stuck in a state from which you cannot exit because of<br>
>>> something done in a previous state which you cannot fix since you<br>
>>> cannot go back to the previous state.<br>
>>><br>
>>> Maybe there should be a "StepBack" function that is called - and in<br>
>>> your case it could call "validate"?<br>
>>><br>
>>> s<br>
>>><br>
>>> On Thu, Jul 21, 2011 at 4:12 PM, Daniel Haehn <<a href="mailto:haehn@bwh.harvard.edu" target="_blank">haehn@bwh.harvard.edu</a>> wrote:<br>
>>>> Hi guys,<br>
>>>><br>
>>>> I am working on a wizard using a ctkWorkflow and the corresponding<br>
>>>> widget in Python.<br>
>>>><br>
>>>> It seems that the validate() function of a step is only executed when<br>
>>>> going forward in the workflow. E.g. when I go back from step2 to<br>
>>>> step1, the validation code is skipped.<br>
>>>><br>
>>>> Is this correct or am I doing something wrong? I think it would make<br>
>>>> sense to validate anytime one exists the step.<br>
>>>><br>
>>>> Cheers,<br>
>>>> Daniel<br>
>>>> _______________________________________________<br>
>>>> Ctk-developers mailing list<br>
>>>> <a href="mailto:Ctk-developers@commontk.org" target="_blank">Ctk-developers@commontk.org</a><br>
>>>> <a href="http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers" target="_blank">http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers</a><br>
>>>><br>
>>><br>
>>><br>
>>><br>
>>> --<br>
>>><br>
>>> ==============================<br>
>>> Stephen R. Aylward, Ph.D.<br>
>>> Director of Medical Imaging Research<br>
>>> Kitware, Inc. - North Carolina Office<br>
>>> <a href="http://www.kitware.com" target="_blank">http://www.kitware.com</a><br>
>>> stephen.aylward (Skype)<br>
>>> <a href="tel:%28919%29%20969-6990%20x300" value="+19199696990" target="_blank">(919) 969-6990 x300</a><br>
>>><br>
>><br>
><br>
><br>
><br>
> --<br>
><br>
> ==============================<br>
> Stephen R. Aylward, Ph.D.<br>
> Director of Medical Imaging Research<br>
> Kitware, Inc. - North Carolina Office<br>
> <a href="http://www.kitware.com" target="_blank">http://www.kitware.com</a><br>
> stephen.aylward (Skype)<br>
> <a href="tel:%28919%29%20969-6990%20x300" value="+19199696990" target="_blank">(919) 969-6990 x300</a><br>
><br>
_______________________________________________<br>
Ctk-developers mailing list<br>
<a href="mailto:Ctk-developers@commontk.org" target="_blank">Ctk-developers@commontk.org</a><br>
<a href="http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers" target="_blank">http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers</a><br>
</div></div></blockquote></div><br><br clear="all"><br></div></div>-- <br>Danielle Pace, M.ESc.<br>Research and Development Engineer<div class="im"><br>Kitware Inc.,<br>North Carolina Office<div><br></div></div><div><a href="http://www.kitware.com" target="_blank">www.kitware.com</a></div>



<div><a href="tel:919-969-6990%20X%20319" value="+19199696990" target="_blank">919-969-6990 X 319</a></div><br>
</div>
<br>_______________________________________________<br>
Ctk-developers mailing list<br>
<a href="mailto:Ctk-developers@commontk.org">Ctk-developers@commontk.org</a><br>
<a href="http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers" target="_blank">http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers</a><br>
<br></blockquote></div><br></div>