Skip to content

Commit b89197e

Browse files
authored
[Trigger,PWGEM] update globalDimuonFilter for vertical shift of MFT (#17740)
1 parent 5d48074 commit b89197e

1 file changed

Lines changed: 53 additions & 37 deletions

File tree

EventFiltering/PWGEM/globalDimuonFilter.cxx

Lines changed: 53 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
#include <algorithm>
4949
#include <cfloat>
5050
#include <cmath>
51+
#include <cstdint>
5152
#include <map>
5253
#include <memory>
5354
#include <string>
@@ -56,10 +57,6 @@
5657
#include <utility>
5758
#include <vector>
5859

59-
#include <stdint.h>
60-
61-
// #include <math.h>
62-
6360
struct globalDimuonFilter {
6461
o2::framework::Produces<o2::aod::GlobalDimuonFilters> tags;
6562

@@ -147,18 +144,24 @@ struct globalDimuonFilter {
147144
// for z shift for propagation
148145
o2::framework::Configurable<bool> cfgApplyZShiftFromCCDB{"cfgApplyZShiftFromCCDB", false, "flag to apply z shift"};
149146
o2::framework::Configurable<std::string> cfgZShiftPath{"cfgZShiftPath", "Users/m/mcoquet/ZShift", "CCDB path for z shift to apply to forward tracks"};
150-
o2::framework::Configurable<float> cfgManualXShift{"cfgManualXShift", 0, "manual x shift for propagation of global muon to PV"};
151-
o2::framework::Configurable<float> cfgManualYShift{"cfgManualYShift", 0, "manual y shift for propagation of global muon to PV"};
152-
o2::framework::Configurable<float> cfgManualZShift{"cfgManualZShift", 0, "manual z shift for propagation of global muon to PV"};
147+
o2::framework::Configurable<float> cfgManualXShiftMFTtop{"cfgManualXShiftMFTtop", 0, "manual x shift for propagation of global muon to PV"};
148+
o2::framework::Configurable<float> cfgManualYShiftMFTtop{"cfgManualYShiftMFTtop", 0, "manual y shift for propagation of global muon to PV"};
149+
o2::framework::Configurable<float> cfgManualZShiftMFTtop{"cfgManualZShiftMFTtop", 0, "manual z shift for propagation of global muon to PV"};
150+
o2::framework::Configurable<float> cfgManualXShiftMFTbottom{"cfgManualXShiftMFTbottom", 0, "manual x shift for propagation of global muon to PV"};
151+
o2::framework::Configurable<float> cfgManualYShiftMFTbottom{"cfgManualYShiftMFTbottom", 0, "manual y shift for propagation of global muon to PV"};
152+
o2::framework::Configurable<float> cfgManualZShiftMFTbottom{"cfgManualZShiftMFTbottom", 0, "manual z shift for propagation of global muon to PV"};
153153

154154
o2::framework::HistogramRegistry fRegistry{"output", {}, o2::framework::OutputObjHandlingPolicy::AnalysisObject, false, false};
155155
o2::ccdb::CcdbApi ccdbApi;
156156
o2::framework::Service<o2::ccdb::BasicCCDBManager> ccdb;
157157
int mRunNumber = 0;
158158
float mBz = 0;
159-
float mXShift = 0;
160-
float mYShift = 0;
161-
float mZShift = 0;
159+
float mXShiftMFTtop = 0;
160+
float mYShiftMFTtop = 0;
161+
float mZShiftMFTtop = 0;
162+
float mXShiftMFTbottom = 0;
163+
float mYShiftMFTbottom = 0;
164+
float mZShiftMFTbottom = 0;
162165

163166
void init(o2::framework::InitContext&)
164167
{
@@ -169,9 +172,12 @@ struct globalDimuonFilter {
169172
ccdbApi.init(ccdburl);
170173
mRunNumber = 0;
171174
mBz = 0;
172-
mXShift = 0;
173-
mYShift = 0;
174-
mZShift = 0;
175+
mXShiftMFTtop = 0;
176+
mYShiftMFTtop = 0;
177+
mZShiftMFTtop = 0;
178+
mXShiftMFTbottom = 0;
179+
mYShiftMFTbottom = 0;
180+
mZShiftMFTbottom = 0;
175181

176182
addHistograms();
177183
}
@@ -202,16 +208,26 @@ struct globalDimuonFilter {
202208
auto* zShift = ccdb->getForTimeStamp<std::vector<float>>(cfgZShiftPath, bc.timestamp());
203209
if (zShift != nullptr && !zShift->empty()) {
204210
LOGF(info, "reading z shift %f from %s", (*zShift)[0], cfgZShiftPath.value);
205-
mZShift = (*zShift)[0];
211+
mZShiftMFTtop = (*zShift)[0];
212+
mZShiftMFTbottom = (*zShift)[0];
206213
} else {
207214
LOGF(info, "z shift is not found in ccdb path %s. set to 0 cm", cfgZShiftPath.value);
208-
mZShift = 0;
215+
mZShiftMFTtop = 0;
216+
mZShiftMFTbottom = 0;
209217
}
210218
} else {
211-
LOGF(info, "z shift is manually set to %f cm", cfgManualZShift.value);
212-
mXShift = cfgManualXShift;
213-
mYShift = cfgManualYShift;
214-
mZShift = cfgManualZShift;
219+
LOGF(info, "X shift for MFT top is manually set to %f cm", cfgManualXShiftMFTtop.value);
220+
LOGF(info, "X shift for MFT bottom is manually set to %f cm", cfgManualXShiftMFTbottom.value);
221+
LOGF(info, "Y shift for MFT top is manually set to %f cm", cfgManualYShiftMFTtop.value);
222+
LOGF(info, "Y shift for MFT bottom is manually set to %f cm", cfgManualYShiftMFTbottom.value);
223+
LOGF(info, "Z shift for MFT top is manually set to %f cm", cfgManualZShiftMFTtop.value);
224+
LOGF(info, "Z shift for MFT bottom is manually set to %f cm", cfgManualZShiftMFTbottom.value);
225+
mXShiftMFTtop = cfgManualXShiftMFTtop;
226+
mYShiftMFTtop = cfgManualYShiftMFTtop;
227+
mZShiftMFTtop = cfgManualZShiftMFTtop;
228+
mXShiftMFTbottom = cfgManualXShiftMFTbottom;
229+
mYShiftMFTbottom = cfgManualYShiftMFTbottom;
230+
mZShiftMFTbottom = cfgManualZShiftMFTbottom;
215231
}
216232
}
217233

@@ -232,9 +248,9 @@ struct globalDimuonFilter {
232248

233249
fRegistry.add("Vertex/MB/hZvtx", "vertex z; Z_{vtx} (cm)", o2::framework::HistType::kTH1D, {{40, -20, +20}}, false);
234250
fRegistry.add("Vertex/MB/hChi2vsNContrib", "vertex #chi^{2}/N_{contrib} vs. N_{contrib};N_{contrib};#chi^{2}/N_{contrib}", o2::framework::HistType::kTH2D, {{200, 0.5, 200.5}, {100, 0, 10}}, false);
235-
fRegistry.add("Vertex/MB/hSigmaX", "vertex #sigma_{X} vs. N_{contrib};N_{contrib};#sigma_{X} (#mum)", o2::framework::HistType::kTH2D, {{200, 0.5, 200.5}, {2000, 0, 200}}, false);
236-
fRegistry.add("Vertex/MB/hSigmaY", "vertex #sigma_{Y} vs. N_{contrib};N_{contrib};#sigma_{Y} (#mum)", o2::framework::HistType::kTH2D, {{200, 0.5, 200.5}, {2000, 0, 200}}, false);
237-
fRegistry.add("Vertex/MB/hSigmaZ", "vertex #sigma_{Z} vs. N_{contrib};N_{contrib};#sigma_{Z} (#mum)", o2::framework::HistType::kTH2D, {{200, 0.5, 200.5}, {2000, 0, 200}}, false);
251+
fRegistry.add("Vertex/MB/hSigmaX", "vertex #sigma_{X} vs. N_{contrib};N_{contrib};#sigma_{X} (#mum)", o2::framework::HistType::kTH2D, {{200, 0.5, 200.5}, {1000, 0, 100}}, false);
252+
fRegistry.add("Vertex/MB/hSigmaY", "vertex #sigma_{Y} vs. N_{contrib};N_{contrib};#sigma_{Y} (#mum)", o2::framework::HistType::kTH2D, {{200, 0.5, 200.5}, {1000, 0, 100}}, false);
253+
fRegistry.add("Vertex/MB/hSigmaZ", "vertex #sigma_{Z} vs. N_{contrib};N_{contrib};#sigma_{Z} (#mum)", o2::framework::HistType::kTH2D, {{200, 0.5, 200.5}, {1000, 0, 100}}, false);
238254
fRegistry.addClone("Vertex/MB/", "Vertex/Triggered/");
239255

240256
fRegistry.add("MFTMCHMID/positive/hPt", "pT;p_{T} (GeV/c)", o2::framework::HistType::kTH1D, {{200, 0.0f, 10}}, false);
@@ -253,7 +269,7 @@ struct globalDimuonFilter {
253269
fRegistry.add("MFTMCHMID/positive/hChi2MatchMCHMFT_Pt", "chi2 match MCH-MFT;p_{T,#mu} (GeV/c);matching #chi^{2}/ndf between MFT-MCH", o2::framework::HistType::kTH2D, {{200, 0, 10}, {100, 0.0f, 100}}, false);
254270
fRegistry.add("MFTMCHMID/positive/hDCAxy2D", "DCA x vs. y;DCA_{x} (cm);DCA_{y} (cm)", o2::framework::HistType::kTH2D, {{400, -1, 1}, {400, -1, +1}}, false);
255271
fRegistry.add("MFTMCHMID/positive/hDCAxy2DinSigma", "DCA x vs. y in sigma;DCA_{x} (#sigma);DCA_{y} (#sigma)", o2::framework::HistType::kTH2D, {{200, -10, 10}, {200, -10, +10}}, false);
256-
fRegistry.add("MFTMCHMID/positive/hDCAxy", "DCAxy;DCA_{xy} (cm);", o2::framework::HistType::kTH1D, {{100, 0, 1}}, false);
272+
fRegistry.add("MFTMCHMID/positive/hDCAxy", "DCAxy;DCA_{xy} (cm);", o2::framework::HistType::kTH1D, {{1000, 0, 1}}, false);
257273
fRegistry.add("MFTMCHMID/positive/hDCAxyinSigma", "DCAxy in sigma;DCA_{xy} (#sigma);", o2::framework::HistType::kTH1D, {{100, 0, 10}}, false);
258274
fRegistry.add("MFTMCHMID/positive/hLog10Chi2IP", "chi2IP;log_{10}(#chi^{2}_{IP})", o2::framework::HistType::kTH1D, {{1000, -5, 5}}, false);
259275
fRegistry.add("MFTMCHMID/positive/hDCAxResolutionvsPt", "DCA_{x} resolution vs. p_{T};p_{T} (GeV/c);DCA_{x} resolution (#mum);", o2::framework::HistType::kTH2D, {{100, 0, 10.f}, {500, 0, 500}}, false);
@@ -426,12 +442,12 @@ struct globalDimuonFilter {
426442
return false;
427443
}
428444

429-
o2::dataformats::GlobalFwdTrack propmuonAtPV_Matched = o2::aod::fwdtrackutils::propagateMuon(mchtrack, mchtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, glMuonCutGroup.matchingZ, mBz, mXShift, mYShift, mZShift);
445+
o2::dataformats::GlobalFwdTrack propmuonAtPV_Matched = o2::aod::fwdtrackutils::propagateMuon(mchtrack, mchtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, glMuonCutGroup.matchingZ, mBz, 0.f, 0.f, 0.f);
430446
float etaMatchedMCHMID = propmuonAtPV_Matched.getEta();
431447
float phiMatchedMCHMID = propmuonAtPV_Matched.getPhi();
432448
phiMatchedMCHMID = RecoDecay::constrainAngle(phiMatchedMCHMID, 0, 1U);
433449

434-
o2::dataformats::GlobalFwdTrack propmuonAtPV = o2::aod::fwdtrackutils::propagateMuon(fwdtrack, fwdtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, glMuonCutGroup.matchingZ, mBz, mXShift, mYShift, mZShift);
450+
o2::dataformats::GlobalFwdTrack propmuonAtPV = mfttrack.y() > 0.f ? o2::aod::fwdtrackutils::propagateMuon(fwdtrack, fwdtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, glMuonCutGroup.matchingZ, mBz, mXShiftMFTtop, mYShiftMFTtop, mZShiftMFTtop) : o2::aod::fwdtrackutils::propagateMuon(fwdtrack, fwdtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, glMuonCutGroup.matchingZ, mBz, mXShiftMFTbottom, mYShiftMFTbottom, mZShiftMFTbottom);
435451
pt = propmuonAtPV.getPt();
436452
eta = propmuonAtPV.getEta();
437453
phi = propmuonAtPV.getPhi();
@@ -448,7 +464,7 @@ struct globalDimuonFilter {
448464
return false;
449465
}
450466

451-
o2::dataformats::GlobalFwdTrack propmuonAtDCA = o2::aod::fwdtrackutils::propagateMuon(fwdtrack, fwdtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, glMuonCutGroup.matchingZ, mBz, mXShift, mYShift, mZShift);
467+
o2::dataformats::GlobalFwdTrack propmuonAtDCA = mfttrack.y() > 0.f ? o2::aod::fwdtrackutils::propagateMuon(fwdtrack, fwdtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, glMuonCutGroup.matchingZ, mBz, mXShiftMFTtop, mYShiftMFTtop, mZShiftMFTtop) : o2::aod::fwdtrackutils::propagateMuon(fwdtrack, fwdtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, glMuonCutGroup.matchingZ, mBz, mXShiftMFTbottom, mYShiftMFTbottom, mZShiftMFTbottom);
452468
float dcaX = propmuonAtDCA.getX() - collision.posX();
453469
float dcaY = propmuonAtDCA.getY() - collision.posY();
454470
float dcaXY = std::sqrt(dcaX * dcaX + dcaY * dcaY);
@@ -482,7 +498,7 @@ struct globalDimuonFilter {
482498
}
483499
float sigma_dcaXY = dcaXY / dcaXYinSigma / std::sqrt(2.f);
484500

485-
o2::dataformats::GlobalFwdTrack propmuonAtDCA_Matched = o2::aod::fwdtrackutils::propagateMuon(mchtrack, mchtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, glMuonCutGroup.matchingZ, mBz, mXShift, mYShift, mZShift);
501+
o2::dataformats::GlobalFwdTrack propmuonAtDCA_Matched = o2::aod::fwdtrackutils::propagateMuon(mchtrack, mchtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, glMuonCutGroup.matchingZ, mBz, 0.f, 0.f, 0.f);
486502
float dcaX_Matched = propmuonAtDCA_Matched.getX() - collision.posX();
487503
float dcaY_Matched = propmuonAtDCA_Matched.getY() - collision.posY();
488504
float dcaXY_Matched = std::sqrt(dcaX_Matched * dcaX_Matched + dcaY_Matched * dcaY_Matched);
@@ -496,7 +512,7 @@ struct globalDimuonFilter {
496512
return false;
497513
}
498514

499-
float chi2IP = o2::aod::fwdtrackutils::getFwdChi2IP(fwdtrack, collision, mBz, mXShift, mYShift, mZShift);
515+
float chi2IP = mfttrack.y() > 0.f ? o2::aod::fwdtrackutils::getFwdChi2IP(fwdtrack, collision, mBz, mXShiftMFTtop, mYShiftMFTtop, mZShiftMFTtop) : o2::aod::fwdtrackutils::getFwdChi2IP(fwdtrack, collision, mBz, mXShiftMFTbottom, mYShiftMFTbottom, mZShiftMFTbottom);
500516

501517
if constexpr (fillHistograms) {
502518
if (fwdtrack.sign() > 0) {
@@ -613,12 +629,12 @@ struct globalDimuonFilter {
613629
return false;
614630
}
615631

616-
o2::dataformats::GlobalFwdTrack propmuonAtPV_Matched = o2::aod::fwdtrackutils::propagateMuon(mchtrack, mchtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, tagMuonCutGroup.matchingZ, mBz, mXShift, mYShift, mZShift);
632+
o2::dataformats::GlobalFwdTrack propmuonAtPV_Matched = o2::aod::fwdtrackutils::propagateMuon(mchtrack, mchtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, tagMuonCutGroup.matchingZ, mBz, 0.f, 0.f, 0.f);
617633
float etaMatchedMCHMID = propmuonAtPV_Matched.getEta();
618634
float phiMatchedMCHMID = propmuonAtPV_Matched.getPhi();
619635
phiMatchedMCHMID = RecoDecay::constrainAngle(phiMatchedMCHMID, 0, 1U);
620636

621-
o2::dataformats::GlobalFwdTrack propmuonAtPV = o2::aod::fwdtrackutils::propagateMuon(fwdtrack, fwdtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, tagMuonCutGroup.matchingZ, mBz, mXShift, mYShift, mZShift);
637+
o2::dataformats::GlobalFwdTrack propmuonAtPV = mfttrack.y() > 0.f ? o2::aod::fwdtrackutils::propagateMuon(fwdtrack, fwdtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, tagMuonCutGroup.matchingZ, mBz, mXShiftMFTtop, mYShiftMFTtop, mZShiftMFTtop) : o2::aod::fwdtrackutils::propagateMuon(fwdtrack, fwdtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, tagMuonCutGroup.matchingZ, mBz, mXShiftMFTbottom, mYShiftMFTbottom, mZShiftMFTbottom);
622638
pt = propmuonAtPV.getPt();
623639
eta = propmuonAtPV.getEta();
624640
phi = propmuonAtPV.getPhi();
@@ -701,12 +717,12 @@ struct globalDimuonFilter {
701717
return false;
702718
}
703719

704-
o2::dataformats::GlobalFwdTrack propmuonAtPV_Matched = o2::aod::fwdtrackutils::propagateMuon(mchtrack, mchtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, probeMuonCutGroup.matchingZ, mBz, mXShift, mYShift, mZShift);
720+
o2::dataformats::GlobalFwdTrack propmuonAtPV_Matched = o2::aod::fwdtrackutils::propagateMuon(mchtrack, mchtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, probeMuonCutGroup.matchingZ, mBz, 0.f, 0.f, 0.f);
705721
float etaMatchedMCHMID = propmuonAtPV_Matched.getEta();
706722
float phiMatchedMCHMID = propmuonAtPV_Matched.getPhi();
707723
phiMatchedMCHMID = RecoDecay::constrainAngle(phiMatchedMCHMID, 0, 1U);
708724

709-
o2::dataformats::GlobalFwdTrack propmuonAtPV = o2::aod::fwdtrackutils::propagateMuon(fwdtrack, fwdtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, probeMuonCutGroup.matchingZ, mBz, mXShift, mYShift, mZShift);
725+
o2::dataformats::GlobalFwdTrack propmuonAtPV = mfttrack.y() > 0.f ? o2::aod::fwdtrackutils::propagateMuon(fwdtrack, fwdtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, probeMuonCutGroup.matchingZ, mBz, mXShiftMFTtop, mYShiftMFTtop, mZShiftMFTtop) : o2::aod::fwdtrackutils::propagateMuon(fwdtrack, fwdtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToVertex, probeMuonCutGroup.matchingZ, mBz, mXShiftMFTbottom, mYShiftMFTbottom, mZShiftMFTbottom);
710726
pt = propmuonAtPV.getPt();
711727
eta = propmuonAtPV.getEta();
712728
phi = propmuonAtPV.getPhi();
@@ -730,7 +746,7 @@ struct globalDimuonFilter {
730746
return false;
731747
}
732748

733-
o2::dataformats::GlobalFwdTrack propmuonAtDCA_Matched = o2::aod::fwdtrackutils::propagateMuon(mchtrack, mchtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, probeMuonCutGroup.matchingZ, mBz, mXShift, mYShift, mZShift);
749+
o2::dataformats::GlobalFwdTrack propmuonAtDCA_Matched = o2::aod::fwdtrackutils::propagateMuon(mchtrack, mchtrack, collision, o2::aod::fwdtrackutils::propagationPoint::kToDCA, probeMuonCutGroup.matchingZ, mBz, 0.f, 0.f, 0.f);
734750
float dcaX_Matched = propmuonAtDCA_Matched.getX() - collision.posX();
735751
float dcaY_Matched = propmuonAtDCA_Matched.getY() - collision.posY();
736752
float dcaXY_Matched = std::sqrt(dcaX_Matched * dcaX_Matched + dcaY_Matched * dcaY_Matched);
@@ -888,7 +904,7 @@ struct globalDimuonFilter {
888904
} // end end of negative muon loop
889905
} // end end of positive muon loop
890906

891-
for (const auto pos1 : posMuons) {
907+
for (const auto& pos1 : posMuons) {
892908
auto fwdtrack1 = fwdtracks.rawIteratorAt(pos1);
893909
if (!isBestMatch(collision, fwdtrack1, fwdtracks, mfttracks)) {
894910
continue;
@@ -899,7 +915,7 @@ struct globalDimuonFilter {
899915
}
900916
ROOT::Math::PtEtaPhiMVector v1(pt1, eta1, phi1, o2::constants::physics::MassMuon);
901917

902-
for (const auto pos2 : posMuons) {
918+
for (const auto& pos2 : posMuons) {
903919
auto fwdtrack2 = fwdtracks.rawIteratorAt(pos2);
904920
if (pos1 == pos2) {
905921
continue;
@@ -921,7 +937,7 @@ struct globalDimuonFilter {
921937
} // end end of positive muon loop
922938
} // end end of positive muon loop
923939

924-
for (const auto neg1 : negMuons) {
940+
for (const auto& neg1 : negMuons) {
925941
auto fwdtrack1 = fwdtracks.rawIteratorAt(neg1);
926942
if (!isBestMatch(collision, fwdtrack1, fwdtracks, mfttracks)) {
927943
continue;
@@ -932,7 +948,7 @@ struct globalDimuonFilter {
932948
}
933949
ROOT::Math::PtEtaPhiMVector v1(pt1, eta1, phi1, o2::constants::physics::MassMuon);
934950

935-
for (const auto neg2 : negMuons) {
951+
for (const auto& neg2 : negMuons) {
936952
auto fwdtrack2 = fwdtracks.rawIteratorAt(neg2);
937953
if (neg1 == neg2) {
938954
continue;

0 commit comments

Comments
 (0)