Skip to content

Commit c1ca39b

Browse files
committed
add new cut
1 parent 5db6215 commit c1ca39b

1 file changed

Lines changed: 35 additions & 8 deletions

File tree

PWGMM/Mult/Tasks/mftReassociationValidation.cxx

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
#include <THn.h>
4747
#include <TString.h>
4848

49+
#include <algorithm>
4950
#include <array>
5051
#include <chrono>
5152
#include <cmath>
@@ -118,6 +119,7 @@ enum SpecificTrackSelectionStep {
118119
AfterPtCut,
119120
AfterDcaXYCut,
120121
AfterDcaZCut,
122+
AfterChi2OverNdfCut,
121123
IsCATrack,
122124
IsLTFTrack,
123125
HasMcParticle,
@@ -313,6 +315,7 @@ struct MftReassociationValidation {
313315
Configurable<float> etaMftTrackMin{"etaMftTrackMin", -3.36f, "Minimum value for the eta of MFT tracks when used in cut function"};
314316
Configurable<float> etaMftTrackMaxFilter{"etaMftTrackMaxFilter", -2.0f, "Maximum value for the eta of MFT tracks when used in filter"};
315317
Configurable<float> etaMftTrackMinFilter{"etaMftTrackMinFilter", -3.9f, "Minimum value for the eta of MFT tracks when used in filter"};
318+
Configurable<float> maxChi2OverNdf{"maxChi2OverNdf", 1000.f, "maximum chi2/ndf for MFT tracks"};
316319
Configurable<float> mftMaxDCAxy{"mftMaxDCAxy", 2.0f, "Cut on dcaXY for MFT tracks"};
317320
Configurable<float> mftMaxDCAz{"mftMaxDCAz", 2.0f, "Cut on dcaZ for MFT tracks"};
318321
Configurable<int> nClustersMftTrack{"nClustersMftTrack", 5, "Minimum number of clusters for the reconstruction of MFT tracks"};
@@ -321,6 +324,7 @@ struct MftReassociationValidation {
321324
Configurable<bool> useMftPtCut{"useMftPtCut", false, "if true, use the Mft pt function cut"};
322325
Configurable<bool> useOnlyCATracks{"useOnlyCATracks", false, "if true, use strictly MFT tracks reconstructed with CA algo."};
323326
Configurable<bool> useOnlyLTFTracks{"useOnlyLTFTracks", false, "if true, use strictly MFT tracks reconstructed with LTF algo."};
327+
Configurable<bool> useMftChi2OverNdfCut{"useMftChi2OverNdfCut", false, "use mft track chi2/ndf cut"};
324328
} configMft;
325329

326330
float mZShift = 0; // z-vertex shift
@@ -331,8 +335,8 @@ struct MftReassociationValidation {
331335
Service<o2::ccdb::BasicCCDBManager> ccdb;
332336
o2::ccdb::CcdbApi ccdbApi;
333337
o2::parameters::GRPMagField* grpmag = nullptr;
334-
RCTFlagsChecker rctChecker;
335-
RCTFlagsChecker correlationAnalysisRctChecker{kFT0Bad, kITSBad, kTPCBadTracking, kTPCBadPID, kMFTBad};
338+
RCTFlagsChecker rctChecker{kFT0Bad, kITSBad, kTPCBadTracking, kTPCBadPID, kMFTBad};
339+
RCTFlagsChecker correlationAnalysisRctChecker{kFT0Bad, kITSBad, kTPCBadTracking, kTPCBadPID, kMFTBad, kITSLimAccMCRepr, kMFTLimAccMCRepr, kTPCLimAccMCRepr};
336340
std::array<std::shared_ptr<THnSparse>, MatchedToTrueCollisionStep::NMatchedToTrueCollisionSteps> hZVtxDiffAmbiguousTracks2D;
337341
std::array<std::shared_ptr<THnSparse>, MatchedToTrueCollisionStep::NMatchedToTrueCollisionSteps> hZVtxDiffNonAmbiguousTracks2D;
338342
std::array<std::shared_ptr<THnSparse>, MatchedToTrueCollisionStep::NMatchedToTrueCollisionSteps> hZVtxDiffNotMatchedTracks2D;
@@ -705,7 +709,7 @@ struct MftReassociationValidation {
705709

706710
registry.add(Form("MC/%s%shCollPosX", WhatReassociationMethod[ReassociationMethod].data(), WhatMcStatus[McStatus].data()), "", {HistType::kTH1D, {configAxis.axisPosX}});
707711
registry.add(Form("MC/%s%shCollPosY", WhatReassociationMethod[ReassociationMethod].data(), WhatMcStatus[McStatus].data()), "", {HistType::kTH1D, {configAxis.axisPosX}});
708-
registry.add(Form("MC/%s%shCollPosZ", WhatReassociationMethod[ReassociationMethod].data(), WhatMcStatus[McStatus].data()), "", {HistType::kTH1D, {configAxis.axisVertex}});
712+
registry.add(Form("MC/%s%shCollPosZ", WhatReassociationMethod[ReassociationMethod].data(), WhatMcStatus[McStatus].data()), "", {HistType::kTH1D, {configAxis.axisPosZ}});
709713
registry.add(Form("MC/%s%shCollMultiplicity", WhatReassociationMethod[ReassociationMethod].data(), WhatMcStatus[McStatus].data()), "", {HistType::kTH1D, {configAxis.axisMultiplicity}});
710714
registry.add(Form("MC/%s%shCollNumContrib", WhatReassociationMethod[ReassociationMethod].data(), WhatMcStatus[McStatus].data()), "", {HistType::kTH1D, {configAxis.axisMultiplicity}});
711715
}
@@ -720,8 +724,8 @@ struct MftReassociationValidation {
720724
ccdb->setCaching(true);
721725
ccdb->setLocalObjectValidityChecking();
722726
ccdb->setCreatedNotAfter(std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count());
723-
rctChecker.init(configCollision.setRCTFlagCheckerLabel, configCollision.requireZDCCheck, configCollision.requireRCTFlagCheckerLimitAcceptanceAsBad, true);
724-
correlationAnalysisRctChecker.init({kFT0Bad, kITSBad, kTPCBadTracking, kTPCBadPID, kMFTBad});
727+
rctChecker.init({kFT0Bad, kITSBad, kTPCBadTracking, kTPCBadPID, kMFTBad});
728+
correlationAnalysisRctChecker.init({kFT0Bad, kITSBad, kTPCBadTracking, kTPCBadPID, kMFTBad, kITSLimAccMCRepr, kMFTLimAccMCRepr, kTPCLimAccMCRepr});
725729

726730
// =========================
727731
// Event histograms
@@ -767,6 +771,7 @@ struct MftReassociationValidation {
767771
labelsTrackSelection[SpecificTrackSelectionStep::AfterPtCut] = "after pt cut";
768772
labelsTrackSelection[SpecificTrackSelectionStep::AfterDcaXYCut] = "after DCA XY cut";
769773
labelsTrackSelection[SpecificTrackSelectionStep::AfterDcaZCut] = "after DCA Z cut";
774+
labelsTrackSelection[SpecificTrackSelectionStep::AfterChi2OverNdfCut] = "after chi2/ndf cut";
770775
labelsTrackSelection[SpecificTrackSelectionStep::IsCATrack] = "is CA track";
771776
labelsTrackSelection[SpecificTrackSelectionStep::IsLTFTrack] = "is LTF track";
772777
labelsTrackSelection[SpecificTrackSelectionStep::HasMcParticle] = "has MC particle";
@@ -1110,6 +1115,16 @@ struct MftReassociationValidation {
11101115
return false;
11111116
}
11121117
registry.fill(HIST("MC/") + HIST(WhatReassociationMethod[ReassociationMethod]) + HIST("hPreciseTrackSelectionCounter"), SpecificTrackSelectionStep::AfterDcaZCut);
1118+
1119+
if (configMft.useMftChi2OverNdfCut) {
1120+
float ndfMftTrack = std::max(2.0f * mftTrack.nClusters() - 5.0f, 1.0f);
1121+
float mftChi2OverNdf = mftTrack.chi2() / ndfMftTrack;
1122+
if (mftChi2OverNdf > configMft.maxChi2OverNdf) {
1123+
return false;
1124+
}
1125+
}
1126+
registry.fill(HIST("MC/") + HIST(WhatReassociationMethod[ReassociationMethod]) + HIST("hPreciseTrackSelectionCounter"), SpecificTrackSelectionStep::AfterChi2OverNdfCut);
1127+
11131128
// cut on the track algorithm of MFT tracks
11141129
if (mftTrack.isCA()) {
11151130
if (fillHistograms) {
@@ -1181,7 +1196,11 @@ struct MftReassociationValidation {
11811196
aod::BCsWithTimestamps const&)
11821197
{
11831198
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
1184-
loadZVertexShiftCorrection(bc);
1199+
auto loopCounter = 0;
1200+
if (loopCounter == 0) {
1201+
loadZVertexShiftCorrection(bc);
1202+
loopCounter++;
1203+
}
11851204

11861205
if (!(isAcceptedCollision<TwoDimensional>(collision, true))) {
11871206
return;
@@ -1257,7 +1276,11 @@ struct MftReassociationValidation {
12571276
aod::BCsWithTimestamps const& /*bcs*/)
12581277
{
12591278
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
1260-
loadZVertexShiftCorrection(bc);
1279+
auto loopCounter = 0;
1280+
if (loopCounter == 0) {
1281+
loadZVertexShiftCorrection(bc);
1282+
loopCounter++;
1283+
}
12611284

12621285
registry.fill(HIST("MC/2D/hMonteCarloEventCounter"), MonteCarloEventSelectionStep::AllMonteCarloEvents);
12631286
registry.fill(HIST("MC/2D/hPreciseEventCounter"), SpecificEventSelectionStep::AllEventsPrecise);
@@ -1640,7 +1663,11 @@ struct MftReassociationValidation {
16401663
aod::BCsWithTimestamps const& /*bcs*/)
16411664
{
16421665
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
1643-
loadZVertexShiftCorrection(bc);
1666+
auto loopCounter = 0;
1667+
if (loopCounter == 0) {
1668+
loadZVertexShiftCorrection(bc);
1669+
loopCounter++;
1670+
}
16441671

16451672
registry.fill(HIST("MC/3D/hMonteCarloEventCounter"), MonteCarloEventSelectionStep::AllMonteCarloEvents);
16461673
registry.fill(HIST("MC/3D/hPreciseEventCounter"), SpecificEventSelectionStep::AllEventsPrecise);

0 commit comments

Comments
 (0)