Updates in GRP Preprocessor (Ernesto)
[u/mrichter/AliRoot.git] / ESDCheck / ana.C
1 Bool_t gIsAnalysisLoaded = kFALSE ; 
2
3 //______________________________________________________________________
4 Bool_t LoadLib( const char* pararchivename) 
5 {
6   // Loads the AliRoot required libraries from a tar file 
7
8   Bool_t rv = kTRUE ; 
9  
10   char cdir[1024] ; 
11   sprintf(cdir, "%s", gSystem->WorkingDirectory() ) ; 
12   
13   // Setup par File
14   if (pararchivename) {
15    char parpar[80] ; 
16    sprintf(parpar, "%s.par", pararchivename) ;
17    if ( gSystem->AccessPathName(parpar) ) {
18     gSystem->ChangeDirectory(gSystem->Getenv("ALICE_ROOT")) ;
19     char processline[1024];
20     sprintf(processline, ".! make %s", parpar) ; 
21     cout << processline << endl ; 
22     gROOT->ProcessLine(processline) ;
23     gSystem->ChangeDirectory(cdir) ; 
24     sprintf(processline, ".! mv /tmp/%s .", parpar) ;
25     gROOT->ProcessLine(processline) ;   
26     sprintf(processline,".! tar xvzf %s",parpar);
27     gROOT->ProcessLine(processline);
28    }
29    gSystem->ChangeDirectory(pararchivename);
30    
31     // check for BUILD.sh and execute
32     if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
33       printf("*** Building PAR archive  %s  ***\n", pararchivename);
34
35       if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
36         AliError(Form("Cannot Build the PAR Archive %s! - Abort!", pararchivename) );
37         return kFALSE ;
38       }
39     }
40
41     // check for SETUP.C and execute
42     if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
43       printf("*** Setup PAR archive  %s     ***\n", pararchivename);
44       gROOT->Macro("PROOF-INF/SETUP.C");
45     }    
46   }
47
48   if ( strstr(pararchivename, "ESD") ) {
49     //gSystem->Load("libVMC.so");
50     //gSystem->Load("libRAliEn.so");
51     gSystem->Load("libESD.so") ;
52     //gSystem->Load("libProof.so") ;
53   }
54
55   if ( strstr(pararchivename, "AnalysisCheck") ) {
56     gSystem->Load("libSpectrum.so");
57   }
58   
59   printf("lib%s done\n", pararchivename);
60
61   gSystem->ChangeDirectory(cdir);
62
63   gIsAnalysisLoaded = kTRUE ; 
64   return rv ; 
65 }
66
67 //______________________________________________________________________
68 void ana(const Int_t kEvent=100)  
69
70   if (! gIsAnalysisLoaded ) {
71     LoadLib("ESD") ; 
72     LoadLib("AOD") ; 
73     LoadLib("ANALYSIS") ; 
74     LoadLib("AnalysisCheck") ; 
75   }
76   
77   // create the analysis goodies object
78   AliAnalysisGoodies * ag = new AliAnalysisGoodies() ; 
79
80   // definition of analysis tasks
81  
82  
83   AliPHOSQATask * phos  =  new AliPHOSQATask("PHOS") ;
84   AliAnalysisDataContainer * phosIn = ag->ConnectInput(phos, TChain::Class(), 0) ; 
85   ag->ConnectOuput(phos, TObjArray::Class(), 0) ;  
86
87   AliEMCALQATask *emcal = new AliEMCALQATask("EMCal") ;
88   ag->ConnectInput(emcal, phosIn, 0) ; 
89   ag->ConnectOuput(emcal, TObjArray::Class(), 0) ;  
90
91   AliPMDQATask * pmd    = new AliPMDQATask("PMD") ;
92   ag->ConnectInput(pmd, phosIn, 0) ; 
93   ag->ConnectOuput(pmd, TObjArray::Class(), 0) ;  
94
95   AliAnalysisTaskPt * pt = new AliAnalysisTaskPt("Pt") ;
96   ag->ConnectInput(pt, phosIn, 0) ; 
97   ag->ConnectOuput(pt, TObjArray::Class(), 0) ;  
98
99   AliHMPIDQATask * hmpid= new AliHMPIDQATask("HMPID") ;
100   ag->ConnectInput(hmpid, phosIn, 0) ; 
101   ag->ConnectOuput(hmpid, TObjArray::Class(), 0) ;  
102
103   AliT0QATask * t0     = new AliT0QATask("T0") ;
104   ag->ConnectInput(t0, phosIn, 0) ; 
105   ag->ConnectOuput(t0, TObjArray::Class(), 0) ;  
106
107   AliMUONQATask * muon = new AliMUONQATask("MUON") ;
108   ag->ConnectInput(muon, phosIn, 0) ; 
109   ag->ConnectOuput(muon, TObjArray::Class(), 0) ;  
110
111   AliTRDQATask * trd   = new AliTRDQATask("TRD") ;
112   ag->ConnectInput(trd, phosIn, 0) ; 
113   ag->ConnectOuput(trd, TObjArray::Class(), 0) ;  
114
115   AliTOFQATask * tof   = new AliTOFQATask("TOF") ;
116   ag->ConnectInput(tof, phosIn, 0) ; 
117   ag->ConnectOuput(tof, TObjArray::Class(), 0) ;  
118
119   AliVZEROQATask * vzero = new AliVZEROQATask("VZERO") ;
120   ag->ConnectInput(vzero, phosIn, 0) ; 
121   ag->ConnectOuput(vzero, TObjArray::Class(), 0) ;  
122
123   AliFMDQATask * fmd = new AliFMDQATask("FMD") ;
124   ag->ConnectInput(fmd, phosIn, 0) ; 
125   ag->ConnectOuput(fmd, TObjArray::Class(), 0) ;  
126
127   // get the data to analyze
128
129   // definition of Tag cuts 
130   const char * runCuts = 0x0 ; 
131   const char * evtCuts = 0x0 ; 
132   const char * lhcCuts = 0x0 ; 
133   const char * detCuts = 0x0 ; 
134   
135 //"fEventTag.fNPHOSClustersMin == 1 && fEventTag.fNEMCALClustersMin == 1" ; 
136
137   
138   TString input = gSystem->Getenv("ANA_INPUT") ; 
139   if ( input != "") {
140     char argument[1024] ;  
141     if ( input.Contains("tag?") ) {
142       //create the ESD collection from the tag collection 
143       input.ReplaceAll("tag?", "") ; 
144       const char * collESD = "esdCollection.xml" ;
145       ag->MakeEsdCollectionFromTagCollection(runCuts, lhcCuts, detCuts, evtCuts, input.Data(), collESD) ;
146       sprintf(argument, "esd?%s", collESD) ; 
147     } else if ( input.Contains("esd?") ) 
148       sprintf(argument, "%s", input.Data()) ; 
149     ag->Process(argument) ;
150
151   } else {
152
153     TChain* analysisChain = new TChain("esdTree") ;
154     //   input = "alien:///alice/cern.ch/user/a/aliprod/prod2006_2/output_pp/105/411/AliESDs.root" ; 
155     //   analysisChain->AddFile(input);
156     input = "AliESDs.root" ; 
157     const char * kInDir = gSystem->Getenv("OUTDIR") ; 
158     if ( kInDir ) {
159       if ( ! gSystem->cd(kInDir) ) {
160         printf("%s does not exist\n", kInDir) ;
161         return ;
162       }     
163       Int_t event, skipped=0 ; 
164       char file[120] ;
165       for (event = 0 ; event < kEvent ; event++) {
166         sprintf(file, "%s/%d/AliESDs.root", kInDir,event) ; 
167         TFile * fESD = 0 ; 
168         if ( fESD = TFile::Open(file)) 
169           if ( fESD->Get("esdTree") ) { 
170             printf("++++ Adding %s\n", file) ;
171             analysisChain->AddFile(file);
172           }
173           else { 
174             printf("---- Skipping %s\n", file) ;
175             skipped++ ;
176           }
177       }
178       printf("number of entries # %lld, skipped %d\n", analysisChain->GetEntries(), skipped*100) ;      
179     }
180     else  
181       analysisChain->AddFile(input);
182     
183     ag->Process(analysisChain) ; 
184   }
185   return ;
186 }
187
188 //______________________________________________________________________
189 void Merge(const char * xml, const char * sub, const char * out) 
190 {
191   if (! gIsAnalysisLoaded ) 
192     LoadLib("ESD") ; 
193   
194   AliAnalysisGoodies * ag = new AliAnalysisGoodies() ; 
195   ag->Merge(xml, sub, out) ;
196 }
197