@@ -688,6 +688,9 @@ class TrackingNtuple : public edm::one::EDAnalyzer<edm::one::SharedResources> {
688688
689689 std::string builderName_;
690690 const bool includeSeeds_;
691+ const bool seedUniqueCheck_;
692+ const bool seedAlgoDetect_;
693+ std::vector<unsigned int > seedAlgos_;
691694 const bool includeTrackCandidates_;
692695 const bool addSeedCurvCov_;
693696 const bool includeAllHits_;
@@ -1369,8 +1372,10 @@ class TrackingNtuple : public edm::one::EDAnalyzer<edm::one::SharedResources> {
13691372 std::vector<unsigned int > see_algo;
13701373 std::vector<unsigned short > see_stopReason;
13711374 std::vector<unsigned short > see_nCands;
1372- std::vector<int > see_trkIdx;
1373- std::vector<int > see_tcandIdx;
1375+ std::vector<unsigned int > see_nTrk;
1376+ std::vector<unsigned int > see_nTCand;
1377+ std::vector<std::vector<unsigned int >> see_trkIdx;
1378+ std::vector<std::vector<unsigned int >> see_tcandIdx;
13741379 std::vector<short > see_isTrue;
13751380 std::vector<int > see_bestSimTrkIdx;
13761381 std::vector<float > see_bestSimTrkShareFrac;
@@ -1454,6 +1459,10 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig)
14541459 tpNStripStereoLayersToken_(consumes<edm::ValueMap<unsigned int >>(
14551460 iConfig.getUntrackedParameter<edm::InputTag>(" trackingParticleNstripstereolayers" ))),
14561461 includeSeeds_(iConfig.getUntrackedParameter<bool >(" includeSeeds" )),
1462+ seedUniqueCheck_(includeSeeds_ && iConfig.getUntrackedParameter<bool >(" seedUniqueCheck" )),
1463+ seedAlgoDetect_(includeSeeds_ && iConfig.getUntrackedParameter<bool >(" seedAlgoDetect" )),
1464+ seedAlgos_(seedAlgoDetect_ ? std::vector<unsigned int >()
1465+ : iConfig.getUntrackedParameter<std::vector<unsigned int>>(" seedAlgos" )),
14571466 includeTrackCandidates_(iConfig.getUntrackedParameter<bool >(" includeTrackCandidates" )),
14581467 addSeedCurvCov_(iConfig.getUntrackedParameter<bool >(" addSeedCurvCov" )),
14591468 includeAllHits_(iConfig.getUntrackedParameter<bool >(" includeAllHits" )),
@@ -1476,6 +1485,37 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig)
14761485 throw cms::Exception (" Configuration" ) << " Got " << seedTokens_.size () << " seed collections, but "
14771486 << seedStopInfoTokens_.size () << " track candidate collections" ;
14781487 }
1488+ if (seedAlgoDetect_) {
1489+ for (auto const & token : seedStopInfoTokens_) {
1490+ edm::EDConsumerBase::Labels labels;
1491+ labelsForToken (token, labels);
1492+
1493+ TString label = labels.module ;
1494+ // format label to match algoName
1495+ label.ReplaceAll (" seedTracks" , " " );
1496+ label.ReplaceAll (" Seeds" , " " );
1497+ label.ReplaceAll (" TrackCandidates" , " " );
1498+ label.ReplaceAll (" muonSeeded" , " muonSeededStep" );
1499+ // for HLT seeds
1500+ label.ReplaceAll (" FromPixelTracks" , " " );
1501+ label.ReplaceAll (" PFLowPixel" , " " );
1502+ label.ReplaceAll (" PFlowPixel" , " " );
1503+ label.ReplaceAll (" hltIni" , " ini" );
1504+ label.ReplaceAll (" hltHigh" , " high" );
1505+ label.ReplaceAll (" hltDoubletRecovery" , " pixelPairStep" );
1506+ label.ReplaceAll (" hltInputLST" , " hltPixel" );
1507+
1508+ int algo = reco::TrackBase::algoByName (label.Data ());
1509+ if (algo == 0 )
1510+ throw cms::Exception (" LogicError" ) << " Failed to detect seed algo for collection " << labels.module << " :"
1511+ << labels.productInstance << " last transform is " << label;
1512+ seedAlgos_.push_back (algo);
1513+ }
1514+ } else {
1515+ if (seedAlgos_.size () != seedTokens_.size ())
1516+ throw cms::Exception (" Configuration" )
1517+ << " Got " << seedTokens_.size () << " seed collections, but " << seedAlgos_.size () << " algo overrides" ;
1518+ }
14791519 }
14801520 if (includeTrackCandidates_)
14811521 candidateTokens_ =
@@ -1964,9 +2004,12 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig)
19642004 t->Branch (" see_algo" , &see_algo);
19652005 t->Branch (" see_stopReason" , &see_stopReason);
19662006 t->Branch (" see_nCands" , &see_nCands);
2007+ t->Branch (" see_nTrk" , &see_nTrk);
19672008 t->Branch (" see_trkIdx" , &see_trkIdx);
1968- if (includeTrackCandidates_)
2009+ if (includeTrackCandidates_) {
2010+ t->Branch (" see_nTCand" , &see_nTCand);
19692011 t->Branch (" see_tcandIdx" , &see_tcandIdx);
2012+ }
19702013 if (includeTrackingParticles_) {
19712014 t->Branch (" see_simTrkIdx" , &see_simTrkIdx);
19722015 t->Branch (" see_simTrkShareFrac" , &see_simTrkShareFrac);
@@ -2380,6 +2423,8 @@ void TrackingNtuple::clearVariables() {
23802423 see_algo.clear ();
23812424 see_stopReason.clear ();
23822425 see_nCands.clear ();
2426+ see_nTrk.clear ();
2427+ see_nTCand.clear ();
23832428 see_trkIdx.clear ();
23842429 see_tcandIdx.clear ();
23852430 see_isTrue.clear ();
@@ -3429,6 +3474,7 @@ void TrackingNtuple::fillSeeds(const edm::Event& iEvent,
34293474 TSCBLBuilderNoMaterial tscblBuilder;
34303475 for (size_t iColl = 0 ; iColl < seedTokens_.size (); ++iColl) {
34313476 const auto & seedToken = seedTokens_[iColl];
3477+ const auto algo = seedAlgos_[iColl];
34323478
34333479 edm::Handle<edm::View<reco::Track>> seedTracksHandle;
34343480 iEvent.getByToken (seedToken, seedTracksHandle);
@@ -3469,28 +3515,17 @@ void TrackingNtuple::fillSeeds(const edm::Event& iEvent,
34693515 reco::RecoToSimCollection recSimColl = associatorByHits.associateRecoToSim (seedTrackRefs, tpCollection);
34703516 reco::SimToRecoCollection simRecColl = associatorByHits.associateSimToReco (seedTrackRefs, tpCollection);
34713517
3472- TString label = labels.module ;
3473- // format label to match algoName
3474- label.ReplaceAll (" seedTracks" , " " );
3475- label.ReplaceAll (" Seeds" , " " );
3476- label.ReplaceAll (" muonSeeded" , " muonSeededStep" );
3477- // for HLT seeds
3478- label.ReplaceAll (" FromPixelTracks" , " " );
3479- label.ReplaceAll (" PFLowPixel" , " " );
3480- label.ReplaceAll (" hltDoubletRecovery" , " pixelPairStep" ); // random choice
3481- int algo = reco::TrackBase::algoByName (label.Data ());
3482-
34833518 edm::ProductID id = seedTracks[0 ].seedRef ().id ();
34843519 const auto offset = see_fitok.size ();
34853520 auto inserted = seedCollToOffset.emplace (id, offset);
34863521 if (!inserted.second )
34873522 throw cms::Exception (" Configuration" )
34883523 << " Trying to add seeds with ProductID " << id << " for a second time from collection " << labels.module
3489- << " , seed algo " << label << " . Typically this is caused by a configuration problem." ;
3524+ << " , seed algo " << algo << " . Typically this is caused by a configuration problem." ;
34903525 see_offset.push_back (offset);
34913526
3492- LogTrace (" TrackingNtuple" ) << " NEW SEED LABEL: " << label << " size: " << seedTracks.size () << " algo= " << algo
3493- << " ProductID " << id;
3527+ LogTrace (" TrackingNtuple" ) << " NEW SEED LABEL: for " << labels. module << " size: " << seedTracks.size ()
3528+ << " algo= " << algo << " ProductID " << id;
34943529
34953530 for (size_t iSeed = 0 ; iSeed < seedTrackRefs.size (); ++iSeed) {
34963531 const auto & seedTrackRef = seedTrackRefs[iSeed];
@@ -3592,8 +3627,12 @@ void TrackingNtuple::fillSeeds(const edm::Event& iEvent,
35923627 see_stateCurvCov.push_back (std::move (cov));
35933628 }
35943629
3595- see_trkIdx.push_back (-1 ); // to be set correctly in fillTracks
3596- see_tcandIdx.push_back (-1 ); // to be set correctly in fillCandidates
3630+ // to be set correctly in fillTracks
3631+ see_nTrk.push_back (0 );
3632+ see_nTCand.push_back (0 );
3633+ see_trkIdx.push_back ({});
3634+ see_tcandIdx.push_back ({});
3635+
35973636 if (includeTrackingParticles_) {
35983637 see_simTrkIdx.push_back (tpIdx);
35993638 see_simTrkShareFrac.push_back (sharedFraction);
@@ -3967,11 +4006,12 @@ void TrackingNtuple::fillTracks(const edm::RefToBaseVector<reco::Track>& tracks,
39674006
39684007 const auto seedIndex = offset->second + itTrack->seedRef ().key ();
39694008 trk_seedIdx.push_back (seedIndex);
3970- if (see_trkIdx [seedIndex] != - 1 ) {
4009+ if (seedUniqueCheck_ && see_nTrk [seedIndex] > 0 ) {
39714010 throw cms::Exception (" LogicError" ) << " Track index has already been set for seed " << seedIndex << " to "
3972- << see_trkIdx[seedIndex] << " ; was trying to set it to " << iTrack;
4011+ << see_trkIdx[seedIndex][ 0 ] << " ; was trying to set it to " << iTrack;
39734012 }
3974- see_trkIdx[seedIndex] = iTrack;
4013+ see_nTrk[seedIndex]++;
4014+ see_trkIdx[seedIndex].push_back (iTrack);
39754015 }
39764016 trk_vtxIdx.push_back (-1 ); // to be set correctly in fillVertices
39774017 if (includeTrackingParticles_) {
@@ -4260,12 +4300,13 @@ void TrackingNtuple::fillCandidates(const edm::Handle<TrackCandidateCollection>&
42604300
42614301 const auto seedIndex = offset->second + aCand.seedRef ().key ();
42624302 tcand_seedIdx.push_back (seedIndex);
4263- if (see_tcandIdx [seedIndex] != - 1 ) {
4303+ if (seedUniqueCheck_ && see_nTCand [seedIndex] > 0 ) {
42644304 throw cms::Exception (" LogicError" )
4265- << " Track cand index has already been set for seed " << seedIndex << " to " << see_tcandIdx[seedIndex]
4305+ << " Track cand index has already been set for seed " << seedIndex << " to " << see_tcandIdx[seedIndex][ 0 ]
42664306 << " ; was trying to set it to " << iglobCand << " current " << iCand;
42674307 }
4268- see_tcandIdx[seedIndex] = iglobCand;
4308+ see_nTCand[seedIndex]++;
4309+ see_tcandIdx[seedIndex].push_back (iglobCand);
42694310 }
42704311 tcand_vtxIdx.push_back (-1 ); // to be set correctly in fillVertices
42714312 if (includeTrackingParticles_) {
@@ -4667,6 +4708,9 @@ void TrackingNtuple::fillDescriptions(edm::ConfigurationDescriptions& descriptio
46674708 desc.addUntracked <std::string>(" TTRHBuilder" , " WithTrackAngle" )
46684709 ->setComment (" currently not used: keep for possible future use" );
46694710 desc.addUntracked <bool >(" includeSeeds" , false );
4711+ desc.addOptionalUntracked <bool >(" seedUniqueCheck" , true );
4712+ desc.addOptionalUntracked <bool >(" seedAlgoDetect" , true );
4713+ desc.addOptionalUntracked <std::vector<unsigned int >>(" seedAlgos" );
46704714 desc.addUntracked <bool >(" includeTrackCandidates" , false );
46714715 desc.addUntracked <bool >(" addSeedCurvCov" , false );
46724716 desc.addUntracked <bool >(" includeAllHits" , false );
0 commit comments