diff --git a/Validation/RecoTrack/plugins/BuildFile.xml b/Validation/RecoTrack/plugins/BuildFile.xml
index b0284ed3f3618..322b636ba73a0 100644
--- a/Validation/RecoTrack/plugins/BuildFile.xml
+++ b/Validation/RecoTrack/plugins/BuildFile.xml
@@ -22,6 +22,7 @@
+
diff --git a/Validation/RecoTrack/plugins/TrackingNtuple.cc b/Validation/RecoTrack/plugins/TrackingNtuple.cc
index 9a60ce7c7e442..b98d01a7dcbf7 100644
--- a/Validation/RecoTrack/plugins/TrackingNtuple.cc
+++ b/Validation/RecoTrack/plugins/TrackingNtuple.cc
@@ -55,6 +55,8 @@
#include "MagneticField/Engine/interface/MagneticField.h"
#include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
+#include "DataFormats/Phase2TrackerCluster/interface/Phase2TrackerCluster1D.h"
+
#include "DataFormats/SiPixelDetId/interface/PixelChannelIdentifier.h"
#include "DataFormats/SiStripCluster/interface/SiStripClusterTools.h"
#include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h"
@@ -492,6 +494,7 @@ class TrackingNtuple : public edm::one::EDAnalyzer {
using PixelMaskContainer = edm::ContainerMask>;
using StripMaskContainer = edm::ContainerMask>;
+ using Phase2OTMaskContainer = edm::ContainerMask>;
struct TPHitIndex {
TPHitIndex(unsigned int tp = 0, unsigned int simHit = 0, float to = 0, unsigned int id = 0)
@@ -681,6 +684,7 @@ class TrackingNtuple : public edm::one::EDAnalyzer {
std::vector>> pixelUseMaskTokens_;
std::vector>> stripUseMaskTokens_;
+ std::vector>> ph2OTUseMaskTokens_;
std::string builderName_;
const bool includeSeeds_;
@@ -1287,6 +1291,7 @@ class TrackingNtuple : public edm::one::EDAnalyzer {
std::vector
ph2_radL; //http://cmslxr.fnal.gov/lxr/source/DataFormats/GeometrySurface/interface/MediumProperties.h
std::vector ph2_bbxi;
+ std::vector ph2_usedMask;
////////////////////
// invalid (missing/inactive/etc) hits
@@ -1490,6 +1495,7 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig)
auto const& maskVPset = iConfig.getUntrackedParameterSetVector("clusterMasks");
pixelUseMaskTokens_.reserve(maskVPset.size());
stripUseMaskTokens_.reserve(maskVPset.size());
+ ph2OTUseMaskTokens_.reserve(maskVPset.size());
for (auto const& mask : maskVPset) {
auto index = mask.getUntrackedParameter("index");
assert(index < 64);
@@ -1498,6 +1504,9 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig)
if (includeStripHits_)
stripUseMaskTokens_.emplace_back(
index, consumes(mask.getUntrackedParameter("src")));
+ if (includePhase2OTHits_)
+ ph2OTUseMaskTokens_.emplace_back(
+ index, consumes(mask.getUntrackedParameter("src")));
}
}
@@ -1872,7 +1881,7 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig)
t->Branch("ph2_zx", &ph2_zx);
t->Branch("ph2_radL", &ph2_radL);
t->Branch("ph2_bbxi", &ph2_bbxi);
- t->Branch("ph2_bbxi", &ph2_bbxi);
+ t->Branch("ph2_usedMask", &ph2_usedMask);
}
//invalid hits
t->Branch("inv_isBarrel", &inv_isBarrel);
@@ -2299,6 +2308,7 @@ void TrackingNtuple::clearVariables() {
ph2_zx.clear();
ph2_radL.clear();
ph2_bbxi.clear();
+ ph2_usedMask.clear();
//invalid hits
inv_isBarrel.clear();
inv_detId.clear();
@@ -3315,6 +3325,22 @@ void TrackingNtuple::fillPhase2OTHits(const edm::Event& iEvent,
const TrackerTopology& tTopo,
const SimHitRefKeyToIndex& simHitRefKeyToIndex,
std::set& hitProductIds) {
+ std::vector> phase2OTMasks;
+ phase2OTMasks.reserve(ph2OTUseMaskTokens_.size());
+ for (const auto& itoken : ph2OTUseMaskTokens_) {
+ edm::Handle aH;
+ iEvent.getByToken(itoken.second, aH);
+ phase2OTMasks.emplace_back(1 << itoken.first, aH.product());
+ }
+ auto ph2OTUsedMask = [&phase2OTMasks](size_t key) {
+ uint64_t mask = 0;
+ for (auto const& m : phase2OTMasks) {
+ if (m.second->mask(key))
+ mask |= m.first;
+ }
+ return mask;
+ };
+
edm::Handle phase2OTHits;
iEvent.getByToken(phase2OTRecHitToken_, phase2OTHits);
for (auto it = phase2OTHits->begin(); it != phase2OTHits->end(); it++) {
@@ -3350,6 +3376,7 @@ void TrackingNtuple::fillPhase2OTHits(const edm::Event& iEvent,
ph2_zx.push_back(hit->globalPositionError().czx());
ph2_radL.push_back(hit->surface()->mediumProperties().radLen());
ph2_bbxi.push_back(hit->surface()->mediumProperties().xi());
+ ph2_usedMask.push_back(ph2OTUsedMask(hit->firstClusterRef().key()));
LogTrace("TrackingNtuple") << "phase2 OT cluster=" << key << " subdId=" << hitId.subdetId() << " lay=" << lay
<< " rawId=" << hitId.rawId() << " pos =" << hit->globalPosition();