]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGPP/MUON/lite/runQA.sh
c32250c67fb6bc6ebb034ae1cc84f1bfe4f61638
[u/mrichter/AliRoot.git] / PWGPP / MUON / lite / runQA.sh
1 #!/bin/bash
2
3 qaMacroDir="$ALICE_ROOT/PWGPP/MUON/lite"
4
5 baseOutDir=`pwd`
6
7
8 mergeLog="logMerge.txt"
9 mergeOut=""
10 terminateDir="${baseOutDir}/terminateRuns"
11 outTaskName="QAresults.root"
12 mergeFast=0
13
14 execMerge=1
15 execMergeAll=1
16 execTerminate=1
17 execTrigQA=1
18 execTrackQA=1
19 isPrivateProd=0
20 optList="mfateko:pi:"
21 inputTriggerList="0x0"
22 while getopts $optList option
23 do
24   case $option in
25     m ) execMerge=0;;
26     f ) mergeFast=1;;
27     a ) execMergeAll=0;;
28     t ) execTerminate=0;;
29     e ) execTrigQA=0;;
30     k ) execTrackQA=0;;
31     o ) outTaskName=$OPTARG;;
32     p ) isPrivateProd=1;;
33     i ) inputTriggerList=$OPTARG;;
34     * ) echo "Unimplemented option chosen."
35     EXIT=1
36     ;;
37   esac
38 done
39
40 shift $(($OPTIND - 1))
41
42 # needs 3 arguments
43 if [[ $# -ne 3 || "$EXIT" -eq 1 ]]; then
44     echo "Usage: `basename $0` (-$optList) <runList.txt> <QAx> <alien:///alice/data/20XX/LHCXXy>"
45     echo "       -m skip merging (default: run)"
46     echo "       -f merge fast, skip incomplete prod."
47     echo "       -a skip final merging (default: run)"
48     echo "       -t skip terminate (default: run)"
49     echo "       -e skip run trigger efficiency QA (defult: run)"
50     echo "       -k skip run muon QA (defult: run)"
51     echo "       -o task output name (default: QAresults.root)"
52     echo "       -p is private production. Use directory structure of the plugin"
53     echo "       -i input trigger list (default: no list)"
54     exit 4
55 fi
56
57 loadAnalysisLibs="gSystem->Load(\"libANALYSIS.so\");gSystem->Load(\"libOADB.so\");gSystem->Load(\"libANALYSISalice.so\");gSystem->Load(\"libCORRFW.so\");gSystem->Load(\"libPWGmuon.so\");"
58 includeAliroot=" gSystem->AddIncludePath(\"-I${ALICE_ROOT}/include\");"
59 includeMuon=" gSystem->AddIncludePath(\"-I${ALICE_ROOT}/MUON\");"
60
61 function mergePerRun()
62 {
63     echo "Merging each run..."
64     cd $baseOutDir
65     runListName="$1"
66     prodDir="$2"
67     alienBaseDir="$3"
68
69     aliroot -b <<EOF &> $mergeLog
70 .L $qaMacroDir/mergeGridFiles.C+
71 completeProd("${runListName}","${prodDir}","${alienBaseDir}","${outTaskName}",50,"MUON_QA MTR_ChamberEffMap MUON.TrigEfficiencyMap MUON.TriggerEfficiencyMap",${mergeFast});
72 .q
73 EOF
74 }
75
76 function mergeRuns()
77 {
78     echo "Merge all runs"
79     cd $baseOutDir
80     fileListName=$1
81     outFilename=$2
82     aliroot -b <<EOF &> logMergeAll.txt
83 ${includeAliroot} ${loadAnalysisLibs}
84 .x $qaMacroDir/mergeGridFiles.C+("${outFilename}","${fileListName}","");
85 .q
86 EOF
87     
88 }
89
90 function terminateRuns()
91 {
92     echo "Terminating runs..."
93     cd $baseOutDir
94     currList=`cat $1 | xargs`
95     if [ ! -d $terminateDir ]; then
96         mkdir $terminateDir
97     fi
98     for file in $currList; do
99         cd $terminateDir
100         aliroot -b <<EOF &> logCopy.txt
101 ${includeAliroot} ${loadAnalysisLibs}
102 .L $qaMacroDir/terminateQA.C+
103 CopyFile("$file","$terminateDir",1,"${outTaskName}")
104 .q 
105 EOF
106         outDir=`grep outDir logCopy.txt | cut -d ":" -f 2 | xargs`
107         #outFile=`grep outFile logCopy.txt | cut -d ":" -f 2`
108         forceTerminate=`grep -c "run number not found" logCopy.txt`
109
110   if [ "`pwd`" != "${outDir}" ]; then
111     mv logCopy.txt $outDir/
112   fi
113
114         cd $outDir
115         #ln -s $qaMacroDir/SetAlienHandler.C
116
117
118         aliroot -b <<EOF &> logTerminate.txt
119 ${includeAliroot} ${loadAnalysisLibs}
120 .x $qaMacroDir/terminateQA.C("${outTaskName}",$forceTerminate)
121 .q
122 EOF
123         #rm logTerminate.txt
124         #.x $qaMacroDir/runAnalysisTask.C("terminate","grid terminate","",kFALSE,"${outTaskName}");
125
126         #if [ -L "SetAlienHandler.C" ]; then
127         #rm SetAlienHandler.C
128         #fi
129         if [ -e "outputs_valid" ]; then
130             rm outputs_valid
131         fi
132         cd $baseOutDir
133     done
134 }
135
136 function runTrigQA() {
137     echo "Running trigger QA"
138     cd $baseOutDir
139     runListName="$1"
140     outFileName="$2"
141     aliroot -b <<EOF &> logTrigEffQA.txt
142 ${includeAliroot} ${includeMuon} ${loadAnalysisLibs}
143 .x $qaMacroDir/trigEffQA.C+("${runListName}","${outFileName}");
144 .q
145 EOF
146 }
147
148 function runTrackQA() {
149     echo "Running tracker QA"
150     cd $terminateDir
151     physSel="$1"
152     alienBaseDir="$2"
153     lhcPeriod=`echo ${alienBaseDir%"/"} | awk -F "/" ' { print $NF } '`
154     aliroot -b <<EOF &> logTrackQA.txt
155 ${includeAliroot} ${loadAnalysisLibs}
156 .x $qaMacroDir/PlotMuonQA.C+("${terminateDir}",0x0,${inputTriggerList},${physSel},"${lhcPeriod}","${outTaskName}");
157 .q
158 EOF
159     cd $baseOutDir
160 }
161
162 # Use absolute path for file inputTriggerList
163 if [ "${inputTriggerList}" != "0x0" ]; then
164   inputTriggerDir=`dirname ${inputTriggerList}`
165   if [ "${inputTriggerDir}"="." ]; then
166     inputTriggerList="`pwd`/${inputTriggerList}"
167   fi
168   inputTriggerList="\"${inputTriggerList}\""
169 fi
170
171 qaProdName="$2"
172 if [ $isPrivateProd -eq 1 ]; then
173     tmpName=${qaProdName//"private"/""}
174     if [ "$tmpName" == "$qaProdName" ]; then
175         qaProdName="${qaProdName}_private"
176     fi
177 fi
178
179 if [ $execMerge -eq 1 ]; then
180     mergePerRun $1 $qaProdName $3
181 fi
182 mergeOut=`grep -A 1 "Output written" ${mergeLog} | grep -v written`
183 mergeOutAll=${mergeOut//".txt"/"_merged.txt"}
184
185 if [ $execMergeAll -eq 1 ]; then
186     mergeRuns $mergeOut "QAresults_Merged.root"
187     cp -p $mergeOut $mergeOutAll
188     echo "${baseOutDir}/QAresults_Merged.root" >> $mergeOutAll
189 fi
190
191 if [ ! -e $mergeOutAll ]; then
192     mergeOutAll=$mergeOut
193 fi
194
195 if [ $execTerminate -eq 1 ]; then
196     terminateRuns $mergeOutAll
197 fi
198
199 if [ $execTrigQA -eq 1 ]; then
200 #    minRun=`echo ${mergeOut} | cut -d "_" -f 2`
201 #    maxRun=`echo ${mergeOut} | cut -d "_" -f 3 | cut -d "." -f 1`
202 #    trigOutSuffix=`echo ${qaProdName} | awk -F "/" '{ print $NF }'`
203     trigOutSuffix=`echo $3 | awk -F "/" '{ print $NF }'`
204 #    outName="trigEffQA_${minRun}_${maxRun}_${trigOutSuffix}.root"
205     outName="trigEffQA_${trigOutSuffix}.root"
206
207     runTrigQA "${mergeOut}" "${outName}"
208 fi
209
210 if [ $execTrackQA -eq 1 ]; then
211     runTrackQA 1 $3
212 fi