CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Attributes
PythiaFilterIsolatedTrack Class Reference

#include <PythiaFilterIsolatedTrack.h>

Inheritance diagram for PythiaFilterIsolatedTrack:
edm::stream::EDFilter< edm::GlobalCache< PythiaFilterIsoTracks::Counters > > edm::stream::EDFilterBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

void endStream () override
 
bool filter (edm::Event &, edm::EventSetup const &) override
 
double getDistInCM (double eta1, double phi1, double eta2, double phi2)
 
std::pair< double, double > GetEtaPhiAtEcal (double etaIP, double phiIP, double pT, int charge, double vtxZ)
 
 PythiaFilterIsolatedTrack (const edm::ParameterSet &, const PythiaFilterIsoTracks::Counters *count)
 
 ~PythiaFilterIsolatedTrack () override
 
- Public Member Functions inherited from edm::stream::EDFilter< edm::GlobalCache< PythiaFilterIsoTracks::Counters > >
 EDFilter ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 
- Public Member Functions inherited from edm::stream::EDFilterBase
 EDFilterBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDFilterBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void globalEndJob (const PythiaFilterIsoTracks::Counters *counters)
 
static std::unique_ptr< PythiaFilterIsoTracks::CountersinitializeGlobalCache (edm::ParameterSet const &)
 
- Static Public Member Functions inherited from edm::stream::EDFilterBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Attributes

double ecDist_
 
double ecRad_
 
double IsolCone_
 
double MaxSeedEta_
 
double MinIsolTrackMom_
 
double MinSeedMom_
 
unsigned int nAll_
 
unsigned int nGood_
 
bool onlyHadrons_
 
edm::EDGetTokenT< edm::HepMCProducttoken_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDFilter< edm::GlobalCache< PythiaFilterIsoTracks::Counters > >
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDFilterBase
typedef EDFilterAdaptorBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

PythiaFilterGammaJet filter implements generator-level preselections for ChargedHadron+jet like events to be used in jet energy calibration. Ported from fortran code written by V.Konoplianikov.

Author
O.Kodolova, SINP

Cleaned up code

Author
J.P. Chou, Brown University

Definition at line 43 of file PythiaFilterIsolatedTrack.h.

Constructor & Destructor Documentation

PythiaFilterIsolatedTrack::PythiaFilterIsolatedTrack ( const edm::ParameterSet iConfig,
const PythiaFilterIsoTracks::Counters count 
)
explicit

Definition at line 77 of file PythiaFilterIsolatedTrack.cc.

References edm::ParameterSet::getUntrackedParameter(), IsolCone_, MaxSeedEta_, MinIsolTrackMom_, MinSeedMom_, onlyHadrons_, and token_.

77  : nAll_(0), nGood_(0), ecDist_(317.0), ecRad_(129.0) {
78 
79  token_ = consumes<edm::HepMCProduct>(iConfig.getUntrackedParameter("ModuleLabel",edm::InputTag("generator","unsmeared")));
80  MaxSeedEta_ = iConfig.getUntrackedParameter<double>("MaxSeedEta", 2.3);
81  MinSeedMom_ = iConfig.getUntrackedParameter<double>("MinSeedMom", 20.);
82  MinIsolTrackMom_ = iConfig.getUntrackedParameter<double>("MinIsolTrackMom",2.0);
83  IsolCone_ = iConfig.getUntrackedParameter<double>("IsolCone", 40.0);
84  onlyHadrons_= iConfig.getUntrackedParameter<bool>("OnlyHadrons", true);
85 }
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< edm::HepMCProduct > token_
PythiaFilterIsolatedTrack::~PythiaFilterIsolatedTrack ( )
override

Definition at line 87 of file PythiaFilterIsolatedTrack.cc.

87 { }

Member Function Documentation

void PythiaFilterIsolatedTrack::endStream ( )
overridevirtual

Reimplemented from edm::stream::EDFilterBase.

Definition at line 172 of file PythiaFilterIsolatedTrack.cc.

References nAll_, and nGood_.

