CMS 3D CMS Logo

CaloParticleSelector.h
Go to the documentation of this file.
1 #ifndef Validation_HGCalValidation_CaloParticleSelector_h
2 #define Validation_HGCalValidation_CaloParticleSelector_h
3 
9 
11 public:
14  double ptMax,
15  double minRapidity,
16  double maxRapidity,
17  double lip,
18  double tip,
19  int minHit,
20  unsigned int maxSimClusters,
21  bool signalOnly,
22  bool intimeOnly,
23  bool chargedOnly,
24  bool stableOnly,
25  bool notConvertedOnly,
26  const std::vector<int>& pdgId = std::vector<int>(),
27  double minPhi = -3.2,
28  double maxPhi = 3.2)
29  : ptMin2_(ptMin * ptMin),
30  ptMax2_(ptMax * ptMax),
33  lip_(lip),
34  tip2_(tip * tip),
35  meanPhi_((minPhi + maxPhi) / 2.),
36  rangePhi_((maxPhi - minPhi) / 2.),
37  minHit_(minHit),
38  maxSimClusters_(maxSimClusters),
43  notConvertedOnly_(notConvertedOnly),
44  pdgId_(pdgId) {
45  if (minPhi >= maxPhi) {
46  throw cms::Exception("Configuration")
47  << "CaloParticleSelector: minPhi (" << minPhi << ") must be smaller than maxPhi (" << maxPhi
48  << "). The range is constructed from minPhi to maxPhi around their average.";
49  }
50  if (minPhi >= M_PI) {
51  throw cms::Exception("Configuration")
52  << "CaloParticleSelector: minPhi (" << minPhi
53  << ") must be smaller than PI. The range is constructed from minPhi to maxPhi around their average.";
54  }
55  if (maxPhi <= -M_PI) {
56  throw cms::Exception("Configuration")
57  << "CaloParticleSelector: maxPhi (" << maxPhi
58  << ") must be larger than -PI. The range is constructed from minPhi to maxPhi around their average.";
59  }
60  }
61 
62  // Operator() performs the selection: e.g. if (cPSelector(cp)) {...}
63  // For the moment there shouldn't be any SimTracks from different crossings in the CaloParticle.
64  bool operator()(const CaloParticle& cp, std::vector<SimVertex> const& simVertices) const {
65  // signal only means no PU particles
66  if (signalOnly_ && !(cp.eventId().bunchCrossing() == 0 && cp.eventId().event() == 0))
67  return false;
68  // intime only means no OOT PU particles
69  if (intimeOnly_ && !(cp.eventId().bunchCrossing() == 0))
70  return false;
71 
72  if (cp.simClusters().size() > maxSimClusters_)
73  return false;
74 
75  auto pdgid = cp.pdgId();
76  if (!pdgId_.empty()) {
77  bool testId = false;
78  for (auto id : pdgId_) {
79  if (id == pdgid) {
80  testId = true;
81  break;
82  }
83  }
84  if (!testId)
85  return false;
86  }
87 
88  if (chargedOnly_ && cp.charge() == 0)
89  return false; //select only if charge!=0
90 
91  // select only stable particles
92  if (stableOnly_) {
93  for (CaloParticle::genp_iterator j = cp.genParticle_begin(); j != cp.genParticle_end(); ++j) {
94  if (j->get() == nullptr || j->get()->status() != 1) {
95  return false;
96  }
97  }
98 
99  // test for remaining unstabled due to lack of genparticle pointer
100  std::vector<int> pdgids{11, 13, 211, 321, 2212, 3112, 3222, 3312, 3334};
101  if (cp.status() == -99 && (!std::binary_search(pdgids.begin(), pdgids.end(), std::abs(pdgid)))) {
102  return false;
103  }
104  }
105 
106  // select only particles which did not convert/decay before the calorimeter
107  // in case of electrons, bremsstrahlung is usually the cause, thus this selection is skipped
108  if (std::abs(pdgid) != 11) {
109  if (notConvertedOnly_) {
110  if (cp.g4Tracks()[0].getPositionAtBoundary() == math::XYZTLorentzVectorF(0, 0, 0, 0)) {
111  return false;
112  }
113  if (cp.g4Tracks()[0].getMomentumAtBoundary() == math::XYZTLorentzVectorF(0, 0, 0, 0)) {
114  return false;
115  }
116  }
117  }
118 
119  auto etaOk = [&](const CaloParticle& p) -> bool {
120  float eta = etaFromXYZ(p.px(), p.py(), p.pz());
121  return (eta >= minRapidity_) & (eta <= maxRapidity_);
122  };
123  auto phiOk = [&](const CaloParticle& p) {
124  float dphi = deltaPhi(atan2f(p.py(), p.px()), meanPhi_);
125  return dphi >= -rangePhi_ && dphi <= rangePhi_;
126  };
127  auto ptOk = [&](const CaloParticle& p) {
128  double pt2 = cp.p4().perp2();
129  return pt2 >= ptMin2_ && pt2 <= ptMax2_;
130  };
131 
132  return (ptOk(cp) && etaOk(cp) && phiOk(cp));
133  }
134 
135 private:
136  double ptMin2_;
137  double ptMax2_;
140  double lip_;
141  double tip2_;
142  float meanPhi_;
143  float rangePhi_;
144  int minHit_;
145  unsigned int maxSimClusters_;
151  std::vector<int> pdgId_;
152 };
153 
156 
157 namespace reco {
158  namespace modules {
159 
160  template <>
163 
165  return CaloParticleSelector(cfg.getParameter<double>("ptMinCP"),
166  cfg.getParameter<double>("ptMaxCP"),
167  cfg.getParameter<double>("minRapidityCP"),
168  cfg.getParameter<double>("maxRapidityCP"),
169  cfg.getParameter<double>("lip"),
170  cfg.getParameter<double>("tip"),
171  cfg.getParameter<int>("minHitCP"),
172  cfg.getParameter<int>("maxSimClustersCP"),
173  cfg.getParameter<bool>("signalOnlyCP"),
174  cfg.getParameter<bool>("intimeOnlyCP"),
175  cfg.getParameter<bool>("chargedOnlyCP"),
176  cfg.getParameter<bool>("stableOnlyCP"),
177  cfg.getParameter<bool>("notConvertedOnlyCP"),
178  cfg.getParameter<std::vector<int> >("pdgIdCP"),
179  cfg.getParameter<double>("minPhiCP"),
180  cfg.getParameter<double>("maxPhiCP"));
181  }
182  };
183 
184  } // namespace modules
185 } // namespace reco
186 
187 #endif
trackingParticleSelector_cfi.signalOnly
signalOnly
Definition: trackingParticleSelector_cfi.py:9
qcdUeDQM_cfi.minRapidity
minRapidity
Definition: qcdUeDQM_cfi.py:24
reco::modules::ParameterAdapter< CaloParticleSelector >::make
static CaloParticleSelector make(const edm::ParameterSet &cfg)
Definition: CaloParticleSelector.h:164
deltaPhi.h
modules
Definition: MuonCleanerBySegments.cc:35
qcdUeDQM_cfi.maxRapidity
maxRapidity
Definition: qcdUeDQM_cfi.py:27
math::XYZTLorentzVectorF
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< float > > XYZTLorentzVectorF
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:22
CaloParticleSelector::CaloParticleSelector
CaloParticleSelector(double ptMin, double ptMax, double minRapidity, double maxRapidity, double lip, double tip, int minHit, unsigned int maxSimClusters, bool signalOnly, bool intimeOnly, bool chargedOnly, bool stableOnly, bool notConvertedOnly, const std::vector< int > &pdgId=std::vector< int >(), double minPhi=-3.2, double maxPhi=3.2)
Definition: CaloParticleSelector.h:13
ptMin
constexpr float ptMin
Definition: PhotonIDValueMapProducer.cc:155
hgcal_conditions::parameters
Definition: HGCConditions.h:86
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:46
CaloParticleSelector::meanPhi_
float meanPhi_
Definition: CaloParticleSelector.h:142
CaloParticleSelector::intimeOnly_
bool intimeOnly_
Definition: CaloParticleSelector.h:147
CaloParticleSelector::rangePhi_
float rangePhi_
Definition: CaloParticleSelector.h:143
qcdUeDQM_cfi.lip
lip
Definition: qcdUeDQM_cfi.py:25
GenParticle.h
CaloParticleSelector::chargedOnly_
bool chargedOnly_
Definition: CaloParticleSelector.h:148
HLT_FULL_cff.maxPhi
maxPhi
Definition: HLT_FULL_cff.py:52995
CaloParticleSelector
Definition: CaloParticleSelector.h:10
AlignmentTrackSelector_cfi.ptMax
ptMax
Definition: AlignmentTrackSelector_cfi.py:12
SiPixelRawToDigiRegional_cfi.deltaPhi
deltaPhi
Definition: SiPixelRawToDigiRegional_cfi.py:9
PVValHelper::eta
Definition: PVValidationHelpers.h:70
CaloParticleSelector::operator()
bool operator()(const CaloParticle &cp, std::vector< SimVertex > const &simVertices) const
Definition: CaloParticleSelector.h:64
SimVertex.h
CaloParticleSelector::minRapidity_
float minRapidity_
Definition: CaloParticleSelector.h:138
qcdUeDQM_cfi.tip
tip
Definition: qcdUeDQM_cfi.py:23
reco::modules::ParameterAdapter< CaloParticleSelector >::make
static CaloParticleSelector make(const edm::ParameterSet &cfg, edm::ConsumesCollector &iC)
Definition: CaloParticleSelector.h:162
trackingParticleSelector_cfi.intimeOnly
intimeOnly
Definition: trackingParticleSelector_cfi.py:10
edm::ParameterSet
Definition: ParameterSet.h:47
CaloParticle
Definition: CaloParticle.h:16
AlCaHLTBitMon_ParallelJobs.p
def p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
genCandidates_cfi.stableOnly
stableOnly
Definition: genCandidates_cfi.py:6
CaloParticle.h
M_PI
#define M_PI
Definition: BXVectorInputProducer.cc:49
CaloParticleSelector::tip2_
double tip2_
Definition: CaloParticleSelector.h:141
EgammaValidation_cff.pdgId
pdgId
Definition: EgammaValidation_cff.py:117
HLT_FULL_cff.pt2
pt2
Definition: HLT_FULL_cff.py:9895
qcdUeDQM_cfi.minHit
minHit
Definition: qcdUeDQM_cfi.py:33
CaloParticleSelector::lip_
double lip_
Definition: CaloParticleSelector.h:140
looper.cfg
cfg
Definition: looper.py:296
HLT_FULL_cff.minPhi
minPhi
Definition: HLT_FULL_cff.py:52994
PtEtaPhiMass.h
CaloParticleSelector::maxRapidity_
float maxRapidity_
Definition: CaloParticleSelector.h:139
Exception
Definition: hltDiff.cc:245
edm::RefVectorIterator
Definition: EDProductfwd.h:33
CaloParticleSelector::CaloParticleSelector
CaloParticleSelector()
Definition: CaloParticleSelector.h:12
cosmictrackingParticleSelector_cfi.chargedOnly
chargedOnly
Definition: cosmictrackingParticleSelector_cfi.py:5
CaloParticleSelector::maxSimClusters_
unsigned int maxSimClusters_
Definition: CaloParticleSelector.h:145
CaloParticleSelector::signalOnly_
bool signalOnly_
Definition: CaloParticleSelector.h:146
ParameterAdapter.h
ConsumesCollector.h
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
HGCalValidator_cfi.simVertices
simVertices
Definition: HGCalValidator_cfi.py:57
ntuple.pdgids
pdgids
Definition: ntuple.py:97
CaloParticleSelector::stableOnly_
bool stableOnly_
Definition: CaloParticleSelector.h:149
dqmiolumiharvest.j
j
Definition: dqmiolumiharvest.py:66
CaloParticleSelector::ptMin2_
double ptMin2_
Definition: CaloParticleSelector.h:136
CaloParticleSelector::ptMax2_
double ptMax2_
Definition: CaloParticleSelector.h:137
EgammaValidation_cff.pdgid
pdgid
Definition: EgammaValidation_cff.py:29
CaloParticleSelector::minHit_
int minHit_
Definition: CaloParticleSelector.h:144
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
CaloParticleSelector::notConvertedOnly_
bool notConvertedOnly_
Definition: CaloParticleSelector.h:150
reco::modules::ParameterAdapter
Definition: ParameterAdapter.h:12
CaloParticleSelector::pdgId_
std::vector< int > pdgId_
Definition: CaloParticleSelector.h:151