]> git.uio.no Git - u/mrichter/AliRoot.git/blame - share/alirun
Support for writing to remote file systems (shift/castor).
[u/mrichter/AliRoot.git] / share / alirun
CommitLineData
a571aae4 1#!/bin/sh
e0381e22 2#############################################################################
3# alirun - a shell script to run AliRoot
4#############################################################################
5#
6# modification history
7# $Log$
a571aae4 8# Revision 1.3 2001/02/01 18:00:23 buncic
9# Use bash in place of sh for compatibility
10#
572784b9 11# Revision 1.2 2001/02/01 17:46:26 buncic
12# Fixed mktemp on HP and Sun
13#
da41e58d 14# Revision 1.1 2001/01/26 21:22:02 hristov
15# Major upgrade of AliRoot code
16#
a571aae4 17#############################################################################
e0381e22 18#
19# SYNOPSIS
20# alirun [[-d <TPC+ITS+..>|-all]]
21# [-f <hits file>]
22# [-o <output directory>]
23# [-split]
24# [-C <Config.C>]
25# [-p <particle#>]
26# [-seed <seed for random number generator>]
27# [-n <event #>]
28# <-c <command ...>>
29#
30# DESCRIPTION
31# This script is a wrapper for AliRoot and provides a command line interface suitable for running in batch mode.
32#
33# CONFIGURATION OPTIONS
34# The following options are used to configure AliRoot session.
35#
36# -c <command1 command2 ...>
37# This option must be the last one on alirun command line and specifies the sequence of alirun commands to be executed. At present, the following commands are supported:
38#
39# - Hits ................ simulation
40# - Digits .............. digitisation
41# - SDigits ............. creation of sumable digits
42# - SDigits2Digits ...... conversion SDigits->Digits
43#
44# -d <TPC+ITS+..> | -d all | -all
45# Selects detector for which <command> will be run. If none of these options was specified, an internal loop in AliRoot over all active detectors is assumed. Otherwise, for each detector, input file(s) are re-opened in update mode, command (or macro) is executed and the file is closed. Option -all is equivalent to MUON+RICH+TOF+ITS+TPC+PHOS+PMD+CASTOR+TRD. Detectors are processed in order as they appear on the command line.
46#
47# -f <file>
48# Name of the top level Root file where Root trees will be stored (branches may reside in the same file or be diverted to separate files (see -split option). By default, file is named galice.root.
49#
50# -o <directory>
51# A directory where output file(s) will be stored. If does not exist, it will be created. If not specified, current directory is used.
52#
53# -split
54# If specified, this option will tell AliRoot to divert branches of Root trees into separate files.
55#
56# The layout of output directory is the following:
57#
58# <directory>
59# |-- Digits.<detector>.root
60# |-- SDigits.<detector>.root
61# |-- Hits.root
62# |-- Kine.root
63# |-- Reco.root
64# `-- galice.root
65#
66# -C <macro.C>
67# An alternative to Config.C macro which contains AliRoot configuration.
68#
69# -p <n>
70# Number of primary particles to be generated by selected event generator. Required for Hits command, Ignored by Digits command (digitisation is performed for all particles found in input file). Default value is 50.
71#
72# -seed <n>
73# Seed for random number generator (used to initialise TRandom3(n)).
74#
75# -n <n>
76# Number of events to generate (not yet implemented).
77#
78# RUN OPTIONS
79# These options define run time appearance of the AliRoot session.
80#
81# -help
82# Display usage.
83#
84# -verbose
85# Switch verbose screen output on.
86#
87# -quiet
88# Switch verbose output off. Output is redirected to a file which is shown on standard output only if <command> returns non zero status.
89#
90# -fork
91# Forks all digitisation processes in background, using LSF if available, in order to speed up execution. It cannot be used in present design where only tree branches are diverted to separate files as top level Root file must be kept open in update mode.
92#
93# -trace
94# Show trace of execution of shell commands.
95#
96# -debug
97# Execute AliRoot under gdb.
98#
99# -break <breakpoint>
100# Execute AliRoot under gdb and set <breakpoint>.
101#
102# -makeman
103# Create man page for alirun.
104#
105# EXAMPLES
106# Run sumulation for 1 event, 100 particles and store output in file test.root in /tmp/event.1 directory:
107#
108# alirun -o /tmp/event.1 -f test.root -p 100 -verbose -c Hits
109#
110# Run sumulation for 1 event, 100 particles and store output in default file galice.root in /tmp/event.1 directory. In adition, divert branches of TreeD,TreeR and TreeK into separate files:
111#
112# alirun -o /tmp/event.2 -split -p 100 -verbose -c Hits
113#
114# Use output from first step and create TOF and RICH digits. Output is in the same direcory and in file test.root
115#
116# alirun -d TOF+RICH -o /tmp/event.1 -f test.root -verbose -c Digits
117#
118# Use output from second step and create digits for all detectors. Output is in the same direcory and branches are diverted to separate files:
119#
120# alirun -d all -o /tmp/event.2 -split -verbose -c Digits
121#
122# AUTHOR:
123# Predrag Buncic, e-mail: Predrag.Buncic@cern.ch
124#
125# CREATION DATE:
126# 06-Nov-2000
127#
128#C<
129###########################################################################
a571aae4 130if [ "$ALIRUN_SHELL" = "" ]
131then
132 ALIRUN_SHELL=bin/sh
133 for shell in bash zsh ksh
134 do
135 for dir in /bin /usr/bin /usr/local/bin
136 do
137 if [ -x $dir/$shell ]
138 then
139 ALIRUN_SHELL=$dir/$shell; export ALIRUN_SHELL
140 break 2
141 fi
142 done
143 done
144 exec $ALIRUN_SHELL -norc -noprofile $0 $*
145fi
e0381e22 146###########################################################################
147AliRun()
148###########################################################################
149{
150 printf "Usage: alirun [[-d <TPC+ITS+..>|-all]]\n"
151 printf " [-f <hits file>]\n"
152 printf " [-o <output directory>]\n"
153 printf " [-split]\n"
154 printf " [-C <Config.C>]\n"
155 printf " [-p <particle#>]\n"
156 printf " [-seed <seed for random number generator>]\n"
157 printf " [-n event #]\n"
158 printf " <-c <command ...>>\n"
159 exit
160}
161
162###########################################################################
163Mktemp()
164###########################################################################
165{
da41e58d 166# mktemp -qu /tmp/alirun.$$.XXXXXX
167 echo /tmp/alirun.$$.
e0381e22 168}
169
a571aae4 170###########################################################################
171Configure()
172###########################################################################
173{
174 if [ -x /usr/local/bin/rfmkdir ]
175 then
176 MKDIR="/usr/local/bin/rfmkdir"
177 else
178 MKDIR="mkdir"
179 fi
180 if [ -x /usr/local/bin/rfrm ]
181 then
182 RMDIR="echo y | /usr/local/bin/rfrm -r"
183 else
184 RMDIR="rm -rf"
185 fi
186 if [ -x /usr/local/bin/rfstat ]
187 then
188 STAT="/usr/local/bin/rfstat"
189 else
190 STAT="test -d"
191 fi
192}
193
e0381e22 194###########################################################################
195Cleanup()
196###########################################################################
197{
a571aae4 198 $STAT $ALIRUN_TMPDIR > /dev/null 2>&1
199 if [ $? -eq 0 ]
e0381e22 200 then
a571aae4 201 $RMDIR $ALIRUN_TMPDIR >/dev/null 2>&1
e0381e22 202 fi
203}
204
205###########################################################################
206AliRoot()
207###########################################################################
208{
209 case $1 in
210 Hits)
211 macro=`HitsMacro`
212 ;;
213 Digits)
214 macro=`DigitsMacro Hits2Digits`
215 ;;
216 SDigits)
217 macro=`DigitsMacro Hits2SDigits`
218 ;;
219 SDigits2Digits)
220 macro=`DigitsMacro SDigits2Digits`
221 ;;
222 *.C|*.C\(*\))
223 macro=$1
224 ;;
225 *)
226 printf "Unknown command: %s. Terminating...\n" $1
227 exit 255
228 ;;
229 esac
230
231 if [ "$2" != "" ]
232 then
233 CONTEXT="<"$2">"
234 else
235 CONTEXT="<"None">"
236 fi
237
238 stdout=$ALIRUN_TMPDIR/STDOUT.$${$CONTEXT}
239
240 hr="========================================"
241
242 if [ "$VERBOSE" = "FALSE" ]
243 then
244 printf "%s\n+ aliroot -q -b %s %s\n%s\n" $hr$hr $1 $CONTEXT $hr$hr
245 fi > $stdout
246
247 if [ "$DEBUG" = "TRUE" ]
248 then
249 cat<<EOF>$ALIRUN_TMPDIR/gdb
250b main
251r -q -b $macro
252disable breakpoints
253b $BREAK
254c
255where
256EOF
257 $ECHO gdb -q -x $ALIRUN_TMPDIR/gdb aliroot
258 else
259 if [ "$VERBOSE" = "TRUE" ]
260 then
261 $ECHO aliroot -q -b $macro
262 else
263 $ECHO aliroot -q -b $macro > $stdout 2>&1
264 if [ $? -ne 0 ]
265 then
266 echo "- "aliroot -q -b " "$1" "$CONTEXT
267 cat $stdout
268 exit
269 else
270 echo "+ "aliroot -q -b " "$1" "$CONTEXT
271 fi
272 fi
273 fi
274
275}
276
277
278###########################################################################
279HitsMacro()
280###########################################################################
281{
282 macro=$ALIRUN_TMPDIR/Simulate.C
283
284 cat <<EOF> $macro
285
286////////////////////////////////////////////////////////////////////////////
287void Simulate()
288{
a571aae4 289 TFile *file = TFile::Open(gSystem->Getenv("CONFIG_FILE"),"recreate");
290
291 //file->UseCache();
292
293 file->SetCompressionLevel(2);
294
295 gAlice->SetBaseFile(gSystem->DirName(gSystem->Getenv("CONFIG_FILE")));
296
e0381e22 297 gAlice->Init(gSystem->Getenv("CONFIG"));
298
299 gAlice->Run(1);
300}
301////////////////////////////////////////////////////////////////////////////
302
303EOF
304 echo $macro
305}
306
307###########################################################################
308DigitsMacro()
309###########################################################################
310{
311 mode=$1
312
313 macro=$ALIRUN_TMPDIR/Digitize.C
314
315 cat <<EOF> $macro
316
317////////////////////////////////////////////////////////////////////////////
318void Digitize()
319{
a571aae4 320 TFile *file = TFile::Open(gSystem->Getenv("CONFIG_FILE"),"update");
321 if (! file ) {
322 cout << "Could not open Hits file. Exiting..." << endl;
323 exit(1);
324 }
325 file->SetCompressionLevel(2);
326
327 //file->UseCache();
e0381e22 328
329 if (gAlice) delete gAlice;
330
a571aae4 331 AliRun *gAlice = (AliRun*)file->Get("gAlice");
e0381e22 332
333 gAlice->$mode(gSystem->Getenv("CONFIG_DETECTOR"));
334}
335////////////////////////////////////////////////////////////////////////////
336
337EOF
338 echo $macro
339}
340
341###########################################################################
342AliRunMakeman()
343###########################################################################
344{
a571aae4 345 mandir=../man/man4
346 ./mangen -n tool $0
e0381e22 347 if [ $? -eq 0 ]
348 then
a571aae4 349 [ ! -d $mandir ] && mkdir -p $mandir
350 mv `basename $0`.? $mandir
351 exit
e0381e22 352 fi
e0381e22 353}
354
355###########################################################################
356AliRunMacro()
357###########################################################################
358{
359 AliRoot $*
360}
361
362###########################################################################
363AliRunHits()
364###########################################################################
365{
366 AliRoot Hits
367}
368
369###########################################################################
370AliRunDigits()
371###########################################################################
372{
373 if [ "$DETECTORS" = "" ]
374 then
375 AliRoot Digits
376 else
377 for det in $DETECTORS
378 do
da41e58d 379 CONFIG_DETECTOR=$det; export CONFIG_DETECTOR
e0381e22 380 if [ "$FORK" = "TRUE" ]
381 then
382 if [ "$LSF_FORK" = "TRUE" ]
383 then
384 lsrun AliRoot Digits $CONFIG_DETECTOR
385 else
386 AliRoot Digits $CONFIG_DETECTOR &
387 fi
388 else
389 AliRoot Digits $CONFIG_DETECTOR
390 fi
391 done
392 wait
393 fi
394}
395
396
e0381e22 397###########################################################################
a571aae4 398Configure;
399###########################################################################
400
401ALL="MUON RICH TOF ITS TPC PHOS PMD CASTOR ZDC TRD"; # export ALL
402DETECTORS=""; # export DETECTORS
403FILE="galice.root";
e0381e22 404
da41e58d 405CONFIG=$ALICE_ROOT/macros/Config.C; export CONFIG
406CONFIG_NPARTICLES=50; export CONFIG_NPARTICLES
407CONFIG_PATH=`pwd`; export CONFIG_PATH
e0381e22 408
da41e58d 409ALIRUN_TMPDIR=`Mktemp`; export ALIRUN_TMPDIR
e0381e22 410
411DEBUG="FALSE"
412BREAK=""
413VERBOSE="TRUE"
414OUTPUT=.
415CMDLIST="Usage"
416FORK="FALSE"
417FORK_LSF="FALSE"
418ECHO=""
419
420if [ -x /usr/local/lsf/bin/lsrun ]
421then
422 FORK_LSF="TRUE"
423fi
424
425for config in $CONFIG_PATH/Config.C $ALICE_ROOT/macros/Config.C
426do
427 if [ -f $config ]
428 then
da41e58d 429 CONFIG=$config; export CONFIG
e0381e22 430 break
431 fi
432done
433
434for param in $*
435do
436 case $param in
437 -debug)
438 shift 1
439 DEBUG="TRUE"
440 ;;
441 -break)
442 shift 1
443 DEBUG="TRUE"
444 BREAK=$1
445 ;;
446 -trace)
447 shift 1
448 set -vx
449 ;;
450 -echo)
451 shift 1
452 ECHO="echo "
453 ;;
454 -verbose)
455 shift 1
456 VERBOSE="TRUE"
457 ;;
458 -quiet)
459 shift 1
460 VERBOSE="FALSE"
461 ;;
462 -help)
463 AliRun
464 ;;
465 -makeman)
466 AliRunMakeman
467 ;;
468 -fork)
469 shift 1
470 FORK="TRUE"
471 ;;
472 -d)
473 shift 1
474 list=$1
475 if [ "$list" = "all" ]
476 then
477 DETECTORS=$ALL
478 else
479 DETECTORS=`echo $list | sed 's/+/ /g'`
480 fi
481 ;;
482 -all)
483 shift 1
484 DETECTORS=$ALL
485 ;;
486 -o)
487 shift 1
488 OUTPUT=$1
489 ;;
490 -split)
491 shift 1
da41e58d 492 CONFIG_SPLIT_FILE="TRUE"; export CONFIG_SPLIT_FILE
e0381e22 493 ;;
494 -f)
495 shift 1
a571aae4 496 FILE=$1
e0381e22 497 ;;
498 -n)
499 shift 1
500 NEVENTS=$1
501 ;;
502 -p)
503 shift 1
da41e58d 504 CONFIG_NPARTICLES=$1; export CONFIG_NPARTICLES
e0381e22 505 ;;
506 -seed)
507 shift 1
da41e58d 508 CONFIG_SEED=$1; export CONFIG_SEED
e0381e22 509 ;;
510 -c)
511 shift 1
512 CMDLIST=$*
513 break
514 ;;
515 -C)
516 shift 1
da41e58d 517 CONFIG=$1; export CONFIG
e0381e22 518 ;;
519 *)
520 shift 1
521 ;;
522 esac
523done
524
e0381e22 525if [ `dirname $OUTPUT` = "." ]
526then
a571aae4 527 CONFIG_OUTDIR=`pwd`/$OUTPUT
528else
529 CONFIG_OUTDIR=$OUTPUT
e0381e22 530fi
531
a571aae4 532case $CONFIG_OUTDIR in
533 rfio:*|/shift/*|shift:*|/castor/*|castor:*)
534 ROOT_FILE_TYPE="rfio:"
535 ;;
536 root:*)
537 ROOT_FILE_TYPE="root:"
538 ;;
539 http:*)
540 ROOT_FILE_TYPE="http:"
541 ;;
542 file:*)
543 ROOT_FILE_TYPE=""
544 ;;
545 *)
546 ROOT_FILE_TYPE=""
547 ;;
548esac
549
550export CONFIG_OUTDIR
551export CONFIG_ROOT_FILE_TYPE
552
553for dir in $CONFIG_OUTDIR $ALIRUN_TMPDIR
554do
555 $STAT $dir > /dev/null 2>&1
556 if [ $? -ne 0 ]
557 then
558 $MKDIR -p $dir
559 fi
560done
561
562CONFIG_FILE=$ROOT_FILE_TYPE$CONFIG_OUTDIR/$FILE; export CONFIG_FILE
e0381e22 563
564trap Cleanup 2
565
566(
a571aae4 567 cd $ALIRUN_TMPDIR
e0381e22 568 for cmd in $CMDLIST
569 do
570 case `type -t AliRun$cmd` in
571 function)
572 shift 1
573 AliRun$cmd $*
574 ;;
575 *)
576 ;;
577 esac
578 done
579)
580
a571aae4 581Cleanup