Skip to content

Commit

Permalink
Merge pull request #8999 from wmtan/BetterConsumesInterfaceForTracker…
Browse files Browse the repository at this point in the history
…HitAssociator

Better consumes interface for TrackerHitAssociator
  • Loading branch information
cmsbuild committed May 11, 2015
2 parents 0c17f04 + 4bd8a92 commit bec6b56
Show file tree
Hide file tree
Showing 14 changed files with 82 additions and 90 deletions.
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

0 comments on commit bec6b56

Please sign in to comment.