File indexing completed on 2024-04-06 12:31:07
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 #ifndef L1_TRACK_TRIGGER_STUB_ASSOCIATION_FORMAT_H
0019 #define L1_TRACK_TRIGGER_STUB_ASSOCIATION_FORMAT_H
0020
0021 #include "DataFormats/Common/interface/Ref.h"
0022 #include "DataFormats/Common/interface/RefProd.h"
0023 #include "DataFormats/Common/interface/Ptr.h"
0024 #include "DataFormats/L1TrackTrigger/interface/TTTypes.h"
0025 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticleFwd.h"
0026 #include "DataFormats/Common/interface/DetSet.h"
0027 #include "DataFormats/Common/interface/DetSetVector.h"
0028 #include "DataFormats/Common/interface/DetSetVectorNew.h"
0029 #include "DataFormats/DetId/interface/DetId.h"
0030 #include "DataFormats/Phase2TrackerDigi/interface/Phase2TrackerDigi.h"
0031
0032 #include "DataFormats/GeometryCommonDetAlgo/interface/MeasurementPoint.h"
0033 #include "DataFormats/GeometryVector/interface/GlobalPoint.h" /// NOTE: this is needed even if it seems not
0034 #include "DataFormats/L1TrackTrigger/interface/TTStub.h"
0035 #include "SimDataFormats/TrackerDigiSimLink/interface/PixelDigiSimLink.h"
0036 #include "SimDataFormats/Track/interface/SimTrack.h"
0037 #include "SimDataFormats/Track/interface/SimTrackContainer.h"
0038 #include "SimDataFormats/EncodedEventId/interface/EncodedEventId.h"
0039 #include "SimDataFormats/TrackingAnalysis/interface/TrackingParticle.h"
0040 #include "SimTracker/TrackTriggerAssociation/interface/TTClusterAssociationMap.h"
0041
0042
0043 template <typename T>
0044 using MapStubToTP = std::map<TTStubRefT<T>, TrackingParticlePtr>;
0045 template <typename T>
0046 using MapTPToVecStub = std::map<TrackingParticlePtr, std::vector<TTStubRefT<T>>>;
0047
0048 template <typename T>
0049 class TTStubAssociationMap {
0050 public:
0051
0052 TTStubAssociationMap();
0053
0054
0055 ~TTStubAssociationMap();
0056
0057
0058
0059 const MapStubToTP<T>& getTTStubToTrackingParticleMap() const { return stubToTrackingParticleMap_; }
0060 const MapTPToVecStub<T>& getTrackingParticleToTTStubsMap() const { return trackingParticleToStubVectorMap_; }
0061
0062 void setTTStubToTrackingParticleMap(const MapStubToTP<T>& aMap) { stubToTrackingParticleMap_ = aMap; }
0063 void setTrackingParticleToTTStubsMap(const MapTPToVecStub<T>& aMap) { trackingParticleToStubVectorMap_ = aMap; }
0064
0065
0066 void setTTClusterAssociationMap(edm::RefProd<TTClusterAssociationMap<T>> aCluAssoMap) {
0067 theClusterAssociationMap_ = aCluAssoMap;
0068 }
0069
0070
0071
0072
0073
0074 const TrackingParticlePtr& findTrackingParticlePtr(TTStubRefT<T> aStub) const;
0075
0076
0077
0078
0079 const std::vector<TTStubRefT<T>>& findTTStubRefs(TrackingParticlePtr aTrackingParticle) const;
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097 bool isGenuine(TTStubRefT<T> aStub) const;
0098 bool isCombinatoric(TTStubRefT<T> aStub) const;
0099 bool isUnknown(TTStubRefT<T> aStub) const;
0100
0101 private:
0102
0103 MapStubToTP<T> stubToTrackingParticleMap_;
0104 MapTPToVecStub<T> trackingParticleToStubVectorMap_;
0105 edm::RefProd<TTClusterAssociationMap<T>> theClusterAssociationMap_;
0106
0107
0108 static const TrackingParticlePtr nullTrackingParticlePtr_;
0109 static const std::vector<TTStubRefT<T>> nullVecStubRef_;
0110
0111 };
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121 template <typename T>
0122 const TrackingParticlePtr TTStubAssociationMap<T>::nullTrackingParticlePtr_;
0123 template <typename T>
0124 const std::vector<TTStubRefT<T>> TTStubAssociationMap<T>::nullVecStubRef_;
0125
0126
0127
0128 template <typename T>
0129 TTStubAssociationMap<T>::TTStubAssociationMap() {
0130
0131 }
0132
0133
0134 template <typename T>
0135 TTStubAssociationMap<T>::~TTStubAssociationMap() {}
0136
0137
0138 template <typename T>
0139 const TrackingParticlePtr& TTStubAssociationMap<T>::findTrackingParticlePtr(TTStubRefT<T> aStub) const {
0140 if (stubToTrackingParticleMap_.find(aStub) != stubToTrackingParticleMap_.end()) {
0141 return stubToTrackingParticleMap_.find(aStub)->second;
0142 } else {
0143 return nullTrackingParticlePtr_;
0144 }
0145 }
0146
0147 template <typename T>
0148 const std::vector<TTStubRefT<T>>& TTStubAssociationMap<T>::findTTStubRefs(TrackingParticlePtr aTrackingParticle) const {
0149 if (trackingParticleToStubVectorMap_.find(aTrackingParticle) != trackingParticleToStubVectorMap_.end()) {
0150 return trackingParticleToStubVectorMap_.find(aTrackingParticle)->second;
0151 } else {
0152 return nullVecStubRef_;
0153 }
0154 }
0155
0156
0157 template <typename T>
0158 bool TTStubAssociationMap<T>::isGenuine(TTStubRefT<T> aStub) const {
0159
0160 if ((this->findTrackingParticlePtr(aStub)).isNull())
0161 return false;
0162
0163 return true;
0164 }
0165
0166 template <typename T>
0167 bool TTStubAssociationMap<T>::isCombinatoric(TTStubRefT<T> aStub) const {
0168
0169 if (this->isGenuine(aStub))
0170 return false;
0171
0172 if (this->isUnknown(aStub))
0173 return false;
0174
0175 return true;
0176 }
0177
0178 template <typename T>
0179 bool TTStubAssociationMap<T>::isUnknown(TTStubRefT<T> aStub) const {
0180
0181
0182
0183 if (theClusterAssociationMap_.isNull()) {
0184 return true;
0185 }
0186
0187 if (theClusterAssociationMap_->isUnknown(aStub->clusterRef(0)) &&
0188 theClusterAssociationMap_->isUnknown(aStub->clusterRef(1)))
0189 return true;
0190
0191 return false;
0192 }
0193
0194 #endif