15 #include "AliDielectronSignalExt.h"
16 #include "AliDielectronCFdraw.h"
17 #include "AliDielectron.h"
18 #include "AliDielectronHelper.h"
20 AliDielectronSignalBase* GetSignalLS(AliDielectronCFdraw &d, Int_t step,
21 AliDielectronSignalBase::EBackgroundMethod type=AliDielectronSignalBase::kLikeSign);
22 AliDielectronSignalBase* GetSignalLSY(AliDielectronCFdraw &d, Int_t step,
23 AliDielectronSignalBase::EBackgroundMethod type=AliDielectronSignalBase::kLikeSign);
24 AliDielectronSignalBase* GetSignalRot(AliDielectronCFdraw &d, Int_t step);
25 void SetStyle(AliDielectronSignalBase *sig, const char* nameAdd);
26 void DrawSpectra(AliDielectronSignalBase *sig, const char* cname, TH1 *hEventStat=0x0, Float_t fNevSel=1., Bool_t save=kTRUE);
27 Float_t FitMCshape(AliDielectronSignalBase *sig);
29 const char *mcLineShapeFile="$ALICE_ROOT/PWGDQ/dielectron/macros/mcMinv_LHC10f7a.root";
31 //_______________________________________
32 void PlotDataResults(const char* filenameData, const char* filenameMC="", Bool_t save=kTRUE, Bool_t DoPt=kTRUE )
34 AliDielectronCFdraw d(filenameData);
35 AliDielectronCFdraw dCorr("corrCont","corrCont");
36 TString nameCorr(filenameMC);
37 if (!nameCorr.IsNull()) d.SetCFContainers(nameCorr.Data());
39 TFile f(filenameData);
40 TH1 *hStats=(TH1*)f.Get("hEventStat");
41 hStats->SetDirectory(0);
42 TList* listData = (TList*)f.Get("jpsi_QA");
43 //THashList *a = (THashList*)listData->FindObject("basicQ+SPDfirst+pt>.6+PID");
44 THashList *a = (THashList*)listData->FindObject("basicQ+SPDfirst+pt>.8+PID"); //01.02.11
45 //THashList *a = (THashList*)listData->FindObject("FullCuts+SPDany+Pi3.0+P3.0"); //Ionut
46 THashList *b = (THashList*)a->FindObject("Event");
47 TH1F *hZvtx= (TH1F*) b->FindObject("VtxZ");
48 hZvtx->SetDirectory(0);
51 hZvtx->GetXaxis()->SetTitleSize(.05); hZvtx->GetXaxis()->SetLabelSize(.038);
52 hZvtx->GetXaxis()->SetTitleOffset(1.1);
53 hZvtx->GetXaxis()->SetNdivisions(510);
54 //hZvtx->GetYaxis()->CenterTitle(); hZvtx->GetXaxis()->CenterTitle();
55 hZvtx->GetYaxis()->SetTitleSize(.05); hZvtx->GetYaxis()->SetLabelSize(.038);
56 hZvtx->GetYaxis()->SetTitleOffset(1.3); //1.0
57 hZvtx->GetXaxis()->SetLabelFont(42); hZvtx->GetYaxis()->SetLabelFont(42);
58 hZvtx->GetXaxis()->SetTitleFont(42); hZvtx->GetYaxis()->SetTitleFont(42);
59 hZvtx->GetYaxis()->SetNdivisions(510);
60 hZvtx->SetLineWidth(2.5);
61 hZvtx->SetMarkerSize(.8);
62 hZvtx->SetMarkerColor(2); hZvtx->SetMarkerStyle(20); hZvtx->SetLineColor(2);
63 hZvtx->GetXaxis()->SetTitle("Zvtx (cm)");
64 hZvtx->GetYaxis()->SetTitle("Events");
66 TCanvas *c0=new TCanvas("c0","c0",10,0,450,450);
67 c0->SetTopMargin(0.04); c0->SetRightMargin(0.03);
68 c0->SetLeftMargin(0.13); c0->SetBottomMargin(0.14);
70 TF1* gausFit=new TF1("gausFit", "gaus",-9.,9.);
71 gausFit->SetLineColor(4); gausFit->SetLineWidth(.7);// gausFit->Draw("same");
72 hZvtx->Fit(gausFit, "QM", "", -9.,9.);
76 //Float_t IntGaus=gausFit->Integral(gausFit->GetParameter(1)-2.0*gausFit->GetParameter(2),gausFit->GetParameter(1)+2.0*gausFit->GetParameter(2))/h->GetBinWidth(1);
77 Float_t NevSel=hZvtx->Integral();
78 Float_t IntGaus=gausFit->Integral(-25.,25.)/hZvtx->GetBinWidth(1);
79 printf("NevSel: %6.1f, IntGauss: %6.1f \n",NevSel/1.e+6,IntGaus/1.e+6);
80 Float_t fNevSel=NevSel/IntGaus;
82 TLatex *lat=new TLatex();
84 lat->SetTextColor(2);lat->SetTextFont(42);lat->SetTextSize(.035);
85 lat->DrawLatex(0.16, 0.9, Form("NeventsSel: %5.1f M",NevSel/1.e+6));
87 TLatex *lat2=new TLatex();
89 lat2->SetTextColor(4);lat2->SetTextFont(42);lat2->SetTextSize(.035);
90 lat2->DrawLatex(0.7, 0.9, "Gauss fit:");
91 lat2->DrawLatex(0.7, 0.86, Form("Nevents: %5.1f M",IntGaus/1.e+6));
92 lat2->DrawLatex(0.7, 0.82, Form("Mean: %5.3f cm",gausFit->GetParameter(1)));
93 lat2->DrawLatex(0.7, 0.78, Form("Sigma: %4.2f cm",gausFit->GetParameter(2)));
95 Int_t afterPhysBin=hStats->GetXaxis()->FindBin("After Phys. Sel.");
96 Double_t afterPhys=hStats->GetBinContent(afterPhysBin);
97 lat2->DrawLatex(0.4, 0.18, Form("NevPhysSel: %5.1f",(Float_t)afterPhys/1.e+6));
99 c0->SaveAs("Zvtx_cSel.eps");
101 //if (hZvtx) delete hZvtx;
103 Int_t stepFirst=0, stepAny=1, stepAnyV0=2, stepAnyV0T=3; //Data ...from 05.02.11 on
104 //Int_t stepFirst=0, stepAny=1, stepTOFmix=2; //Data
105 //Int_t stepFirst=2, stepAny=4, stepTOFmix=6; d.SetRangeUser("PairType",1,1); //MC only
106 //Int_t stepFirst=1, stepAny=3, stepAnyV0T=5; //MC truth
107 //Int_t stepFirst=2, stepAny=4, stepAnyV0T=5; //MC, all pairs ...or vice-versa
109 gStyle->SetOptStat(0);
111 d.SetRangeUser("Leg1_NclsTPC",70.,170.); //was 90
112 d.SetRangeUser("Leg2_NclsTPC",70.,170.);
113 d.SetRangeUser("Leg1_Pt",1.01,100000);
114 d.SetRangeUser("Leg2_Pt",1.01,100000);
115 d.SetRangeUser("Leg1_Eta",-0.899,0.899);
116 d.SetRangeUser("Leg2_Eta",-0.899,0.899);
118 // d.SetRangeUser("Leg1_TPC_nSigma_Electrons",-3,3);
119 // d.SetRangeUser("Leg2_TPC_nSigma_Electrons",-3,3);
120 d.SetRangeUser("Leg1_TPC_nSigma_Pions",3.51,20); // 2011-02-09_0027.5195 only
121 d.SetRangeUser("Leg2_TPC_nSigma_Pions",3.51,20);
122 d.SetRangeUser("Leg1_TPC_nSigma_Protons",3.01,20);
123 d.SetRangeUser("Leg2_TPC_nSigma_Protons",3.01,20);
124 d.SetRangeUser("M",0.5,5.);
125 //============================
129 //--- Like sign subtraction
130 AliDielectronSignalBase *sigFirst=GetSignalLS(d,stepFirst);
131 SetStyle(sigFirst,"SPDfirst - Like Sign subtraction");
132 DrawSpectra(sigFirst,"cFirst",hStats,fNevSel,save);
133 //--- Like sign subtraction Arithmetic mean
134 AliDielectronSignalBase *sigFirstArith=GetSignalLS(d,stepFirst,AliDielectronSignalBase::kLikeSignArithm);
135 SetStyle(sigFirstArith,"SPDfirstArith - Like Sign subtraction");
136 DrawSpectra(sigFirstArith,"cFirstArith",hStats,fNevSel,save);
137 //--- Rotation subtraction
138 AliDielectronSignalBase *sigFirstRot=GetSignalRot(d,stepFirst);
139 SetStyle(sigFirstRot,"SPDfirst - Track rotation subtraction");
140 DrawSpectra(sigFirstRot,"cFirstRot",hStats,save);
142 //============================
145 AliDielectronSignalBase *sigAny=GetSignalLS(d,stepAny);
146 SetStyle(sigAny,"ITS Any - Like Sign subtraction");
147 DrawSpectra(sigAny,"cAny",hStats,fNevSel,save);
148 //--- like sign with arithmetic mean
149 AliDielectronSignalBase *sigAnyArith=GetSignalLS(d,stepAny,AliDielectronSignalBase::kLikeSignArithm);
150 SetStyle(sigAnyArith,"SPDany - Like Sign subtraction (Arithm. mean)");
151 DrawSpectra(sigAnyArith,"cAnyArith",hStats,fNevSel,save);
153 //--- Rotation subtraction
154 AliDielectronSignalBase *sigAnyRot=GetSignalRot(d,stepAny);
155 SetStyle(sigAnyRot,"SPDany - Track rotation subtraction");
156 DrawSpectra(sigAnyRot,"cAnyRot",hStats,fNevSel,save);
158 //AliDielectronSignalBase *sigAnyRot2=GetSignalRot(d,stepAnyV0); //diff. rot. angle
159 //SetStyle(sigAnyRot2,"ITS First - Track rotation subtraction");
160 //DrawSpectra(sigAnyRot2,"cAnyRot2",hStats,fNevSel,save);
162 //AliDielectronSignalBase *sigAnyRot3=GetSignalRot(d,stepAnyV0T); //diff. rot. angle
163 //SetStyle(sigAnyRot3,"ITS First - Track rotation subtraction");
164 //DrawSpectra(sigAnyRot3,"cAnyRot3",hStats,fNevSel,save);
166 //--- like sign with arithmetic mean, V0 (tender) conversions excl.
167 //AliDielectronSignalBase *sigAnyV0tArith=GetSignalLS(d,stepAnyV0T,AliDielectronSignalBase::kLikeSignArithm);
168 //SetStyle(sigAnyV0tArith,"ITS Any V0 (Tender) excl. - LS-Arithm.");
169 //DrawSpectra(sigAnyV0tArith,"cAnyV0tArith",hStats,fNevSel,save);
171 //=============================
172 //TOF up to 1.2, parametrisation in TPC ele
175 AliDielectronSignalBase *sigTOFmix=GetSignalLS(d,stepTOFmix);
176 SetStyle(sigTOFmix,"TOF + TPC - Like Sign subtraction");
177 DrawSpectra(sigTOFmix,"cTOFTPC",hStats,fNevSel,save);
178 //--- Rotation subtraction
179 AliDielectronSignalBase *sigTOFmixRot=GetSignalRot(d,stepTOFmix);
180 SetStyle(sigTOFmixRot,"TOF + TPC - Track rotation subtraction");
181 DrawSpectra(sigTOFmixRot,"cTOFTPCrot",hStats,fNevSel,save);
184 //================================
186 AliDielectronSignalBase *sigY_03_09=GetSignalLSY(d,stepAny,AliDielectronSignalBase::kLikeSignArithm);
187 DrawSpectra(sigY_03_09,"cAny_Y03_09",hStats,fNevSel,save);
189 d.SetRangeUser("Y",-.299,+.299);
190 AliDielectronSignalBase *sigY_03=GetSignalLS(d,stepAny,AliDielectronSignalBase::kLikeSignArithm);
191 DrawSpectra(sigY_03,"cAny_Y03",hStats,fNevSel,save);
193 // simulator.AliModule::SetDensityFactor(1.07);
197 //===============================
199 // "0.0, 0.8, 1.4, 2.8, 5., 9.9"
200 d.SetRangeUser("Y",-.899,+.899);
201 //Char_t *metPt="cAnyArith"; //method for background for Minv in pt bins
202 Char_t *metPt="cAnyRot";
207 if ( (out_file = fopen(Form("sigPt_%s.txt",metPt), "w")) == NULL )
208 { fprintf(stderr, "Cannot open file %s\n", Form("sigPt_%s.txt",metPt)); }
210 const Int_t NptBins=6;
211 //Float_t PtC[5]={0.5,1.25,2.25,4.,7.5}; //pt bins...need clever way
212 //Float_t PtW[5]={0.5,0.25,0.75,1.0,2.5};
213 //Float_t PtC[5]={0.5,1.5,2.5,4.,6.5}; //pt bins...23.01.11
214 //Float_t PtW[5]={0.5,0.5,0.5,1.0,1.5};
215 Float_t PtC[NptBins]={0.5,1.5,2.5,4.,6.,8.5}; //pt bins...01.02.11
216 Float_t PtW[NptBins]={0.5,0.5,0.5,1.,1.,1.5};
219 //TVectorD *vBins=AliDielectronHelper::MakeArbitraryBinning("0.0, 1, 1.5, 3, 5., 9.9");
220 //TVectorD *vBins=AliDielectronHelper::MakeArbitraryBinning("0.0, 1, 2, 3, 5, 8"); //26.01
221 TVectorD *vBins=AliDielectronHelper::MakeArbitraryBinning("0.0,1,2,3,5,7,10"); //01.02
224 //AliDielectronSignalBase *sig_Pt[5];
225 AliDielectronSignalBase *sig_Pt[NptBins];
227 //for (Int_t i=0; i<5; ++i){
228 for (Int_t i=0; i<NptBins; ++i){
229 d.SetRangeUser("Pt",(*vBins)[i]+.001, (*vBins)[i+1]-0.001);
230 if ("cAnyArith" == metPt){
231 sig_Pt[i]=GetSignalLS(d,stepAny,AliDielectronSignalBase::kLikeSignArithm);
233 else if ("cAnyRot" == metPt){
234 sig_Pt[i]=GetSignalRot(d,stepAny); //rotation
237 cout << " ??? No such method ??? " <<metPt <<endl;
239 DrawSpectra(sig_Pt[i],Form("%s_Pt%d",metPt,i),hStats,fNevSel,save);
242 TH1D *hSigPt=new TH1D("hSigPt","hSigPt",NptBins,vBins->GetMatrixArray());
243 TH1D *hSigSign=new TH1D("hSigSign","hSigSign",NptBins,vBins->GetMatrixArray());
244 TH1D *hSigSOB=new TH1D("hSigSOB","hSigSOB",NptBins,vBins->GetMatrixArray());
246 for (Int_t i=0; i<NptBins; ++i){
247 hSigPt->SetBinContent(i+1,sig_Pt[i]->GetSignal());
248 hSigPt->SetBinError(i+1,sig_Pt[i]->GetSignalError());
249 hSigSign->SetBinContent(i+1,sig_Pt[i]->GetSignificance());
250 hSigSign->SetBinError(i+1,sig_Pt[i]->GetSignificanceError());
251 hSigSOB->SetBinContent(i+1,sig_Pt[i]->GetSB());
252 hSigSOB->SetBinError(i+1,sig_Pt[i]->GetSBError());
254 fprintf(out_file,"%4.1f %5.2f %5.1f %4.1f %3.1f %4.2f %4.1f %4.2f \n",PtC[i],PtW[i],hSigPt->GetBinContent(i+1),hSigPt->GetBinError(i+1),hSigSign->GetBinContent(i+1),hSigSign->GetBinError(i+1),hSigSOB->GetBinContent(i+1),hSigSOB->GetBinError(i+1));
261 fprintf(stdout, " *** Signal file vs. pt: %s\n", Form("sigPt_%s.txt",metPt));
264 const Int_t kMarkTyp=20; //marker type
265 const Int_t kMarkCol=2; //...and color
266 const Float_t kTitSize=0.08; //axis title size
267 const Float_t kAsize=0.85*kTitSize; //...and label size
268 const Float_t kToffset=0.8;
269 const Int_t kFont=42;
271 TCanvas *cSigPt=(TCanvas*)gROOT->FindObject("cSigPt");
273 if (!cSigPt) cSigPt=new TCanvas("cSigPt","cSigPt",5,5,450,700);
275 //cSigPt->Divide(2,2);
276 cSigPt->SetTopMargin(0.04); cSigPt->SetRightMargin(0.04);
277 cSigPt->SetLeftMargin(0.13); cSigPt->SetBottomMargin(0.2);
278 cSigPt->Divide(1,3,0,0);
281 hSigPt->SetMarkerStyle(kMarkTyp);
282 hSigPt->SetMarkerColor(kMarkCol); hSigPt->SetLineColor(kMarkCol);
283 hSigPt->GetYaxis()->SetTitleOffset(kToffset);
284 hSigPt->SetTitleSize(kTitSize,"XY");
285 hSigPt->SetTitleFont(kFont,"XY");
286 hSigPt->SetLabelSize(kAsize,"YX");
287 hSigPt->SetLabelFont(kFont,"XY");
288 //gS->SetAxisRange(0.,Pt2[Npt-1],"X");
289 //hSigPt->GSetAxisRange(Y1m,Y1M,"Y");
290 hSigPt->GetYaxis()->SetTitle("N_{J/#psi}");
295 hSigSign->SetMarkerStyle(kMarkTyp);
296 hSigSign->SetMarkerColor(kMarkCol); hSigSign->SetLineColor(kMarkCol);
297 hSigSign->GetYaxis()->SetTitleOffset(kToffset);
298 hSigSign->SetTitleSize(kTitSize,"XY");
299 hSigSign->SetTitleFont(kFont,"XY");
300 hSigSign->SetLabelSize(kAsize,"YX");
301 hSigSign->SetLabelFont(kFont,"XY");
302 hSigSign->GetYaxis()->SetTitle("Significance");
306 hSigSOB->SetMaximum(4.);
307 hSigSOB->SetMinimum(0.);
308 hSigSOB->SetMarkerStyle(kMarkTyp);
309 hSigSOB->SetMarkerColor(kMarkCol); hSigSOB->SetLineColor(kMarkCol);
310 hSigSOB->GetYaxis()->SetTitleOffset(kToffset);
311 hSigSOB->SetTitleSize(kTitSize,"XY");
312 hSigSOB->SetTitleFont(kFont,"XY");
313 hSigSOB->SetLabelSize(kAsize,"YX");
314 hSigSOB->SetLabelFont(kFont,"XY");
315 hSigSOB->GetXaxis()->SetTitle("p_{t}^{J/#psi} (GeV/c");
316 hSigSOB->GetYaxis()->SetTitle("S/B");
319 cSigPt->SaveAs(Form("SigPt_%s.eps",metPt));
323 if (hStats) delete hStats;
329 //_______________________________________
330 AliDielectronSignalBase *GetSignalLS(AliDielectronCFdraw &d, Int_t step, AliDielectronSignalBase::EBackgroundMethod type)
333 // Get Extracted signal from likesign method
336 TObjArray *arr=new TObjArray;
339 for (Int_t iType=0;iType<3;++iType){
340 d.SetRangeUser("PairType",iType,iType);
341 TH1D* hh = (TH1D*)d.Project("M",step);
342 if(TMath::Abs(hh->GetBinWidth(1)-0.02)<0.0001) {
345 arr->AddAt(hh,iType);
348 AliDielectronSignalExt *sig=new AliDielectronSignalExt;
349 sig->SetScaleRawToBackground(3.2,4.9);
350 //sig->SetScaleRawToBackground(3.2,5.0);
351 sig->SetIntegralRange(2.92,3.15);
352 sig->SetMethod(type);
360 //_______________________________________
361 AliDielectronSignalBase *GetSignalLSY(AliDielectronCFdraw &d, Int_t step, AliDielectronSignalBase::EBackgroundMethod type)
364 // Get Extracted signal from likesign method
367 TObjArray *arr=new TObjArray;
370 d.SetRangeUser("Y",-.899,-.301);
372 for (Int_t iType=0;iType<3;++iType){
373 d.SetRangeUser("PairType",iType,iType);
374 arr->AddAt(d.Project("M",step),iType);
377 d.SetRangeUser("Y",+.301,+.899);
379 for (Int_t iType=0;iType<3;++iType){
380 d.SetRangeUser("PairType",iType,iType);
381 TH1 *h=d.Project("M",step);
383 TH1 *h2=(TH1*)arr->At(iType);
388 AliDielectronSignalExt *sig=new AliDielectronSignalExt;
389 sig->SetScaleRawToBackground(3.2,4.9);
390 sig->SetIntegralRange(2.93,3.15);
391 sig->SetMethod(type);
399 //_______________________________________
400 AliDielectronSignalBase *GetSignalRot(AliDielectronCFdraw &d, Int_t step)
403 // Get Extracted signal from likesign method
406 TObjArray *arr=new TObjArray;
409 Int_t iType=AliDielectron::kEv1PM;
410 d.SetRangeUser("PairType",iType,iType);
411 arr->AddAt(d.Project("M",step),iType);
413 iType=AliDielectron::kEv1PMRot;
414 d.SetRangeUser("PairType",iType,iType);
415 arr->AddAt(d.Project("M",step),iType);
417 AliDielectronSignalExt *sig=new AliDielectronSignalExt;
418 sig->SetScaleRawToBackground(3.2,4.9);
419 sig->SetIntegralRange(2.93,3.15);
420 sig->SetMethod(AliDielectronSignalBase::kRotation);
428 //_______________________________________
429 void SetStyle(AliDielectronSignalBase *sig, const char* nameAdd)
434 TH1 *hUS=sig->GetUnlikeSignHistogram();
435 hUS->SetMarkerStyle(20);
436 hUS->SetMarkerSize(0.7);
437 hUS->SetMarkerColor(kRed);
438 hUS->SetLineColor(kRed);
440 hUS->SetTitle(Form("Like sign spectrum %s;M inv. ee;counts per %.4g MeV",
441 nameAdd,1000*hUS->GetXaxis()->GetBinWidth(1)));
443 TH1* hBackground=sig->GetBackgroundHistogram();
444 hBackground->SetMarkerStyle(24);
445 hBackground->SetMarkerSize(0.7);
446 hBackground->SetStats(0);
447 hBackground->SetMarkerColor(kBlue);
448 hBackground->SetLineColor(kBlue);
449 hBackground->SetTitle(Form("Like sign spectrum %s;M inv. ee;counts per %.4g MeV",
450 nameAdd,1000*hBackground->GetXaxis()->GetBinWidth(1)));
452 TH1* hSignal=sig->GetSignalHistogram();
453 hSignal->SetMarkerStyle(20);
454 hSignal->SetMarkerSize(0.7);
455 hSignal->SetMarkerColor(kRed);
456 hSignal->SetLineColor(kRed);
457 hSignal->SetTitle(Form("Like sign spectrum %s;M inv. ee;counts per %.4g MeV",
458 nameAdd,1000*hSignal->GetXaxis()->GetBinWidth(1)));
463 //_______________________________________
464 void DrawSpectra(AliDielectronSignalBase *sig, const char* cname, TH1 *hEventStat, Float_t fNevSel, Bool_t save)
469 Float_t effInt=FitMCshape(sig);
471 gStyle->SetOptTitle(0);
472 TCanvas *c=(TCanvas*)gROOT->FindObject(cname);
473 if (!c) c=new TCanvas(cname,cname,400,500);
474 c->SetTopMargin(0.04); c->SetRightMargin(0.04);
475 c->SetLeftMargin(0.13); c->SetBottomMargin(0.14);
479 gPad->SetTopMargin(0.01);
480 gPad->SetRightMargin(0.01);
481 gPad->SetLeftMargin(0.15);
482 gPad->SetBottomMargin(0.001);
490 TH1 *hUS=sig->GetUnlikeSignHistogram();
492 TH1* hBackground=sig->GetBackgroundHistogram();
494 hUS->GetXaxis()->CenterTitle();
495 hUS->GetXaxis()->SetTitleSize(0.07); hUS->GetXaxis()->SetLabelSize(0.059);
496 // hUS->GetXaxis()->SetLabelOffset(1.);
497 hUS->GetXaxis()->SetTitleOffset(1.1);
498 hUS->GetXaxis()->SetNdivisions(510);
499 hUS->GetYaxis()->CenterTitle();
500 hUS->GetYaxis()->SetTitleSize(0.07); hUS->GetYaxis()->SetLabelSize(0.059);
501 hUS->GetYaxis()->SetTitleOffset(1.);
502 hUS->GetXaxis()->SetLabelFont(42); hUS->GetYaxis()->SetLabelFont(42);
503 hUS->GetXaxis()->SetTitleFont(42); hUS->GetYaxis()->SetTitleFont(42);
504 hUS->GetYaxis()->SetNdivisions(510);
505 //hUS->GetXaxis()->SetLimits(mMinPlot,mMmaxPlot);
506 //hUS->SetLineWidth(.7);
507 hUS->SetMarkerSize(.8);
508 hUS->SetMarkerColor(2); hUS->SetMarkerStyle(20); hUS->SetLineColor(2);
510 hUS->SetMaximum(hUS->GetMaximum()*1.3);
512 //hBackground->SetLineWidth(.4);
513 hBackground->SetMarkerSize(.7);
514 hBackground->SetMarkerColor(4); hBackground->SetMarkerStyle(27); hBackground->SetLineColor(4);
516 hBackground->Draw("same");
518 TLatex *lat=new TLatex;
520 // lat->DrawLatex(0.68, 0.67, "ALICE Performance");
521 lat->SetTextColor(1);lat->SetTextFont(42);lat->SetTextSize(.045);
523 Double_t sigN=sig->GetSignal();
524 Double_t sigEr=sig->GetSignalError();
525 Double_t sigS2B=sig->GetSB();
526 Double_t sigS2Ber=sig->GetSBError();
527 Double_t sigSignif= sig->GetSignificance();
528 Double_t sigSignifEr= sig->GetSignificanceError();
529 lat->DrawLatex(0.18, 0.92, Form("S: %5.1f#pm%4.1f, S/B: %3.1f#pm %4.2f, Signif.: %4.1f#pm%4.2f (%4.2f-%4.2f GeV) ",sigN,sigEr,sigS2B,sigS2Ber,sigSignif,sigSignifEr,
530 hUS->GetBinLowEdge(hUS->FindBin(sig->GetIntegralMin())),
531 hUS->GetBinLowEdge(hUS->FindBin(sig->GetIntegralMax())+1)));
533 TLegend *leg=new TLegend(0.17,0.72,0.42,0.88);
534 leg->SetBorderSize(0); leg->SetFillColor(0); leg->SetTextFont(42);
535 leg->SetFillStyle(0); leg->SetMargin(0.25); //separation symbol-text
536 leg->SetEntrySeparation(0.15);
537 leg->AddEntry(hUS,"OS", "p");
538 leg->AddEntry(hBackground, Form("LS*%4.2f",sig->GetScaleFactor()), "p");
542 gPad->SetRightMargin(0.01);
543 gPad->SetTopMargin(0);
544 gPad->SetLeftMargin(0.15);
545 gPad->SetBottomMargin(.15);
553 TH1* hSignal=sig->GetSignalHistogram();
554 hSignal->GetXaxis()->SetTitle("M_{ee} (GeV/c^{2})");
555 hSignal->GetXaxis()->CenterTitle();
556 hSignal->GetXaxis()->SetTitleSize(0.06); hSignal->GetXaxis()->SetLabelSize(0.05);
557 hSignal->GetXaxis()->SetTitleOffset(1.1);
558 hSignal->GetXaxis()->SetNdivisions(510);
559 hSignal->GetYaxis()->CenterTitle();
560 hSignal->GetYaxis()->SetTitleSize(0.06); hSignal->GetYaxis()->SetLabelSize(0.05);
561 hSignal->GetYaxis()->SetTitleOffset(1.1);
562 hSignal->GetXaxis()->SetLabelFont(42); hSignal->GetYaxis()->SetLabelFont(42);
563 hSignal->GetXaxis()->SetTitleFont(42); hSignal->GetYaxis()->SetTitleFont(42);
564 hSignal->GetYaxis()->SetNdivisions(510);
565 //hSignal->GetXaxis()->SetLimits(mMinPlot,mMmaxPlot);
566 //hSignal->SetLineWidth(.7);
567 hSignal->SetMarkerSize(.8);
568 hSignal->SetMarkerColor(2); hSignal->SetMarkerStyle(20); hSignal->SetLineColor(2);
572 TLegend *leg2=new TLegend(0.16,0.8,0.57,0.93);
573 leg2->SetBorderSize(0); leg2->SetFillColor(0); leg2->SetTextFont(42);
574 leg2->SetFillStyle(0); leg2->SetMargin(0.25); //separation symbol-text
575 leg2->SetEntrySeparation(0.15);
576 leg2->AddEntry(hSignal, Form("OS-%4.2f*LS",sig->GetScaleFactor()), "p");
577 TObject *hMmc=hSignal->GetListOfFunctions()->FindObject("mcMinv");
578 if (hMmc) leg2->AddEntry(hMmc, Form("MC (#chi^{2}/dof=%3.1f)",TString(hMmc->GetTitle()).Atof()), "l");
581 Double_t beforePhys=0;
582 Double_t afterPhys=0;
583 Double_t afterV0and=0;
584 Double_t afterEventSel=0;
585 Double_t afterPileupRej=0;
588 Int_t beforePhysBin=hEventStat->GetXaxis()->FindBin("Before Phys. Sel.");
589 Int_t afterPhysBin=hEventStat->GetXaxis()->FindBin("After Phys. Sel.");
590 Int_t afterV0andBin=hEventStat->GetXaxis()->FindBin("V0and triggers");
591 Int_t afterEventSelBin=hEventStat->GetXaxis()->FindBin("After Event Filter");
592 Int_t afterPileupRejBin=hEventStat->GetXaxis()->FindBin("After Pileup rejection");
594 beforePhys=hEventStat->GetBinContent(beforePhysBin);
595 afterPhys=hEventStat->GetBinContent(afterPhysBin);
596 afterV0and=hEventStat->GetBinContent(afterV0andBin);
597 afterEventSel=hEventStat->GetBinContent(afterEventSelBin);
598 afterPileupRej=hEventStat->GetBinContent(afterPileupRejBin);
600 printf("Mevents: all: %4.1f, PhysSel: %4.1f, V0AND: %4.1f, EventSel: %4.1f, PileupRej: %4.1f\n",(Float_t)beforePhys/1.e+6,(Float_t)afterPhys/1.e+6,(Float_t)afterV0and/1.e+6,(Float_t)afterEventSel/1.e+6,(Float_t)afterPileupRej/1.e+6);
602 afterPhys*=fNevSel; //fraction after Zvtx cut
604 lat->DrawLatex(0.18, 0.2, Form("%4.1f Mevents",(Float_t)afterPhys/1.e+6));
610 if ( (out_file = fopen(Form("sig_%s.txt",cname), "w")) == NULL )
611 { fprintf(stderr, "Cannot open file %s\n", Form("sig_%s.txt",cname)); }
612 fprintf(stdout, "Signal file: %s\n", Form("sig_%s.txt",cname));
613 fprintf(out_file,"%3d %4.1f %3.1f %4.2f %4.1f %4.2f %d %4.2f %6.3f\n",(int)sigN,sigEr,sigS2B,sigS2Ber,sigSignif,sigSignifEr,(Int_t)afterPhys,sig->GetScaleFactor(),effInt);
616 TFile outMinv(Form("Minv_%s.root",cname), "RECREATE");
618 hBackground->Write();
620 if (hMmc) hMmc->Write();
623 c->SaveAs(Form("Minv_%s.eps",cname));
624 //c->SaveAs(Form("%s.png",cname));
631 //_______________________________________
632 Float_t FitMCshape(AliDielectronSignalBase *sig)
634 TFile mcFile(mcLineShapeFile);
635 if (!mcFile.IsOpen()) {
636 printf("MC Minv file not found!!!\n");
639 //TH1D *hMmc = (TH1D*)mcFile.Get("mcMinv");
640 TH1D *hMmc = (TH1D*)mcFile.Get("HistSignal");
642 printf("mcMinv not found!!\n");
645 hMmc->SetDirectory(0);
646 hMmc->SetName("mcMinv");
649 TH1* hMsub=sig->GetSignalHistogram();
650 Double_t mb1=sig->GetIntegralMin();
651 Double_t mb2=sig->GetIntegralMax();
653 Double_t effInt = 0.;
654 for(Int_t iBin=hMmc->FindBin(mb1); iBin<=hMmc->FindBin(mb2); iBin++) {
655 effInt += hMmc->GetBinContent(iBin);
657 effInt/=hMmc->Integral();
658 printf("MC signal fraction in range %4.2f-%4.2f GeV: %5.3f \n",hMmc->GetBinLowEdge(hMmc->FindBin(mb1)),hMmc->GetBinLowEdge(hMmc->FindBin(mb2)+1),effInt);
660 Float_t MminFit=1.2; //min., Minv for fit (and chi2 calc.)
661 Float_t mcScale1=(hMsub->GetXaxis()->GetBinWidth(1)/hMmc->GetXaxis()->GetBinWidth(1))*
662 hMsub->Integral(hMsub->FindBin(mb1),hMsub->FindBin(mb2))/
663 hMmc->Integral(hMmc->FindBin(mb1),hMmc->FindBin(mb2));
665 printf("1st guess of MC scale factor: %6.3f ...chi2 for Minv>%4.1f\n",mcScale1,MminFit);
668 Float_t chi2_min=100000.;
672 for(Int_t i=0; i<20; i++){
674 Float_t scale=(0.4+0.05*(Float_t)i)*mcScale1;
676 for(Int_t ib=1; ib<=hMsub->GetXaxis()->GetNbins(); ib++){
677 if (hMsub->GetBinCenter(ib) > MminFit) {
678 Float_t data=(Float_t)hMsub->GetBinContent(ib);
679 Float_t err=(Float_t)hMsub->GetBinError(ib);
680 Float_t mc=scale*((Float_t)hMmc->GetBinContent(hMmc->FindBin(hMsub->GetBinCenter(ib))));
682 chi2 += ((data-mc)*(data-mc))/(err*err);
685 printf("bin %d Err: %6.3f, chi2: %6.1f\n",ib,err,chi2);
689 //printf("%d scale factor: %6.3f, chi2: %6.1f\n",i,scale,chi2);
696 //Float_t chi2dof=chi2_min/(Float_t)(hMinv->GetXaxis()->GetNbins()-1);
697 Float_t chi2dof=chi2_min/((Float_t)(ndf-1));
698 printf("MC fit (i=%d): chi2/dof: %6.3f/%d, Scale: %7.4f \n",iMin,chi2_min,(ndf-1),mcScale);
699 hMmc->SetTitle(Form("%f",chi2dof));
701 //mcScale=IntData/IntMC;printf("Int Data, MC: %10.1f %10.1f, MC scale: %6.3f\n",IntData,IntMC,mcScale);
703 hMmc->Scale(mcScale);
704 hMmc->SetOption("sameHISTC");
705 hMmc->SetLineColor(1); hMmc->SetMarkerColor(1);
706 hMsub->GetListOfFunctions()->Add(hMmc);