]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/macrosSDD/PlotQASDD.C
Add to repository the macro to plot the output of SDD calibration runs from LDCs
[u/mrichter/AliRoot.git] / ITS / macrosSDD / PlotQASDD.C
1 #if !defined(__CINT__) || defined(__MAKECINT__)
2 #include <TFile.h>
3 #include <TFileMerger.h>
4 #include <TAlienFile.h>
5 #include <TSystem.h>
6 #include <TGrid.h>
7 #include <TGridResult.h>
8 #include <Riostream.h>
9 #include <TObjArray.h>
10 #include <TClass.h>
11 #include <TKey.h>
12 #include <TFile.h>
13 #include <TFileMerger.h>
14 #include <TAlienFile.h>
15 //#include <TExec.h>
16 #include <TSystem.h>
17 #include <TGrid.h>
18 #include <TGridResult.h>
19 #include <Riostream.h>
20 #include <TObjArray.h>
21 #include <TClass.h>
22 #include <TH1F.h>
23 #include <TH2D.h>
24 #include <TH2F.h>
25 #include <TF1.h>
26 #include <TStyle.h>
27 #include <TCanvas.h>
28 #include <TLegend.h>
29 #include <TMath.h>
30 #include "AliRecoParam.h"
31 #endif
32
33 enum rawexpert_t{pattern,patternnorm,layer3norm,layer4norm,layer3occ,layer4occ,rawtot};
34 enum nonrawexpert_t{layer3,layer4,nonrawtot};
35
36 enum rpexpert_t{rlocaldistro,rlayer3norm,rlayer4norm,rmodpattern,rmodpatternnorm,rphilayer3,rphilayer4,rrlayer3,rrlayer4,occlayer3,occlayer4,recraw2dlayer3,recraw2dlayer4,recrawlayer3,recrawlayer4,dedxlayer3,dedxlayer4,rtot};
37 enum rnonexpert_t{rphizlayer3,rphizlayer4,rglobalrz,rglobalxy,rchargelayer3,rchargelayer4,rtimelayer3,rtimelayer4,rlayer3,rlayer4,nrtot};
38
39 enum canvsname_t{canvname0,canvname1,canvname2,canvname3,canvname4,canvname5,canvname6,canvname7,canvname8,canvname9,canvname10,canvname11,canvname12,canvname13,canvname14,canvname15,canvname16,canvname17,canvname18,canvname19,canvname20,canvname21,canvname22,canvname23};//
40
41
42
43 void PlotQASDD(Char_t fileName[100]="File.QA.111333.2010.LHC09b.pass2.root",Char_t eventspecie[25]="LowMultiplicity",Bool_t kDoEps=kFALSE)
44 {
45   const TString Rawsexpertname[]={"SDDModPattern","SDDModPatternNORM","SDDphizL3","SDDphizL4","SDDL3_RelativeOccupancy","SDDL4_RelativeOccupancy"};//6
46   const TString Rawsnonexpertname[]={"SDDphizL3NORM","SDDphizL4NORM"};//2
47
48   const TString RecPointsexpertname[]={"SDDLocalCoordDistrib","SDDModPatternL3RP","SDDModPatternL4RP","SDDModPatternRP","SDDModPatternRPNORM","SDDphidistrib_Layer3","SDDphidistrib_Layer4","SDDrdistrib_Layer3","SDDrdistrib_Layer4","SDDL3_RelativeOccupancy","SDDL4_RelativeOccupancy","SDDL3_Rec2Raw_2D","SDDL4_Rec2Raw_2D","SDDL3_Rec2Raw","SDDL4_Rec2Raw","SDDL3_dedx","SDDL4_dedx"};//17
49   const TString RecPointsnonexpertname[]={"SDDGlobalCoordDistribL3PHIZ","SDDGlobalCoordDistribL4PHIZ","SDDGlobalCoordDistribRZ","SDDGlobalCoordDistribYX","SDDLay3TotCh","SDDLay4TotCh","SDDdrifttime_Layer3","SDDdrifttime_Layer4","SDDModPatternL3RPNORM","SDDModPatternL4RPNORM"};//10
50
51   const TString canvassavedname[]={"RawLayers","Rawpatterns","RawLayersNORM","RawLayersRelOcc","RawLayersRelOccBoth","RecPointsphiz","RecPointsGlobalDistributions","RecPointsCharge","RecPointsDriftTime","RecPointsLocalDistribution","RecPointsLayers","RecPointsLayersNORM","RecPointsLayersPatterns","RecPointsPhiDistribution","RecPointsRDistribution","RecPointsChargeBothLayers","RecPointsDriftTimeBothLayers","RecPointsRelLayersOcc","RecPointsLayersRelOccBoth","RecPointsLayersRecRaw2D","RecPointsLayersRecRaw","RecPointsLayersRecRaw","RecPointsLayersRecRawBoth","RecPointsLayersdedx","RecPointsLayersdedxBoth"};//15
52
53   Char_t trendfile[25]="FileQAtrend.root";
54
55
56   gStyle->SetPalette(1);
57   //  gStyle->SetOptStat("ne");
58   if(gSystem->Exec(Form("ls %s >/dev/null 2>&1", fileName))!=0)
59     {
60       printf(" No file created --- Exit");
61       return;
62     }
63   TFile mergedfile(fileName);
64   if(mergedfile.GetKey("ITS")==0x0){
65     printf("In this run ITS QA has not been executed.\n\nExit macro \n\n");
66     return;
67   }
68   Char_t filepath[100];
69   Char_t namecanvas[50];
70   TDirectory *directory=NULL;
71   TDirectory *directory2=NULL;
72   Char_t histoname[200];
73   TH2D *historaw=NULL;
74   TH1F *historaw2=NULL;
75   TH2F *histodraw=NULL;
76   
77   TH1F *histo2save[9];
78   for(Int_t i=0;i<9;i++){histo2save[i]=NULL;}
79   
80   TF1 *f1 = new TF1("f1","1",-100000,100000); // this is the function defined to multiply histograms
81   Char_t layer[10];
82   float fmax=0.;
83   float fmaxold=0.;
84   float fmaxmargin;
85   
86   Int_t cannum=0;
87   Int_t histo2savenumber[9]={4,5,6,7,7,8,3,5,1};
88   TCanvas *canvas1 = new TCanvas("canvas1","SDD QA Plot",1000,600);
89   //   TLegend *legend=new TLegend(0.83,0.8,0.97,0.7);
90   TLegend *legend=new TLegend(0.81,0.895,0.95,0.995);
91   Bool_t updatecanvas[2];
92   for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
93   
94   // -------------This part is to read the number of chunks that were merged
95   Float_t fChnknmbr=0.;
96   FILE * pChunkNumber = fopen ("ChunkNumber.txt","r");
97   if(pChunkNumber){
98   Int_t rv=fscanf(pChunkNumber, "%f", &fChnknmbr);
99   fclose (pChunkNumber);
100   }
101   else fChnknmbr=1.;
102
103   gStyle->SetPalette(1);
104   float fCNinv=1./fChnknmbr;
105   //   printf("\n====================>%f\n\n", fCNinv);
106   
107   if(!mergedfile.IsOpen()){return;}else{printf("file is open\n");}
108   for(Int_t ispecie=0;ispecie<AliRecoParam::kNSpecies;ispecie++){
109     //__________________________________________________________________
110     //raw data
111     sprintf(filepath,"ITS/Raws/%s",AliRecoParam::GetEventSpecieName(ispecie));
112     printf("%s",filepath);
113     TString especie(filepath);
114     if(!especie.Contains(eventspecie)){printf("...Found and Skipped\n");continue;}
115     canvas1->Print("SDDQAPlot.ps[");
116     directory=(TDirectory*)mergedfile.Get(filepath);
117     if(!directory){printf("...Not Found\n ");}//faccio l'istogramma
118     else{
119       printf("...Found: The histograms of this EventSpecie will be displayed\n");
120       printf("1\n");
121       canvas1->Clear();
122       canvas1->Divide(2,1);
123       
124       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
125       for(Int_t iraws=2;iraws<4;iraws++){//non expert raws
126         canvas1->cd(iraws-1);
127         
128         sprintf(histoname,"%s/Expert/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),Rawsexpertname[iraws].Data());
129         printf("histo name %s ",Rawsexpertname[iraws].Data());
130         historaw=(TH2D*)mergedfile.Get(histoname);
131         if(historaw){printf("...Found\n");historaw->DrawCopy("colz");}
132         else{updatecanvas[iraws-2]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
133         historaw=NULL;
134       }//end for        
135       
136       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
137         {
138           canvas1->Update();
139           if(kDoEps){
140             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
141             canvas1->SaveAs(namecanvas);
142           }
143           canvas1->Print("SDDQAPlot.ps");
144         }
145       //else{delete canvas1; canvas1=NULL;}
146       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
147       canvas1->Clear();
148       canvas1->Divide(1,2);
149       printf("2 \n");
150       cannum++;
151       for(Int_t inraws=0;inraws<2;inraws++){//non expert raws
152         canvas1->cd(inraws+1);
153         sprintf(histoname,"%s/Expert/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),Rawsexpertname[inraws].Data());
154         printf("histo name %s ",Rawsexpertname[inraws].Data());
155         historaw2=(TH1F*)mergedfile.Get(histoname);
156         
157         
158         //        -----------------This is the part were I divide between the number of chunks to normalize the histogram----------------
159         
160         
161         if(historaw2)
162           {
163             printf("...Found\n");
164             if (inraws==1)
165               {
166                 historaw2->Multiply(f1,fCNinv);
167                 
168               }
169             historaw2->DrawCopy();
170           }
171         else{updatecanvas[inraws]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
172         historaw2=NULL;
173       }//end for
174       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
175         {
176           canvas1->Update();
177           if(kDoEps){
178             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
179             canvas1->SaveAs(namecanvas);
180           }
181           canvas1->Print("SDDQAPlot.ps"); 
182         }
183       //else{delete canvas2; canvas2=NULL;}
184       
185       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
186       printf("3\n");
187       cannum++;
188       canvas1->Clear();
189       canvas1->Divide(2,1);
190       for(Int_t iraws=0;iraws<2;iraws++){//non expert raws
191         canvas1->cd(iraws+1);
192         
193         sprintf(histoname,"%s/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),Rawsnonexpertname[iraws].Data());
194         printf("histo name %s",Rawsnonexpertname[iraws].Data());
195         historaw=(TH2D*)mergedfile.Get(histoname);
196         if(historaw){
197           printf("...Found\n");
198           historaw->Multiply(f1,fCNinv);
199           historaw->DrawCopy("colz");
200         }
201         else
202           {updatecanvas[iraws]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");} 
203         historaw=NULL;
204       }//end for
205       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
206         {
207           canvas1->Update();
208           if(kDoEps){
209             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
210             canvas1->SaveAs(namecanvas);
211           }
212           canvas1->Print("SDDQAPlot.ps"); 
213         }
214       //else{delete canvas3; canvas3=NULL;}
215       
216       //--------------------- new plots
217       printf("================= 4\n");
218       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
219       cannum++;
220       canvas1->Clear();
221       canvas1->Divide(2,1);
222       for(Int_t iraws=4;iraws<rawtot;iraws++){//non expert raws
223         canvas1->cd(iraws-3);
224         sprintf(histoname,"%s/Expert/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),Rawsexpertname[iraws].Data());
225         printf("histo name %s",Rawsexpertname[iraws].Data());
226         historaw2=(TH1F*)mergedfile.Get(histoname);
227         if(historaw2)
228           {
229             printf("...Found\n");
230             historaw2->DrawCopy();
231           }else
232           {
233             updatecanvas[iraws-4]=kFALSE;
234             printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");
235           } 
236         historaw2=NULL;
237       }//end for
238       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
239         {
240           canvas1->Update();
241           if(kDoEps){
242             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
243             canvas1->SaveAs(namecanvas);
244           }
245           canvas1->Print("SDDQAPlot.ps"); 
246         }
247       //else{delete canvas3; canvas3=NULL;}
248       
249       
250       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
251       canvas1->Clear();
252       legend->Clear();
253       printf("14\n");
254       cannum++;
255       for (Int_t i=4;i<rawtot;i++){
256         sprintf(histoname,"%s/Expert/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),Rawsexpertname[i].Data());
257         historaw2=(TH1F*)mergedfile.Get(histoname);
258         if(historaw2){
259           fmax=historaw2->GetMaximum();
260           if (i==4){
261             fmaxold=fmax;}
262           if (i!=4){
263             if(fmaxold<fmax){
264               fmaxold=fmax;
265             }
266           }
267         }
268         historaw2=NULL;
269       }
270       fmaxmargin=1.1*fmaxold;
271       for(Int_t irrpp=4;irrpp<rawtot;irrpp++){//non expert raws
272         
273         sprintf(histoname,"%s/Expert/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),Rawsexpertname[irrpp].Data());
274         printf("histo name %s",Rawsexpertname[irrpp].Data());
275         sprintf(layer, "layer %d",irrpp-1);
276         historaw2=(TH1F*)mergedfile.Get(histoname);
277         gStyle->SetOptStat(0);
278         
279         if(historaw2)
280           {
281             printf("...Found\n");
282             historaw2->GetYaxis()->SetRangeUser(0,fmaxmargin);
283             historaw2->SetTitle("Raw Relative Occupancy");
284             if (irrpp==4) {historaw2->SetStats(0);historaw2->SetLineColor(2);historaw2->DrawCopy();}
285             if (irrpp!=4) {historaw2->SetStats(0);historaw2->SetLineColor(4);historaw2->DrawCopy("same");}
286             legend->AddEntry(historaw2,layer,"l");
287             legend->Draw();
288             canvas1->Update();
289           }
290         else{updatecanvas[irrpp-4]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
291         historaw2=NULL;
292       }//end for
293       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
294         {
295           canvas1->Update();
296           if(kDoEps){
297             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
298             canvas1->SaveAs(namecanvas);
299           }
300           canvas1->Print("SDDQAPlot.ps"); 
301         }
302       
303     }//end if directory
304     
305     
306     
307     //_______________________________________________________________________________
308     //rec point
309     sprintf(filepath,"ITS/RecPoints/%s",AliRecoParam::GetEventSpecieName(ispecie));
310     printf("%s\n",filepath);
311     directory2=(TDirectory*)mergedfile.Get(filepath);
312     if(directory2){
313       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
314       canvas1->Clear();
315       canvas1->Divide(2,1);
316       printf("4\n");
317       cannum++;
318       for(Int_t irp=0;irp<2;irp++){//non expert rec point
319         canvas1->cd(irp+1);
320         
321         sprintf(histoname,"%s/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsnonexpertname[irp].Data());
322         printf("histo name %s ",RecPointsnonexpertname[irp].Data());
323         histodraw=(TH2F*)mergedfile.Get(histoname);
324         if(histodraw){printf("...Found\n");histodraw->DrawCopy("colz");}else{updatecanvas[irp]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
325         histodraw=NULL;
326       }
327       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
328         {
329           canvas1->Update();
330           if(kDoEps){
331             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
332             canvas1->SaveAs(namecanvas);
333           }
334           canvas1->Print("SDDQAPlot.ps"); 
335         }
336       //        else{delete canvas4; canvas4=NULL;}
337       
338       
339       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
340       canvas1->Clear();
341       canvas1->Divide(2,1);
342       printf("5\n");
343       cannum++;
344       for(Int_t irrp=2;irrp<4;irrp++){//non expert raws
345         canvas1->cd(irrp-1);
346         
347         sprintf(histoname,"%s/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsnonexpertname[irrp].Data());
348         printf("histo name %s",RecPointsnonexpertname[irrp].Data() );
349         histodraw=(TH2F*)mergedfile.Get(histoname);
350         if(histodraw){printf("...Found\n");histodraw->DrawCopy("colz");}else{updatecanvas[irrp-2]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
351         histodraw=NULL;
352       }
353       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
354         {
355           canvas1->Update();
356           if(kDoEps){
357             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
358             canvas1->SaveAs(namecanvas);
359           }
360           canvas1->Print("SDDQAPlot.ps"); 
361         }
362       //else{delete canvas5; canvas5=NULL;}
363       
364       
365       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
366       canvas1->Clear();
367       canvas1->Divide(1,2);
368       printf("6\n");
369       cannum++;
370       for(Int_t irrpp=4;irrpp<6;irrpp++){//non expert raws
371         canvas1->cd(irrpp-3);
372         
373         sprintf(histoname,"%s/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsnonexpertname[irrpp].Data());
374         printf("histo name %s",RecPointsnonexpertname[irrpp].Data());
375         historaw2=(TH1F*)mergedfile.Get(histoname);
376         
377         if(historaw2){printf("...Found\n");historaw2->DrawCopy();}else{updatecanvas[irrpp-4]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
378         historaw2=NULL;
379       }//end for
380       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
381         {
382           canvas1->Update();
383           if(kDoEps){
384             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
385             canvas1->SaveAs(namecanvas);
386           }
387           canvas1->Print("SDDQAPlot.ps"); 
388         }
389       //else{delete canvas6; canvas6=NULL;}
390       
391       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
392       canvas1->Clear();
393       canvas1->Divide(1,2);
394       printf("7\n");
395       cannum++;
396       for(Int_t irrpp=6;irrpp<8;irrpp++){//non expert raws
397         canvas1->cd(irrpp-5);
398         //        printf("histo name\n");
399         sprintf(histoname,"%s/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsnonexpertname[irrpp].Data());
400         printf("histo name %s",RecPointsnonexpertname[irrpp].Data());
401         historaw2=(TH1F*)mergedfile.Get(histoname);
402         if(historaw2){printf("...Found\n");historaw2->DrawCopy();}else{updatecanvas[irrpp-6]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
403         historaw2=NULL;
404       }//end for
405       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
406         {
407           canvas1->Update();
408           if(kDoEps){
409             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
410             canvas1->SaveAs(namecanvas);
411           }
412           canvas1->Print("SDDQAPlot.ps"); 
413         }
414       //else{delete canvas7; canvas7=NULL;}
415
416       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
417       canvas1->Clear();
418       printf("8\n");
419       cannum++;
420       //canvas1->Divide(2,1);
421       sprintf(histoname,"%s/Expert/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[rlocaldistro].Data());
422       printf("histo name %s",RecPointsexpertname[rlocaldistro].Data());
423       histodraw=(TH2F*)mergedfile.Get(histoname);
424
425       if(histodraw){printf("...Found\n");histodraw->DrawCopy("colz");}else{updatecanvas[0]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
426       histodraw=NULL;
427       if(updatecanvas[0]==kTRUE){
428         canvas1->Update();
429         if(kDoEps){
430           sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
431           canvas1->SaveAs(namecanvas);
432         }
433         canvas1->Print("SDDQAPlot.ps"); 
434       }
435       //else{delete canvas8; canvas8=NULL;}
436        
437       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
438       canvas1->Clear();
439       canvas1->Divide(2,1);
440       printf("9\n");
441       cannum++;
442       for(Int_t i=1;i<3;i++)
443         {
444           canvas1->cd(i);
445
446           sprintf(histoname,"ITS/RecPoints/%s/Expert/%s_%s",AliRecoParam::GetEventSpecieName(ispecie),AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[i].Data());
447           printf("histo name %s",RecPointsexpertname[i].Data());
448           histodraw=(TH2F*)mergedfile.Get(histoname);
449
450           if(histodraw){printf("...Found\n");histodraw->DrawCopy("colz");}else{updatecanvas[i-1]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
451           histodraw=NULL;
452         }
453       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
454         {
455           canvas1->Update();
456           if(kDoEps){
457             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
458             canvas1->SaveAs(namecanvas);
459           }
460           canvas1->Print("SDDQAPlot.ps"); 
461         }
462       //else{delete canvas9; canvas9=NULL;}
463       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
464       canvas1->Clear();
465       canvas1->Divide(2,1);
466       printf("10\n");
467       cannum++;
468       for(Int_t i=8;i<10;i++)
469         {
470           canvas1->cd(i-7);
471
472           sprintf(histoname,"ITS/RecPoints/%s/Expert/%s_%s",AliRecoParam::GetEventSpecieName(ispecie),AliRecoParam::GetEventSpecieName(ispecie),RecPointsnonexpertname[i].Data());
473           histodraw=(TH2F*)mergedfile.Get(histoname);
474           printf("histo name %s",RecPointsnonexpertname[i].Data());
475
476           if(histodraw){
477             printf("...Found\n");histodraw->Multiply(f1,fCNinv);
478             histodraw->DrawCopy("colz");
479           }else{updatecanvas[i-8]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
480           histodraw=NULL;
481         }
482       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
483         {
484           canvas1->Update();
485           if(kDoEps){
486             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
487             canvas1->SaveAs(namecanvas);
488           }
489           canvas1->Print("SDDQAPlot.ps"); 
490         }
491       //else{delete canvas10; canvas10=NULL;}
492
493       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
494       canvas1->Clear();
495       canvas1->Divide(1,2);
496       printf("11\n");
497       cannum++;
498       for(Int_t i=3;i<5;i++)
499         {
500           canvas1->cd(i-2);
501
502           sprintf(histoname,"ITS/RecPoints/%s/Expert/%s_%s",AliRecoParam::GetEventSpecieName(ispecie),AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[i].Data());
503           printf("histo name %s",RecPointsexpertname[i].Data());
504           historaw2=(TH1F*)mergedfile.Get(histoname);
505
506           if(historaw2)
507             {
508               printf("...Found\n");
509               if (i==4){historaw2->Multiply(f1,fCNinv);}
510               historaw2->DrawCopy();
511             }
512           else{updatecanvas[i-3]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
513           historaw2=NULL;
514         }
515       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
516         {
517           canvas1->Update();
518           if(kDoEps){
519             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
520             canvas1->SaveAs(namecanvas);
521           }
522           canvas1->Print("SDDQAPlot.ps"); 
523         }
524       //else{delete canvas11; canvas11=NULL;}
525
526       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
527       canvas1->Clear();
528       canvas1->Divide(2,1);
529       printf("12\n");
530       cannum++;
531       for(Int_t i=5;i<7;i++)
532         {
533           canvas1->cd(i-4);
534
535           sprintf(histoname,"ITS/RecPoints/%s/Expert/%s_%s",AliRecoParam::GetEventSpecieName(ispecie),AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[i].Data());
536           printf("histo name %s",RecPointsexpertname[i].Data());
537           historaw2=(TH1F*)mergedfile.Get(histoname);
538
539           if(historaw2){printf("...Found\n");historaw2->DrawCopy();}else{updatecanvas[i-5]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
540           historaw2=NULL;
541         }
542       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
543         {
544           canvas1->Update();
545           if(kDoEps){
546             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
547             canvas1->SaveAs(namecanvas);
548           }
549           canvas1->Print("SDDQAPlot.ps"); 
550         }
551       //else{delete canvas12; canvas12=NULL;}
552
553       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
554       canvas1->Clear();
555       canvas1->Divide(2,1);
556       printf("13\n");
557       cannum++;
558       for(Int_t i=7;i<9;i++)
559         {
560           canvas1->cd(i-6);
561           sprintf(histoname,"ITS/RecPoints/%s/Expert/%s_%s",AliRecoParam::GetEventSpecieName(ispecie),AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[i].Data());
562           printf("histo name %s",RecPointsexpertname[i].Data());
563           historaw2=(TH1F*)mergedfile.Get(histoname);
564
565           if(historaw2){printf("...Found\n");historaw2->DrawCopy();}else{updatecanvas[i-7]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
566           historaw2=NULL;
567         }
568       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
569         {
570           canvas1->Update();
571           if(kDoEps){
572             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
573             canvas1->SaveAs(namecanvas);
574           }
575           canvas1->Print("SDDQAPlot.ps"); 
576         }
577           
578
579       //superimposed
580       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
581       canvas1->Clear();
582       legend->Clear();
583       printf("14\n");
584       cannum++;
585       for (Int_t i=4;i<6;i++){
586         sprintf(histoname,"%s/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsnonexpertname[i].Data());
587         historaw2=(TH1F*)mergedfile.Get(histoname);
588         if(historaw2){
589           fmax=historaw2->GetMaximum();
590           if (i==4){
591             fmaxold=fmax;}
592           if (i!=4){
593             if(fmaxold<fmax){
594               fmaxold=fmax;
595             }
596           }
597         }
598         historaw2=NULL;
599       }
600       fmaxmargin=1.1*fmaxold;
601       for(Int_t irrpp=4;irrpp<6;irrpp++){//non expert raws
602     
603         sprintf(histoname,"%s/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsnonexpertname[irrpp].Data());
604         printf("histo name %s",RecPointsnonexpertname[irrpp].Data());
605         sprintf(layer, "layer %d",irrpp-1);
606         historaw2=(TH1F*)mergedfile.Get(histoname);
607         gStyle->SetOptStat(0);
608           
609         if(historaw2)
610           {
611             printf("...Found\n");
612             historaw2->GetYaxis()->SetRangeUser(0,fmaxmargin);
613             historaw2->SetTitle("Charge");
614             historaw2->SetFillColor(0);
615             if (irrpp==4) {historaw2->SetStats(0);historaw2->SetLineColor(2);historaw2->DrawCopy();}
616             if (irrpp!=4) {historaw2->SetStats(0);historaw2->SetLineColor(4);historaw2->DrawCopy("same");}
617             legend->AddEntry(historaw2,layer,"l");
618             legend->Draw();
619             canvas1->Update();
620           }
621         else{updatecanvas[irrpp-4]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
622         historaw2=NULL;
623       }//end for
624       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
625         {
626           canvas1->Update();
627           if(kDoEps){
628             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
629             canvas1->SaveAs(namecanvas);
630           }
631           canvas1->Print("SDDQAPlot.ps"); 
632         }
633           
634       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
635       canvas1->Clear();
636       legend->Clear();
637       printf("15\n");
638       cannum++;
639       for (Int_t i=6;i<8;i++){
640         sprintf(histoname,"%s/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsnonexpertname[i].Data());
641         historaw2=(TH1F*)mergedfile.Get(histoname);
642         if(historaw2){
643           fmax=historaw2->GetMaximum();
644           if (i==6){
645             fmaxold=fmax;}
646           if (i!=6){
647             if(fmaxold<fmax){
648               fmaxold=fmax;}}}
649         fmaxmargin=1.1*fmaxold;
650       }
651       for(Int_t irrpp=6;irrpp<8;irrpp++){//non expert raws
652     
653         sprintf(histoname,"%s/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsnonexpertname[irrpp].Data());
654         printf("histo name %s",RecPointsnonexpertname[irrpp].Data());
655         sprintf(layer, "layer %d",irrpp-3);
656         historaw2=(TH1F*)mergedfile.Get(histoname);
657         gStyle->SetOptStat(0);
658           
659         if(historaw2)
660           {
661             printf("...Found\n");
662             historaw2->GetYaxis()->SetRangeUser(0,fmaxmargin);
663             historaw2->SetTitle("Drift Time");
664             historaw2->SetFillColor(0);
665             if (irrpp==6) {historaw2->SetStats(0); historaw2->SetLineColor(2);historaw2->DrawCopy();}
666             if (irrpp!=6) {historaw2->SetStats(0); historaw2->SetLineColor(4);historaw2->DrawCopy("same");}
667             legend->AddEntry(historaw2,layer,"l");
668             legend->Draw();
669             canvas1->Update();
670           }
671         else{updatecanvas[irrpp-6]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
672         printf("%s\n%s\n",historaw2->GetName(),historaw2->GetTitle());
673         historaw2=NULL;
674       }//end for
675       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
676         {
677           canvas1->Update();
678           if(kDoEps){
679             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
680             canvas1->SaveAs(namecanvas);
681           }
682           canvas1->Print("SDDQAPlot.ps"); 
683         }
684
685       //------------------------------------------- new plot
686
687       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
688       canvas1->Clear();
689       canvas1->Divide(2,1);
690       printf("13\n");
691       cannum++;
692       for(Int_t i=9;i<11;i++)
693         {
694           canvas1->cd(i-8);
695           sprintf(histoname,"ITS/RecPoints/%s/Expert/%s_%s",AliRecoParam::GetEventSpecieName(ispecie),AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[i].Data());
696           printf("histo name %s",RecPointsexpertname[i].Data());
697           historaw2=(TH1F*)mergedfile.Get(histoname);
698
699           if(historaw2){printf("...Found\n");historaw2->DrawCopy();}else{updatecanvas[i-9]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
700           historaw2=NULL;
701         }
702       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
703         {
704           canvas1->Update();
705           if(kDoEps){
706             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
707             canvas1->SaveAs(namecanvas);
708           }
709           canvas1->Print("SDDQAPlot.ps"); 
710         }
711           
712       //------------------------------------
713       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
714       canvas1->Clear();
715       legend->Clear();
716       printf("14\n");
717       cannum++;
718       for (Int_t i=9;i<11;i++){
719         sprintf(histoname,"%s/Expert/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[i].Data());
720         historaw2=(TH1F*)mergedfile.Get(histoname);
721         if(historaw2){
722           fmax=historaw2->GetMaximum();
723           if (i==4){
724             fmaxold=fmax;}
725           if (i!=4){
726             if(fmaxold<fmax){
727               fmaxold=fmax;
728             }
729           }
730         }
731         historaw2=NULL;
732       }
733       fmaxmargin=1.1*fmaxold;
734       for(Int_t irrpp=9;irrpp<11;irrpp++){//non expert raws
735           
736         sprintf(histoname,"%s/Expert/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[irrpp].Data());
737         printf("histo name %s",RecPointsexpertname[irrpp].Data());
738         sprintf(layer, "layer %d",irrpp-6);
739         historaw2=(TH1F*)mergedfile.Get(histoname);
740         gStyle->SetOptStat(0);
741           
742         if(historaw2)
743           {
744             printf("...Found\n");
745             historaw2->GetYaxis()->SetRangeUser(0,fmaxmargin);
746             historaw2->SetTitle("RecPoint Relative Occupancy");
747             if (irrpp==9) {historaw2->SetStats(0);historaw2->SetLineColor(2);historaw2->DrawCopy();}
748             if (irrpp!=9) {historaw2->SetStats(0);historaw2->SetLineColor(4);historaw2->DrawCopy("same");}
749             legend->AddEntry(historaw2,layer,"l");
750             legend->Draw();
751             canvas1->Update();
752           }
753         else{updatecanvas[irrpp-9]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
754         historaw2=NULL;
755       }//end for
756       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
757         {
758           canvas1->Update();
759           if(kDoEps){
760             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
761             canvas1->SaveAs(namecanvas);
762           }
763           canvas1->Print("SDDQAPlot.ps"); 
764         }
765
766
767       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
768       canvas1->Clear();
769       canvas1->Divide(2,1);
770       printf("13\n");
771       cannum++;
772       for(Int_t i=11;i<13;i++)
773         {
774           canvas1->cd(i-10);
775           sprintf(histoname,"ITS/RecPoints/%s/Expert/%s_%s",AliRecoParam::GetEventSpecieName(ispecie),AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[i].Data());
776           printf("histo name %s",RecPointsexpertname[i].Data());
777           historaw=(TH2D*)mergedfile.Get(histoname);
778
779           if(historaw){printf("...Found\n");historaw->DrawCopy("colz");}else{updatecanvas[i-11]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
780           historaw2=NULL;
781         }
782       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
783         {
784           canvas1->Update();
785           if(kDoEps){
786             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
787             canvas1->SaveAs(namecanvas);
788           }
789           canvas1->Print("SDDQAPlot.ps"); 
790         }
791           
792
793
794       //-----------------
795       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
796       canvas1->Clear();
797       canvas1->Divide(2,1);
798       printf("13\n");
799       cannum++;
800       for(Int_t i=13;i<15;i++)
801         {
802           canvas1->cd(i-12);
803           sprintf(histoname,"ITS/RecPoints/%s/Expert/%s_%s",AliRecoParam::GetEventSpecieName(ispecie),AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[i].Data());
804           printf("histo name %s",RecPointsexpertname[i].Data());
805           historaw2=(TH1F*)mergedfile.Get(histoname);
806
807           if(historaw2){printf("...Found\n");historaw2->DrawCopy();}else{updatecanvas[i-13]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
808           historaw2=NULL;
809         }
810       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
811         {
812           canvas1->Update();
813           if(kDoEps){
814             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
815             canvas1->SaveAs(namecanvas);
816           }
817           canvas1->Print("SDDQAPlot.ps"); 
818         }
819       //--------------------------------------------
820
821       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
822       canvas1->Clear();
823       legend->Clear();
824       printf("14\n");
825       cannum++;
826       for (Int_t i=13;i<15;i++){
827         sprintf(histoname,"%s/Expert/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[i].Data());
828         historaw2=(TH1F*)mergedfile.Get(histoname);
829         if(historaw2){
830           fmax=historaw2->GetMaximum();
831           if (i==13){
832             fmaxold=fmax;}
833           if (i!=13){
834             if(fmaxold<fmax){
835               fmaxold=fmax;
836             }
837           }
838         }
839         historaw2=NULL;
840       }
841       fmaxmargin=1.1*fmaxold;
842       for(Int_t irrpp=13;irrpp<15;irrpp++){//non expert raws
843     
844         sprintf(histoname,"%s/Expert/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[irrpp].Data());
845         printf("histo name %s",RecPointsexpertname[irrpp].Data());
846         sprintf(layer, "layer %d",irrpp-10);
847         historaw2=(TH1F*)mergedfile.Get(histoname);
848         gStyle->SetOptStat(0);
849           
850         if(historaw2)
851           {
852             printf("...Found\n");
853             historaw2->GetYaxis()->SetRangeUser(0,fmaxmargin);
854             historaw2->SetTitle("Rec2Raw Ratio");
855             if (irrpp==13) {historaw2->SetStats(0);historaw2->SetLineColor(2);historaw2->DrawCopy();}
856             if (irrpp!=13) {historaw2->SetStats(0);historaw2->SetLineColor(4);historaw2->DrawCopy("same");}
857             legend->AddEntry(historaw2,layer,"l");
858             legend->Draw();
859             canvas1->Update();
860           }
861         else{updatecanvas[irrpp-13]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
862         historaw2=NULL;
863       }//end for
864       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
865         {
866           canvas1->Update();
867           if(kDoEps){
868             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
869             canvas1->SaveAs(namecanvas);
870           }
871           canvas1->Print("SDDQAPlot.ps"); 
872         }
873
874           
875       //--------------------------------------
876           
877       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
878       canvas1->Clear();
879       canvas1->Divide(2,1);
880       printf("13\n");
881       cannum++;
882       for(Int_t i=15;i<17;i++)
883         {
884           canvas1->cd(i-14);
885           sprintf(histoname,"ITS/RecPoints/%s/Expert/%s_%s",AliRecoParam::GetEventSpecieName(ispecie),AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[i].Data());
886           printf("histo name %s",RecPointsexpertname[i].Data());
887           historaw2=(TH1F*)mergedfile.Get(histoname);
888                 
889           if(historaw2){printf("...Found\n");historaw2->DrawCopy();}else{updatecanvas[i-15]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
890           historaw2=NULL;
891         }
892       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
893         {
894           canvas1->Update();
895           if(kDoEps){
896             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
897             canvas1->SaveAs(namecanvas);
898           }
899           canvas1->Print("SDDQAPlot.ps"); 
900         }
901           
902
903       //--------------------------------------------
904
905       for(Int_t i=0;i<2;i++){updatecanvas[i]=kTRUE;}
906       canvas1->Clear();
907       legend->Clear();
908       printf("14\n");
909       cannum++;
910       for (Int_t i=15;i<17;i++){
911         sprintf(histoname,"%s/Expert/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[i].Data());
912         historaw2=(TH1F*)mergedfile.Get(histoname);
913         if(historaw2){
914           fmax=historaw2->GetMaximum();
915           if (i==15){
916             fmaxold=fmax;}
917           if (i!=15){
918             if(fmaxold<fmax){fmaxold=fmax;}
919           }
920         }
921         historaw2=NULL;
922       }
923       fmaxmargin=1.1*fmaxold;
924       for(Int_t irrpp=15;irrpp<17;irrpp++){//non expert raws
925     
926         sprintf(histoname,"%s/Expert/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[irrpp].Data());
927         printf("histo name %s",RecPointsexpertname[irrpp].Data());
928         sprintf(layer, "layer %d",irrpp-12);
929         historaw2=(TH1F*)mergedfile.Get(histoname);
930         gStyle->SetOptStat(0);
931           
932         if(historaw2)
933           {
934             printf("...Found\n");
935             historaw2->GetYaxis()->SetRangeUser(0,fmaxmargin);
936             historaw2->SetTitle("RecPoint dEdx");
937             if (irrpp==15) {historaw2->SetStats(0);historaw2->SetLineColor(2);historaw2->DrawCopy();}
938             if (irrpp!=15) {historaw2->SetStats(0);historaw2->SetLineColor(4);historaw2->DrawCopy("same");}
939             legend->AddEntry(historaw2,layer,"l");
940             legend->Draw();
941             canvas1->Update();
942           }
943         else{updatecanvas[irrpp-15]=kFALSE;printf("...Not Found: the histogram or this QA has been done before the histograms was added to QA\n");}
944         historaw2=NULL;
945       }//end for
946       if(updatecanvas[0]==kTRUE||updatecanvas[1]==kTRUE)
947         {
948           canvas1->Update();
949           if(kDoEps){
950             sprintf(namecanvas,"%s.eps",canvassavedname[cannum].Data());
951             canvas1->SaveAs(namecanvas);
952           }
953           canvas1->Print("SDDQAPlot.ps"); 
954         }
955       canvas1->Print("SDDQAPlot.ps]"); 
956
957
958       for(Int_t isave=0;isave<9;isave++){
959         if(isave<4)sprintf(histoname,"%s/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsnonexpertname[histo2savenumber[isave]].Data());
960         if(isave>4&&isave<7)sprintf(histoname,"%s/Expert/%s_%s",filepath,AliRecoParam::GetEventSpecieName(ispecie),RecPointsexpertname[histo2savenumber[isave]].Data());
961         if(isave>7)sprintf(histoname,"ITS/Raws/%s/Expert/%s_%s",AliRecoParam::GetEventSpecieName(ispecie),AliRecoParam::GetEventSpecieName(ispecie),Rawsexpertname[histo2savenumber[isave]].Data());
962         printf("file2save name:\t %s\n",histoname);
963         histo2save[isave]=(TH1F*)mergedfile.Get(histoname);
964       }
965
966       TFile file2savefortrend(trendfile,"recreate");
967       file2savefortrend.cd();
968       for(Int_t iss=0;iss<9;iss++){printf("Saved %d\n",iss); histo2save[iss]->Write();}
969       file2savefortrend.Close();
970         
971       //else{delete canvas13; canvas13=NULL;}   
972       //directory2=NULL;
973     }//end directory
974
975
976
977   }//end for   
978
979
980
981
982   delete  directory;
983   directory=NULL;
984   delete directory2;
985   directory2=NULL;
986
987 }//end macro
988
989