File indexing completed on 2024-04-06 12:25:17
0001 #ifndef RecoHI_HiEvtPlaneAlgos_EPCuts_h
0002 #define RecoHI_HiEvtPlaneAlgos_EPCuts_h
0003
0004 namespace hi {
0005
0006 enum class EP_ERA { ppReco, HIReco, Pixel, GenMC };
0007
0008 struct TrackStructure {
0009 int centbin;
0010 float eta;
0011 float phi;
0012 float et;
0013 float pt;
0014 int charge;
0015 int pdgid;
0016 int hits;
0017 int algos;
0018 int collection;
0019 float dz;
0020 float dxy;
0021 float dzError;
0022 float dxyError;
0023 float ptError;
0024 bool highPurity;
0025 float dzSig;
0026 float dxySig;
0027 float normalizedChi2;
0028 float dzError_Pix;
0029 float chi2layer;
0030 int numberOfValidHits;
0031 int pixel;
0032 };
0033
0034 class EPCuts {
0035 public:
0036 explicit EPCuts(EP_ERA cutEra = EP_ERA::ppReco,
0037 double pterror = 0.1,
0038 double dzerror = 3.0,
0039 double dxyerror = 3.0,
0040 double chi2perlayer = 0.18,
0041 double dzError_Pix = 10.0,
0042 double chi2Pix = 40.,
0043 int numberOfValidHits = 11) {
0044 cutera_ = cutEra;
0045 pterror_ = pterror;
0046 dzerror_ = dzerror;
0047 dxyerror_ = dxyerror;
0048 chi2perlayer_ = chi2perlayer;
0049 dzerror_Pix_ = dzError_Pix;
0050 chi2Pix_ = chi2Pix;
0051 numberOfValidHits_ = numberOfValidHits;
0052 }
0053
0054 bool isGoodHF(const TrackStructure& track) const {
0055 if (track.pdgid != 1 && track.pdgid != 2)
0056 return false;
0057 if (std::abs(track.eta) < 3 || std::abs(track.eta) > 5)
0058 return false;
0059 return true;
0060 }
0061
0062 bool isGoodCastor(const TrackStructure& track) const { return true; }
0063
0064 bool isGoodTrack(const TrackStructure& track) const {
0065 if (cutera_ == EP_ERA::ppReco)
0066 return trackQuality_ppReco(track);
0067 if (cutera_ == EP_ERA::HIReco)
0068 return trackQuality_HIReco(track);
0069 if (cutera_ == EP_ERA::Pixel)
0070 return trackQuality_Pixel(track);
0071 return false;
0072 }
0073
0074 bool trackQuality_ppReco(const TrackStructure& track) const {
0075 if (track.charge == 0)
0076 return false;
0077 if (!track.highPurity)
0078 return false;
0079 if (track.ptError > pterror_ * track.pt)
0080 return false;
0081 if (track.numberOfValidHits < numberOfValidHits_)
0082 return false;
0083 if (track.chi2layer > chi2perlayer_)
0084 return false;
0085 if (std::abs(track.dxy) > dxyerror_ * track.dxyError)
0086 return false;
0087 if (std::abs(track.dz) > dzerror_ * track.dzError)
0088 return false;
0089 return true;
0090 }
0091
0092 bool trackQuality_HIReco(const TrackStructure& track) const {
0093 if (track.charge == 0)
0094 return false;
0095 if (!track.highPurity)
0096 return false;
0097 if (track.numberOfValidHits < numberOfValidHits_)
0098 return false;
0099 if (track.ptError > pterror_ * track.pt)
0100 return false;
0101 if (std::abs(track.dxy) > dxyerror_ * track.dxyError)
0102 return false;
0103 if (std::abs(track.dz) > dzerror_ * track.dzError)
0104 return false;
0105 if (track.chi2layer > chi2perlayer_)
0106 return false;
0107
0108 if (track.algos != reco::TrackBase::initialStep && track.algos != reco::TrackBase::lowPtTripletStep &&
0109 track.algos != reco::TrackBase::pixelPairStep && track.algos != reco::TrackBase::detachedTripletStep)
0110 return false;
0111 return true;
0112 }
0113
0114 bool trackQuality_Pixel(const TrackStructure& track) const {
0115 if (track.charge == 0)
0116 return false;
0117 if (!track.highPurity)
0118 return false;
0119 bool bPix = false;
0120 int nHits = track.numberOfValidHits;
0121 if (track.ptError > pterror_ * track.pt)
0122 return false;
0123 if (track.pt < 2.4 and (nHits <= 6))
0124 bPix = true;
0125 if (not bPix) {
0126 if (nHits < numberOfValidHits_)
0127 return false;
0128 if (track.chi2layer > chi2perlayer_)
0129 return false;
0130 if (track.ptError > pterror_ * track.pt)
0131 return false;
0132 int algo = track.algos;
0133 if (track.pt > 2.4 && algo != reco::TrackBase::initialStep && algo != reco::TrackBase::lowPtTripletStep &&
0134 algo != reco::TrackBase::pixelPairStep && algo != reco::TrackBase::detachedTripletStep)
0135 return false;
0136 if (std::abs(track.dxy) > dxyerror_ * track.dxyError)
0137 return false;
0138 if (std::abs(track.dz) > dzerror_ * track.dzError)
0139 return false;
0140 } else {
0141 if (track.chi2layer > chi2Pix_)
0142 return false;
0143 if (std::abs(track.dz) > dzerror_Pix_ * track.dzError)
0144 return false;
0145 }
0146 return true;
0147 }
0148
0149 bool trackQuality_GenMC(const TrackStructure& track) const {
0150 if (track.charge == 0)
0151 return false;
0152 if (std::abs(track.eta) > 2.4)
0153 return false;
0154 return true;
0155 }
0156
0157 private:
0158 EP_ERA cutera_;
0159 double pterror_;
0160 double dzerror_;
0161 double dxyerror_;
0162 double chi2perlayer_;
0163 double dzerror_Pix_;
0164 double chi2Pix_;
0165 int numberOfValidHits_;
0166 };
0167 }
0168 #endif