Skip to content
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 16 additions & 5 deletions SimMuon/MCTruth/interface/CSCHitAssociator.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,36 @@
#include "SimDataFormats/TrackerDigiSimLink/interface/StripDigiSimLink.h"
#include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"

class MuonGeometryRecord;

class CSCHitAssociator {
public:
typedef edm::DetSetVector<StripDigiSimLink> DigiSimLinks;
typedef edm::DetSetVector<StripDigiSimLink> WireDigiSimLinks;
typedef edm::DetSet<StripDigiSimLink> LayerLinks;
typedef std::pair<uint32_t, EncodedEventId> SimHitIdpr;

CSCHitAssociator(const edm::Event &, const edm::EventSetup &, const edm::ParameterSet &);
CSCHitAssociator(const edm::ParameterSet &, edm::ConsumesCollector &&iC);
class Config {
public:
Config(const edm::ParameterSet &, edm::ConsumesCollector iC);

void initEvent(const edm::Event &, const edm::EventSetup &);
private:
friend class CSCHitAssociator;
const edm::InputTag linksTag_;
const edm::EDGetTokenT<DigiSimLinks> linksToken_;
const edm::ESGetToken<CSCGeometry, MuonGeometryRecord> geomToken_;
};

CSCHitAssociator(const edm::Event &, const edm::EventSetup &, const Config &);

std::vector<SimHitIdpr> associateHitId(const TrackingRecHit &) const;
std::vector<SimHitIdpr> associateCSCHitId(const CSCRecHit2D *) const;

private:
const DigiSimLinks *theDigiSimLinks;
void initEvent(const edm::Event &, const edm::EventSetup &);

edm::InputTag linksTag;
const Config &theConfig;
const DigiSimLinks *theDigiSimLinks;

const CSCGeometry *cscgeom;
};
Expand Down
45 changes: 31 additions & 14 deletions SimMuon/MCTruth/interface/DTHitAssociator.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,13 @@
#include "SimDataFormats/DigiSimLinks/interface/DTDigiSimLinkCollection.h"
#include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h"
#include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
#include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h"

#include <map>
#include <vector>

class MuonGeometryRecord;

