@@ -85,6 +85,8 @@ struct FlowSP {
8585 O2_DEFINE_CONFIGURABLE (cfgFillWeights, bool , true , " Fill NUA weights" );
8686 O2_DEFINE_CONFIGURABLE (cfgFillWeightsPOS, bool , true , " Fill NUA weights only for positive charges" );
8787 O2_DEFINE_CONFIGURABLE (cfgFillWeightsNEG, bool , true , " Fill NUA weights only for negative charges" );
88+ O2_DEFINE_CONFIGURABLE (cfguseNUA1D, bool , false , " Use 1D NUA weights (only phi)" );
89+ O2_DEFINE_CONFIGURABLE (cfguseNUA2D, bool , true , " Use 2D NUA weights (phi and eta)" );
8890 // Additional track Selections
8991 O2_DEFINE_CONFIGURABLE (cfgTrackSelsUseAdditionalTrackCut, bool , false , " Bool to enable Additional Track Cut" );
9092 O2_DEFINE_CONFIGURABLE (cfgTrackSelsDoDCApt, bool , false , " Apply Pt dependent DCAz cut" );
@@ -146,6 +148,7 @@ struct FlowSP {
146148 struct Config {
147149 std::vector<TH1D*> mEfficiency = {};
148150 std::vector<GFWWeights*> mAcceptance = {};
151+ std::vector<TH3D*> mAcceptance2D = {};
149152 bool correctionsLoaded = false ;
150153 int lastRunNumber = 0 ;
151154
@@ -161,10 +164,10 @@ struct FlowSP {
161164
162165 } cfg;
163166
164- // define output objects
165167 OutputObj<GFWWeights> fWeights {GFWWeights (" weights" )};
166168 OutputObj<GFWWeights> fWeightsPOS {GFWWeights (" weights_positive" )};
167169 OutputObj<GFWWeights> fWeightsNEG {GFWWeights (" weights_negative" )};
170+
168171 HistogramRegistry registry{" registry" };
169172
170173 // Event selection cuts - Alex
@@ -247,7 +250,7 @@ struct FlowSP {
247250 AxisSpec axisDCAxy = {100 , -.5 , .5 , " DCA_{xy} (cm)" };
248251 AxisSpec axisPhiMod = {100 , 0 , constants::math::PI / 9 , " fmod(#varphi,#pi/9)" };
249252 AxisSpec axisPhi = {60 , 0 , constants::math::TwoPI, " #varphi" };
250- AxisSpec axisEta = {64 , -1.8 , 1.8 , " #eta" };
253+ AxisSpec axisEta = {64 , -1.6 , 1.6 , " #eta" };
251254 AxisSpec axisEtaVn = {8 , -.8 , .8 , " #eta" };
252255 AxisSpec axisVx = {40 , -0.01 , 0.01 , " v_{x}" };
253256 AxisSpec axisVy = {40 , -0.01 , 0.01 , " v_{y}" };
@@ -295,14 +298,21 @@ struct FlowSP {
295298 registry.get <TH1>(HIST (" hTrackCount" ))->GetXaxis ()->SetBinLabel (trackSel_ParticleWeights + 1 , " Apply weights" );
296299
297300 if (cfgFillWeights) {
298- fWeights ->setPtBins (ptbins, &ptbinning[0 ]);
299- fWeights ->init (true , false );
301+ if (cfguseNUA2D) {
302+ registry.add <TH3>(" weights/hPhi_Eta_vz" , " " , kTH3D , {axisPhi, axisEta, axisVz});
303+ registry.add <TH3>(" weights/hPhi_Eta_vz_positive" , " " , kTH3D , {axisPhi, axisEta, axisVz});
304+ registry.add <TH3>(" weights/hPhi_Eta_vz_negative" , " " , kTH3D , {axisPhi, axisEta, axisVz});
305+ } else {
306+ // define output objects
307+ fWeights ->setPtBins (ptbins, &ptbinning[0 ]);
308+ fWeights ->init (true , false );
300309
301- fWeightsPOS ->setPtBins (ptbins, &ptbinning[0 ]);
302- fWeightsPOS ->init (true , false );
310+ fWeightsPOS ->setPtBins (ptbins, &ptbinning[0 ]);
311+ fWeightsPOS ->init (true , false );
303312
304- fWeightsNEG ->setPtBins (ptbins, &ptbinning[0 ]);
305- fWeightsNEG ->init (true , false );
313+ fWeightsNEG ->setPtBins (ptbins, &ptbinning[0 ]);
314+ fWeightsNEG ->init (true , false );
315+ }
306316 }
307317
308318 if (cfgFillEventQA) {
@@ -357,9 +367,14 @@ struct FlowSP {
357367 if (cfgFillTrackQA) {
358368 registry.add (" QA/after/pt_phi" , " " , {HistType::kTH2D , {axisPt, axisPhiMod}});
359369 registry.add <TH1>(" incl/QA/after/hPt" , " " , kTH1D , {axisPt});
370+ registry.add <TH1>(" incl/QA/after/hPt_forward" , " " , kTH1D , {axisPt});
371+ registry.add <TH1>(" incl/QA/after/hPt_forward_uncorrected" , " " , kTH1D , {axisPt});
372+ registry.add <TH1>(" incl/QA/after/hPt_backward" , " " , kTH1D , {axisPt});
373+ registry.add <TH1>(" incl/QA/after/hPt_backward_uncorrected" , " " , kTH1D , {axisPt});
360374 registry.add <TH1>(" incl/QA/after/hPhi" , " " , kTH1D , {axisPhi});
361375 registry.add <TH1>(" incl/QA/after/hPhi_uncorrected" , " " , kTH1D , {axisPhi});
362376 registry.add <TH1>(" incl/QA/after/hEta" , " " , kTH1D , {axisEta});
377+ registry.add <TH1>(" incl/QA/after/hEta_uncorrected" , " " , kTH1D , {axisEta});
363378 registry.add <TH3>(" incl/QA/after/hPhi_Eta_vz" , " " , kTH3D , {axisPhi, axisEta, axisVz});
364379 registry.add <TH3>(" incl/QA/after/hPhi_Eta_vz_corrected" , " " , kTH3D , {axisPhi, axisEta, axisVz});
365380 registry.add <TH2>(" incl/QA/after/hDCAxy_pt" , " " , kTH2D , {axisPt, axisDCAxy});
@@ -568,6 +583,17 @@ struct FlowSP {
568583 }
569584 } // end of init
570585
586+ float getNUA2D (TH3D* hNUA, float eta, float phi, float vtxz)
587+ {
588+ int xind = hNUA->GetXaxis ()->FindBin (phi);
589+ int etaind = hNUA->GetYaxis ()->FindBin (eta);
590+ int vzind = hNUA->GetZaxis ()->FindBin (vtxz);
591+ float weight = hNUA->GetBinContent (xind, etaind, vzind);
592+ if (weight != 0 )
593+ return 1 . / weight;
594+ return 1 ;
595+ }
596+
571597 template <typename TrackObject>
572598 int getTrackPID (TrackObject track)
573599 {
@@ -639,19 +665,34 @@ struct FlowSP {
639665
640666 int nWeights = 3 ;
641667
642- if (cfgCCDB_NUA.value .empty () == false ) {
643- TList* listCorrections = ccdb->getForTimeStamp <TList>(cfgCCDB_NUA, timestamp);
644- cfg.mAcceptance .push_back (reinterpret_cast <GFWWeights*>(listCorrections->FindObject (" weights" )));
645- cfg.mAcceptance .push_back (reinterpret_cast <GFWWeights*>(listCorrections->FindObject (" weights_positive" )));
646- cfg.mAcceptance .push_back (reinterpret_cast <GFWWeights*>(listCorrections->FindObject (" weights_negative" )));
647- int sizeAcc = cfg.mAcceptance .size ();
648- if (sizeAcc < nWeights)
649- LOGF (fatal, " Could not load acceptance weights from %s" , cfgCCDB_NUA.value .c_str ());
650- else
651- LOGF (info, " Loaded acceptance weights from %s" , cfgCCDB_NUA.value .c_str ());
652- } else {
653- LOGF (info, " cfgCCDB_NUA empty! No corrections loaded" );
668+ if (cfguseNUA1D) {
669+ if (cfgCCDB_NUA.value .empty () == false ) {
670+ TList* listCorrections = ccdb->getForTimeStamp <TList>(cfgCCDB_NUA, timestamp);
671+ cfg.mAcceptance .push_back (reinterpret_cast <GFWWeights*>(listCorrections->FindObject (" weights" )));
672+ cfg.mAcceptance .push_back (reinterpret_cast <GFWWeights*>(listCorrections->FindObject (" weights_positive" )));
673+ cfg.mAcceptance .push_back (reinterpret_cast <GFWWeights*>(listCorrections->FindObject (" weights_negative" )));
674+ int sizeAcc = cfg.mAcceptance .size ();
675+ if (sizeAcc < nWeights)
676+ LOGF (fatal, " Could not load acceptance weights from %s" , cfgCCDB_NUA.value .c_str ());
677+ else
678+ LOGF (info, " Loaded acceptance weights from %s" , cfgCCDB_NUA.value .c_str ());
679+ } else {
680+ LOGF (info, " cfgCCDB_NUA empty! No corrections loaded" );
681+ }
682+ } else if (cfguseNUA2D) {
683+ if (cfgCCDB_NUA.value .empty () == false ) {
684+ TH3D* hNUA2D = ccdb->getForTimeStamp <TH3D>(cfgCCDB_NUA, timestamp);
685+ if (!hNUA2D) {
686+ LOGF (fatal, " Could not load acceptance weights from %s" , cfgCCDB_NUA.value .c_str ());
687+ } else {
688+ LOGF (info, " Loaded acceptance weights from %s" , cfgCCDB_NUA.value .c_str ());
689+ cfg.mAcceptance2D .push_back (hNUA2D);
690+ }
691+ } else {
692+ LOGF (info, " cfgCCDB_NUA empty! No corrections loaded" );
693+ }
654694 }
695+ // Get Efficiency correction
655696 if (cfgCCDB_NUE.value .empty () == false ) {
656697 TList* listCorrections = ccdb->getForTimeStamp <TList>(cfgCCDB_NUE, timestamp);
657698 cfg.mEfficiency .push_back (reinterpret_cast <TH1D*>(listCorrections->FindObject (" Efficiency" )));
@@ -680,11 +721,20 @@ struct FlowSP {
680721 if (eff == 0 )
681722 return false ;
682723 weight_nue = 1 . / eff;
683- int sizeAcc = cfg.mAcceptance .size ();
684- if (sizeAcc > pID) {
685- weight_nua = cfg.mAcceptance [pID]->getNUA (phi, eta, vtxz);
686- } else {
687- weight_nua = 1 ;
724+
725+ if (cfguseNUA1D) {
726+ int sizeAcc = cfg.mAcceptance .size ();
727+ if (sizeAcc > pID) {
728+ weight_nua = cfg.mAcceptance [pID]->getNUA (phi, eta, vtxz);
729+ } else {
730+ weight_nua = 1 ;
731+ }
732+ } else if (cfguseNUA2D) {
733+ if (cfg.mAcceptance2D .size () > 0 ) {
734+ weight_nua = getNUA2D (cfg.mAcceptance2D [0 ], eta, phi, vtxz);
735+ } else {
736+ weight_nua = 1 ;
737+ }
688738 }
689739 return true ;
690740 }
@@ -1004,9 +1054,17 @@ struct FlowSP {
10041054 static constexpr std::string_view Time[] = {" before/" , " after/" };
10051055 // NOTE: species[kUnidentified] = "" (when no PID)
10061056 registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPt" ), track.pt (), wacc * weff);
1057+ if (track.eta () > 0 ) {
1058+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPt_forward" ), track.pt (), wacc * weff);
1059+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPt_forward_uncorrected" ), track.pt ());
1060+ } else {
1061+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPt_backward" ), track.pt (), wacc * weff);
1062+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPt_backward_uncorrected" ), track.pt ());
1063+ }
10071064 registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPhi" ), track.phi (), wacc);
10081065 registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPhi_uncorrected" ), track.phi ());
10091066 registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hEta" ), track.eta (), wacc);
1067+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hEta_uncorrected" ), track.eta ());
10101068 registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPhi_Eta_vz" ), track.phi (), track.eta (), vz);
10111069 registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPhi_Eta_vz_corrected" ), track.phi (), track.eta (), vz, wacc);
10121070 registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hDCAxy_pt" ), track.pt (), track.dcaXY (), wacc * weff);
@@ -1253,6 +1311,15 @@ struct FlowSP {
12531311 // constrain angle to 0 -> [0,0+2pi]
12541312 auto phi = RecoDecay::constrainAngle (track.phi (), 0 );
12551313
1314+ if (cfguseNUA2D && cfgFillWeights) {
1315+ registry.fill (HIST (" weights/hPhi_Eta_vz" ), phi, track.eta (), vtxz, 1 );
1316+ if (pos) {
1317+ registry.fill (HIST (" weights/hPhi_Eta_vz_positive" ), phi, track.eta (), vtxz, 1 );
1318+ } else {
1319+ registry.fill (HIST (" weights/hPhi_Eta_vz_negative" ), phi, track.eta (), vtxz, 1 );
1320+ }
1321+ }
1322+
12561323 // Fill NUA weights (last 0 is for Data see GFWWeights class (not a weight))
12571324 if (cfgFillWeights) {
12581325 fWeights ->fill (phi, track.eta (), vtxz, track.pt (), centrality, 0 );
0 commit comments