Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Better consumes interface for TrackerHitAssociator #8999

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
40 changes: 17 additions & 23 deletions SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h
Expand Up @@ -52,19 +52,25 @@
#include <vector>

typedef std::pair<uint32_t, EncodedEventId> SimHitIdpr;

class TrackerHitAssociator {

public:
struct Config {
Config(const edm::ParameterSet& conf, edm::ConsumesCollector && iC);
bool doPixel_, doStrip_, doTrackAssoc_, assocHitbySimTrack_;
edm::EDGetTokenT<edm::DetSetVector<StripDigiSimLink> > stripToken_;
edm::EDGetTokenT<edm::DetSetVector<PixelDigiSimLink> > pixelToken_;
std::vector<edm::EDGetTokenT<CrossingFrame<PSimHit> > > cfTokens_;
std::vector<edm::EDGetTokenT<std::vector<PSimHit> > > simHitTokens_;
};

// The constructor supporting the consumes interface and tokens
TrackerHitAssociator(const edm::Event& e, const Config& config);

TrackerHitAssociator(const edm::ParameterSet& conf, edm::ConsumesCollector&& iC); // deprecated ctor supports consumes but not tokens
TrackerHitAssociator(const edm::Event& e); // deprecated simple ctor
TrackerHitAssociator(const edm::Event& e, const edm::ParameterSet& conf); // deprecated ctor with config

// Constructor for consumes.. it can be better..eg, this should replace the other constructors
// but there are too many consts
// in all the wrong places
TrackerHitAssociator(const edm::ParameterSet& conf, edm::ConsumesCollector && iC);
// Simple constructor
TrackerHitAssociator(const edm::Event& e); // deprecated
// Constructor with configurables
TrackerHitAssociator(const edm::Event& e, const edm::ParameterSet& conf); // deprecated
// Destructor
virtual ~TrackerHitAssociator(){}

Expand Down Expand Up @@ -96,9 +102,6 @@ class TrackerHitAssociator {
std::vector<PSimHit> associateMultiRecHit(const SiTrackerMultiRecHit * multirechit) const;
std::vector<SimHitIdpr> associateGSMatchedRecHit(const SiTrackerGSMatchedRecHit2D * gsmrechit) const;

void processEvent(const edm::Event& theEvent);
void clearEvent();

typedef std::map<unsigned int, std::vector<PSimHit> > simhit_map;
simhit_map SimHitMap;
typedef std::map<simHitCollectionID, std::vector<PSimHit> > simhit_collectionMap;
Expand All @@ -107,21 +110,12 @@ class TrackerHitAssociator {
private:
typedef std::vector<std::string> vstring;

void makeMaps(const edm::Event& theEvent);

void makeMaps(const edm::Event& theEvent, const Config& config);
void makeMaps(const edm::Event& theEvent, const vstring& trackerContainers); // deprecated

edm::Handle< edm::DetSetVector<StripDigiSimLink> > stripdigisimlink;
edm::Handle< edm::DetSetVector<PixelDigiSimLink> > pixeldigisimlink;

bool doPixel_, doStrip_, doTrackAssoc_, assocHitbySimTrack_;
edm::EDGetTokenT<edm::DetSetVector<StripDigiSimLink> > stripToken_;
edm::EDGetTokenT<edm::DetSetVector<PixelDigiSimLink> > pixelToken_;
std::vector<edm::EDGetTokenT<CrossingFrame<PSimHit> > > cfTokens_;
std::vector<edm::EDGetTokenT<std::vector<PSimHit> > > simHitTokens_;

};

};

#endif

67 changes: 42 additions & 25 deletions SimTracker/TrackerHitAssociation/src/TrackerHitAssociator.cc
Expand Up @@ -53,10 +53,29 @@ TrackerHitAssociator::TrackerHitAssociator(const edm::Event& e) :
}

