16 #include "Riostream.h"
48 fBookOnlyBasic(kFALSE),
51 fHistMultPOIvsRP(NULL),
66 fHistProMeanPtperBin(NULL),
67 fHistWeightvsPhi(NULL),
70 fHistAngleQSub0(NULL),
71 fHistAngleQSub1(NULL),
73 fRefMultVsNoOfRPs(NULL),
85 fBookOnlyBasic(a.fBookOnlyBasic),
86 fHistMultRP(new TH1F(*a.fHistMultRP)),
87 fHistMultPOI(new TH1F(*a.fHistMultPOI)),
88 fHistMultPOIvsRP(new TH2F(*a.fHistMultPOIvsRP)),
89 fHistPtRP(new TH1F(*a.fHistPtRP)),
90 fHistPtPOI(new TH1F(*a.fHistPtPOI)),
91 fHistPtSub0(new TH1F(*a.fHistPtSub0)),
92 fHistPtSub1(new TH1F(*a.fHistPtSub1)),
93 fHistPhiRP(new TH1F(*a.fHistPhiRP)),
94 fHistPhiPOI(new TH1F(*a.fHistPhiPOI)),
95 fHistPhiSub0(new TH1F(*a.fHistPhiSub0)),
96 fHistPhiSub1(new TH1F(*a.fHistPhiSub1)),
97 fHistEtaRP(new TH1F(*a.fHistEtaRP)),
98 fHistEtaPOI(new TH1F(*a.fHistEtaPOI)),
99 fHistEtaSub0(new TH1F(*a.fHistEtaSub0)),
100 fHistEtaSub1(new TH1F(*a.fHistEtaSub1)),
101 fHistPhiEtaRP(new TH2F(*a.fHistPhiEtaRP)),
102 fHistPhiEtaPOI(new TH2F(*a.fHistPhiEtaPOI)),
103 fHistProMeanPtperBin(new TProfile(*a.fHistProMeanPtperBin)),
104 fHistWeightvsPhi(new TH2F(*a.fHistWeightvsPhi)),
105 fHistQ(new TH1F(*a.fHistQ)),
106 fHistAngleQ(new TH1F(*a.fHistAngleQ)),
107 fHistAngleQSub0(new TH1F(*a.fHistAngleQSub0)),
108 fHistAngleQSub1(new TH1F(*a.fHistAngleQSub1)),
109 fHarmonic(new TProfile(*a.fHarmonic)),
110 fRefMultVsNoOfRPs(new TProfile(*a.fRefMultVsNoOfRPs)),
111 fHistRefMult(new TH1F(*a.fHistRefMult)),
112 fHistMassPOI(new TH2F(*a.fHistMassPOI)),
153 TNamed(anInput,title),
154 fBookOnlyBasic(bookOnlyBasic),
157 fHistMultPOIvsRP(NULL),
171 fHistPhiEtaPOI(NULL),
172 fHistProMeanPtperBin(NULL),
173 fHistWeightvsPhi(NULL),
176 fHistAngleQSub0(NULL),
177 fHistAngleQSub1(NULL),
179 fRefMultVsNoOfRPs(NULL),
219 sName =
"Control_Flow_MultRP_";
221 fHistMultRP =
new TH1F(sName.Data(), sName.Data(),iNbinsMult, dMultMin, dMultMax);
222 fHistMultRP ->SetXTitle(
"Multiplicity for RP selection");
225 sName =
"Control_Flow_MultPOI_";
227 fHistMultPOI =
new TH1F(sName.Data(), sName.Data(),iNbinsMult, dMultMin, dMultMax);
228 fHistMultPOI ->SetXTitle(
"Multiplicity for POI selection");
232 sName =
"Control_Flow_MultPOIvsRP_";
234 fHistMultPOIvsRP =
new TH2F(sName.Data(), sName.Data(),iNbinsMult, dMultMin, dMultMax,100, dMultMin, dMultMax);
240 sName =
"Control_Flow_PtRP_";
242 fHistPtRP =
new TH1F(sName.Data(), sName.Data(),iNbinsPt, dPtMin, dPtMax);
243 fHistPtRP ->SetXTitle(
"P_{t} (GeV/c) for RP selection");
246 sName =
"Control_Flow_PtPOI_";
248 fHistPtPOI =
new TH1F(sName.Data(), sName.Data(),iNbinsPt, dPtMin, dPtMax);
250 fHistPtPOI ->SetXTitle(
"P_{t} (GeV/c) for POI selection");
254 sName =
"Control_Flow_PtSub0_";
256 fHistPtSub0 =
new TH1F(sName.Data(), sName.Data(),iNbinsPt, dPtMin, dPtMax);
257 fHistPtSub0 ->SetXTitle(
"P_{t} (GeV/c) for Subevent 0 selection");
262 sName =
"Control_Flow_PtSub1_";
264 fHistPtSub1 =
new TH1F(sName.Data(), sName.Data(),iNbinsPt, dPtMin, dPtMax);
265 fHistPtSub1 ->SetXTitle(
"P_{t} (GeV/c) for Subevent 1 selection");
270 sName =
"Control_Flow_PhiRP_";
272 fHistPhiRP =
new TH1F(sName.Data(), sName.Data(),iNbinsPhi, dPhiMin, dPhiMax);
273 fHistPhiRP ->SetXTitle(
"#phi for RP selection");
276 sName =
"Control_Flow_PhiPOI_";
278 fHistPhiPOI =
new TH1F(sName.Data(), sName.Data(),iNbinsPhi, dPhiMin, dPhiMax);
283 sName =
"Control_Flow_PhiSub0_";
285 fHistPhiSub0 =
new TH1F(sName.Data(), sName.Data(),iNbinsPhi, dPhiMin, dPhiMax);
286 fHistPhiSub0 ->SetXTitle(
"#phi for Subevent 0 selection");
291 sName =
"Control_Flow_PhiSub1_";
293 fHistPhiSub1 =
new TH1F(sName.Data(), sName.Data(),iNbinsPhi, dPhiMin, dPhiMax);
294 fHistPhiSub1 ->SetXTitle(
"#phi for Subevent 1 selection");
299 sName =
"Control_Flow_EtaRP_";
301 fHistEtaRP =
new TH1F(sName.Data(), sName.Data(),iNbinsEta, dEtaMin, dEtaMax);
302 fHistEtaRP ->SetXTitle(
"#eta for RP selection");
305 sName =
"Control_Flow_EtaPOI_";
307 fHistEtaPOI =
new TH1F(sName.Data(), sName.Data(),iNbinsEta, dEtaMin, dEtaMax);
312 sName =
"Control_Flow_EtaSub0_";
314 fHistEtaSub0 =
new TH1F(sName.Data(), sName.Data(),iNbinsEta, dEtaMin, dEtaMax);
315 fHistEtaSub0 ->SetXTitle(
"#eta for Subevent 0 selection");
320 sName =
"Control_Flow_EtaSub1_";
322 fHistEtaSub1 =
new TH1F(sName.Data(), sName.Data(),iNbinsEta, dEtaMin, dEtaMax);
323 fHistEtaSub1 ->SetXTitle(
"#eta for Subevent 1 selection");
329 sName =
"Control_Flow_PhiEtaRP_";
331 fHistPhiEtaRP =
new TH2F(sName.Data(), sName.Data(),iNbinsEta, dEtaMin, dEtaMax, iNbinsPhi, dPhiMin, dPhiMax);
337 sName =
"Control_Flow_PhiEtaPOI_";
339 fHistPhiEtaPOI =
new TH2F(sName.Data(), sName.Data(),iNbinsEta, dEtaMin, dEtaMax, iNbinsPhi, dPhiMin, dPhiMax);
345 sName =
"Control_FlowPro_MeanPtperBin_";
354 sName =
"Control_Flow_WeightvsPhi_";
356 fHistWeightvsPhi =
new TH2F(sName.Data(), sName.Data(), iNbinsPhi, dPhiMin, dPhiMax, 300, dHistWeightvsPhiMin, dHistWeightvsPhiMax);
363 sName =
"Control_Flow_Q_";
365 fHistQ =
new TH1F(sName.Data(), sName.Data(),iNbinsQ, dQMin, dQMax);
366 fHistQ ->SetXTitle(
"Q_{vector}/Mult");
367 fHistQ ->SetYTitle(
"Counts");
372 sName =
"Control_Flow_AngleQ_";
374 fHistAngleQ =
new TH1F(sName.Data(), sName.Data(),72, 0., TMath::Pi());
380 sName =
"Control_Flow_AngleQSub0_";
382 fHistAngleQSub0 =
new TH1F(sName.Data(), sName.Data(),72, 0., TMath::Pi());
388 sName =
"Control_Flow_AngleQSub1_";
390 fHistAngleQSub1 =
new TH1F(sName.Data(), sName.Data(),72, 0., TMath::Pi());
396 sName =
"Control_Flow_Harmonic_";
398 fHarmonic =
new TProfile(sName.Data(),sName.Data(),1,0,1);
402 sName =
"Reference_Multiplicity_Vs_Number_Of_RPs_";
404 fRefMultVsNoOfRPs =
new TProfile(sName.Data(),sName.Data(),iNbinsMult, dMultMin, dMultMax);
409 sName =
"Control_Flow_Ref_Mult_";
411 fHistRefMult =
new TH1F(sName.Data(), sName.Data(),iNbinsMult, dMultMin, dMultMax);
416 sName =
"Control_Flow_Mass_POI";
418 fHistMassPOI =
new TH2F(sName.Data(), sName.Data(), iNbinsMass, dMassMin, dMassMax,
419 iNbinsPt, dPtMin, dPtMax);
420 Double_t mbWidth = 0.;
423 mbWidth = (dMassMax-dMassMin)/iNbinsMass*1000.;
427 fHistMassPOI->SetZTitle( Form(
"Counts/(%.2f MeV/c^{2})",mbWidth));
504 cout<<
"##### FillControlHistograms: FlowEvent pointer null"<<endl;
512 Double_t dWeight = 1.;
519 TH1F *phiWeights = NULL;
520 TH1F *phiWeightsSub0 = NULL;
521 TH1F *phiWeightsSub1 = NULL;
522 TH1D *ptWeights = NULL;
523 TH1D *etaWeights = NULL;
526 Int_t nBinsPhiSub0 = 0;
527 Int_t nBinsPhiSub1 = 0;
528 Double_t dBinWidthPt = 0.;
529 Double_t dPtMin = 0.;
530 Double_t dBinWidthEta = 0.;
531 Double_t dEtaMin = 0.;
537 phiWeights =
dynamic_cast<TH1F *
>(weightsList->FindObject(
"phi_weights"));
538 if(phiWeights) nBinsPhi = phiWeights->GetNbinsX();
539 phiWeightsSub0 =
dynamic_cast<TH1F *
>(weightsList->FindObject(
"phi_weights_sub0"));
540 if(phiWeightsSub0) nBinsPhiSub0 = phiWeightsSub0->GetNbinsX();
541 phiWeightsSub1 =
dynamic_cast<TH1F *
>(weightsList->FindObject(
"phi_weights_sub1"));
542 if(phiWeightsSub1) nBinsPhiSub1 = phiWeightsSub1->GetNbinsX();
546 ptWeights =
dynamic_cast<TH1D *
>(weightsList->FindObject(
"pt_weights"));
549 dBinWidthPt = ptWeights->GetBinWidth(1);
550 dPtMin = (ptWeights->GetXaxis())->GetXmin();
555 etaWeights =
dynamic_cast<TH1D *
>(weightsList->FindObject(
"eta_weights"));
558 dBinWidthEta = etaWeights->GetBinWidth(1);
559 dEtaMin = (etaWeights->GetXaxis())->GetXmin();
567 AliFlowVector vQ = anEvent->
GetQ(2, weightsList, usePhiWeights, usePtWeights, useEtaWeights);
580 anEvent->
Get2Qsub(vQSub, 2, weightsList, usePhiWeights, usePtWeights, useEtaWeights);
586 Double_t dMultRP = 0.;
587 Double_t dMultPOI = 0.;
592 for (Int_t i=0;i<iNumberOfTracks;i++) {
595 dWeight = pTrack->
Weight();
597 dPhi = pTrack->
Phi();
598 if (dPhi<0.) dPhi+=2*TMath::Pi();
599 dEta = pTrack->
Eta();
604 if(phiWeights && nBinsPhi) {
605 dWPhi = phiWeights->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*nBinsPhi/TMath::TwoPi())));
608 if(ptWeights && dBinWidthPt) {
609 dWPt=ptWeights->GetBinContent(1+(Int_t)(TMath::Floor((dPt-dPtMin)/dBinWidthPt)));
612 if(etaWeights && dBinWidthEta) {
613 dWEta=etaWeights->GetBinContent(1+(Int_t)(TMath::Floor((dEta-dEtaMin)/dBinWidthEta)));
617 Double_t dW = dWeight*dWPhi*dWPt*dWEta;
634 if(phiWeightsSub0 && nBinsPhiSub0){
635 dWPhi = phiWeightsSub0->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*nBinsPhiSub0/TMath::TwoPi())));
638 if(ptWeights && dBinWidthPt) {
639 dWPt=ptWeights->GetBinContent(1+(Int_t)(TMath::Floor((dPt-dPtMin)/dBinWidthPt)));
642 if(etaWeights && dBinWidthEta) {
643 dWEta=etaWeights->GetBinContent(1+(Int_t)(TMath::Floor((dEta-dEtaMin)/dBinWidthEta)));
647 Double_t dW = dWeight*dWPhi*dWPt*dWEta;
658 if(phiWeightsSub1 && nBinsPhiSub1){
659 dWPhi = phiWeightsSub1->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*nBinsPhiSub1/TMath::TwoPi())));
662 if(ptWeights && dBinWidthPt) {
663 dWPt=ptWeights->GetBinContent(1+(Int_t)(TMath::Floor((dPt-dPtMin)/dBinWidthPt)));
666 if(etaWeights && dBinWidthEta) {
667 dWEta=etaWeights->GetBinContent(1+(Int_t)(TMath::Floor((dEta-dEtaMin)/dBinWidthEta)));
671 Double_t dW = dWeight*dWPhi*dWPt*dWEta;
682 Double_t dW = dWeight;
720 Double_t dEntries =
fHistPtRP->GetBinContent(aBin);
731 Double_t dEntries =
fHistPtPOI->GetBinContent(aBin);
742 Double_t dEntries =
fHistEtaRP->GetBinContent(aBin);
753 Double_t dEntries =
fHistEtaPOI->GetBinContent(aBin);
776 if (!aList)
return 0;
777 if (aList->IsEmpty())
return 0;
790 return (
double)iCount;
799 printf(
"Class.Print Name = %s, Histogram list:\n",GetName());
806 printf(
"Empty histogram list \n");
Double_t GetEtaMax() const
Int_t GetNbinsMult() const
Double_t GetHistWeightvsPhiMin() const
virtual AliFlowVector GetQ(Int_t n=2, TList *weightsList=NULL, Bool_t usePhiWeights=kFALSE, Bool_t usePtWeights=kFALSE, Bool_t useEtaWeights=kFALSE)
Double_t GetEntriesInEtaBinPOI(Int_t iBin)
Double_t GetMeanPt(Int_t iBin)
Double_t GetMultMin() const
AliFlowTrackSimple * GetTrack(Int_t i)
Bool_t InSubevent(Int_t i) const
Double_t GetEntriesInPtBinPOI(Int_t iBin)
Int_t GetNbinsPhi() const
Double_t GetPtMin() const
virtual Double_t Merge(TCollection *aList)
Double_t GetPtMax() const
ClassImp(AliFlowCommonHist) AliFlowCommonHist
Double_t GetHistWeightvsPhiMax() const
Bool_t InRPSelection() const
Bool_t FillControlHistograms(AliFlowEventSimple *anEvent, TList *weightsList=NULL, Bool_t usePhiWeights=kFALSE, Bool_t usePtWeights=kFALSE, Bool_t useEtaWeights=kFALSE)
Double_t GetMassMin() const
virtual ~AliFlowCommonHist()
Double_t GetMultMax() const
Double_t GetPhiMax() const
void Print(Option_t *option="") const
Int_t GetNbinsEta() const
Double_t GetEntriesInPtBinRP(Int_t iBin)
static AliFlowCommonConstants * GetMaster()
Double_t GetEntriesInEtaBinRP(Int_t iBin)
Int_t GetNbinsMass() const
virtual void Get2Qsub(AliFlowVector *Qarray, Int_t n=2, TList *weightsList=NULL, Bool_t usePhiWeights=kFALSE, Bool_t usePtWeights=kFALSE, Bool_t useEtaWeights=kFALSE)
Int_t GetReferenceMultiplicity() const
Double_t GetPhiMin() const
Double_t GetEtaMin() const
TProfile * fRefMultVsNoOfRPs
Double_t GetMassMax() const
TProfile * fHistProMeanPtperBin
Bool_t InPOISelection(Int_t poiType=1) const
Int_t NumberOfTracks() const