87 #include "HepPDT/ParticleID.hh" 95 #include <unordered_set> 96 #include <unordered_map> 111 using TrackingParticleRefKeyToIndex = std::unordered_map<reco::RecoToSimCollection::index_type, size_t>;
112 using TrackingVertexRefKeyToIndex = TrackingParticleRefKeyToIndex;
113 using SimHitFullKey = std::pair<TrackPSimHitRef::key_type, edm::ProductID>;
114 using SimHitRefKeyToIndex = std::map<SimHitFullKey, size_t>;
115 using TrackingParticleRefKeyToCount = TrackingParticleRefKeyToIndex;
132 return "UNKNOWN TRACKER HIT TYPE";
136 struct ProductIDSetPrinter {
137 ProductIDSetPrinter(
const std::set<edm::ProductID>&
set) : set_(set) {}
139 void print(std::ostream& os)
const {
140 for (
const auto&
item : set_) {
145 const std::set<edm::ProductID>& set_;
147 std::ostream&
operator<<(std::ostream& os,
const ProductIDSetPrinter&
o) {
151 template <
typename T>
152 struct ProductIDMapPrinter {
153 ProductIDMapPrinter(
const std::map<edm::ProductID, T>&
map) : map_(map) {}
155 void print(std::ostream& os)
const {
156 for (
const auto&
item : map_) {
157 os <<
item.first <<
" ";
161 const std::map<edm::ProductID, T>& map_;
163 template <
typename T>
164 auto make_ProductIDMapPrinter(
const std::map<edm::ProductID, T>&
map) {
165 return ProductIDMapPrinter<T>(
map);
167 template <
typename T>
168 std::ostream& operator<<(std::ostream& os, const ProductIDMapPrinter<T>&
o) {
173 template <
typename T>
174 struct VectorPrinter {
175 VectorPrinter(
const std::vector<T>& vec) : vec_(vec) {}
177 void print(std::ostream& os)
const {
178 for (
const auto&
item : vec_) {
183 const std::vector<T>& vec_;
185 template <
typename T>
186 auto make_VectorPrinter(
const std::vector<T>& vec) {
187 return VectorPrinter<T>(vec);
189 template <
typename T>
190 std::ostream& operator<<(std::ostream& os, const VectorPrinter<T>&
o) {
195 void checkProductID(
const std::set<edm::ProductID>&
set,
const edm::ProductID&
id,
const char*
name) {
198 <<
"Got " << name <<
" with a hit with ProductID " <<
id 199 <<
" which does not match to the set of ProductID's for the hits: " << ProductIDSetPrinter(
set)
200 <<
". Usually this is caused by a wrong hit collection in the configuration.";
203 template <
typename SimLink,
typename Func>
205 for (
const auto&
link : digiSimLinks) {
206 if (
link.channel() == channel) {
213 template <
typename... Args>
214 void call_nop(Args&&...
args) {}
216 template <
typename...
Types>
223 unsigned int operator[](
size_t i)
const {
return std::get<0>(content_)[i]; }
225 template <
typename... Args>
226 void book(Args&&...
args) {
227 impl([&](
auto& vec) { vec.book(std::forward<Args>(
args)...); });
230 template <
typename... Args>
231 void push_back(Args&&...
args) {
232 impl([&](
auto& vec) { vec.push_back(std::forward<Args>(
args)...); });
235 template <
typename... Args>
236 void resize(Args&&...
args) {
237 impl([&](
auto& vec) { vec.resize(std::forward<Args>(
args)...); });
240 template <
typename... Args>
241 void set(Args&&...
args) {
242 impl([&](
auto& vec) { vec.set(std::forward<Args>(
args)...); });
246 impl([&](
auto& vec) { vec.clear(); });
251 template <
typename F>
252 void impl(
F&& func) {
253 impl2(std::index_sequence_for<Types...>{}, std::forward<F>(
func));
261 template <std::size_t... Is,
typename F>
262 void impl2(std::index_sequence<Is...>,
F&& func) {
263 call_nop((
func(std::get<Is>(content_)), 0)...);
266 std::tuple<
Types...> content_;
269 std::map<unsigned int, double> chargeFraction(
const SiPixelCluster& cluster,
272 std::map<unsigned int, double> simTrackIdToAdc;
274 auto idetset = digiSimLink.
find(detId);
275 if (idetset == digiSimLink.
end())
276 return simTrackIdToAdc;
280 for (
int iPix = 0; iPix != cluster.
size(); ++iPix) {
284 forEachMatchedSimLink(*idetset, channel, [&](
const PixelDigiSimLink& simLink) {
290 for (
auto& pair : simTrackIdToAdc) {
294 pair.second /= adcSum;
297 return simTrackIdToAdc;
300 std::map<unsigned int, double> chargeFraction(
const SiStripCluster& cluster,
303 std::map<unsigned int, double> simTrackIdToAdc;
305 auto idetset = digiSimLink.
find(detId);
306 if (idetset == digiSimLink.
end())
307 return simTrackIdToAdc;
314 forEachMatchedSimLink(*idetset, first +
i, [&](
const StripDigiSimLink& simLink) {
315 double& adc = simTrackIdToAdc[simLink.
SimTrackId()];
319 for (
const auto& pair : simTrackIdToAdc) {
320 simTrackIdToAdc[pair.first] = (adcSum != 0. ? pair.second / adcSum : 0.);
323 return simTrackIdToAdc;
329 std::map<unsigned int, double> simTrackIdToAdc;
330 throw cms::Exception(
"LogicError") <<
"Not possible to use StripDigiSimLink with Phase2TrackerCluster1D! ";
331 return simTrackIdToAdc;
339 std::map<unsigned int, double> simTrackIdToAdc;
340 return simTrackIdToAdc;
343 struct TrackTPMatch {
345 int countClusters = 0;
350 const TrackingParticleRefKeyToIndex& tpKeyToIndex) {
356 std::vector<OmniClusterRef>
clusters =
359 std::unordered_map<int, Count>
count;
360 for (
size_t iCluster = 0,
end = clusters.size(); iCluster <
end; ++iCluster) {
361 const auto& clusterRef = clusters[iCluster];
364 for (
auto ip =
range.first; ip !=
range.second; ++ip) {
365 const auto tpKey = ip->second.key();
366 if (tpKeyToIndex.find(tpKey) == tpKeyToIndex.end())
369 auto&
elem = count[tpKey];
380 for (
auto& keyCount : count) {
381 if (keyCount.second.clusters > bestCount ||
382 (keyCount.second.clusters == bestCount && keyCount.second.innermostHit < bestInnermostHit)) {
383 best.key = keyCount.first;
384 best.countClusters = bestCount = keyCount.second.clusters;
385 bestInnermostHit = keyCount.second.innermostHit;
389 LogTrace(
"TrackingNtuple") <<
"findBestMatchingTrackingParticle key " << best.key;
394 TrackTPMatch findMatchingTrackingParticleFromFirstHit(
const reco::Track& track,
396 const TrackingParticleRefKeyToIndex& tpKeyToIndex) {
399 std::vector<OmniClusterRef> clusters =
401 if (clusters.empty()) {
405 auto operateCluster = [&](
const auto& clusterRef,
const auto&
func) {
407 for (
auto ip =
range.first; ip !=
range.second; ++ip) {
408 const auto tpKey = ip->second.key();
409 if (tpKeyToIndex.find(tpKey) == tpKeyToIndex.end())
415 std::vector<unsigned int>
417 auto iCluster = clusters.begin();
418 operateCluster(*iCluster, [&](
unsigned int tpKey) { validTPs.push_back(tpKey); });
419 if (validTPs.empty()) {
423 ++best.countClusters;
425 std::vector<bool> foundTPs(validTPs.size(),
false);
426 for (
auto iEnd = clusters.end(); iCluster != iEnd; ++iCluster) {
427 const auto& clusterRef = *iCluster;
430 operateCluster(clusterRef, [&](
unsigned int tpKey) {
431 auto found =
std::find(cbegin(validTPs), cend(validTPs), tpKey);
432 if (found != cend(validTPs)) {
438 auto iTP = validTPs.size();
442 if (!foundTPs[iTP]) {
443 validTPs.erase(validTPs.begin() + iTP);
444 foundTPs.erase(foundTPs.begin() + iTP);
447 if (!validTPs.empty()) {
451 best.key = validTPs[0];
457 ++best.countClusters;
461 return best.countClusters >= 3 ? best : TrackTPMatch();
479 void clearVariables();
494 : tpKey(tp), simHitIdx(
simHit), tof(
to), detId(id) {}
514 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
519 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
520 std::set<edm::ProductID>& hitProductIds);
522 void fillStripRphiStereoHits(
const edm::Event& iEvent,
524 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
529 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
530 std::set<edm::ProductID>& hitProductIds);
532 void fillStripMatchedHits(
const edm::Event& iEvent,
535 std::vector<std::pair<int, int>>& monoStereoClusterList);
540 std::vector<std::pair<int, int>>& monoStereoClusterList);
542 void fillPhase2OTHits(
const edm::Event& iEvent,
544 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
549 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
550 std::set<edm::ProductID>& hitProductIds);
554 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
561 std::vector<std::pair<int, int>>& monoStereoClusterList,
562 const std::set<edm::ProductID>& hitProductIds,
563 std::map<edm::ProductID, size_t>& seedToCollIndex);
567 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
568 const TrackingParticleRefKeyToCount& tpKeyToClusterCount,
576 const std::set<edm::ProductID>& hitProductIds,
577 const std::map<edm::ProductID, size_t>& seedToCollIndex,
578 const std::vector<const MVACollection*>& mvaColls,
579 const std::vector<const QualityMaskCollection*>& qualColls);
582 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
585 SimHitRefKeyToIndex& simHitRefKeyToIndex,
586 std::vector<TPHitIndex>& tpHitList);
588 void fillTrackingParticles(
const edm::Event& iEvent,
593 const TrackingVertexRefKeyToIndex& tvKeyToIndex,
595 const std::vector<TPHitIndex>& tpHitList,
596 const TrackingParticleRefKeyToCount& tpKeyToClusterCount);
600 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
601 const unsigned int seedOffset);
606 const TrackingParticleRefKeyToIndex& tpKeyToIndex);
616 template <
typename SimLink>
622 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
625 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
629 std::vector<edm::EDGetTokenT<edm::View<reco::Track>>>
seedTokens_;
666 #define BOOK(name) tree->Branch((prefix + "_" + #name).c_str(), &name); 682 detId.push_back(
id.rawId());
683 subdet.push_back(
id.subdetId());
684 layer.push_back(tTopo.
layer(
id));
687 unsigned short s = 0;
688 switch (
id.subdetId()) {
711 subdet[
index] =
id.subdetId();
712 layer[
index] = tTopo.layer(
id);
713 side[
index] = tTopo.side(
id);
729 std::vector<unsigned short>
side;
746 blade.push_back(isBarrel ? 0 : tTopo.
pxfBlade(
id));
747 panel.push_back(isBarrel ? 0 : tTopo.
pxfPanel(
id));
773 const auto parsed =
parse(tTopo,
id);
774 order.push_back(parsed.order);
775 ring.push_back(parsed.ring);
776 rod.push_back(parsed.rod);
786 const auto parsed =
parse(tTopo,
id);
789 rod[
index] = parsed.rod;
804 unsigned int rod = 0;
807 switch (
id.subdetId()) {
822 std::vector<unsigned short>
ring;
823 std::vector<unsigned short>
rod;
839 const auto parsed =
parse(tTopo,
id);
840 string.push_back(parsed.string);
841 petalNumber.push_back(parsed.petalNumber);
842 isStereo.push_back(tTopo.
isStereo(
id));
843 isRPhi.push_back(tTopo.
isRPhi(
id));
844 isGlued.push_back(parsed.glued);
849 petalNumber.resize(size);
850 isStereo.resize(size);
852 isGlued.resize(size);
856 const auto parsed =
parse(tTopo,
id);
857 string[
index] = parsed.string;
858 petalNumber[
index] = parsed.petalNumber;
859 isStereo[
index] = tTopo.isStereo(
id);
860 isRPhi[
index] = tTopo.isRPhi(
id);
861 isGlued[
index] = parsed.glued;
876 unsigned int string = 0;
877 unsigned int petalNumber = 0;
881 switch (
id.subdetId()) {
913 isLower.push_back(tTopo.
isLower(
id));
914 isUpper.push_back(tTopo.
isUpper(
id));
915 isStack.push_back(tTopo.
stack(
id) ==
932 using DetIdPixel = CombineDetId<DetIdCommon, DetIdPixelOnly>;
933 using DetIdStrip = CombineDetId<DetIdCommon, DetIdOTCommon, DetIdStripOnly>;
934 using DetIdPhase2OT = CombineDetId<DetIdCommon, DetIdOTCommon, DetIdPhase2OTOnly>;
935 using DetIdAll = CombineDetId<DetIdCommon, DetIdPixelOnly, DetIdOTCommon, DetIdStripOnly>;
936 using DetIdAllPhase2 = CombineDetId<DetIdCommon, DetIdPixelOnly, DetIdOTCommon, DetIdPhase2OTOnly>;
1261 iConfig.getUntrackedParameter<
edm::
InputTag>(
"simHitTPMap"))),
1263 iConfig.getUntrackedParameter<
edm::
InputTag>(
"trackAssociator"))),
1265 iConfig.getUntrackedParameter<
edm::
InputTag>(
"pixelDigiSimLink"))),
1267 iConfig.getUntrackedParameter<
edm::
InputTag>(
"stripDigiSimLink"))),
1269 iConfig.getUntrackedParameter<
edm::
InputTag>(
"phase2OTSimLink"))),
1270 includeStripHits_(!iConfig.getUntrackedParameter<
edm::
InputTag>(
"stripDigiSimLink").
label().
empty()),
1271 includePhase2OTHits_(!iConfig.getUntrackedParameter<
edm::
InputTag>(
"phase2OTSimLink").
label().
empty()),
1275 stripRphiRecHitToken_(
1277 stripStereoRecHitToken_(
1280 iConfig.getUntrackedParameter<
edm::
InputTag>(
"stripMatchedRecHits"))),
1282 iConfig.getUntrackedParameter<
edm::
InputTag>(
"phase2OTRecHits"))),
1284 trackingVertexToken_(
1286 tpNLayersToken_(consumes<
edm::ValueMap<unsigned
int>>(
1287 iConfig.getUntrackedParameter<
edm::
InputTag>(
"trackingParticleNlayers"))),
1288 tpNPixelLayersToken_(consumes<
edm::ValueMap<unsigned
int>>(
1289 iConfig.getUntrackedParameter<
edm::
InputTag>(
"trackingParticleNpixellayers"))),
1290 tpNStripStereoLayersToken_(consumes<
edm::ValueMap<unsigned
int>>(
1291 iConfig.getUntrackedParameter<
edm::
InputTag>(
"trackingParticleNstripstereolayers"))),
1292 builderName_(iConfig.getUntrackedParameter<
std::
string>(
"TTRHBuilder")),
1293 parametersDefinerName_(iConfig.getUntrackedParameter<
std::
string>(
"parametersDefiner")),
1294 includeSeeds_(iConfig.getUntrackedParameter<
bool>(
"includeSeeds")),
1295 includeAllHits_(iConfig.getUntrackedParameter<
bool>(
"includeAllHits")),
1296 includeMVA_(iConfig.getUntrackedParameter<
bool>(
"includeMVA")),
1297 includeTrackingParticles_(iConfig.getUntrackedParameter<
bool>(
"includeTrackingParticles")) {
1298 if (includeSeeds_) {
1301 [&](
const edm::InputTag&
tag) { return consumes<edm::View<reco::Track>>(tag); });
1302 seedStopInfoTokens_ =
1304 [&](
const edm::InputTag& tag) { return consumes<std::vector<SeedStopInfo>>(tag); });
1305 if (seedTokens_.size() != seedStopInfoTokens_.size()) {
1306 throw cms::Exception(
"Configuration") <<
"Got " << seedTokens_.size() <<
" seed collections, but " 1307 << seedStopInfoTokens_.size() <<
" track candidate collections";
1311 if (includeAllHits_) {
1312 if (includeStripHits_ && includePhase2OTHits_) {
1314 <<
"Both stripDigiSimLink and phase2OTSimLink are set, please set only either one (this information is used " 1315 "to infer if you're running phase0/1 or phase2 detector)";
1317 if (!includeStripHits_ && !includePhase2OTHits_) {
1319 <<
"Neither stripDigiSimLink or phase2OTSimLink are set, please set either one.";
1326 trackingParticleRefToken_ = consumes<TrackingParticleRefVector>(
tpTag);
1328 trackingParticleToken_ = consumes<TrackingParticleCollection>(
tpTag);
1336 return std::make_tuple(consumes<MVACollection>(edm::InputTag(tag,
"MVAValues")),
1337 consumes<QualityMaskCollection>(edm::InputTag(tag,
"QualityMasks")));
1343 t = fs->
make<TTree>(
"tree",
"tree");
1345 t->Branch(
"event", &ev_event);
1346 t->Branch(
"lumi", &ev_lumi);
1347 t->Branch(
"run", &ev_run);
1350 t->Branch(
"trk_px", &trk_px);
1351 t->Branch(
"trk_py", &trk_py);
1352 t->Branch(
"trk_pz", &trk_pz);
1353 t->Branch(
"trk_pt", &trk_pt);
1354 t->Branch(
"trk_inner_px", &trk_inner_px);
1355 t->Branch(
"trk_inner_py", &trk_inner_py);
1356 t->Branch(
"trk_inner_pz", &trk_inner_pz);
1357 t->Branch(
"trk_inner_pt", &trk_inner_pt);
1358 t->Branch(
"trk_outer_px", &trk_outer_px);
1359 t->Branch(
"trk_outer_py", &trk_outer_py);
1360 t->Branch(
"trk_outer_pz", &trk_outer_pz);
1361 t->Branch(
"trk_outer_pt", &trk_outer_pt);
1362 t->Branch(
"trk_eta", &trk_eta);
1363 t->Branch(
"trk_lambda", &trk_lambda);
1364 t->Branch(
"trk_cotTheta", &trk_cotTheta);
1365 t->Branch(
"trk_phi", &trk_phi);
1366 t->Branch(
"trk_dxy", &trk_dxy);
1367 t->Branch(
"trk_dz", &trk_dz);
1368 t->Branch(
"trk_dxyPV", &trk_dxyPV);
1369 t->Branch(
"trk_dzPV", &trk_dzPV);
1370 t->Branch(
"trk_dxyClosestPV", &trk_dxyClosestPV);
1371 t->Branch(
"trk_dzClosestPV", &trk_dzClosestPV);
1372 t->Branch(
"trk_ptErr", &trk_ptErr);
1373 t->Branch(
"trk_etaErr", &trk_etaErr);
1374 t->Branch(
"trk_lambdaErr", &trk_lambdaErr);
1375 t->Branch(
"trk_phiErr", &trk_phiErr);
1376 t->Branch(
"trk_dxyErr", &trk_dxyErr);
1377 t->Branch(
"trk_dzErr", &trk_dzErr);
1378 t->Branch(
"trk_refpoint_x", &trk_refpoint_x);
1379 t->Branch(
"trk_refpoint_y", &trk_refpoint_y);
1380 t->Branch(
"trk_refpoint_z", &trk_refpoint_z);
1381 t->Branch(
"trk_nChi2", &trk_nChi2);
1382 t->Branch(
"trk_nChi2_1Dmod", &trk_nChi2_1Dmod);
1383 t->Branch(
"trk_ndof", &trk_ndof);
1387 if (!trk_mvas.empty()) {
1388 t->Branch(
"trk_mva", &(trk_mvas[0]));
1389 t->Branch(
"trk_qualityMask", &(trk_qualityMasks[0]));
1390 for (
size_t i = 1;
i < trk_mvas.size(); ++
i) {
1391 t->Branch((
"trk_mva" + std::to_string(
i + 1)).c_str(), &(trk_mvas[
i]));
1392 t->Branch((
"trk_qualityMask" + std::to_string(i + 1)).c_str(), &(trk_qualityMasks[i]));
1396 t->Branch(
"trk_q", &trk_q);
1397 t->Branch(
"trk_nValid", &trk_nValid);
1398 t->Branch(
"trk_nLost", &trk_nLost);
1399 t->Branch(
"trk_nInactive", &trk_nInactive);
1400 t->Branch(
"trk_nPixel", &trk_nPixel);
1401 t->Branch(
"trk_nStrip", &trk_nStrip);
1402 t->Branch(
"trk_nOuterLost", &trk_nOuterLost);
1403 t->Branch(
"trk_nInnerLost", &trk_nInnerLost);
1404 t->Branch(
"trk_nOuterInactive", &trk_nOuterInactive);
1405 t->Branch(
"trk_nInnerInactive", &trk_nInnerInactive);
1406 t->Branch(
"trk_nPixelLay", &trk_nPixelLay);
1407 t->Branch(
"trk_nStripLay", &trk_nStripLay);
1408 t->Branch(
"trk_n3DLay", &trk_n3DLay);
1409 t->Branch(
"trk_nLostLay", &trk_nLostLay);
1410 t->Branch(
"trk_nCluster", &trk_nCluster);
1411 t->Branch(
"trk_algo", &trk_algo);
1412 t->Branch(
"trk_originalAlgo", &trk_originalAlgo);
1416 if (includeSeeds_) {
1420 if (includeTrackingParticles_) {
1437 if (includeAllHits_) {
1441 if (includeTrackingParticles_) {
1448 t->Branch(
"sim_px", &
sim_px);
1449 t->Branch(
"sim_py", &
sim_py);
1450 t->Branch(
"sim_pz", &
sim_pz);
1451 t->Branch(
"sim_pt", &
sim_pt);
1452 t->Branch(
"sim_eta", &
sim_eta);
1453 t->Branch(
"sim_phi", &
sim_phi);
1461 t->Branch(
"sim_q", &
sim_q);
1472 if (includeSeeds_) {
1477 if (includeAllHits_) {
1481 if (includeAllHits_) {
1486 if (includeSeeds_) {
1489 if (includeTrackingParticles_) {
1494 t->Branch(
"pix_x", &
pix_x);
1495 t->Branch(
"pix_y", &
pix_y);
1496 t->Branch(
"pix_z", &
pix_z);
1497 t->Branch(
"pix_xx", &
pix_xx);
1498 t->Branch(
"pix_xy", &
pix_xy);
1499 t->Branch(
"pix_yy", &
pix_yy);
1500 t->Branch(
"pix_yz", &
pix_yz);
1501 t->Branch(
"pix_zz", &
pix_zz);
1502 t->Branch(
"pix_zx", &
pix_zx);
1507 if (includeStripHits_) {
1511 if (includeSeeds_) {
1514 if (includeTrackingParticles_) {
1519 t->Branch(
"str_x", &
str_x);
1520 t->Branch(
"str_y", &
str_y);
1521 t->Branch(
"str_z", &
str_z);
1522 t->Branch(
"str_xx", &
str_xx);
1523 t->Branch(
"str_xy", &
str_xy);
1524 t->Branch(
"str_yy", &
str_yy);
1525 t->Branch(
"str_yz", &
str_yz);
1526 t->Branch(
"str_zz", &
str_zz);
1527 t->Branch(
"str_zx", &
str_zx);
1535 if (includeSeeds_) {
1538 t->Branch(
"glu_x", &
glu_x);
1539 t->Branch(
"glu_y", &
glu_y);
1540 t->Branch(
"glu_z", &
glu_z);
1541 t->Branch(
"glu_xx", &
glu_xx);
1542 t->Branch(
"glu_xy", &
glu_xy);
1543 t->Branch(
"glu_yy", &
glu_yy);
1544 t->Branch(
"glu_yz", &
glu_yz);
1545 t->Branch(
"glu_zz", &
glu_zz);
1546 t->Branch(
"glu_zx", &
glu_zx);
1551 if (includePhase2OTHits_) {
1555 if (includeSeeds_) {
1558 if (includeTrackingParticles_) {
1562 t->Branch(
"ph2_x", &
ph2_x);
1563 t->Branch(
"ph2_y", &
ph2_y);
1564 t->Branch(
"ph2_z", &
ph2_z);
1565 t->Branch(
"ph2_xx", &
ph2_xx);
1566 t->Branch(
"ph2_xy", &
ph2_xy);
1567 t->Branch(
"ph2_yy", &
ph2_yy);
1568 t->Branch(
"ph2_yz", &
ph2_yz);
1569 t->Branch(
"ph2_zz", &
ph2_zz);
1570 t->Branch(
"ph2_zx", &
ph2_zx);
1577 if (includeStripHits_)
1583 if (includeTrackingParticles_) {
1584 if (includeStripHits_)
1601 t->Branch(
"bsp_x", &
bsp_x,
"bsp_x/F");
1602 t->Branch(
"bsp_y", &
bsp_y,
"bsp_y/F");
1603 t->Branch(
"bsp_z", &
bsp_z,
"bsp_z/F");
1604 t->Branch(
"bsp_sigmax", &
bsp_sigmax,
"bsp_sigmax/F");
1605 t->Branch(
"bsp_sigmay", &
bsp_sigmay,
"bsp_sigmay/F");
1606 t->Branch(
"bsp_sigmaz", &
bsp_sigmaz,
"bsp_sigmaz/F");
1607 if (includeSeeds_) {
1610 t->Branch(
"see_px", &
see_px);
1611 t->Branch(
"see_py", &
see_py);
1612 t->Branch(
"see_pz", &
see_pz);
1613 t->Branch(
"see_pt", &
see_pt);
1614 t->Branch(
"see_eta", &
see_eta);
1615 t->Branch(
"see_phi", &
see_phi);
1616 t->Branch(
"see_dxy", &
see_dxy);
1617 t->Branch(
"see_dz", &
see_dz);
1630 t->Branch(
"see_q", &
see_q);
1641 if (includeTrackingParticles_) {
1651 if (includeAllHits_) {
1660 t->Branch(
"vtx_x", &
vtx_x);
1661 t->Branch(
"vtx_y", &
vtx_y);
1662 t->Branch(
"vtx_z", &
vtx_z);
1705 trk_inner_px.clear();
1706 trk_inner_py.clear();
1707 trk_inner_pz.clear();
1708 trk_inner_pt.clear();
1709 trk_outer_px.clear();
1710 trk_outer_py.clear();
1711 trk_outer_pz.clear();
1712 trk_outer_pt.clear();
1715 trk_cotTheta.clear();
1721 trk_dxyClosestPV.clear();
1722 trk_dzClosestPV.clear();
1725 trk_lambdaErr.clear();
1729 trk_refpoint_x.clear();
1730 trk_refpoint_y.clear();
1731 trk_refpoint_z.clear();
1733 trk_nChi2_1Dmod.clear();
1735 for (
auto&
mva : trk_mvas) {
1738 for (
auto& mask : trk_qualityMasks) {
1744 trk_nInactive.clear();
1747 trk_nOuterLost.clear();
1748 trk_nInnerLost.clear();
1749 trk_nOuterInactive.clear();
1750 trk_nInnerInactive.clear();
1751 trk_nPixelLay.clear();
1752 trk_nStripLay.clear();
1754 trk_nLostLay.clear();
1755 trk_nCluster.clear();
1757 trk_originalAlgo.clear();
1982 using namespace edm;
1983 using namespace reco;
1984 using namespace std;
1988 const auto& mf = *mfHandle;
2002 iEvent.
getByToken(trackAssociatorToken_, theAssociator);
2005 LogDebug(
"TrackingNtuple") <<
"Analyzing new event";
2019 iEvent.
getByToken(trackingParticleToken_, TPCollectionH);
2020 for (
size_t i = 0,
size = TPCollectionH->size();
i <
size; ++
i) {
2025 iEvent.
getByToken(trackingParticleRefToken_, TPCollectionHRefVector);
2026 tmpTPptr = TPCollectionHRefVector.
product();
2031 TrackingParticleRefKeyToIndex tpKeyToIndex;
2032 for (
size_t i = 0;
i < tpCollection.
size(); ++
i) {
2033 tpKeyToIndex[tpCollection[
i].key()] =
i;
2038 iEvent.
getByToken(trackingVertexToken_, htv);
2043 TrackingVertexRefKeyToIndex tvKeyToIndex;
2044 for (
size_t i = 0;
i < tvs.size(); ++
i) {
2048 tvKeyToIndex[
i] = tvRefs.
size();
2054 iEvent.
getByToken(clusterTPMapToken_, pCluster2TPListH);
2057 iEvent.
getByToken(simHitTPMapToken_, simHitsTPAssoc);
2060 TrackingParticleRefKeyToCount tpKeyToClusterCount;
2061 for (
const auto& clusterTP : clusterToTPMap) {
2062 tpKeyToClusterCount[clusterTP.second.key()] += 1;
2066 SimHitRefKeyToIndex simHitRefKeyToIndex;
2069 std::vector<TPHitIndex> tpHitList;
2073 std::set<edm::ProductID> hitProductIds;
2074 std::map<edm::ProductID, size_t> seedCollToOffset;
2076 ev_run = iEvent.
id().
run();
2078 ev_event = iEvent.
id().
event();
2082 iEvent.
getByToken(pixelSimLinkToken_, pixelDigiSimLinksHandle);
2083 const auto& pixelDigiSimLinks = *pixelDigiSimLinksHandle;
2086 iEvent.
getByToken(stripSimLinkToken_, stripDigiSimLinksHandle);
2090 iEvent.
getByToken(siphase2OTSimLinksToken_, siphase2OTSimLinksHandle);
2094 iEvent.
getByToken(beamSpotToken_, recoBeamSpotHandle);
2095 BeamSpot const& bs = *recoBeamSpotHandle;
2099 vector<pair<int, int>> monoStereoClusterList;
2100 if (includeAllHits_) {
2102 if (includeTrackingParticles_) {
2103 fillSimHits(tracker, tpKeyToIndex, *simHitsTPAssoc, tTopo, simHitRefKeyToIndex, tpHitList);
2114 simHitRefKeyToIndex,
2118 if (includeStripHits_) {
2119 LogDebug(
"TrackingNtuple") <<
"foundStripSimLink";
2120 const auto& stripDigiSimLinks = *stripDigiSimLinksHandle;
2128 simHitRefKeyToIndex,
2135 if (includePhase2OTHits_) {
2136 LogDebug(
"TrackingNtuple") <<
"foundPhase2OTSimLinks";
2137 const auto& phase2OTSimLinks = *siphase2OTSimLinksHandle;
2145 simHitRefKeyToIndex,
2151 if (includeSeeds_) {
2161 monoStereoClusterList,
2168 iEvent.
getByToken(trackToken_, tracksHandle);
2175 std::vector<const MVACollection*> mvaColls;
2176 std::vector<const QualityMaskCollection*> qualColls;
2182 iEvent.
getByToken(std::get<0>(tokenTpl), hmva);
2183 iEvent.
getByToken(std::get<1>(tokenTpl), hqual);
2185 mvaColls.push_back(hmva.
product());
2186 qualColls.push_back(hqual.
product());
2187 if (mvaColls.back()->size() != tracks.
size()) {
2189 <<
"Inconsistency in track collection and MVA sizes. Track collection has " << tracks.
size()
2190 <<
" tracks, whereas the MVA " << (mvaColls.size() - 1) <<
" has " << mvaColls.back()->size()
2191 <<
" entries. Double-check your configuration.";
2193 if (qualColls.back()->size() != tracks.
size()) {
2195 <<
"Inconsistency in track collection and quality mask sizes. Track collection has " << tracks.
size()
2196 <<
" tracks, whereas the quality mask " << (qualColls.size() - 1) <<
" has " << qualColls.back()->size()
2197 <<
" entries. Double-check your configuration.";
2208 tpKeyToClusterCount,
2225 iEvent, iSetup, trackRefs, bs, tpCollection, tvKeyToIndex, associatorByHits, tpHitList, tpKeyToClusterCount);
2246 template <
typename SimLink>
2249 struct GetCluster<PixelDigiSimLink> {
2253 struct GetCluster<StripDigiSimLink> {
2258 template <
typename SimLink>
2265 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2268 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2272 std::map<unsigned int, double> simTrackIdToChargeFraction;
2276 simTrackIdToChargeFraction = chargeFraction(GetCluster<SimLink>::call(cluster), hitId, digiSimLinks);
2281 for (
auto ip =
range.first; ip !=
range.second; ++ip) {
2285 const auto event = trackingParticle->eventId().event();
2286 const auto bx = trackingParticle->eventId().bunchCrossing();
2294 auto tpIndex = tpKeyToIndex.find(trackingParticle.
key());
2295 if (tpIndex == tpKeyToIndex.end())
2299 std::pair<TrackingParticleRef, TrackPSimHitRef> simHitTPpairWithDummyTP(trackingParticle,
TrackPSimHitRef());
2301 auto range = std::equal_range(simHitsTPAssoc.begin(),
2302 simHitsTPAssoc.end(),
2303 simHitTPpairWithDummyTP,
2305 bool foundSimHit =
false;
2306 bool foundElectron =
false;
2307 for (
auto ip =
range.first; ip !=
range.second; ++ip) {
2312 if (
std::abs(TPhit->particleType()) == 11 &&
std::abs(trackingParticle->pdgId()) != 11) {
2313 foundElectron =
true;
2318 auto simHitKey = TPhit.
key();
2319 auto simHitID = TPhit.
id();
2321 auto simHitIndex = simHitRefKeyToIndex.at(std::make_pair(simHitKey, simHitID));
2324 double chargeFraction = 0.;
2325 for (
const SimTrack& simtrk : trackingParticle->g4Tracks()) {
2326 auto found = simTrackIdToChargeFraction.find(simtrk.trackId());
2327 if (found != simTrackIdToChargeFraction.end()) {
2328 chargeFraction += found->second;
2338 simhit_hitType[simHitIndex].push_back(static_cast<int>(hitType));
2348 <<
"Did not find SimHit for reco hit DetId " << hitId.
rawId() <<
" for TP " << trackingParticle.
key()
2349 <<
" bx:event " <<
bx <<
":" <<
event <<
".\nFound SimHits from detectors ";
2350 for (
auto ip =
range.first; ip !=
range.second; ++ip) {
2353 ex << dId.
rawId() <<
" ";
2355 if (trackingParticle->eventId().event() != 0) {
2356 ex <<
"\nSince this is a TrackingParticle from pileup, check that you're running the pileup mixing in " 2368 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2371 SimHitRefKeyToIndex& simHitRefKeyToIndex,
2372 std::vector<TPHitIndex>& tpHitList) {
2373 for (
const auto&
assoc : simHitsTPAssoc) {
2374 auto tpKey =
assoc.first.key();
2378 auto found = tpKeyToIndex.find(tpKey);
2379 if (found == tpKeyToIndex.end())
2381 const auto tpIndex = found->second;
2384 const auto& simhit = *(
assoc.second);
2385 auto detId =
DetId(simhit.detUnitId());
2397 auto simHitKey = std::make_pair(
assoc.second.key(),
assoc.second.id());
2399 if (simHitRefKeyToIndex.find(simHitKey) != simHitRefKeyToIndex.end()) {
2400 for (
const auto& assoc2 : simHitsTPAssoc) {
2401 if (std::make_pair(assoc2.second.key(), assoc2.second.id()) == simHitKey) {
2403 auto range1 = std::equal_range(simHitsTPAssoc.begin(),
2404 simHitsTPAssoc.end(),
2407 auto range2 = std::equal_range(simHitsTPAssoc.begin(),
2408 simHitsTPAssoc.end(),
2412 LogTrace(
"TrackingNtuple") <<
"Earlier TP " << assoc2.first.key() <<
" SimTrack Ids";
2413 for (
const auto&
simTrack : assoc2.first->g4Tracks()) {
2415 <<
simTrack.eventId().bunchCrossing() <<
":" <<
simTrack.eventId().event();
2417 for (
auto iHit = range2.first; iHit != range2.second; ++iHit) {
2418 LogTrace(
"TrackingNtuple") <<
" SimHit " << iHit->second.key() <<
" " << iHit->second.id() <<
" tof " 2419 << iHit->second->tof() <<
" trackId " << iHit->second->trackId() <<
" BX:event " 2420 << iHit->second->eventId().bunchCrossing() <<
":" 2421 << iHit->second->eventId().event();
2423 LogTrace(
"TrackingNtuple") <<
"Current TP " <<
assoc.first.key() <<
" SimTrack Ids";
2426 <<
simTrack.eventId().bunchCrossing() <<
":" <<
simTrack.eventId().event();
2428 for (
auto iHit = range1.first; iHit != range1.second; ++iHit) {
2429 LogTrace(
"TrackingNtuple") <<
" SimHit " << iHit->second.key() <<
" " << iHit->second.id() <<
" tof " 2430 << iHit->second->tof() <<
" trackId " << iHit->second->trackId() <<
" BX:event " 2431 << iHit->second->eventId().bunchCrossing() <<
":" 2432 << iHit->second->eventId().event();
2437 <<
"Got second time the SimHit " << simHitKey.first <<
" of " << simHitKey.second
2438 <<
", first time with TrackingParticle " << assoc2.first.key() <<
", now with " << tpKey;
2441 throw cms::Exception(
"LogicError") <<
"Got second time the SimHit " << simHitKey.first <<
" of " 2442 << simHitKey.second <<
", now with TrackingParticle " << tpKey
2443 <<
", but I didn't find the first occurrance!";
2448 throw cms::Exception(
"LogicError") <<
"Did not find a det unit for DetId " << simhit.detUnitId()
2449 <<
" from tracker geometry";
2451 const auto pos = det->surface().toGlobal(simhit.localPosition());
2452 const float tof = simhit.timeOfFlight();
2454 const auto simHitIndex =
simhit_x.size();
2455 simHitRefKeyToIndex[simHitKey] = simHitIndex;
2457 if (includeStripHits_)
2475 tpHitList.emplace_back(tpKey, simHitIndex, tof, simhit.detUnitId());
2481 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2486 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2487 std::set<edm::ProductID>& hitProductIds) {
2489 iEvent.
getByToken(pixelRecHitToken_, pixelHits);
2490 for (
auto it = pixelHits->
begin(); it != pixelHits->
end(); it++) {
2491 const DetId hitId = it->detId();
2492 for (
auto hit = it->begin(); hit != it->end(); hit++) {
2495 hitProductIds.insert(hit->cluster().id());
2497 const int key = hit->cluster().key();
2498 const int lay = tTopo.
layer(hitId);
2504 pix_x.push_back(ttrh->globalPosition().x());
2505 pix_y.push_back(ttrh->globalPosition().y());
2506 pix_z.push_back(ttrh->globalPosition().z());
2507 pix_xx.push_back(ttrh->globalPositionError().cxx());
2508 pix_xy.push_back(ttrh->globalPositionError().cyx());
2509 pix_yy.push_back(ttrh->globalPositionError().cyy());
2510 pix_yz.push_back(ttrh->globalPositionError().czy());
2511 pix_zz.push_back(ttrh->globalPositionError().czz());
2512 pix_zx.push_back(ttrh->globalPositionError().czx());
2513 pix_radL.push_back(ttrh->surface()->mediumProperties().radLen());
2514 pix_bbxi.push_back(ttrh->surface()->mediumProperties().xi());
2516 LogTrace(
"TrackingNtuple") <<
"pixHit cluster=" << key <<
" subdId=" << hitId.
subdetId() <<
" lay=" << lay
2517 <<
" rawId=" << hitId.
rawId() <<
" pos =" << ttrh->globalPosition();
2518 if (includeTrackingParticles_) {
2527 simHitRefKeyToIndex,
2535 LogTrace(
"TrackingNtuple") <<
" firstMatchingSimHit=" << simHitIdx <<
" simHitPos=" 2541 <<
" event=" << simHitData.
event[0];
2550 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2555 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2556 std::set<edm::ProductID>& hitProductIds) {
2559 iEvent.
getByToken(stripRphiRecHitToken_, rphiHits);
2561 iEvent.
getByToken(stripStereoRecHitToken_, stereoHits);
2570 str_x.resize(totalStripHits);
2571 str_y.resize(totalStripHits);
2572 str_z.resize(totalStripHits);
2573 str_xx.resize(totalStripHits);
2574 str_xy.resize(totalStripHits);
2575 str_yy.resize(totalStripHits);
2576 str_yz.resize(totalStripHits);
2577 str_zz.resize(totalStripHits);
2578 str_zx.resize(totalStripHits);
2583 for (
const auto& detset : hits) {
2584 const DetId hitId = detset.detId();
2585 for (
const auto& hit : detset) {
2588 hitProductIds.insert(hit.cluster().id());
2590 const int key = hit.cluster().key();
2591 const int lay = tTopo.
layer(hitId);
2594 str_x[
key] = ttrh->globalPosition().x();
2595 str_y[
key] = ttrh->globalPosition().y();
2596 str_z[
key] = ttrh->globalPosition().z();
2597 str_xx[
key] = ttrh->globalPositionError().cxx();
2598 str_xy[
key] = ttrh->globalPositionError().cyx();
2599 str_yy[
key] = ttrh->globalPositionError().cyy();
2600 str_yz[
key] = ttrh->globalPositionError().czy();
2601 str_zz[
key] = ttrh->globalPositionError().czz();
2602 str_zx[
key] = ttrh->globalPositionError().czx();
2603 str_radL[
key] = ttrh->surface()->mediumProperties().radLen();
2604 str_bbxi[
key] = ttrh->surface()->mediumProperties().xi();
2605 LogTrace(
"TrackingNtuple") << name <<
" cluster=" << key <<
" subdId=" << hitId.
subdetId() <<
" lay=" << lay
2606 <<
" rawId=" << hitId.
rawId() <<
" pos =" << ttrh->globalPosition();
2608 if (includeTrackingParticles_) {
2617 simHitRefKeyToIndex,
2625 LogTrace(
"TrackingNtuple") <<
" firstMatchingSimHit=" << simHitIdx <<
" simHitPos=" 2633 <<
" event=" << simHitData.
event[0];
2640 fill(*rphiHits,
"stripRPhiHit");
2641 fill(*stereoHits,
"stripStereoHit");
2647 std::vector<std::pair<int, int>>& monoStereoClusterList) {
2650 const int lay = tTopo.
layer(hitId);
2657 glu_x.push_back(ttrh->globalPosition().x());
2658 glu_y.push_back(ttrh->globalPosition().y());
2659 glu_z.push_back(ttrh->globalPosition().z());
2660 glu_xx.push_back(ttrh->globalPositionError().cxx());
2661 glu_xy.push_back(ttrh->globalPositionError().cyx());
2662 glu_yy.push_back(ttrh->globalPositionError().cyy());
2663 glu_yz.push_back(ttrh->globalPositionError().czy());
2664 glu_zz.push_back(ttrh->globalPositionError().czz());
2665 glu_zx.push_back(ttrh->globalPositionError().czx());
2666 glu_radL.push_back(ttrh->surface()->mediumProperties().radLen());
2667 glu_bbxi.push_back(ttrh->surface()->mediumProperties().xi());
2668 LogTrace(
"TrackingNtuple") <<
"stripMatchedHit" 2670 <<
" cluster1=" << hit.
monoHit().
cluster().
key() <<
" subdId=" << hitId.subdetId()
2671 <<
" lay=" << lay <<
" rawId=" << hitId.rawId() <<
" pos =" << ttrh->globalPosition();
2678 std::vector<std::pair<int, int>>& monoStereoClusterList) {
2680 iEvent.
getByToken(stripMatchedRecHitToken_, matchedHits);
2681 for (
auto it = matchedHits->
begin(); it != matchedHits->
end(); it++) {
2682 for (
auto hit = it->begin(); hit != it->end(); hit++) {
2690 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2695 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2696 std::set<edm::ProductID>& hitProductIds) {
2698 iEvent.
getByToken(phase2OTRecHitToken_, phase2OTHits);
2699 for (
auto it = phase2OTHits->
begin(); it != phase2OTHits->
end(); it++) {
2700 const DetId hitId = it->detId();
2701 for (
auto hit = it->begin(); hit != it->end(); hit++) {
2704 hitProductIds.insert(hit->cluster().id());
2706 const int key = hit->cluster().key();
2707 const int lay = tTopo.
layer(hitId);
2713 ph2_x.push_back(ttrh->globalPosition().x());
2714 ph2_y.push_back(ttrh->globalPosition().y());
2715 ph2_z.push_back(ttrh->globalPosition().z());
2716 ph2_xx.push_back(ttrh->globalPositionError().cxx());
2717 ph2_xy.push_back(ttrh->globalPositionError().cyx());
2718 ph2_yy.push_back(ttrh->globalPositionError().cyy());
2719 ph2_yz.push_back(ttrh->globalPositionError().czy());
2720 ph2_zz.push_back(ttrh->globalPositionError().czz());
2721 ph2_zx.push_back(ttrh->globalPositionError().czx());
2722 ph2_radL.push_back(ttrh->surface()->mediumProperties().radLen());
2723 ph2_bbxi.push_back(ttrh->surface()->mediumProperties().xi());
2725 LogTrace(
"TrackingNtuple") <<
"phase2 OT cluster=" << key <<
" subdId=" << hitId.
subdetId() <<
" lay=" << lay
2726 <<
" rawId=" << hitId.
rawId() <<
" pos =" << ttrh->globalPosition();
2728 if (includeTrackingParticles_) {
2737 simHitRefKeyToIndex,
2744 LogTrace(
"TrackingNtuple") <<
" firstMatchingSimHit=" << simHitIdx <<
" simHitPos=" 2750 <<
" event=" << simHitData.
event[0];
2759 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2766 std::vector<std::pair<int, int>>& monoStereoClusterList,
2767 const std::set<edm::ProductID>& hitProductIds,
2768 std::map<edm::ProductID, size_t>& seedCollToOffset) {
2770 for (
size_t iColl = 0; iColl < seedTokens_.size(); ++iColl) {
2771 const auto& seedToken = seedTokens_[iColl];
2774 iEvent.
getByToken(seedToken, seedTracksHandle);
2783 const auto& seedStopInfoToken = seedStopInfoTokens_[iColl];
2785 iEvent.
getByToken(seedStopInfoToken, seedStopInfoHandle);
2786 const auto& seedStopInfos = *seedStopInfoHandle;
2787 if (
seedTracks.size() != seedStopInfos.size()) {
2792 <<
" seed stopping infos for collections " << labels.
module <<
", " 2806 label.ReplaceAll(
"seedTracks",
"");
2807 label.ReplaceAll(
"Seeds",
"");
2808 label.ReplaceAll(
"muonSeeded",
"muonSeededStep");
2813 auto inserted = seedCollToOffset.emplace(
id,
offset);
2814 if (!inserted.second)
2816 <<
"Trying to add seeds with ProductID " <<
id <<
" for a second time from collection " << labels.
module 2817 <<
", seed algo " << label <<
". Typically this is caused by a configuration problem.";
2820 LogTrace(
"TrackingNtuple") <<
"NEW SEED LABEL: " << label <<
" size: " <<
seedTracks.size() <<
" algo=" << algo
2821 <<
" ProductID " <<
id;
2823 for (
size_t iSeed = 0; iSeed < seedTrackRefs.
size(); ++iSeed) {
2824 const auto& seedTrackRef = seedTrackRefs[iSeed];
2825 const auto& seedTrack = *seedTrackRef;
2826 const auto& seedRef = seedTrack.seedRef();
2827 const auto&
seed = *seedRef;
2829 const auto seedStopInfo = seedStopInfos[iSeed];
2831 if (seedRef.id() !=
id)
2833 <<
"All tracks in 'TracksFromSeeds' collection should point to seeds in the same collection. Now the " 2834 "element 0 had ProductID " 2835 <<
id <<
" while the element " << seedTrackRef.key() <<
" had " << seedTrackRef.id()
2836 <<
". The source collection is " << labels.
module <<
".";
2838 std::vector<int> tpIdx;
2839 std::vector<float> sharedFraction;
2840 auto foundTPs = recSimColl.
find(seedTrackRef);
2841 if (foundTPs != recSimColl.
end()) {
2842 for (
const auto tpQuality : foundTPs->val) {
2843 tpIdx.push_back(tpKeyToIndex.at(tpQuality.first.key()));
2844 sharedFraction.push_back(tpQuality.second);
2849 const int nHits = seedTrack.numberOfValidHits();
2851 seedTrack.recHitsBegin(),
2852 seedTrack.recHitsEnd());
2854 const auto bestKeyCount = findBestMatchingTrackingParticle(seedTrack, clusterToTPMap, tpKeyToIndex);
2855 const float bestShareFrac =
2856 nClusters > 0 ?
static_cast<float>(bestKeyCount.countClusters) / static_cast<float>(nClusters) : 0;
2858 const auto bestFirstHitKeyCount =
2859 findMatchingTrackingParticleFromFirstHit(seedTrack, clusterToTPMap, tpKeyToIndex);
2860 const float bestFirstHitShareFrac =
2861 nClusters > 0 ?
static_cast<float>(bestFirstHitKeyCount.countClusters) / static_cast<float>(nClusters) : 0;
2864 const int charge = seedTrack.charge();
2865 const float pt = seedFitOk ? seedTrack.pt() : 0;
2866 const float eta = seedFitOk ? seedTrack.eta() : 0;
2867 const float phi = seedFitOk ? seedTrack.phi() : 0;
2869 const auto seedIndex =
see_fitok.size();
2873 see_px.push_back(seedFitOk ? seedTrack.px() : 0);
2874 see_py.push_back(seedFitOk ? seedTrack.py() : 0);
2875 see_pz.push_back(seedFitOk ? seedTrack.pz() : 0);
2879 see_q.push_back(charge);
2884 see_ptErr.push_back(seedFitOk ? seedTrack.ptError() : 0);
2885 see_etaErr.push_back(seedFitOk ? seedTrack.etaError() : 0);
2886 see_phiErr.push_back(seedFitOk ? seedTrack.phiError() : 0);
2887 see_dxyErr.push_back(seedFitOk ? seedTrack.dxyError() : 0);
2888 see_dzErr.push_back(seedFitOk ? seedTrack.dzError() : 0);
2891 see_nCands.push_back(seedStopInfo.candidatesPerSeed());
2893 const auto& state = seedTrack.seedRef()->startingState();
2894 const auto&
pos = state.parameters().position();
2895 const auto& mom = state.parameters().momentum();
2904 if (includeTrackingParticles_) {
2907 see_bestSimTrkIdx.push_back(bestKeyCount.key >= 0 ? tpKeyToIndex.at(bestKeyCount.key) : -1);
2909 bestFirstHitKeyCount.key >= 0 ? tpKeyToIndex.at(bestFirstHitKeyCount.key) : -1);
2928 std::vector<int> hitIdx;
2929 std::vector<int> hitType;
2931 for (
auto hit =
seed.recHits().first; hit !=
seed.recHits().second; ++hit) {
2933 int subid = recHit->geographicalId().subdetId();
2938 if (includeAllHits_) {
2939 checkProductID(hitProductIds, clusterRef.id(),
"seed");
2942 hitIdx.push_back(clusterKey);
2948 if (includeAllHits_) {
2955 std::vector<std::pair<int, int>>::iterator
pos =
2956 find(monoStereoClusterList.begin(), monoStereoClusterList.end(), std::make_pair(monoIdx, stereoIdx));
2957 size_t gluedIndex = -1;
2958 if (pos != monoStereoClusterList.end()) {
2959 gluedIndex =
std::distance(monoStereoClusterList.begin(), pos);
2965 gluedIndex =
addStripMatchedHit(*matchedHit, theTTRHBuilder, tTopo, monoStereoClusterList);
2968 if (includeAllHits_)
2970 hitIdx.push_back(gluedIndex);
2975 unsigned int clusterKey;
2976 if (clusterRef.isPhase2()) {
2979 clusterKey = clusterRef.cluster_strip().key();
2982 if (includeAllHits_) {
2983 checkProductID(hitProductIds, clusterRef.id(),
"seed");
2984 if (clusterRef.isPhase2()) {
2991 hitIdx.push_back(clusterKey);
2992 if (clusterRef.isPhase2()) {
2999 LogTrace(
"TrackingNtuple") <<
" not pixel and not Strip detector";
3014 std::vector<GlobalPoint>
gp(2);
3015 std::vector<GlobalError> ge(2);
3016 gp[0] = recHit0->globalPosition();
3017 ge[0] = recHit0->globalPositionError();
3018 gp[1] = recHit1->globalPosition();
3019 ge[1] = recHit1->globalPositionError();
3021 <<
"seed " << seedTrackRef.key() <<
" pt=" << pt <<
" eta=" << eta <<
" phi=" << phi <<
" q=" << charge
3022 <<
" - PAIR - ids: " << recHit0->geographicalId().rawId() <<
" " << recHit1->geographicalId().rawId()
3023 <<
" hitpos: " << gp[0] <<
" " << gp[1] <<
" trans0: " 3024 << (recHit0->transientHits().size() > 1 ? recHit0->transientHits()[0]->globalPosition()
3027 << (recHit0->transientHits().size() > 1 ? recHit0->transientHits()[1]->globalPosition()
3030 << (recHit1->transientHits().size() > 1 ? recHit1->transientHits()[0]->globalPosition()
3033 << (recHit1->transientHits().size() > 1 ? recHit1->transientHits()[1]->globalPosition()
3035 <<
" eta,phi: " << gp[0].
eta() <<
"," << gp[0].phi();
3036 }
else if (nHits == 3) {
3043 gp[0] = recHit0->globalPosition();
3044 ge[0] = recHit0->globalPositionError();
3045 int subid0 = recHit0->geographicalId().subdetId();
3048 gp[1] = recHit1->globalPosition();
3049 ge[1] = recHit1->globalPositionError();
3050 int subid1 = recHit1->geographicalId().subdetId();
3053 gp[2] = recHit2->globalPosition();
3054 ge[2] = recHit2->globalPositionError();
3055 int subid2 = recHit2->geographicalId().subdetId();
3059 float seed_chi2 = rzLine.
chi2();
3063 <<
"seed " << seedTrackRef.key() <<
" pt=" << pt <<
" eta=" << eta <<
" phi=" << phi <<
" q=" << charge
3064 <<
" - TRIPLET - ids: " << recHit0->geographicalId().rawId() <<
" " << recHit1->geographicalId().rawId()
3065 <<
" " << recHit2->geographicalId().rawId() <<
" hitpos: " <<
gp[0] <<
" " <<
gp[1] <<
" " <<
gp[2]
3067 << (recHit0->transientHits().size() > 1 ? recHit0->transientHits()[0]->globalPosition()
3070 << (recHit0->transientHits().size() > 1 ? recHit0->transientHits()[1]->globalPosition()
3073 << (recHit1->transientHits().size() > 1 ? recHit1->transientHits()[0]->globalPosition()
3076 << (recHit1->transientHits().size() > 1 ? recHit1->transientHits()[1]->globalPosition()
3079 << (recHit2->transientHits().size() > 1 ? recHit2->transientHits()[0]->globalPosition()
3082 << (recHit2->transientHits().size() > 1 ? recHit2->transientHits()[1]->globalPosition()
3085 << recHit2->localPosition()
3087 <<
" eta,phi: " <<
gp[0].eta() <<
"," <<
gp[0].phi() <<
" pt,chi2: " << seed_pt <<
"," << seed_chi2;
3099 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
3100 const TrackingParticleRefKeyToCount& tpKeyToClusterCount,
3108 const std::set<edm::ProductID>& hitProductIds,
3109 const std::map<edm::ProductID, size_t>& seedCollToOffset,
3110 const std::vector<const MVACollection*>& mvaColls,
3111 const std::vector<const QualityMaskCollection*>& qualColls) {
3115 LogTrace(
"TrackingNtuple") <<
"NEW TRACK LABEL: " << labels.
module;
3117 auto pvPosition = vertices[0].position();
3119 for (
size_t iTrack = 0; iTrack < tracks.
size(); ++iTrack) {
3120 const auto& itTrack = tracks[iTrack];
3121 int charge = itTrack->charge();
3122 float pt = itTrack->pt();
3123 float eta = itTrack->eta();
3124 const double lambda = itTrack->lambda();
3125 float chi2 = itTrack->normalizedChi2();
3126 float ndof = itTrack->ndof();
3127 float phi = itTrack->phi();
3128 int nHits = itTrack->numberOfValidHits();
3131 const auto& tkParam = itTrack->parameters();
3132 auto tkCov = itTrack->covariance();
3137 bool isSimMatched =
false;
3138 std::vector<int> tpIdx;
3139 std::vector<float> sharedFraction;
3140 std::vector<float> tpChi2;
3141 auto foundTPs = recSimColl.
find(itTrack);
3142 if (foundTPs != recSimColl.
end()) {
3143 if (!foundTPs->val.empty()) {
3144 nSimHits = foundTPs->val[0].first->numberOfTrackerHits();
3145 isSimMatched =
true;
3147 for (
const auto tpQuality : foundTPs->val) {
3148 tpIdx.push_back(tpKeyToIndex.at(tpQuality.first.key()));
3149 sharedFraction.push_back(tpQuality.second);
3156 itTrack->recHitsBegin(),
3157 itTrack->recHitsEnd());
3160 const auto bestKeyCount = findBestMatchingTrackingParticle(*itTrack, clusterToTPMap, tpKeyToIndex);
3161 const float bestShareFrac =
static_cast<float>(bestKeyCount.countClusters) / static_cast<float>(nClusters);
3162 float bestShareFracSimDenom = 0;
3163 float bestShareFracSimClusterDenom = 0;
3164 float bestChi2 = -1;
3165 if (bestKeyCount.key >= 0) {
3166 bestShareFracSimDenom =
3167 static_cast<float>(bestKeyCount.countClusters) /
3168 static_cast<float>(tpCollection[tpKeyToIndex.at(bestKeyCount.key)]->numberOfTrackerHits());
3169 bestShareFracSimClusterDenom =
3170 static_cast<float>(bestKeyCount.countClusters) / static_cast<float>(tpKeyToClusterCount.at(bestKeyCount.key));
3172 tkParam, tkCov, *(tpCollection[tpKeyToIndex.at(bestKeyCount.key)]), mf, bs);
3175 const auto bestFirstHitKeyCount = findMatchingTrackingParticleFromFirstHit(*itTrack, clusterToTPMap, tpKeyToIndex);
3176 const float bestFirstHitShareFrac =
3177 static_cast<float>(bestFirstHitKeyCount.countClusters) / static_cast<float>(nClusters);
3178 float bestFirstHitShareFracSimDenom = 0;
3179 float bestFirstHitShareFracSimClusterDenom = 0;
3180 float bestFirstHitChi2 = -1;
3181 if (bestFirstHitKeyCount.key >= 0) {
3182 bestFirstHitShareFracSimDenom =
3183 static_cast<float>(bestFirstHitKeyCount.countClusters) /
3184 static_cast<float>(tpCollection[tpKeyToIndex.at(bestFirstHitKeyCount.key)]->numberOfTrackerHits());
3185 bestFirstHitShareFracSimClusterDenom =
static_cast<float>(bestFirstHitKeyCount.countClusters) /
3186 static_cast<float>(tpKeyToClusterCount.at(bestFirstHitKeyCount.key));
3188 tkParam, tkCov, *(tpCollection[tpKeyToIndex.at(bestFirstHitKeyCount.key)]), mf, bs);
3191 float chi2_1Dmod =
chi2;
3192 int count1dhits = 0;
3193 for (
auto iHit = itTrack->recHitsBegin(), iEnd = itTrack->recHitsEnd(); iHit != iEnd; ++iHit) {
3198 if (count1dhits > 0) {
3199 chi2_1Dmod = (chi2 + count1dhits) / (ndof + count1dhits);
3204 trk_px.push_back(itTrack->px());
3205 trk_py.push_back(itTrack->py());
3206 trk_pz.push_back(itTrack->pz());
3207 trk_pt.push_back(pt);
3208 trk_inner_px.push_back(itTrack->innerMomentum().x());
3209 trk_inner_py.push_back(itTrack->innerMomentum().y());
3210 trk_inner_pz.push_back(itTrack->innerMomentum().z());
3211 trk_inner_pt.push_back(itTrack->innerMomentum().rho());
3212 trk_outer_px.push_back(itTrack->outerMomentum().x());
3213 trk_outer_py.push_back(itTrack->outerMomentum().y());
3214 trk_outer_pz.push_back(itTrack->outerMomentum().z());
3215 trk_outer_pt.push_back(itTrack->outerMomentum().rho());
3216 trk_eta.push_back(eta);
3217 trk_lambda.push_back(lambda);
3218 trk_cotTheta.push_back(1 /
tan(
M_PI * 0.5 - lambda));
3219 trk_phi.push_back(phi);
3220 trk_dxy.push_back(itTrack->dxy(bs.
position()));
3221 trk_dz.push_back(itTrack->dz(bs.
position()));
3222 trk_dxyPV.push_back(itTrack->dxy(pvPosition));
3223 trk_dzPV.push_back(itTrack->dz(pvPosition));
3224 trk_dxyClosestPV.push_back(itTrack->dxy(bestPV));
3225 trk_dzClosestPV.push_back(itTrack->dz(bestPV));
3226 trk_ptErr.push_back(itTrack->ptError());
3227 trk_etaErr.push_back(itTrack->etaError());
3228 trk_lambdaErr.push_back(itTrack->lambdaError());
3229 trk_phiErr.push_back(itTrack->phiError());
3230 trk_dxyErr.push_back(itTrack->dxyError());
3231 trk_dzErr.push_back(itTrack->dzError());
3232 trk_refpoint_x.push_back(itTrack->vx());
3233 trk_refpoint_y.push_back(itTrack->vy());
3234 trk_refpoint_z.push_back(itTrack->vz());
3235 trk_nChi2.push_back(chi2);
3236 trk_nChi2_1Dmod.push_back(chi2_1Dmod);
3237 trk_ndof.push_back(ndof);
3238 trk_q.push_back(charge);
3252 trk_nCluster.push_back(nClusters);
3253 trk_algo.push_back(itTrack->algo());
3254 trk_originalAlgo.push_back(itTrack->originalAlgo());
3259 for (
size_t i = 0;
i < trk_mvas.size(); ++
i) {
3260 trk_mvas[
i].push_back((*(mvaColls[
i]))[iTrack]);
3261 trk_qualityMasks[
i].push_back((*(qualColls[i]))[iTrack]);
3264 if (includeSeeds_) {
3265 auto offset = seedCollToOffset.find(itTrack->seedRef().id());
3266 if (
offset == seedCollToOffset.end()) {
3270 << itTrack->seedRef().id()
3271 <<
", but that seed collection is not given as an input. The following collections were given as an input " 3272 << make_ProductIDMapPrinter(seedCollToOffset);
3275 const auto seedIndex =
offset->second + itTrack->seedRef().key();
3278 throw cms::Exception(
"LogicError") <<
"Track index has already been set for seed " << seedIndex <<
" to " 3279 <<
see_trkIdx[seedIndex] <<
"; was trying to set it to " << iTrack;
3284 if (includeTrackingParticles_) {
3288 trk_bestSimTrkIdx.push_back(bestKeyCount.key >= 0 ? tpKeyToIndex.at(bestKeyCount.key) : -1);
3303 LogTrace(
"TrackingNtuple") <<
"Track #" << itTrack.key() <<
" with q=" << charge <<
", pT=" << pt
3304 <<
" GeV, eta: " << eta <<
", phi: " << phi <<
", chi2=" << chi2 <<
", Nhits=" << nHits
3305 <<
", algo=" << itTrack->algoName(itTrack->algo()).c_str()
3307 <<
" seed#=" << itTrack->seedRef().key() <<
" simMatch=" << isSimMatched
3308 <<
" nSimHits=" << nSimHits
3309 <<
" sharedFraction=" << (sharedFraction.empty() ? -1 : sharedFraction[0])
3310 <<
" tpIdx=" << (tpIdx.empty() ? -1 : tpIdx[0]);
3311 std::vector<int> hitIdx;
3312 std::vector<int> hitType;
3314 for (
auto i = itTrack->recHitsBegin();
i != itTrack->recHitsEnd();
i++) {
3316 DetId hitId = hit->geographicalId();
3324 if (hit->isValid()) {
3328 unsigned int clusterKey;
3329 if (clusterRef.isPixel()) {
3331 }
else if (clusterRef.isPhase2()) {
3332 clusterKey = clusterRef.cluster_phase2OT().key();
3334 clusterKey = clusterRef.cluster_strip().key();
3337 LogTrace(
"TrackingNtuple") <<
" id: " << hitId.
rawId() <<
" - globalPos =" << hit->globalPosition()
3338 <<
" cluster=" << clusterKey <<
" clusterRef ID=" << clusterRef.id()
3339 <<
" eta,phi: " << hit->globalPosition().eta() <<
"," << hit->globalPosition().phi();
3340 if (includeAllHits_) {
3341 checkProductID(hitProductIds, clusterRef.id(),
"track");
3342 if (clusterRef.isPixel()) {
3344 }
else if (clusterRef.isPhase2()) {
3351 hitIdx.push_back(clusterKey);
3352 if (clusterRef.isPixel()) {
3354 }
else if (clusterRef.isPhase2()) {
3360 LogTrace(
"TrackingNtuple") <<
" - invalid hit";
3366 if (includeStripHits_)
3370 inv_type.push_back(hit->getType());
3384 const TrackingVertexRefKeyToIndex& tvKeyToIndex,
3386 const std::vector<TPHitIndex>& tpHitList,
3387 const TrackingParticleRefKeyToCount& tpKeyToClusterCount) {
3394 iEvent.
getByToken(tpNLayersToken_, tpNLayersH);
3395 const auto& nLayers_tPCeff = *tpNLayersH;
3397 iEvent.
getByToken(tpNPixelLayersToken_, tpNLayersH);
3398 const auto& nPixelLayers_tPCeff = *tpNLayersH;
3400 iEvent.
getByToken(tpNStripStereoLayersToken_, tpNLayersH);
3401 const auto& nStripMonoAndStereoLayers_tPCeff = *tpNLayersH;
3406 LogTrace(
"TrackingNtuple") <<
"tracking particle pt=" << tp->pt() <<
" eta=" << tp->eta() <<
" phi=" << tp->phi();
3407 bool isRecoMatched =
false;
3408 std::vector<int> tkIdx;
3409 std::vector<float> sharedFraction;
3410 auto foundTracks = simRecColl.
find(tp);
3411 if (foundTracks != simRecColl.
end()) {
3412 isRecoMatched =
true;
3420 for (
const auto& genRef : tp->genParticles()) {
3421 if (genRef.isNonnull())
3425 bool isFromBHadron =
false;
3430 for (
const auto& particle : recoGenParticleTrail) {
3433 isFromBHadron =
true;
3439 LogTrace(
"TrackingNtuple") <<
"matched to tracks = " << make_VectorPrinter(tkIdx)
3440 <<
" isRecoMatched=" << isRecoMatched;
3441 sim_event.push_back(tp->eventId().event());
3445 sim_px.push_back(tp->px());
3446 sim_py.push_back(tp->py());
3447 sim_pz.push_back(tp->pz());
3448 sim_pt.push_back(tp->pt());
3451 sim_q.push_back(tp->charge());
3455 std::vector<int> decayIdx;
3456 for (
const auto&
v : tp->decayVertices())
3457 decayIdx.push_back(tvKeyToIndex.at(
v.key()));
3465 const double lambdaSim =
M_PI / 2 - momentum.theta();
3474 std::vector<int> hitIdx;
3475 int nPixel = 0, nStrip = 0;
3477 for (
auto ip = rangeHit.first; ip != rangeHit.second; ++ip) {
3481 LogTrace(
"TrackingNtuple") <<
"simhit=" << ip->simHitIdx <<
" type=" <<
static_cast<int>(
type);
3482 hitIdx.push_back(ip->simHitIdx);
3485 throw cms::Exception(
"LogicError") <<
"Encountered SimHit for TP " << tp.key() <<
" with DetId " 3486 << detid.rawId() <<
" whose det() is not Tracker but " << detid.det();
3488 const auto subdet = detid.subdetId();
3501 throw cms::Exception(
"LogicError") <<
"Encountered SimHit for TP " << tp.key() <<
" with DetId " 3502 << detid.rawId() <<
" whose subdet is not recognized, is " << subdet;
3509 const auto nSimLayers = nLayers_tPCeff[tp];
3510 const auto nSimPixelLayers = nPixelLayers_tPCeff[tp];
3511 const auto nSimStripMonoAndStereoLayers = nStripMonoAndStereoLayers_tPCeff[tp];
3514 sim_n3DLay.push_back(nSimPixelLayers + nSimStripMonoAndStereoLayers);
3517 auto found = tpKeyToClusterCount.find(tp.key());
3518 sim_nRecoClusters.push_back(found != cend(tpKeyToClusterCount) ? found->second : 0);
3527 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
3528 const unsigned int seedOffset) {
3532 for (
const auto& keyVal : simRecColl) {
3533 const auto& tpRef = keyVal.key;
3534 auto found = tpKeyToIndex.find(tpRef.key());
3535 if (found == tpKeyToIndex.end())
3536 throw cms::Exception(
"Assert") << __FILE__ <<
":" << __LINE__ <<
" fillTrackingParticlesForSeeds: tpRef.key() " 3537 << tpRef.key() <<
" not found from tpKeyToIndex. tpKeyToIndex size " 3538 << tpKeyToIndex.size();
3539 const auto tpIndex = found->second;
3540 for (
const auto& pair : keyVal.val) {
3541 const auto& seedRef = pair.first->seedRef();
3542 sim_seedIdx[tpIndex].push_back(seedOffset + seedRef.key());
3549 for (
size_t iVertex = 0,
size = vertices.size(); iVertex <
size; ++iVertex) {
3551 vtx_x.push_back(vertex.
x());
3552 vtx_y.push_back(vertex.
y());
3553 vtx_z.push_back(vertex.
z());
3562 std::vector<int> trkIdx;
3565 if (iTrack->id() != tracks.
id())
3568 trkIdx.push_back(iTrack->key());
3571 throw cms::Exception(
"LogicError") <<
"Vertex index has already been set for track " << iTrack->key() <<
" to " 3572 <<
trk_vtxIdx[iTrack->key()] <<
"; was trying to set it to " << iVertex;
3581 const TrackingParticleRefKeyToIndex& tpKeyToIndex) {
3582 int current_event = -1;
3583 for (
const auto& ref : trackingVertices) {
3593 processType = v.
g4Vertices()[0].processType();
3605 for (
const auto& tpRef : tps) {
3606 auto found = tpKeyToIndex.find(tpRef.key());
3607 if (found != tpKeyToIndex.end()) {
3608 idx.push_back(found->second);
3613 std::vector<int> sourceIdx;
3614 std::vector<int> daughterIdx;
3630 std::vector<edm::InputTag>{
edm::InputTag(
"seedTracksinitialStepSeeds"),
3642 std::vector<edm::InputTag>{
edm::InputTag(
"initialStepTrackCandidates"),
3653 desc.
addUntracked<std::vector<std::string>>(
"trackMVAs", std::vector<std::string>{{
"generalTracks"}});
3655 desc.
addUntracked<
bool>(
"trackingParticlesRef",
false);
3671 edm::InputTag(
"trackingParticleNumberOfLayersProducer",
"trackerLayers"));
3673 edm::InputTag(
"trackingParticleNumberOfLayersProducer",
"pixelLayers"));
3675 edm::InputTag(
"trackingParticleNumberOfLayersProducer",
"stripStereoLayers"));
3681 desc.
addUntracked<
bool>(
"includeTrackingParticles",
true);
3682 descriptions.
add(
"trackingNtuple", desc);
std::vector< unsigned int > sim_nTrackerHits
#define declareDynArray(T, n, x)
std::vector< int > trk_bestSimTrkIdx
std::vector< float > sim_pca_dz
edm::LuminosityBlockNumber_t ev_lumi
std::vector< float > trk_nChi2_1Dmod
static const std::string kSharedResource
std::vector< unsigned int > simvtx_processType
Parsed parse(const TrackerTopology &tTopo, const DetId &id) const
edm::EDGetTokenT< TrackingParticleRefVector > trackingParticleRefToken_
std::vector< unsigned int > sim_nLay
std::vector< float > ph2_radL
std::vector< float > trk_dxyPV
reco::SimToRecoCollection associateSimToReco(const edm::Handle< edm::View< reco::Track >> &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
EventNumber_t event() const
static constexpr auto TEC
void fillTrackingVertices(const TrackingVertexRefVector &trackingVertices, const TrackingParticleRefKeyToIndex &tpKeyToIndex)
std::vector< float > see_bestSimTrkShareFrac
std::vector< std::vector< float > > see_simTrkShareFrac
edm::EDGetTokenT< SiStripMatchedRecHit2DCollection > stripMatchedRecHitToken_
T getUntrackedParameter(std::string const &, T const &) const
std::vector< short > see_fitok
Phase2Cluster1DRef cluster_phase2OT() const
std::vector< short > vtx_fake
std::vector< float > simvtx_z
std::vector< std::vector< float > > trk_simTrkNChi2
std::vector< std::vector< int > > see_hitType
std::vector< float > trk_dzClosestPV
edm::EDGetTokenT< SiStripRecHit2DCollection > stripRphiRecHitToken_
Phase2TrackerCluster1D const & phase2OTCluster() const
const TrackingParticleRefVector & sourceTracks() const
std::vector< short > ph2_isBarrel
bool tecIsDoubleSide(const DetId &id) const
TrackAssociatorByHitsImpl::SimHitTPAssociationList SimHitTPAssociationList
std::vector< float > trk_phi
SiPixelCluster const & pixelCluster() const
std::vector< float > sim_pca_cotTheta
bool tobIsDoubleSide(const DetId &id) const
const_iterator end(bool update=false) const
std::vector< float > sim_pca_dxy
void book(const std::string &prefix, TTree *tree)
std::vector< float > see_stateTrajX
std::vector< unsigned int > trk_nOuterLost
size_type dataSize() const
std::vector< float > glu_xy
std::vector< short > trk_isTrue
std::vector< std::vector< int > > ph2_seeIdx
std::vector< float > glu_radL
std::vector< float > trk_inner_pz
int event() const
get the contents of the subdetector field (should be protected?)
std::vector< float > see_stateTrajPy
std::vector< float > pix_y
std::vector< int > trk_vtxIdx
std::vector< std::vector< int > > str_trkIdx
std::vector< unsigned int > see_nValid
std::vector< float > str_yy
iterator find(det_id_type id)
bool tibIsDoubleSide(const DetId &id) const
bool trackFromSeedFitFailed(const reco::Track &track)
std::vector< float > trk_outer_py
unsigned int tibString(const DetId &id) const
std::vector< float > pix_zz
unsigned int tidRing(const DetId &id) const
std::vector< unsigned short > layer
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
std::vector< float > ph2_bbxi
std::vector< int > glu_monoIdx
std::vector< float > trk_eta
std::vector< short > glu_isBarrel
std::vector< unsigned short > order
std::vector< int > sim_bunchCrossing
SimHitData matchCluster(const OmniClusterRef &cluster, DetId hitId, int clusterKey, const TransientTrackingRecHit::RecHitPointer &ttrh, const ClusterTPAssociation &clusterToTPMap, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const SimHitTPAssociationProducer::SimHitTPAssociationList &simHitsTPAssoc, const edm::DetSetVector< SimLink > &digiSimLinks, const SimHitRefKeyToIndex &simHitRefKeyToIndex, HitType hitType)
std::vector< float > see_phiErr
trackRef_iterator tracks_end() const
last iterator over tracks
std::vector< int > trk_bestFromFirstHitSimTrkIdx
std::vector< std::vector< int > > simhit_hitIdx
static bool simHitTPAssociationListGreater(SimHitTPPair i, SimHitTPPair j)
const_iterator end() const
last iterator over the map (read only)
std::vector< float > str_x
std::vector< float > see_dzErr
std::vector< unsigned int > sim_n3DLay
std::vector< float > trk_cotTheta
std::vector< float > trk_bestSimTrkNChi2
CombineDetId< DetIdCommon, DetIdOTCommon, DetIdStripOnly > DetIdStrip
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< unsigned int > see_nStrip
std::vector< float > trk_px
double zError() const
error on z
constexpr bool isNotFinite(T x)
void fillPixelHits(const edm::Event &iEvent, const ClusterTPAssociation &clusterToTPMap, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const SimHitTPAssociationProducer::SimHitTPAssociationList &simHitsTPAssoc, const edm::DetSetVector< PixelDigiSimLink > &digiSimLink, const TransientTrackingRecHitBuilder &theTTRHBuilder, const TrackerTopology &tTopo, const SimHitRefKeyToIndex &simHitRefKeyToIndex, std::set< edm::ProductID > &hitProductIds)
std::vector< unsigned short > pix_simType
std::vector< unsigned short > inv_type
std::vector< float > see_stateTrajPz
std::vector< float > pix_zx
ret
prodAgent to be discontinued
TPHitIndex(unsigned int tp=0, unsigned int simHit=0, float to=0, unsigned int id=0)
const std::vector< SimVertex > & g4Vertices() const
std::vector< float > sim_phi
std::vector< std::vector< int > > trk_simTrkIdx
void fillStripRphiStereoHits(const edm::Event &iEvent, const ClusterTPAssociation &clusterToTPMap, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const SimHitTPAssociationProducer::SimHitTPAssociationList &simHitsTPAssoc, const edm::DetSetVector< StripDigiSimLink > &digiSimLink, const TransientTrackingRecHitBuilder &theTTRHBuilder, const TrackerTopology &tTopo, const SimHitRefKeyToIndex &simHitRefKeyToIndex, std::set< edm::ProductID > &hitProductIds)
int numberOfValidHits() const
std::vector< float > trk_dzPV
double y() const
y coordinate
edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > trackAssociatorToken_
OmniClusterRef const & stereoClusterRef() const
int pdgId() const
PDG ID.
bool isValid() const
Tells whether the vertex is valid.
edm::EDGetTokenT< SiStripRecHit2DCollection > stripStereoRecHitToken_
std::vector< float > trk_dxyErr
unsigned int SimTrackId() const
std::vector< float > str_yz
void push_back(const TrackerTopology &tTopo, const DetId &id)
std::vector< float > trk_pt
unsigned int tecRing(const DetId &id) const
ring id
std::vector< float > glu_x
std::vector< float > trk_inner_py
std::vector< float > see_px
std::vector< float > see_chi2
const_iterator find(const key_type &k) const
find element with specified reference key
std::vector< float > glu_z
std::vector< float > see_stateTrajY
edm::EDGetTokenT< edm::View< reco::Track > > trackToken_
CombineDetId< DetIdCommon, DetIdPixelOnly, DetIdOTCommon, DetIdPhase2OTOnly > DetIdAllPhase2
CombineDetId< DetIdCommon, DetIdPixelOnly > DetIdPixel
unsigned int pxbLadder(const DetId &id) const
Global3DPoint GlobalPoint
constexpr uint32_t rawId() const
get the raw id
unsigned int side(const DetId &id) const
void fillBeamSpot(const reco::BeamSpot &bs)
std::vector< unsigned short > see_stopReason
std::vector< float > trk_outer_px
std::vector< std::vector< int > > trk_hitType
std::vector< unsigned int > trk_nCluster
std::vector< float > ph2_xx
unsigned long long EventNumber_t
std::vector< std::vector< int > > ph2_trkIdx
int numberOfValidStripHits() const
edm::EDGetTokenT< Phase2TrackerRecHit1DCollectionNew > phase2OTRecHitToken_
bool isStereo(const DetId &id) const
std::vector< OmniClusterRef > hitsToClusterRefs(iter begin, iter end)
std::vector< unsigned int > see_algo
std::vector< Vertex > VertexCollection
collection of Vertex objects
T * make(const Args &...args) const
make new ROOT object
std::vector< float > trk_inner_pt
uint16_t firstStrip() const
std::vector< short > simhit_process
std::vector< unsigned short > module
std::vector< float > trk_bestSimTrkShareFracSimClusterDenom
CombineDetId< DetIdCommon, DetIdOTCommon, DetIdPhase2OTOnly > DetIdPhase2OT
std::vector< std::vector< int > > str_seeIdx
std::vector< std::vector< int > > see_simTrkIdx
std::vector< int > simvtx_event
std::vector< float > str_radL
std::vector< int > simhit_simTrkIdx
key_type key() const
Accessor for product key.
std::vector< unsigned short > trk_stopReason
int pixelLayersWithMeasurement() const
std::vector< unsigned short > ladder
static bool tpHitIndexListLess(const TPHitIndex &i, const TPHitIndex &j)
TrackingNtuple(const edm::ParameterSet &)
std::ostream & operator<<(std::ostream &out, const ALILine &li)
S & print(S &os, JobReport::InputFile const &f)
std::vector< float > sim_py
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
LuminosityBlockNumber_t luminosityBlock() const
std::vector< float > sim_px
unsigned int SimTrackId() const
unsigned int LuminosityBlockNumber_t
std::vector< float > pix_xx
std::vector< std::vector< int > > sim_decayVtxIdx
std::vector< float > trk_refpoint_x
std::vector< float > pix_radL
std::vector< float > pix_bbxi
std::vector< std::vector< float > > sim_trkShareFrac
std::vector< std::vector< float > > trk_mvas
example_stream void analyze(const edm::Event &, const edm::EventSetup &) override
void fillPhase2OTHits(const edm::Event &iEvent, const ClusterTPAssociation &clusterToTPMap, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const SimHitTPAssociationProducer::SimHitTPAssociationList &simHitsTPAssoc, const edm::DetSetVector< PixelDigiSimLink > &digiSimLink, const TransientTrackingRecHitBuilder &theTTRHBuilder, const TrackerTopology &tTopo, const SimHitRefKeyToIndex &simHitRefKeyToIndex, std::set< edm::ProductID > &hitProductIds)
std::vector< float > ph2_zx
ProductID id() const
Accessor for product ID.
std::vector< int > simpv_idx
std::vector< unsigned char > QualityMaskCollection
edm::EDGetTokenT< edm::DetSetVector< PixelDigiSimLink > > pixelSimLinkToken_
CombineDetId< DetIdCommon, DetIdPixelOnly, DetIdOTCommon, DetIdStripOnly > DetIdAll
std::vector< std::vector< int > > pix_seeIdx
int numberOfLostTrackerHits(HitCategory category) const
std::vector< unsigned short > str_simType
ClusterPixelRef cluster_pixel() const
std::vector< short > see_isTrue
std::vector< short > inv_isBarrel
std::vector< float > trk_bestSimTrkShareFracSimDenom
std::vector< unsigned short > ring
std::vector< float > trk_bestFromFirstHitSimTrkNChi2
RefToBase< value_type > refAt(size_type i) const
bool isLower(const DetId &id) const
math::XYZPointD Point
point in the space
std::vector< float > see_etaErr
std::vector< std::vector< float > > trk_simTrkShareFrac
std::vector< float > simhit_z
std::vector< float > ph2_z
std::vector< float > ph2_yy
Parsed parse(const TrackerTopology &tTopo, const DetId &id) const
std::vector< float > trk_refpoint_y
std::vector< unsigned int > trk_nLostLay
std::vector< float > MVACollection
unsigned int module(const DetId &id) const
std::vector< int > sim_event
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
std::vector< unsigned int > trk_nStrip
SiStripCluster const & stripCluster() const
std::vector< const reco::GenParticle * > RecoGenParticleTrail
reco::GenParticle trail type.
std::vector< int > see_bestSimTrkIdx
std::vector< float > chargeFraction
edm::EDGetTokenT< edm::ValueMap< unsigned int > > tpNStripStereoLayersToken_
unsigned int tibSide(const DetId &id) const
std::string parametersDefinerName_
std::vector< unsigned int > trk_nPixel
std::vector< float > glu_y
std::vector< unsigned short > panel
std::vector< float > trk_pz
std::vector< float > trk_dzErr
std::vector< unsigned short > isStereo
#define DEFINE_FWK_MODULE(type)
std::vector< float > trk_lambdaErr
std::vector< unsigned short > isUpper
int numberOfValidStripLayersWithMonoAndStereo(uint16_t stripdet, uint16_t layer) const
std::vector< unsigned int > see_nCluster
edm::EDGetTokenT< SiPixelRecHitCollection > pixelRecHitToken_
std::vector< float > ph2_y
std::vector< std::tuple< edm::EDGetTokenT< MVACollection >, edm::EDGetTokenT< QualityMaskCollection > > > mvaQualityCollectionTokens_
std::vector< std::vector< int > > simvtx_sourceSimIdx
std::vector< float > trk_bestFromFirstHitSimTrkShareFracSimDenom
std::vector< float > trk_etaErr
std::vector< short > pix_isBarrel
edm::EDGetTokenT< edm::DetSetVector< PixelDigiSimLink > > siphase2OTSimLinksToken_
std::vector< float > glu_yz
std::vector< float > sim_pca_phi
auto dz(const T_Vertex &vertex, const T_Momentum &momentum, const T_Point &point)
std::vector< unsigned int > trk_algo
std::vector< unsigned int > sim_nRecoClusters
void fillTrackingParticlesForSeeds(const TrackingParticleRefVector &tpCollection, const reco::SimToRecoCollection &simRecColl, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const unsigned int seedOffset)
std::vector< float > ph2_xy
std::vector< float > trk_bestFromFirstHitSimTrkShareFracSimClusterDenom
std::vector< float > vtx_y
std::vector< float > pix_z
void clear(CLHEP::HepGenMatrix &m)
Helper function: Reset all elements of a matrix to 0.
std::vector< int > see_bestFromFirstHitSimTrkIdx
int bunchCrossing() const
get the detector field from this detid
std::vector< int > bunchCrossing
std::vector< float > sim_eta
std::vector< unsigned short > blade
std::vector< unsigned int > trk_originalAlgo
std::vector< unsigned int > trk_nInnerLost
std::vector< float > str_y
std::vector< int > sim_pdgId
std::vector< std::vector< int > > simhit_hitType
std::vector< float > trk_refpoint_z
unsigned int tobSide(const DetId &id) const
std::vector< unsigned int > trk_nInactive
std::vector< edm::EDGetTokenT< edm::View< reco::Track > > > seedTokens_
edm::EDGetTokenT< SimHitTPAssociationProducer::SimHitTPAssociationList > simHitTPMapToken_
std::vector< unsigned int > trk_nOuterInactive
std::vector< float > pix_yz
std::vector< std::vector< int > > sim_genPdgIds
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
std::vector< int > trk_seedIdx
std::vector< std::vector< float > > pix_chargeFraction
std::vector< float > vtx_yErr
std::vector< std::vector< int > > pix_trkIdx
Tan< T >::type tan(const T &t)
Abs< T >::type abs(const T &t)
std::vector< unsigned int > sim_nValid
std::vector< float > glu_yy
std::vector< float > vtx_ndof
double chi2() const
chi-squares
std::vector< std::vector< int > > ph2_simHitIdx
std::vector< float > simvtx_x
double z() const
z coordinate
T operator[](int i) const
virtual TrackingParticle::Vector momentum(const edm::Event &iEvent, const edm::EventSetup &iSetup, const Charge ch, const Point &vtx, const LorentzVector &lv) const
std::vector< float > str_zz
DetIdAllPhase2 inv_detId_phase2
std::vector< float > sim_pca_pt
std::vector< float > see_dxyErr
bool isMatched(TrackingRecHit const &hit)
std::vector< float > trk_bestFromFirstHitSimTrkShareFrac
double BeamWidthX() const
beam width X
ClusterRef cluster() const
range equal_range(const OmniClusterRef &key) const
std::vector< float > see_pt
std::vector< unsigned int > see_nPhase2OT
edm::EDGetTokenT< TrackingVertexCollection > trackingVertexToken_
std::vector< float > see_dxy
std::vector< std::vector< int > > glu_seeIdx
std::vector< unsigned int > trk_n3DLay
std::vector< std::vector< int > > sim_trkIdx
std::vector< float > trk_outer_pt
static bool tpHitIndexListLessSort(const TPHitIndex &i, const TPHitIndex &j)
std::vector< int > matchingSimHit
const bool includeTrackingParticles_
OmniClusterRef const & firstClusterRef() const override
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
std::vector< float > trk_dz
static constexpr auto TOB
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
std::vector< float > trk_ptErr
std::vector< unsigned int > trk_nStripLay
void fillSimHits(const TrackerGeometry &tracker, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const SimHitTPAssociationProducer::SimHitTPAssociationList &simHitsTPAssoc, const TrackerTopology &tTopo, SimHitRefKeyToIndex &simHitRefKeyToIndex, std::vector< TPHitIndex > &tpHitList)
std::vector< float > see_phi
OmniClusterRef const & monoClusterRef() const
std::vector< float > vtx_z
int trackerLayersTotallyOffOrBad(HitCategory category=TRACK_HITS) const
std::vector< float > see_pz
void fillTrackingParticles(const edm::Event &iEvent, const edm::EventSetup &iSetup, const edm::RefToBaseVector< reco::Track > &tracks, const reco::BeamSpot &bs, const TrackingParticleRefVector &tpCollection, const TrackingVertexRefKeyToIndex &tvKeyToIndex, const reco::TrackToTrackingParticleAssociator &associatorByHits, const std::vector< TPHitIndex > &tpHitList, const TrackingParticleRefKeyToCount &tpKeyToClusterCount)
void book(const std::string &prefix, TTree *tree)
std::vector< float > trk_phiErr
std::vector< unsigned int > sim_nPixelLay
std::vector< float > trk_lambda
std::vector< edm::EDGetTokenT< std::vector< SeedStopInfo > > > seedStopInfoTokens_
iterator end()
Return the off-the-end iterator.
std::vector< float > glu_zz
std::vector< float > sim_pca_lambda
std::vector< float > see_stateTrajPx
std::vector< float > glu_zx
reco::RecoToSimCollection associateRecoToSim(const edm::Handle< edm::View< reco::Track >> &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
std::shared_ptr< TrackingRecHit const > RecHitPointer
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
def elem(elemtype, innerHTML='', html_class='', kwargs)
void fillTracks(const edm::RefToBaseVector< reco::Track > &tracks, const TrackingParticleRefVector &tpCollection, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const TrackingParticleRefKeyToCount &tpKeyToClusterCount, const MagneticField &mf, const reco::BeamSpot &bs, const reco::VertexCollection &vertices, const reco::TrackToTrackingParticleAssociator &associatorByHits, const ClusterTPAssociation &clusterToTPMap, const TransientTrackingRecHitBuilder &theTTRHBuilder, const TrackerTopology &tTopo, const std::set< edm::ProductID > &hitProductIds, const std::map< edm::ProductID, size_t > &seedToCollIndex, const std::vector< const MVACollection * > &mvaColls, const std::vector< const QualityMaskCollection * > &qualColls)
std::vector< float > vtx_xErr
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
bool isUpper(const DetId &id) const
std::vector< float > sim_pz
std::vector< std::vector< int > > sim_simHitIdx
edm::Ref< TrackingVertexCollection > TrackingVertexRef
std::vector< unsigned short > isGlued
edm::EventNumber_t ev_event
void push_back(const TrackerTopology &tTopo, const DetId &id)
std::vector< unsigned short > isRPhi
std::vector< float > ph2_x
edm::EDGetTokenT< reco::VertexCollection > vertexToken_
edm::EDGetTokenT< TrackingParticleCollection > trackingParticleToken_
double x() const
x coordinate
std::vector< int > glu_stereoIdx
auto vector_transform(std::vector< InputType > const &input, Function predicate) -> std::vector< typename std::remove_cv< typename std::remove_reference< decltype(predicate(input.front()))>::type >::type >
std::vector< float > trk_py
double xError() const
error on x
static constexpr auto TIB
std::vector< std::vector< int > > pix_simHitIdx
std::vector< float > trk_nChi2
SiStripRecHit2D stereoHit() const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< std::vector< unsigned short > > trk_qualityMasks
void book(const std::string &prefix, TTree *tree)
T const * product() const
std::vector< unsigned int > see_nGlued
std::vector< float > see_py
std::vector< float > pix_x
std::vector< unsigned int > detId
std::vector< int > sim_parentVtxIdx
std::vector< float > see_ptErr
std::vector< float > str_z
std::vector< unsigned short > isStack
std::vector< float > str_zx
uint32_t stack(const DetId &id) const
size_t addStripMatchedHit(const SiStripMatchedRecHit2D &hit, const TransientTrackingRecHitBuilder &theTTRHBuilder, const TrackerTopology &tTopo, std::vector< std::pair< int, int >> &monoStereoClusterList)
std::vector< TrackingVertex > TrackingVertexCollection
double sigmaZ() const
sigma z
std::string algoName() const
bool tidIsDoubleSide(const DetId &id) const
int stripLayersWithMeasurement() const
std::vector< short > trk_isHP
std::vector< float > str_xy
double BeamWidthY() const
beam width Y
std::vector< std::vector< float > > str_chargeFraction
void push_back(const TrackerTopology &tTopo, const DetId &id)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
~TrackingNtuple() override
std::vector< unsigned int > trk_nInnerInactive
std::vector< unsigned short > isLower
unsigned int tecOrder(const DetId &id) const
Base class to all the history types.
int numberOfLostHits(HitCategory category) const
std::vector< std::vector< int > > trk_hitIdx
unsigned int layer(const DetId &id) const
void labelsForToken(EDGetToken iToken, Labels &oLabels) const
void fillSeeds(const edm::Event &iEvent, const TrackingParticleRefVector &tpCollection, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const reco::BeamSpot &bs, const reco::TrackToTrackingParticleAssociator &associatorByHits, const ClusterTPAssociation &clusterToTPMap, const TransientTrackingRecHitBuilder &theTTRHBuilder, const MagneticField &theMF, const TrackerTopology &tTopo, std::vector< std::pair< int, int >> &monoStereoClusterList, const std::set< edm::ProductID > &hitProductIds, std::map< edm::ProductID, size_t > &seedToCollIndex)
SiStripRecHit2D monoHit() const
std::vector< unsigned int > sim_nPixel
std::vector< SimHitTPPair > SimHitTPAssociationList
const bool includeAllHits_
int trackerLayersWithoutMeasurement(HitCategory category) const
std::vector< short > vtx_valid
bool evaluate(TrackingParticleRef tpr)
Evaluate track history using a TrackingParticleRef.
const EncodedEventId & eventId() const
edm::EDGetTokenT< ClusterTPAssociation > clusterTPMapToken_
unsigned int tidOrder(const DetId &id) const
Pixel cluster – collection of neighboring pixels above threshold.
std::vector< std::vector< int > > vtx_trkIdx
edm::ProductID id() const
void push_back(const TrackerTopology &tTopo, const DetId &id)
std::vector< short > str_isBarrel
auto dxy(const T_Vertex &vertex, const T_Momentum &momentum, const T_Point &point)
void analyze(const edm::Event &, const edm::EventSetup &) override
void depth(int d)
Set the depth of the history.
Structure Point Contains parameters of Gaussian fits to DMRs.
const TrackingParticleRefVector & daughterTracks() const
std::vector< float > glu_bbxi
std::vector< int > simhit_particle
std::vector< float > trk_outer_pz
edm::EDGetTokenT< edm::ValueMap< unsigned int > > tpNLayersToken_
std::vector< unsigned short > ph2_simType
std::vector< float > sim_pca_eta
void push_back(const RefToBase< T > &)
virtual OmniClusterRef const & firstClusterRef() const =0
std::vector< float > ph2_yz
std::vector< unsigned short > string
Point getBestVertex(reco::Track const &trk, reco::VertexCollection const &vertices, const size_t minNtracks=2)
static int pixelToChannel(int row, int col)
edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
std::vector< unsigned short > rod
static TrackAlgorithm algoByName(const std::string &name)
double y0() const
y coordinate
std::vector< float > simhit_y
void push_back(value_type const &ref)
Add a Ref<C, T> to the RefVector.
std::vector< float > trk_dxyClosestPV
int numberOfValidPixelHits() const
edm::Ref< edm::PSimHitContainer > TrackPSimHitRef
std::vector< std::vector< int > > str_simHitIdx
std::vector< float > see_statePt
std::vector< float > trk_ndof
size_type size() const
Size of the RefVector.
std::vector< float > glu_xx
Monte Carlo truth information used for tracking validation.
edm::EDGetTokenT< edm::ValueMap< unsigned int > > tpNPixelLayersToken_
bool isUninitialized() const
std::vector< unsigned int > trk_nPixelLay
unsigned int tecPetalNumber(const DetId &id) const
std::vector< float > simhit_x
const Point & position() const
position
std::vector< float > simvtx_y
std::vector< unsigned short > see_nCands
std::vector< std::vector< int > > simvtx_daughterSimIdx
std::vector< float > str_xx
std::vector< float > trk_bestSimTrkShareFrac
void fillStripMatchedHits(const edm::Event &iEvent, const TransientTrackingRecHitBuilder &theTTRHBuilder, const TrackerTopology &tTopo, std::vector< std::pair< int, int >> &monoStereoClusterList)
std::vector< unsigned int > see_offset
DetId geographicalId() const
std::vector< float > ph2_zz
trackRef_iterator tracks_begin() const
first iterator over tracks
void book(const std::string &prefix, TTree *tree)
bool isRPhi(const DetId &id) const
std::vector< int > see_trkIdx
unsigned int tobRod(const DetId &id) const
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
math::XYZVectorD Vector
point in the space
std::vector< unsigned short > side
std::vector< float > simhit_tof
std::vector< std::vector< int > > sim_seedIdx
void fillVertices(const reco::VertexCollection &vertices, const edm::RefToBaseVector< reco::Track > &tracks)
std::vector< float > pix_xy
std::vector< unsigned short > subdet
std::vector< float > trk_dxy
RecoGenParticleTrail const & recoGenParticleTrail() const
Return all reco::GenParticle in the history.
void book(const std::string &prefix, TTree *tree)
std::vector< float > sim_pt
std::vector< float > pix_yy
static constexpr auto TID
std::vector< decltype(reco::TrackBase().algoMaskUL())> trk_algoMask
std::vector< std::vector< int > > see_hitIdx
T const * product() const
std::vector< float > vtx_x
double trackAssociationChi2(const reco::TrackBase::ParameterVector &rParameters, const reco::TrackBase::CovarianceMatrix &recoTrackCovMatrix, const Basic3DVector< double > &momAtVtx, const Basic3DVector< double > &vert, int charge, const MagneticField &magfield, const reco::BeamSpot &bs)
basic method where chi2 is computed
void push_back(const TrackerTopology &tTopo, const DetId &id)
std::vector< unsigned int > see_nPixel
edm::Ref< TrackingParticleCollection > TrackingParticleRef
std::vector< unsigned short > petalNumber
std::vector< float > see_eta
const std::vector< uint8_t > & amplitudes() const
unsigned int pxfPanel(const DetId &id) const
DetIdAllPhase2 simhit_detId_phase2
std::vector< unsigned int > trk_nValid
unsigned int pxfBlade(const DetId &id) const
std::vector< unsigned int > trk_nLost
std::vector< float > trk_inner_px
double yError() const
error on y
const_iterator begin(bool update=false) const
std::vector< float > vtx_zErr
unsigned int operator[](size_t i) const
std::vector< float > simhit_eloss
std::vector< float > see_bestFromFirstHitSimTrkShareFrac
std::vector< int > sim_isFromBHadron
edm::EDGetTokenT< edm::DetSetVector< StripDigiSimLink > > stripSimLinkToken_
std::vector< float > vtx_chi2
std::vector< int > simvtx_bunchCrossing
std::vector< float > str_bbxi
virtual TrackingParticle::Point vertex(const edm::Event &iEvent, const edm::EventSetup &iSetup, const Charge ch, const Point &vtx, const LorentzVector &lv) const
std::vector< float > see_dz
unsigned int tibOrder(const DetId &id) const
const LorentzVector & position() const
constexpr Detector det() const
get the detector field from this detid
double x0() const
x coordinate
std::vector< unsigned int > sim_nStrip
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.