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),
86 fBookOnlyBasic(a.fBookOnlyBasic),
87 fHistMultRP(new TH1F(*a.fHistMultRP)),
88 fHistMultPOI(new TH1F(*a.fHistMultPOI)),
89 fHistMultPOIvsRP(new
TH2F(*a.fHistMultPOIvsRP)),
90 fHistPtRP(new TH1F(*a.fHistPtRP)),
91 fHistPtPOI(new TH1F(*a.fHistPtPOI)),
92 fHistPtSub0(new TH1F(*a.fHistPtSub0)),
93 fHistPtSub1(new TH1F(*a.fHistPtSub1)),
94 fHistPhiRP(new TH1F(*a.fHistPhiRP)),
95 fHistPhiPOI(new TH1F(*a.fHistPhiPOI)),
96 fHistPhiSub0(new TH1F(*a.fHistPhiSub0)),
97 fHistPhiSub1(new TH1F(*a.fHistPhiSub1)),
98 fHistEtaRP(new TH1F(*a.fHistEtaRP)),
99 fHistEtaPOI(new TH1F(*a.fHistEtaPOI)),
100 fHistEtaSub0(new TH1F(*a.fHistEtaSub0)),
101 fHistEtaSub1(new TH1F(*a.fHistEtaSub1)),
102 fHistPhiEtaRP(new
TH2F(*a.fHistPhiEtaRP)),
103 fHistPhiEtaPOI(new
TH2F(*a.fHistPhiEtaPOI)),
104 fHistProMeanPtperBin(new TProfile(*a.fHistProMeanPtperBin)),
105 fHistWeightvsPhi(new
TH2F(*a.fHistWeightvsPhi)),
106 fHistQ(new TH1F(*a.fHistQ)),
107 fHistAngleQ(new TH1F(*a.fHistAngleQ)),
108 fHistAngleQSub0(new TH1F(*a.fHistAngleQSub0)),
109 fHistAngleQSub1(new TH1F(*a.fHistAngleQSub1)),
110 fHarmonic(new TProfile(*a.fHarmonic)),
111 fRefMultVsNoOfRPs(new TProfile(*a.fRefMultVsNoOfRPs)),
112 fHistRefMult(new TH1F(*a.fHistRefMult)),
113 fHistMassPOI(new
TH2F(*a.fHistMassPOI)),
115 fHarmonicInt(a.fHarmonicInt)
156 fBookOnlyBasic(bookOnlyBasic),
159 fHistMultPOIvsRP(NULL),
173 fHistPhiEtaPOI(NULL),
174 fHistProMeanPtperBin(NULL),
175 fHistWeightvsPhi(NULL),
178 fHistAngleQSub0(NULL),
179 fHistAngleQSub1(NULL),
181 fRefMultVsNoOfRPs(NULL),
185 fHarmonicInt(harmonic)
222 sName =
"Control_Flow_MultRP_";
224 fHistMultRP =
new TH1F(sName.Data(), sName.Data(),iNbinsMult, dMultMin, dMultMax);
225 fHistMultRP ->SetXTitle(
"Multiplicity for RP selection");
228 sName =
"Control_Flow_MultPOI_";
230 fHistMultPOI =
new TH1F(sName.Data(), sName.Data(),iNbinsMult, dMultMin, dMultMax);
231 fHistMultPOI ->SetXTitle(
"Multiplicity for POI selection");
235 sName =
"Control_Flow_MultPOIvsRP_";
237 fHistMultPOIvsRP =
new TH2F(sName.Data(), sName.Data(),iNbinsMult, dMultMin, dMultMax,100, dMultMin, dMultMax);
243 sName =
"Control_Flow_PtRP_";
245 fHistPtRP =
new TH1F(sName.Data(), sName.Data(),iNbinsPt, dPtMin, dPtMax);
246 fHistPtRP ->SetXTitle(
"P_{t} (GeV/c) for RP selection");
249 sName =
"Control_Flow_PtPOI_";
251 fHistPtPOI =
new TH1F(sName.Data(), sName.Data(),iNbinsPt, dPtMin, dPtMax);
253 fHistPtPOI ->SetXTitle(
"P_{t} (GeV/c) for POI selection");
257 sName =
"Control_Flow_PtSub0_";
259 fHistPtSub0 =
new TH1F(sName.Data(), sName.Data(),iNbinsPt, dPtMin, dPtMax);
260 fHistPtSub0 ->SetXTitle(
"P_{t} (GeV/c) for Subevent 0 selection");
265 sName =
"Control_Flow_PtSub1_";
267 fHistPtSub1 =
new TH1F(sName.Data(), sName.Data(),iNbinsPt, dPtMin, dPtMax);
268 fHistPtSub1 ->SetXTitle(
"P_{t} (GeV/c) for Subevent 1 selection");
273 sName =
"Control_Flow_PhiRP_";
275 fHistPhiRP =
new TH1F(sName.Data(), sName.Data(),iNbinsPhi, dPhiMin, dPhiMax);
276 fHistPhiRP ->SetXTitle(
"#phi for RP selection");
279 sName =
"Control_Flow_PhiPOI_";
281 fHistPhiPOI =
new TH1F(sName.Data(), sName.Data(),iNbinsPhi, dPhiMin, dPhiMax);
286 sName =
"Control_Flow_PhiSub0_";
288 fHistPhiSub0 =
new TH1F(sName.Data(), sName.Data(),iNbinsPhi, dPhiMin, dPhiMax);
289 fHistPhiSub0 ->SetXTitle(
"#phi for Subevent 0 selection");
294 sName =
"Control_Flow_PhiSub1_";
296 fHistPhiSub1 =
new TH1F(sName.Data(), sName.Data(),iNbinsPhi, dPhiMin, dPhiMax);
297 fHistPhiSub1 ->SetXTitle(
"#phi for Subevent 1 selection");
302 sName =
"Control_Flow_EtaRP_";
304 fHistEtaRP =
new TH1F(sName.Data(), sName.Data(),iNbinsEta, dEtaMin, dEtaMax);
305 fHistEtaRP ->SetXTitle(
"#eta for RP selection");
308 sName =
"Control_Flow_EtaPOI_";
310 fHistEtaPOI =
new TH1F(sName.Data(), sName.Data(),iNbinsEta, dEtaMin, dEtaMax);
315 sName =
"Control_Flow_EtaSub0_";
317 fHistEtaSub0 =
new TH1F(sName.Data(), sName.Data(),iNbinsEta, dEtaMin, dEtaMax);
318 fHistEtaSub0 ->SetXTitle(
"#eta for Subevent 0 selection");
323 sName =
"Control_Flow_EtaSub1_";
325 fHistEtaSub1 =
new TH1F(sName.Data(), sName.Data(),iNbinsEta, dEtaMin, dEtaMax);
326 fHistEtaSub1 ->SetXTitle(
"#eta for Subevent 1 selection");
332 sName =
"Control_Flow_PhiEtaRP_";
334 fHistPhiEtaRP =
new TH2F(sName.Data(), sName.Data(),iNbinsEta, dEtaMin, dEtaMax, iNbinsPhi, dPhiMin, dPhiMax);
340 sName =
"Control_Flow_PhiEtaPOI_";
342 fHistPhiEtaPOI =
new TH2F(sName.Data(), sName.Data(),iNbinsEta, dEtaMin, dEtaMax, iNbinsPhi, dPhiMin, dPhiMax);
348 sName =
"Control_FlowPro_MeanPtperBin_";
357 sName =
"Control_Flow_WeightvsPhi_";
359 fHistWeightvsPhi =
new TH2F(sName.Data(), sName.Data(), iNbinsPhi, dPhiMin, dPhiMax, 300, dHistWeightvsPhiMin, dHistWeightvsPhiMax);
366 sName =
"Control_Flow_Q_";
368 fHistQ =
new TH1F(sName.Data(), sName.Data(),iNbinsQ, dQMin, dQMax);
369 fHistQ ->SetXTitle(
"Q_{vector}/Mult");
370 fHistQ ->SetYTitle(
"Counts");
375 sName =
"Control_Flow_AngleQ_";
377 fHistAngleQ =
new TH1F(sName.Data(), sName.Data(),72, 0., TMath::Pi());
383 sName =
"Control_Flow_AngleQSub0_";
385 fHistAngleQSub0 =
new TH1F(sName.Data(), sName.Data(),72, 0., TMath::Pi());
391 sName =
"Control_Flow_AngleQSub1_";
393 fHistAngleQSub1 =
new TH1F(sName.Data(), sName.Data(),72, 0., TMath::Pi());
399 sName =
"Control_Flow_Harmonic_";
401 fHarmonic =
new TProfile(sName.Data(),sName.Data(),1,0,1);
405 sName =
"Reference_Multiplicity_Vs_Number_Of_RPs_";
407 fRefMultVsNoOfRPs =
new TProfile(sName.Data(),sName.Data(),iNbinsMult, dMultMin, dMultMax);
412 sName =
"Control_Flow_Ref_Mult_";
414 fHistRefMult =
new TH1F(sName.Data(), sName.Data(),iNbinsMult, dMultMin, dMultMax);
419 sName =
"Control_Flow_Mass_POI";
421 fHistMassPOI =
new TH2F(sName.Data(), sName.Data(), iNbinsMass, dMassMin, dMassMax,
422 iNbinsPt, dPtMin, dPtMax);
426 mbWidth = (dMassMax-dMassMin)/iNbinsMass*1000.;
430 fHistMassPOI->SetZTitle( Form(
"Counts/(%.2f MeV/c^{2})",mbWidth));
507 cout<<
"##### FillControlHistograms: FlowEvent pointer null"<<endl;
522 TH1F *phiWeights = NULL;
523 TH1F *phiWeightsSub0 = NULL;
524 TH1F *phiWeightsSub1 = NULL;
525 TH1D *ptWeights = NULL;
526 TH1D *etaWeights = NULL;
529 Int_t nBinsPhiSub0 = 0;
530 Int_t nBinsPhiSub1 = 0;
540 phiWeights =
dynamic_cast<TH1F *
>(weightsList->FindObject(
"phi_weights"));
541 if(phiWeights) nBinsPhi = phiWeights->GetNbinsX();
542 phiWeightsSub0 =
dynamic_cast<TH1F *
>(weightsList->FindObject(
"phi_weights_sub0"));
543 if(phiWeightsSub0) nBinsPhiSub0 = phiWeightsSub0->GetNbinsX();
544 phiWeightsSub1 =
dynamic_cast<TH1F *
>(weightsList->FindObject(
"phi_weights_sub1"));
545 if(phiWeightsSub1) nBinsPhiSub1 = phiWeightsSub1->GetNbinsX();
549 ptWeights =
dynamic_cast<TH1D *
>(weightsList->FindObject(
"pt_weights"));
552 dBinWidthPt = ptWeights->GetBinWidth(1);
553 dPtMin = (ptWeights->GetXaxis())->GetXmin();
558 etaWeights =
dynamic_cast<TH1D *
>(weightsList->FindObject(
"eta_weights"));
561 dBinWidthEta = etaWeights->GetBinWidth(1);
562 dEtaMin = (etaWeights->GetXaxis())->GetXmin();
583 anEvent->
Get2Qsub(vQSub,
fHarmonicInt, weightsList, usePhiWeights, usePtWeights, useEtaWeights);
595 for (
Int_t i=0;i<iNumberOfTracks;i++) {
598 dWeight = pTrack->
Weight();
600 dPhi = pTrack->
Phi();
601 if (dPhi<0.) dPhi+=2*TMath::Pi();
602 dEta = pTrack->
Eta();
607 if(phiWeights && nBinsPhi) {
608 dWPhi = phiWeights->GetBinContent(1+(
Int_t)(TMath::Floor(dPhi*nBinsPhi/TMath::TwoPi())));
611 if(ptWeights && dBinWidthPt) {
612 dWPt=ptWeights->GetBinContent(1+(
Int_t)(TMath::Floor((dPt-dPtMin)/dBinWidthPt)));
615 if(etaWeights && dBinWidthEta) {
616 dWEta=etaWeights->GetBinContent(1+(
Int_t)(TMath::Floor((dEta-dEtaMin)/dBinWidthEta)));
620 Double_t dW = dWeight*dWPhi*dWPt*dWEta;
637 if(phiWeightsSub0 && nBinsPhiSub0){
638 dWPhi = phiWeightsSub0->GetBinContent(1+(
Int_t)(TMath::Floor(dPhi*nBinsPhiSub0/TMath::TwoPi())));
641 if(ptWeights && dBinWidthPt) {
642 dWPt=ptWeights->GetBinContent(1+(
Int_t)(TMath::Floor((dPt-dPtMin)/dBinWidthPt)));
645 if(etaWeights && dBinWidthEta) {
646 dWEta=etaWeights->GetBinContent(1+(
Int_t)(TMath::Floor((dEta-dEtaMin)/dBinWidthEta)));
650 Double_t dW = dWeight*dWPhi*dWPt*dWEta;
661 if(phiWeightsSub1 && nBinsPhiSub1){
662 dWPhi = phiWeightsSub1->GetBinContent(1+(
Int_t)(TMath::Floor(dPhi*nBinsPhiSub1/TMath::TwoPi())));
665 if(ptWeights && dBinWidthPt) {
666 dWPt=ptWeights->GetBinContent(1+(
Int_t)(TMath::Floor((dPt-dPtMin)/dBinWidthPt)));
669 if(etaWeights && dBinWidthEta) {
670 dWEta=etaWeights->GetBinContent(1+(
Int_t)(TMath::Floor((dEta-dEtaMin)/dBinWidthEta)));
674 Double_t dW = dWeight*dWPhi*dWPt*dWEta;
779 if (!aList)
return 0;
780 if (aList->IsEmpty())
return 0;
793 return (
double)iCount;
802 printf(
"Class.Print Name = %s, Histogram list:\n",GetName());
809 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