172  {
173  globalCache()->nAll_ += nAll_;
174  globalCache()->nGood_ += nGood_;
175 }
bool PythiaFilterIsolatedTrack::filter ( edm::Event iEvent,
edm::EventSetup const &  iSetup 
)
overridevirtual

Implements edm::stream::EDFilterBase.

Definition at line 90 of file PythiaFilterIsolatedTrack.cc.

References funct::abs(), MBUEandQCDValidation_cff::chargedParticles, GenParticle::GenParticle, edm::Event::getByToken(), edm::EventSetup::getData(), getDistInCM(), GetEtaPhiAtEcal(), edm::HepMCProduct::GetEvent(), IsolCone_, MaxSeedEta_, MinIsolTrackMom_, MinSeedMom_, nAll_, nGood_, onlyHadrons_, AlCaHLTBitMon_ParallelJobs::p, p1, p2, mps_update::status, and token_.

90  {
91 
92  ++nAll_;
94  iSetup.getData( pdt );
95 
97  iEvent.getByToken(token_, evt);
98 
99  const HepMC::GenEvent* myGenEvent = evt->GetEvent();
100 
101  // all of the stable, charged particles with momentum>MinIsolTrackMom_ and |eta|<MaxSeedEta_+0.5
102  std::vector<const HepMC::GenParticle *> chargedParticles;
103 
104  // all of the stable, charged particles with momentum>MinSeedMom_ and |eta|<MaxSeedEta_
105  std::vector<const HepMC::GenParticle *> seeds;
106 
107  // fill the vector of charged particles and seeds in the event
108  for (HepMC::GenEvent::particle_const_iterator iter=myGenEvent->particles_begin(); iter!=myGenEvent->particles_end(); ++iter) {
109  const HepMC::GenParticle *p=*iter;
110  if (!(pdt->particle(p->pdg_id()))) continue;
111  int charge3 = pdt->particle(p->pdg_id())->ID().threeCharge();
112  int status = p->status();
113  double momentum = p->momentum().rho();
114  double abseta = fabs(p->momentum().eta());
115 
116  // only consider stable, charged particles
117  if (abs(charge3)==3 && status==1 && momentum>MinIsolTrackMom_ && abseta<MaxSeedEta_+0.5) {
118  chargedParticles.push_back(p);
119  if (momentum>MinSeedMom_ && abseta<MaxSeedEta_) {
120  seeds.push_back(p);
121  }
122  }
123  }
124 
125  // loop over all the seeds and see if any of them are isolated
126  unsigned int ntrk(0);
127  for (std::vector<const HepMC::GenParticle *>::const_iterator it1=seeds.begin(); it1!=seeds.end(); ++it1) {
128  const HepMC::GenParticle *p1=*it1;
129  if (!(pdt->particle(p1->pdg_id()))) continue;
130  if (p1->pdg_id() < -100 || p1->pdg_id() > 100 || (!onlyHadrons_)) { // Select hadrons only
131  std::pair<double,double> EtaPhi1=GetEtaPhiAtEcal(p1->momentum().eta(),
132  p1->momentum().phi(),
133  p1->momentum().perp(),
134  (pdt->particle(p1->pdg_id()))->ID().threeCharge()/3,
135  0.0);
136 
137  // loop over all of the other charged particles in the event, and see if any are close by
138  bool failsIso=false;
139  for (std::vector<const HepMC::GenParticle *>::const_iterator it2=chargedParticles.begin(); it2!=chargedParticles.end(); ++it2) {
140  const HepMC::GenParticle *p2=*it2;
141 
142  // don't consider the seed particle among the other charge particles
143  if (p1!=p2) {
144 
145  std::pair<double,double> EtaPhi2=GetEtaPhiAtEcal(p2->momentum().eta(),
146  p2->momentum().phi(),
147  p2->momentum().perp(),
148  (pdt->particle(p2->pdg_id()))->ID().threeCharge()/3,
149  0.0);
150 
151  // find out how far apart the particles are
152  // if the seed fails the isolation requirement, try a different seed
153  // occasionally allow a seed to pass to isolation requirement
154  if (getDistInCM(EtaPhi1.first, EtaPhi1.second, EtaPhi2.first, EtaPhi2.second) < IsolCone_) {
155  failsIso=true;
156  break;
157  }
158  }
159  }
160 
161  if (!failsIso) ++ntrk;
162  }
163  } //loop over seeds
164  if (ntrk>0) {
165  ++nGood_;
166  return true;
167  } else {
168  return false;
169  }
170 }
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
uint32_t ID
Definition: Definitions.h:26
edm::EDGetTokenT< edm::HepMCProduct > token_
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double p2[4]
Definition: TauolaWrapper.h:90
double getDistInCM(double eta1, double phi1, double eta2, double phi2)
const HepMC::GenEvent * GetEvent() const
Definition: HepMCProduct.h:38
double p1[4]
Definition: TauolaWrapper.h:89
std::pair< double, double > GetEtaPhiAtEcal(double etaIP, double phiIP, double pT, int charge, double vtxZ)
double PythiaFilterIsolatedTrack::getDistInCM ( double  eta1,
double  phi1,
double  eta2,
double  phi2 
)

