File indexing completed on 2024-04-06 12:31:02
0001 #ifndef TrackerHitAssociator_h
0002 #define TrackerHitAssociator_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #include "FWCore/Framework/interface/Event.h"
0020 #include "FWCore/Framework/interface/EventSetup.h"
0021 #include "DataFormats/Common/interface/Handle.h"
0022 #include "FWCore/Framework/interface/MakerMacros.h"
0023 #include "FWCore/Framework/interface/ConsumesCollector.h"
0024 #include "FWCore/Utilities/interface/EDGetToken.h"
0025
0026
0027 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
0028 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
0029
0030 #include "DataFormats/Common/interface/DetSetVector.h"
0031 #include "DataFormats/SiPixelDigi/interface/PixelDigi.h"
0032 #include "SimDataFormats/TrackerDigiSimLink/interface/PixelDigiSimLink.h"
0033 #include "SimDataFormats/TrackerDigiSimLink/interface/StripDigiSimLink.h"
0034
0035
0036 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
0037 #include "TrackingTools/TransientTrackingRecHit/interface/TransientTrackingRecHit.h"
0038 #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h"
0039 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h"
0040 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit1D.h"
0041 #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2D.h"
0042 #include "DataFormats/TrackerRecHit2D/interface/Phase2TrackerRecHit1D.h"
0043 #include "DataFormats/TrackerRecHit2D/interface/ProjectedSiStripRecHit2D.h"
0044 #include "DataFormats/TrackerRecHit2D/interface/SiTrackerMultiRecHit.h"
0045 #include "DataFormats/TrackerRecHit2D/interface/FastTrackerRecHit.h"
0046
0047 #include "SimDataFormats/CrossingFrame/interface/MixCollection.h"
0048
0049 #include <string>
0050 #include <vector>
0051
0052 typedef std::pair<uint32_t, EncodedEventId> SimHitIdpr;
0053 class TrackerHitAssociator {
0054 public:
0055 struct Config {
0056 Config() {}
0057 Config(const edm::ParameterSet& conf, edm::ConsumesCollector&& iC);
0058 Config(edm::ConsumesCollector&& iC);
0059 bool doPixel_, doStrip_, useOTph2_, doTrackAssoc_, assocHitbySimTrack_;
0060 edm::EDGetTokenT<edm::DetSetVector<StripDigiSimLink> > stripToken_;
0061 edm::EDGetTokenT<edm::DetSetVector<PixelDigiSimLink> > pixelToken_, ph2OTrToken_;
0062 std::vector<edm::EDGetTokenT<CrossingFrame<PSimHit> > > cfTokens_;
0063 std::vector<edm::EDGetTokenT<std::vector<PSimHit> > > simHitTokens_;
0064 };
0065
0066
0067 TrackerHitAssociator(const edm::Event& e, const Config& config);
0068
0069
0070 virtual ~TrackerHitAssociator() {}
0071
0072 static void fillPSetDescription(edm::ParameterSetDescription& descriptions);
0073
0074 typedef std::pair<unsigned int, unsigned int> simhitAddr, subDetTofBin;
0075 typedef unsigned int simHitCollectionID;
0076
0077 std::vector<PSimHit> associateHit(const TrackingRecHit& thit) const;
0078
0079 std::vector<SimHitIdpr> associateHitId(const TrackingRecHit& thit) const;
0080 void associateHitId(const TrackingRecHit& thit,
0081 std::vector<SimHitIdpr>& simhitid,
0082 std::vector<simhitAddr>* simhitCFPos = nullptr) const;
0083 template <typename T>
0084 void associateSiStripRecHit(const T* simplerechit,
0085 std::vector<SimHitIdpr>& simtrackid,
0086 std::vector<simhitAddr>* simhitCFPos = nullptr) const;
0087
0088
0089 void associateCluster(const SiStripCluster* clust,
0090 const DetId& detid,
0091 std::vector<SimHitIdpr>& simtrackid,
0092 std::vector<PSimHit>& simhit) const;
0093
0094
0095 void associateSimpleRecHitCluster(const SiStripCluster* clust,
0096 const DetId& detid,
0097 std::vector<SimHitIdpr>& simtrackid,
0098 std::vector<simhitAddr>* simhitCFPos = nullptr) const;
0099
0100 std::vector<SimHitIdpr> associateMatchedRecHit(const SiStripMatchedRecHit2D* matchedrechit,
0101 std::vector<simhitAddr>* simhitCFPos = nullptr) const;
0102 std::vector<SimHitIdpr> associateProjectedRecHit(const ProjectedSiStripRecHit2D* projectedrechit,
0103 std::vector<simhitAddr>* simhitCFPos = nullptr) const;
0104 void associatePhase2TrackerRecHit(const Phase2TrackerRecHit1D* rechit,
0105 std::vector<SimHitIdpr>& simtrackid,
0106 std::vector<simhitAddr>* simhitCFPos = nullptr) const;
0107 void associatePixelRecHit(const SiPixelRecHit* pixelrechit,
0108 std::vector<SimHitIdpr>& simtrackid,
0109 std::vector<simhitAddr>* simhitCFPos = nullptr) const;
0110 std::vector<SimHitIdpr> associateFastRecHit(const FastTrackerRecHit* rechit) const;
0111 std::vector<SimHitIdpr> associateMultiRecHitId(const SiTrackerMultiRecHit* multirechit,
0112 std::vector<simhitAddr>* simhitCFPos = nullptr) const;
0113 std::vector<PSimHit> associateMultiRecHit(const SiTrackerMultiRecHit* multirechit) const;
0114
0115 typedef std::map<unsigned int, std::vector<PSimHit> > simhit_map;
0116 simhit_map SimHitMap;
0117 typedef std::map<subDetTofBin, unsigned int> simhit_collectionMap;
0118 simhit_collectionMap SimHitCollMap;
0119
0120 private:
0121 typedef std::vector<std::string> vstring;
0122
0123 void makeMaps(const edm::Event& theEvent, const Config& config);
0124 inline std::string printDetBnchEvtTrk(const DetId& detid,
0125 const uint32_t& detID,
0126 std::vector<SimHitIdpr>& simtrackid) const;
0127 edm::Handle<edm::DetSetVector<StripDigiSimLink> > stripdigisimlink;
0128 edm::Handle<edm::DetSetVector<PixelDigiSimLink> > pixeldigisimlink;
0129 edm::Handle<edm::DetSetVector<PixelDigiSimLink> > ph2trackerdigisimlink;
0130 bool doPixel_, doStrip_, useOTph2_, doTrackAssoc_, assocHitbySimTrack_;
0131 };
0132
0133 #endif