class DTHitAssociator {
public:
typedef std::pair<uint32_t, EncodedEventId> SimHitIdpr;
Expand All @@ -28,12 +31,34 @@ class DTHitAssociator {
typedef std::map<DTWireId, std::vector<DTDigi>> DigiMap;
typedef std::map<DTWireId, std::vector<DTDigiSimLink>> LinksMap;

DTHitAssociator(const edm::Event &, const edm::EventSetup &, const edm::ParameterSet &, bool printRtS);
DTHitAssociator(const edm::ParameterSet &, edm::ConsumesCollector &&iC);
class Config {
public:
Config(const edm::ParameterSet &, edm::ConsumesCollector iC);

void initEvent(const edm::Event &, const edm::EventSetup &);
private:
friend class DTHitAssociator;

edm::InputTag DTsimhitsTag;
edm::InputTag DTsimhitsXFTag;
edm::InputTag DTdigiTag;
edm::InputTag DTdigisimlinkTag;
edm::InputTag DTrechitTag;

edm::EDGetTokenT<edm::PSimHitContainer> DTsimhitsToken;
edm::EDGetTokenT<CrossingFrame<PSimHit>> DTsimhitsXFToken;
edm::EDGetTokenT<DTDigiCollection> DTdigiToken;
edm::EDGetTokenT<DTDigiSimLinkCollection> DTdigisimlinkToken;
edm::EDGetTokenT<DTRecHitCollection> DTrechitToken;

virtual ~DTHitAssociator() {}
edm::ESGetToken<DTGeometry, MuonGeometryRecord> geomToken;

bool dumpDT;
bool crossingframe;
bool links_exist;
bool associatorByWire;
};

DTHitAssociator(const edm::Event &, const edm::EventSetup &, const Config &, bool printRtS);

std::vector<SimHitIdpr> associateHitId(const TrackingRecHit &hit) const;
std::vector<SimHitIdpr> associateDTHitId(const DTRecHit1D *dtrechit) const;
Expand All @@ -46,18 +71,10 @@ class DTHitAssociator {
LinksMap mapOfLinks;

private:
edm::InputTag DTsimhitsTag;
edm::InputTag DTsimhitsXFTag;
edm::InputTag DTdigiTag;
edm::InputTag DTdigisimlinkTag;
edm::InputTag DTrechitTag;

bool dumpDT;
bool crossingframe;
bool links_exist;
bool associatorByWire;
void initEvent(const edm::Event &, const edm::EventSetup &);

bool SimHitOK(const edm::ESHandle<DTGeometry> &, const PSimHit &);
Config const &config_;
bool printRtS;
};

Expand Down
41 changes: 23 additions & 18 deletions SimMuon/MCTruth/interface/GEMHitAssociator.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,34 +32,39 @@

class GEMHitAssociator {
public:
class Config {
public:
Config(const edm::ParameterSet &, edm::ConsumesCollector ic);

private:
friend class GEMHitAssociator;

edm::InputTag GEMdigisimlinkTag;
edm::InputTag GEMsimhitsTag;
edm::InputTag GEMsimhitsXFTag;

edm::EDGetTokenT<CrossingFrame<PSimHit>> GEMsimhitsXFToken_;
edm::EDGetTokenT<edm::PSimHitContainer> GEMsimhitsToken_;
edm::EDGetTokenT<edm::DetSetVector<GEMDigiSimLink>> GEMdigisimlinkToken_;

bool crossingframe;
bool useGEMs_;
};

typedef edm::DetSetVector<GEMDigiSimLink> DigiSimLinks;
typedef edm::DetSet<GEMDigiSimLink> LayerLinks;
typedef std::pair<uint32_t, EncodedEventId> SimHitIdpr;

// Constructor with configurable parameters
GEMHitAssociator(const edm::ParameterSet &, edm::ConsumesCollector &&ic);
GEMHitAssociator(const edm::Event &e, const edm::EventSetup &eventSetup, const edm::ParameterSet &conf);

void initEvent(const edm::Event &, const edm::EventSetup &);

// Destructor
~GEMHitAssociator() {}
GEMHitAssociator(const edm::Event &e, const Config &config);

std::vector<SimHitIdpr> associateRecHit(const GEMRecHit *gemrechit) const;

private:
const DigiSimLinks *theDigiSimLinks;
edm::InputTag GEMdigisimlinkTag;

bool crossingframe;
bool useGEMs_;
edm::InputTag GEMsimhitsTag;
edm::InputTag GEMsimhitsXFTag;

edm::EDGetTokenT<CrossingFrame<PSimHit>> GEMsimhitsXFToken_;
edm::EDGetTokenT<edm::PSimHitContainer> GEMsimhitsToken_;
edm::EDGetTokenT<edm::DetSetVector<GEMDigiSimLink>> GEMdigisimlinkToken_;
void initEvent(const edm::Event &);

const Config &theConfig;
const DigiSimLinks *theDigiSimLinks;
std::map<unsigned int, edm::PSimHitContainer> _SimHitMap;
};

Expand Down
12 changes: 11 additions & 1 deletion SimMuon/MCTruth/interface/MuonAssociatorByHits.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,19 @@

#include "SimMuon/MCTruth/interface/MuonAssociatorByHitsHelper.h"
#include "SimTracker/TrackerHitAssociation/interface/TrackerHitAssociator.h"
#include "SimMuon/MCTruth/interface/GEMHitAssociator.h"
#include "SimMuon/MCTruth/interface/RPCHitAssociator.h"
#include "SimMuon/MCTruth/interface/CSCHitAssociator.h"
#include "SimMuon/MCTruth/interface/DTHitAssociator.h"

#include <memory>

namespace muonAssociatorByHitsDiagnostics {
class InputDumper;
}

class TrackerTopologyRcd;

class MuonAssociatorByHits {
public:
MuonAssociatorByHits(const edm::ParameterSet &conf, edm::ConsumesCollector &&iC);
Expand Down Expand Up @@ -74,9 +80,13 @@ class MuonAssociatorByHits {

private:
MuonAssociatorByHitsHelper helper_;
edm::ParameterSet const conf_;
TrackerHitAssociator::Config trackerHitAssociatorConfig_;
GEMHitAssociator::Config gemHitAssociatorConfig_;
RPCHitAssociator::Config rpcHitAssociatorConfig_;
CSCHitAssociator::Config cscHitAssociatorConfig_;
DTHitAssociator::Config dtHitAssociatorConfig_;

const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> ttopoToken_;
std::unique_ptr<muonAssociatorByHitsDiagnostics::InputDumper> diagnostics_;
};

Expand Down
15 changes: 15 additions & 0 deletions SimMuon/MCTruth/interface/MuonAssociatorByHitsHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,21 @@ class MuonAssociatorByHitsHelper {
MuonAssociatorByHitsHelper(const edm::ParameterSet &conf);

struct Resources {
Resources(TrackerTopology const *tTopo,
TrackerHitAssociator const *trackerHitAssoc,
CSCHitAssociator const *cscHitAssoc,
DTHitAssociator const *dtHitAssoc,
RPCHitAssociator const *rpcHitAssoc,
GEMHitAssociator const *gemHitAssoc,
std::function<void(const TrackHitsCollection &, const TrackingParticleCollection &)> diagnostics)
: tTopo_(tTopo),
trackerHitAssoc_(trackerHitAssoc),
cscHitAssoc_(cscHitAssoc),
dtHitAssoc_(dtHitAssoc),
rpcHitAssoc_(rpcHitAssoc),
gemHitAssoc_(gemHitAssoc),
diagnostics_(diagnostics) {}

TrackerTopology const *tTopo_;
TrackerHitAssociator const *trackerHitAssoc_;
CSCHitAssociator const *cscHitAssoc_;
Expand Down
38 changes: 22 additions & 16 deletions SimMuon/MCTruth/interface/RPCHitAssociator.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,31 +34,37 @@ class RPCHitAssociator {
typedef edm::DetSetVector<RPCDigiSimLink> RPCDigiSimLinks;
typedef std::pair<uint32_t, EncodedEventId> SimHitIdpr;

// Constructor with configurable parameters
RPCHitAssociator(const edm::ParameterSet &, edm::ConsumesCollector &&ic);
RPCHitAssociator(const edm::Event &e, const edm::EventSetup &eventSetup, const edm::ParameterSet &conf);
class Config {
public:
Config(const edm::ParameterSet &, edm::ConsumesCollector ic);

private:
friend class RPCHitAssociator;

edm::InputTag RPCdigisimlinkTag;

edm::InputTag RPCsimhitsTag;
edm::InputTag RPCsimhitsXFTag;

edm::EDGetTokenT<CrossingFrame<PSimHit>> RPCsimhitsXFToken_;
edm::EDGetTokenT<edm::PSimHitContainer> RPCsimhitsToken_;
edm::EDGetTokenT<edm::DetSetVector<RPCDigiSimLink>> RPCdigisimlinkToken_;

void initEvent(const edm::Event &, const edm::EventSetup &);
bool crossingframe;
};

// Destructor
~RPCHitAssociator() {}
// Constructor with configurable parameters
RPCHitAssociator(const edm::Event &e, const Config &conf);

std::vector<SimHitIdpr> associateRecHit(const TrackingRecHit &hit) const;
std::set<RPCDigiSimLink> findRPCDigiSimLink(uint32_t rpcDetId, int strip, int bx) const;
// const PSimHit* linkToSimHit(RPCDigiSimLink link);

private:
edm::Handle<edm::DetSetVector<RPCDigiSimLink>> _thelinkDigis;
edm::InputTag RPCdigisimlinkTag;

bool crossingframe;
edm::InputTag RPCsimhitsTag;
edm::InputTag RPCsimhitsXFTag;

edm::EDGetTokenT<CrossingFrame<PSimHit>> RPCsimhitsXFToken_;
edm::EDGetTokenT<edm::PSimHitContainer> RPCsimhitsToken_;
edm::EDGetTokenT<edm::DetSetVector<RPCDigiSimLink>> RPCdigisimlinkToken_;
void initEvent(const edm::Event &);

Config const &theConfig;
edm::Handle<edm::DetSetVector<RPCDigiSimLink>> _thelinkDigis;
std::map<unsigned int, edm::PSimHitContainer> _SimHitMap;
};

Expand Down
2 changes: 1 addition & 1 deletion SimMuon/MCTruth/interface/TrackerMuonHitExtractor.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class TrackerMuonHitExtractor {
explicit TrackerMuonHitExtractor(const edm::ParameterSet &);
~TrackerMuonHitExtractor();

void init(const edm::Event &, const edm::EventSetup &);
void init(const edm::Event &);
std::vector<const TrackingRecHit *> getMuonHits(const reco::Muon &mu) const;

private:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,24 @@
//
MuonToTrackingParticleAssociatorByHitsImpl::MuonToTrackingParticleAssociatorByHitsImpl(
TrackerMuonHitExtractor const &iHitExtractor,
MuonAssociatorByHitsHelper::Resources const &iResources,
TrackerHitAssociator::Config const &iTracker,
CSCHitAssociator::Config const &iCSC,
DTHitAssociator::Config const &iDT,
RPCHitAssociator::Config const &iRPC,
GEMHitAssociator::Config const &iGEM,
edm::Event const &iEvent,
edm::EventSetup const &iSetup,
const TrackerTopology *iTopo,
std::function<void(const TrackHitsCollection &, const TrackingParticleCollection &)> iDiagnostics,
MuonAssociatorByHitsHelper const *iHelper)
: m_hitExtractor(&iHitExtractor), m_resources(iResources), m_helper(iHelper) {}
: m_hitExtractor(&iHitExtractor),
m_tracker(iEvent, iTracker),
m_csc(iEvent, iSetup, iCSC),
m_dt(iEvent, iSetup, iDT, true),
m_rpc(iEvent, iRPC),
m_gem(iEvent, iGEM),
m_resources(iTopo, &m_tracker, &m_csc, &m_dt, &m_rpc, &m_gem, iDiagnostics),
m_helper(iHelper) {}

//
// member functions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
//

// system include files
#include <functional>

// user include files
#include "SimDataFormats/Associations/interface/MuonToTrackingParticleAssociatorBaseImpl.h"
Expand All @@ -31,9 +32,20 @@ class TrackerMuonHitExtractor;

class MuonToTrackingParticleAssociatorByHitsImpl : public reco::MuonToTrackingParticleAssociatorBaseImpl {
public:
MuonToTrackingParticleAssociatorByHitsImpl(TrackerMuonHitExtractor const &iHitExtractor,
MuonAssociatorByHitsHelper::Resources const &iResources,
MuonAssociatorByHitsHelper const *iHelper);
using TrackHitsCollection = MuonAssociatorByHitsHelper::TrackHitsCollection;

MuonToTrackingParticleAssociatorByHitsImpl(
TrackerMuonHitExtractor const &iHitExtractor,
TrackerHitAssociator::Config const &iTracker,
CSCHitAssociator::Config const &iCSC,
DTHitAssociator::Config const &iDT,
RPCHitAssociator::Config const &iRPC,
GEMHitAssociator::Config const &iGEM,
edm::Event const &iEvent,
edm::EventSetup const &iSetup,
const TrackerTopology *iTopo,
std::function<void(const TrackHitsCollection &, const TrackingParticleCollection &)>,
MuonAssociatorByHitsHelper const *iHelper);

MuonToTrackingParticleAssociatorByHitsImpl(const MuonToTrackingParticleAssociatorByHitsImpl &) =
delete; // stop default
Expand Down Expand Up @@ -61,6 +73,11 @@ class MuonToTrackingParticleAssociatorByHitsImpl : public reco::MuonToTrackingPa
private:
// ---------- member data --------------------------------
TrackerMuonHitExtractor const *m_hitExtractor;
TrackerHitAssociator const m_tracker;
CSCHitAssociator const m_csc;
DTHitAssociator const m_dt;
RPCHitAssociator const m_rpc;
GEMHitAssociator const m_gem;
MuonAssociatorByHitsHelper::Resources m_resources;
MuonAssociatorByHitsHelper const *m_helper;
};
Expand Down
Loading