CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Private Attributes
CaloParticleSelector Class Reference

#include <CaloParticleSelector.h>

Public Member Functions

 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)
 
bool operator() (const CaloParticle &cp, std::vector< SimVertex > const &simVertices) const
 

Private Attributes

bool chargedOnly_
 
bool intimeOnly_
 
double lip_
 
float maxRapidity_
 
unsigned int maxSimClusters_
 
float meanPhi_
 
int minHit_
 
float minRapidity_
 
bool notConvertedOnly_
 
std::vector< int > pdgId_
 
double ptMax2_
 
double ptMin2_
 
float rangePhi_
 
bool signalOnly_
 
bool stableOnly_
 
double tip2_
 

Detailed Description

Definition at line 10 of file CaloParticleSelector.h.

Constructor & Destructor Documentation

CaloParticleSelector::CaloParticleSelector ( )
inline

Definition at line 12 of file CaloParticleSelector.h.

12 {}
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 
)
inline

Definition at line 13 of file CaloParticleSelector.h.

References Exception, M_PI, HLT_FULL_cff::maxPhi, and HLT_FULL_cff::minPhi.

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),
39  signalOnly_(signalOnly),
40  intimeOnly_(intimeOnly),
41  chargedOnly_(chargedOnly),
42  stableOnly_(stableOnly),
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  }
constexpr float ptMin
#define M_PI
std::vector< int > pdgId_

Member Function Documentation

bool CaloParticleSelector::operator() ( const CaloParticle cp,
std::vector< SimVertex > const &  simVertices 
) const
inline

Definition at line 64 of file CaloParticleSelector.h.

References funct::abs(), EncodedEventId::bunchCrossing(), CaloParticle::charge(), chargedOnly_, srCondWrite_cfg::deltaPhi, PVValHelper::eta, EncodedEventId::event(), CaloParticle::eventId(), CaloParticle::g4Tracks(), CaloParticle::genParticle_begin(), CaloParticle::genParticle_end(), intimeOnly_, dqmiolumiharvest::j, maxRapidity_, maxSimClusters_, meanPhi_, minRapidity_, notConvertedOnly_, AlCaHLTBitMon_ParallelJobs::p, CaloParticle::p4(), CaloParticle::pdgId(), pdgId_, ntuple::pdgids, ptMax2_, ptMin2_, rangePhi_, signalOnly_, CaloParticle::simClusters(), edm::RefVector< C, T, F >::size(), stableOnly_, and CaloParticle::status().

64  {
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_) {
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  }
int event() const
get the contents of the subdetector field (should be protected?)
list pdgids
Definition: ntuple.py:97
EncodedEventId eventId() const
Signal source, crossing number.
Definition: CaloParticle.h:54
float charge() const
Electric charge. Note this is taken from the first SimTrack only.
Definition: CaloParticle.h:79
int status() const
Status word.
Definition: CaloParticle.h:155
const std::vector< SimTrack > & g4Tracks() const
Definition: CaloParticle.h:74
genp_iterator genParticle_begin() const
iterators
Definition: CaloParticle.h:63
const math::XYZTLorentzVectorF & p4() const
Four-momentum Lorentz vector. Note this is taken from the first SimTrack only.
Definition: CaloParticle.h:85
const SimClusterRefVector & simClusters() const
Definition: CaloParticle.h:72
int bunchCrossing() const
get the detector field from this detid
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int pdgId() const
PDG ID.
Definition: CaloParticle.h:43
size_type size() const
Size of the RefVector.
Definition: RefVector.h:102
std::vector< int > pdgId_
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< float > > XYZTLorentzVectorF
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:22
genp_iterator genParticle_end() const
Definition: CaloParticle.h:64

Member Data Documentation

bool CaloParticleSelector::chargedOnly_
private

Definition at line 148 of file CaloParticleSelector.h.

Referenced by operator()().

bool CaloParticleSelector::intimeOnly_
private

Definition at line 147 of file CaloParticleSelector.h.

Referenced by operator()().

double CaloParticleSelector::lip_
private

Definition at line 140 of file CaloParticleSelector.h.

float CaloParticleSelector::maxRapidity_
private

Definition at line 139 of file CaloParticleSelector.h.

Referenced by operator()().

unsigned int CaloParticleSelector::maxSimClusters_
private

Definition at line 145 of file CaloParticleSelector.h.

Referenced by operator()().

float CaloParticleSelector::meanPhi_
private

Definition at line 142 of file CaloParticleSelector.h.

Referenced by operator()().

int CaloParticleSelector::minHit_
private

Definition at line 144 of file CaloParticleSelector.h.

float CaloParticleSelector::minRapidity_
private

Definition at line 138 of file CaloParticleSelector.h.

Referenced by operator()().

bool CaloParticleSelector::notConvertedOnly_
private

Definition at line 150 of file CaloParticleSelector.h.

Referenced by operator()().

std::vector<int> CaloParticleSelector::pdgId_
private

Definition at line 151 of file CaloParticleSelector.h.

Referenced by operator()().

double CaloParticleSelector::ptMax2_
private

Definition at line 137 of file CaloParticleSelector.h.

Referenced by operator()().

double CaloParticleSelector::ptMin2_
private

Definition at line 136 of file CaloParticleSelector.h.

Referenced by operator()().

float CaloParticleSelector::rangePhi_
private

Definition at line 143 of file CaloParticleSelector.h.

Referenced by operator()().

bool CaloParticleSelector::signalOnly_
private

Definition at line 146 of file CaloParticleSelector.h.

Referenced by operator()().

bool CaloParticleSelector::stableOnly_
private

Definition at line 149 of file CaloParticleSelector.h.

Referenced by operator()().

double CaloParticleSelector::tip2_
private

Definition at line 141 of file CaloParticleSelector.h.