1616#include < DataFormatsParameters/GRPMagField.h>
1717#include < cmath>
1818#include < vector>
19+ #include < unordered_map>
20+ #include < string>
21+ #include < memory>
1922#include " Framework/runDataProcessing.h"
2023#include " Framework/AnalysisTask.h"
2124#include " Framework/ASoAHelpers.h"
@@ -59,6 +62,8 @@ struct FlowTask {
5962 O2_DEFINE_CONFIGURABLE (cfgCutChi2prTPCcls, float , 2 .5f , " max chi2 per TPC clusters" )
6063 O2_DEFINE_CONFIGURABLE (cfgCutTPCclu, float , 70 .0f , " minimum TPC clusters" )
6164 O2_DEFINE_CONFIGURABLE (cfgCutDCAz, float , 2 .0f , " max DCA to vertex z" )
65+ O2_DEFINE_CONFIGURABLE (cfgCutDCAxyppPass3Enabled, bool , false , " switch of ppPass3 DCAxy pt dependent cut" )
66+ O2_DEFINE_CONFIGURABLE (cfgCutDCAzPtDepEnabled, bool , false , " switch of DCAz pt dependent cut" )
6267 O2_DEFINE_CONFIGURABLE (cfgTrkSelSwitch, bool , false , " switch for self-defined track selection" )
6368 O2_DEFINE_CONFIGURABLE (cfgTrkSelRun3ITSMatch, bool , false , " GlobalTrackRun3ITSMatching::Run3ITSall7Layers selection" )
6469 O2_DEFINE_CONFIGURABLE (cfgRejectionTPCsectorOverlap, bool , true , " rejection for TPC sector overlap" )
@@ -84,6 +89,7 @@ struct FlowTask {
8489 O2_DEFINE_CONFIGURABLE (cfgUseSmallMemory, bool , false , " Use small memory mode" )
8590 Configurable<std::vector<std::string>> cfgUserDefineGFWCorr{" cfgUserDefineGFWCorr" , std::vector<std::string>{" refN02 {2} refP02 {-2}" , " refN12 {2} refP12 {-2}" }, " User defined GFW CorrelatorConfig" };
8691 Configurable<std::vector<std::string>> cfgUserDefineGFWName{" cfgUserDefineGFWName" , std::vector<std::string>{" Ch02Gap22" , " Ch12Gap22" }, " User defined GFW Name" };
92+ Configurable<std::vector<int >> cfgRunRemoveList{" cfgRunRemoveList" , std::vector<int >{-1 }, " excluded run numbers" };
8793
8894 ConfigurableAxis axisVertex{" axisVertex" , {40 , -20 , 20 }, " vertex axis for histograms" };
8995 ConfigurableAxis axisPhi{" axisPhi" , {60 , 0.0 , constants::math::TwoPI}, " phi axis for histograms" };
@@ -168,7 +174,7 @@ struct FlowTask {
168174 registry.add (" hEventCount" , " Number of Event;; Count" , {HistType::kTH1D , {{5 , 0 , 5 }}});
169175 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (1 , " Filtered event" );
170176 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (2 , " after sel8" );
171- registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (3 , " after strict Pile-up cut " );
177+ registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (3 , " after supicious Runs removal " );
172178 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (4 , " after additional event cut" );
173179 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (5 , " after correction loads" );
174180 registry.add (" hVtxZ" , " Vexter Z distribution" , {HistType::kTH1D , {axisVertex}});
@@ -310,6 +316,8 @@ struct FlowTask {
310316 fGFW ->AddRegion (" refP10" , 0.5 , 0.8 , 1 , 1 );
311317 fGFW ->AddRegion (" refN12" , -0.8 , -0.6 , 1 , 1 );
312318 fGFW ->AddRegion (" refP12" , 0.6 , 0.8 , 1 , 1 );
319+ fGFW ->AddRegion (" refN14" , -0.8 , -0.7 , 1 , 1 );
320+ fGFW ->AddRegion (" refP14" , 0.7 , 0.8 , 1 , 1 );
313321 fGFW ->AddRegion (" refN" , -0.8 , -0.4 , 1 , 1 );
314322 fGFW ->AddRegion (" refP" , 0.4 , 0.8 , 1 , 1 );
315323 fGFW ->AddRegion (" refM" , -0.4 , 0.4 , 1 , 1 );
@@ -398,6 +406,8 @@ struct FlowTask {
398406 myTrackSel = getGlobalTrackSelectionRun3ITSMatch (TrackSelection::GlobalTrackRun3ITSMatching::Run3ITSibAny, TrackSelection::GlobalTrackRun3DCAxyCut::Default);
399407 }
400408 myTrackSel.SetMinNClustersTPC (cfgCutTPCclu);
409+ if (cfgCutDCAxyppPass3Enabled)
410+ myTrackSel.SetMaxDcaXYPtDep ([](float pt) { return 0 .004f + 0 .013f / pt; }); // Tuned on the LHC22f anchored MC LHC23d1d on primary pions. 7 Sigmas of the resolution
401411 }
402412
403413 template <char ... chars>
@@ -582,6 +592,9 @@ struct FlowTask {
582592 template <typename TTrack>
583593 bool trackSelected (TTrack track)
584594 {
595+ if (cfgCutDCAzPtDepEnabled && (track.dcaZ () > (0 .004f + 0 .013f / track.pt ())))
596+ return false ;
597+
585598 if (cfgTrkSelSwitch) {
586599 return myTrackSel.IsSelected (track);
587600 } else {
@@ -633,6 +646,15 @@ struct FlowTask {
633646 return ;
634647 if (tracks.size () < 1 )
635648 return ;
649+ registry.fill (HIST (" hEventCount" ), 1.5 );
650+ auto bc = collision.bc_as <aod::BCsWithTimestamps>();
651+ int currentRunNumber = bc.runNumber ();
652+ for (auto & ExcludedRun : cfgRunRemoveList.value ) {
653+ if (currentRunNumber == ExcludedRun) {
654+ return ;
655+ }
656+ }
657+ registry.fill (HIST (" hEventCount" ), 2.5 );
636658 if (!cfgUseSmallMemory) {
637659 registry.fill (HIST (" BeforeCut_globalTracks_centT0C" ), collision.centFT0C (), tracks.size ());
638660 registry.fill (HIST (" BeforeCut_PVTracks_centT0C" ), collision.centFT0C (), collision.multNTracksPV ());
@@ -642,9 +664,6 @@ struct FlowTask {
642664 registry.fill (HIST (" BeforeCut_multV0A_multT0A" ), collision.multFT0A (), collision.multFV0A ());
643665 registry.fill (HIST (" BeforeCut_multT0C_centT0C" ), collision.centFT0C (), collision.multFT0C ());
644666 }
645- registry.fill (HIST (" hEventCount" ), 1.5 );
646- // place holder for pile-up rejection
647- registry.fill (HIST (" hEventCount" ), 2.5 );
648667 const auto cent = collision.centFT0C ();
649668 if (cfgUseAdditionalEventCut && !eventSelected (collision, tracks.size (), cent))
650669 return ;
@@ -655,7 +674,6 @@ struct FlowTask {
655674 registry.fill (HIST (" hMult" ), tracks.size ());
656675 registry.fill (HIST (" hCent" ), collision.centFT0C ());
657676 fGFW ->Clear ();
658- auto bc = collision.bc_as <aod::BCsWithTimestamps>();
659677 if (cfgGetInteractionRate) {
660678 initHadronicRate (bc);
661679 double hadronicRate = mRateFetcher .fetch (ccdb.service , bc.timestamp (), mRunNumber , " ZNC hadronic" ) * 1 .e -3 ; //
0 commit comments