Major overhaul of the QA code.
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis2 / qa / getQAResults.sh
1 #!/bin/bash
2 #
3 # @file   getQAResults.sh
4 # @author Christian Holm Christensen <cholm@nbi.dk>
5 # @date   Thu Nov 17 11:47:14 2011
6
7 # @brief Retrieve trending.root/QAResults.root files from AliEn for a
8 # given producton as specified by the command line options 
9
10 # @ingroup pwg2_forward_qa_scripts
11 #
12
13 # --------------------------------------------------------------------
14 verb=0
15
16 mess()
17 {
18     if test $verb -lt 1 ; then return ; fi 
19     echo $@
20 }
21
22 # --------------------------------------------------------------------
23 usage()
24 {
25     cat <<EOF
26 Usage: $0 -p PRODUCTION [OPTIONS]
27
28 Options: 
29         -h,--help                     This help 
30         -v,--verbose                  Be verbose
31         -p,--production  IDENTIFIER   Production identifier [$prod]
32         -P,--pass        NUMBER       Reconstruction pass number [$pass]
33         -Q,--pre-pass    STRING       Prefix to pass identifier [${prep}]
34         -R,--post-pass   STRING       Postfix to pass identifier [$post]
35         -y,--year        YEAR         Year of production [$year]
36         -d,--destination DIRECTORY    Directory to store result in [$dest] 
37         -r,--run         NUMBER       Run number [$runn]
38         -q,--qa          NUMBER       QA number 
39         -f,--file        NAME         File to get [$file]
40         -T,--trending                 Get trending.root file 
41         -a,--archives                 Get ZIP archives 
42         -n,--no-action                Run dry (do not copy files)
43
44 If run number is set, get the parts of next-to-last merge of that run only.
45
46 EOF
47 }
48
49 # --------------------------------------------------------------------
50 check_file()
51 {
52     inp=$1 
53     scr=`mktemp -u Check_XXXXXXXX` 
54     cat <<EOF > ${scr}.C  
55 void ${scr}() 
56 {
57   int ret = 0;
58   gSystem->Load("libANALYSIS");
59   gSystem->Load("libANALYSISalice");
60   gSystem->Load("libTENDER");
61   // gSystem->Load("libTENDERSupplies");
62   gSystem->Load("libPWG1");
63   gSystem->Load("libPWG3base");
64   TFile* file = TFile::Open("${inp}", "READ");
65   if (!file) { 
66     Error("${scr}", "No such file ${inp}");
67     exit(1);
68   }
69   TObject* forward1 = file->Get("Forward");
70   if (!forward1) {
71     Error("${scr}", "No Forward object found in ${inp}");
72     ret |= 2;
73   } 
74   TObject* forward2 = file->Get("ForwardResults");
75   if (!forward2) {
76     Error("${scr}", "No ForwardResults object found in ${inp}");
77     ret |= 4;
78   } 
79   exit(ret);
80 }
81 EOF
82     # cat ${scr}.C 
83     mess -n "aliroot -l -b -q ${scr}.C "
84     aliroot -l -b -q ${scr}.C > /dev/null 2>&1 
85     ret=$? 
86     mess "-> $ret (0: good, 1: no file, 2: no Forward, 4: no ForwardResults"
87     rm -f ${scr}.C 
88     return $ret
89 }
90
91 # --------------------------------------------------------------------
92 year=""
93 prod=""
94 pass=-1
95 prep=""
96 post=""
97 dest=.
98 runn=0
99 qano=0
100 noac=0
101 arch=0
102 file=QAresults.root 
103
104 while test $# -gt 0 ; do 
105     case $1 in 
106         -h|--help)        usage   ; exit 0 ;; 
107         -v|--verbose)     let verb=$verb+1  ;; 
108         -p|--production)  prod=$2 ; shift ;; 
109         -P|--pass)        pass=$2 ; shift ;; 
110         -Q|--prepass)     prep=$2 ; shift ;; 
111         -R|--postpass)    post=$2 ; shift ;; 
112         -y|--year)        year=$2 ; shift ;; 
113         -d|--destination) dest=$2 ; shift ;; 
114         -r|--run)         runn=$2 ; shift ;; 
115         -q|--qa)          qano=$2 ; shift ;; 
116         -f|--file)        file=$2 ; shift ;; 
117         -T|--trending)    file=trending.root ; shift ;; 
118         -a|--archives)    arch=1  ;; 
119         -n|--no-action)   noac=1  ;; 
120         *) echo "$0: Unknown option $1" > /dev/stderr ; exit 2 ;; 
121     esac
122     shift
123 done
124
125 # --------------------------------------------------------------------
126 uid=`id -u`
127 genv_file=/tmp/gclient_env_${uid}
128
129 if test ! -f ${genv_file} ; then 
130     echo "No such file: ${genv_file}, please do alien-token-init" >/dev/stderr
131     exit 1
132 fi
133 . ${genv_file}
134 alien-token-info | grep -q "Token is still valid"
135 if test $? -ne 0 ; then 
136     echo "Token not valid, please re-new" > /dev/stderr 
137     exit 1
138 fi
139
140
141 # --------------------------------------------------------------------
142 if test "x$prod" = "x" ; then 
143     echo "No production identifier given" > /dev/stderr 
144     exit 2
145 fi
146
147 if test "x$year" = "x" ; then 
148     year=`echo $prod | sed -e 's/LHC\(..\).*/\1/'` 
149     if test "x$year" = "x" ; then 
150         echo "Couldn't get year from production identifier $prod" > /dev/stderr
151         exit 2
152     fi
153 fi
154 lett=`echo $prod | sed -e "s/LHC${year}\(.\).*/\1/"`
155 suff=`echo $prod | sed -e "s/LHC${year}${lett}//"`
156
157 redir="/dev/null"
158 if test $verb -gt 1 ; then redir=/dev/stderr ; fi
159
160 # --------------------------------------------------------------------
161 if test "x$post" != "x" ; then 
162     case $post in 
163         _*) ;; 
164         *) post="_${post}" ;; 
165     esac
166 fi
167 if test ${pass} -ge 0 ; then 
168     paid=pass${pass} 
169 fi
170 datd=data
171 esdd=ESDs/
172 if test "x${suff}" != "x" ; then 
173     datd=sim
174     esdd=
175 fi
176 path=/alice/${datd}/20${year}/${prod}/
177 store=${dest}/${prod}/${prep}${paid}${post}
178 search="${esdd}${prep}${paid}${post}"
179 if test $runn -gt 0 ; then 
180     path=`printf "${path}%09d/ESDs/${prep}${paid}${pass}${post}/" $runn` 
181     store=`printf "${store}/%09d" $runn` 
182     search=
183 fi
184 if test $qano -gt 0 ; then 
185     if test $runn -gt 0 ; then 
186         path=`printf "%sQA%02d/" $path $qano` 
187     else
188         if test "x$search" != "x" ; then search=${search}/ ; fi
189         search=${search}QA`printf %02d ${qano}` 
190     fi
191 fi
192 if test $arch -gt 0 ; then 
193     file=QA_archive.zip
194 fi
195 base=`basename $file .root`
196 if test "x$search" != "x" ; then search=${search}/ ; fi
197 search="${search}${file}"
198
199 # --------------------------------------------------------------------
200 cat <<EOF
201 Settings:
202
203         Production:             $prod
204         Year:                   $year
205         Letter:                 $lett
206         Suffix:                 $suff
207         Pass:                   $pass
208         Pass prefix:            $prep
209         Pass postfix:           $post
210         File:                   $file
211         Path:                   $path
212         Destination:            $dest
213         Store:                  $store
214         Run number:             $runn
215         Search string:          $search
216         Verbosity:              $verb
217         Redirection:            $redir
218 EOF
219     
220 # --------------------------------------------------------------------
221 mkdir -p ${store}
222 mess "alien_find ${path} ${search}"
223 files=`alien_find ${path} ${search} | grep -v "files found" 2> ${redir}` 
224 j=0
225 runs=
226 for i in $files ; do 
227     b=`echo $i | sed -e "s,${path},,"` 
228     d=
229     if test $runn -gt 0 ; then 
230         r=`echo $b | sed -e "s,[0-9]*${runn}\([0-9.]*\)/.*,\1," | tr '.' '_'`
231         if test $arch -lt 1 ; then 
232             o=${store}/${base}_${r}.root
233         else
234             d=${store}/${r}
235             mkdir -p $d
236             o=${d}/${file}
237         fi
238     else 
239         r=`echo $b | sed -e "s,/.*,,"` 
240         o=${store}/${base}_${r}.root
241     fi
242     runs="$runs $r" 
243     mess "$i -> $o"
244     if test $noac -lt 1 && test ! -f $o ; then 
245         mess "alien_cp alien:${i} file:${o}"
246         alien_cp alien:${i} file:${o} > ${redir} 2>&1 
247         if test -f $o ; then chmod g+rw ${o} ; fi
248     fi
249     if test $noac -lt 1 && test $arch -lt 1  ; then check_file $o ; fi
250     if test $noac -lt 1 && test $arch -gt 0 ; then 
251         (cd ${d} && unzip QAarchive.zip) > $redir 2>&1 
252     fi
253     let j=$j+1
254 done 
255 mess "Got a total of $j files for runs $runs"
256
257 # --------------------------------------------------------------------
258 #
259 # EOF
260 #
261
262