1717#include " PWGCF/JCorran/Core/FlowJHistManager.h"
1818
1919#include " Common/CCDB/EventSelectionParams.h"
20+ #include " Common/CCDB/RCTSelectionFlags.h"
2021#include " Common/Core/EventPlaneHelper.h"
22+ #include " Common/Core/RecoDecay.h"
2123#include " Common/DataModel/Centrality.h"
2224#include " Common/DataModel/EventSelection.h"
2325#include " Common/DataModel/FT0Corrected.h"
6062using namespace o2 ;
6163using namespace o2 ::framework;
6264using namespace o2 ::framework::expressions;
65+ using namespace o2 ::aod::rctsel;
66+ using namespace o2 ::constants::physics;
6367using namespace std ;
6468
6569using MyCollisions = soa::Join<aod::Collisions, aod::EvSels, aod::Qvectors, aod::FT0sCorrected>;
@@ -88,6 +92,14 @@ struct JEPFlowAnalysis {
8892 " Latest acceptable timestamp of creation for the object" };
8993 } cfgCcdbParam;
9094
95+ struct : ConfigurableGroup {
96+ Configurable<bool > requireRCTFlagChecker{" requireRCTFlagChecker" , true , " Check event quality in run condition table" };
97+ Configurable<std::string> cfgEvtRCTFlagCheckerLabel{" cfgEvtRCTFlagCheckerLabel" , " CBT_hadronPID" , " Evt sel: RCT flag checker label" };
98+ Configurable<bool > cfgEvtRCTFlagCheckerZDCCheck{" cfgEvtRCTFlagCheckerZDCCheck" , false , " Evt sel: RCT flag checker ZDC check" };
99+ Configurable<bool > cfgEvtRCTFlagCheckerLimitAcceptAsBad{" cfgEvtRCTFlagCheckerLimitAcceptAsBad" , true , " Evt sel: RCT flag checker treat Limited Acceptance As Bad" };
100+ } rctCut;
101+ RCTFlagsChecker rctChecker;
102+
91103 // Set Configurables here
92104 struct : ConfigurableGroup {
93105 Configurable<float > cfgPtMin{" cfgPtMin" , 0 .2f , " Minimum pT used for track seletion." };
@@ -165,7 +177,11 @@ struct JEPFlowAnalysis {
165177 float minQvecAmp = 1e-5 ;
166178 float minChg = 0.1 ;
167179 float q2Mag;
180+
181+ float activity;
182+ float qOvecM;
168183 float highestPt;
184+ float hPtPhi;
169185
170186 std::vector<TProfile3D*> shiftprofile{};
171187 std::string fullCCDBShiftCorrPath;
@@ -248,6 +264,9 @@ struct JEPFlowAnalysis {
248264 if (coll.trackOccupancyInTimeRange () > cfgMaxOccupancy || coll.trackOccupancyInTimeRange () < cfgMinOccupancy)
249265 return false ;
250266
267+ if (rctCut.requireRCTFlagChecker && !rctChecker (coll))
268+ return false ;
269+
251270 return true ;
252271 }
253272
@@ -409,35 +428,15 @@ struct JEPFlowAnalysis {
409428 }
410429 }
411430
412- float qOvecM;
413- float activity;
414- if (i == 0 ) { // second harmonic only
415- qOvecM = calcFT0CRawQVecMag (coll, i + 2 ) / coll.qvecAmp ()[detId];
416-
417- epFlowHistograms.fill (HIST (" hQoverM2M" ), cent, coll.qvecAmp ()[detId], qOvecM);
418- epFlowHistograms.fill (HIST (" hQoverM2Q2" ), cent, q2Mag, qOvecM);
419-
420- activity = calcFT0CLocalActivity (coll);
421- }
422-
423- if (cfgJetSubEvtSel & 1 ) {
424- if (cfgJetSubEvlSelVar->at (0 ) > qOvecM) {
425- return ;
426- }
427- }
428- if (cfgJetSubEvtSel & 2 ) {
429- if (cfgJetSubEvlSelVar->at (1 ) > activity) {
430- return ;
431- }
432- }
433-
434431 highestPt = 0.0 ;
432+ hPtPhi = 0.0 ;
435433 for (const auto & track : tracks) {
436434 if (cfgTrkSelFlag && trackSel (track))
437435 continue ;
438436
439437 if (highestPt < track.pt ()) {
440438 highestPt = track.pt ();
439+ hPtPhi = track.phi ();
441440 }
442441
443442 if (cfgEffCor) {
@@ -464,6 +463,12 @@ struct JEPFlowAnalysis {
464463 if (i == 0 ) { // second harmonic only
465464 epFlowHistograms.fill (HIST (" hQoverM" ), cent, highestPt, qOvecM);
466465 epFlowHistograms.fill (HIST (" hActivity" ), cent, highestPt, activity);
466+
467+ epFlowHistograms.fill (HIST (" hQoverM2M" ), cent, coll.qvecAmp ()[detId], qOvecM);
468+ epFlowHistograms.fill (HIST (" hQoverM2Q2" ), cent, q2Mag, qOvecM);
469+
470+ epFlowHistograms.fill (HIST (" hQoverMdphi" ), cent, RecoDecay::constrainAngle (hPtPhi - eps[0 ], -constants::math::PI ), qOvecM);
471+ epFlowHistograms.fill (HIST (" hActivitydphi" ), cent, RecoDecay::constrainAngle (hPtPhi - eps[0 ], -constants::math::PI ), activity);
467472 }
468473 }
469474 }
@@ -487,6 +492,8 @@ struct JEPFlowAnalysis {
487492 ccdb->setLocalObjectValidityChecking ();
488493 ccdb->setCreatedNotAfter (std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now ().time_since_epoch ()).count ());
489494
495+ rctChecker.init (rctCut.cfgEvtRCTFlagCheckerLabel , rctCut.cfgEvtRCTFlagCheckerZDCCheck , rctCut.cfgEvtRCTFlagCheckerLimitAcceptAsBad );
496+
490497 fv0geom = o2::fv0::Geometry::instance (o2::fv0::Geometry::eUninitialized);
491498
492499 detId = getdetId (cfgDetName);
@@ -522,10 +529,17 @@ struct JEPFlowAnalysis {
522529 epFlowHistograms.add (" EpResRefARefB" , " " , {HistType::kTH3F , {axisMod, axisCent, axisEvtPl}});
523530
524531 epFlowHistograms.add (" hQ2" , " " , {HistType::kTH3F , {axisMod, axisCent, axisQ2}});
532+
533+ epFlowHistograms.add (" hQoverMCnt" , " " , {HistType::kTH2F , {axisCent, axisAmpR}});
534+ epFlowHistograms.add (" hActivityCnt" , " " , {HistType::kTH2F , {axisCent, axisActR}});
535+
525536 epFlowHistograms.add (" hQoverM" , " " , {HistType::kTH3F , {axisCent, axisPt, axisAmpR}});
537+ epFlowHistograms.add (" hQoverMdphi" , " " , {HistType::kTH3F , {axisCent, axisEvtPl, axisAmpR}});
526538 epFlowHistograms.add (" hQoverM2M" , " " , {HistType::kTH3F , {axisCent, axisAmp, axisAmpR}});
527539 epFlowHistograms.add (" hQoverM2Q2" , " " , {HistType::kTH3F , {axisCent, axisQ2, axisAmpR}});
540+
528541 epFlowHistograms.add (" hActivity" , " " , {HistType::kTH3F , {axisCent, axisPt, axisActR}});
542+ epFlowHistograms.add (" hActivitydphi" , " " , {HistType::kTH3F , {axisCent, axisEvtPl, axisActR}});
529543
530544 epFlowHistograms.add (" vncos" , " " , {HistType::kTHnSparseF , {axisMod, axisCent, axisPt, axisCos}});
531545 epFlowHistograms.add (" vnsin" , " " , {HistType::kTHnSparseF , {axisMod, axisCent, axisPt, axisCos}});
@@ -639,6 +653,20 @@ struct JEPFlowAnalysis {
639653 if (coll.qvecAmp ()[detId] < minQvecAmp || coll.qvecAmp ()[refAId] < minQvecAmp || coll.qvecAmp ()[refBId] < minQvecAmp)
640654 return ;
641655
656+ qOvecM = calcFT0CRawQVecMag (coll, 2 ) / coll.qvecAmp ()[detId]; // second order
657+ activity = calcFT0CLocalActivity (coll);
658+
659+ if (cfgJetSubEvtSel & 1 ) {
660+ if (cfgJetSubEvlSelVar->at (0 ) < qOvecM) {
661+ return ;
662+ }
663+ }
664+ if (cfgJetSubEvtSel & 2 ) {
665+ if (cfgJetSubEvlSelVar->at (1 ) < activity) {
666+ return ;
667+ }
668+ }
669+
642670 fillvn (coll, tracks);
643671 }
644672 PROCESS_SWITCH (JEPFlowAnalysis, processDefault, " default process" , true );
0 commit comments