84 #include "HepPDT/ParticleID.hh" 90 #include <unordered_set> 91 #include <unordered_map> 112 default:
return "UNKNOWN TRACKER HIT TYPE";
116 struct ProductIDSetPrinter {
117 ProductIDSetPrinter(
const std::set<edm::ProductID>&
set): set_(set) {}
119 void print(std::ostream& os)
const {
120 for(
const auto& item: set_) {
125 const std::set<edm::ProductID>& set_;
127 std::ostream&
operator<<(std::ostream& os,
const ProductIDSetPrinter&
o) {
131 template <
typename T>
132 struct ProductIDMapPrinter {
133 ProductIDMapPrinter(
const std::map<edm::ProductID, T>&
map):
map_(map) {}
135 void print(std::ostream& os)
const {
136 for(
const auto& item:
map_) {
137 os << item.first <<
" ";
141 const std::map<edm::ProductID, T>&
map_;
143 template <
typename T>
144 auto make_ProductIDMapPrinter(
const std::map<edm::ProductID, T>&
map) {
145 return ProductIDMapPrinter<T>(
map);
147 template <
typename T>
148 std::ostream& operator<<(std::ostream& os, const ProductIDMapPrinter<T>&
o) {
153 template <
typename T>
154 struct VectorPrinter {
155 VectorPrinter(
const std::vector<T>& vec): vec_(vec) {}
157 void print(std::ostream& os)
const {
158 for(
const auto& item: vec_) {
163 const std::vector<T>& vec_;
165 template <
typename T>
166 auto make_VectorPrinter(
const std::vector<T>& vec) {
167 return VectorPrinter<T>(vec);
169 template <
typename T>
170 std::ostream& operator<<(std::ostream& os, const VectorPrinter<T>&
o) {
175 void checkProductID(
const std::set<edm::ProductID>&
set,
const edm::ProductID&
id,
const char *
name) {
177 throw cms::Exception(
"Configuration") <<
"Got " << name <<
" with a hit with ProductID " <<
id 178 <<
" which does not match to the set of ProductID's for the hits: " 179 << ProductIDSetPrinter(
set)
180 <<
". Usually this is caused by a wrong hit collection in the configuration.";
183 template <
typename SimLink,
typename Func>
185 for(
const auto& link: digiSimLinks) {
186 if(link.channel() == channel) {
194 template <
typename ...Args>
void call_nop(Args&&...
args) {}
196 template <
typename ...Types>
204 return std::get<0>(content_)[i];
207 template <
typename ...Args>
208 void book(Args&&...
args) {
209 impl([&](
auto& vec) { vec.book(std::forward<Args>(
args)...); });
212 template <
typename ...Args>
213 void push_back(Args&&...
args) {
214 impl([&](
auto& vec) { vec.push_back(std::forward<Args>(
args)...); });
217 template <
typename ...Args>
218 void resize(Args&&...
args) {
219 impl([&](
auto& vec) { vec.resize(std::forward<Args>(
args)...); });
222 template <
typename ...Args>
223 void set(Args&&...
args) {
224 impl([&](
auto& vec) { vec.set(std::forward<Args>(
args)...); });
228 impl([&](
auto& vec) { vec.clear(); });
233 template <
typename F>
234 void impl(
F&& func) {
235 impl2(std::index_sequence_for<Types...>{}, std::forward<F>(
func));
243 template <std::size_t ...Is,
typename F>
244 void impl2(std::index_sequence<Is...>,
F&& func) {
245 call_nop( (
func(std::get<Is>(content_)) , 0)...);
248 std::tuple<
Types...> content_;
252 std::map<unsigned int, double> chargeFraction(
const SiPixelCluster& cluster,
const DetId& detId,
254 std::map<unsigned int, double> simTrackIdToAdc;
256 auto idetset = digiSimLink.
find(detId);
257 if(idetset == digiSimLink.
end())
258 return simTrackIdToAdc;
262 for(
int iPix=0; iPix != cluster.
size(); ++iPix) {
266 forEachMatchedSimLink(*idetset, channel, [&](
const PixelDigiSimLink& simLink){
272 for(
auto& pair: simTrackIdToAdc) {
276 pair.second /= adcSum;
279 return simTrackIdToAdc;
282 std::map<unsigned int, double> chargeFraction(
const SiStripCluster& cluster,
const DetId& detId,
284 std::map<unsigned int, double> simTrackIdToAdc;
286 auto idetset = digiSimLink.
find(detId);
287 if(idetset == digiSimLink.
end())
288 return simTrackIdToAdc;
296 double& adc = simTrackIdToAdc[simLink.
SimTrackId()];
300 for(
const auto& pair: simTrackIdToAdc) {
301 simTrackIdToAdc[pair.first] = (adcSum != 0. ? pair.second/adcSum : 0.);
305 return simTrackIdToAdc;
311 std::map<unsigned int, double> simTrackIdToAdc;
312 throw cms::Exception(
"LogicError") <<
"Not possible to use StripDigiSimLink with Phase2TrackerCluster1D! ";
313 return simTrackIdToAdc;
320 std::map<unsigned int, double> simTrackIdToAdc;
321 return simTrackIdToAdc;
341 void clearVariables();
393 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
398 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
399 std::set<edm::ProductID>& hitProductIds
402 void fillStripRphiStereoHits(
const edm::Event& iEvent,
404 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
409 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
410 std::set<edm::ProductID>& hitProductIds
413 void fillStripMatchedHits(
const edm::Event& iEvent,
416 std::vector<std::pair<int, int> >& monoStereoClusterList
419 void fillPhase2OTHits(
const edm::Event& iEvent,
421 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
426 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
427 std::set<edm::ProductID>& hitProductIds
432 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
437 const std::vector<std::pair<int, int> >& monoStereoClusterList,
438 const std::set<edm::ProductID>& hitProductIds,
439 std::map<edm::ProductID, size_t>& seedToCollIndex
444 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
449 const std::set<edm::ProductID>& hitProductIds,
450 const std::map<edm::ProductID, size_t>& seedToCollIndex
454 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
457 SimHitRefKeyToIndex& simHitRefKeyToIndex,
458 std::vector<TPHitIndex>& tpHitList);
464 const TrackingVertexRefKeyToIndex& tvKeyToIndex,
466 const std::vector<TPHitIndex>& tpHitList
471 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
472 const unsigned int seedOffset
479 const TrackingParticleRefKeyToIndex& tpKeyToIndex
492 template <
typename SimLink>
494 DetId hitId,
int clusterKey,
497 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
500 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
505 std::vector<edm::EDGetTokenT<edm::View<reco::Track> > >
seedTokens_;
538 #define BOOK(name) tree->Branch((prefix+"_"+#name).c_str(), &name); 556 detId .push_back(
id.rawId() );
557 subdet.push_back(
id.subdetId() );
558 layer .push_back(tTopo.
layer(
id) );
561 unsigned short s = 0;
562 switch(
id.subdetId()) {
585 subdet[
index] =
id.subdetId();
586 layer [
index] = tTopo.layer(
id);
587 side [
index] = tTopo.side(
id);
603 std::vector<unsigned short>
side;
619 ladder.push_back( isBarrel ? tTopo.
pxbLadder(
id) : 0 );
620 blade .push_back( isBarrel ? 0 : tTopo.
pxfBlade(
id) );
621 panel .push_back( isBarrel ? 0 : tTopo.
pxfPanel(
id) );
647 const auto parsed =
parse(tTopo,
id);
648 order .push_back(parsed.order );
649 ring .push_back(parsed.ring );
650 rod .push_back(parsed.rod );
660 const auto parsed =
parse(tTopo,
id);
661 order [
index] = parsed.order ;
663 rod [
index] = parsed.rod ;
676 unsigned int order = 0;
678 unsigned int rod = 0;
681 switch(
id.subdetId()) {
696 std::vector<unsigned short>
ring;
697 std::vector<unsigned short>
rod;
713 const auto parsed =
parse(tTopo,
id);
714 string .push_back(parsed.string );
715 petalNumber.push_back(parsed.petalNumber);
716 isStereo .push_back(tTopo.
isStereo(
id));
717 isRPhi .push_back(tTopo.
isRPhi(
id));
718 isGlued .push_back(parsed.glued);
722 string .resize(size);
723 petalNumber.resize(size);
724 isStereo .resize(size);
725 isRPhi .resize(size);
726 isGlued .resize(size);
730 const auto parsed =
parse(tTopo,
id);
731 string [
index] = parsed.string ;
732 petalNumber[
index] = parsed.petalNumber;
733 isStereo [
index] = tTopo.isStereo(
id);
734 isRPhi [
index] = tTopo.isRPhi(
id);
735 isGlued [
index] = parsed.glued;
750 unsigned int string = 0;
751 unsigned int petalNumber = 0;
755 switch(
id.subdetId()) {
787 isLower.push_back(tTopo.
isLower(
id));
788 isUpper.push_back(tTopo.
isUpper(
id));
789 isStack.push_back(tTopo.
stack(
id) == 0);
805 using DetIdPixel = CombineDetId<DetIdCommon, DetIdPixelOnly>;
806 using DetIdStrip = CombineDetId<DetIdCommon, DetIdOTCommon, DetIdStripOnly>;
807 using DetIdPhase2OT = CombineDetId<DetIdCommon, DetIdOTCommon, DetIdPhase2OTOnly>;
808 using DetIdAll = CombineDetId<DetIdCommon, DetIdPixelOnly, DetIdOTCommon, DetIdStripOnly>;
809 using DetIdAllPhase2 = CombineDetId<DetIdCommon, DetIdPixelOnly, DetIdOTCommon, DetIdPhase2OTOnly>;
1090 trackToken_(consumes<
edm::
View<
reco::Track> >(iConfig.getUntrackedParameter<
edm::InputTag>(
"tracks"))),
1091 clusterTPMapToken_(consumes<
ClusterTPAssociation>(iConfig.getUntrackedParameter<
edm::InputTag>(
"clusterTPMap"))),
1094 pixelSimLinkToken_(consumes<
edm::DetSetVector<
PixelDigiSimLink> >(iConfig.getUntrackedParameter<
edm::InputTag>(
"pixelDigiSimLink"))),
1095 stripSimLinkToken_(consumes<
edm::DetSetVector<
StripDigiSimLink> >(iConfig.getUntrackedParameter<
edm::InputTag>(
"stripDigiSimLink"))),
1096 siphase2OTSimLinksToken_(consumes<
edm::DetSetVector<
PixelDigiSimLink> >(iConfig.getUntrackedParameter<
edm::InputTag>(
"phase2OTSimLink"))),
1097 includeStripHits_(iConfig.getUntrackedParameter<
edm::InputTag>(
"stripDigiSimLink").
label() !=
""),
1098 includePhase2OTHits_(iConfig.getUntrackedParameter<
edm::InputTag>(
"phase2OTSimLink").
label() !=
""),
1099 beamSpotToken_(consumes<
reco::
BeamSpot>(iConfig.getUntrackedParameter<
edm::InputTag>(
"beamSpot"))),
1107 tpNLayersToken_(consumes<
edm::ValueMap<unsigned
int> >(iConfig.getUntrackedParameter<
edm::InputTag>(
"trackingParticleNlayers"))),
1108 tpNPixelLayersToken_(consumes<
edm::ValueMap<unsigned
int> >(iConfig.getUntrackedParameter<
edm::InputTag>(
"trackingParticleNpixellayers"))),
1109 tpNStripStereoLayersToken_(consumes<
edm::ValueMap<unsigned
int> >(iConfig.getUntrackedParameter<
edm::InputTag>(
"trackingParticleNstripstereolayers"))),
1110 builderName_(iConfig.getUntrackedParameter<
std::
string>(
"TTRHBuilder")),
1111 parametersDefinerName_(iConfig.getUntrackedParameter<
std::
string>(
"parametersDefiner")),
1112 includeSeeds_(iConfig.getUntrackedParameter<bool>(
"includeSeeds")),
1113 includeAllHits_(iConfig.getUntrackedParameter<bool>(
"includeAllHits"))
1117 return consumes<edm::View<reco::Track> >(tag);
1120 return consumes<std::vector<short> >(tag);
1122 if(seedTokens_.size() != seedStopReasonTokens_.size()) {
1123 throw cms::Exception(
"Configuration") <<
"Got " << seedTokens_.size() <<
" seed collections, but " << seedStopReasonTokens_.size() <<
" track candidate collections";
1127 if(includeAllHits_) {
1128 if(includeStripHits_ && includePhase2OTHits_) {
1129 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)";
1131 if(!includeStripHits_ && !includePhase2OTHits_) {
1132 throw cms::Exception(
"Configuration") <<
"Neither stripDigiSimLink or phase2OTSimLink are set, please set either one.";
1139 trackingParticleRefToken_ = consumes<TrackingParticleRefVector>(
tpTag);
1142 trackingParticleToken_ = consumes<TrackingParticleCollection>(
tpTag);
1149 t = fs->
make<TTree>(
"tree",
"tree");
1151 t->Branch(
"event" , &ev_event);
1152 t->Branch(
"lumi" , &ev_lumi);
1153 t->Branch(
"run" , &ev_run);
1156 t->Branch(
"trk_px" , &trk_px);
1157 t->Branch(
"trk_py" , &trk_py);
1158 t->Branch(
"trk_pz" , &trk_pz);
1159 t->Branch(
"trk_pt" , &trk_pt);
1160 t->Branch(
"trk_inner_px" , &trk_inner_px);
1161 t->Branch(
"trk_inner_py" , &trk_inner_py);
1162 t->Branch(
"trk_inner_pz" , &trk_inner_pz);
1163 t->Branch(
"trk_inner_pt" , &trk_inner_pt);
1164 t->Branch(
"trk_outer_px" , &trk_outer_px);
1165 t->Branch(
"trk_outer_py" , &trk_outer_py);
1166 t->Branch(
"trk_outer_pz" , &trk_outer_pz);
1167 t->Branch(
"trk_outer_pt" , &trk_outer_pt);
1168 t->Branch(
"trk_eta" , &trk_eta);
1169 t->Branch(
"trk_lambda" , &trk_lambda);
1170 t->Branch(
"trk_cotTheta" , &trk_cotTheta);
1171 t->Branch(
"trk_phi" , &trk_phi);
1172 t->Branch(
"trk_dxy" , &trk_dxy );
1173 t->Branch(
"trk_dz" , &trk_dz );
1174 t->Branch(
"trk_ptErr" , &trk_ptErr );
1175 t->Branch(
"trk_etaErr" , &trk_etaErr );
1176 t->Branch(
"trk_lambdaErr", &trk_lambdaErr);
1177 t->Branch(
"trk_phiErr" , &trk_phiErr );
1178 t->Branch(
"trk_dxyErr" , &trk_dxyErr );
1179 t->Branch(
"trk_dzErr" , &trk_dzErr );
1180 t->Branch(
"trk_refpoint_x", &trk_refpoint_x);
1181 t->Branch(
"trk_refpoint_y", &trk_refpoint_y);
1182 t->Branch(
"trk_refpoint_z", &trk_refpoint_z);
1183 t->Branch(
"trk_nChi2" , &trk_nChi2);
1184 t->Branch(
"trk_q" , &trk_q);
1185 t->Branch(
"trk_nValid" , &trk_nValid );
1186 t->Branch(
"trk_nInvalid" , &trk_nInvalid);
1187 t->Branch(
"trk_nPixel" , &trk_nPixel );
1188 t->Branch(
"trk_nStrip" , &trk_nStrip );
1189 t->Branch(
"trk_nPixelLay", &trk_nPixelLay);
1190 t->Branch(
"trk_nStripLay", &trk_nStripLay);
1191 t->Branch(
"trk_n3DLay" , &trk_n3DLay );
1192 t->Branch(
"trk_nOuterLost", &trk_nOuterLost );
1193 t->Branch(
"trk_nInnerLost", &trk_nInnerLost );
1194 t->Branch(
"trk_algo" , &trk_algo );
1195 t->Branch(
"trk_originalAlgo", &trk_originalAlgo);
1198 t->Branch(
"trk_isHP" , &
trk_isHP );
1205 if(includeAllHits_) {
1215 t->Branch(
"sim_px" , &
sim_px );
1216 t->Branch(
"sim_py" , &
sim_py );
1217 t->Branch(
"sim_pz" , &
sim_pz );
1218 t->Branch(
"sim_pt" , &
sim_pt );
1219 t->Branch(
"sim_eta" , &
sim_eta );
1220 t->Branch(
"sim_phi" , &
sim_phi );
1228 t->Branch(
"sim_q" , &
sim_q );
1232 t->Branch(
"sim_nLay" , &
sim_nLay );
1242 if(includeAllHits_) {
1245 if(includeAllHits_) {
1256 t->Branch(
"pix_x" , &
pix_x );
1257 t->Branch(
"pix_y" , &
pix_y );
1258 t->Branch(
"pix_z" , &
pix_z );
1259 t->Branch(
"pix_xx" , &
pix_xx );
1260 t->Branch(
"pix_xy" , &
pix_xy );
1261 t->Branch(
"pix_yy" , &
pix_yy );
1262 t->Branch(
"pix_yz" , &
pix_yz );
1263 t->Branch(
"pix_zz" , &
pix_zz );
1264 t->Branch(
"pix_zx" , &
pix_zx );
1265 t->Branch(
"pix_radL" , &
pix_radL );
1266 t->Branch(
"pix_bbxi" , &
pix_bbxi );
1267 t->Branch(
"pix_bbxi" , &
pix_bbxi );
1269 if(includeStripHits_){
1279 t->Branch(
"str_x" , &
str_x );
1280 t->Branch(
"str_y" , &
str_y );
1281 t->Branch(
"str_z" , &
str_z );
1282 t->Branch(
"str_xx" , &
str_xx );
1283 t->Branch(
"str_xy" , &
str_xy );
1284 t->Branch(
"str_yy" , &
str_yy );
1285 t->Branch(
"str_yz" , &
str_yz );
1286 t->Branch(
"str_zz" , &
str_zz );
1287 t->Branch(
"str_zx" , &
str_zx );
1288 t->Branch(
"str_radL" , &
str_radL );
1289 t->Branch(
"str_bbxi" , &
str_bbxi );
1298 t->Branch(
"glu_x" , &
glu_x );
1299 t->Branch(
"glu_y" , &
glu_y );
1300 t->Branch(
"glu_z" , &
glu_z );
1301 t->Branch(
"glu_xx" , &
glu_xx );
1302 t->Branch(
"glu_xy" , &
glu_xy );
1303 t->Branch(
"glu_yy" , &
glu_yy );
1304 t->Branch(
"glu_yz" , &
glu_yz );
1305 t->Branch(
"glu_zz" , &
glu_zz );
1306 t->Branch(
"glu_zx" , &
glu_zx );
1307 t->Branch(
"glu_radL" , &
glu_radL );
1308 t->Branch(
"glu_bbxi" , &
glu_bbxi );
1311 if(includePhase2OTHits_){
1320 t->Branch(
"ph2_x" , &
ph2_x );
1321 t->Branch(
"ph2_y" , &
ph2_y );
1322 t->Branch(
"ph2_z" , &
ph2_z );
1323 t->Branch(
"ph2_xx" , &
ph2_xx );
1324 t->Branch(
"ph2_xy" , &
ph2_xy );
1325 t->Branch(
"ph2_yy" , &
ph2_yy );
1326 t->Branch(
"ph2_yz" , &
ph2_yz );
1327 t->Branch(
"ph2_zz" , &
ph2_zz );
1328 t->Branch(
"ph2_zx" , &
ph2_zx );
1329 t->Branch(
"ph2_radL" , &
ph2_radL );
1330 t->Branch(
"ph2_bbxi" , &
ph2_bbxi );
1331 t->Branch(
"ph2_bbxi" , &
ph2_bbxi );
1335 if(includeStripHits_)
inv_detId.book(
"inv", t);
1337 t->Branch(
"inv_type" , &
inv_type );
1354 t->Branch(
"bsp_x" , &
bsp_x ,
"bsp_x/F");
1355 t->Branch(
"bsp_y" , &
bsp_y ,
"bsp_y/F");
1356 t->Branch(
"bsp_z" , &
bsp_z ,
"bsp_z/F");
1357 t->Branch(
"bsp_sigmax" , &
bsp_sigmax ,
"bsp_sigmax/F");
1358 t->Branch(
"bsp_sigmay" , &
bsp_sigmay ,
"bsp_sigmay/F");
1359 t->Branch(
"bsp_sigmaz" , &
bsp_sigmaz ,
"bsp_sigmaz/F");
1363 t->Branch(
"see_px" , &
see_px );
1364 t->Branch(
"see_py" , &
see_py );
1365 t->Branch(
"see_pz" , &
see_pz );
1366 t->Branch(
"see_pt" , &
see_pt );
1367 t->Branch(
"see_eta" , &
see_eta );
1368 t->Branch(
"see_phi" , &
see_phi );
1369 t->Branch(
"see_dxy" , &
see_dxy );
1370 t->Branch(
"see_dz" , &
see_dz );
1376 t->Branch(
"see_chi2" , &
see_chi2 );
1383 t->Branch(
"see_q" , &
see_q );
1389 t->Branch(
"see_algo" , &
see_algo );
1394 if(includeAllHits_) {
1403 t->Branch(
"vtx_x" , &
vtx_x);
1404 t->Branch(
"vtx_y" , &
vtx_y);
1405 t->Branch(
"vtx_z" , &
vtx_z);
1451 trk_inner_px .clear();
1452 trk_inner_py .clear();
1453 trk_inner_pz .clear();
1454 trk_inner_pt .clear();
1455 trk_outer_px .clear();
1456 trk_outer_py .clear();
1457 trk_outer_pz .clear();
1458 trk_outer_pt .clear();
1460 trk_lambda .clear();
1461 trk_cotTheta .clear();
1466 trk_etaErr .clear();
1467 trk_lambdaErr.clear();
1468 trk_phiErr .clear();
1469 trk_dxyErr .clear();
1471 trk_refpoint_x.clear();
1472 trk_refpoint_y.clear();
1473 trk_refpoint_z.clear();
1476 trk_nValid .clear();
1477 trk_nInvalid .clear();
1478 trk_nPixel .clear();
1479 trk_nStrip .clear();
1480 trk_nPixelLay.clear();
1481 trk_nStripLay.clear();
1482 trk_n3DLay .clear();
1483 trk_nOuterLost.clear();
1484 trk_nInnerLost.clear();
1486 trk_originalAlgo.clear();
1693 using namespace edm;
1694 using namespace reco;
1695 using namespace std;
1712 iEvent.
getByToken(trackAssociatorToken_, theAssociator);
1715 LogDebug(
"TrackingNtuple") <<
"Analyzing new event";
1724 TrackingParticleRefKeySet tmpTPkeys;
1730 iEvent.
getByToken(trackingParticleToken_, TPCollectionH);
1731 for(
size_t i=0,
size=TPCollectionH->size();
i<
size; ++
i) {
1737 iEvent.
getByToken(trackingParticleRefToken_, TPCollectionHRefVector);
1738 tmpTPptr = TPCollectionHRefVector.
product();
1739 for(
const auto& ref: *tmpTPptr) {
1740 tmpTPkeys.insert(ref.key());
1746 TrackingParticleRefKeyToIndex tpKeyToIndex;
1747 for(
size_t i=0;
i<tpCollection.
size(); ++
i) {
1748 tpKeyToIndex[tpCollection[
i].key()] =
i;
1753 iEvent.
getByToken(trackingVertexToken_, htv);
1758 TrackingVertexRefKeyToIndex tvKeyToIndex;
1759 for(
size_t i=0;
i<tvs.size(); ++
i) {
1763 tvKeyToIndex[
i] = tvRefs.
size();
1769 iEvent.
getByToken(clusterTPMapToken_, pCluster2TPListH);
1772 iEvent.
getByToken(simHitTPMapToken_, simHitsTPAssoc);
1775 SimHitRefKeyToIndex simHitRefKeyToIndex;
1778 std::vector<TPHitIndex> tpHitList;
1780 std::set<edm::ProductID> hitProductIds;
1781 std::map<edm::ProductID, size_t> seedCollToOffset;
1783 ev_run = iEvent.
id().
run();
1785 ev_event = iEvent.
id().
event();
1789 iEvent.
getByToken(pixelSimLinkToken_, pixelDigiSimLinksHandle);
1790 const auto& pixelDigiSimLinks = *pixelDigiSimLinksHandle;
1793 iEvent.
getByToken(stripSimLinkToken_, stripDigiSimLinksHandle);
1797 iEvent.
getByToken(siphase2OTSimLinksToken_, siphase2OTSimLinksHandle);
1801 iEvent.
getByToken(beamSpotToken_, recoBeamSpotHandle);
1802 BeamSpot const & bs = *recoBeamSpotHandle;
1807 vector<pair<int,int> > monoStereoClusterList;
1808 if(includeAllHits_) {
1810 fillSimHits(tracker, tpKeyToIndex, *simHitsTPAssoc, tTopo, simHitRefKeyToIndex, tpHitList);
1813 fillPixelHits(iEvent, clusterToTPMap, tpKeyToIndex, *simHitsTPAssoc, pixelDigiSimLinks, *theTTRHBuilder, tTopo, simHitRefKeyToIndex, hitProductIds);
1816 if(includeStripHits_){
1817 LogDebug(
"TrackingNtuple") <<
"foundStripSimLink" ;
1818 const auto& stripDigiSimLinks = *stripDigiSimLinksHandle;
1819 fillStripRphiStereoHits(iEvent, clusterToTPMap, tpKeyToIndex, *simHitsTPAssoc, stripDigiSimLinks, *theTTRHBuilder, tTopo, simHitRefKeyToIndex, hitProductIds);
1825 if(includePhase2OTHits_){
1826 LogDebug(
"TrackingNtuple") <<
"foundPhase2OTSimLinks" ;
1827 const auto& phase2OTSimLinks = *siphase2OTSimLinksHandle;
1828 fillPhase2OTHits(iEvent, clusterToTPMap, tpKeyToIndex, *simHitsTPAssoc, phase2OTSimLinks, *theTTRHBuilder, tTopo, simHitRefKeyToIndex, hitProductIds);
1834 fillSeeds(iEvent, tpCollection, tpKeyToIndex, bs, associatorByHits, *theTTRHBuilder, theMF.
product(), monoStereoClusterList, hitProductIds, seedCollToOffset);
1839 iEvent.
getByToken(trackToken_, tracksHandle);
1846 fillTracks(trackRefs, tpCollection, tpKeyToIndex, bs, associatorByHits, *theTTRHBuilder, tTopo, hitProductIds, seedCollToOffset);
1851 fillTrackingParticles(iEvent, iSetup, trackRefs, bs, tpCollection, tvKeyToIndex, associatorByHits, tpHitList);
1875 template <
typename SimLink>
struct GetCluster;
1877 struct GetCluster<PixelDigiSimLink> {
1881 struct GetCluster<StripDigiSimLink> {
1886 template <
typename SimLink>
1888 DetId hitId,
int clusterKey,
1891 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
1894 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
1899 std::map<unsigned int, double> simTrackIdToChargeFraction;
1901 else simTrackIdToChargeFraction = chargeFraction(GetCluster<SimLink>::call(cluster), hitId, digiSimLinks);
1904 auto range = clusterToTPMap.
equal_range( cluster );
1905 if( range.first != range.second ) {
1906 for(
auto ip=range.first; ip != range.second; ++ip ) {
1910 const auto event = trackingParticle->eventId().event();
1911 const auto bx = trackingParticle->eventId().bunchCrossing();
1919 auto tpIndex = tpKeyToIndex.find(trackingParticle.
key());
1920 if( tpIndex == tpKeyToIndex.end())
1924 std::pair<TrackingParticleRef, TrackPSimHitRef> simHitTPpairWithDummyTP(trackingParticle,
TrackPSimHitRef());
1926 auto range = std::equal_range(simHitsTPAssoc.begin(), simHitsTPAssoc.end(),
1929 bool foundElectron =
false;
1931 for(
auto ip = range.first; ip != range.second; ++ip) {
1936 if(
std::abs(TPhit->particleType()) == 11 &&
std::abs(trackingParticle->pdgId()) != 11) {
1937 foundElectron =
true;
1941 simHitKey = TPhit.
key();
1942 simHitID = TPhit.
id();
1952 auto ex =
cms::Exception(
"LogicError") <<
"Did not find SimHit for reco hit DetId " << hitId.
rawId()
1953 <<
" for TP " << trackingParticle.
key() <<
" bx:event " << bx <<
":" <<
event 1954 <<
".\nFound SimHits from detectors ";
1955 for(
auto ip = range.first; ip != range.second; ++ip) {
1958 ex << dId.
rawId() <<
" ";
1960 if(trackingParticle->eventId().event() != 0) {
1961 ex <<
"\nSince this is a TrackingParticle from pileup, check that you're running the pileup mixing in playback mode.";
1965 auto simHitIndex = simHitRefKeyToIndex.at(std::make_pair(simHitKey, simHitID));
1968 double chargeFraction = 0.;
1969 for(
const SimTrack& simtrk: trackingParticle->g4Tracks()) {
1970 auto found = simTrackIdToChargeFraction.find(simtrk.trackId());
1971 if(found != simTrackIdToChargeFraction.end()) {
1972 chargeFraction += found->second;
1982 simhit_hitType[simHitIndex].push_back(static_cast<int>(hitType));
1990 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
1993 SimHitRefKeyToIndex& simHitRefKeyToIndex,
1994 std::vector<TPHitIndex>& tpHitList) {
1996 for(
const auto&
assoc: simHitsTPAssoc) {
1997 auto tpKey =
assoc.first.key();
2001 auto found = tpKeyToIndex.find(tpKey);
2002 if(found == tpKeyToIndex.end())
2004 const auto tpIndex = found->second;
2007 const auto& simhit = *(
assoc.second);
2008 auto detId =
DetId(simhit.detUnitId());
2018 auto simHitKey = std::make_pair(
assoc.second.key(),
assoc.second.id());
2020 if(simHitRefKeyToIndex.find(simHitKey) != simHitRefKeyToIndex.end()) {
2021 for(
const auto& assoc2: simHitsTPAssoc) {
2022 if(std::make_pair(assoc2.second.key(), assoc2.second.id()) == simHitKey) {
2025 auto range1 = std::equal_range(simHitsTPAssoc.begin(), simHitsTPAssoc.end(),
2028 auto range2 = std::equal_range(simHitsTPAssoc.begin(), simHitsTPAssoc.end(),
2032 LogTrace(
"TrackingNtuple") <<
"Earlier TP " << assoc2.first.key() <<
" SimTrack Ids";
2033 for(
const auto&
simTrack: assoc2.first->g4Tracks()) {
2036 for(
auto iHit = range2.first; iHit != range2.second; ++iHit) {
2037 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();
2039 LogTrace(
"TrackingNtuple") <<
"Current TP " <<
assoc.first.key() <<
" SimTrack Ids";
2043 for(
auto iHit = range1.first; iHit != range1.second; ++iHit) {
2044 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();
2048 throw cms::Exception(
"LogicError") <<
"Got second time the SimHit " << simHitKey.first <<
" of " << simHitKey.second <<
", first time with TrackingParticle " << assoc2.first.key() <<
", now with " << tpKey;
2051 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!";
2056 throw cms::Exception(
"LogicError") <<
"Did not find a det unit for DetId " << simhit.detUnitId() <<
" from tracker geometry";
2058 const auto pos = det->surface().toGlobal(simhit.localPosition());
2059 const float tof = simhit.timeOfFlight();
2061 const auto simHitIndex =
simhit_x.size();
2062 simHitRefKeyToIndex[simHitKey] = simHitIndex;
2064 if(includeStripHits_)
simhit_detId.push_back(tTopo, detId);
2080 tpHitList.emplace_back(tpKey, simHitIndex, tof, simhit.detUnitId());
2086 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2091 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2092 std::set<edm::ProductID>& hitProductIds
2095 iEvent.
getByToken(pixelRecHitToken_, pixelHits);
2096 for (
auto it = pixelHits->
begin(); it!=pixelHits->
end(); it++ ) {
2097 const DetId hitId = it->detId();
2098 for (
auto hit = it->begin();
hit!=it->end();
hit++ ) {
2101 hitProductIds.insert(
hit->cluster().
id());
2103 const int key =
hit->cluster().key();
2104 const int lay = tTopo.
layer(hitId);
2106 clusterToTPMap, tpKeyToIndex, simHitsTPAssoc, digiSimLink, simHitRefKeyToIndex,
HitType::Pixel);
2114 pix_x .push_back( ttrh->globalPosition().x() );
2115 pix_y .push_back( ttrh->globalPosition().y() );
2116 pix_z .push_back( ttrh->globalPosition().z() );
2117 pix_xx .push_back( ttrh->globalPositionError().cxx() );
2118 pix_xy .push_back( ttrh->globalPositionError().cyx() );
2119 pix_yy .push_back( ttrh->globalPositionError().cyy() );
2120 pix_yz .push_back( ttrh->globalPositionError().czy() );
2121 pix_zz .push_back( ttrh->globalPositionError().czz() );
2122 pix_zx .push_back( ttrh->globalPositionError().czx() );
2124 pix_radL .push_back( ttrh->surface()->mediumProperties().radLen() );
2125 pix_bbxi .push_back( ttrh->surface()->mediumProperties().xi() );
2126 LogTrace(
"TrackingNtuple") <<
"pixHit cluster=" << key
2129 <<
" rawId=" << hitId.
rawId()
2130 <<
" pos =" << ttrh->globalPosition()
2134 LogTrace(
"TrackingNtuple") <<
" firstMatchingSimHit=" << simHitIdx
2140 <<
" event=" << simHitData.
event[0];
2149 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2154 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2155 std::set<edm::ProductID>& hitProductIds
2159 iEvent.
getByToken(stripRphiRecHitToken_, rphiHits);
2161 iEvent.
getByToken(stripStereoRecHitToken_, stereoHits);
2169 str_x .resize(totalStripHits);
2170 str_y .resize(totalStripHits);
2171 str_z .resize(totalStripHits);
2172 str_xx .resize(totalStripHits);
2173 str_xy .resize(totalStripHits);
2174 str_yy .resize(totalStripHits);
2175 str_yz .resize(totalStripHits);
2176 str_zz .resize(totalStripHits);
2177 str_zx .resize(totalStripHits);
2183 for(
const auto& detset: hits) {
2184 const DetId hitId = detset.detId();
2185 for(
const auto&
hit: detset) {
2188 hitProductIds.insert(
hit.cluster().
id());
2190 const int key =
hit.cluster().key();
2191 const int lay = tTopo.
layer(hitId);
2193 clusterToTPMap, tpKeyToIndex, simHitsTPAssoc, digiSimLink, simHitRefKeyToIndex,
HitType::Strip);
2198 str_x [
key] = ttrh->globalPosition().x();
2199 str_y [
key] = ttrh->globalPosition().y();
2200 str_z [
key] = ttrh->globalPosition().z();
2201 str_xx [
key] = ttrh->globalPositionError().cxx();
2202 str_xy [
key] = ttrh->globalPositionError().cyx();
2203 str_yy [
key] = ttrh->globalPositionError().cyy();
2204 str_yz [
key] = ttrh->globalPositionError().czy();
2205 str_zz [
key] = ttrh->globalPositionError().czz();
2206 str_zx [
key] = ttrh->globalPositionError().czx();
2208 str_radL [
key] = ttrh->surface()->mediumProperties().radLen();
2209 str_bbxi [
key] = ttrh->surface()->mediumProperties().xi();
2210 LogTrace(
"TrackingNtuple") << name <<
" cluster=" << key
2213 <<
" rawId=" << hitId.
rawId()
2214 <<
" pos =" << ttrh->globalPosition()
2218 LogTrace(
"TrackingNtuple") <<
" firstMatchingSimHit=" << simHitIdx
2225 <<
" event=" << simHitData.
event[0];
2231 fill(*rphiHits,
"stripRPhiHit");
2232 fill(*stereoHits,
"stripStereoHit");
2238 std::vector<std::pair<int, int> >& monoStereoClusterList
2241 iEvent.
getByToken(stripMatchedRecHitToken_, matchedHits);
2242 for (
auto it = matchedHits->
begin(); it!=matchedHits->
end(); it++ ) {
2243 const DetId hitId = it->detId();
2244 for (
auto hit = it->begin();
hit!=it->end();
hit++ ) {
2246 const int lay = tTopo.
layer(hitId);
2247 monoStereoClusterList.emplace_back(
hit->monoHit().cluster().key(),
hit->stereoHit().cluster().key());
2253 glu_x .push_back( ttrh->globalPosition().x() );
2254 glu_y .push_back( ttrh->globalPosition().y() );
2255 glu_z .push_back( ttrh->globalPosition().z() );
2256 glu_xx .push_back( ttrh->globalPositionError().cxx() );
2257 glu_xy .push_back( ttrh->globalPositionError().cyx() );
2258 glu_yy .push_back( ttrh->globalPositionError().cyy() );
2259 glu_yz .push_back( ttrh->globalPositionError().czy() );
2260 glu_zz .push_back( ttrh->globalPositionError().czz() );
2261 glu_zx .push_back( ttrh->globalPositionError().czx() );
2262 glu_radL .push_back( ttrh->surface()->mediumProperties().radLen() );
2263 glu_bbxi .push_back( ttrh->surface()->mediumProperties().xi() );
2264 LogTrace(
"TrackingNtuple") <<
"stripMatchedHit" 2265 <<
" cluster0=" <<
hit->stereoHit().cluster().key()
2266 <<
" cluster1=" <<
hit->monoHit().cluster().key()
2269 <<
" rawId=" << hitId.
rawId()
2270 <<
" pos =" << ttrh->globalPosition();
2277 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2282 const SimHitRefKeyToIndex& simHitRefKeyToIndex,
2283 std::set<edm::ProductID>& hitProductIds
2286 iEvent.
getByToken(phase2OTRecHitToken_, phase2OTHits);
2287 for (
auto it = phase2OTHits->
begin(); it!=phase2OTHits->
end(); it++ ) {
2288 const DetId hitId = it->detId();
2289 for (
auto hit = it->begin();
hit!=it->end();
hit++ ) {
2292 hitProductIds.insert(
hit->cluster().
id());
2294 const int key =
hit->cluster().key();
2295 const int lay = tTopo.
layer(hitId);
2297 clusterToTPMap, tpKeyToIndex, simHitsTPAssoc, digiSimLink, simHitRefKeyToIndex,
HitType::Phase2OT);
2305 ph2_x .push_back( ttrh->globalPosition().x() );
2306 ph2_y .push_back( ttrh->globalPosition().y() );
2307 ph2_z .push_back( ttrh->globalPosition().z() );
2308 ph2_xx .push_back( ttrh->globalPositionError().cxx() );
2309 ph2_xy .push_back( ttrh->globalPositionError().cyx() );
2310 ph2_yy .push_back( ttrh->globalPositionError().cyy() );
2311 ph2_yz .push_back( ttrh->globalPositionError().czy() );
2312 ph2_zz .push_back( ttrh->globalPositionError().czz() );
2313 ph2_zx .push_back( ttrh->globalPositionError().czx() );
2314 ph2_radL .push_back( ttrh->surface()->mediumProperties().radLen() );
2315 ph2_bbxi .push_back( ttrh->surface()->mediumProperties().xi() );
2317 LogTrace(
"TrackingNtuple") <<
"phase2 OT cluster=" << key
2320 <<
" rawId=" << hitId.
rawId()
2321 <<
" pos =" << ttrh->globalPosition()
2326 LogTrace(
"TrackingNtuple") <<
" firstMatchingSimHit=" << simHitIdx
2332 <<
" event=" << simHitData.
event[0];
2341 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2346 const std::vector<std::pair<int, int> >& monoStereoClusterList,
2347 const std::set<edm::ProductID>& hitProductIds,
2348 std::map<edm::ProductID, size_t>& seedCollToOffset
2351 for(
size_t iColl=0; iColl < seedTokens_.size(); ++iColl) {
2352 const auto& seedToken = seedTokens_[iColl];
2355 iEvent.
getByToken(seedToken, seedTracksHandle);
2364 const auto& seedStopReasonToken = seedStopReasonTokens_[iColl];
2366 iEvent.
getByToken(seedStopReasonToken, seedStopReasonHandle);
2367 const auto& seedStopReasons = *seedStopReasonHandle;
2368 if(
seedTracks.size() != seedStopReasons.size()) {
2372 throw cms::Exception(
"LogicError") <<
"Got " <<
seedTracks.size() <<
" seeds, but " << seedStopReasons.size() <<
" seed stopping reasons for collections " << labels.
module <<
", " << labels2.
module;
2385 label.ReplaceAll(
"seedTracks",
"");
2386 label.ReplaceAll(
"Seeds",
"");
2387 label.ReplaceAll(
"muonSeeded",
"muonSeededStep");
2392 auto inserted = seedCollToOffset.emplace(
id,
offset);
2393 if(!inserted.second)
2394 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.";
2397 LogTrace(
"TrackingNtuple") <<
"NEW SEED LABEL: " << label <<
" size: " <<
seedTracks.size() <<
" algo=" << algo
2398 <<
" ProductID " <<
id;
2400 for(
size_t iSeed=0; iSeed < seedTrackRefs.
size(); ++iSeed) {
2401 const auto& seedTrackRef = seedTrackRefs[iSeed];
2402 const auto& seedTrack = *seedTrackRef;
2403 const auto& seedRef = seedTrack.seedRef();
2404 const auto&
seed = *seedRef;
2406 const auto seedStopReason = seedStopReasons[iSeed];
2408 if(seedRef.id() !=
id)
2409 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 <<
".";
2411 std::vector<float> sharedFraction;
2412 std::vector<int> tpIdx;
2413 auto foundTPs = recSimColl.
find(seedTrackRef);
2414 if (foundTPs != recSimColl.
end()) {
2415 for(
const auto tpQuality: foundTPs->val) {
2416 sharedFraction.push_back(tpQuality.second);
2417 tpIdx.push_back( tpKeyToIndex.at( tpQuality.first.key() ) );
2423 const int charge = seedTrack.charge();
2424 const float pt = seedFitOk ? seedTrack.pt() : 0;
2425 const float eta = seedFitOk ? seedTrack.eta() : 0;
2426 const float phi = seedFitOk ? seedTrack.phi() : 0;
2427 const int nHits = seedTrack.numberOfValidHits();
2429 const auto seedIndex =
see_fitok.size();
2433 see_px .push_back( seedFitOk ? seedTrack.px() : 0 );
2434 see_py .push_back( seedFitOk ? seedTrack.py() : 0 );
2435 see_pz .push_back( seedFitOk ? seedTrack.pz() : 0 );
2439 see_q .push_back( charge );
2444 see_ptErr .push_back( seedFitOk ? seedTrack.ptError() : 0);
2445 see_etaErr .push_back( seedFitOk ? seedTrack.etaError() : 0);
2446 see_phiErr .push_back( seedFitOk ? seedTrack.phiError() : 0);
2447 see_dxyErr .push_back( seedFitOk ? seedTrack.dxyError() : 0);
2448 see_dzErr .push_back( seedFitOk ? seedTrack.dzError() : 0);
2452 const auto& state = seedTrack.seedRef()->startingState();
2453 const auto&
pos = state.parameters().position();
2454 const auto& mom = state.parameters().momentum();
2478 std::vector<int> hitIdx;
2479 std::vector<int> hitType;
2483 int subid = recHit->geographicalId().subdetId();
2488 if(includeAllHits_) {
2489 checkProductID(hitProductIds, clusterRef.id(),
"seed");
2492 hitIdx.push_back( clusterKey );
2498 if(includeAllHits_) {
2505 std::vector<std::pair<int,int> >::const_iterator
pos =
find( monoStereoClusterList.begin(), monoStereoClusterList.end(), std::make_pair(monoIdx,stereoIdx) );
2506 const auto gluedIndex =
std::distance(monoStereoClusterList.begin(), pos);
2507 if(includeAllHits_)
glu_seeIdx[gluedIndex].push_back(seedIndex);
2508 hitIdx.push_back( gluedIndex );
2513 unsigned int clusterKey;
2514 if(clusterRef.isPhase2()){
2517 clusterKey = clusterRef.cluster_strip().key();
2520 if(includeAllHits_) {
2521 checkProductID(hitProductIds, clusterRef.id(),
"seed");
2522 if(clusterRef.isPhase2()){
2529 hitIdx.push_back( clusterKey );
2530 if(clusterRef.isPhase2()){
2537 LogTrace(
"TrackingNtuple") <<
" not pixel and not Strip detector";
2551 std::vector<GlobalPoint>
gp(2);
2552 std::vector<GlobalError> ge(2);
2553 gp[0] = recHit0->globalPosition();
2554 ge[0] = recHit0->globalPositionError();
2555 gp[1] = recHit1->globalPosition();
2556 ge[1] = recHit1->globalPositionError();
2557 LogTrace(
"TrackingNtuple") <<
"seed " << seedTrackRef.key()
2558 <<
" pt=" << pt <<
" eta=" << eta <<
" phi=" << phi <<
" q=" << charge
2559 <<
" - PAIR - ids: " << recHit0->geographicalId().rawId() <<
" " << recHit1->geographicalId().rawId()
2560 <<
" hitpos: " << gp[0] <<
" " << gp[1]
2561 <<
" trans0: " << (recHit0->transientHits().size()>1 ? recHit0->transientHits()[0]->globalPosition() :
GlobalPoint(0,0,0))
2562 <<
" " << (recHit0->transientHits().size()>1 ? recHit0->transientHits()[1]->globalPosition() :
GlobalPoint(0,0,0))
2563 <<
" trans1: " << (recHit1->transientHits().size()>1 ? recHit1->transientHits()[0]->globalPosition() :
GlobalPoint(0,0,0))
2564 <<
" " << (recHit1->transientHits().size()>1 ? recHit1->transientHits()[1]->globalPosition() :
GlobalPoint(0,0,0))
2565 <<
" eta,phi: " << gp[0].
eta() <<
"," << gp[0].phi();
2566 }
else if (nHits==3) {
2573 gp[0] = recHit0->globalPosition();
2574 ge[0] = recHit0->globalPositionError();
2575 int subid0 = recHit0->geographicalId().subdetId();
2577 gp[1] = recHit1->globalPosition();
2578 ge[1] = recHit1->globalPositionError();
2579 int subid1 = recHit1->geographicalId().subdetId();
2581 gp[2] = recHit2->globalPosition();
2582 ge[2] = recHit2->globalPositionError();
2583 int subid2 = recHit2->geographicalId().subdetId();
2586 float seed_chi2 = rzLine.
chi2();
2589 LogTrace(
"TrackingNtuple") <<
"seed " << seedTrackRef.key()
2590 <<
" pt=" << pt <<
" eta=" << eta <<
" phi=" << phi <<
" q=" << charge
2591 <<
" - TRIPLET - ids: " << recHit0->geographicalId().rawId() <<
" " << recHit1->geographicalId().rawId() <<
" " << recHit2->geographicalId().rawId()
2592 <<
" hitpos: " <<
gp[0] <<
" " <<
gp[1] <<
" " <<
gp[2]
2593 <<
" trans0: " << (recHit0->transientHits().size()>1 ? recHit0->transientHits()[0]->globalPosition() :
GlobalPoint(0,0,0))
2594 <<
" " << (recHit0->transientHits().size()>1 ? recHit0->transientHits()[1]->globalPosition() :
GlobalPoint(0,0,0))
2595 <<
" trans1: " << (recHit1->transientHits().size()>1 ? recHit1->transientHits()[0]->globalPosition() :
GlobalPoint(0,0,0))
2596 <<
" " << (recHit1->transientHits().size()>1 ? recHit1->transientHits()[1]->globalPosition() :
GlobalPoint(0,0,0))
2597 <<
" trans2: " << (recHit2->transientHits().size()>1 ? recHit2->transientHits()[0]->globalPosition() :
GlobalPoint(0,0,0))
2598 <<
" " << (recHit2->transientHits().size()>1 ? recHit2->transientHits()[1]->globalPosition() :
GlobalPoint(0,0,0))
2599 <<
" local: " << recHit2->localPosition()
2601 <<
" eta,phi: " <<
gp[0].eta() <<
"," <<
gp[0].phi()
2602 <<
" pt,chi2: " << seed_pt <<
"," << seed_chi2;
2614 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2619 const std::set<edm::ProductID>& hitProductIds,
2620 const std::map<edm::ProductID, size_t>& seedCollToOffset
2625 LogTrace(
"TrackingNtuple") <<
"NEW TRACK LABEL: " << labels.
module;
2626 for(
size_t iTrack = 0; iTrack<tracks.
size(); ++iTrack) {
2627 const auto& itTrack = tracks[iTrack];
2629 bool isSimMatched =
false;
2630 std::vector<float> sharedFraction;
2631 std::vector<int> tpIdx;
2632 auto foundTPs = recSimColl.
find(itTrack);
2633 if (foundTPs != recSimColl.
end()) {
2634 if (!foundTPs->val.empty()) {
2635 nSimHits = foundTPs->val[0].first->numberOfTrackerHits();
2636 isSimMatched =
true;
2638 for(
const auto tpQuality: foundTPs->val) {
2639 sharedFraction.push_back(tpQuality.second);
2640 tpIdx.push_back( tpKeyToIndex.at( tpQuality.first.key() ) );
2643 int charge = itTrack->charge();
2644 float pt = itTrack->pt();
2645 float eta = itTrack->eta();
2646 const double lambda = itTrack->lambda();
2647 float chi2 = itTrack->normalizedChi2();
2648 float phi = itTrack->phi();
2649 int nHits = itTrack->numberOfValidHits();
2651 trk_px .push_back(itTrack->px());
2652 trk_py .push_back(itTrack->py());
2653 trk_pz .push_back(itTrack->pz());
2654 trk_pt .push_back(pt);
2655 trk_inner_px.push_back(itTrack->innerMomentum().x());
2656 trk_inner_py.push_back(itTrack->innerMomentum().y());
2657 trk_inner_pz.push_back(itTrack->innerMomentum().z());
2658 trk_inner_pt.push_back(itTrack->innerMomentum().rho());
2659 trk_outer_px.push_back(itTrack->outerMomentum().x());
2660 trk_outer_py.push_back(itTrack->outerMomentum().y());
2661 trk_outer_pz.push_back(itTrack->outerMomentum().z());
2662 trk_outer_pt.push_back(itTrack->outerMomentum().rho());
2663 trk_eta .push_back(eta);
2664 trk_lambda .push_back(lambda);
2665 trk_cotTheta .push_back(1/
tan(
M_PI*0.5-lambda));
2666 trk_phi .push_back(phi);
2667 trk_dxy .push_back(itTrack->dxy(bs.
position()));
2668 trk_dz .push_back(itTrack->dz(bs.
position()));
2669 trk_ptErr .push_back(itTrack->ptError());
2670 trk_etaErr .push_back(itTrack->etaError());
2671 trk_lambdaErr.push_back(itTrack->lambdaError());
2672 trk_phiErr .push_back(itTrack->phiError());
2673 trk_dxyErr .push_back(itTrack->dxyError());
2674 trk_dzErr .push_back(itTrack->dzError());
2675 trk_refpoint_x.push_back(itTrack->vx());
2676 trk_refpoint_y.push_back(itTrack->vy());
2677 trk_refpoint_z.push_back(itTrack->vz());
2678 trk_nChi2 .push_back( itTrack->normalizedChi2());
2680 trk_q .push_back(charge);
2690 trk_algo .push_back(itTrack->algo());
2691 trk_originalAlgo.push_back(itTrack->originalAlgo());
2696 auto offset = seedCollToOffset.find(itTrack->seedRef().id());
2697 if(
offset == seedCollToOffset.end()) {
2700 <<
"' refers to seed collection " << itTrack->seedRef().id()
2701 <<
", but that seed collection is not given as an input. The following collections were given as an input " << make_ProductIDMapPrinter(seedCollToOffset);
2704 const auto seedIndex =
offset->second + itTrack->seedRef().key();
2707 throw cms::Exception(
"LogicError") <<
"Track index has already been set for seed " << seedIndex <<
" to " <<
see_trkIdx[seedIndex] <<
"; was trying to set it to " << iTrack;
2713 LogTrace(
"TrackingNtuple") <<
"Track #" << itTrack.key() <<
" with q=" << charge
2714 <<
", pT=" << pt <<
" GeV, eta: " << eta <<
", phi: " << phi
2715 <<
", chi2=" << chi2
2716 <<
", Nhits=" << nHits
2717 <<
", algo=" << itTrack->algoName(itTrack->algo()).c_str()
2719 <<
" seed#=" << itTrack->seedRef().key()
2720 <<
" simMatch=" << isSimMatched
2721 <<
" nSimHits=" << nSimHits
2722 <<
" sharedFraction=" << (sharedFraction.empty()?-1:sharedFraction[0])
2723 <<
" tpIdx=" << (tpIdx.empty()?-1:tpIdx[0]);
2724 std::vector<int> hitIdx;
2725 std::vector<int> hitType;
2727 for(
auto i=itTrack->recHitsBegin();
i!=itTrack->recHitsEnd();
i++) {
2729 DetId hitId = hit->geographicalId();
2736 if (hit->isValid()) {
2740 unsigned int clusterKey;
2741 if(clusterRef.isPixel()){
2743 }
else if(clusterRef.isPhase2()){
2744 clusterKey = clusterRef.cluster_phase2OT().key();
2746 clusterKey = clusterRef.cluster_strip().key();
2749 LogTrace(
"TrackingNtuple") <<
" id: " << hitId.
rawId() <<
" - globalPos =" << hit->globalPosition()
2750 <<
" cluster=" << clusterKey
2751 <<
" clusterRef ID=" << clusterRef.id()
2752 <<
" eta,phi: " << hit->globalPosition().eta() <<
"," << hit->globalPosition().phi();
2753 if(includeAllHits_) {
2754 checkProductID(hitProductIds, clusterRef.id(),
"track");
2755 if(clusterRef.isPixel()){
2757 }
else if(clusterRef.isPhase2()){
2765 hitIdx.push_back(clusterKey);
2766 if(clusterRef.isPixel()){
2768 }
else if(clusterRef.isPhase2()){
2774 LogTrace(
"TrackingNtuple") <<
" - invalid hit";
2780 if(includeStripHits_)
inv_detId.push_back( tTopo, hitId );
2782 inv_type .push_back( hit->getType() );
2797 const TrackingVertexRefKeyToIndex& tvKeyToIndex,
2799 const std::vector<TPHitIndex>& tpHitList
2807 iEvent.
getByToken(tpNLayersToken_, tpNLayersH);
2808 const auto& nLayers_tPCeff = *tpNLayersH;
2810 iEvent.
getByToken(tpNPixelLayersToken_, tpNLayersH);
2811 const auto& nPixelLayers_tPCeff = *tpNLayersH;
2813 iEvent.
getByToken(tpNStripStereoLayersToken_, tpNLayersH);
2814 const auto& nStripMonoAndStereoLayers_tPCeff = *tpNLayersH;
2819 LogTrace(
"TrackingNtuple") <<
"tracking particle pt=" << tp->pt() <<
" eta=" << tp->eta() <<
" phi=" << tp->phi();
2820 bool isRecoMatched =
false;
2821 std::vector<int> tkIdx;
2822 std::vector<float> sharedFraction;
2823 auto foundTracks = simRecColl.
find(tp);
2824 if(foundTracks != simRecColl.
end()) {
2825 isRecoMatched =
true;
2833 for(
const auto& genRef: tp->genParticles()) {
2834 if(genRef.isNonnull())
2838 bool isFromBHadron =
false;
2843 for(
const auto& particle: recoGenParticleTrail) {
2846 isFromBHadron =
true;
2852 LogTrace(
"TrackingNtuple") <<
"matched to tracks = " << make_VectorPrinter(tkIdx) <<
" isRecoMatched=" << isRecoMatched;
2853 sim_event .push_back(tp->eventId().event());
2857 sim_px .push_back(tp->px());
2858 sim_py .push_back(tp->py());
2859 sim_pz .push_back(tp->pz());
2860 sim_pt .push_back(tp->pt());
2861 sim_eta .push_back(tp->eta());
2862 sim_phi .push_back(tp->phi());
2863 sim_q .push_back(tp->charge());
2867 std::vector<int> decayIdx;
2868 for(
const auto&
v: tp->decayVertices())
2869 decayIdx.push_back( tvKeyToIndex.at(
v.key()) );
2877 const double lambdaSim =
M_PI/2 - momentum.theta();
2886 std::vector<int> hitIdx;
2887 int nPixel=0, nStrip=0;
2889 for(
auto ip = rangeHit.first; ip != rangeHit.second; ++ip) {
2893 LogTrace(
"TrackingNtuple") <<
"simhit=" << ip->simHitIdx <<
" type=" <<
static_cast<int>(
type);
2894 hitIdx.push_back(ip->simHitIdx);
2897 throw cms::Exception(
"LogicError") <<
"Encountered SimHit for TP " << tp.key() <<
" with DetId " << detid.rawId() <<
" whose det() is not Tracker but " << detid.det();
2899 const auto subdet = detid.subdetId();
2912 throw cms::Exception(
"LogicError") <<
"Encountered SimHit for TP " << tp.key() <<
" with DetId " << detid.rawId() <<
" whose subdet is not recognized, is " << subdet;
2919 const auto nSimLayers = nLayers_tPCeff[tp];
2920 const auto nSimPixelLayers = nPixelLayers_tPCeff[tp];
2921 const auto nSimStripMonoAndStereoLayers = nStripMonoAndStereoLayers_tPCeff[tp];
2924 sim_n3DLay .push_back( nSimPixelLayers+nSimStripMonoAndStereoLayers );
2933 const TrackingParticleRefKeyToIndex& tpKeyToIndex,
2934 const unsigned int seedOffset) {
2938 for(
const auto& keyVal: simRecColl) {
2939 const auto& tpRef = keyVal.key;
2940 auto found = tpKeyToIndex.find(tpRef.key());
2941 if(found == tpKeyToIndex.end())
2942 throw cms::Exception(
"Assert") << __FILE__ <<
":" << __LINE__ <<
" fillTrackingParticlesForSeeds: tpRef.key() " << tpRef.key() <<
" not found from tpKeyToIndex. tpKeyToIndex size " << tpKeyToIndex.size();
2943 const auto tpIndex = found->second;
2944 for(
const auto& pair: keyVal.val) {
2945 const auto& seedRef = pair.first->seedRef();
2946 sim_seedIdx[tpIndex].push_back(seedOffset + seedRef.key());
2954 for(
size_t iVertex=0,
size=vertices.size(); iVertex<
size; ++iVertex) {
2956 vtx_x.push_back(vertex.
x());
2957 vtx_y.push_back(vertex.
y());
2958 vtx_z.push_back(vertex.
z());
2967 std::vector<int> trkIdx;
2970 if(iTrack->id() != tracks.
id())
2973 trkIdx.push_back(iTrack->key());
2976 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;
2985 const TrackingParticleRefKeyToIndex& tpKeyToIndex
2987 int current_event = -1;
2988 for(
const auto& ref: trackingVertices) {
2998 processType = v.
g4Vertices()[0].processType();
3010 for(
const auto& tpRef: tps) {
3011 auto found = tpKeyToIndex.find(tpRef.key());
3012 if(found != tpKeyToIndex.end()) {
3013 idx.push_back(found->second);
3018 std::vector<int> sourceIdx;
3019 std::vector<int> daughterIdx;
3033 desc.
addUntracked<std::vector<edm::InputTag> >(
"seedTracks", std::vector<edm::InputTag>{
3045 desc.
addUntracked<std::vector<edm::InputTag> >(
"trackCandidates", std::vector<edm::InputTag>{
3059 desc.
addUntracked<
bool>(
"trackingParticlesRef",
false);
3081 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
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
EventNumber_t event() const
void fillTrackingVertices(const TrackingVertexRefVector &trackingVertices, const TrackingParticleRefKeyToIndex &tpKeyToIndex)
const TrackerGeomDet * idToDetUnit(DetId) const
Return the pointer to the GeomDetUnit corresponding to a given DetId.
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
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< 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
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
void fillTracks(const edm::RefToBaseVector< reco::Track > &tracks, const TrackingParticleRefVector &tpCollection, const TrackingParticleRefKeyToIndex &tpKeyToIndex, const reco::BeamSpot &bs, const reco::TrackToTrackingParticleAssociator &associatorByHits, const TransientTrackingRecHitBuilder &theTTRHBuilder, const TrackerTopology &tTopo, const std::set< edm::ProductID > &hitProductIds, const std::map< edm::ProductID, size_t > &seedToCollIndex)
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
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
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 > inv_isBarrel
uint32_t rawId() const
get the raw id
std::vector< unsigned short > ring
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
unsigned int module(const DetId &id) const
std::vector< int > sim_event
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::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
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
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_
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
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.
int numberOfValidPixelHits() const
edm::Ref< edm::PSimHitContainer > TrackPSimHitRef
std::vector< std::vector< int > > str_simHitIdx
std::vector< float > see_statePt
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