16 #define ALIFLOWANALYSISWITHSIMPLESP_CXX 47 fApplyCorrectionForNUA(0),
51 fNormalizationType(1),
53 fExternalResolution(-999.),
59 fHistProQaQbNorm(NULL),
60 fHistSumOfWeights(NULL),
62 fCentralityWeight(1.),
67 fHistQNormQaQbNorm(NULL),
75 fHistNumberOfSubtractedDaughters(NULL),
81 for(
int i=0; i!=2; ++i) {
82 fPhiWeightsSub[i] = NULL;
83 for(
int j=0; j!=2; ++j) {
84 fHistProUQ[i][j] = NULL;
85 fHistProUQQaQb[i][j] = NULL;
86 fHistProNUAu[i][j][0] = NULL;
87 fHistProNUAu[i][j][1] = NULL;
88 for(
int k=0; k!=3; ++k)
89 fHistSumOfWeightsu[i][j][k] = NULL;
108 Bool_t oldHistAddStatus = TH1::AddDirectoryStatus();
109 TH1::AddDirectory(kFALSE);
116 uQRelated->SetName(
"uQ");
117 uQRelated->SetOwner();
120 nuaRelated->SetName(
"NUA");
121 nuaRelated->SetOwner();
124 errorRelated->SetName(
"error");
125 errorRelated->SetOwner();
128 tQARelated->SetName(
"QA");
129 tQARelated->SetOwner();
142 fHistProConfig =
new TProfile(
"FlowPro_Flags_SP",
"Flow_Flags_SP",4,0.5,4.5,
"s");
143 fHistProConfig->GetXaxis()->SetBinLabel(1,
"fApplyCorrectionForNUA");
153 fHistProQaQbNorm =
new TProfile(
"FlowPro_QaQbNorm_SP",
"FlowPro_QaQbNorm_SP", 10000, -1000, 1000);
157 fHistProNUAq =
new TProfile(
"FlowPro_NUAq_SP",
"FlowPro_NUAq_SP", 6, 0.5, 6.5,
"s");
158 fHistProNUAq->GetXaxis()->SetBinLabel( 1,
"<<sin(#Phi_{a})>>");
159 fHistProNUAq->GetXaxis()->SetBinLabel( 2,
"<<cos(#Phi_{a})>>");
160 fHistProNUAq->GetXaxis()->SetBinLabel( 3,
"<<sin(#Phi_{b})>>");
161 fHistProNUAq->GetXaxis()->SetBinLabel( 4,
"<<cos(#Phi_{b})>>");
162 fHistProNUAq->GetXaxis()->SetBinLabel( 5,
"<<sin(#Phi_{t})>>");
163 fHistProNUAq->GetXaxis()->SetBinLabel( 6,
"<<cos(#Phi_{t})>>");
171 TString sPOI[2] = {
"RP",
"POI"};
172 TString sEta[2] = {
"Pt",
"eta"};
173 TString sTitle[2] = {
"p_{T} [GeV]",
"#eta"};
174 TString sWeights[3] = {
"uQ",
"uQuQ",
"uQQaQb"};
183 for(
Int_t iPOI=0; iPOI!=2; ++iPOI)
184 for(
Int_t iSpace=0; iSpace!=2; ++iSpace) {
186 fHistProUQ[iPOI][iSpace] =
new TProfile( Form(
"FlowPro_UQ_%s%s_SP", sEta[iSpace].
Data(), sPOI[iPOI].
Data() ),
187 Form(
"FlowPro_UQ%s%s_SP", sEta[iSpace].
Data(), sPOI[iPOI].
Data() ),
188 iNbins[iSpace], dMin[iSpace], dMax[iSpace],
"s");
194 fHistProNUAu[iPOI][iSpace][0] =
new TProfile( Form(
"FlowPro_NUAu_%s%s_IM_SP", sEta[iSpace].
Data(), sPOI[iPOI].
Data() ),
195 Form(
"FlowPro_NUAu_%s%s_IM_SP", sEta[iSpace].
Data(), sPOI[iPOI].
Data() ),
196 iNbins[iSpace], dMin[iSpace], dMax[iSpace]);
199 fHistProNUAu[iPOI][iSpace][1] =
new TProfile( Form(
"FlowPro_NUAu_%s%s_RE_SP", sEta[iSpace].
Data(), sPOI[iPOI].
Data() ),
200 Form(
"FlowPro_NUAu_%s%s_RE_SP", sEta[iSpace].
Data(), sPOI[iPOI].
Data() ),
201 iNbins[iSpace], dMin[iSpace], dMax[iSpace]);
206 fHistProUQQaQb[iPOI][iSpace] =
new TProfile( Form(
"FlowPro_UQQaQb_%s%s_SP", sEta[iSpace].
Data(), sPOI[iPOI].
Data() ),
207 Form(
"FlowPro_UQQaQb_%s%s_SP", sEta[iSpace].
Data(), sPOI[iPOI].
Data() ),
208 iNbins[iSpace], dMin[iSpace], dMax[iSpace]);
214 for(
Int_t i=0; i!=3; ++i) {
216 Form(
"Flow_SumOfWeights_%s%s_%s_SP",sWeights[i].
Data(),sPOI[iPOI].
Data(),sEta[iSpace].
Data()),
217 iNbins[iSpace], dMin[iSpace], dMax[iSpace]);
226 printf(
"WARNING: fWeightsList is NULL in the Scalar Product method.\n" );
232 printf(
"WARNING: phi_weights_sub0 not found in the Scalar Product method.\n" );
239 printf(
"WARNING: phi_weights_sub1 not found in the Scalar Product method.\n" );
246 fHistProQNorm =
new TProfile(
"FlowPro_QNorm_SP",
"FlowPro_QNorm_SP", 1,0.5,1.5,
"s");
250 fHistProQaQb =
new TH1D(
"FlowPro_QaQb_SP",
"FlowPro_QaQb_SP", 10000,-100,100);
255 fHistProQaQbM =
new TH1D(
"FlowPro_QaQbvsM_SP",
"FlowPro_QaQbvsM_SP",1000,0.0,10000);
261 fHistMaMb =
new TH2D(
"Flow_MavsMb_SP",
"Flow_MavsMb_SP",100,0.,100.,100,0.,100.);
271 fHistQaNormMa =
new TH2D(
"Flow_QaNormvsMa_SP",
"Flow_QaNormvsMa_SP",100,0.,100.,22,0.,1.1);
276 fHistQbNormMb =
new TH2D(
"Flow_QbNormvsMb_SP",
"Flow_QbNormvsMb_SP",100,0.,100.,22,0.,1.1);
281 fResolution =
new TH1D(
"Flow_resolution_SP",
"Flow_resolution_SP",100,-1.0,1.0);
282 fResolution->SetYTitle(
"dN/d(Cos2(#phi_a - #phi_b))");
286 fHistQaQb =
new TH1D(
"Flow_QaQb_SP",
"Flow_QaQb_SP",20000,-1000.,1000.);
292 fHistQaQc =
new TH1D(
"Flow_QaQc_SP",
"Flow_QaQc_SP",20000,-1000.,1000.);
298 fHistQbQc =
new TH1D(
"Flow_QbQc_SP",
"Flow_QbQc_SP",20000,-1000.,1000.);
304 fHistQaQbCos =
new TH1D(
"Flow_QaQbCos_SP",
"Flow_QaQbCos_SP",63,0.,TMath::Pi());
318 TH1::AddDirectory(oldHistAddStatus);
324 if (!anEvent)
return;
341 if( dMa < 2 )
return;
343 if( dMb < 2 )
return;
375 for (
Int_t i=0;i<iNumberOfTracks;i++) {
378 if (!pTrack)
continue;
384 if(TMath::Abs(dEta) > 0.9)
continue;
414 for(
Int_t iPOI=0; iPOI!=2; ++iPOI) {
452 fHistProNUAq = (TProfile*) nua->FindObject(
"FlowPro_NUAq_SP");
453 if(!
fHistProNUAq) printf(
"Error loading fHistProNUAq\n");
457 TString sPOI[2] = {
"RP",
"POI"};
458 TString sEta[2] = {
"Pt",
"eta"};
459 TString sWeights[3] = {
"uQ",
"uQuQ",
"uQQaQb"};
460 for(
Int_t iPOI=0; iPOI!=2; ++iPOI)
for(
Int_t iSpace=0; iSpace!=2; ++iSpace) {
461 fHistProUQ[iPOI][iSpace] = (TProfile*) uQ->FindObject( Form(
"FlowPro_UQ_%s%s_SP", sEta[iSpace].
Data(), sPOI[iPOI].
Data() ) );
462 if(!
fHistProUQ[iPOI][iSpace]) printf(
"Error loading fHistProUQ[%d][%d]\n",iPOI,iSpace);
463 fHistProNUAu[iPOI][iSpace][0] = (TProfile*) nua->FindObject( Form(
"FlowPro_NUAu_%s%s_IM_SP", sEta[iSpace].
Data(), sPOI[iPOI].
Data() ) );
464 if(!
fHistProNUAu[iPOI][iSpace][0]) printf(
"Error loading fHistProNUAu[%d][%d][0]\n",iPOI,iSpace);
465 fHistProNUAu[iPOI][iSpace][1] = (TProfile*) nua->FindObject( Form(
"FlowPro_NUAu_%s%s_RE_SP", sEta[iSpace].
Data(), sPOI[iPOI].
Data() ) );
466 if(!
fHistProNUAu[iPOI][iSpace][1]) printf(
"Error loading fHistProNUAu[%d][%d][1]\n",iPOI,iSpace);
467 fHistProUQQaQb[iPOI][iSpace] = (TProfile*) error->FindObject( Form(
"FlowPro_UQQaQb_%s%s_SP", sEta[iSpace].
Data(), sPOI[iPOI].
Data() ) );
468 for(
Int_t i=0; i!=3; ++i){
470 if(!
fHistSumOfWeightsu[iPOI][iSpace][i]) printf(
"Error loading fHistSumOfWeightsu[%d][%d][%d]\n",iPOI,iSpace,i);
491 printf(
"AliFlowAnalysisWithSimpleSP::Finish()\n");
498 printf(
"*************************************\n");
499 printf(
"*************************************\n");
500 printf(
" Integrated flow from SIMPLE \n");
501 printf(
" Scalar Product \n\n");
509 printf(
" PANIC: run with full booking !");
513 if( dEntriesQaQb < 1 ) {
514 printf(
" fHistQaQb has less than 1 entry, probably sub-events are misconfigured \n");
527 dQaQb = (dQaQb*dQaQc)/dQbQc;
530 dQaQb = (dQaQb*dQbQc)/dQaQc;
536 printf(
" Panic! the average of QaQb <= 0! Probably you need to run on more events !\n");
537 printf(
" \tusing dummy value 1 to avoid segfault \n");
543 printf(
"ResSub (sqrt of scalar product of sub-event qvectors) = %f\n", dV );
547 Double_t dStatErrorQaQb = dSpreadQaQb;
550 if(dQaQb > 0.) dVerr = (1./(2.*pow(dQaQb,0.5)))*dStatErrorQaQb;
552 printf(
"v%d(subevents) = %f +- %f\n",
fHarmonic,dV,dVerr);
561 for(
Int_t iRFPorPOI=0; iRFPorPOI != 2; ++iRFPorPOI)
562 for(
Int_t iPTorETA=0; iPTorETA != 2; ++iPTorETA)
563 for(
Int_t b=1; b != iNbins[iPTorETA]+1; ++b) {
569 if(
fHistProUQ[iRFPorPOI][iPTorETA]->GetBinEntries(b) > 1) dv2ProErr/=TMath::Sqrt(
fHistProUQ[iRFPorPOI][iPTorETA]->GetBinEntries(b));
573 if(dv2ProErr > 0) a = duQpro*duQpro/(dv2ProErr*dv2ProErr);
576 t = dv2pro*dv2pro*(a + b -2.*t);
577 if(t>0) dv2ProErr = TMath::Sqrt(t);
580 if( (iRFPorPOI==0)&&(iPTorETA==0) )
582 if( (iRFPorPOI==0)&&(iPTorETA==1) )
584 if( (iRFPorPOI==1)&&(iPTorETA==0) )
586 if( (iRFPorPOI==1)&&(iPTorETA==1) )
591 printf(
"*************************************\n");
592 printf(
"*************************************\n");
599 outputFileName->Write(outputFileName->GetName(), TObject::kSingleKey);
Double_t GetEtaMax() const
AliFlowCommonHistResults * fCommonHistsRes
AliFlowTrackSimple * GetTrack(Int_t i)
TProfile * fHistProNUAu[2][2][2]
Double_t GetPtMin() const
Bool_t FillDifferentialFlowPtRP(Int_t aBin, Double_t av, Double_t anError)
Double_t GetPtMax() const
void Make(AliFlowEventSimple *anEvent)
virtual ~AliFlowAnalysisWithSimpleSP()
Bool_t InRPSelection() const
Bool_t FillControlHistograms(AliFlowEventSimple *anEvent, TList *weightsList=NULL, Bool_t usePhiWeights=kFALSE, Bool_t usePtWeights=kFALSE, Bool_t useEtaWeights=kFALSE)
TProfile * fHistProConfig
Float_t fCentralityWeight
TProfile * fHistProUQQaQb[2][2]
Int_t GetNbinsEta() const
static AliFlowCommonConstants * GetMaster()
void GetOutputHistograms(TList *outputListHistos)
virtual void Get2Qsub(AliFlowVector *Qarray, Int_t n=2, TList *weightsList=NULL, Bool_t usePhiWeights=kFALSE, Bool_t usePtWeights=kFALSE, Bool_t useEtaWeights=kFALSE)
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
TH2D * fHistQNormQaQbNorm
Bool_t FillIntegratedFlow(Double_t aV, Double_t anError)
TH1I * fHistNumberOfSubtractedDaughters
Bool_t FillDifferentialFlowEtaPOI(Int_t aBin, Double_t av, Double_t anError)
TProfile * fHistProUQ[2][2]
Bool_t FillDifferentialFlowPtPOI(Int_t aBin, Double_t av, Double_t anError)
Double_t GetEtaMin() const
Int_t fApplyCorrectionForNUA
void WriteHistograms(TDirectoryFile *outputFileName) const
Bool_t InPOISelection(Int_t poiType=1) const
TProfile * fHistProQaQbNorm
Float_t fExternalResolution
Bool_t FillDifferentialFlowEtaRP(Int_t aBin, Double_t av, Double_t anError)
AliFlowCommonHist * fCommonHists
TH1D * fHistSumOfWeightsu[2][2][3]
Int_t NumberOfTracks() const