File indexing completed on 2024-04-06 12:30:46
0001 #ifndef MCTruth_DTHitAssociator_h
0002 #define MCTruth_DTHitAssociator_h
0003
0004 #include "DataFormats/Common/interface/Handle.h"
0005 #include "DataFormats/DTDigi/interface/DTDigiCollection.h"
0006 #include "DataFormats/DTRecHit/interface/DTRecHit1D.h"
0007 #include "DataFormats/DTRecHit/interface/DTRecHitCollection.h"
0008 #include "DataFormats/MuonDetId/interface/DTWireId.h"
0009 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
0010 #include "FWCore/Framework/interface/ConsumesCollector.h"
0011 #include "FWCore/Framework/interface/ESHandle.h"
0012 #include "FWCore/Framework/interface/Event.h"
0013 #include "FWCore/Utilities/interface/InputTag.h"
0014 #include "Geometry/DTGeometry/interface/DTGeometry.h"
0015 #include "SimDataFormats/DigiSimLinks/interface/DTDigiSimLinkCollection.h"
0016 #include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h"
0017 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
0018 #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h"
0019
0020 #include <map>
0021 #include <vector>
0022
0023 class MuonGeometryRecord;
0024
0025 class DTHitAssociator {
0026 public:
0027 typedef std::pair<uint32_t, EncodedEventId> SimHitIdpr;
0028 typedef std::pair<PSimHit, bool> PSimHit_withFlag;
0029 typedef std::map<DTWireId, std::vector<PSimHit_withFlag>> SimHitMap;
0030 typedef std::map<DTWireId, std::vector<DTRecHit1DPair>> RecHitMap;
0031 typedef std::map<DTWireId, std::vector<DTDigi>> DigiMap;
0032 typedef std::map<DTWireId, std::vector<DTDigiSimLink>> LinksMap;
0033
0034 class Config {
0035 public:
0036 Config(const edm::ParameterSet &, edm::ConsumesCollector iC);
0037
0038 private:
0039 friend class DTHitAssociator;
0040
0041 edm::InputTag DTsimhitsTag;
0042 edm::InputTag DTsimhitsXFTag;
0043 edm::InputTag DTdigiTag;
0044 edm::InputTag DTdigisimlinkTag;
0045 edm::InputTag DTrechitTag;
0046
0047 edm::EDGetTokenT<edm::PSimHitContainer> DTsimhitsToken;
0048 edm::EDGetTokenT<CrossingFrame<PSimHit>> DTsimhitsXFToken;
0049 edm::EDGetTokenT<DTDigiCollection> DTdigiToken;
0050 edm::EDGetTokenT<DTDigiSimLinkCollection> DTdigisimlinkToken;
0051 edm::EDGetTokenT<DTRecHitCollection> DTrechitToken;
0052
0053 edm::ESGetToken<DTGeometry, MuonGeometryRecord> geomToken;
0054
0055 bool dumpDT;
0056 bool crossingframe;
0057 bool links_exist;
0058 bool associatorByWire;
0059 };
0060
0061 DTHitAssociator(const edm::Event &, const edm::EventSetup &, const Config &, bool printRtS);
0062
0063 std::vector<SimHitIdpr> associateHitId(const TrackingRecHit &hit) const;
0064 std::vector<SimHitIdpr> associateDTHitId(const DTRecHit1D *dtrechit) const;
0065
0066 std::vector<PSimHit> associateHit(const TrackingRecHit &hit) const;
0067
0068 SimHitMap mapOfSimHit;
0069 RecHitMap mapOfRecHit;
0070 DigiMap mapOfDigi;
0071 LinksMap mapOfLinks;
0072
0073 private:
0074 void initEvent(const edm::Event &, const edm::EventSetup &);
0075
0076 bool SimHitOK(const edm::ESHandle<DTGeometry> &, const PSimHit &);
0077 Config const &config_;
0078 bool printRtS;
0079 };
0080
0081 #endif