]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGPP/ZDC/trending/MakeTrendingZDCQA.C
primary particle criteria correction (ESD)
[u/mrichter/AliRoot.git] / PWGPP / ZDC / trending / MakeTrendingZDCQA.C
1 /******************************************************************************************************************************************
2 Contact person: Marco Leoncino (leoncino@to.infn.it)
3 Macro to run the ZDC QA trending by accessing the std QA output, to be mainly used with the automatic scripts to fill the QA repository.
4 Launch with aliroot -l -b -q "MakeTrendingZDCQA.C(\"${fullpath}/QAresults.root\", ${run}, ...) 
5 The macro produces a file containing the tree of trending variables and the main plots.
6 A feature that displays the plots in canvases must be enable when needed.
7 ******************************************************************************************************************************************/
8
9 #if !defined(__CINT__) || defined(__MAKECINT__)
10
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <TROOT.h>
14 #include <Riostream.h>
15 #include <TClassTable.h>
16 #include <TStyle.h>
17 #include <TMath.h>
18 #include <TFile.h>
19 #include <TCanvas.h>
20 #include <TH1.h>
21 #include <TH2.h>
22 #include <TProfile.h>
23 #include <TLine.h>
24 #include <TGrid.h>
25 #include <TBits.h>
26 #include <TChain.h>
27 #include <TNtuple.h>
28 #include <TTree.h>
29 #include <TBranch.h>
30 #include <TFileMerger.h>
31 #include <TGridResult.h>
32 #include <TSystem.h>
33 #include <TGaxis.h>
34
35 #endif
36
37 Int_t MakeTrendingZDCQA(TString qafilename,               //full path of the QA output; set IsOnGrid to prepend "alien://"
38                         Int_t runNumber,                  //run number
39                         Bool_t isMC = kFALSE,             //MC flag, to disable meaningless checks
40                         Bool_t canvasE = kFALSE,          //enable display plots on canvas and save png
41                         Bool_t IsOnGrid = kFALSE,         //set to kTRUE to access files on the grid
42                         TString ocdbStorage = "raw://")   //set the default ocdb storage
43 {   
44
45   // macro to generate tree with ZDC QA trending variables
46   // access qa PWGPP output files  
47   if (!qafilename) {
48     printf("Error - Invalid input file");
49     return 1;
50   }
51
52   /*set graphic style*/
53   gStyle->SetCanvasColor(kWhite);
54   gStyle->SetFrameFillColor(kWhite);
55   gStyle->SetFrameBorderMode(0);
56   gStyle->SetCanvasBorderMode(0);
57   gStyle->SetTitleFillColor(kWhite);
58   gStyle->SetTitleBorderSize(0);
59   gStyle->SetTitleFont(42);
60   gStyle->SetTextFont(42);
61   gStyle->SetStatColor(kWhite); 
62   gStyle->SetStatBorderSize(1);
63   TGaxis::SetMaxDigits(3);
64   gStyle->SetOptStat(10);
65
66   char defaultQAoutput[30]="QAresults.root";
67   char * treePostFileName="trending.root";  
68   
69   if (IsOnGrid) TGrid::Connect("alien://");
70   TFile * fin = TFile::Open(qafilename,"r");
71   if (!fin) {
72     Printf("ERROR: QA output not found. Exiting...\n");
73     return -1;
74   } else {
75     Printf("INFO: QA output file %s open. \n",fin->GetName());
76   }
77   
78   //access histograms lists
79   char zdcQAdirName[20]="ZDC_Performance";
80   char genListName[20]="QAZDCHists";
81   
82   TDirectoryFile * zdcQAdir=(TDirectoryFile*)fin->Get(zdcQAdirName);
83   if (!zdcQAdir) {
84     Printf("ERROR: ZDC QA directory not present in input file.\n");
85     return -1;
86   }
87   
88   TList * generalList=(TList*)zdcQAdir->Get(genListName);
89
90   if (!generalList) Printf("WARNING: general QA histograms absent or not accessible\n");
91
92   TH1F    *fhTDCZNC          = (TH1F*)generalList->FindObject("fhTDCZNC");       //! TDC ZNC sum
93   TH1F    *fhTDCZNA          = (TH1F*)generalList->FindObject("fhTDCZNA");       //! TDC DIFF sum
94   TH1F    *fhTDCZNSum        = (TH1F*)generalList->FindObject("fhTDCZNSum");     //! TDC ZNC sum
95   TH1F    *fhTDCZNDiff       = (TH1F*)generalList->FindObject("fhTDCZNDiff");    //! TDC DIFF sum
96   TH1F    *fhZNCSumQ         = (TH1F*)generalList->FindObject("fhZNCSumQ");      //! ZNC sum 4Q
97   TH1F    *fhZNASumQ         = (TH1F*)generalList->FindObject("fhZNASumQ");      //! ZNA sum 4Q
98   TH1F    *fhZPCSumQ         = (TH1F*)generalList->FindObject("fhZPCSumQ");      //! ZPC sum 4Q
99   TH1F    *fhZPASumQ         = (TH1F*)generalList->FindObject("fhZPASumQ");      //! ZPA sum 4Q
100   TH1F    *fhZEM1Spectrum    = (TH1F*)generalList->FindObject("fhZEM1Spectrum"); //! ZEM1 spectra
101   TH1F    *fhZEM2Spectrum    = (TH1F*)generalList->FindObject("fhZEM2Spectrum"); //! ZEM2 spectra
102   TH1F    *fhZNCpmc          = (TH1F*)generalList->FindObject("fhZNCpmc");       //! ZNC PMCs
103   TH1F    *fhZNApmc          = (TH1F*)generalList->FindObject("fhZNApmc");       //! ZNA PMCs
104   TH1F    *fhZPCpmc          = (TH1F*)generalList->FindObject("fhZPCpmc");       //! ZPC PMCs
105   TH1F    *fhZPApmc          = (TH1F*)generalList->FindObject("fhZPApmc");       //! ZPA PMCs
106   TH2F    *fhZNCCentroid     = (TH2F*)generalList->FindObject("fhZNCCentroid");  //! ZNC centroid
107   TH2F    *fhZNACentroid     = (TH2F*)generalList->FindObject("fhZNACentroid");  //! ZNA centroid
108   TH1F    *fhPMCZNCemd       = (TH1F*)generalList->FindObject("fhPMCZNCemd");    //! ZNC PMC low gain chain
109   TH1F    *fhPMCZNAemd       = (TH1F*)generalList->FindObject("fhPMCZNAemd");    //! ZNA PMC low gain chain
110   TH2F    *fDebunch          = (TH2F*)generalList->FindObject("fDebunch");       //! TDC sum vs. diff
111   TH1F    *fhTDCZNAcorr      = (TH1F*)generalList->FindObject("fhTDCZNAcorr");   //! ZNA corrected TDC
112   TH1F    *fhTDCZNCcorr      = (TH1F*)generalList->FindObject("fhTDCZNCcorr");   //! ZNC corrected TDC
113   
114   Int_t fhZNCpmcEntries = fhZNCpmc->GetEntries();
115   Int_t fhZNApmcEntries = fhZNApmc->GetEntries();
116   Int_t fhZPCpmcEntries = fhZPCpmc->GetEntries();
117   Int_t fhZPApmcEntries = fhZPApmc->GetEntries();
118   Double_t ZNC_mean = 0.0;
119   Double_t ZNA_mean = 0.0;
120   Double_t ZPC_mean = 0.0;
121   Double_t ZPA_mean = 0.0;  
122   if (fhZNCpmcEntries>0) ZNC_mean = fhZNCpmc->GetMean()/TMath::Sqrt(fhZNCpmcEntries);
123   if (fhZNApmcEntries>0) ZNA_mean = fhZNApmc->GetMean()/TMath::Sqrt(fhZNApmcEntries);
124   if (fhZPCpmcEntries>0) ZPC_mean = fhZPCpmc->GetMean()/TMath::Sqrt(fhZPCpmcEntries);
125   if (fhZPApmcEntries>0) ZPA_mean = fhZPApmc->GetMean()/TMath::Sqrt(fhZPApmcEntries);  
126   Int_t fhZEM1SpectrumEntries = fhZEM1Spectrum->GetEntries();
127   Int_t fhZEM2SpectrumEntries = fhZEM2Spectrum->GetEntries();
128   Double_t ZEM1_mean = 0.;
129   Double_t ZEM2_mean = 0.;
130   if (fhZEM1SpectrumEntries>0) ZEM1_mean = fhZEM1Spectrum->GetMean()/TMath::Sqrt(fhZEM1SpectrumEntries);
131   if (fhZEM2SpectrumEntries>0) ZEM2_mean = fhZEM2Spectrum->GetMean()/TMath::Sqrt(fhZEM2SpectrumEntries);  
132   Double_t ZNC_XCent = fhZNCCentroid->GetMean(1);
133   Double_t ZNC_YCent = fhZNCCentroid->GetMean(2);    
134   Double_t ZNA_XCent = fhZNACentroid->GetMean(1);
135   Double_t ZNA_YCent = fhZNACentroid->GetMean(2);
136   Double_t ZNC_XCent_err = fhZNCCentroid->GetRMS(1);
137   Double_t ZNC_YCent_err = fhZNCCentroid->GetRMS(2);    
138   Double_t ZNA_XCent_err = fhZNACentroid->GetRMS(1);
139   Double_t ZNA_YCent_err = fhZNACentroid->GetRMS(2);     
140   Double_t ZN_TDC_Sum = fhTDCZNSum->GetMean();
141   Double_t ZN_TDC_Diff = fhTDCZNDiff->GetMean();  
142   Double_t ZN_TDC_Sum_err = fhTDCZNSum->GetRMS();
143   Double_t ZN_TDC_Diff_err = fhTDCZNDiff->GetRMS();    
144   
145   TTree * ttree=new TTree("trending","tree of trending variables");
146   ttree->Branch("run",&runNumber,"run/I");
147   ttree->Branch("ZNC_mean_value",&ZNC_mean,"ZNC_mean_value/D");
148   ttree->Branch("ZNA_mean_value",&ZNA_mean,"ZNA_mean_value/D"); 
149   ttree->Branch("ZPC_mean_value",&ZPC_mean,"ZPC_mean_value/D");
150   ttree->Branch("ZPA_mean_value",&ZPA_mean,"ZPA_mean_value/D");
151   ttree->Branch("ZEM1_mean_value",&ZEM1_mean,"ZEM1_mean_value/D");
152   ttree->Branch("ZEM2_mean_value",&ZEM2_mean,"ZEM2_mean_value/D");  
153   ttree->Branch("ZNC_X_Centroid",&ZNC_XCent,"ZNC_X_Centroid/D");
154   ttree->Branch("ZNC_Y_Centroid",&ZNC_YCent,"ZNC_Y_Centroid/D");   
155   ttree->Branch("ZNA_X_Centroid",&ZNA_XCent,"ZNA_X_Centroid/D");
156   ttree->Branch("ZNA_Y_Centroid",&ZNA_YCent,"ZNA_Y_Centroid/D");  
157   ttree->Branch("ZNC_X_Centroid_Err",&ZNC_XCent_err,"ZNC_X_Centroid_Err/D");
158   ttree->Branch("ZNC_Y_Centroid_Err",&ZNC_YCent_err,"ZNC_Y_Centroid_Err/D");   
159   ttree->Branch("ZNA_X_Centroid_Err",&ZNA_XCent_err,"ZNA_X_Centroid_Err/D");
160   ttree->Branch("ZNA_Y_Centroid_Err",&ZNA_YCent_err,"ZNA_Y_Centroid_Err/D");    
161   ttree->Branch("ZN_TDC_Sum",&ZN_TDC_Sum,"ZN_TDC_Sum/D");
162   ttree->Branch("ZN_TDC_Diff",&ZN_TDC_Diff,"ZN_TDC_Diff/D");    
163   ttree->Branch("ZN_TDC_Sum_Err",&ZN_TDC_Sum_err,"ZN_TDC_Sum_Err/D");
164   ttree->Branch("ZN_TDC_Diff_Err",&ZN_TDC_Diff_err,"ZN_TDC_Diff_Err/D");  
165     
166   Printf(":::: Getting post-analysis info for run %i",runNumber);
167   TFile * trendFile = new TFile(treePostFileName,"recreate");
168
169   printf("==============  Saving histograms for run %i ===============\n",runNumber);
170   
171   fhTDCZNC->Write();      
172   fhTDCZNA->Write();      
173   fhTDCZNSum->Write();    
174   fhTDCZNDiff->Write();   
175   fhZNCSumQ->Write();     
176   fhZNASumQ->Write();     
177   fhZPCSumQ->Write();     
178   fhZPASumQ->Write();     
179   fhZEM1Spectrum->Write();
180   fhZEM2Spectrum->Write();
181   fhZNCpmc->Write();      
182   fhZNApmc->Write();      
183   fhZPCpmc->Write();      
184   fhZPApmc->Write();      
185   fhZNCCentroid->Write(); 
186   fhZNACentroid->Write(); 
187   fhPMCZNCemd->Write();   
188   fhPMCZNAemd->Write();   
189   fDebunch->Write();      
190   fhTDCZNAcorr->Write();  
191   fhTDCZNCcorr->Write();
192     
193   ttree->Fill();
194   printf("==============  Saving trending quantities in tree for run %i ===============\n",runNumber);
195   
196   trendFile->cd();
197   ttree->Write();
198   trendFile->Close();
199
200 }