]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/FORWARD/analysis2/baseAnalysis.sh
Merge branch 'workdir'
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / analysis2 / baseAnalysis.sh
CommitLineData
c7a8b4d9 1#
2# This file contain common functions used by liteAnalysis.sh,
3# gridAnalysis.sh, etc.
4#
5
6# === Variables ======================================================
7fwd_dir=$ALICE_ROOT/PWGLF/FORWARD/analysis2
8dotconf=.config
9here=${PWD}
10name=
11now=
12sys=0
13snn=0
14field=0
15corrs=
16noact=0
17uuopts=
18# Latest: 0.91
19inel_eff=1
20# Latest: 0.94
21nsd_eff=1
22inelgt0_eff=1
23
24# === Misc. ==========================================================
25dummy()
26{
27 local f=$1
28 echo "$f: Dummy function. Please implement in $0" > /dev/stderr
29 exit 1
30}
31
32# --- Manual ---------------------------------------------------------
33manual()
34{
35 prog=`basename $0`
36 grep ^# $0 | \
37 sed -n -e '/BEGIN_MANUAL/,/END_MANUAL/ p' | \
38 sed -e '/\(BEGIN\|END\)_MANUAL/ d' -e 's/^# //' \
39 -e "s,\$0,$prog,"
40}
41# --- Check AliEn token ----------------------------------------------
42check_token()
43{
44 uid=`id -u`
45 genv_file=/tmp/gclient_env_${uid}
46
47 if test ! -f ${genv_file} ; then
48 echo "No such file: ${genv_file}, please do alien-token-init" \
49 >/dev/stderr
50 exit 1
51 fi
52 . ${genv_file}
53 alien-token-info | grep -q "Token is still valid"
54 if test $? -ne 0 ; then
55 echo "Token not valid, please re-new" > /dev/stderr
56 exit 1
57 fi
58}
59
60# === Utilities to execute scripts ===================================
61# --- Run script -----------------------------------------------------
62script()
63{
64 local scr=$1 ; shift
65 local args=$1 ; shift
66 echo "Will run aliroot -l -b -q $scr($args)"
67 if test $noact -gt 0 ; then return ; fi
68 aliroot -l -b <<-EOF
69 .x $scr($args)
70 .q
71 EOF
72}
73# --- Extract corrections --------------------------------------------
74terminate()
75{
76 echo "Nothing to do for terminate"
c8b1a7db 77}
78 # --- Post processing -----------------------------------------------
79post()
80{
81 ./post.sh $@
c7a8b4d9 82}
83# --- Extract corrections --------------------------------------------
84_extract()
85{
86 local scr=${1:-Extract.C}
87 if test ! -f ${scr} ; then
88 scr="../${scr}"
89 if test ! -f ${scr} ; then
90 echo "Extract script not found in `pwd` or parent" > /dev/stderr
91 exit 1
92 fi
93 fi
94 if test -f .extract ; then
95 echo "Aldready extracted in `basename $PWD`"
96 return 0
97 fi
98 echo "= Extracting"
99 script $scr > /dev/null 2>&1
100 touch .extract
101}
102# --- Upload a file --------------------------------------------------
103upload()
104{
105 if test -f .upload ; then
106 echo "Already uploaded in `basename $PWD`"
107 return 0
108 fi
109 echo "= Uploading"
110 script Upload.C \"file://${here}/${name}_corrs_${now}/\" >/dev/null 2>&1
111 touch .upload
112}
113# --- Extract and upload ---------------------------------------------
114extract_upload()
115{
e65b8b56 116 echo "=== Download, extract, and uploade in `basename $PWD` ==="
117 _extract
118 upload
c7a8b4d9 119}
120# --- Draw -----------------------------------------------------------
121_draw()
122{
123 script $@
124}
e65b8b56 125# --- Generic draw ---------------------------------------------------
126draw()
127{
128 _draw $@
129}
c7a8b4d9 130# --- Draw dN/deta results -------------------------------------------
131_dndeta_draw()
132{
133 local d=$1 ; shift
134 local scr=${1:-Draw.C}
135 echo "=== $d ================================================"
136 (cd $d && \
137 draw ${fwd_dir}/DrawdNdetaSummary.C && \
138 draw ${scr})
e65b8b56 139 echo "Back to `pwd`"
140}
141# --- Draw dN/deta ---------------------------------------------------
142dndeta_draw()
143{
144 _dndeta_draw $@
c7a8b4d9 145}
c7a8b4d9 146# === Task functions =================================================
147# --- Common options help --------------------------------------------
148usage()
149{
150 cat <<EOF
151Usage: $0 --what=OPERATION [--step=STEP] [OPTIONS]
152
153General options:
154 -s,--step=STEP Run stage ($step)
155 -w,--what=TRAINS What to do
156 -M,--man Show the manual
157 -N,--noact Show what will be done
158
159Options for 'setup' operation:
160 -n,--name=STRING Base name of jobs ($name)
161 -S,--sys=SYSTEM Collision system ($sys)
162 -E,--snn=ENERGY Center of mass energy per nuclean pair ($snn)
163 -F,--field=FIELD L3 magnetic field ($field)
164 -c,--corrections=DIR Directory where corrections are stored ($corrs)
165 -u,--url-opts=OPTIONS Additional user options ($uuopts)
166 -i,--inel-eff=EFF Set INEL efficiency (only pp - $inel_eff)
167 -0,--inelgt0-eff=EFF Set INEL>0 efficiency (only pp - $inelgt0_eff)
168 -v,--nsd-eff=EFF Set NSD (to V0-AND) efficiency (only pp $nsd_eff)
169EOF
170 setup_usage
171 cat <<EOF
172
173TRAINS is one of
174
175 clean Clean directory
176 setup Do intial setup
177 corrs Generate corrections
178 aods Generate AODs
179 dndeta Generate dNdeta
180 multdists Generate P(Nch)
181 flow Generate v_n{m} - not implemented yet
182
183and must be executed in that order. STEP is one of
184
185 full Run the analysis
186 terminate Terminate the job (may need iterations)
187 upload Upload corrections (only for TRAINS=corrs)
188 draw Draw (partial) results (not for TRAINS=corrs)
189EOF
190
191}
192setup_usage()
193{
194 dummy setup_usage
195}
196
197# === Setup functions ================================================
198# --- Common setup code ----------------------------------------------
199_setup()
200{
201 local lhandled=yes
202 declare -a larg=$@
203 while test $# -gt 0 ; do
204 arg=$1
205 opt=
206 case $1 in
207 --*=*)
208 arg=`echo $1 | sed 's/=.*//'` ;
209 opt=`echo $1 | sed 's/--[^=][^=]*=//'`
210 ;;
211 --*)
212 ;;
213 -*) opt=$2 ; shift ;;
214 esac
215 shift
216
217 lhandled=yes
218 # echo "Base: Processing '$arg' ('$opt')"
219 case $arg in
220 -n|--name) name=$opt ;;
221 -c|--corrections) corrs=$opt ;;
222 -i|--inel-eff) inel_eff=$opt ;;
223 -0|--inelgt0-eff) inelgt0_eff=$opt ;;
224 -v|--nsd-eff) nsd_eff=$opt ;;
225 -u|--url-opts) uuopts="$opt" ;;
226 -S|--sys) sys=`echo $opt | tr '[A-Z]' '[a-z]'` ;;
227 -E|--snn) snn=$opt ;;
228 -F|--field) field=$opt ;;
229 *) lhandled=no ;;
230 esac
231 if test x$lhandled = "xno" ; then
232 handle_setup_option "$arg" "$opt"
233 fi
234 done
235
e65b8b56 236 check setup
237
c7a8b4d9 238 # Set the date/time string
239 now=`date '+%Y%m%d_%H%M'`
240
241 # define our outputs
242 echo "=== Define outputs"
243 outputs
244
245 # Dump configuration to file
246 echo "=== Dump configuration"
247 dump_conf $larg
248
249 # Set-up for corrections
250 corrdir=${name}_corrs_${now}
251 if test "x$corrs" != "x" && test -d ${corrs} ; then
252 echo "Linking ${corrs} to ${corrdir}"
253 ln -sf $corrs ${corrdir}
254 ln -sf $corrs last_${name}_corrs
255 corrdir=$corrs
256 elif test $noact -lt 1 ; then
257 mkdir -p ${name}_acc_${now}
258 mkdir -p ${corrdir}
259 rm -f last_${name}_acc last_${name}_corrs
260 ln -sf ${name}_acc_${now} last_${name}_acc
261 ln -sf ${name}_corrs_${now} last_${name}_corrs
262 cat <<-EOF > ${corrdir}/Browse.C
e65b8b56 263 TObject* Browse()
c7a8b4d9 264 {
265 const char* fwd = "$ALICE_ROOT/PWGLF/FORWARD/analysis2";
266 if (!gROOT->GetClass("AliOADBForward"))
267 gROOT->Macro(Form("%s/scripts/LoadLibs.C", fwd));
e65b8b56 268 gROOT->LoadMacro(Form("%s/corrs/ForwardOADBGui.C", fwd));
c7a8b4d9 269
270 AliOADBForward* db = new AliOADBForward;
271 db->Open("fmd_corrections.root", "*");
272
273 ForwardOADBGui(db);
274
275 return db;
276 }
277 EOF
278 echo "=== Make acceptance corrections"
279 (cd ${name}_acc_${now} && \
e65b8b56 280 accGen `run_for_acc` && \
c7a8b4d9 281 upload )
282 fi
283 for i in fmd_corrections.root spd_corrections.root deadstrips.C ; do
284 if test ! -f ${corrdir}/$i ; then continue ; fi
285 echo "Linking ${corrdir}/$i here"
286 ln -fs ${corrdir}/$i .
287 done
e65b8b56 288 print
289
c7a8b4d9 290
291}
292# --- Default implementation -----------------------------------------
293setup()
294{
295 echo "Default implementation"
296 _setup $@
297}
298# --- dummy handler of setup options ---------------------------------
299handle_setup_option()
300{
301 dummy handle_setup_option
302}
303# --- Dump configuration to file -------------------------------------
304dump_conf()
305{
306 cat > ${dotconf} <<-EOF
307 # Generated by command
308 #
309 EOF
310 echo -n "# $0 " >> $dotconf
311 while test $# -gt 0 ; do
312 echo -en " \\" >> $dotconf
313 case $1 in
314 --*) echo -en "\n#\t$1" >> $dotconf;;
315 -*) echo -en "\n#\t$1 $2" >> $dotconf; shift ;;
316 *) echo -en "\n#\t$1" >> $dotconf;;
317 esac
318 shift
319 done
320 cat >> ${dotconf} <<-EOF
321
322 # Settings:
323 name="$name"
324 now=${now}
325 # Collision system and similar
326 sys=$sys
327 snn=$snn
328 field=$field
329 # Additional URI options
330 uuopts="${uuopts}"
331 # Trigger efficiencies - edit here to set them
332 inel_eff=$inel_eff
333 inelgt0_eff=$inelgt0_eff
334 nsd_eff=$nsd_eff
335 EOF
336 dump_setup ${dotconf}
337 echo "# EOF" >> ${dotconf}
338}
339# --- Get the run number to use for acceptance -----------------------
340run_for_acc()
341{
342 dummy run_for_acc
343}
344# --- Dump settings to output file -----------------------------------
345dump_setup()
346{
347 dummy dump_setup
348}
349
350# --- Run acceptance generation --------------------------------------
351accGen()
352{
353 check_token
354 local run=$1
355 script ${fwd_dir}/corrs/ExtractAcceptance.C "${run}"
e65b8b56 356 if test -f deadstrips.C ; then
357 cp ${here}/${name}_corrs_${now}/
358 fi
c7a8b4d9 359}
360
361# === Check function =================================================
362check()
363{
364 local w=$1
365
366 if test "X$name" = X ; then
367 echo "No name specified" > /dev/stderr
368 exit 1
369 fi
370 if test "X$w" != "Xsetup" && test "x$now" = "x" ; then
371 echo "No date/time specified" > /dev/stderr
372 exit 1
373 fi
374
375 check_setup $w
376
377 # sys==0 is OK - autoselect
378 case x$sys in
379 xpp|xp-p) sys=1 ;;
380 xpbpb|xpb-pb|xaa|xa-a) sys=2 ;;
381 xppb|xp-pb|xpa|xp-a) sys=3 ;;
382 x0|x1|x2|x3) ;;
383 x) sys=0 ;;
384 *) echo "$0: Unknown system: $sys" ; exit 1 ;;
385 esac
386
387}
388check_setup()
389{
390 dummy check_setup
391}
392
393# --- Show the setup -------------------------------------------------
394print()
395{
396 cat <<-EOF
397 Name: ${name}
398 Collision system: ${sys}
399 sqrt(s_NN): ${snn}GeV
400 L3 Field: ${field}kG
401 Date & time: ${now}
402 Additional URL options: ${uuopts}
403 Trigger efficiencies:
404 INEL: ${inel_eff}
405 INEL>0: ${inelgt0_eff}
406 NSD: ${nsd_eff}
407 EOF
408 print_setup
409}
410print_setup()
411{
412 dummy print_setup
413}
414
415# === Task functions =================================================
416# Modifies 'opts'
417train_opts()
418{
419 local mc=$1 ; shift
420 local type=$1 ; shift
421 local trig=$1 ; shift
422
423 nme=${name}_${type}
424
425 case $type in
426 *corr) cl=MakeMCCorrTrain ; mc=1 ;;
427 *eloss) cl=MakeFMDELossTrain ;;
428 *aod) cl=MakeAODTrain ; opts="${opts} --corr=." ;;
429 *dndeta) cl=MakedNdetaTrain
430 tree=aodTree
431 opts="${opts} --cut-edges"
432 case x$trig in
433 xinel)
434 opts="$opts --scheme=trigger,event,background"
435 opts="$opts --trig=INEL --trigEff=$inel_eff"
436 ;;
437 xnsd)
438 opts="$opts --scheme=trigger,event"
439 opts="$opts --trig=V0AND --trigEff=$nsd_eff"
440 ;;
441 xinelgt0)
442 opts="$opts --scheme=trigger,event"
443 opts="$opts --trig=INELGT0 --trigEff=$inelgt0_eff"
444 ;;
445 x*) trig= ;;
446 esac
447 if test "x$trig" != "x" ; then
448 nme="${nme}_${trig}"
449 fi
450 if test $mc -gt 0 ; then
451 opts="$opts --mc"
452 fi
453 ;;
454 *multdists)
455 cl=MakeMultDistsTrain
456 tree=aodTree
457 pat="*/AliAOD.root"
458 ;;
459 *) echo "$0: Unknown type of train: $type" > /dev/stderr ; exit 1 ;;
460 esac
461 # add centrality flag if we do not know what collision system we're
462 # looking at, or it's PbPb or pPb.
463 case $sys in
464 0|2|3) opts="$opts --cent" ;;
465 1) ;;
466 esac
467 opts="${opts} --include=$ALICE_ROOT/PWGLF/FORWARD/analysis2/trains"
468 opts="${opts} --date=${now} --class=$cl --name=$nme --verbose=0"
469}
470
471# --- Run the train --------------------------------------------------
472_allAboard()
473{
474 local type=$1 ; shift
475 local trig=$1 ; shift
476
477 local mc=0
478 case $type in
479 mc*) mc=1 ;;
480 esac
e65b8b56 481
482 opts=
483 url=
c7a8b4d9 484 train_opts $mc $type $trig
485 url_opts $mc $type $trig
486
487
488 echo "=== Running train: runTrain ${opts} --url=${url} $@"
489 if test $noact -gt 0 ; then return ; fi
490
491 runTrain ${opts} --overwrite --url=${url} $@
492}
493url_opts()
494{
495 dummy url_opts
496}
497allAboard()
498{
c8b1a7db 499 local what=$1 ; shift
500 local trig=$1 ; shift
501 echo "=== Running _allAboard '$what' '$trig' $@"
502 _allAboard "$what" "$trig" $@
c7a8b4d9 503}
504
505# --- Collect PDFs ---------------------------------------------------
506collect()
507{
508 local out=${name}_pdfs_${now}
509 rm -rf $out
510 mkdir -p ${out}
511 dirs="corr eloss aod dndeta dndeta_inel dndeta_nsd dndeta_inelgt0 multdists"
c8b1a7db 512 # Now loop on dirs
c7a8b4d9 513 for d in ${dirs} ; do
514 for m in "" "mc" ; do
515 dir=${name}_${m}${d}_${now}
516 M=
517 case x$m in
518 x) M=real ;;
519 xmc) M=simu ;;
520 esac
521 if test ! -d $dir ; then
522 # echo "Directory ${dir} doesn't exist"
523 continue
524 fi
525 # echo "Will look in $dir"
526 local files=
527 case $d in
528 corr) files="forward_mccorr.pdf" ;;
e65b8b56 529 eloss) files="forward_elossfits.pdf" ;;
c7a8b4d9 530 aod) files="forward.pdf" ;;
531 dndeta*) files="forward_dndeta.pdf dNdeta*.pdf" ;;
532 multdists) files="forward_multdists.pdf" ;;
533 *) echo "Unknown directory type: $d" > /dev/stder
534 continue
535 ;;
536 esac
537 collect_files "$dir" "$d" "$M" "$out" "$run" "$files"
538
539 done
540 done
541 (cd ${out} && pdfjoin -q -o tmp.pdf \
542 --pdftitle "${name} summary ($now)" \
543 --twoside summary_*.pdf dndeta_*.pdf && \
544 pdfnup -q --nup 2x1 -o ${name}_summary_${now}.pdf tmp.pdf && \
545 rm -f tmp.pdf)
546 (cd ${out} && pdfjoin -q -o tmp.pdf \
547 --pdftitle "${name} dN/deta ($now)" \
548 --twoside dndeta_*.pdf && \
549 pdfnup -q --nup 2x1 -o ${name}_dndeta_${now}.pdf tmp.pdf && \
550 rm -f tmp.pdf)
551 echo "Made ${name}_summary_${now}.pdf and ${name}_dndeta_${now}.pdf"
e65b8b56 552 rm -f last_${name}_pdfs
553 ln -s ${out} last_${name}_pdfs
c8b1a7db 554 (cd ${out} && _pres_collect)
555}
556
557_pres_collect()
558{
559 local out=results.tex
560 rm -rf $out
561 local A=`getent passwd $USER | cut -f5 -d: `
562 local D=`echo $now | sed 's,\(....\)\(..\)\(..\)_\(..\)\(..\),\1/\2/\3 \4:\5,'`
563 cat <<-EOF > $out
564 \\documentclass[compress]{beamer}
565 \\usetheme{alice}
566 \\usepackage[english,british]{babel}
567 \\mode<presentation>
568 \\title{Job ${name}}
569 \\author{$A}
570 \\date{$D}
571 \\begin{document}
572 \\aliceTitlePage{}
573 EOF
574 dirs="dndeta dndeta_inel dndeta_nsd dndeta_inelgt0 multdists"
575 for i in ${dirs} ; do
576 l=`ls ${i}_real_*.pdf 2>/dev/null`
577 for r in $l ; do
578 m=`echo $r | sed 's/real/simu/'`
579 R=`basename $r .pdf | sed "s/${i}_real_0*//"`
580 t=`basename $r .pdf | sed 's/dndeta_\(.*\)_real.*/\1/'`
581 case x$t in
582 x) T="All";;
583 xinel) T="INEL" ;;
584 xinelgt0) T="INEL\\textgreater0" ;;
585 xnsd) T="NSD" ;;
586 x*) T="Unknown";;
587 esac
588 if test -f $r && test -f $m ; then
589 cat <<-EOF >> $out
590 \\begin{frame}{Run $R --- $T}
591 \\begin{columns}
592 \\begin{column}{.48\\linewidth}
593 \\textbf{Real}\\\\
594 \\includegraphics[keepaspectratio,width=\\linewidth]{%
595 $r}
596 \\end{column}
597 \\begin{column}{.48\\linewidth}
598 \\textbf{Simulated}\\\\
599 \\includegraphics[keepaspectratio,width=\\linewidth]{%
600 $m}
601 \\end{column}
602 \\end{columns}
603 \\end{frame}
604 EOF
605 fi
606 done
607 done
608 cat <<-EOF >> $out
609 \\end{document}
610 EOF
611 pdflatex $out
c7a8b4d9 612}
613
614_collect_files()
615{
616 local dir=$1 ; shift
617 local d=$1 ; shift
618 local M=$1 ; shift
619 local out=$1 ; shift
620 local r=$1 ; shift
c8b1a7db 621 # local files="$1"
622 for f in $@ ; do
c7a8b4d9 623 ff=$dir/$f
624 tgt=`collect_name "$ff" "$d" "$M"`
625 if test "x$tgt" = "x" ; then
626 continue
627 fi
628 tgt=`printf "%s_%09d.pdf" $tgt $run`
629 # printf "%100s -> %s\n" $ff $tgt
630 if test ! -f $ff ; then
631 echo "$ff not found - ignored"
632 continue
633 fi
634 cp $ff $out/$tgt
635 done # for f in files
636}
637
638collect_name()
639{
640 local tgt=
641 local ff="$1" ; shift
642 local d="$1" ; shift
643 local M=$1 ; shift
644 case $ff in
645 */forward_mccorr.pdf) tgt=summary_mccorr ;;
646 */forward.pdf) tgt=summary_${d}_${M} ;;
647 */forward_dndeta.pdf) tgt=summary_${d}_${M} ;;
648 */forward_multdists.pdf) tgt=summary_${d}_${M} ;;
e65b8b56 649 */forward_elossfits.pdf) tgt=summary_${d}_${M} ;;
c7a8b4d9 650 */dNdeta*.pdf) tgt=${d}_${M} ;;
651 *) echo "Don't know how to deal with $ff" >/dev/stderr
652 esac
653 echo $tgt
654}
655
656collect_files()
657{
658 _collect_files $@
659}
660
661# --- Clean up -------------------------------------------------------
662_cleanup()
663{
664 for i in acc aod corrs dndeta dndeta_inel dndeta_inelgt0 dndeta_nsd \
665 eloss multdist ; do
666 for j in "" mc ; do
667 if test ! -d ${name}_${j}${i}_${now} ; then
668 continue
669 fi
670 rm -rf ${name}_${j}${i}_${now}
671 rm -f last_${name}_${j}${i}
672 done
673 done
674 rm -f build.log
675 for i in fmd_corrections.root spd_corrections.root deadstrips.C ; do
676 if test ! -L $i ; then
677 continue
678 fi
679 rm -f fmd_corrections.root
680 done
681}
682cleanup()
683{
684 _cleanup
685}
686# === Wrappers =======================================================
687# --- Run all correction jobs ----------------------------------------
688# This assumes the function allAboard
689corrs()
690{
691 allAboard mccorr "" $@
692 allAboard mceloss "" $@
693 allAboard eloss "" $@
694}
695corrs_terminate()
696{
697 (cd ${name}_mccorr_${now} && terminate)
698 (cd ${name}_mceloss_${now} && terminate)
699 (cd ${name}_eloss_${now} && terminate)
700}
c8b1a7db 701# Run post processing
702corrs_post()
c7a8b4d9 703{
c8b1a7db 704 (cd ${name}_mccorr_${now} && post ../${name}_corrs_${now})
705 (cd ${name}_mceloss_${now} && post ../${name}_corrs_${now} )
706 (cd ${name}_eloss_${now} && post ../${name}_corrs_${now} )
c7a8b4d9 707 rm -f fmd_corrections.root spd_corrections.root
708 ln -s ${name}_corrs_${now}/fmd_corrections.root .
709 ln -s ${name}_corrs_${now}/spd_corrections.root .
710}
c8b1a7db 711
712# This assumes the function extract_upload
713corrs_upload()
714{
715 corrs_post
716}
c7a8b4d9 717corrs_draw()
718{
c8b1a7db 719 corrs_post
c7a8b4d9 720}
721# --- Run all AOD jobs -----------------------------------------------
722aods()
723{
724 allAboard mcaod "" $@
725 allAboard aod "" $@
726}
727aods_terminate()
728{
729 (cd ${name}_mcaod_${now} && terminate)
730 (cd ${name}_aod_${now} && terminate)
731}
732aods_upload()
733{
c8b1a7db 734 aods_post
c7a8b4d9 735}
736aods_draw()
737{
c8b1a7db 738 aods_post
739}
740aods_post()
741{
742 (cd ${name}_mcaod_${now} && post)
743 (cd ${name}_aod_${now} && post)
c7a8b4d9 744}
745# --- Run all dN/deta jobs -------------------------------------------
746dndetas()
747{
748 if test $sys -eq 1 ; then
749 allAboard mcdndeta inel $@
750 allAboard mcdndeta nsd $@
751 allAboard mcdndeta inelgt0 $@
752 allAboard dndeta inel $@
753 allAboard dndeta nsd $@
754 allAboard dndeta inelgt0 $@
755 else
756 allAboard mcdndeta "" $@
757 allAboard dndeta "" $@
758 fi
759}
760dndetas_terminate()
761{
762 if test $sys -eq 1 ; then
763 (cd ${name}_mcdndeta_inel_${now} && terminate)
764 (cd ${name}_mcdndeta_nsd_${now} && terminate)
765 (cd ${name}_mcdndeta_inelgt0_${now} && terminate)
766 (cd ${name}_dndeta_inel_${now} && terminate)
767 (cd ${name}_dndeta_nsd_${now} && terminate)
768 (cd ${name}_dndeta_inelgt0_${now} && terminate)
769 else
770 (cd ${name}_mcdndeta_${now} && terminate)
771 (cd ${name}_dndeta_${now} && terminate)
772 fi
773}
774dndetas_upload()
775{
c8b1a7db 776 dndeta_post
c7a8b4d9 777}
778dndetas_draw()
c8b1a7db 779{
780 dndeta_post
781}
782dndetas_post()
c7a8b4d9 783{
784 if test $sys -eq 1 ; then
c8b1a7db 785 (cd ${name}_mcdndeta_inel_${now} && post)
786 (cd ${name}_mcdndeta_nsd_${now} && post)
787 (cd ${name}_mcdndeta_inelgt0_${now} && post)
788 (cd ${name}_dndeta_inel_${now} && post)
789 (cd ${name}_dndeta_nsd_${now} && post)
790 (cd ${name}_dndeta_inelgt0_${now} && post)
c7a8b4d9 791 else
c8b1a7db 792 (cd ${name}_mcdndeta_${now} && post)
793 (cd ${name}_dndeta_${now} && post)
c7a8b4d9 794 fi
795}
796# --- Run all MultDists -------------------------------------------
797multdists()
798{
799 allAboard mcmultdists "" $@
800 allAboard multdists "" $@
801}
802multdists_terminate()
803{
804 (cd ${name}_mcmultdists_${now} && terminate)
805 (cd ${name}_multdists_${now} && terminate)
806}
807multdists_upload()
808{
c8b1a7db 809 multdists_posts
c7a8b4d9 810}
c8b1a7db 811multdists_post()
c7a8b4d9 812{
c8b1a7db 813 (cd ${name}_mcmultdists_${now} && post)
814 (cd ${name}_multdists_${now} && post ../${name}_mcmultdists_${now})
c7a8b4d9 815}
816
817# === Driver code ====================================================
818# assumes functions:
819#
820# handle_option ARG [OPT]
821# check [WHAT]
822# print_setup
823# setup
824# cleanup
825#
826runIt()
827{
828 # --- Source settings if found -----------------------------------
829 if test -f $dotconf ; then
830 source $dotconf
831 fi
832
833
834 # --- Process command line -------------------------------------------
835 what=
836 step=
837 declare -a parg
838 local iarg=0
839 while test $# -gt 0 ; do
840 local arg=$1
841 local opt=
842 local handled_arg=1
843 local handled_opt=0
844 case $1 in
845 --) shift ; break ;;
846 --*=*)
847 arg=`echo $1 | sed 's/=.*//'` ;
848 opt=`echo $1 | sed 's/--[^=][^=]*=//'`
849 ;;
850 --*)
851 ;;
852 -h|-N|-H|-a) ;;
853 -*) opt=$2 ; handled_opt=1 ;;
854 esac
855
856 # echo "Run: Processing '$arg' ('$opt')"
857 case $arg in
858 -w|--what) what=`echo $opt | tr '[A-Z]' '[a-z]'` ;;
859 -s|--step) step=`echo $opt | tr '[A-Z]' '[a-z]'` ;;
860 -N|--noact) noact=1 ;;
861 -h|--help) usage ; exit 0 ;;
862 -H|--manual) manual ; exit 0 ;;
863 *) handled_arg=0 ;;
864 esac
865 if test $handled_arg -lt 1 ; then
866 parg[$iarg]="$1"
867 let iarg=$iarg+1
868 # echo "Pushed $1 -> ${parg[@]}"
869 if test $handled_opt -gt 0 ; then
870 parg[$iarg]="$2"
871 let iarg=$iarg+1
872 # echo "Pushed $2, gobble $2 -> ${parg[@]}"
873 shift
874 fi
875 else
876 if test $handled_opt -gt 0 ; then
877 shift
878 # echo "Gobble $1"
879 fi
880 fi
881 shift
882 done
883 # For backward compatibility
884 while test $# -gt 0 ; do
885 parg[$iarg]=$1
886 shift
887 let iarg=$iarg+1
888 done
889 # --- Select what to do ------------------------------------------
890 func=
891 case $what in
892 setup) setup ${parg[@]} ; exit 0 ;;
893 clean) cleanup ; exit 0 ;;
894 corr*) func=corrs;;
895 aod*) func=aods ;;
896 dndeta*) func=dndetas ;;
897 multdist*)func=multdists ;;
898 collect*) func=collect ;;
899 *) echo "$0: Unknown operation: $what" > /dev/stderr ; exit 1 ;;
900 esac
901
902 # --- Check settings ---------------------------------------------
903 check $what
904
905 print
906
907 case $what in
908 setup|clean|collect) step=full ;;
909 esac
910
911 case x$step in
912 x|xfull) ;;
913 xterm*) func=${func}_terminate ;;
914 xup*) func=${func}_upload ;;
915 xdr*) func=${func}_draw ;;
c8b1a7db 916 xpo*) func=${func}_post ;;
c7a8b4d9 917 *) echo "$0: Unknown step $step" > /dev/stderr ; exit 1 ;;
918 esac
919
920 echo "Will execute $func (${parg[@]})"
921 $func ${parg[@]}
922}
923
924#
925# EOF
926#
927