Back to home page

Project CMSSW displayed by LXR

 
 

    


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