Definition at line 61 of file PythiaFilterIsolatedTrack.cc.

References funct::cos(), ecDist_, ecRad_, mathSSE::sqrt(), and z.

Referenced by filter().

62 {
63  double dR, Rec;
64  if (fabs(eta1)<1.479) Rec=ecRad_;
65  else Rec=ecDist_;
66  double ce1=cosh(eta1);
67  double ce2=cosh(eta2);
68  double te1=tanh(eta1);
69  double te2=tanh(eta2);
70 
71  double z=cos(phi1-phi2)/ce1/ce2+te1*te2;
72  if(z!=0) dR=fabs(Rec*ce1*sqrt(1./z/z-1.));
73  else dR=999999.;
74  return dR;
75 }
T sqrt(T t)
Definition: SSEVec.h:18
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
std::pair< double, double > PythiaFilterIsolatedTrack::GetEtaPhiAtEcal ( double  etaIP,
double  phiIP,
double  pT,
int  charge,
double  vtxZ 
)

Definition at line 14 of file PythiaFilterIsolatedTrack.cc.

References alpha, ALCARECOTkAlJpsiMuMu_cff::charge, hiPixelPairStep_cff::deltaPhi, ecDist_, ecRad_, JetChargeProducer_cfi::exp, cmsBatch::log, pi, funct::sin(), funct::tan(), theta(), and z.

Referenced by filter().

15 {
16  double deltaPhi;
17  double etaEC=100;
18  double phiEC=100;
19  double Rcurv=pT*33.3*100/38; //r(m)=pT(GeV)*33.3/B(kG)
20  double theta=2*atan(exp(-etaIP));
21  double zNew;
22  if (theta>CLHEP::halfpi) theta=CLHEP::pi-theta;
23  if (fabs(etaIP)<1.479) {
24  deltaPhi=-charge*asin(0.5*ecRad_/Rcurv);
25  double alpha1=2*asin(0.5*ecRad_/Rcurv);
26  double z=ecRad_/tan(theta);
27  if (etaIP>0) zNew=z*(Rcurv*alpha1)/ecRad_+vtxZ; //new z-coordinate of track
28  else zNew=-z*(Rcurv*alpha1)/ecRad_+vtxZ; //new z-coordinate of track
29  double zAbs=fabs(zNew);
30  if (zAbs<ecDist_) {
31  etaEC=-log(tan(0.5*atan(ecRad_/zAbs)));
32  deltaPhi=-charge*asin(0.5*ecRad_/Rcurv);
33  }
34  if (zAbs>ecDist_) {
35  zAbs=(fabs(etaIP)/etaIP)*ecDist_;
36  double Zflight=fabs(zAbs-vtxZ);
37  double alpha=(Zflight*ecRad_)/(z*Rcurv);
38  double Rec=2*Rcurv*sin(alpha/2);
39  deltaPhi=-charge*alpha/2;
40  etaEC=-log(tan(0.5*atan(Rec/ecDist_)));
41  }
42  } else {
43  zNew=(fabs(etaIP)/etaIP)*ecDist_;
44  double Zflight=fabs(zNew-vtxZ);
45  double Rvirt=fabs(Zflight*tan(theta));
46  double Rec=2*Rcurv*sin(Rvirt/(2*Rcurv));
47  deltaPhi=-(charge)*(Rvirt/(2*Rcurv));
48  etaEC=-log(tan(0.5*atan(Rec/ecDist_)));
49  }
50 
51  if (zNew<0) etaEC=-etaEC;
52  phiEC=phiIP+deltaPhi;
53 
54  if (phiEC<-CLHEP::pi) phiEC= 2*CLHEP::pi+phiEC;
55  if (phiEC> CLHEP::pi) phiEC=-2*CLHEP::pi+phiEC;
56 
57  std::pair<double,double> retVal(etaEC,phiEC);
58  return retVal;
59 }
float alpha
Definition: AMPTWrapper.h:95
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Geom::Theta< T > theta() const
const Double_t pi
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
void PythiaFilterIsolatedTrack::globalEndJob ( const PythiaFilterIsoTracks::Counters counters)
static