//
// Constructor with configurables. Supports consumes interface
// Constructor supporting consumes but not tokens (deprecated)
//

TrackerHitAssociator::TrackerHitAssociator(const edm::ParameterSet& conf, edm::ConsumesCollector && iC) :
doPixel_( conf.getParameter<bool>("associatePixel") ),
doStrip_( conf.getParameter<bool>("associateStrip") ),
doTrackAssoc_( conf.getParameter<bool>("associateRecoTracks") ),
assocHitbySimTrack_( conf.existsAs<bool>("associateHitbySimTrack") ? conf.getParameter<bool>("associateHitbySimTrack") : false) {

if(doStrip_) iC.consumes<edm::DetSetVector<StripDigiSimLink> >(edm::InputTag("simSiStripDigis"));
if(doPixel_) iC.consumes<edm::DetSetVector<PixelDigiSimLink> >(edm::InputTag("simSiPixelDigis"));
if(!doTrackAssoc_) {
vstring trackerContainers(conf.getParameter<vstring>("ROUList"));
for(auto const& trackerContainer : trackerContainers) {
iC.consumes<CrossingFrame<PSimHit> >(edm::InputTag("mix", trackerContainer));
iC.consumes<std::vector<PSimHit> >(edm::InputTag("g4SimHits", trackerContainer));
}
}
}

