Batchmake documentation: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
No edit summary
m (Reverted edits by Logiti (Talk) to last revision by Finetjul)
Line 6: Line 6:


Manually generates an error. Display the error description on the output via the ProgressManager ( std::cerr ).
Manually generates an error. Display the error description on the output via the ProgressManager ( std::cerr ).
If ExitOnError() has been previously set to true, the script is stopped. [http://www.besttermpaper.com  custom term papers]
If ExitOnError() has been previously set to true, the script is stopped.


'''Example :'''
'''Example :'''

Revision as of 13:48, 23 April 2010

< Main BatchMake

Main Commands

AddError - Manually generates an error

AddError( [<description>] ... )

Manually generates an error. Display the error description on the output via the ProgressManager ( std::cerr ). If ExitOnError() has been previously set to true, the script is stopped.

Example :

If( ${my_var} != '0' )
 AddError( 'Error in segmentation. Error number:' ${my_var} )
EndIf( ${my_var} )

See Also:

ClearErrors()
Exit()
ExitOnError()
GetErrorCount()

AppendFile - Add a string to the end of a file

AppendFile( <filename> <value1> <value2> ... )

The first parameter is the name of the file and all the others parameters will be added at the end of this file.

Example :

sequence(seq 1 3 1)
foreach(value ${seq})
appendFile('C:/bmtest.txt' 'value: '${value}'\n')
endforeach(value)

This script will add the following strings at the end of the file entitled "C:/bmtest.txt" :

"value: 1"
"value: 2"
"value: 3"

See also

WriteFile()

ClearErrors - Reset the number of errors

ClearErrors( )

Example :

ClearErrors( )
... # A failing action
GetErrorCount( errorcount )
echo( ${errorcount} )
ClearErrors( ) 
GetErrorCount( errorcount )
Echo( ${errorcount} )

Displays on screen:

1
0

See Also:

AddError()
Exit()
ExitOnError()
GetErrorCount()

CloseTCPSocket - Close a TCP/IP socket

CloseTCPSocket( <SocketName> )

Example :

CloseTCPSocket(MySocket)


CopyFile - Copy a file from disk to disk

CopyFile( <src filename> <dst filename> [<dst2 filename>] ... )
Copy a file on disk to one or many files. It can also copy directories.

Example :

CopyFile('myfile.txt' 'copyofmyfile.txt' 'anothercopyofmyfile.txt')

See Also:

DeleteFile()
ListFileInDir()
FileExists()

DashboardExperiment - Specify the encrypted name of the experiment to report on

DashboardExperiment( <encryptedExperiment> )

The encryptedExperiment is given when creating a new experiment online (this requires a login/pass)

Example :

DashboardExperiment( 7YF04vELWW4m1B88t)


DashboardHost - Specify the hostname of the central database manager

DashboardHost( <hostname> )

Example :

DashboardHost(www.kitware.com)

DashboardNotify - Add a new string to the central database

DashboardNotify( <message> )

Example :

DashboardNotify('End of first experiment')


DashboardSend - Send the results of a program to the central database for data collection

DashboardSend( <methodid> <value1> <value2> )

Example :

DashboardSend(1,${value1},${value2})


DeleteFile - Delete a file on disk

DeleteFile( <filename> )
Note: It also deletes directories.

Example :

DeleteFile('myfile.txt')

See also

CopyFile()
FileExists()
GetFilename()

DownloadXcedeDataSet - Download a DataSet from an URL

DownloadXcedeDataSet ( <xcedeData> <directory> [login] [password])

The first parameter is a XcedeDataSet which is a camiantion between the url and the name of the file. It looks like : url;filename.

The directory is the path where the file will be downloaded.

The two last one are the parameters of connection. Sometimes you need them to be allowed to access to an XcedetDataBase.

Attention : If your filename looks like 'dir1/dir2/filename.img', and if dir1 exists, but dir2 doesn't : it will be created.

Example :

Set(url '//www.insight-journal.org/dspace/view_item.php?itemid=118#')
Set(filename MyImage.mha)
Set(url_filename "${url};${filename}")
Set(path 'C://Download')
DownloadXcedeDataSet(${url_filename} 'C:/Downloads' myLogin myPassword)

or

GetXcedeDataSets(xcedeDatas 'Catalog.xcede' '11' 'myLogin'   'myPassword')
ForEach(xcedeData ${xcedeDatas})
DownloadXcedeDataSet(${xcedeData} 'C:/Downloads' 'myLogin'  'myPassword')
EndForEach(${xcedeData})

DownloadXnatDataSet - Download a DataSet from an URL

DownloadXnatDataSet ( <XnatDataSet> <directory> [login] [password])

The first parameter is a XnatDataSet which is a camiantion between the url and the name of the file. It looks like : url;filename.

The directory is the path where the file will be downloaded.

The two last one are the parameters of connection. Sometimes you need them to be allowed to access to an XnatDataBase.

Attention : If your filename looks like 'dir1/dir2/filename.img', and if dir1 exists, but dir2 doesn't : it will be created.

Example :

Set(url '//central.xnat.org:8080/archive/cache/VQYPEjndn96JMCiRVniaAwA3K4Wtv2useiTCuyTkDVSjtPBvqEwPqNhFaV34LQLF')
Set(filename MyImage.img)
Set(url_filename "${url};${filename}")
Set(path 'C://Download')
DownloadXnatDataSet(${url_filename} ${path} 'myLogin' 'myPassword')

or

GetXnatDataSets(xnatDatas ${xnatCatalog} 'myLogin' 'myPassword')
ForEach(xnatData ${xnatDatas})
DownloadXnatDataSet(${xnatData} 'C:/Downloads' 'myLogin' 'myPassword')
EndForEach(${xnatData})

Echo - Print messages on the standard output

Echo( <value1> <value2> ... )

Example :

sequence(seq 1 2 1)
sequence(seq2 1 2 1)
foreach(value ${seq})
foreach(value2 ${seq2})
Echo(value: ${value} ${value2})
endforeach(value2)
endforeach(value)

This script will print the following lines on the screen :

value: 1 1
value: 1 2
value: 2 1
value: 2 2

Note : Single quotes prevents the variables to be expanded:

Set( foo My car is red )
Echo( '${foo}' <- ${foo} )

This script will print the following line on the screen :

${foo} <- My car is red

ExtractSlice - Extract a slice from a 3D image volume

ExtractSlice( <3D image filename> <2D image filename> <orientation> <slice> )

Example :

ExtractSlice('head.mha' 'slice.jpg' 0 23)

This command extracts the saggital slice #23 from the volume head.mha and write the extracted slice to slice.jpg

ExtractString - Extract a string from a string chain

ExtractString( <output> <input> <lenght> [FROMEND] [KEEPEND] )

The parameter <output> will contain the <lenght> first characters of <input> if FROMEND is not set. With FROMEND the <lenght> last characters won't be copied. if KEEPEND is specified then the end of the string is returned.

Example :

set(example 'hello')
extractstring(result ${example} 1)
extractstring(result2 ${example} 2 FROMEND)
extractstring(result3 ${example} 2 KEEPEND)
extractstring(result4 ${example} 2 FROMEND KEEPEND) 
echo(${result})
echo(${result2})
echo(${result3})
echo(${result4})

This script will print the following lines on the screen :

h
hel
llo
lo


Exit - Stop the running script

Exit( )

Example :

If( ${my_var} == '0' )
 Exit()
EndIf( ${my_var} )

See also

AddError()
ExitOnError()

ExitOnError - Stop the script if an action returns an error

ExitOnError( '1' or '0' or 'true' or 'false' or 'TRUE' or ... )

Example :

ExitOnError( 'TrUe' )
WriteFile( ${my_file} ${my_data}) # -> WriteFile fails to write on disk. An error is returned
CopyFile( ${my_file} ${my_duplicate_file} ) # -> won't be executed

See also

AddError()
GetErrorCount()
ClearErrors()

FileExists - check if a file exists on disk

FileExists(<myvar> <filename>)

Example :

FileExists(fileCreated 'myfile.mha')
If( ${myvar} == 1 )
 ...
EndIf

See also

AppendFile()
CopyFile()
DeleteFile()
GetFilename()
ListDirInDir()
ListFileInDir()
WriteFile()

ForEach / EndForEach - Create a "for" loop

ForEach( <variable> <sequence> )

EndForEach( <variable> )

During the ith iteration, <variable> contains the ith parameter of <sequence>. The EndForEach command allows to define the end of the loop.

Example :

set(seq a b c d e f)
ForEach(letter ${seq})
echo(${letter})
EndForEach(letter)

This script will print the following lines on the screen :

a
b
c
d
e
f

GetErrorCount - Return the number of errors found

GetErrorCount( <variable> )

Example :

AddError( )
WriteFile( ${my_file} ${my_data} ) # -> WriteFile fails to write ${my_file}
GetErrorCount( errorcount )
echo(${errorcount})

Displays on screen:

2

See also

AddError()
ClearErrors()
ExitOnError()

GetFilename - Get some information about a file

GetFilename(<outputvariale> <input> [NAME PATH PARENT_PATH EXTENSION NAME_WITHOUT_EXTENSION])

Example :

Set( my_file 'foo.txt' )
GetFilename( filewithnoextension ${my_file} NAME_WITHOUT_EXTENSION )
Echo( ${filewithnoextension} )

Prints on screen

foo

See also

FileExists()
ListDirInDir()
ListFileInDir()

GetListSize - Return the size of sequence/list

GetListSize( <new variable> <sequence>)

Example : sequence(seq 1 9 1) GetListSize(size ${seq}) echo(${size})

will return:

10

GetParam - Access directly a parameter from a sequence/list

GetParam( <new variable> <sequence> <number> [<number2>] ... )

<number> corresponds to the argument of <sequence> to copy into <new variable>. We can copy as many arguments of <sequence> as we want adding at the end the rank of the argument in <sequence>.

Example :

sequence(seq 1 7 2)
echo(${seq})
GetParam(new1 ${seq} 0)
GetParam(new2 ${seq} 3)
echo(${new1})
echo(${new2})
GetParam(new ${seq} 0 2)
echo(${new})

This script will print the following lines on the screen:

1 3 5 7
1
7
1 5


GetParamCount - Return the number of items in a set

GetParamCount( <variable count> <variable> )

Example :

sequence(seq 1 10 1)
echo(${seq})
GetParamCount(seqSize ${seq})
echo(${seqSize})

This script will print the following lines on the screen:

1 2 3 4 5 6 7 8 9 10
11

See also:

GetParam()
Sequence()
GetErrorCount()
ForEach()

GetXcedeDataSets - Get the DataSets form an XcedeCatalog

GetXcedeDataSets( <urls;filenames> <xcedeCatalog> [catalogID] [login] [password])

The first parameter is a list which will contain all the DataSets (url;filename) of the catalog.

The second one is an xcedeCatalog : catalog.xcede or catalog.xml for example.

The third one (which is an option) is the ID of the catalog you are looking for, if you don't want all the catalogs in the main one.

login et password are sometimes required to connect to an xcede database.

Example :

GetXcedeDataSets(xcedeDatas 'Catalog.xcede' '11')

After that you will be able to access to each filename and url that your catalog contain.

ForEach(xcedeData ${xcedeDatas})
echo(${xcedeData})
EndForEach(${xcedeData})

This script will print the following lines on the screen:

//rigel/midas/download_bitstream?bitstreamid=23;ellipse4.mha
//rigel/midas/download_bitstream?bitstreamid=24;ellipse5.mha
//rigel/midas/download_bitstream?bitstreamid=25;ellipse6.mha

GetXnatDataSets - Get the DataSets form an XcedeCatalog

GetXnatDataSets( <urls;filenames> <xcedeCatalog> [login] [password])

The first parameter is a list which will contain all the DataSets (url;filename) of the catalog.

The second one is an xnatCatalog : catalog.xml for example.

login et password are sometimes required to connect to an xnat database.

Example :

GetXnatDataSets(xnatDatas 'Catalog.xml' ${xnatLogin} ${psw})
ForEach(xnatData ${xnatDatas})
echo(${xnatData})
EndForEach(${xnatData})

This script will print the following lines on the screen:

//central.xnat.org:8080/archive/emKizxu19ejyoO2w5FQ5yMH;arc001/OAS1_0289_MR1/RAW/OAS1_0289_MR1_mpr-2_anon.img
//central.xnat.org:8080/archive/A5JNLmBqhv0b5GI3LZw7iDn;arc001/OAS1_0289_MR1/RAW/OAS1_0289_MR1_mpr-2_anon_sag_66.gif
//central.xnat.org:8080/archive/m7jStt2fGIGs0XcAwtYfFfU;arc001/OAS1_0289_MR1/RAW/OAS1_0289_MR1_mpr-3_anon.hdr
//central.xnat.org:8080/archive/0GoncvLOR8M28QaczLpuX6e;arc001/OAS1_0289_MR1/RAW/OAS1_0289_MR1_mpr-3_anon.img

GetXcedeFilename - Get the filename of an URL

GetXcedeFilename( <filename> <XcedeData> )

The first parameter is your new varaiable : the filename.

The second one is A XcedeData which lokks like : url;filename.

Basically, this function will cut the url and will return only the filename.

Example :

Set(dataSet '//www.insight-journal.org/dspace/view_item.php?itemid=118#;JelloPhantom001_CT_000004_0.48x0.48x3.00.mha')
GetXcedeFilename(filename ${dataSet})
echo(Filename : ${filename})

This script will print the following line on the screen:

Filename : JelloPhantom001_CT_000004_0.48x0.48x3.00.mha

GetXnatFilename - Get the filename of an URL

GetXnatFilename( <filename> <dataSet> )

The first parameter is your new varaiable : the filename.

The second one is A XnatData which looks like : url;filename.

Basically, this function will cut the url and will return only the filename.

Example :

Set(dataSet '//central.xnat.org:8080/archive/FaV34LQLF;arc001/OAS1_0289_MR1/RAW/OAS1_0289_MR1_mpr-1_anon.img')
GetXcedeFilename(filename ${dataSet})
echo(Filename : ${filename})

This script will print the following line on the screen:

Filename : arc001/OAS1_0289_MR1/RAW/OAS1_0289_MR1_mpr-1_anon.img

If / EndIf - Defines a conditional statement=

If( <variable1> == or <= or >= or != <variable2> ) EndIf( <variable> )

Example :

set(var1 2)
set(var2 4)
If(${var1} <= ${var2})
echo(${var1} <= ${var2})
EndIf(${var1})

set(char1 test)
set(char2 test)
If(${char1} == ${char2})
echo(${char1} == ${char2})
EndIf(${char1})

This script will print the following lines on the screen :

2 <= 4
test == test 


Inc Increment a number by a certain amount

Inc( <variable> <number or variable> )

<variable> = <variable> + <number or variable>

Example :

Set(value 2)
Set(value2 3)
Inc(${value} 5)
Inc(${value} ${value2})
echo( 2 + 5 + ${value2} = ${value})

This script will print the following lines on the screen :

2 + 5 + 3 = 10.000000

Include - Include another batchmake script

Include( <ScriptFilename> )

Example :

#Script1 : F:\Script1.bms
echo('Script1')

#Script2 : F:\Script2.bms
echo('Script2')

#Script3 :
Include(F:\Script1.bms)
Include(F:\Script2.bms)

When we execute Script3 the following lines will be printed on the screen :

Script1
Script2

Int - Convert a variable to integer

Int( <variable> )

Example :

Set(value 2)
Inc(${value} 5)
Int(${value})
echo(2 + 5 = ${value})

This script prints the following lines on the screen:

2 + 5 = 7  ( instead of 7.000000 if we Int() is not used)


ListDirInDir - List all the directories in a specified directory

ListDirInDir( <dirlist> <directory> [ *.* ] )

<dirlist> contains the name of all the subdirectories included in <directory>. We can also list only the subdirectories with a specific string in their names : for instance if 'doc*' is added at the end of ListDirInDir only the subdirectories started wtih 'doc' will be listed.

Example :

Structure of the Hard Drive :
 F:\
    Example
         number1
         number2
         number3
set(dir F:\Example)
ListDirInDir(example ${dir})
echo(${example})

This script will print the following lines on the screen:

number1/ number2/ number3/

See also

FileExists()
ListFileInDir()

ListFileInDir - List all the files in a specified directory

ListFileInDir( <filelist> <directory> [ *.* ] )

<filelist> contains the name of all the files included in <directory>. We can also list only the files with a specific string in their names : for instance if *.txt' is added at the end of ListFileInDir only the files wtih the '.txt' extension will be listed.

Example :

Structure of the Hard Drive :
 F:\
    Example
        number1.txt
        number2.txt
        number3.txt 
set(dir F:\Example)
ListFileInDir(example ${dir})
echo(${example})

This script will print the following lines on the screen:

number1.txt number2.txt number3.txt

See also

FileExists()
ListDirInDir()

MakeDirectory - Create a directory

MakeDirectory( <dirname> ) Create a directory at the path dirname on your system.

Example

MakeDirectory( ${project_dir}/test )

See also

AppendFile()
CopyFile()
DeleteFile()
ListDirInDir()
ListFileInDir()
WriteFile()

Math - Compute an algebra expression

Math(<result> <var1> <operator> <var2>)

Example

Set( val 18 )
MakeDirectory( res ${val} / 2 )
Echo( ${res} )

This script will print the following line on the screen:

9

See also

Inc()

OpenTCPSocket - Open a TCP/IP socket

OpenTCPSocket( <SocketName> <IPAddress> <Port> )

Example :

OpenTCPSocket(MySocket,10.0.0.1,8081)


Randomize - Create a random number

Randomize( <variable> <uniform | gaussian | categorical> <min> <max> )

<variable> contains the result. The distribtion can be set thanks to one of these 3 words : uniform, gaussian or categorical. The range an be set thanks to <min> and <max>.

Example :

Randomize(result uniform 0 1)
echo(${result}) 

This script will print on the screen a random number between 0 and 1 following a uniform distribution.


RegEx - Apply regular expressions on a variable

RegEx(<newvar> <variable> <RegularExpression> <MATCH or REPLACE> [replacevar]) Below are the metacharacters recognized by the regular expression engine

^        Matches at beginning of a line
$        Matches at end of a line
.        Matches any single character
[ ]      Matches any character(s) inside the brackets
[^ ]     Matches any character(s) not inside the brackets
-        Matches any character in range on either side of a dash
*        Matches preceding pattern zero or more times
+        Matches preceding pattern one or more times
?        Matches preceding pattern zero or once only
()       Saves a matched expression and uses it in a later match

Example :

RegEx( result 'foo' 'o' REPLACE 'a' )

Set to result the value 'faa'

RegEx( result 'the car is green' 'c.*e' MATCH )

Set 'car is gree' to result

Run - Execute a program in a thread

Run( <output variable> <'program.exe param1 param2 ....'> [<error variable>] [<exit status variable>])

The program called 'program.exe' will be launched with the parameters 'param1 param2 ...'
<output> and <error> are filled with the std::cout and std::cerr streams of the program.
<exit status> is set with the return value of the program.
Note that the Application Wrapper can be used to defined the parameters as names.

Example :

Run( prog_output 'MyProgram.exe -in input -out output' prog_error prog_status)

Or

Set( my_program MyProgram.exe)
Set( my_input input)
Set( my_output output)
Set( command_line ${my_program} -in ${my_input} -out ${my_output} )
Run( prog_output ${command_line} prog_error)

Or:

Set( my_program MyProgram.exe)
Set( my_input input)
Set( my_output output)
Run( prog_output ${my_program}' -in '${my_input}' -out '${my_output} prog_error prog_exit_status)

In this last example, make sure you do not have space between ${my_program} and the parameter 'quote'.
Or using the Application Wrapper (if MyProgram.exe is already wrapped ):

SetApp( my_program @MyProg )
SetAppOption( my_program.in ${my_input} )
SetAppOption( my_program.out ${my_output} )
Run( prog_output ${my_program} prog_error)

This script will run the program called MyProgram.exe with the parameters input and output.

SendTCP - Send a message thru a TCP socket

SendTCP( <SocketName> <message> )

The socket should be open using OpenTCPSocket and closed via CloseTCPSocket

Example :

SendTCP(MySocket 'my message to send')


Sequence - Create a sequence of numbers

Sequence( <variable> <From> <To> <Step> )

A sequence starting at <From> ending at <To> with a step of <Step> is generated and stored in <variable>.

Example :

sequence(seq 0 10 2)
echo(${seq})

This script will print the following lines on the screen :

0 2 4 6 8 10


Set - Assign a value to a variable

Set( <variable> <name1> <name2> ... )

Example :

Set(example name1 name2 name3)
echo(${example})

This script will print the following line on the screen :

name1 name2 name3
Set( foo name )
Set( bar ${foo} )
Echo( ${bar} )

This script will print the following line on the screen :

name

Note Single quotes prevents the variables to be expanded:

Set( foo name )
Set( bar '${foo}' )
Echo( ${bar} )

This script will print the following line on the screen :

${bar}

SetApp - Assign a variable to an Application defined by the Application Wrapper

'SetApp( <variable> <application> )

Before using this command we must declare the program we want to execute in Application Wraper ( clic on the Application Wrapper button -> new ).

Example :

SetApp( prog @MyProgam)
Run(output ${prog})
 

This script will run the software called MyProgram.

NOTE : When the @ key is pressed the list of the programs known by Application Wrapper is displayed.


SetAppOption - Assign a value to a predefined option of a program

SetAppOption( <application.option> <value> )

Before using this command we must use the SetApp command to set an application.

Warning : We can only use this command if the software use the MetaCommand library to parse its arguments.

Example :

SetApp(prog @MyProgam)
SetAppOption( prog.input MyInput )
SetAppOption( prog.output MyOutput )
Run(output ${prog})

This script is equivalent to : MyProgram.exe -in MyInput -out MyOutput.

NOTE : When the "." key is pressedafter the nam eof the application the list of the option available is displayed.


Sin - Evaluate the sin() function

Sin( <output variable> <input> )

The input number must be given in radian.

Example :

Sin(result 1.57)
echo(${result})

This script wiill print the following lines on the screen :

1.000000

WriteFile - Write variables into a file

WriteFile( <filename> <variable1> <variable2> ... )

Example :

sequence(seq 1 10 1)
set(end 'end')
WriteFile(F:\example.txt ${seq} ${end})

This script will print the following lines into the file : F:\example.txt :

12345678910end

See also

AppendFile()
CopyFile()
DeleteFile()