]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/macros/VtxInfoLHC.C
prtotect against missing QA projections in mass production
[u/mrichter/AliRoot.git] / PWG1 / macros / VtxInfoLHC.C
1 #if !defined(__CINT__) || defined(__MAKECINT__)
2 #include <Riostream.h>
3 #include <TCanvas.h>
4 #include <TLegend.h>
5 #include <TLegendEntry.h>
6 #include <TFile.h>
7 #include <TLine.h>
8 #include <TNtuple.h>
9 #include <TStyle.h>
10 #include <TString.h>
11 #include <TSystem.h>
12 #include <TH1F.h>
13 #include <TGraphErrors.h>
14 #include <TF1.h>
15 #include <TH2F.h>
16 #include <fstream.h>
17 #include <TMath.h>
18 #include <TProfile.h>
19
20 #endif
21
22 /* Macro to produce LHC file for the luminous region.
23    Author: caffarri@pd.infn.it
24 */ 
25
26
27 void VtxInfoLHC(TString vtxtype="TRKnc",
28                 TString fname="Vertex.Performance.root",
29                 TString ntname="fNtupleBeamSpot"){
30   
31   // const Int_t nbinsmult=11;
32   // Float_t limmult[nbinsmult+1]={0.,1.5, 2.5, 5.5,10.5,14.5,24.5,30.5,44.5,60.5,74.5, 99999.}; 
33   
34   Float_t totev=0,totevtriggered=0;
35
36   Float_t resolVtx=510.;
37   Float_t errResolVtx = 10; 
38   Float_t p2= 1.3;
39   Float_t errp2 = 0.1;
40   Float_t meanMult=38;
41   Float_t errTotResol =(errResolVtx*errResolVtx)+(0.3*(errp2*errp2)/TMath::Power(meanMult,p2+1)); 
42
43   Float_t timeBinning = 120.; 
44   
45
46   Char_t hisnam[20];
47   Double_t xRange = 1.;
48   Int_t xBins = 125.;
49   Double_t zRange = 40.;
50   Int_t zBins = 40.;
51
52   /*
53     Int_t binsHRes=250*0.5;
54     Float_t rangeHRes=10000.*0.5;
55     Float_t rangeGrRms = 5000; // micron
56     Float_t rangeGrPull = 15; 
57     Float_t rangeHPull=10.; 
58     Float_t rangeHResS = 1.;
59     Float_t rangeHResS = 10000*0.5.;
60   */
61   
62   TFile *f=new TFile(fname.Data());
63   TList *cOutput = (TList*)f->Get("cOutputVtxESD");
64   TNtuple *nt=(TNtuple*)cOutput->FindObject(ntname.Data());
65   // TNtuple *nt=(TNtuple*)f->FindObject(ntname.Data());
66   Int_t nnnev=nt->GetEntries();
67   printf("Events = %d\n",nnnev);
68   
69   Float_t xVtx,xVtxSc,xerrVtx;
70   Float_t yVtx,yVtxSc,yerrVtx;
71   Float_t zVtx,zVtxSc,zerrVtx;
72   Float_t ntrklets,ncontrVtx,triggered;
73   Float_t run, tstamp;
74   
75   TString sxx="x"; sxx.Append(vtxtype.Data());
76   nt->SetBranchAddress(sxx.Data(),&xVtx);
77   TString syy="y"; syy.Append(vtxtype.Data());
78   nt->SetBranchAddress(syy.Data(),&yVtx);
79   TString szz="z"; szz.Append(vtxtype.Data());
80   nt->SetBranchAddress(szz.Data(),&zVtx);
81   
82   TString xerr="xerr"; xerr.Append(vtxtype.Data());
83   nt->SetBranchAddress(xerr.Data(),&xerrVtx);
84   TString yerr="yerr"; yerr.Append(vtxtype.Data());
85   nt->SetBranchAddress(yerr.Data(),&yerrVtx);
86   TString zerr="zerr"; zerr.Append(vtxtype.Data());
87   nt->SetBranchAddress(zerr.Data(),&zerrVtx);
88   
89   
90   TCanvas *stampCanvas = new TCanvas ("stampCanvas", "stampCanvas");
91   stampCanvas->Divide(3);
92   TCanvas *stampCanvasSig = new TCanvas ("stampCanvasSig", "stampCanvasSig");
93   stampCanvasSig->Divide(3);
94   TCanvas *diamCanvas = new TCanvas ("diamCanvas", "diamCanvas");
95   diamCanvas->Divide(2);
96
97   TString trkstitle;
98   nt->SetBranchAddress("ntrklets",&ntrklets);
99   trkstitle="Tracklets Multiplicity";
100   
101   TString ntrks="ntrks"; ntrks.Append(vtxtype.Data());
102   nt->SetBranchAddress(ntrks.Data(),&ncontrVtx);
103   // nt->SetBranchAddress(ntrks.Data(),&ntrklets);
104   nt->SetBranchAddress("triggered",&triggered);
105   nt->SetBranchAddress("run", &run);
106   nt->SetBranchAddress("tstamp",&tstamp);
107  
108   Float_t minTstamp=10E+13;
109   Float_t maxTstamp=-1;
110   Int_t subevents;
111   
112   Float_t minRun = 10E+7;
113   Float_t maxRun = 1;
114   
115   for (Int_t ientries=0; ientries<nt->GetEntriesFast(); ientries++){
116     nt->GetEntry(ientries);
117     
118     if (tstamp<minTstamp) minTstamp=tstamp;
119     if (tstamp>maxTstamp) maxTstamp=tstamp;
120     
121     if (run<minRun) minRun=run-10;
122     if (run>maxRun) maxRun=run+10;    
123   }
124
125   Int_t nTimeBins = (Int_t)(maxTstamp-minTstamp) / timeBinning;
126   
127   printf ("number of time bins %d\n", nTimeBins);
128   subevents=0;
129   
130   TH1F **hxVtx = new TH1F*[nTimeBins+1]; //"hxVtx", "hxVtx", 125,-1,1);
131   TH1F **hyVtx = new TH1F*[nTimeBins+1]; //("hyVtx", "hyVtx", 125,-1,1);
132   TH1F **hzVtx = new TH1F*[nTimeBins+1]; //("hzVtx", "hzVtx", 40,-40,40);
133   
134   TH1F **hxVtxMult = new TH1F*[nTimeBins+1]; //
135   TH1F **hyVtxMult = new TH1F*[nTimeBins+1]; //
136
137   for(Int_t kTimeBin=0;kTimeBin<nTimeBins+1;kTimeBin++){
138     printf ("here we are, kTimeBin = %d\n", kTimeBin);
139     
140     sprintf(hisnam,"hxVtx%d",kTimeBin);
141     hxVtx[kTimeBin]=new TH1F(hisnam,"",xBins,-xRange,xRange);
142     sprintf(hisnam,"hyVtx%d",kTimeBin);
143     hyVtx[kTimeBin]=new TH1F(hisnam,"",xBins,-xRange,xRange);
144     sprintf(hisnam,"hzVtx%d",kTimeBin);
145     hzVtx[kTimeBin]=new TH1F(hisnam,"",zBins,-zRange,zRange);
146     sprintf(hisnam,"hxVtxMult%d",kTimeBin);
147     hxVtxMult[kTimeBin]=new TH1F(hisnam,"",xBins,-xRange,xRange);
148     sprintf(hisnam,"hyVtxMult%d",kTimeBin);
149     hyVtxMult[kTimeBin]=new TH1F(hisnam,"",xBins,-xRange,xRange);
150
151   }
152
153   TH1F *htstampX = new TH1F("tstamp Vx","tstamp Vx", nTimeBins+1, minTstamp, maxTstamp);
154   TH1F *htstampY = new TH1F("tstamp Vy","tstamp Vy", nTimeBins+1, minTstamp, maxTstamp);
155   TH1F *htstampZ = new TH1F("tstamp Vz","tstamp Vz", nTimeBins+1, minTstamp, maxTstamp); 
156   
157   TH1F *htstampSigX = new TH1F("tstamp Sig x","tstamp Sig x", nTimeBins+1, minTstamp, maxTstamp);
158   TH1F *htstampSigY = new TH1F("tstamp Sig y","tstamp Sig y", nTimeBins+1, minTstamp, maxTstamp);
159   TH1F *htstampSigZ = new TH1F("tstamp Sig z","tstamp Sig z", nTimeBins+1, minTstamp, maxTstamp); 
160   
161   TH1F *htstampXdiam = new TH1F("tstamp Diam X","tstamp Diam X", nTimeBins+1, minTstamp, maxTstamp);
162   TH1F *htstampYdiam = new TH1F("tstamp Diam Y","tstamp Diam Y", nTimeBins+1, minTstamp, maxTstamp);
163   
164   TCanvas *cVtx = new TCanvas("cVtx", "Vtx Canvas", 1000,700);
165   cVtx->Divide(3);
166   
167   Int_t *fill = new Int_t [nTimeBins+1];
168   
169   for(Int_t iev=0;iev<nnnev;iev++){
170     nt->GetEvent(iev);
171     
172     Int_t rightTimeBin =(Int_t)(tstamp-minTstamp)/ 120;
173     printf ("right Time Bin %d \n", rightTimeBin);
174     
175     if ((run>=114783) && (run<=114798)) fill[rightTimeBin]=1005;
176     if ((run>=114916) && (run<=114931)) fill[rightTimeBin]=1013;
177     if ((run>=115186) && (run<=115193)) fill[rightTimeBin]=1019;
178     if ((run>=115310) && (run<=115345)) fill[rightTimeBin]=1022;
179     if ((run>=115393) && (run<=115414)) fill[rightTimeBin]=1023;
180     if ((run>=115514) && (run<=115521)) fill[rightTimeBin]=1026;
181     if ((run>=115880) && (run<=115892)) fill[rightTimeBin]=1031;
182     if ((run>=116079) && (run<=116081)) fill[rightTimeBin]=1033;
183     if ((run>=116102) && (run<=116134)) fill[rightTimeBin]=1034;
184     if ((run>=116197) && (run<=116204)) fill[rightTimeBin]=1035;
185     if ((run>=116287) && (run<=116288)) fill[rightTimeBin]=1038;
186     if ((run>=116351) && (run<=116354)) fill[rightTimeBin]=1042;
187     if ((run>=116401) && (run<=116403)) fill[rightTimeBin]=1044;
188     if ((run>=116559) && (run<=116574)) fill[rightTimeBin]=1045;
189     if ((run>=116609) && (run<=116611)) fill[rightTimeBin]=1046; 
190     if ((run>=116640) && (run<=116645)) fill[rightTimeBin]=1047;
191     if ((run>=116681) && (run<=116684)) fill[rightTimeBin]=1049;
192
193
194     //      if((tstamp<stopTime)&&(tstamp>=iTstamp)){
195     subevents++;
196     // ncontrVtx = ntrklets;
197     
198     //printf ("ntrksTRKnc = %d ncontr = %d \n ", ntrklets, ncontrVtx);
199     
200     xVtxSc = 10000.*xVtx;
201     yVtxSc = 10000.*yVtx;
202     zVtxSc = 10000.*zVtx;
203     
204     if (ncontrVtx>0){
205       hxVtx[rightTimeBin]->Fill(xVtx);
206       hyVtx[rightTimeBin]->Fill(yVtx);
207       hzVtx[rightTimeBin]->Fill(zVtx);
208    
209       if((ntrklets>30)&&(ntrklets<45)){
210         hxVtxMult[rightTimeBin]->Fill(xVtx);
211         hyVtxMult[rightTimeBin]->Fill(yVtx);
212       }
213     }
214
215   }
216
217   Double_t xMeanVtx, xMeanVtxErr, xSigmaVtx, xSigmaVtxErr;
218   Double_t yMeanVtx, yMeanVtxErr, ySigmaVtx, ySigmaVtxErr;
219   Double_t zMeanVtx, zMeanVtxErr, zSigmaVtx, zSigmaVtxErr;
220   Double_t xVtxRms, yVtxRms, zVtxRms;
221   Double_t xVtxMult, yVtxMult;  
222   Double_t xDiam,  xDiamErr, yDiam,  yDiamErr, zDiam, zDiamErr;
223   
224   /*
225     TString outFileName ="aliceDataVertex"; 
226     TString outFileExt = ".txt";
227     TString outFileFill ;
228   */
229   
230   ofstream outFile("1045_lumireg_ALICE.txt");
231   
232   for (Int_t iTimeBin=0; iTimeBin<nTimeBins+1; iTimeBin++){
233
234     if (fill[iTimeBin] != 1045) continue;
235     
236     Int_t corrTstamp = iTimeBin*120+minTstamp;
237
238     if (iTimeBin == nTimeBins+1) {
239       cVtx->cd(1);
240       hxVtxMult[iTimeBin]->Draw();
241       cVtx->cd(2);
242       hyVtxMult[iTimeBin]->Draw();
243     
244     }
245
246     TF1 *fitVtx, *fitVtxMult;
247     if((hxVtx[iTimeBin]->GetEffectiveEntries()<500)){// && (hxVtx[iTimeBin]->GetEffectiveEntries()<500)){
248       //outFile << "0." <<" " << "0."<<" ";
249       xMeanVtx =0.;
250       xMeanVtxErr = 0.;
251       xSigmaVtx = 0.;
252       xSigmaVtxErr = 0.;
253       xDiam = 0.;
254       xDiamErr =0.;
255       xVtxRms =0.;
256     }
257     else{
258       hxVtx[iTimeBin]->Fit("gaus", "M");
259       fitVtx = hxVtx[iTimeBin]->GetFunction("gaus");
260       xMeanVtx = fitVtx->GetParameter(1);
261       xMeanVtxErr = fitVtx->GetParError(1);
262       xSigmaVtx = fitVtx->GetParameter(2);
263       xSigmaVtxErr = fitVtx->GetParError(2);
264       xVtxRms = hxVtx[iTimeBin]->GetRMS();
265
266       hxVtxMult[iTimeBin]->Fit("gaus", "M");
267       fitVtxMult= hxVtxMult[iTimeBin]->GetFunction("gaus");
268       xVtxMult = fitVtxMult->GetParameter(2)*10000;
269       xDiam=TMath::Sqrt(xVtxMult*xVtxMult - ((resolVtx*resolVtx)/TMath::Power(meanMult, p2)));
270       if(xDiam >= 500 ) xDiam=0.;
271       xDiamErr = TMath::Sqrt(fitVtxMult->GetParError(2)*10000+ errTotResol);
272       printf ("xDiam = %f errDiam = %f \n", xDiam, xDiamErr);
273       
274       }
275
276     
277     if((hyVtx[iTimeBin] ->GetEffectiveEntries()<500)){// && (hyVtxMult[iTimeBin]->GetEffectiveEntries()<500)){
278       //outFile << "0." <<" " << "0."<<" ";
279       yMeanVtx=0.;
280       yMeanVtxErr = 0.;
281       ySigmaVtx = 0.;
282       ySigmaVtxErr = 0.;
283       yDiam = 0;
284       yDiamErr =0;
285       yVtxRms=0.;
286     }
287     else{
288       hyVtx[iTimeBin]->Fit("gaus", "M");
289       fitVtx = hyVtx[iTimeBin]->GetFunction("gaus");
290       yMeanVtx = fitVtx->GetParameter(1);
291       yMeanVtxErr = fitVtx->GetParError(1);
292       ySigmaVtx = fitVtx->GetParameter(2);
293       ySigmaVtxErr = fitVtx->GetParError(2);
294       yVtxRms = hyVtx[iTimeBin]->GetRMS();
295       
296       hyVtxMult[iTimeBin]->Fit("gaus", "M");
297       fitVtxMult= hyVtxMult[iTimeBin]->GetFunction("gaus");
298       yVtxMult = fitVtxMult->GetParameter(2)*10000;
299       yDiam=TMath::Sqrt(yVtxMult*yVtxMult - ((resolVtx*resolVtx)/TMath::Power(meanMult, p2)));
300       if(yDiam >= 500 ) yDiam=0.;
301       yDiamErr = TMath::Sqrt(fitVtxMult->GetParError(2)*10000 + errTotResol);
302       printf("yDiam = %f  errDiam= %f \n", yDiam, yDiamErr);
303     }
304     
305     if((hzVtx[iTimeBin]->GetEffectiveEntries()<500)){
306       //  outFile << "0." <<" " << "0."<<" ";
307       zMeanVtx=0.;
308       zMeanVtxErr = 0.;
309       zSigmaVtx = 0.;
310       zSigmaVtxErr = 0.;
311       zDiam = 0.;
312       zDiamErr =0.;  
313       zVtxRms =0.;
314     }
315     else{
316       hzVtx[iTimeBin]->Fit("gaus", "M");
317       fitVtx = hzVtx[iTimeBin]->GetFunction("gaus");
318       zMeanVtx = fitVtx->GetParameter(1);
319       zMeanVtxErr = fitVtx->GetParError(1);
320       zSigmaVtx = fitVtx->GetParameter(2);
321       zSigmaVtxErr = fitVtx->GetParError(2);
322       zVtxRms = hzVtx[iTimeBin]->GetRMS();
323
324       zDiam = zSigmaVtx;
325       zDiamErr = zSigmaVtxErr;
326       
327      
328     }
329       
330     //outfile<<
331
332     Int_t iBin = htstampX->FindBin(corrTstamp);
333     htstampX->SetBinContent(iBin, xMeanVtx);
334     htstampX->SetBinError(iBin, xMeanVtxErr); 
335
336     iBin = htstampY->FindBin(corrTstamp);
337     htstampY->SetBinContent(iBin, yMeanVtx);
338     htstampY->SetBinError(iBin, yMeanVtxErr); 
339
340     iBin = htstampZ->FindBin(corrTstamp);
341     htstampZ->SetBinContent(iBin, zMeanVtx);
342     htstampZ->SetBinError(iBin, zMeanVtxErr);
343
344     iBin = htstampSigX->FindBin(corrTstamp);
345     htstampSigX->SetBinContent(iBin, xSigmaVtx);
346     htstampSigX->SetBinError(iBin, xSigmaVtxErr);
347
348     iBin = htstampSigY->FindBin(corrTstamp);
349     htstampSigY->SetBinContent(iBin, ySigmaVtx);
350     htstampSigY->SetBinError(iBin, ySigmaVtxErr);
351
352     iBin = htstampSigZ->FindBin(corrTstamp);
353     htstampSigZ->SetBinContent(iBin, zSigmaVtx);
354     htstampSigZ->SetBinError(iBin, zSigmaVtxErr);
355
356     iBin = htstampXdiam->FindBin(corrTstamp);
357     htstampXdiam->SetBinContent(iBin, xDiam);
358     htstampXdiam->SetBinError(iBin, xDiamErr);
359
360     iBin = htstampYdiam->FindBin(corrTstamp);
361     htstampYdiam->SetBinContent(iBin,yDiam);
362     htstampYdiam->SetBinError(iBin, yDiamErr);
363   
364     outFile <<"2"<<" "<<fill[iTimeBin]<<" "<<corrTstamp<<" ";
365     outFile <<xMeanVtx*10<<" "<<xMeanVtxErr*10<<" ";
366     outFile <<yMeanVtx*10<<" "<<yMeanVtxErr*10<<" ";
367     outFile <<zMeanVtx*10<<" "<<zMeanVtxErr*10<<" ";
368     outFile <<xSigmaVtx*10<<" "<<xSigmaVtxErr*10<<" ";
369     outFile <<ySigmaVtx*10<<" "<<ySigmaVtxErr*10<<" ";
370     outFile <<zSigmaVtx*10<<" "<<zSigmaVtxErr*10<<" ";
371     outFile <<xDiam*0.001<<" "<<xDiamErr*0.001<<" ";
372     outFile <<yDiam*0.001<<" "<<yDiamErr*0.001<<" ";
373     outFile <<zDiam*10<<" "<<zDiamErr*10<<" ";
374     outFile <<xVtxRms*10 <<" "<<yVtxRms*10<<" "<<zVtxRms*10<<endl;
375     
376
377
378
379   }
380   printf ("Err Resol = %f \n", errTotResol);
381   stampCanvas->cd(1);
382   htstampX->Draw();
383   stampCanvas->cd(2);
384   htstampY->Draw();
385   stampCanvas->cd(3);
386   htstampZ->Draw();
387   
388   stampCanvasSig->cd(1);
389   htstampSigX->Draw();
390   stampCanvasSig->cd(2);
391   htstampSigY->Draw();
392   stampCanvasSig->cd(3);
393   htstampSigZ->Draw(); 
394   
395   diamCanvas->cd(1);
396   htstampXdiam->Draw();
397   diamCanvas->cd(2);
398   htstampYdiam->Draw();
399 }