CMS 3D CMS Logo

TrackingParticleSelector.h
Go to the documentation of this file.
1 #ifndef SimTracker_Common_TrackingParticleSelector_h
2 #define SimTracker_Common_TrackingParticleSelector_h
3 /* \class TrackingParticleSelector
4  *
5  * \author Giuseppe Cerati, INFN
6  *
7  * $Date: 2013/05/14 15:46:46 $
8  * $Revision: 1.5.4.2 $
9  *
10  */
15 
17 public:
20  double ptMax,
21  double minRapidity,
22  double maxRapidity,
23  double tip,
24  double lip,
25  int minHit,
26  bool signalOnly,
27  bool intimeOnly,
28  bool chargedOnly,
29  bool stableOnly,
30  const std::vector<int> &pdgId = std::vector<int>(),
31  bool invertRapidityCut = false,
32  double minPhi = -3.2,
33  double maxPhi = 3.2)
34  : ptMin2_(ptMin * ptMin),
35  ptMax2_(ptMax * ptMax),
38  meanPhi_((minPhi + maxPhi) / 2.),
39  rangePhi_((maxPhi - minPhi) / 2.),
40  tip2_(tip * tip),
41  lip_(lip),
42  minHit_(minHit),
47  pdgId_(pdgId),
49  if (minPhi >= maxPhi) {
50  throw cms::Exception("Configuration")
51  << "TrackingParticleSelector: minPhi (" << minPhi << ") must be smaller than maxPhi (" << maxPhi
52  << "). The range is constructed from minPhi to maxPhi around their "
53  "average.";
54  }
55  if (minPhi >= M_PI) {
56  throw cms::Exception("Configuration") << "TrackingParticleSelector: minPhi (" << minPhi
57  << ") must be smaller than PI. The range is constructed from minPhi "
58  "to maxPhi around their average.";
59  }
60  if (maxPhi <= -M_PI) {
61  throw cms::Exception("Configuration") << "TrackingParticleSelector: maxPhi (" << maxPhi
62  << ") must be larger than -PI. The range is constructed from minPhi "
63  "to maxPhi around their average.";
64  }
65  }
66 
67  bool isCharged(const TrackingParticle *tp) const { return (tp->charge() == 0 ? false : true); }
68 
69  bool isInTime(const TrackingParticle *tp) const { return (tp->eventId().bunchCrossing() == 0); }
70 
71  bool isSignal(const TrackingParticle *tp) const {
72  return (tp->eventId().bunchCrossing() == 0 && tp->eventId().event() == 0);
73  }
74 
75  bool isStable(const TrackingParticle *tp) const {
76  for (TrackingParticle::genp_iterator j = tp->genParticle_begin(); j != tp->genParticle_end(); ++j) {
77  if (j->get() == nullptr || j->get()->status() != 1) {
78  return false;
79  }
80  }
81  // test for remaining unstabled due to lack of genparticle pointer
82  int pdgid = std::abs(tp->pdgId());
83  if (tp->status() == -99 && (pdgid != 11 && pdgid != 13 && pdgid != 211 && pdgid != 321 && pdgid != 2212 &&
84  pdgid != 3112 && pdgid != 3222 && pdgid != 3312 && pdgid != 3334)) {
85  return false;
86  }
87  return true;
88  }
89 
92  bool operator()(const TrackingParticle &tp) const { return select(&tp); }
93  bool operator()(const TrackingParticle *tp) const { return select(tp); }
94 
95  bool select(const TrackingParticle *tp) const {
96  // signal only means no PU particles
97  if (signalOnly_ && !isSignal(tp))
98  return false;
99  // intime only means no OOT PU particles
100  if (intimeOnly_ && !isInTime(tp))
101  return false;
102 
103  // select only if charge!=0
104  if (chargedOnly_ && !isCharged(tp))
105  return false;
106 
107  // select for particle type
108  if (!selectParticleType(tp)) {
109  return false;
110  }
111 
112  // select only stable particles
113  if (stableOnly_ && !isStable(tp)) {
114  return false;
115  }
116 
117  return selectKinematics(tp);
118  }
119 
120  bool selectKinematics(const TrackingParticle *tp) const {
121  auto etaOk = [&](const TrackingParticle *p) -> bool {
122  float eta = etaFromXYZ(p->px(), p->py(), p->pz());
123  if (!invertRapidityCut_)
124  return (eta >= minRapidity_) && (eta <= maxRapidity_);
125  else
126  return (eta < minRapidity_ || eta > maxRapidity_);
127  };
128  auto phiOk = [&](const TrackingParticle *p) {
129  float dphi = deltaPhi(atan2f(p->py(), p->px()), meanPhi_);
130  return dphi >= -rangePhi_ && dphi <= rangePhi_;
131  };
132  auto ptOk = [&](const TrackingParticle *p) {
133  double pt2 = tp->p4().perp2();
134  return pt2 >= ptMin2_ && pt2 <= ptMax2_;
135  };
136  return (tp->numberOfTrackerLayers() >= minHit_ && ptOk(tp) && etaOk(tp) && phiOk(tp) &&
137  std::abs(tp->vertex().z()) <= lip_ && // vertex last to avoid to load it if not striclty
138  // necessary...
139  tp->vertex().perp2() <= tip2_);
140  }
141 
143  auto pdgid = tp->pdgId();
144  if (!pdgId_.empty()) {
145  for (auto id : pdgId_) {
146  if (id == pdgid) {
147  return true;
148  }
149  }
150  } else {
151  return true;
152  }
153  return false;
154  }
155 
156 private:
157  double ptMin2_;
158  double ptMax2_;
161  float meanPhi_;
162  float rangePhi_;
163  double tip2_;
164  double lip_;
165  int minHit_;
170  std::vector<int> pdgId_;
172 };
173 
176 
177 namespace reco {
178  namespace modules {
179 
180  template <>
183  return make(cfg);
184  }
185 
187  return TrackingParticleSelector(cfg.getParameter<double>("ptMin"),
188  cfg.getParameter<double>("ptMax"),
189  cfg.getParameter<double>("minRapidity"),
190  cfg.getParameter<double>("maxRapidity"),
191  cfg.getParameter<double>("tip"),
192  cfg.getParameter<double>("lip"),
193  cfg.getParameter<int>("minHit"),
194  cfg.getParameter<bool>("signalOnly"),
195  cfg.getParameter<bool>("intimeOnly"),
196  cfg.getParameter<bool>("chargedOnly"),
197  cfg.getParameter<bool>("stableOnly"),
198  cfg.getParameter<std::vector<int>>("pdgId"),
199  cfg.getParameter<bool>("invertRapidityCut"),
200  cfg.getParameter<double>("minPhi"),
201  cfg.getParameter<double>("maxPhi"));
202  }
203  };
204 
205  } // namespace modules
206 } // namespace reco
207 
208 #endif
trackingParticleSelector_cfi.signalOnly
signalOnly
Definition: trackingParticleSelector_cfi.py:9
TrackingParticleSelector::TrackingParticleSelector
TrackingParticleSelector()
Definition: TrackingParticleSelector.h:18
HLT_FULL_cff.invertRapidityCut
invertRapidityCut
Definition: HLT_FULL_cff.py:53007
funct::false
false
Definition: Factorize.h:29
TrackingParticleSelector::chargedOnly_
bool chargedOnly_
Definition: TrackingParticleSelector.h:168
qcdUeDQM_cfi.minRapidity
minRapidity
Definition: qcdUeDQM_cfi.py:24
reco::modules::ParameterAdapter< TrackingParticleSelector >::make
static TrackingParticleSelector make(const edm::ParameterSet &cfg, edm::ConsumesCollector &iC)
Definition: TrackingParticleSelector.h:182
reco::modules::ParameterAdapter< TrackingParticleSelector >::make
static TrackingParticleSelector make(const edm::ParameterSet &cfg)
Definition: TrackingParticleSelector.h:186
deltaPhi.h
modules
Definition: MuonCleanerBySegments.cc:35
qcdUeDQM_cfi.maxRapidity
maxRapidity
Definition: qcdUeDQM_cfi.py:27
TrackingParticleSelector::select
bool select(const TrackingParticle *tp) const
Definition: TrackingParticleSelector.h:95
ptMin
constexpr float ptMin
Definition: PhotonIDValueMapProducer.cc:155
TrackingParticleSelector
Definition: TrackingParticleSelector.h:16
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:46
TrackingParticleSelector::signalOnly_
bool signalOnly_
Definition: TrackingParticleSelector.h:166
qcdUeDQM_cfi.lip
lip
Definition: qcdUeDQM_cfi.py:25
GenParticle.h
HLT_FULL_cff.maxPhi
maxPhi
Definition: HLT_FULL_cff.py:52995
TrackingParticleSelector::pdgId_
std::vector< int > pdgId_
Definition: TrackingParticleSelector.h:170
AlignmentTrackSelector_cfi.ptMax
ptMax
Definition: AlignmentTrackSelector_cfi.py:12
SiPixelRawToDigiRegional_cfi.deltaPhi
deltaPhi
Definition: SiPixelRawToDigiRegional_cfi.py:9
PVValHelper::eta
Definition: PVValidationHelpers.h:70
TrackingParticleSelector::maxRapidity_
float maxRapidity_
Definition: TrackingParticleSelector.h:160
TrackingParticle
Monte Carlo truth information used for tracking validation.
Definition: TrackingParticle.h:29
reco::modules::TrackingParticleSelector
SingleObjectSelector< TrackingParticleCollection, ::TrackingParticleSelector > TrackingParticleSelector
Definition: TrackingParticleSelector.cc:17
TrackingParticleSelector::ptMax2_
double ptMax2_
Definition: TrackingParticleSelector.h:158
cmsswSequenceInfo.tp
tp
Definition: cmsswSequenceInfo.py:17
TrackingParticleSelector::isStable
bool isStable(const TrackingParticle *tp) const
Definition: TrackingParticleSelector.h:75
qcdUeDQM_cfi.tip
tip
Definition: qcdUeDQM_cfi.py:23
TrackingParticleSelector::meanPhi_
float meanPhi_
Definition: TrackingParticleSelector.h:161
TrackingParticleSelector::invertRapidityCut_
bool invertRapidityCut_
Definition: TrackingParticleSelector.h:171
trackingParticleSelector_cfi.intimeOnly
intimeOnly
Definition: trackingParticleSelector_cfi.py:10
edm::ParameterSet
Definition: ParameterSet.h:47
AlCaHLTBitMon_ParallelJobs.p
def p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
genCandidates_cfi.stableOnly
stableOnly
Definition: genCandidates_cfi.py:6
TrackingParticleSelector::minHit_
int minHit_
Definition: TrackingParticleSelector.h:165
TrackingParticleSelector::rangePhi_
float rangePhi_
Definition: TrackingParticleSelector.h:162
M_PI
#define M_PI
Definition: BXVectorInputProducer.cc:49
EgammaValidation_cff.pdgId
pdgId
Definition: EgammaValidation_cff.py:117
reco::modules::ParameterAdapter::make
static S make(const edm::ParameterSet &cfg)
Definition: ParameterAdapter.h:13
TrackingParticleSelector::isCharged
bool isCharged(const TrackingParticle *tp) const
Definition: TrackingParticleSelector.h:67
TrackingParticleSelector::TrackingParticleSelector
TrackingParticleSelector(double ptMin, double ptMax, double minRapidity, double maxRapidity, double tip, double lip, int minHit, bool signalOnly, bool intimeOnly, bool chargedOnly, bool stableOnly, const std::vector< int > &pdgId=std::vector< int >(), bool invertRapidityCut=false, double minPhi=-3.2, double maxPhi=3.2)
Definition: TrackingParticleSelector.h:19
HLT_FULL_cff.pt2
pt2
Definition: HLT_FULL_cff.py:9895
qcdUeDQM_cfi.minHit
minHit
Definition: qcdUeDQM_cfi.py:33
SingleObjectSelectorBase
Definition: SingleObjectSelector.h:26
TrackingParticleSelector::lip_
double lip_
Definition: TrackingParticleSelector.h:164
looper.cfg
cfg
Definition: looper.py:296
TrackingParticleSelector::ptMin2_
double ptMin2_
Definition: TrackingParticleSelector.h:157
HLT_FULL_cff.minPhi
minPhi
Definition: HLT_FULL_cff.py:52994
TrackingParticle.h
PtEtaPhiMass.h
TrackingParticleSelector::selectParticleType
bool selectParticleType(const TrackingParticle *tp) const
Definition: TrackingParticleSelector.h:142
Exception
Definition: hltDiff.cc:245
edm::RefVectorIterator
Definition: EDProductfwd.h:33
TrackingParticleSelector::isInTime
bool isInTime(const TrackingParticle *tp) const
Definition: TrackingParticleSelector.h:69
TrackingParticleSelector::tip2_
double tip2_
Definition: TrackingParticleSelector.h:163
TrackingParticleSelector::stableOnly_
bool stableOnly_
Definition: TrackingParticleSelector.h:169
cosmictrackingParticleSelector_cfi.chargedOnly
chargedOnly
Definition: cosmictrackingParticleSelector_cfi.py:5
ParameterAdapter.h
TrackingParticleSelector::isSignal
bool isSignal(const TrackingParticle *tp) const
Definition: TrackingParticleSelector.h:71
ConsumesCollector.h
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
TrackingParticleSelector::operator()
bool operator()(const TrackingParticle *tp) const
Definition: TrackingParticleSelector.h:93
TrackingParticleSelector::minRapidity_
float minRapidity_
Definition: TrackingParticleSelector.h:159
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
EgammaValidation_cff.pdgid
pdgid
Definition: EgammaValidation_cff.py:29
TrackingParticleSelector::selectKinematics
bool selectKinematics(const TrackingParticle *tp) const
Definition: TrackingParticleSelector.h:120
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
TrackingParticleSelector::operator()
bool operator()(const TrackingParticle &tp) const
Definition: TrackingParticleSelector.h:92
reco::modules::ParameterAdapter
Definition: ParameterAdapter.h:12
TrackingParticleSelector::intimeOnly_
bool intimeOnly_
Definition: TrackingParticleSelector.h:167