Definition at line 177 of file PythiaFilterIsolatedTrack.cc.

References PythiaFilterIsoTracks::Counters::nAll_, and PythiaFilterIsoTracks::Counters::nGood_.

177  {
178  edm::LogInfo("PythiaFilter") << "PythiaFilterIsolatedTrack::Accepts "
179  << count->nGood_ <<" events out of "
180  << count->nAll_ << std::endl;
181 }
static std::unique_ptr<PythiaFilterIsoTracks::Counters> PythiaFilterIsolatedTrack::initializeGlobalCache ( edm::ParameterSet const &  )
inlinestatic

Definition at line 49 of file PythiaFilterIsolatedTrack.h.

References ALCARECOTkAlJpsiMuMu_cff::charge, ALCARECOTkAlBeamHalo_cff::filter, and PVValHelper::pT.

49  {
50  return std::unique_ptr<PythiaFilterIsoTracks::Counters>(new PythiaFilterIsoTracks::Counters());
51  }

Member Data Documentation

double PythiaFilterIsolatedTrack::ecDist_
private

Definition at line 72 of file PythiaFilterIsolatedTrack.h.

Referenced by getDistInCM(), and GetEtaPhiAtEcal().

double PythiaFilterIsolatedTrack::ecRad_
private

Definition at line 73 of file PythiaFilterIsolatedTrack.h.

Referenced by getDistInCM(), and GetEtaPhiAtEcal().

double PythiaFilterIsolatedTrack::IsolCone_
private

Definition at line 68 of file PythiaFilterIsolatedTrack.h.

Referenced by filter(), and PythiaFilterIsolatedTrack().

double PythiaFilterIsolatedTrack::MaxSeedEta_
private

Definition at line 65 of file PythiaFilterIsolatedTrack.h.

Referenced by filter(), and PythiaFilterIsolatedTrack().

double PythiaFilterIsolatedTrack::MinIsolTrackMom_
private

Definition at line 67 of file PythiaFilterIsolatedTrack.h.

Referenced by filter(), and PythiaFilterIsolatedTrack().

double PythiaFilterIsolatedTrack::MinSeedMom_
private

Definition at line 66 of file PythiaFilterIsolatedTrack.h.

Referenced by filter(), and PythiaFilterIsolatedTrack().

unsigned int PythiaFilterIsolatedTrack::nAll_
private

Definition at line 71 of file PythiaFilterIsolatedTrack.h.

Referenced by endStream(), and filter().

unsigned int PythiaFilterIsolatedTrack::nGood_
private

Definition at line 71 of file PythiaFilterIsolatedTrack.h.

Referenced by endStream(), and filter().

bool PythiaFilterIsolatedTrack::onlyHadrons_
private

Definition at line 69 of file PythiaFilterIsolatedTrack.h.

Referenced by filter(), and PythiaFilterIsolatedTrack().

edm::EDGetTokenT<edm::HepMCProduct> PythiaFilterIsolatedTrack::token_
private

Definition at line 64 of file PythiaFilterIsolatedTrack.h.

Referenced by filter(), and PythiaFilterIsolatedTrack().