85 #include "HepPDT/ParticleID.hh" 93 #include <unordered_set> 94 #include <unordered_map> 115 default:
return "UNKNOWN TRACKER HIT TYPE";
119 struct ProductIDSetPrinter {
120 ProductIDSetPrinter(
const std::set<edm::ProductID>&
set): set_(set) {}
122 void print(std::ostream& os)
const {
123 for(
const auto& item: set_) {
128 const std::set<edm::ProductID>& set_;
130 std::ostream&
operator<<(std::ostream& os,
const ProductIDSetPrinter&
o) {
134 template <
typename T>
135 struct ProductIDMapPrinter {
136 ProductIDMapPrinter(
const std::map<edm::ProductID, T>&
map):
map_(map) {}
138 void print(std::ostream& os)
const {
139 for(
const auto& item:
map_) {
140 os << item.first <<
" ";
144 const std::map<edm::ProductID, T>&
map_;
146 template <
typename T>
147 auto make_ProductIDMapPrinter(
const std::map<edm::ProductID, T>&
map) {
148 return ProductIDMapPrinter<T>(
map);
150 template <
typename T>
151 std::ostream& operator<<(std::ostream& os, const ProductIDMapPrinter<T>&
o) {
156 template <
typename T>
157 struct VectorPrinter {
158 VectorPrinter(
const std::vector<T>& vec): vec_(vec) {}
160 void print(std::ostream& os)
const {
161 for(
const auto& item: vec_) {
166 const std::vector<T>& vec_;
168 template <
typename T>
169 auto make_VectorPrinter(
const std::vector<T>& vec) {
170 return VectorPrinter<T>(vec);
172 template <
typename T>
173 std::ostream& operator<<(std::ostream& os, const VectorPrinter<T>&
o) {
178 void checkProductID(
const std::set<edm::ProductID>&
set,
const edm::ProductID&
id,
const char *
name) {
180 throw cms::Exception(
"Configuration") <<
"Got " << name <<
" with a hit with ProductID " <<
id 181 <<
" which does not match to the set of ProductID's for the hits: " 182 << ProductIDSetPrinter(
set)
183 <<
". Usually this is caused by a wrong hit collection in the configuration.";
186 template <
typename SimLink,
typename Func>
188 for(
const auto& link: digiSimLinks) {
189 if(link.channel() == channel) {
197 template <
typename ...Args>
void call_nop(Args&&...
args) {}
199 template <
typename ...Types>
207 return std::get<0>(content_)[i];
210 template <
typename ...Args>
211 void book(Args&&...
args) {
212 impl([&](
auto& vec) { vec.book(std::forward<Args>(
args)...); });
215 template <
typename ...Args>
216 void push_back(Args&&...
args) {
217 impl([&](
auto& vec) { vec.push_back(std::forward<Args>(
args)...); });
220 template <
typename ...Args>
221 void resize(Args&&...
args) {
222 impl([&](
auto& vec) { vec.resize(std::forward<Args>(
args)...); });
225 template <
typename ...Args>
226 void set(Args&&...
args) {
227 impl([&](
auto& vec) { vec.set(std::forward<Args>(
args)...); });
231 impl([&](
auto& vec) { vec.clear(); });
236 template <
typename F>
237 void impl(
F&& func) {
238 impl2(std::index_sequence_for<Types...>{}, std::forward<F>(
func));
246 template <std::size_t ...Is,
typename F>
247 void impl2(std::index_sequence<Is...>,
F&& func) {
248 call_nop( (
func(std::get<Is>(content_)) , 0)...);
251 std::tuple<
Types...> content_;
255 std::map<unsigned int, double> chargeFraction(
const SiPixelCluster& cluster,
const DetId& detId,
257 std::map<unsigned int, double> simTrackIdToAdc;
259 auto idetset = digiSimLink.
find(detId);
260 if(idetset == digiSimLink.
end())
261 return simTrackIdToAdc;
265 for(
int iPix=0; iPix != cluster.
size(); ++iPix) {
269 forEachMatchedSimLink(*idetset, channel, [&](
const PixelDigiSimLink& simLink){
275 for(
auto& pair: simTrackIdToAdc) {
279 pair.second /= adcSum;
282 return simTrackIdToAdc;
285 std::map<unsigned int, double> chargeFraction(
const SiStripCluster& cluster,
const DetId& detId,
287 std::map<unsigned int, double> simTrackIdToAdc;
289 auto idetset = digiSimLink.
find(detId);
290 if(idetset == digiSimLink.
end())
291 return simTrackIdToAdc;
299 double& adc = simTrackIdToAdc[simLink.
SimTrackId()];
303 for(
const auto& pair: simTrackIdToAdc) {
304 simTrackIdToAdc[pair.first] = (adcSum != 0. ? pair.second/adcSum : 0.);
308 return simTrackIdToAdc;
314 std::map<unsigned int, double> simTrackIdToAdc;
315 throw cms::Exception(
"LogicError") <<
"Not possible to use StripDigiSimLink with Phase2TrackerCluster1D! ";
316 return simTrackIdToAdc;
323 std::map<unsigned int, double> simTrackIdToAdc;
324 return simTrackIdToAdc;
344 void clearVariables();
399 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
404 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
405 std::set<edm::ProductID>& hitProductIds
408 void fillStripRphiStereoHits(
const edm::Event& iEvent,
410 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
415 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
416 std::set<edm::ProductID>& hitProductIds
419 void fillStripMatchedHits(
const edm::Event& iEvent,
422 std::vector<std::pair<int, int> >& monoStereoClusterList
425 void fillPhase2OTHits(
const edm::Event& iEvent,
427 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
432 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
433 std::set<edm::ProductID>& hitProductIds
438 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
443 const std::vector<std::pair<int, int> >& monoStereoClusterList,
444 const std::set<edm::ProductID>& hitProductIds,
445 std::map<edm::ProductID, size_t>& seedToCollIndex
450 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
456 const std::set<edm::ProductID>& hitProductIds,
457 const std::map<edm::ProductID, size_t>& seedToCollIndex,
458 const std::vector<const MVACollection *>& mvaColls,
459 const std::vector<const QualityMaskCollection *>& qualColls
463 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
466 SimHitRefKeyToIndex& simHitRefKeyToIndex,
467 std::vector<TPHitIndex>& tpHitList);
473 const TrackingVertexRefKeyToIndex& tvKeyToIndex,
475 const std::vector<TPHitIndex>& tpHitList
480 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
481 const unsigned int seedOffset
488 const TrackingParticleRefKeyToIndex& tpKeyToIndex
501 template <
typename SimLink>
503 DetId hitId,
int clusterKey,
506 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
509 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
514 std::vector<edm::EDGetTokenT<edm::View<reco::Track> > >
seedTokens_;
550 #define BOOK(name) tree->Branch((prefix+"_"+#name).c_str(), &name); 568 detId .push_back(
id.rawId() );
569 subdet.push_back(
id.subdetId() );
570 layer .push_back(tTopo.
layer(
id) );
573 unsigned short s = 0;
574 switch(
id.subdetId()) {
597 subdet[
index] =
id.subdetId();
598 layer [
index] = tTopo.layer(
id);
599 side [
index] = tTopo.side(
id);
615 std::vector<unsigned short>
side;
632 blade .push_back( isBarrel ? 0 : tTopo.
pxfBlade(
id) );
633 panel .push_back( isBarrel ? 0 : tTopo.
pxfPanel(
id) );
659 const auto parsed =
parse(tTopo,
id);
660 order .push_back(parsed.order );
661 ring .push_back(parsed.ring );
662 rod .push_back(parsed.rod );
672 const auto parsed =
parse(tTopo,
id);
673 order [
index] = parsed.order ;
675 rod [
index] = parsed.rod ;
688 unsigned int order = 0;
690 unsigned int rod = 0;
693 switch(
id.subdetId()) {
708 std::vector<unsigned short>
ring;
709 std::vector<unsigned short>
rod;
725 const auto parsed =
parse(tTopo,
id);
726 string .push_back(parsed.string );
727 petalNumber.push_back(parsed.petalNumber);
728 isStereo .push_back(tTopo.
isStereo(
id));
729 isRPhi .push_back(tTopo.
isRPhi(
id));
730 isGlued .push_back(parsed.glued);
734 string .resize(size);
735 petalNumber.resize(size);
736 isStereo .resize(size);
737 isRPhi .resize(size);
738 isGlued .resize(size);
742 const auto parsed =
parse(tTopo,
id);
743 string [
index] = parsed.string ;
744 petalNumber[
index] = parsed.petalNumber;
745 isStereo [
index] = tTopo.isStereo(
id);
746 isRPhi [
index] = tTopo.isRPhi(
id);
747 isGlued [
index] = parsed.glued;
762 unsigned int string = 0;
763 unsigned int petalNumber = 0;
767 switch(
id.subdetId()) {
799 isLower.push_back(tTopo.
isLower(
id));
800 isUpper.push_back(tTopo.
isUpper(
id));
801 isStack.push_back(tTopo.
stack(
id) == 0);
817 using DetIdPixel = CombineDetId<DetIdCommon, DetIdPixelOnly>;
818 using DetIdStrip = CombineDetId<DetIdCommon, DetIdOTCommon, DetIdStripOnly>;
819 using DetIdPhase2OT = CombineDetId<DetIdCommon, DetIdOTCommon, DetIdPhase2OTOnly>;
820 using DetIdAll = CombineDetId<DetIdCommon, DetIdPixelOnly, DetIdOTCommon, DetIdStripOnly>;
821 using DetIdAllPhase2 = CombineDetId<DetIdCommon, DetIdPixelOnly, DetIdOTCommon, DetIdPhase2OTOnly>;
1113 trackToken_(consumes<
edm::
View<
reco::Track> >(iConfig.getUntrackedParameter<
edm::InputTag>(
"tracks"))),
1114 clusterTPMapToken_(consumes<
ClusterTPAssociation>(iConfig.getUntrackedParameter<
edm::InputTag>(
"clusterTPMap"))),
1117 pixelSimLinkToken_(consumes<
edm::DetSetVector<
PixelDigiSimLink> >(iConfig.getUntrackedParameter<
edm::InputTag>(
"pixelDigiSimLink"))),
1118 stripSimLinkToken_(consumes<
edm::DetSetVector<
StripDigiSimLink> >(iConfig.getUntrackedParameter<
edm::InputTag>(
"stripDigiSimLink"))),
1119 siphase2OTSimLinksToken_(consumes<
edm::DetSetVector<
PixelDigiSimLink> >(iConfig.getUntrackedParameter<
edm::InputTag>(
"phase2OTSimLink"))),
1120 includeStripHits_(iConfig.getUntrackedParameter<
edm::InputTag>(
"stripDigiSimLink").
label() !=
""),
1121 includePhase2OTHits_(iConfig.getUntrackedParameter<
edm::InputTag>(
"phase2OTSimLink").
label() !=
""),
1122 beamSpotToken_(consumes<
reco::
BeamSpot>(iConfig.getUntrackedParameter<
edm::InputTag>(
"beamSpot"))),
1130 tpNLayersToken_(consumes<
edm::ValueMap<unsigned
int> >(iConfig.getUntrackedParameter<
edm::InputTag>(
"trackingParticleNlayers"))),
1131 tpNPixelLayersToken_(consumes<
edm::ValueMap<unsigned
int> >(iConfig.getUntrackedParameter<
edm::InputTag>(
"trackingParticleNpixellayers"))),
1132 tpNStripStereoLayersToken_(consumes<
edm::ValueMap<unsigned
int> >(iConfig.getUntrackedParameter<
edm::InputTag>(
"trackingParticleNstripstereolayers"))),
1133 builderName_(iConfig.getUntrackedParameter<
std::
string>(
"TTRHBuilder")),
1134 parametersDefinerName_(iConfig.getUntrackedParameter<
std::
string>(
"parametersDefiner")),
1135 includeSeeds_(iConfig.getUntrackedParameter<bool>(
"includeSeeds")),
1136 includeAllHits_(iConfig.getUntrackedParameter<bool>(
"includeAllHits")),
1137 includeMVA_(iConfig.getUntrackedParameter<bool>(
"includeMVA")),
1138 includeTrackingParticles_(iConfig.getUntrackedParameter<bool>(
"includeTrackingParticles"))
1142 return consumes<edm::View<reco::Track> >(tag);
1145 return consumes<std::vector<short> >(tag);
1147 if(seedTokens_.size() != seedStopReasonTokens_.size()) {
1148 throw cms::Exception(
"Configuration") <<
"Got " << seedTokens_.size() <<
" seed collections, but " << seedStopReasonTokens_.size() <<
" track candidate collections";
1152 if(includeAllHits_) {
1153 if(includeStripHits_ && includePhase2OTHits_) {
1154 throw cms::Exception(
"Configuration") <<
"Both stripDigiSimLink and phase2OTSimLink are set, please set only either one (this information is used to infer if you're running phase0/1 or phase2 detector)";
1156 if(!includeStripHits_ && !includePhase2OTHits_) {
1157 throw cms::Exception(
"Configuration") <<
"Neither stripDigiSimLink or phase2OTSimLink are set, please set either one.";
1164 trackingParticleRefToken_ = consumes<TrackingParticleRefVector>(
tpTag);
1167 trackingParticleToken_ = consumes<TrackingParticleCollection>(
tpTag);
1175 return std::make_tuple(consumes<MVACollection>(edm::InputTag(tag,
"MVAValues")),
1176 consumes<QualityMaskCollection>(edm::InputTag(tag,
"QualityMasks")));
1182 t = fs->
make<TTree>(
"tree",
"tree");
1184 t->Branch(
"event" , &ev_event);
1185 t->Branch(
"lumi" , &ev_lumi);
1186 t->Branch(
"run" , &ev_run);
1189 t->Branch(
"trk_px" , &trk_px);
1190 t->Branch(
"trk_py" , &trk_py);
1191 t->Branch(
"trk_pz" , &trk_pz);
1192 t->Branch(
"trk_pt" , &trk_pt);
1193 t->Branch(
"trk_inner_px" , &trk_inner_px);
1194 t->Branch(
"trk_inner_py" , &trk_inner_py);
1195 t->Branch(
"trk_inner_pz" , &trk_inner_pz);
1196 t->Branch(
"trk_inner_pt" , &trk_inner_pt);
1197 t->Branch(
"trk_outer_px" , &trk_outer_px);
1198 t->Branch(
"trk_outer_py" , &trk_outer_py);
1199 t->Branch(
"trk_outer_pz" , &trk_outer_pz);
1200 t->Branch(
"trk_outer_pt" , &trk_outer_pt);
1201 t->Branch(
"trk_eta" , &trk_eta);
1202 t->Branch(
"trk_lambda" , &trk_lambda);
1203 t->Branch(
"trk_cotTheta" , &trk_cotTheta);
1204 t->Branch(
"trk_phi" , &trk_phi);
1205 t->Branch(
"trk_dxy" , &trk_dxy );
1206 t->Branch(
"trk_dz" , &trk_dz );
1207 t->Branch(
"trk_dxyPV" , &trk_dxyPV );
1208 t->Branch(
"trk_dzPV" , &trk_dzPV );
1209 t->Branch(
"trk_dxyClosestPV", &trk_dxyClosestPV );
1210 t->Branch(
"trk_dzClosestPV", &trk_dzClosestPV );
1211 t->Branch(
"trk_ptErr" , &trk_ptErr );
1212 t->Branch(
"trk_etaErr" , &trk_etaErr );
1213 t->Branch(
"trk_lambdaErr", &trk_lambdaErr);
1214 t->Branch(
"trk_phiErr" , &trk_phiErr );
1215 t->Branch(
"trk_dxyErr" , &trk_dxyErr );
1216 t->Branch(
"trk_dzErr" , &trk_dzErr );
1217 t->Branch(
"trk_refpoint_x", &trk_refpoint_x);
1218 t->Branch(
"trk_refpoint_y", &trk_refpoint_y);
1219 t->Branch(
"trk_refpoint_z", &trk_refpoint_z);
1220 t->Branch(
"trk_nChi2" , &trk_nChi2);
1221 t->Branch(
"trk_nChi2_1Dmod", &trk_nChi2_1Dmod);
1222 t->Branch(
"trk_ndof" , &trk_ndof);
1224 trk_mvas.resize(mvaQualityCollectionTokens_.size());
1225 trk_qualityMasks.resize(mvaQualityCollectionTokens_.size());
1226 if(!trk_mvas.empty()) {
1227 t->Branch(
"trk_mva" , &(trk_mvas[0]));
1228 t->Branch(
"trk_qualityMask", &(trk_qualityMasks[0]));
1229 for(
size_t i=1;
i<trk_mvas.size(); ++
i) {
1230 t->Branch((
"trk_mva"+std::to_string(
i+1)).c_str(), &(trk_mvas[
i]));
1231 t->Branch((
"trk_qualityMask"+std::to_string(i+1)).c_str(), &(trk_qualityMasks[i]));
1235 t->Branch(
"trk_q" , &trk_q);
1236 t->Branch(
"trk_nValid" , &trk_nValid );
1237 t->Branch(
"trk_nInvalid" , &trk_nInvalid);
1238 t->Branch(
"trk_nPixel" , &trk_nPixel );
1239 t->Branch(
"trk_nStrip" , &trk_nStrip );
1240 t->Branch(
"trk_nOuterLost", &trk_nOuterLost );
1241 t->Branch(
"trk_nInnerLost", &trk_nInnerLost );
1242 t->Branch(
"trk_nPixelLay", &trk_nPixelLay);
1243 t->Branch(
"trk_nStripLay", &trk_nStripLay);
1244 t->Branch(
"trk_n3DLay" , &trk_n3DLay );
1245 t->Branch(
"trk_nLostLay" , &trk_nLostLay );
1246 t->Branch(
"trk_algo" , &trk_algo );
1247 t->Branch(
"trk_originalAlgo", &trk_originalAlgo);
1250 t->Branch(
"trk_isHP" , &
trk_isHP );
1255 if(includeTrackingParticles_) {
1262 if(includeAllHits_) {
1266 if(includeTrackingParticles_) {
1273 t->Branch(
"sim_px" , &
sim_px );
1274 t->Branch(
"sim_py" , &
sim_py );
1275 t->Branch(
"sim_pz" , &
sim_pz );
1276 t->Branch(
"sim_pt" , &
sim_pt );
1277 t->Branch(
"sim_eta" , &
sim_eta );
1278 t->Branch(
"sim_phi" , &
sim_phi );
1286 t->Branch(
"sim_q" , &
sim_q );
1290 t->Branch(
"sim_nLay" , &
sim_nLay );
1300 if(includeAllHits_) {
1304 if(includeAllHits_) {
1315 t->Branch(
"pix_x" , &
pix_x );
1316 t->Branch(
"pix_y" , &
pix_y );
1317 t->Branch(
"pix_z" , &
pix_z );
1318 t->Branch(
"pix_xx" , &
pix_xx );
1319 t->Branch(
"pix_xy" , &
pix_xy );
1320 t->Branch(
"pix_yy" , &
pix_yy );
1321 t->Branch(
"pix_yz" , &
pix_yz );
1322 t->Branch(
"pix_zz" , &
pix_zz );
1323 t->Branch(
"pix_zx" , &
pix_zx );
1324 t->Branch(
"pix_radL" , &
pix_radL );
1325 t->Branch(
"pix_bbxi" , &
pix_bbxi );
1326 t->Branch(
"pix_bbxi" , &
pix_bbxi );
1328 if(includeStripHits_){
1338 t->Branch(
"str_x" , &
str_x );
1339 t->Branch(
"str_y" , &
str_y );
1340 t->Branch(
"str_z" , &
str_z );
1341 t->Branch(
"str_xx" , &
str_xx );
1342 t->Branch(
"str_xy" , &
str_xy );
1343 t->Branch(
"str_yy" , &
str_yy );
1344 t->Branch(
"str_yz" , &
str_yz );
1345 t->Branch(
"str_zz" , &
str_zz );
1346 t->Branch(
"str_zx" , &
str_zx );
1347 t->Branch(
"str_radL" , &
str_radL );
1348 t->Branch(
"str_bbxi" , &
str_bbxi );
1357 t->Branch(
"glu_x" , &
glu_x );
1358 t->Branch(
"glu_y" , &
glu_y );
1359 t->Branch(
"glu_z" , &
glu_z );
1360 t->Branch(
"glu_xx" , &
glu_xx );
1361 t->Branch(
"glu_xy" , &
glu_xy );
1362 t->Branch(
"glu_yy" , &
glu_yy );
1363 t->Branch(
"glu_yz" , &
glu_yz );
1364 t->Branch(
"glu_zz" , &
glu_zz );
1365 t->Branch(
"glu_zx" , &
glu_zx );
1366 t->Branch(
"glu_radL" , &
glu_radL );
1367 t->Branch(
"glu_bbxi" , &
glu_bbxi );
1370 if(includePhase2OTHits_){
1379 t->Branch(
"ph2_x" , &
ph2_x );
1380 t->Branch(
"ph2_y" , &
ph2_y );
1381 t->Branch(
"ph2_z" , &
ph2_z );
1382 t->Branch(
"ph2_xx" , &
ph2_xx );
1383 t->Branch(
"ph2_xy" , &
ph2_xy );
1384 t->Branch(
"ph2_yy" , &
ph2_yy );
1385 t->Branch(
"ph2_yz" , &
ph2_yz );
1386 t->Branch(
"ph2_zz" , &
ph2_zz );
1387 t->Branch(
"ph2_zx" , &
ph2_zx );
1388 t->Branch(
"ph2_radL" , &
ph2_radL );
1389 t->Branch(
"ph2_bbxi" , &
ph2_bbxi );
1390 t->Branch(
"ph2_bbxi" , &
ph2_bbxi );
1394 if(includeStripHits_)
inv_detId.book(
"inv", t);
1396 t->Branch(
"inv_type" , &
inv_type );
1413 t->Branch(
"bsp_x" , &
bsp_x ,
"bsp_x/F");
1414 t->Branch(
"bsp_y" , &
bsp_y ,
"bsp_y/F");
1415 t->Branch(
"bsp_z" , &
bsp_z ,
"bsp_z/F");
1416 t->Branch(
"bsp_sigmax" , &
bsp_sigmax ,
"bsp_sigmax/F");
1417 t->Branch(
"bsp_sigmay" , &
bsp_sigmay ,
"bsp_sigmay/F");
1418 t->Branch(
"bsp_sigmaz" , &
bsp_sigmaz ,
"bsp_sigmaz/F");
1422 t->Branch(
"see_px" , &
see_px );
1423 t->Branch(
"see_py" , &
see_py );
1424 t->Branch(
"see_pz" , &
see_pz );
1425 t->Branch(
"see_pt" , &
see_pt );
1426 t->Branch(
"see_eta" , &
see_eta );
1427 t->Branch(
"see_phi" , &
see_phi );
1428 t->Branch(
"see_dxy" , &
see_dxy );
1429 t->Branch(
"see_dz" , &
see_dz );
1435 t->Branch(
"see_chi2" , &
see_chi2 );
1442 t->Branch(
"see_q" , &
see_q );
1448 t->Branch(
"see_algo" , &
see_algo );
1451 if(includeTrackingParticles_) {
1458 if(includeAllHits_) {
1467 t->Branch(
"vtx_x" , &
vtx_x);
1468 t->Branch(
"vtx_y" , &
vtx_y);
1469 t->Branch(
"vtx_z" , &
vtx_z);
1515 trk_inner_px .clear();
1516 trk_inner_py .clear();
1517 trk_inner_pz .clear();
1518 trk_inner_pt .clear();
1519 trk_outer_px .clear();
1520 trk_outer_py .clear();
1521 trk_outer_pz .clear();
1522 trk_outer_pt .clear();
1524 trk_lambda .clear();
1525 trk_cotTheta .clear();
1531 trk_dxyClosestPV.clear();
1532 trk_dzClosestPV.clear();
1534 trk_etaErr .clear();
1535 trk_lambdaErr.clear();
1536 trk_phiErr .clear();
1537 trk_dxyErr .clear();
1539 trk_refpoint_x.clear();
1540 trk_refpoint_y.clear();
1541 trk_refpoint_z.clear();
1543 trk_nChi2_1Dmod.clear();
1545 for(
auto& mva: trk_mvas) {
1548 for(
auto&
mask: trk_qualityMasks) {
1552 trk_nValid .clear();
1553 trk_nInvalid .clear();
1554 trk_nPixel .clear();
1555 trk_nStrip .clear();
1556 trk_nOuterLost.clear();
1557 trk_nInnerLost.clear();
1558 trk_nPixelLay.clear();
1559 trk_nStripLay.clear();
1560 trk_n3DLay .clear();
1561 trk_nLostLay .clear();
1563 trk_originalAlgo.clear();
1736 if(includeTrackingParticles_) {
1773 using namespace edm;
1774 using namespace reco;
1775 using namespace std;
1792 iEvent.
getByToken(trackAssociatorToken_, theAssociator);
1795 LogDebug(
"TrackingNtuple") <<
"Analyzing new event";
1804 TrackingParticleRefKeySet tmpTPkeys;
1810 iEvent.
getByToken(trackingParticleToken_, TPCollectionH);
1811 for(
size_t i=0,
size=TPCollectionH->size();
i<
size; ++
i) {
1817 iEvent.
getByToken(trackingParticleRefToken_, TPCollectionHRefVector);
1818 tmpTPptr = TPCollectionHRefVector.
product();
1819 for(
const auto& ref: *tmpTPptr) {
1820 tmpTPkeys.insert(ref.key());
1826 TrackingParticleRefKeyToIndex tpKeyToIndex;
1827 for(
size_t i=0;
i<tpCollection.
size(); ++
i) {
1828 tpKeyToIndex[tpCollection[
i].key()] =
i;
1833 iEvent.
getByToken(trackingVertexToken_, htv);
1838 TrackingVertexRefKeyToIndex tvKeyToIndex;
1839 for(
size_t i=0;
i<tvs.size(); ++
i) {
1843 tvKeyToIndex[
i] = tvRefs.
size();
1849 iEvent.
getByToken(clusterTPMapToken_, pCluster2TPListH);
1852 iEvent.
getByToken(simHitTPMapToken_, simHitsTPAssoc);
1855 SimHitRefKeyToIndex simHitRefKeyToIndex;
1858 std::vector<TPHitIndex> tpHitList;
1860 std::set<edm::ProductID> hitProductIds;
1861 std::map<edm::ProductID, size_t> seedCollToOffset;
1863 ev_run = iEvent.
id().
run();
1865 ev_event = iEvent.
id().
event();
1869 iEvent.
getByToken(pixelSimLinkToken_, pixelDigiSimLinksHandle);
1870 const auto& pixelDigiSimLinks = *pixelDigiSimLinksHandle;
1873 iEvent.
getByToken(stripSimLinkToken_, stripDigiSimLinksHandle);
1877 iEvent.
getByToken(siphase2OTSimLinksToken_, siphase2OTSimLinksHandle);
1881 iEvent.
getByToken(beamSpotToken_, recoBeamSpotHandle);
1882 BeamSpot const & bs = *recoBeamSpotHandle;
1887 vector<pair<int,int> > monoStereoClusterList;
1888 if(includeAllHits_) {
1890 fillSimHits(tracker, tpKeyToIndex, *simHitsTPAssoc, tTopo, simHitRefKeyToIndex, tpHitList);
1893 fillPixelHits(iEvent, clusterToTPMap, tpKeyToIndex, *simHitsTPAssoc, pixelDigiSimLinks, *theTTRHBuilder, tTopo, simHitRefKeyToIndex, hitProductIds);
1896 if(includeStripHits_){
1897 LogDebug(
"TrackingNtuple") <<
"foundStripSimLink" ;
1898 const auto& stripDigiSimLinks = *stripDigiSimLinksHandle;
1899 fillStripRphiStereoHits(iEvent, clusterToTPMap, tpKeyToIndex, *simHitsTPAssoc, stripDigiSimLinks, *theTTRHBuilder, tTopo, simHitRefKeyToIndex, hitProductIds);
1905 if(includePhase2OTHits_){
1906 LogDebug(
"TrackingNtuple") <<
"foundPhase2OTSimLinks" ;
1907 const auto& phase2OTSimLinks = *siphase2OTSimLinksHandle;
1908 fillPhase2OTHits(iEvent, clusterToTPMap, tpKeyToIndex, *simHitsTPAssoc, phase2OTSimLinks, *theTTRHBuilder, tTopo, simHitRefKeyToIndex, hitProductIds);
1914 fillSeeds(iEvent, tpCollection, tpKeyToIndex, bs, associatorByHits, *theTTRHBuilder, theMF.
product(), monoStereoClusterList, hitProductIds, seedCollToOffset);
1919 iEvent.
getByToken(trackToken_, tracksHandle);
1926 std::vector<const MVACollection *> mvaColls;
1927 std::vector<const QualityMaskCollection *> qualColls;
1932 for(
const auto& tokenTpl: mvaQualityCollectionTokens_) {
1933 iEvent.
getByToken(std::get<0>(tokenTpl), hmva);
1934 iEvent.
getByToken(std::get<1>(tokenTpl), hqual);
1936 mvaColls.push_back(hmva.
product());
1937 qualColls.push_back(hqual.
product());
1938 if(mvaColls.back()->size() != tracks.
size()) {
1939 throw cms::Exception(
"Configuration") <<
"Inconsistency in track collection and MVA sizes. Track collection has " << tracks.
size() <<
" tracks, whereas the MVA " << (mvaColls.size()-1) <<
" has " << mvaColls.back()->size() <<
" entries. Double-check your configuration.";
1941 if(qualColls.back()->size() != tracks.
size()) {
1942 throw cms::Exception(
"Configuration") <<
"Inconsistency in track collection and quality mask sizes. Track collection has " << tracks.
size() <<
" tracks, whereas the quality mask " << (qualColls.size()-1) <<
" has " << qualColls.back()->size() <<
" entries. Double-check your configuration.";
1950 fillTracks(trackRefs, tpCollection, tpKeyToIndex, bs, *vertices, associatorByHits, *theTTRHBuilder, tTopo, hitProductIds, seedCollToOffset, mvaColls, qualColls);
1955 fillTrackingParticles(iEvent, iSetup, trackRefs, bs, tpCollection, tvKeyToIndex, associatorByHits, tpHitList);
1977 template <
typename SimLink>
struct GetCluster;
1979 struct GetCluster<PixelDigiSimLink> {
1983 struct GetCluster<StripDigiSimLink> {
1988 template <
typename SimLink>
1990 DetId hitId,
int clusterKey,
1993 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
1996 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2001 std::map<unsigned int, double> simTrackIdToChargeFraction;
2003 else simTrackIdToChargeFraction = chargeFraction(GetCluster<SimLink>::call(cluster), hitId, digiSimLinks);
2006 auto range = clusterToTPMap.
equal_range( cluster );
2007 if( range.first != range.second ) {
2008 for(
auto ip=range.first; ip != range.second; ++ip ) {
2012 const auto event = trackingParticle->eventId().event();
2013 const auto bx = trackingParticle->eventId().bunchCrossing();
2021 auto tpIndex = tpKeyToIndex.find(trackingParticle.
key());
2022 if( tpIndex == tpKeyToIndex.end())
2026 std::pair<TrackingParticleRef, TrackPSimHitRef> simHitTPpairWithDummyTP(trackingParticle,
TrackPSimHitRef());
2028 auto range = std::equal_range(simHitsTPAssoc.begin(), simHitsTPAssoc.end(),
2031 bool foundElectron =
false;
2033 for(
auto ip = range.first; ip != range.second; ++ip) {
2038 if(
std::abs(TPhit->particleType()) == 11 &&
std::abs(trackingParticle->pdgId()) != 11) {
2039 foundElectron =
true;
2043 simHitKey = TPhit.
key();
2044 simHitID = TPhit.
id();
2054 auto ex =
cms::Exception(
"LogicError") <<
"Did not find SimHit for reco hit DetId " << hitId.
rawId()
2055 <<
" for TP " << trackingParticle.
key() <<
" bx:event " << bx <<
":" <<
event 2056 <<
".\nFound SimHits from detectors ";
2057 for(
auto ip = range.first; ip != range.second; ++ip) {
2060 ex << dId.
rawId() <<
" ";
2062 if(trackingParticle->eventId().event() != 0) {
2063 ex <<
"\nSince this is a TrackingParticle from pileup, check that you're running the pileup mixing in playback mode.";
2067 auto simHitIndex = simHitRefKeyToIndex.at(std::make_pair(simHitKey, simHitID));
2070 double chargeFraction = 0.;
2071 for(
const SimTrack& simtrk: trackingParticle->g4Tracks()) {
2072 auto found = simTrackIdToChargeFraction.find(simtrk.trackId());
2073 if(found != simTrackIdToChargeFraction.end()) {
2074 chargeFraction += found->second;
2084 simhit_hitType[simHitIndex].push_back(static_cast<int>(hitType));
2092 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2095 SimHitRefKeyToIndex& simHitRefKeyToIndex,
2096 std::vector<TPHitIndex>& tpHitList) {
2098 for(
const auto&
assoc: simHitsTPAssoc) {
2099 auto tpKey =
assoc.first.key();
2103 auto found = tpKeyToIndex.find(tpKey);
2104 if(found == tpKeyToIndex.end())
2106 const auto tpIndex = found->second;
2109 const auto& simhit = *(
assoc.second);
2110 auto detId =
DetId(simhit.detUnitId());
2120 auto simHitKey = std::make_pair(
assoc.second.key(),
assoc.second.id());
2122 if(simHitRefKeyToIndex.find(simHitKey) != simHitRefKeyToIndex.end()) {
2123 for(
const auto& assoc2: simHitsTPAssoc) {
2124 if(std::make_pair(assoc2.second.key(), assoc2.second.id()) == simHitKey) {
2127 auto range1 = std::equal_range(simHitsTPAssoc.begin(), simHitsTPAssoc.end(),
2130 auto range2 = std::equal_range(simHitsTPAssoc.begin(), simHitsTPAssoc.end(),
2134 LogTrace(
"TrackingNtuple") <<
"Earlier TP " << assoc2.first.key() <<
" SimTrack Ids";
2135 for(
const auto&
simTrack: assoc2.first->g4Tracks()) {
2138 for(
auto iHit = range2.first; iHit != range2.second; ++iHit) {
2139 LogTrace(
"TrackingNtuple") <<
" SimHit " << iHit->second.key() <<
" " << iHit->second.id() <<
" tof " << iHit->second->tof() <<
" trackId " << iHit->second->trackId() <<
" BX:event " << iHit->second->eventId().bunchCrossing() <<
":" << iHit->second->eventId().event();
2141 LogTrace(
"TrackingNtuple") <<
"Current TP " <<
assoc.first.key() <<
" SimTrack Ids";
2145 for(
auto iHit = range1.first; iHit != range1.second; ++iHit) {
2146 LogTrace(
"TrackingNtuple") <<
" SimHit " << iHit->second.key() <<
" " << iHit->second.id() <<
" tof " << iHit->second->tof() <<
" trackId " << iHit->second->trackId() <<
" BX:event " << iHit->second->eventId().bunchCrossing() <<
":" << iHit->second->eventId().event();
2150 throw cms::Exception(
"LogicError") <<
"Got second time the SimHit " << simHitKey.first <<
" of " << simHitKey.second <<
", first time with TrackingParticle " << assoc2.first.key() <<
", now with " << tpKey;
2153 throw cms::Exception(
"LogicError") <<
"Got second time the SimHit " << simHitKey.first <<
" of " << simHitKey.second <<
", now with TrackingParticle " << tpKey <<
", but I didn't find the first occurrance!";
2158 throw cms::Exception(
"LogicError") <<
"Did not find a det unit for DetId " << simhit.detUnitId() <<
" from tracker geometry";
2160 const auto pos = det->surface().toGlobal(simhit.localPosition());
2161 const float tof = simhit.timeOfFlight();
2163 const auto simHitIndex =
simhit_x.size();
2164 simHitRefKeyToIndex[simHitKey] = simHitIndex;
2166 if(includeStripHits_)
simhit_detId.push_back(tTopo, detId);
2182 tpHitList.emplace_back(tpKey, simHitIndex, tof, simhit.detUnitId());
2188 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2193 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2194 std::set<edm::ProductID>& hitProductIds
2197 iEvent.
getByToken(pixelRecHitToken_, pixelHits);
2198 for (
auto it = pixelHits->
begin(); it!=pixelHits->
end(); it++ ) {
2199 const DetId hitId = it->detId();
2200 for (
auto hit = it->begin();
hit!=it->end();
hit++ ) {
2203 hitProductIds.insert(
hit->cluster().
id());
2205 const int key =
hit->cluster().key();
2206 const int lay = tTopo.
layer(hitId);
2208 clusterToTPMap, tpKeyToIndex, simHitsTPAssoc, digiSimLink, simHitRefKeyToIndex,
HitType::Pixel);
2216 pix_x .push_back( ttrh->globalPosition().x() );
2217 pix_y .push_back( ttrh->globalPosition().y() );
2218 pix_z .push_back( ttrh->globalPosition().z() );
2219 pix_xx .push_back( ttrh->globalPositionError().cxx() );
2220 pix_xy .push_back( ttrh->globalPositionError().cyx() );
2221 pix_yy .push_back( ttrh->globalPositionError().cyy() );
2222 pix_yz .push_back( ttrh->globalPositionError().czy() );
2223 pix_zz .push_back( ttrh->globalPositionError().czz() );
2224 pix_zx .push_back( ttrh->globalPositionError().czx() );
2226 pix_radL .push_back( ttrh->surface()->mediumProperties().radLen() );
2227 pix_bbxi .push_back( ttrh->surface()->mediumProperties().xi() );
2228 LogTrace(
"TrackingNtuple") <<
"pixHit cluster=" << key
2231 <<
" rawId=" << hitId.
rawId()
2232 <<
" pos =" << ttrh->globalPosition()
2236 LogTrace(
"TrackingNtuple") <<
" firstMatchingSimHit=" << simHitIdx
2242 <<
" event=" << simHitData.
event[0];
2251 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2256 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2257 std::set<edm::ProductID>& hitProductIds
2261 iEvent.
getByToken(stripRphiRecHitToken_, rphiHits);
2263 iEvent.
getByToken(stripStereoRecHitToken_, stereoHits);
2271 str_x .resize(totalStripHits);
2272 str_y .resize(totalStripHits);
2273 str_z .resize(totalStripHits);
2274 str_xx .resize(totalStripHits);
2275 str_xy .resize(totalStripHits);
2276 str_yy .resize(totalStripHits);
2277 str_yz .resize(totalStripHits);
2278 str_zz .resize(totalStripHits);
2279 str_zx .resize(totalStripHits);
2285 for(
const auto& detset: hits) {
2286 const DetId hitId = detset.detId();
2287 for(
const auto&
hit: detset) {
2290 hitProductIds.insert(
hit.cluster().
id());
2292 const int key =
hit.cluster().key();
2293 const int lay = tTopo.
layer(hitId);
2295 clusterToTPMap, tpKeyToIndex, simHitsTPAssoc, digiSimLink, simHitRefKeyToIndex,
HitType::Strip);
2300 str_x [
key] = ttrh->globalPosition().x();
2301 str_y [
key] = ttrh->globalPosition().y();
2302 str_z [
key] = ttrh->globalPosition().z();
2303 str_xx [
key] = ttrh->globalPositionError().cxx();
2304 str_xy [
key] = ttrh->globalPositionError().cyx();
2305 str_yy [
key] = ttrh->globalPositionError().cyy();
2306 str_yz [
key] = ttrh->globalPositionError().czy();
2307 str_zz [
key] = ttrh->globalPositionError().czz();
2308 str_zx [
key] = ttrh->globalPositionError().czx();
2310 str_radL [
key] = ttrh->surface()->mediumProperties().radLen();
2311 str_bbxi [
key] = ttrh->surface()->mediumProperties().xi();
2312 LogTrace(
"TrackingNtuple") << name <<
" cluster=" << key
2315 <<
" rawId=" << hitId.
rawId()
2316 <<
" pos =" << ttrh->globalPosition()
2320 LogTrace(
"TrackingNtuple") <<
" firstMatchingSimHit=" << simHitIdx
2327 <<
" event=" << simHitData.
event[0];
2333 fill(*rphiHits,
"stripRPhiHit");
2334 fill(*stereoHits,
"stripStereoHit");
2340 std::vector<std::pair<int, int> >& monoStereoClusterList
2343 iEvent.
getByToken(stripMatchedRecHitToken_, matchedHits);
2344 for (
auto it = matchedHits->
begin(); it!=matchedHits->
end(); it++ ) {
2345 const DetId hitId = it->detId();
2346 for (
auto hit = it->begin();
hit!=it->end();
hit++ ) {
2348 const int lay = tTopo.
layer(hitId);
2349 monoStereoClusterList.emplace_back(
hit->monoHit().cluster().key(),
hit->stereoHit().cluster().key());
2355 glu_x .push_back( ttrh->globalPosition().x() );
2356 glu_y .push_back( ttrh->globalPosition().y() );
2357 glu_z .push_back( ttrh->globalPosition().z() );
2358 glu_xx .push_back( ttrh->globalPositionError().cxx() );
2359 glu_xy .push_back( ttrh->globalPositionError().cyx() );
2360 glu_yy .push_back( ttrh->globalPositionError().cyy() );
2361 glu_yz .push_back( ttrh->globalPositionError().czy() );
2362 glu_zz .push_back( ttrh->globalPositionError().czz() );
2363 glu_zx .push_back( ttrh->globalPositionError().czx() );
2364 glu_radL .push_back( ttrh->surface()->mediumProperties().radLen() );
2365 glu_bbxi .push_back( ttrh->surface()->mediumProperties().xi() );
2366 LogTrace(
"TrackingNtuple") <<
"stripMatchedHit" 2367 <<
" cluster0=" <<
hit->stereoHit().cluster().key()
2368 <<
" cluster1=" <<
hit->monoHit().cluster().key()
2371 <<
" rawId=" << hitId.
rawId()
2372 <<
" pos =" << ttrh->globalPosition();
2379 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2384 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2385 std::set<edm::ProductID>& hitProductIds
2388 iEvent.
getByToken(phase2OTRecHitToken_, phase2OTHits);
2389 for (
auto it = phase2OTHits->
begin(); it!=phase2OTHits->
end(); it++ ) {
2390 const DetId hitId = it->detId();
2391 for (
auto hit = it->begin();
hit!=it->end();
hit++ ) {
2394 hitProductIds.insert(
hit->cluster().
id());
2396 const int key =
hit->cluster().key();
2397 const int lay = tTopo.
layer(hitId);
2399 clusterToTPMap, tpKeyToIndex, simHitsTPAssoc, digiSimLink, simHitRefKeyToIndex,
HitType::Phase2OT);
2407 ph2_x .push_back( ttrh->globalPosition().x() );
2408 ph2_y .push_back( ttrh->globalPosition().y() );
2409 ph2_z .push_back( ttrh->globalPosition().z() );
2410 ph2_xx .push_back( ttrh->globalPositionError().cxx() );
2411 ph2_xy .push_back( ttrh->globalPositionError().cyx() );
2412 ph2_yy .push_back( ttrh->globalPositionError().cyy() );
2413 ph2_yz .push_back( ttrh->globalPositionError().czy() );
2414 ph2_zz .push_back( ttrh->globalPositionError().czz() );
2415 ph2_zx .push_back( ttrh->globalPositionError().czx() );
2416 ph2_radL .push_back( ttrh->surface()->mediumProperties().radLen() );
2417 ph2_bbxi .push_back( ttrh->surface()->mediumProperties().xi() );
2419 LogTrace(
"TrackingNtuple") <<
"phase2 OT cluster=" << key
2422 <<
" rawId=" << hitId.
rawId()
2423 <<
" pos =" << ttrh->globalPosition()
2428 LogTrace(
"TrackingNtuple") <<
" firstMatchingSimHit=" << simHitIdx
2434 <<
" event=" << simHitData.
event[0];
2443 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2448 const std::vector<std::pair<int, int> >& monoStereoClusterList,
2449 const std::set<edm::ProductID>& hitProductIds,
2450 std::map<edm::ProductID, size_t>& seedCollToOffset
2453 for(
size_t iColl=0; iColl < seedTokens_.size(); ++iColl) {
2454 const auto& seedToken = seedTokens_[iColl];
2457 iEvent.
getByToken(seedToken, seedTracksHandle);
2466 const auto& seedStopReasonToken = seedStopReasonTokens_[iColl];
2468 iEvent.
getByToken(seedStopReasonToken, seedStopReasonHandle);
2469 const auto& seedStopReasons = *seedStopReasonHandle;
2470 if(
seedTracks.size() != seedStopReasons.size()) {
2474 throw cms::Exception(
"LogicError") <<
"Got " <<
seedTracks.size() <<
" seeds, but " << seedStopReasons.size() <<
" seed stopping reasons for collections " << labels.
module <<
", " << labels2.
module;
2487 label.ReplaceAll(
"seedTracks",
"");
2488 label.ReplaceAll(
"Seeds",
"");
2489 label.ReplaceAll(
"muonSeeded",
"muonSeededStep");
2494 auto inserted = seedCollToOffset.emplace(
id,
offset);
2495 if(!inserted.second)
2496 throw cms::Exception(
"Configuration") <<
"Trying to add seeds with ProductID " <<
id <<
" for a second time from collection " << labels.
module <<
", seed algo " << label <<
". Typically this is caused by a configuration problem.";
2499 LogTrace(
"TrackingNtuple") <<
"NEW SEED LABEL: " << label <<
" size: " <<
seedTracks.size() <<
" algo=" << algo
2500 <<
" ProductID " <<
id;
2502 for(
size_t iSeed=0; iSeed < seedTrackRefs.
size(); ++iSeed) {
2503 const auto& seedTrackRef = seedTrackRefs[iSeed];
2504 const auto& seedTrack = *seedTrackRef;
2505 const auto& seedRef = seedTrack.seedRef();
2506 const auto&
seed = *seedRef;
2508 const auto seedStopReason = seedStopReasons[iSeed];
2510 if(seedRef.id() !=
id)
2511 throw cms::Exception(
"LogicError") <<
"All tracks in 'TracksFromSeeds' collection should point to seeds in the same collection. Now the element 0 had ProductID " <<
id <<
" while the element " << seedTrackRef.key() <<
" had " << seedTrackRef.id() <<
". The source collection is " << labels.
module <<
".";
2513 std::vector<float> sharedFraction;
2514 std::vector<int> tpIdx;
2515 auto foundTPs = recSimColl.
find(seedTrackRef);
2516 if (foundTPs != recSimColl.
end()) {
2517 for(
const auto tpQuality: foundTPs->val) {
2518 sharedFraction.push_back(tpQuality.second);
2519 tpIdx.push_back( tpKeyToIndex.at( tpQuality.first.key() ) );
2525 const int charge = seedTrack.charge();
2526 const float pt = seedFitOk ? seedTrack.pt() : 0;
2527 const float eta = seedFitOk ? seedTrack.eta() : 0;
2528 const float phi = seedFitOk ? seedTrack.phi() : 0;
2529 const int nHits = seedTrack.numberOfValidHits();
2531 const auto seedIndex =
see_fitok.size();
2535 see_px .push_back( seedFitOk ? seedTrack.px() : 0 );
2536 see_py .push_back( seedFitOk ? seedTrack.py() : 0 );
2537 see_pz .push_back( seedFitOk ? seedTrack.pz() : 0 );
2541 see_q .push_back( charge );
2546 see_ptErr .push_back( seedFitOk ? seedTrack.ptError() : 0);
2547 see_etaErr .push_back( seedFitOk ? seedTrack.etaError() : 0);
2548 see_phiErr .push_back( seedFitOk ? seedTrack.phiError() : 0);
2549 see_dxyErr .push_back( seedFitOk ? seedTrack.dxyError() : 0);
2550 see_dzErr .push_back( seedFitOk ? seedTrack.dzError() : 0);
2554 const auto& state = seedTrack.seedRef()->startingState();
2555 const auto&
pos = state.parameters().position();
2556 const auto& mom = state.parameters().momentum();
2565 if(includeTrackingParticles_) {
2585 std::vector<int> hitIdx;
2586 std::vector<int> hitType;
2590 int subid = recHit->geographicalId().subdetId();
2595 if(includeAllHits_) {
2596 checkProductID(hitProductIds, clusterRef.id(),
"seed");
2599 hitIdx.push_back( clusterKey );
2605 if(includeAllHits_) {
2612 std::vector<std::pair<int,int> >::const_iterator
pos =
find( monoStereoClusterList.begin(), monoStereoClusterList.end(), std::make_pair(monoIdx,stereoIdx) );
2613 const auto gluedIndex =
std::distance(monoStereoClusterList.begin(), pos);
2614 if(includeAllHits_)
glu_seeIdx[gluedIndex].push_back(seedIndex);
2615 hitIdx.push_back( gluedIndex );
2620 unsigned int clusterKey;
2621 if(clusterRef.isPhase2()){
2624 clusterKey = clusterRef.cluster_strip().key();
2627 if(includeAllHits_) {
2628 checkProductID(hitProductIds, clusterRef.id(),
"seed");
2629 if(clusterRef.isPhase2()){
2636 hitIdx.push_back( clusterKey );
2637 if(clusterRef.isPhase2()){
2644 LogTrace(
"TrackingNtuple") <<
" not pixel and not Strip detector";
2658 std::vector<GlobalPoint>
gp(2);
2659 std::vector<GlobalError> ge(2);
2660 gp[0] = recHit0->globalPosition();
2661 ge[0] = recHit0->globalPositionError();
2662 gp[1] = recHit1->globalPosition();
2663 ge[1] = recHit1->globalPositionError();
2664 LogTrace(
"TrackingNtuple") <<
"seed " << seedTrackRef.key()
2665 <<
" pt=" << pt <<
" eta=" << eta <<
" phi=" << phi <<
" q=" << charge
2666 <<
" - PAIR - ids: " << recHit0->geographicalId().rawId() <<
" " << recHit1->geographicalId().rawId()
2667 <<
" hitpos: " << gp[0] <<
" " << gp[1]
2668 <<
" trans0: " << (recHit0->transientHits().size()>1 ? recHit0->transientHits()[0]->globalPosition() :
GlobalPoint(0,0,0))
2669 <<
" " << (recHit0->transientHits().size()>1 ? recHit0->transientHits()[1]->globalPosition() :
GlobalPoint(0,0,0))
2670 <<
" trans1: " << (recHit1->transientHits().size()>1 ? recHit1->transientHits()[0]->globalPosition() :
GlobalPoint(0,0,0))
2671 <<
" " << (recHit1->transientHits().size()>1 ? recHit1->transientHits()[1]->globalPosition() :
GlobalPoint(0,0,0))
2672 <<
" eta,phi: " << gp[0].
eta() <<
"," << gp[0].phi();
2673 }
else if (nHits==3) {
2680 gp[0] = recHit0->globalPosition();
2681 ge[0] = recHit0->globalPositionError();
2682 int subid0 = recHit0->geographicalId().subdetId();
2684 gp[1] = recHit1->globalPosition();
2685 ge[1] = recHit1->globalPositionError();
2686 int subid1 = recHit1->geographicalId().subdetId();
2688 gp[2] = recHit2->globalPosition();
2689 ge[2] = recHit2->globalPositionError();
2690 int subid2 = recHit2->geographicalId().subdetId();
2693 float seed_chi2 = rzLine.
chi2();
2696 LogTrace(
"TrackingNtuple") <<
"seed " << seedTrackRef.key()
2697 <<
" pt=" << pt <<
" eta=" << eta <<
" phi=" << phi <<
" q=" << charge
2698 <<
" - TRIPLET - ids: " << recHit0->geographicalId().rawId() <<
" " << recHit1->geographicalId().rawId() <<
" " << recHit2->geographicalId().rawId()
2699 <<
" hitpos: " <<
gp[0] <<
" " <<
gp[1] <<
" " <<
gp[2]
2700 <<
" trans0: " << (recHit0->transientHits().size()>1 ? recHit0->transientHits()[0]->globalPosition() :
GlobalPoint(0,0,0))
2701 <<
" " << (recHit0->transientHits().size()>1 ? recHit0->transientHits()[1]->globalPosition() :
GlobalPoint(0,0,0))
2702 <<
" trans1: " << (recHit1->transientHits().size()>1 ? recHit1->transientHits()[0]->globalPosition() :
GlobalPoint(0,0,0))
2703 <<
" " << (recHit1->transientHits().size()>1 ? recHit1->transientHits()[1]->globalPosition() :
GlobalPoint(0,0,0))
2704 <<
" trans2: " << (recHit2->transientHits().size()>1 ? recHit2->transientHits()[0]->globalPosition() :
GlobalPoint(0,0,0))
2705 <<
" " << (recHit2->transientHits().size()>1 ? recHit2->transientHits()[1]->globalPosition() :
GlobalPoint(0,0,0))
2706 <<
" local: " << recHit2->localPosition()
2708 <<
" eta,phi: " <<
gp[0].eta() <<
"," <<
gp[0].phi()
2709 <<
" pt,chi2: " << seed_pt <<
"," << seed_chi2;
2721 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2727 const std::set<edm::ProductID>& hitProductIds,
2728 const std::map<edm::ProductID, size_t>& seedCollToOffset,
2729 const std::vector<const MVACollection *>& mvaColls,
2730 const std::vector<const QualityMaskCollection *>& qualColls
2735 LogTrace(
"TrackingNtuple") <<
"NEW TRACK LABEL: " << labels.
module;
2737 auto pvPosition = vertices[0].position();
2739 for(
size_t iTrack = 0; iTrack<tracks.
size(); ++iTrack) {
2740 const auto& itTrack = tracks[iTrack];
2742 bool isSimMatched =
false;
2743 std::vector<float> sharedFraction;
2744 std::vector<int> tpIdx;
2745 auto foundTPs = recSimColl.
find(itTrack);
2746 if (foundTPs != recSimColl.
end()) {
2747 if (!foundTPs->val.empty()) {
2748 nSimHits = foundTPs->val[0].first->numberOfTrackerHits();
2749 isSimMatched =
true;
2751 for(
const auto tpQuality: foundTPs->val) {
2752 sharedFraction.push_back(tpQuality.second);
2753 tpIdx.push_back( tpKeyToIndex.at( tpQuality.first.key() ) );
2756 int charge = itTrack->charge();
2757 float pt = itTrack->pt();
2758 float eta = itTrack->eta();
2759 const double lambda = itTrack->lambda();
2760 float chi2 = itTrack->normalizedChi2();
2761 float ndof = itTrack->ndof();
2762 float phi = itTrack->phi();
2763 int nHits = itTrack->numberOfValidHits();
2766 float chi2_1Dmod =
chi2;
2767 int count1dhits = 0;
2768 for(
auto iHit = itTrack->recHitsBegin(), iEnd=itTrack->recHitsEnd(); iHit != iEnd; ++iHit) {
2773 if(count1dhits > 0) {
2774 chi2_1Dmod = (chi2+count1dhits)/(ndof+count1dhits);
2779 trk_px .push_back(itTrack->px());
2780 trk_py .push_back(itTrack->py());
2781 trk_pz .push_back(itTrack->pz());
2782 trk_pt .push_back(pt);
2783 trk_inner_px.push_back(itTrack->innerMomentum().x());
2784 trk_inner_py.push_back(itTrack->innerMomentum().y());
2785 trk_inner_pz.push_back(itTrack->innerMomentum().z());
2786 trk_inner_pt.push_back(itTrack->innerMomentum().rho());
2787 trk_outer_px.push_back(itTrack->outerMomentum().x());
2788 trk_outer_py.push_back(itTrack->outerMomentum().y());
2789 trk_outer_pz.push_back(itTrack->outerMomentum().z());
2790 trk_outer_pt.push_back(itTrack->outerMomentum().rho());
2791 trk_eta .push_back(eta);
2792 trk_lambda .push_back(lambda);
2793 trk_cotTheta .push_back(1/
tan(
M_PI*0.5-lambda));
2794 trk_phi .push_back(phi);
2795 trk_dxy .push_back(itTrack->dxy(bs.
position()));
2796 trk_dz .push_back(itTrack->dz(bs.
position()));
2797 trk_dxyPV .push_back(itTrack->dxy(pvPosition));
2798 trk_dzPV .push_back(itTrack->dz(pvPosition));
2799 trk_dxyClosestPV.push_back(itTrack->dxy(bestPV));
2800 trk_dzClosestPV .push_back(itTrack->dz(bestPV));
2801 trk_ptErr .push_back(itTrack->ptError());
2802 trk_etaErr .push_back(itTrack->etaError());
2803 trk_lambdaErr.push_back(itTrack->lambdaError());
2804 trk_phiErr .push_back(itTrack->phiError());
2805 trk_dxyErr .push_back(itTrack->dxyError());
2806 trk_dzErr .push_back(itTrack->dzError());
2807 trk_refpoint_x.push_back(itTrack->vx());
2808 trk_refpoint_y.push_back(itTrack->vy());
2809 trk_refpoint_z.push_back(itTrack->vz());
2810 trk_nChi2 .push_back(chi2);
2811 trk_nChi2_1Dmod.push_back(chi2_1Dmod);
2812 trk_ndof .push_back(ndof);
2813 trk_q .push_back(charge);
2824 trk_algo .push_back(itTrack->algo());
2825 trk_originalAlgo.push_back(itTrack->originalAlgo());
2830 for(
size_t i=0;
i<trk_mvas.size(); ++
i) {
2831 trk_mvas [
i].push_back( (*(mvaColls [
i]))[iTrack] );
2832 trk_qualityMasks[
i].push_back( (*(qualColls[i]))[iTrack] );
2836 auto offset = seedCollToOffset.find(itTrack->seedRef().id());
2837 if(
offset == seedCollToOffset.end()) {
2840 <<
"' refers to seed collection " << itTrack->seedRef().id()
2841 <<
", but that seed collection is not given as an input. The following collections were given as an input " << make_ProductIDMapPrinter(seedCollToOffset);
2844 const auto seedIndex =
offset->second + itTrack->seedRef().key();
2847 throw cms::Exception(
"LogicError") <<
"Track index has already been set for seed " << seedIndex <<
" to " <<
see_trkIdx[seedIndex] <<
"; was trying to set it to " << iTrack;
2852 if(includeTrackingParticles_) {
2859 LogTrace(
"TrackingNtuple") <<
"Track #" << itTrack.key() <<
" with q=" << charge
2860 <<
", pT=" << pt <<
" GeV, eta: " << eta <<
", phi: " << phi
2861 <<
", chi2=" << chi2
2862 <<
", Nhits=" << nHits
2863 <<
", algo=" << itTrack->algoName(itTrack->algo()).c_str()
2865 <<
" seed#=" << itTrack->seedRef().key()
2866 <<
" simMatch=" << isSimMatched
2867 <<
" nSimHits=" << nSimHits
2868 <<
" sharedFraction=" << (sharedFraction.empty()?-1:sharedFraction[0])
2869 <<
" tpIdx=" << (tpIdx.empty()?-1:tpIdx[0]);
2870 std::vector<int> hitIdx;
2871 std::vector<int> hitType;
2873 for(
auto i=itTrack->recHitsBegin();
i!=itTrack->recHitsEnd();
i++) {
2875 DetId hitId = hit->geographicalId();
2882 if (hit->isValid()) {
2886 unsigned int clusterKey;
2887 if(clusterRef.isPixel()){
2889 }
else if(clusterRef.isPhase2()){
2890 clusterKey = clusterRef.cluster_phase2OT().key();
2892 clusterKey = clusterRef.cluster_strip().key();
2895 LogTrace(
"TrackingNtuple") <<
" id: " << hitId.
rawId() <<
" - globalPos =" << hit->globalPosition()
2896 <<
" cluster=" << clusterKey
2897 <<
" clusterRef ID=" << clusterRef.id()
2898 <<
" eta,phi: " << hit->globalPosition().eta() <<
"," << hit->globalPosition().phi();
2899 if(includeAllHits_) {
2900 checkProductID(hitProductIds, clusterRef.id(),
"track");
2901 if(clusterRef.isPixel()){
2903 }
else if(clusterRef.isPhase2()){
2911 hitIdx.push_back(clusterKey);
2912 if(clusterRef.isPixel()){
2914 }
else if(clusterRef.isPhase2()){
2920 LogTrace(
"TrackingNtuple") <<
" - invalid hit";
2926 if(includeStripHits_)
inv_detId.push_back( tTopo, hitId );
2928 inv_type .push_back( hit->getType() );
2943 const TrackingVertexRefKeyToIndex& tvKeyToIndex,
2945 const std::vector<TPHitIndex>& tpHitList
2953 iEvent.
getByToken(tpNLayersToken_, tpNLayersH);
2954 const auto& nLayers_tPCeff = *tpNLayersH;
2956 iEvent.
getByToken(tpNPixelLayersToken_, tpNLayersH);
2957 const auto& nPixelLayers_tPCeff = *tpNLayersH;
2959 iEvent.
getByToken(tpNStripStereoLayersToken_, tpNLayersH);
2960 const auto& nStripMonoAndStereoLayers_tPCeff = *tpNLayersH;
2965 LogTrace(
"TrackingNtuple") <<
"tracking particle pt=" << tp->pt() <<
" eta=" << tp->eta() <<
" phi=" << tp->phi();
2966 bool isRecoMatched =
false;
2967 std::vector<int> tkIdx;
2968 std::vector<float> sharedFraction;
2969 auto foundTracks = simRecColl.
find(tp);
2970 if(foundTracks != simRecColl.
end()) {
2971 isRecoMatched =
true;
2979 for(
const auto& genRef: tp->genParticles()) {
2980 if(genRef.isNonnull())
2984 bool isFromBHadron =
false;
2989 for(
const auto& particle: recoGenParticleTrail) {
2992 isFromBHadron =
true;
2998 LogTrace(
"TrackingNtuple") <<
"matched to tracks = " << make_VectorPrinter(tkIdx) <<
" isRecoMatched=" << isRecoMatched;
2999 sim_event .push_back(tp->eventId().event());
3003 sim_px .push_back(tp->px());
3004 sim_py .push_back(tp->py());
3005 sim_pz .push_back(tp->pz());
3006 sim_pt .push_back(tp->pt());
3007 sim_eta .push_back(tp->eta());
3008 sim_phi .push_back(tp->phi());
3009 sim_q .push_back(tp->charge());
3013 std::vector<int> decayIdx;
3014 for(
const auto&
v: tp->decayVertices())
3015 decayIdx.push_back( tvKeyToIndex.at(
v.key()) );
3023 const double lambdaSim =
M_PI/2 - momentum.theta();
3032 std::vector<int> hitIdx;
3033 int nPixel=0, nStrip=0;
3035 for(
auto ip = rangeHit.first; ip != rangeHit.second; ++ip) {
3039 LogTrace(
"TrackingNtuple") <<
"simhit=" << ip->simHitIdx <<
" type=" <<
static_cast<int>(
type);
3040 hitIdx.push_back(ip->simHitIdx);
3043 throw cms::Exception(
"LogicError") <<
"Encountered SimHit for TP " << tp.key() <<
" with DetId " << detid.rawId() <<
" whose det() is not Tracker but " << detid.det();
3045 const auto subdet = detid.subdetId();
3058 throw cms::Exception(
"LogicError") <<
"Encountered SimHit for TP " << tp.key() <<
" with DetId " << detid.rawId() <<
" whose subdet is not recognized, is " << subdet;
3065 const auto nSimLayers = nLayers_tPCeff[tp];
3066 const auto nSimPixelLayers = nPixelLayers_tPCeff[tp];
3067 const auto nSimStripMonoAndStereoLayers = nStripMonoAndStereoLayers_tPCeff[tp];
3070 sim_n3DLay .push_back( nSimPixelLayers+nSimStripMonoAndStereoLayers );
3079 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
3080 const unsigned int seedOffset) {
3084 for(
const auto& keyVal: simRecColl) {
3085 const auto& tpRef = keyVal.key;
3086 auto found = tpKeyToIndex.find(tpRef.key());
3087 if(found == tpKeyToIndex.end())
3088 throw cms::Exception(
"Assert") << __FILE__ <<
":" << __LINE__ <<
" fillTrackingParticlesForSeeds: tpRef.key() " << tpRef.key() <<
" not found from tpKeyToIndex. tpKeyToIndex size " << tpKeyToIndex.size();
3089 const auto tpIndex = found->second;
3090 for(
const auto& pair: keyVal.val) {
3091 const auto& seedRef = pair.first->seedRef();
3092 sim_seedIdx[tpIndex].push_back(seedOffset + seedRef.key());
3100 for(
size_t iVertex=0,
size=vertices.size(); iVertex<
size; ++iVertex) {
3102 vtx_x.push_back(vertex.
x());
3103 vtx_y.push_back(vertex.
y());
3104 vtx_z.push_back(vertex.
z());
3113 std::vector<int> trkIdx;
3116 if(iTrack->id() != tracks.
id())
3119 trkIdx.push_back(iTrack->key());
3122 throw cms::Exception(
"LogicError") <<
"Vertex index has already been set for track " << iTrack->key() <<
" to " <<
trk_vtxIdx[iTrack->key()] <<
"; was trying to set it to " << iVertex;
3131 const TrackingParticleRefKeyToIndex& tpKeyToIndex
3133 int current_event = -1;
3134 for(
const auto& ref: trackingVertices) {
3144 processType = v.
g4Vertices()[0].processType();
3156 for(
const auto& tpRef: tps) {
3157 auto found = tpKeyToIndex.find(tpRef.key());
3158 if(found != tpKeyToIndex.end()) {
3159 idx.push_back(found->second);
3164 std::vector<int> sourceIdx;
3165 std::vector<int> daughterIdx;
3179 desc.
addUntracked<std::vector<edm::InputTag> >(
"seedTracks", std::vector<edm::InputTag>{
3191 desc.
addUntracked<std::vector<edm::InputTag> >(
"trackCandidates", std::vector<edm::InputTag>{
3204 desc.
addUntracked<std::vector<std::string> >(
"trackMVAs", std::vector<std::string>{{
"generalTracks"}});
3206 desc.
addUntracked<
bool>(
"trackingParticlesRef",
false);
3229 desc.
addUntracked<
bool>(
"includeTrackingParticles",
true);
3230 descriptions.
add(
"trackingNtuple",desc);
int adc(sample_type sample)
get the ADC sample (12 bits)
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
EventNumber_t event() const
void fillTrackingVertices(const TrackingVertexRefVector &trackingVertices, const TrackingParticleRefKeyToIndex &tpKeyToIndex)
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< 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
std::unordered_map< reco::RecoToSimCollection::index_type, size_t > TrackingParticleRefKeyToIndex
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
void fillStripMatchedHits(const edm::Event &iEvent, const TransientTrackingRecHitBuilder &theTTRHBuilder, const TrackerTopology &tTopo, std::vector< std::pair< int, int > > &monoStereoClusterList)
trackRef_iterator tracks_end() const
last iterator over tracks
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
CombineDetId< DetIdCommon, DetIdOTCommon, DetIdStripOnly > DetIdStrip
bool getByToken(EDGetToken token, Handle< PROD > &result) const
std::vector< unsigned int > see_nStrip
def analyze(function, filename, filter=None)
std::vector< float > trk_px
double zError() const
error on z
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
TPHitIndex(unsigned int tp=0, unsigned int simHit=0, float to=0, unsigned int id=0)
const std::vector< SimVertex > & g4Vertices() const
#define DEFINE_FWK_MODULE(type)
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.
std::string print(const Track &, edm::Verbosity=edm::Concise)
Track print utility.
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
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< float > ph2_xx
TrackingParticleRefKeyToIndex TrackingVertexRefKeyToIndex
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< 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::pair< TrackPSimHitRef::key_type, edm::ProductID > SimHitFullKey
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< std::vector< float > > sim_shareFrac
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 &)
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::ostream & operator<<(std::ostream &out, const ALILine &li)
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 > > trk_mvas
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
uint32_t rawId() const
get the raw id
std::vector< unsigned short > ring
void fillTracks(const edm::RefToBaseVector< reco::Track > &tracks, const TrackingParticleRefVector &tpCollection, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const reco::BeamSpot &bs, const reco::VertexCollection &vertices, const reco::TrackToTrackingParticleAssociator &associatorByHits, 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)
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< 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< 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
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)
std::vector< unsigned short > panel
std::vector< float > trk_pz
std::vector< float > trk_dzErr
std::vector< unsigned short > isStereo
std::vector< float > trk_lambdaErr
std::vector< unsigned short > isUpper
int numberOfValidStripLayersWithMonoAndStereo(uint16_t stripdet, uint16_t layer) const
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_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
simTrack
per collection params
void fillTrackingParticlesForSeeds(const TrackingParticleRefVector &tpCollection, const reco::SimToRecoCollection &simRecColl, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const unsigned int seedOffset)
std::vector< float > ph2_xy
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.
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< edm::EDGetTokenT< edm::View< reco::Track > > > seedTokens_
edm::EDGetTokenT< SimHitTPAssociationProducer::SimHitTPAssociationList > simHitTPMapToken_
std::vector< float > pix_yz
std::vector< std::vector< int > > sim_genPdgIds
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)
double BeamWidthX() const
beam width X
range equal_range(const OmniClusterRef &key) const
std::vector< float > see_pt
std::vector< unsigned int > see_nPhase2OT
std::vector< edm::EDGetTokenT< std::vector< short > > > seedStopReasonTokens_
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_
std::vector< float > trk_dz
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 subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
std::vector< float > see_pz
void book(const std::string &prefix, TTree *tree)
std::vector< float > trk_phiErr
std::vector< unsigned int > sim_nPixelLay
std::vector< float > trk_lambda
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
std::shared_ptr< TrackingRecHit const > RecHitPointer
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
std::vector< float > vtx_xErr
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< std::vector< float > > trk_shareFrac
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
std::vector< float > trk_py
double xError() const
error on x
std::vector< std::vector< int > > pix_simHitIdx
std::vector< float > trk_nChi2
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
reco::RecoToSimCollection associateRecoToSim(const edm::Handle< edm::View< reco::Track > > &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
compare reco to sim the handle of reco::Track and TrackingParticle collections
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
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)
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
std::vector< std::vector< float > > see_shareFrac
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)
virtual void analyze(const edm::Event &, const edm::EventSetup &) override
void depth(int d)
Set the depth of the history.
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)
std::map< SimHitFullKey, size_t > SimHitRefKeyToIndex
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< std::vector< int > > simvtx_daughterSimIdx
std::vector< float > str_xx
#define declareDynArray(T, n, x)
std::vector< unsigned int > see_offset
std::vector< float > ph2_zz
reco::SimToRecoCollection associateSimToReco(const edm::Handle< edm::View< reco::Track > > &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
compare reco to sim the handle of reco::Track and TrackingParticle collections
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
Detector det() const
get the detector field from this detid
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
std::unordered_set< reco::RecoToSimCollection::index_type > TrackingParticleRefKeySet
std::vector< unsigned int > trk_nInvalid
std::vector< decltype(reco::TrackBase().algoMaskUL())> trk_algoMask
std::vector< std::vector< int > > see_hitIdx
T const * product() const
std::vector< float > vtx_x
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< float > trk_inner_px
double yError() const
error on y
const_iterator begin(bool update=false) const
void fillSeeds(const edm::Event &iEvent, const TrackingParticleRefVector &tpCollection, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const reco::BeamSpot &bs, const reco::TrackToTrackingParticleAssociator &associatorByHits, const TransientTrackingRecHitBuilder &theTTRHBuilder, const MagneticField *theMF, const std::vector< std::pair< int, int > > &monoStereoClusterList, const std::set< edm::ProductID > &hitProductIds, std::map< edm::ProductID, size_t > &seedToCollIndex)
std::vector< float > vtx_zErr
unsigned int operator[](size_t i) const
std::vector< float > simhit_eloss
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
double x0() const
x coordinate
std::vector< unsigned int > sim_nStrip