fPropagateErrorAlsoFromNIT(kFALSE),
fCalculateCumulantsVsM(kTRUE),
fMinimumBiasReferenceFlow(kTRUE),
- fForgetAboutCovariances(kTRUE),
+ fForgetAboutCovariances(kFALSE),
+ fStorePhiDistributionForOneEvent(kFALSE),
fReQ(NULL),
fImQ(NULL),
fSMpk(NULL),
fIntFlowCorrelationsEBE(NULL),
fIntFlowEventWeightsForCorrelationsEBE(NULL),
fIntFlowCorrelationsAllEBE(NULL),
+ fReferenceMultiplicityEBE(0.),
fAvMultiplicity(NULL),
fIntFlowCorrelationsPro(NULL),
fIntFlowCorrelationsAllPro(NULL),
fDistributionsList(NULL),
fDistributionsFlags(NULL),
fStoreDistributions(kFALSE),
+ // 6.) various:
+ fVariousList(NULL),
+ fPhiDistributionForOneEvent(NULL),
// x.) debugging and cross-checking:
fNestedLoopsList(NULL),
fEvaluateIntFlowNestedLoops(kFALSE),
this->InitializeArraysForIntFlow();
this->InitializeArraysForDiffFlow();
this->InitializeArraysForDistributions();
+ this->InitializeArraysForVarious();
this->InitializeArraysForNestedLoops();
} // end of constructor
this->BookEverythingForIntegratedFlow();
this->BookEverythingForDifferentialFlow();
this->BookEverythingForDistributions();
+ this->BookEverythingForVarious();
this->BookEverythingForNestedLoops();
// d) Store flags for integrated and differential flow:
this->StoreIntFlowFlags();
// e) Call all the methods which calculate correlations for reference flow;
// f) Call all the methods which calculate correlations for differential flow;
// g) Distributions of correlations;
- // h) Debugging and cross-checking (evaluate nested loops);
- // i) Reset all event-by-event quantities.
+ // h) Store phi distribution for one event to illustrate flow;
+ // i) Debugging and cross-checking (evaluate nested loops);
+ // j) Reset all event-by-event quantities.
// a) Check all pointers used in this method:
this->CheckPointersUsedInMake();
Double_t wPt = 1.; // pt weight
Double_t wEta = 1.; // eta weight
Int_t nRP = anEvent->GetEventNSelTracksRP(); // number of RPs (i.e. number of particles used to determine the reaction plane)
+ fReferenceMultiplicityEBE = anEvent->GetReferenceMultiplicity(); // reference multiplicity for current event
// c) Fill the common control histograms and call the method to fill fAvMultiplicity:
this->FillCommonControlHistograms(anEvent);
} // end of if(fCalculate2DFlow)
*/
- // g) Distributions of correlations;
- if(fStoreDistributions)
- {
- this->StoreDistributionsOfCorrelations();
- }
+ // g) Distributions of correlations:
+ if(fStoreDistributions){this->StoreDistributionsOfCorrelations();}
+
+ // h) Store phi distribution for one event to illustrate flow:
+ if(fStorePhiDistributionForOneEvent){this->StorePhiDistributionForOneEvent(anEvent);}
// h) Debugging and cross-checking (evaluate nested loops):
// h1) cross-checking results for integrated flow:
fPropagateErrorAlsoFromNIT = (Bool_t)fIntFlowFlags->GetBinContent(9);
fCalculateCumulantsVsM = (Bool_t)fIntFlowFlags->GetBinContent(10);
fMinimumBiasReferenceFlow = (Bool_t)fIntFlowFlags->GetBinContent(11);
- fForgetAboutCovariances = (Bool_t)fIntFlowFlags->GetBinContent(12);
+ fForgetAboutCovariances = (Bool_t)fIntFlowFlags->GetBinContent(12);
+ fStorePhiDistributionForOneEvent = (Bool_t)fIntFlowFlags->GetBinContent(13);
fEvaluateIntFlowNestedLoops = (Bool_t)fEvaluateNestedLoops->GetBinContent(1);
fEvaluateDiffFlowNestedLoops = (Bool_t)fEvaluateNestedLoops->GetBinContent(2);
fCrossCheckInPtBinNo = (Int_t)fEvaluateNestedLoops->GetBinContent(3);
void AliFlowAnalysisWithQCumulants::BookEverythingForIntegratedFlow()
{
// Book all objects for integrated flow:
- // a) Book profile to hold all flags for integrated flow.
- // b) Book event-by-event quantities.
- // c) Book profiles. // to be improved (comment)
+ // a) Book profile to hold all flags for integrated flow;
+ // b) Book event-by-event quantities;
+ // c) Book profiles; // to be improved (comment)
// d) Book histograms holding the final results.
TString sinCosFlag[2] = {"sin","cos"}; // to be improved (should I promote this to data members?)
// a) Book profile to hold all flags for integrated flow:
TString intFlowFlagsName = "fIntFlowFlags";
intFlowFlagsName += fAnalysisLabel->Data();
- fIntFlowFlags = new TProfile(intFlowFlagsName.Data(),"Flags for Integrated Flow",12,0,12);
+ fIntFlowFlags = new TProfile(intFlowFlagsName.Data(),"Flags for Integrated Flow",13,0,13);
fIntFlowFlags->SetTickLength(-0.01,"Y");
fIntFlowFlags->SetMarkerStyle(25);
fIntFlowFlags->SetLabelSize(0.05);
fIntFlowFlags->GetXaxis()->SetBinLabel(10,"Calculate cumulants vs M");
fIntFlowFlags->GetXaxis()->SetBinLabel(11,"fMinimumBiasReferenceFlow");
fIntFlowFlags->GetXaxis()->SetBinLabel(12,"fForgetAboutCovariances");
+ fIntFlowFlags->GetXaxis()->SetBinLabel(13,"fStorePhiDistributionForOneEvent");
fIntFlowList->Add(fIntFlowFlags);
// b) Book event-by-event quantities:
} // end of AliFlowAnalysisWithQCumulants::CalculateIntFlowCorrelations()
-
//================================================================================================================================
+void AliFlowAnalysisWithQCumulants::StorePhiDistributionForOneEvent(AliFlowEventSimple *anEvent)
+{
+ // Store phi distribution for one event to illustrate flow.
+
+ if(fPhiDistributionForOneEvent->GetEntries()>0){return;} // store only phi distribution for one event
+
+ Double_t vMin = fPhiDistributionForOneEventSettings[0];
+ Double_t vMax = fPhiDistributionForOneEventSettings[1];
+ Double_t refMultMin = fPhiDistributionForOneEventSettings[2];
+ Double_t refMultMax = fPhiDistributionForOneEventSettings[3];
+
+ Double_t vEBE = 0.;
+ Double_t cumulant4thEBE = fIntFlowCorrelationsEBE->GetBinContent(2)-2.*pow(fIntFlowCorrelationsEBE->GetBinContent(1),2.);
+ if(cumulant4thEBE<0.)
+ {
+ vEBE = pow(-1.*cumulant4thEBE,0.25);
+ if((vEBE>vMin && vEBE<vMax) && (fReferenceMultiplicityEBE>refMultMin && fReferenceMultiplicityEBE<refMultMax))
+ {
+ for(Int_t p=0;p<anEvent->NumberOfTracks();p++)
+ {
+ if(anEvent->GetTrack(p)->InRPSelection())
+ {
+ fPhiDistributionForOneEvent->Fill(anEvent->GetTrack(p)->Phi());
+ }
+ } // end of for(Int_t p=0;p<anEvent->NumberOfTracks();p++)
+ }
+ } // end of if(cumulant4thEBE<0.)
+
+} // end of void AliFlowAnalysisWithQCumulants::StorePhiDistributionForOneEvent(AliFlowEventSimple *anEvent)
+
+//================================================================================================================================
void AliFlowAnalysisWithQCumulants::CalculateIntFlowProductOfCorrelations()
{
fIntFlowCovariancesVsM[pi] = NULL;
fIntFlowSumOfProductOfEventWeightsVsM[pi] = NULL;
}
-
+
} // end of void AliFlowAnalysisWithQCumulants::InitializeArraysForIntFlow()
//================================================================================================================================
} // end of AliFlowAnalysisWithQCumulants::CalculateFinalResultsForRPandPOIIntegratedFlow(TString type)
-
//================================================================================================================================
-
void AliFlowAnalysisWithQCumulants::InitializeArraysForDistributions()
{
// Initialize all arrays used for distributions.
} // end of void AliFlowAnalysisWithQCumulants::InitializeArraysForDistributions()
-
//================================================================================================================================
+void AliFlowAnalysisWithQCumulants::InitializeArraysForVarious()
+{
+ // Initialize all arrays used for various unclassified objects.
+
+ for(Int_t p=0;p<4;p++) // [v_min,v_max,refMult_min,refMult_max]
+ {
+ fPhiDistributionForOneEventSettings[p] = 0.;
+ }
+
+} // end of void AliFlowAnalysisWithQCumulants::InitializeArraysForVarious()
+
+//================================================================================================================================
void AliFlowAnalysisWithQCumulants::BookEverythingForDistributions()
{
} // end of void AliFlowAnalysisWithQCumulants::BookEverythingForDistributions()
-
//================================================================================================================================
+void AliFlowAnalysisWithQCumulants::BookEverythingForVarious()
+{
+ // Book all objects for various unclassified quantities.
+
+ if(!fStorePhiDistributionForOneEvent){return;}
+
+ // a) Book histogram holding phi distribution for single event to illustrate flow.
+
+ // a) Book histogram holding phi distribution for single event to illustrate flow:
+ fPhiDistributionForOneEvent = new TH1D("fPhiDistributionForOneEvent","",360,0.,TMath::TwoPi());
+ fPhiDistributionForOneEvent->GetXaxis()->SetTitle("#phi");
+ fVariousList->Add(fPhiDistributionForOneEvent);
+
+} // end of void AliFlowAnalysisWithQCumulants::BookEverythingForVarious()
+
+//================================================================================================================================
void AliFlowAnalysisWithQCumulants::StoreFlagsForDistributions()
{
} // end of void AliFlowAnalysisWithQCumulants::StoreDistributionsOfCorrelations()
-
//================================================================================================================================
-
void AliFlowAnalysisWithQCumulants::BookAndNestAllLists()
{
// Book and nest all lists nested in the base list fHistList.
// b) Book and nest lists for differential flow;
// c) Book and nest list for particle weights;
// d) Book and nest list for distributions;
- // e) Book and nest list for nested loops;
+ // e) Book and nest list for various unclassified objects;
+ // f) Book and nest list for nested loops.
// a) Book and nest all lists for integrated flow:
// base list for integrated flow:
fDistributionsList->SetOwner(kTRUE);
fHistList->Add(fDistributionsList);
- // e) Book and nest list for nested loops:
+ // e) Book and nest list for various unclassified objects:
+ if(fStorePhiDistributionForOneEvent)
+ {
+ fVariousList = new TList();
+ fVariousList->SetName("Various");
+ fVariousList->SetOwner(kTRUE);
+ fHistList->Add(fVariousList);
+ }
+
+ // f) Book and nest list for nested loops:
fNestedLoopsList = new TList();
fNestedLoopsList->SetName("Nested Loops");
fNestedLoopsList->SetOwner(kTRUE);
fIntFlowFlags->Fill(9.5,(Int_t)fCalculateCumulantsVsM);
fIntFlowFlags->Fill(10.5,(Int_t)fMinimumBiasReferenceFlow);
fIntFlowFlags->Fill(11.5,(Int_t)fForgetAboutCovariances);
-
+ fIntFlowFlags->Fill(12.5,(Int_t)fStorePhiDistributionForOneEvent);
} // end of void AliFlowAnalysisWithQCumulants::StoreIntFlowFlags()
//================================================================================================================================
virtual void InitializeArraysForIntFlow();
virtual void InitializeArraysForDiffFlow();
virtual void InitializeArraysForDistributions();
+ virtual void InitializeArraysForVarious();
virtual void InitializeArraysForNestedLoops();
// 1.) method Init() and methods called within Init():
virtual void Init();
virtual void BookAndFillWeightsHistograms();
virtual void BookEverythingForIntegratedFlow();
virtual void BookEverythingForDifferentialFlow();
- virtual void BookEverythingForDistributions();
+ virtual void BookEverythingForDistributions();
+ virtual void BookEverythingForVarious();
virtual void BookEverythingForNestedLoops();
virtual void StoreIntFlowFlags();
virtual void StoreDiffFlowFlags();
virtual void EvaluateDiffFlowCorrectionTermsForNUAWithNestedLoopsUsingParticleWeights(AliFlowEventSimple* const anEvent, TString type, TString ptOrEta);
// 2d.) distributions of correlations:
virtual void StoreDistributionsOfCorrelations();
+ // 2e.) store phi distibution for one event to vizualize flow:
+ virtual void StorePhiDistributionForOneEvent(AliFlowEventSimple* const anEvent);
// 3.) method Finish() and methods called within Finish():
virtual void Finish();
virtual void CheckPointersUsedInFinish();
void SetMinimumBiasReferenceFlow(Bool_t const mmrf) {this->fMinimumBiasReferenceFlow = mmrf;};
Bool_t GetMinimumBiasReferenceFlow() const {return this->fMinimumBiasReferenceFlow;};
void SetForgetAboutCovariances(Bool_t const fac) {this->fForgetAboutCovariances = fac;};
- Bool_t GetForgetAboutCovariances() const {return this->fForgetAboutCovariances;};
+ Bool_t GetForgetAboutCovariances() const {return this->fForgetAboutCovariances;};
+ void SetStorePhiDistributionForOneEvent(Bool_t const spdfoe) {this->fStorePhiDistributionForOneEvent = spdfoe;};
+ Bool_t GetStorePhiDistributionForOneEvent() const {return this->fStorePhiDistributionForOneEvent;};
+ void SetPhiDistributionForOneEventSettings(Double_t const pdfoes, Int_t const i) {this->fPhiDistributionForOneEventSettings[i] = pdfoes;};
+ Double_t GetPhiDistributionForOneEventSettings(Int_t const i) const {return this->fPhiDistributionForOneEventSettings[i];};
+
// Reference flow profiles:
void SetAvMultiplicity(TProfile* const avMultiplicity) {this->fAvMultiplicity = avMultiplicity;};
TProfile* GetAvMultiplicity() const {return this->fAvMultiplicity;};
Bool_t fCalculateCumulantsVsM; // calculate cumulants versus multiplicity
Bool_t fMinimumBiasReferenceFlow; // store as reference flow in AliFlowCommonHistResults the minimum bias result (kFALSE by default)
Bool_t fForgetAboutCovariances; // when propagating error forget about the covariances
+ Bool_t fStorePhiDistributionForOneEvent; // store phi distribution for one event to illustrate flow
+ Double_t fPhiDistributionForOneEventSettings[4]; // [v_min,v_max,refMult_min,refMult_max]
// 3c.) event-by-event quantities:
TMatrixD *fReQ; // fReQ[m][k] = sum_{i=1}^{M} w_{i}^{k} cos(m*phi_{i})
TMatrixD *fImQ; // fImQ[m][k] = sum_{i=1}^{M} w_{i}^{k} sin(m*phi_{i})
TH1D *fIntFlowCorrelationsAllEBE; // to be improved (add comment)
TH1D *fIntFlowCorrectionTermsForNUAEBE[2]; // [0=sin terms,1=cos terms], NUA = non-uniform acceptance
TH1D *fIntFlowEventWeightForCorrectionTermsForNUAEBE[2]; // [0=sin terms,1=cos terms], NUA = non-uniform acceptance
+ Double_t fReferenceMultiplicityEBE; // reference multiplicity
// 3d.) profiles:
TProfile *fAvMultiplicity; // profile to hold average multiplicities and number of events for events with nRP>=0, nRP>=1, ... , and nRP>=8
TProfile *fIntFlowCorrelationsPro; // average correlations <<2>>, <<4>>, <<6>> and <<8>> (with wrong errors!)
TH1D *fDistributions[4]; // [0=distribution of <2>,1=distribution of <4>,2=distribution of <6>,3=distribution of <8>]
Double_t fMinValueOfCorrelation[4]; // min values of <2>, <4>, <6> and <8>
Double_t fMaxValueOfCorrelation[4]; // max values of <2>, <4>, <6> and <8>
+
+ // 6.) various:
+ TList *fVariousList; // list to hold various unclassified objects
+ TH1D *fPhiDistributionForOneEvent; // store phi distribution for one event to illustrate flow
// x.) debugging and cross-checking:
TList *fNestedLoopsList; // list to hold all profiles filled with nested loops