1 #if !defined(__CINT__) || defined(__MAKECINT__)
13 #include <TGridResult.h>
17 #include <TSpectrum.h>
20 #include "AliCDBManager.h"
21 #include "AliCDBEntry.h"
22 #include "AliGRPObject.h"
23 #include "AliTriggerInput.h"
24 #include "AliTriggerConfiguration.h"
28 Int_t MakeTrendingV0QA(TString qafilename,Int_t runNumber,TString ocdbStorage = "raw://",Bool_t IsOnGrid = kFALSE,Bool_t canvasE = kFALSE)
32 Printf("Error - Invalid input file");
35 gStyle->SetPalette(1);
37 TString treePostFileName=Form("trending_%i.root",runNumber);
39 TGrid::Connect("alien://");
40 TFile*fin=TFile::Open(qafilename,"r");
44 Printf("ERROR: QA output not found. Exiting ...\n");
49 Printf("INFO: QA output file %s open. \n",fin->GetName());
51 AliCDBManager *man = AliCDBManager::Instance();
52 man->SetDefaultStorage(ocdbStorage);
53 man->SetRun(runNumber);
54 AliCDBEntry *entry2=0;
55 entry2 = man->Get("GRP/GRP/Data");
56 AliGRPObject* fGRPData=0;
59 printf("Found an AliGRPObject in GRP/GRP/Data, reading it\n");
60 fGRPData = dynamic_cast<AliGRPObject*>(entry2->GetObject());
63 TString activeDetList(AliDAQ::ListOfTriggeredDetectors(fGRPData->GetDetectorMask()));
64 TString runType(fGRPData->GetRunType());
65 TString beamType(fGRPData->GetBeamType());
66 TString machineMode(fGRPData->GetMachineMode());
67 TString lhcState(fGRPData->GetLHCState());
68 printf("activeDetList %s\nrunType %s\nbeamType %s\nmachineMode %s\nlhcState %s\n",
69 activeDetList.Data(),runType.Data(),beamType.Data(),
70 machineMode.Data(),lhcState.Data());
72 time_t duration = fGRPData->GetTimeEnd() - fGRPData->GetTimeStart();
74 if(!activeDetList.Contains("VZERO"))
76 printf("RUN WITH VZERO NOT ACTIVE\n");
79 if(!runType.Contains("PHYSICS"))
81 printf("RUN NO PHYSICS\n");
86 printf("RUNS SHORTER THAN 2 MIN\n");
89 Float_t TimesA=-9999.,TimesC=-9999., BB_BG=-9999.,BB_EE=-9999.,AdcA=-9999.;
90 Float_t AdcC=-9999.,MultA=-9999.,MultC=-9999.;
91 Int_t NumberVoieOff=0, numberBadOffset=0;
92 TTree *ttree=new TTree("trending","tree of trending variables");
94 ttree->Branch("run",&runNumber,"run/I");
95 ttree->Branch("TimesA",&TimesA,"BB Leading time;;Time (ns)/F");
96 ttree->Branch("TimesC",&TimesC,"BB Leading time;;Time (ns)/F");
97 ttree->Branch("BB_BG",&BB_BG,"Trigger ratio/F");
98 ttree->Branch("BB_EE",&BB_EE,"Trigger ratio/F");
99 ttree->Branch("AdcA" ,&AdcA ,"Average Charge/F");
100 ttree->Branch("AdcC" ,&AdcC ,"Average Charge/F");
101 ttree->Branch("MultA",&MultA,"Average number of Fired cell/F");
102 ttree->Branch("MultC",&MultC,"Average number of Fired cell/F");
103 ttree->Branch("NumberVoieOff",&NumberVoieOff,"Number of path off/I");
104 ttree->Branch("numberBadOffset",&numberBadOffset,"Number of bad offset /I");
106 char v0QAdirName[20]="VZERO_Performance";
107 TDirectoryFile * v0QAdir=(TDirectoryFile*)fin->Get(v0QAdirName);
110 printf("ERROR: VZERO QA directory not present in input file.\n");
113 TList *list = (TList*)v0QAdir->Get("QAVZEROHists");
116 cout << "ERROR: No list found" << endl;
119 TH2F *hEvents = (TH2F*)list->FindObject("hEvents");
120 TH1F *hAdcNoTimeA = (TH1F*)list->FindObject("hAdcNoTimeA");
121 TH1F *hAdcWithTimeA = (TH1F*)list->FindObject("hAdcWithTimeA");
122 TH1F *hAdcNoTimeC = (TH1F*)list->FindObject("hAdcNoTimeC");
123 TH1F *hAdcWithTimeC = (TH1F*)list->FindObject("hAdcWithTimeC");
124 TH2F *hadcpmtwithtime = (TH2F*)list->FindObject("hadcpmtwithtime");
125 TH1F *htimepmtA = (TH1F*)list->FindObject("htimepmtA");
126 TH1F *htimepmtC = (TH1F*)list->FindObject("htimepmtC");
127 TH1F *hwidthA = (TH1F*)list->FindObject("hwidthA");
128 TH1F *hwidthC = (TH1F*)list->FindObject("hwidthC");
129 TH1F *hV0ampl = (TH1F*)list->FindObject("hV0ampl");
130 TH2F *htimepmt = (TH2F*)list->FindObject("htimepmt");
131 TH2F *hwidthpmt = (TH2F*)list->FindObject("hwidthpmt");
132 TH2F *hadcwidthA = (TH2F*)list->FindObject("hadcwidthA");
133 TH2F *hadcwidthC = (TH2F*)list->FindObject("hadcwidthC");
134 TH2F *hAdcTimeA = (TH2F*)list->FindObject("hAdcTimeA");
135 TH2F *hAdcTimeC = (TH2F*)list->FindObject("hAdcTimeC");
136 TH2F *htimecorr = (TH2F*)list->FindObject("htimecorr");
137 TH1F *hV0A = (TH1F*)list->FindObject("hV0a");
138 TH1F *hV0C = (TH1F*)list->FindObject("hV0c");
139 TH1F *hV0multA = (TH1F*)list->FindObject("hV0multA");
140 TH1F *hV0multC = (TH1F*)list->FindObject("hV0multC");
141 TH2F* hVtxXYBB =(TH2F*) list->FindObject("fhVtxXYBB");
142 TH1F* hVtxZBB =(TH1F*) list->FindObject("fhVtxZBB");
143 TH2F* hVtxXYBGA =(TH2F*) list->FindObject("fhVtxXYBGA");
144 TH1F* hVtxZBGA =(TH1F*) list->FindObject("fhVtxZBGA");
145 TH2F* hVtxXYBGC =(TH2F*) list->FindObject("fhVtxXYBGC");
146 TH1F* hVtxZBGC =(TH1F*) list->FindObject("fhVtxZBGC");
148 float BB = hEvents->GetBinContent(2,2);
149 float EE = hEvents->GetBinContent(1,1);
150 float BGA = hEvents->GetBinContent(3,2);
151 float BGC = hEvents->GetBinContent(2,3);
153 if(hAdcWithTimeA->GetEntries()==0)
159 Int_t nPeaksFound = s.Search(htimepmtA);
160 Float_t *peaks = s.GetPositionY();
161 Float_t *posiX = s.GetPositionX();
165 for(int i=0;i<nPeaksFound;i++)
167 if(peaks[i]>maxY && posiX[i]>0.)
173 Float_t maxX = (index >= 0) ? s.GetPositionX()[index] : -11111;
175 TF1 *fgaus = new TF1("gausbbbb","gaus",maxX-1.,maxX+1.);
176 htimepmtA->Fit(fgaus,"","",maxX-1.,maxX+1.);
177 TimesA=fgaus->GetParameter(1)-shiftA;
182 Int_t nPeaksFound = s.Search(htimepmtC);
183 Float_t *peaks = s.GetPositionY();
186 for(int i=0;i<nPeaksFound;i++)
194 Float_t maxX = (index >= 0) ? s.GetPositionX()[index] : -11111;
195 TF1 *fgaus = new TF1("gausffff","gaus",maxX-1.,maxX+1.);
196 htimepmtC->Fit(fgaus,"","",maxX-1.,maxX+1.);
197 TimesC=fgaus->GetParameter(1);
210 MultA=hV0A->GetMean();
211 MultC=hV0C->GetMean();
213 AdcA=hAdcWithTimeA->GetMean();
214 AdcC=hAdcWithTimeC->GetMean();
217 TH1D*hadcXFull=hadcpmtwithtime->ProjectionX("hadcXFull",1,hadcpmtwithtime->GetYaxis()->GetLast());
218 TH1D*hadcX=hadcpmtwithtime->ProjectionX("hadcX",10,20);
219 for(Int_t i=0;i<64;i++)
221 valBin=hadcXFull->GetBinContent(i+1);
224 valBin=hadcX->GetBinContent(i+1);
229 TFile * trendFile = new TFile(treePostFileName.Data(),"recreate");
238 TCanvas * cOut = new TCanvas("cOut",Form("Run %d",runNumber));
240 cOut->cd(1); cOut->GetPad(1)->SetLogy();
241 hAdcNoTimeA->Draw("l");
242 hAdcWithTimeA->Draw("same"); hAdcWithTimeA->SetLineColor(2);
244 cOut->cd(2); cOut->GetPad(2)->SetLogy();
245 hAdcNoTimeC->Draw("l");
246 hAdcWithTimeC->Draw("same"); hAdcWithTimeC->SetLineColor(2);
248 cOut->cd(3); cOut->GetPad(3)->SetLogz();
249 hadcpmtwithtime->Draw("colz");
251 cOut->cd(4); cOut->GetPad(4)->SetLogz();
252 hEvents->Draw("colz text");
254 cOut->Print(Form("QA_Run_%d.pdf(",runNumber));
257 cOut->cd(1); cOut->GetPad(1)->SetLogy();
258 htimepmtA->GetXaxis()->SetRangeUser(-25.,25.); htimepmtA->Draw();
260 cOut->cd(2); cOut->GetPad(2)->SetLogy();
261 htimepmtC->GetXaxis()->SetRangeUser(-25.,25.); htimepmtC->Draw();
263 cOut->cd(3); cOut->GetPad(3)->SetLogy();cOut->GetPad(3)->SetLogz(0);
264 hwidthA->GetXaxis()->SetRangeUser(0.,50.); hwidthA->Draw();
266 cOut->cd(4); cOut->GetPad(4)->SetLogy();cOut->GetPad(4)->SetLogz(0);
267 hwidthC->GetXaxis()->SetRangeUser(0.,50.); hwidthC->Draw();
269 cOut->Print(Form("QA_Run_%d.pdf",runNumber));
272 cOut->cd(1); cOut->GetPad(1)->SetLogy(0);cOut->GetPad(1)->SetLogz();
273 htimepmt->Draw("colz");
275 cOut->cd(2); cOut->GetPad(2)->SetLogy(0);cOut->GetPad(2)->SetLogz();
276 hwidthpmt->GetYaxis()->SetRangeUser(0.,50.); hwidthpmt->Draw("colz");
278 cOut->cd(3); cOut->GetPad(3)->SetLogy(0);cOut->GetPad(3)->SetLogz();
279 hadcwidthA->GetYaxis()->SetRangeUser(0.,50.); hadcwidthA->Draw("colz");
281 cOut->cd(4); cOut->GetPad(4)->SetLogy(0);cOut->GetPad(4)->SetLogz();
282 hadcwidthC->GetYaxis()->SetRangeUser(0.,50.); hadcwidthC->Draw("colz");
284 cOut->Print(Form("QA_Run_%d.pdf",runNumber));
287 cOut->cd(1); cOut->GetPad(1)->SetLogy(0);cOut->GetPad(1)->SetLogz();
288 hAdcTimeA->Draw("colz");
290 cOut->cd(2); cOut->GetPad(2)->SetLogy(0);cOut->GetPad(2)->SetLogz();
291 hAdcTimeC->Draw("colz");
293 cOut->cd(3); cOut->GetPad(3)->SetLogy(); cOut->GetPad(3)->SetLogz(0);
296 cOut->cd(4); cOut->GetPad(4)->SetLogy(0); cOut->GetPad(4)->SetLogz(0);
297 htimecorr->Draw("colz");
299 cOut->Print(Form("QA_Run_%d.pdf",runNumber));
303 cOut->cd(1); cOut->GetPad(1)->SetLogy(1);cOut->GetPad(1)->SetLogz(0);
304 hV0A->GetXaxis()->SetRangeUser(0.,33.);hV0A->Draw();
306 cOut->cd(2); cOut->GetPad(2)->SetLogy(1);cOut->GetPad(2)->SetLogz(0);
307 hV0C->GetXaxis()->SetRangeUser(0.,33.);hV0C->Draw();
309 cOut->cd(3); cOut->GetPad(3)->SetLogy(); cOut->GetPad(3)->SetLogz(0);
312 cOut->cd(4); cOut->GetPad(4)->SetLogy(); cOut->GetPad(3)->SetLogz(0);
315 cOut->Print(Form("QA_Run_%d.pdf",runNumber));
321 cOut->cd(1); cOut->GetPad(1)->SetLogy(0);cOut->GetPad(1)->SetLogz(1);
322 hVtxXYBB->Draw("colz");
324 cOut->cd(2); cOut->GetPad(2)->SetLogy(1);cOut->GetPad(2)->SetLogz(0);
327 cOut->cd(3); cOut->GetPad(3)->SetLogy(0); cOut->GetPad(3)->SetLogz(1);
328 hVtxXYBGA->Draw("colz");
330 cOut->cd(4); cOut->GetPad(4)->SetLogy(); cOut->GetPad(3)->SetLogz(0);
333 cOut->cd(5); cOut->GetPad(5)->SetLogy(0); cOut->GetPad(5)->SetLogz(1);
334 hVtxXYBGC->Draw("colz");
336 cOut->cd(6); cOut->GetPad(6)->SetLogy(); cOut->GetPad(6)->SetLogz(0);
339 cOut->Print(Form("QA_Run_%d.pdf)",runNumber));