16 double deltaR2(
double eta0,
double phi0,
double eta,
double phi){
20 return dphi*dphi+(eta-eta0)*(eta-eta0);
23 double deltaPhi(
double phi0,
double phi){
30 class ParticlePtGreater{
34 return p1->momentum().perp() > p2->momentum().perp();
41 token_(consumes<
edm::
HepMCProduct>(
edm::InputTag(iConfig.getUntrackedParameter(
"moduleLabel",
std::
string(
"generator")),
"unsmeared"))),
42 etaMax(iConfig.getUntrackedParameter<double>(
"MaxPhotonEta", 2.8)),
43 ptSeed(iConfig.getUntrackedParameter<double>(
"PhotonSeedPt", 5.)),
44 ptMin(iConfig.getUntrackedParameter<double>(
"MinPhotonPt")),
45 ptMax(iConfig.getUntrackedParameter<double>(
"MaxPhotonPt")),
46 dphiMin(iConfig.getUntrackedParameter<double>(
"MinDeltaPhi", -1)/180*
M_PI),
47 detaMax(iConfig.getUntrackedParameter<double>(
"MaxDeltaEta", 10.)),
48 etaPhotonCut2(iConfig.getUntrackedParameter<double>(
"MinPhotonEtaForwardJet", 1.3)),
49 cone(0.5),ebEtaMax(1.479),
50 maxnumberofeventsinrun(iConfig.getUntrackedParameter<
int>(
"MaxEvents",10000)){
65 throw cms::Exception(
"endJob")<<
"we have reached the maximum number of events ";
72 std::list<const HepMC::GenParticle *> seeds;
75 if(myGenEvent->signal_process_id() == 14 || myGenEvent->signal_process_id() == 29) {
78 for ( HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end(); ++
p ) {
80 if ( (*p)->pdg_id()==22 && (*p)->status()==1
81 && (*p)->momentum().perp() >
ptSeed 86 seeds.sort(ParticlePtGreater());
87 for(std::list<const HepMC::GenParticle *>::const_iterator is=
88 seeds.begin(); is!=seeds.end(); is++){
90 double etaPhoton=(*is)->momentum().eta();
91 double phiPhoton=(*is)->momentum().phi();
93 HepMC::GenEvent::particle_const_iterator ppp = myGenEvent->particles_begin();
94 for(
int i=0;
i<6;++
i) ppp++;
100 particle7->momentum().phi()));
102 particle8->momentum().phi()));
111 if(jetline==8) etaJet = particle8->momentum().eta();
112 else etaJet = particle7->momentum().eta();
118 if (etaPhoton<eta1 ||etaPhoton>eta2)
continue;
125 tgx=(*is)->momentum().px()/(*is)->momentum().pz();
126 tgy=(*is)->momentum().py()/(*is)->momentum().pz();
130 double etPhotonCharged=0;
132 double etConeCharged=0;
133 double ptMaxHadron=0;
136 for ( HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end(); ++
p ) {
138 if ( (*p)->status()!=1 )
continue;
139 int pid= (*p)->pdg_id();
141 if (apid>11 && apid<20)
continue;
142 double eta=(*p)->momentum().eta();
143 double phi=(*p)->momentum().phi();
145 double pt=(*p)->momentum().perp();
155 int charge3 = ((pdt->particle((*p)->pdg_id()))->ID().threeCharge());
157 if(charge3 && pt<2) etConeCharged+=
pt;
164 else if(
std::abs((*p)->momentum().px()/(*p)->momentum().pz() - tgx)
166 std::abs((*p)->momentum().py()/(*p)->momentum().pz() - tgy)
170 if(charge3 && pt<2) etPhotonCharged+=
pt;
171 if(apid>100 && apid!=310 && pt>ptMaxHadron) ptMaxHadron=
pt;
175 if(etPhoton<ptMin ||etPhoton>
ptMax)
continue;
178 if(etCone-etPhoton> 5+etPhoton/20-etPhoton*etPhoton/1
e4)
continue;
179 if(etCone-etPhoton-(etConeCharged-etPhotonCharged) >
180 3+etPhoton/20-etPhoton*etPhoton*etPhoton/1e6)
continue;
181 if(ptMaxHadron > 4.5+etPhoton/40)
continue;
~PythiaFilterGammaJet() override
PythiaFilterGammaJet(const edm::ParameterSet &)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::EDGetTokenT< edm::HepMCProduct > token_
bool getData(T &iHolder) const
Abs< T >::type abs(const T &t)
bool operator()(const HepMC::GenParticle *a, const HepMC::GenParticle *b) const
constexpr auto deltaR2(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
const HepMC::GenEvent * GetEvent() const
bool accepted(std::vector< std::string_view > const &, std::string_view)
bool filter(edm::Event &, const edm::EventSetup &) override
int maxnumberofeventsinrun