Dear Volkmar, cc list,
thanks a bunch for your elaborate answer. With these pointers it seems I
can do what I intend to, I will play around with it a little more.
The spm8 batching system seems quite elegant, kudos to those involved.
Dependencies can make automation a lot easier.
A more extended section on it in the SPM8 manual would definately help
developers.
Cheers,
Bas
Op 01-06-11 11:26, Volkmar Glauche schreef:
> Hi Bas& list,
>
> let me go through your questions:
> 1) in the current implementation, the batch job itself is a struct/cell array but not an object. Dependencies are objects, but currently each of them lives its own life in a matlabbatch variable. Their actual purpose (linking outputs to inputs) only gets into action when a job is loaded into cfg_util/spm_jobman. You can hand spm_jobman or cfg_util a cell array of jobs (as filenames, matlabbatch variables or a mixture of both). This will correctly concatenate them and update dependencies in much the same way as it happens when you load multiple job files at once into the GUI. Note that you can only create dependencies within each job file/variable, but not across different parts of the concatenated job. If you were to concatenate jobs outside the batch system, you will break dependencies in a bad way.
>
> 2) You would want to interface to cfg_util in this case (after starting up SPM properly, of course). There is an easy and a more difficult part of this exercise, though. The easy thing is to initialise your job and get all virtual outputs:
>
> [job_id modids] = cfg_util('initjob', ...); ill in your (cell array of) jobs
>
> The first output argument is your jobid. You will need this every time you want to refer to your job (for e.g. running it, getting virtual outputs or real outputs). The second output argument is a cell list of module ids, one for each module in your job. This is valuable if you want to reference just a certain module in your job.
>
> Then, you would do
>
> voutputs = cfg_util('getAllVOutputs', job_id);
>
> This returns a cell list of virtual outputs, one cell item per module. These are dependency objects, that can be used as inputs later on. Note, that modules will only return virtual outputs if their input structure is completely specified. E.g. if you had a "Realign: Estimate" module, it would only return a dependency if it has at least one session specified.
>
> Using the dependencies as inputs can become more difficult than getting them out of the job. It will be easiest, when your batch has "<-X"/"<UNDEFINED>" marks wherever you want to put in any input programmatically. You can then use
>
> sts = cfg_util('filljob', job_id, ...);
>
> In the input list that follows job_id, you can mix real inputs and appropriate dependencies from voutputs. Note that usually this does not change the input structure of your job. You could add e.g. sessions this way, but 1) the required inputs are quite cumbersome and 2) it would break existing dependencies. You should use the GUI to design job templates that only require entry/file/menu values to be filled.
>
> If everything went ok, sts should be true, and you are ready to run your job
>
> cfg_util('run', job_id)
>
> Afterwards, you can run
>
> outputs = cfg_util('getAllOutputs', job_id);
>
> to get a list of real outputs of each module or
>
> [tag, val] = cfg_util('harvestrun', job_id)
>
> to get a matlabbatch job val where all dependencies are replaced by real inputs.
>
> 3. No, there isn't (yet). Housekeeping of virtual file names was the performance bottleneck in SPM5 spm_jobman. This was one of the reasons to replace it by dependencies. Therefore, filenames are now computed at run-time. There are plans to implement a 'dryrun' feature, but it requires quite a lot of changes to existing code in both SPM and matlabbatch.
>
--
--------------------------------------------------
Dr. S.F.W. Neggers
Division of Brain Research
Rudolf Magnus Institute for Neuroscience
Utrecht University Medical Center
Visiting : Heidelberglaan 100, 3584 CX Utrecht
Room B.01.1.03
Mail : Huispost B01.206, P.O. Box
3508 GA Utrecht, the Netherlands
Tel : +31 (0)88 7559609
Fax : +31 (0)88 7555443
E-mail : [log in to unmask]
Web : http://www.neuromri.nl/people/bas-neggers
--------------------------------------------------
------------------------------------------------------------------------------
De informatie opgenomen in dit bericht kan vertrouwelijk zijn en is
uitsluitend bestemd voor de geadresseerde. Indien u dit bericht onterecht
ontvangt, wordt u verzocht de inhoud niet te gebruiken en de afzender direct
te informeren door het bericht te retourneren. Het Universitair Medisch
Centrum Utrecht is een publiekrechtelijke rechtspersoon in de zin van de W.H.W.
(Wet Hoger Onderwijs en Wetenschappelijk Onderzoek) en staat geregistreerd bij
de Kamer van Koophandel voor Midden-Nederland onder nr. 30244197.
Denk s.v.p aan het milieu voor u deze e-mail afdrukt.
------------------------------------------------------------------------------
This message may contain confidential information and is intended exclusively
for the addressee. If you receive this message unintentionally, please do not
use the contents but notify the sender immediately by return e-mail. University
Medical Center Utrecht is a legal person by public law and is registered at
the Chamber of Commerce for Midden-Nederland under no. 30244197.
Please consider the environment before printing this e-mail.
|