//
// Constructor for Config helper class
//
TrackerHitAssociator::Config::Config(const edm::ParameterSet& conf, edm::ConsumesCollector && iC) :
doPixel_( conf.getParameter<bool>("associatePixel") ),
doStrip_( conf.getParameter<bool>("associateStrip") ),
doTrackAssoc_( conf.getParameter<bool>("associateRecoTracks") ),
Expand All @@ -65,7 +84,7 @@ TrackerHitAssociator::TrackerHitAssociator(const edm::ParameterSet& conf, edm::C
if(doStrip_) stripToken_ = iC.consumes<edm::DetSetVector<StripDigiSimLink> >(edm::InputTag("simSiStripDigis"));
if(doPixel_) pixelToken_ = iC.consumes<edm::DetSetVector<PixelDigiSimLink> >(edm::InputTag("simSiPixelDigis"));
if(!doTrackAssoc_) {
vstring trackerContainers(conf.getParameter<vstring>("ROUList"));
std::vector<std::string> trackerContainers(conf.getParameter<std::vector<std::string> >("ROUList"));
cfTokens_.reserve(trackerContainers.size());
simHitTokens_.reserve(trackerContainers.size());
for(auto const& trackerContainer : trackerContainers) {
Expand All @@ -75,6 +94,23 @@ TrackerHitAssociator::TrackerHitAssociator(const edm::ParameterSet& conf, edm::C
}
}

//
// Constructor supporting consumes interface
//
TrackerHitAssociator::TrackerHitAssociator(const edm::Event& e, const TrackerHitAssociator::Config& config) :
doPixel_(config.doPixel_),
doStrip_(config.doStrip_),
doTrackAssoc_(config.doTrackAssoc_),
assocHitbySimTrack_(config.assocHitbySimTrack_) {
//if track association there is no need to access the input collections
if(!doTrackAssoc_) {
makeMaps(e, config);
}

if(doStrip_) e.getByToken(config.stripToken_, stripdigisimlink);
if(doPixel_) e.getByToken(config.pixelToken_, pixeldigisimlink);
}

//
// Constructor with configurables (deprecated)
//
Expand All @@ -94,30 +130,13 @@ TrackerHitAssociator::TrackerHitAssociator(const edm::Event& e, const edm::Param
if(doPixel_) e.getByLabel("simSiPixelDigis", pixeldigisimlink);
}

void TrackerHitAssociator::processEvent(const edm::Event& e) {
//if track association there is no need to access the input collections
if(!doTrackAssoc_) {
makeMaps(e);
}

if(doStrip_) e.getByToken(stripToken_, stripdigisimlink);
if(doPixel_) e.getByToken(pixelToken_, pixeldigisimlink);
}

void TrackerHitAssociator::clearEvent() {
SimHitMap.clear();
SimHitCollMap.clear();
}

void TrackerHitAssociator::makeMaps(const edm::Event& theEvent) {
void TrackerHitAssociator::makeMaps(const edm::Event& theEvent, const TrackerHitAssociator::Config& config) {
// Step A: Get Inputs
// The collections are specified via ROUList in the configuration, and can
// be either crossing frames (e.g., mix/g4SimHitsTrackerHitsTIBLowTof)
// or just PSimHits (e.g., g4SimHits/TrackerHitsTIBLowTof)

clearEvent();

for(auto const& cfToken : cfTokens_) {
for(auto const& cfToken : config.cfTokens_) {
edm::Handle<CrossingFrame<PSimHit> > cf_simhit;
int Nhits = 0;
if (theEvent.getByToken(cfToken, cf_simhit)) {
Expand All @@ -140,7 +159,7 @@ void TrackerHitAssociator::makeMaps(const edm::Event& theEvent) {
// std::cout << "simHits from crossing frames; map size = " << SimHitCollMap.size() << ", Hit count = " << Nhits << std::endl;
}
}
for(auto const& simHitToken : simHitTokens_) {
for(auto const& simHitToken : config.simHitTokens_) {
edm::Handle<std::vector<PSimHit> > simHits;
int Nhits = 0;
if(theEvent.getByToken(simHitToken, simHits)) {
Expand Down Expand Up @@ -171,8 +190,6 @@ void TrackerHitAssociator::makeMaps(const edm::Event& theEvent, const vstring& t
// be either crossing frames (e.g., mix/g4SimHitsTrackerHitsTIBLowTof)
// or just PSimHits (e.g., g4SimHits/TrackerHitsTIBLowTof)

clearEvent();

for(auto const& trackerContainer : trackerContainers) {
edm::Handle<CrossingFrame<PSimHit> > cf_simhit;
edm::InputTag tag_cf("mix", trackerContainer);
Expand Down
2 changes: 1 addition & 1 deletion Validation/GlobalRecHits/interface/GlobalRecHitsAnalyzer.h
Expand Up @@ -221,7 +221,7 @@ class GlobalRecHitsAnalyzer : public DQMEDAnalyzer
projectHit( const PSimHit& hit,
const StripGeomDetUnit* stripDet,
const BoundPlane& plane);
TrackerHitAssociator trackerHitAssociator_;
TrackerHitAssociator::Config trackerHitAssociatorConfig_;

// SiPxl

Expand Down
2 changes: 1 addition & 1 deletion Validation/GlobalRecHits/interface/GlobalRecHitsProducer.h
Expand Up @@ -269,7 +269,7 @@ class GlobalRecHitsProducer : public edm::EDProducer
projectHit( const PSimHit& hit,
const StripGeomDetUnit* stripDet,
const BoundPlane& plane);
TrackerHitAssociator trackerHitAssociator_;
TrackerHitAssociator::Config trackerHitAssociatorConfig_;

// SiPxl

Expand Down
8 changes: 2 additions & 6 deletions Validation/GlobalRecHits/src/GlobalRecHitsAnalyzer.cc
Expand Up @@ -15,7 +15,7 @@ using namespace std;

GlobalRecHitsAnalyzer::GlobalRecHitsAnalyzer(const edm::ParameterSet& iPSet) :
fName(""), verbosity(0), frequency(0), label(""), getAllProvenances(false),
printProvenanceInfo(false), trackerHitAssociator_(iPSet, consumesCollector()), count(0)
printProvenanceInfo(false), trackerHitAssociatorConfig_(iPSet, consumesCollector()), count(0)
{
consumesMany<edm::SortedCollection<HBHERecHit, edm::StrictWeakOrdering<HBHERecHit> > >();
consumesMany<edm::SortedCollection<HFRecHit, edm::StrictWeakOrdering<HFRecHit> > >();
Expand Down Expand Up @@ -913,15 +913,13 @@ void GlobalRecHitsAnalyzer::fillTrk(const edm::Event& iEvent,
validstrip = false;
}

TrackerHitAssociator& associate = trackerHitAssociator_;
associate.processEvent(iEvent);
TrackerHitAssociator associate(iEvent, trackerHitAssociatorConfig_);

edm::ESHandle<TrackerGeometry> pDD;
iSetup.get<TrackerDigiGeometryRecord>().get(pDD);
if (!pDD.isValid()) {
edm::LogWarning(MsgLoggerCat)
<< "Unable to find TrackerDigiGeometry in event!";
associate.clearEvent();
return;
}
const TrackerGeometry &tracker(*pDD);
Expand Down Expand Up @@ -1139,7 +1137,6 @@ void GlobalRecHitsAnalyzer::fillTrk(const edm::Event& iEvent,
if (!geom.isValid()) {
edm::LogWarning(MsgLoggerCat)
<< "Unable to find TrackerDigiGeometry in event!";
associate.clearEvent();
return;
}

Expand Down Expand Up @@ -1278,7 +1275,6 @@ void GlobalRecHitsAnalyzer::fillTrk(const edm::Event& iEvent,
if (verbosity > 0)
edm::LogInfo(MsgLoggerCat) << eventout << "\n";

associate.clearEvent();
return;
}

Expand Down
9 changes: 2 additions & 7 deletions Validation/GlobalRecHits/src/GlobalRecHitsProducer.cc
Expand Up @@ -12,7 +12,7 @@

GlobalRecHitsProducer::GlobalRecHitsProducer(const edm::ParameterSet& iPSet) :
fName(""), verbosity(0), frequency(0), label(""), getAllProvenances(false),
printProvenanceInfo(false), trackerHitAssociator_(iPSet, consumesCollector()), count(0)
printProvenanceInfo(false), trackerHitAssociatorConfig_(iPSet, consumesCollector()), count(0)
{
std::string MsgLoggerCat = "GlobalRecHitsProducer_GlobalRecHitsProducer";

Expand Down Expand Up @@ -892,15 +892,13 @@ void GlobalRecHitsProducer::fillTrk(edm::Event& iEvent,
return;
}

TrackerHitAssociator& associate = trackerHitAssociator_;
associate.processEvent(iEvent);
TrackerHitAssociator associate(iEvent, trackerHitAssociatorConfig_);

edm::ESHandle<TrackerGeometry> pDD;
iSetup.get<TrackerDigiGeometryRecord>().get(pDD);
if (!pDD.isValid()) {
edm::LogWarning(MsgLoggerCat)
<< "Unable to find TrackerDigiGeometry in event!";
associate.clearEvent();
return;
}
const TrackerGeometry &tracker(*pDD);
Expand Down Expand Up @@ -1132,7 +1130,6 @@ void GlobalRecHitsProducer::fillTrk(edm::Event& iEvent,
if (!recHitColl.isValid()) {
edm::LogWarning(MsgLoggerCat)
<< "Unable to find SiPixelRecHitCollection in event!";
associate.clearEvent();
return;
}

Expand All @@ -1142,7 +1139,6 @@ void GlobalRecHitsProducer::fillTrk(edm::Event& iEvent,
if (!geom.isValid()) {
edm::LogWarning(MsgLoggerCat)
<< "Unable to find TrackerDigiGeometry in event!";
associate.clearEvent();
return;
}
//const TrackerGeometry& theTracker(*geom);
Expand Down Expand Up @@ -1287,7 +1283,6 @@ void GlobalRecHitsProducer::fillTrk(edm::Event& iEvent,
if (verbosity > 0)
edm::LogInfo(MsgLoggerCat) << eventout << "\n";

associate.clearEvent();
return;
}

Expand Down
Expand Up @@ -85,7 +85,7 @@ class SiPixelTrackingRecHitsValid : public DQMEDAnalyzer

private:

TrackerHitAssociator trackerHitAssociator_;
TrackerHitAssociator::Config trackerHitAssociatorConfig_;
//TrackLocalAngle *anglefinder_;
DQMStore* dbe_;
bool runStandalone;
Expand Down
Expand Up @@ -421,7 +421,7 @@ class SiStripTrackingRecHitsValid : public DQMEDAnalyzer


edm::ParameterSet conf_;
TrackerHitAssociator trackerHitAssociator_;
TrackerHitAssociator::Config trackerHitAssociatorConfig_;
unsigned long long m_cacheID_;
edm::ParameterSet Parameters;

Expand Down
8 changes: 4 additions & 4 deletions Validation/RecoTrack/plugins/SiPixelTrackingRecHitsValid.cc
Expand Up @@ -110,7 +110,7 @@ void SiPixelTrackingRecHitsValid::beginJob()
}

SiPixelTrackingRecHitsValid::SiPixelTrackingRecHitsValid(const edm::ParameterSet& ps) :
trackerHitAssociator_(ps, consumesCollector()),
trackerHitAssociatorConfig_(ps, consumesCollector()),
dbe_(0), tfile_(0), t_(0)
{
//Read config file
Expand Down Expand Up @@ -1094,7 +1094,7 @@ void SiPixelTrackingRecHitsValid::analyze(const edm::Event& e, const edm::EventS
float mindist = 999999.9;

std::vector<PSimHit> matched;
trackerHitAssociator_.processEvent(e);
TrackerHitAssociator associate(e, trackerHitAssociatorConfig_);

edm::ESHandle<TrackerGeometry> pDD;
es.get<TrackerDigiGeometryRecord> ().get (pDD);
Expand Down Expand Up @@ -1269,7 +1269,7 @@ void SiPixelTrackingRecHitsValid::analyze(const edm::Event& e, const edm::EventS

//Association of the rechit to the simhit
matched.clear();
matched = trackerHitAssociator_.associateHit(*matchedhit);
matched = associate.associateHit(*matchedhit);

nsimhit = (int)matched.size();

Expand Down Expand Up @@ -1767,5 +1767,5 @@ void SiPixelTrackingRecHitsValid::analyze(const edm::Event& e, const edm::EventS
} // tracks > 0.

} //end of MTCCTrack
trackerHitAssociator_.clearEvent();

}
6 changes: 2 additions & 4 deletions Validation/RecoTrack/src/SiStripTrackingRecHitsValid.cc
Expand Up @@ -43,7 +43,7 @@ class TFile;
SiStripTrackingRecHitsValid::SiStripTrackingRecHitsValid(const edm::ParameterSet& ps) :
dbe_(edm::Service<DQMStore>().operator->()),
conf_(ps),
trackerHitAssociator_(ps, consumesCollector()),
trackerHitAssociatorConfig_(ps, consumesCollector()),
m_cacheID_(0)
// trajectoryInput_( ps.getParameter<edm::InputTag>("trajectoryInput") )
{
Expand Down Expand Up @@ -467,8 +467,7 @@ void SiStripTrackingRecHitsValid::analyze(const edm::Event & e, const edm::Event
DetId detid;
uint32_t myid;

TrackerHitAssociator& associate = trackerHitAssociator_;
associate.processEvent(e);
TrackerHitAssociator associate(e, trackerHitAssociatorConfig_);
PSimHit closest;

//Retrieve tracker topology from geometry
Expand Down Expand Up @@ -948,7 +947,6 @@ void SiStripTrackingRecHitsValid::analyze(const edm::Event & e, const edm::Event
}
//cout<<"DebugLine303"<<endl;

associate.clearEvent();
}


Expand Down