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();
42 etaMin(iConfig.getUntrackedParameter<double>(
"MinPi0Eta", 1.65)),
43 PtMin(iConfig.getUntrackedParameter<double>(
"MinPi0Pt", 50.)),
44 etaMax(iConfig.getUntrackedParameter<double>(
"MaxPi0Eta", 2.5)),
45 PtMax(iConfig.getUntrackedParameter<double>(
"MaxPi0Pt", 100.)),
46 isocone(iConfig.getUntrackedParameter<double>(
"IsoCone",0.3)),
47 isodr(iConfig.getUntrackedParameter<double>(
"IsoDR",0.5)),
55 cout <<
" Cut Definition: " << endl;
61 cout <<
" Pi0 Isolation Cone = " <<
isocone << endl;
62 cout <<
" Max dR between pi0 and Photon = " <<
isodr << endl;
63 cout <<
" 5x5 crystal cone around pi0 axis in ECAL Barrel = " <<
deltaEB << endl;
64 cout <<
" 5x5 crystal cone around pi0 axis in ECAL Endcap = " <<
deltaEE << endl;
87 list<const HepMC::GenParticle *> pi0_seeds;
91 for ( HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
92 p != myGenEvent->particles_end(); ++
p ) {
94 double Particle_pt = (*p)->momentum().perp();
95 double Particle_eta = (*p)->momentum().eta();
97 if ( (*p)->pdg_id()==111) {
99 if(Particle_pt >
PtMin && Particle_pt <
PtMax && Particle_eta < etaMax && Particle_eta >
etaMin )
101 pi0_id = particle_id;
102 pi0_seeds.push_back(*
p);
109 HepMC::GenEvent::particle_const_iterator ppp = myGenEvent->particles_begin();
110 for(
int i=0;
i<7;++
i) ppp++;
114 if(particle8->pdg_id() == 22) {
118 if(pi0_seeds.size() == 1) {
119 double eta_photon = myGenEvent->barcode_to_particle(photon_id)->momentum().eta();
120 double phi_photon = myGenEvent->barcode_to_particle(photon_id)->momentum().eta();
121 double eta_pi0 = myGenEvent->barcode_to_particle(pi0_id)->momentum().eta();
122 double phi_pi0 = myGenEvent->barcode_to_particle(pi0_id)->momentum().phi();
124 double dr_pi0_photon =
sqrt(
deltaR2(eta_photon, phi_photon, eta_pi0, phi_pi0));
127 if(dr_pi0_photon >
isodr) {
134 tgx=myGenEvent->barcode_to_particle(pi0_id)->momentum().px()/myGenEvent->barcode_to_particle(pi0_id)->momentum().pz();
135 tgy=myGenEvent->barcode_to_particle(pi0_id)->momentum().py()/myGenEvent->barcode_to_particle(pi0_id)->momentum().pz();
139 double etPi0Charged=0;
141 double etConeCharged=0;
142 double ptMaxHadron=0;
144 for ( HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
145 p != myGenEvent->particles_end(); ++
p ) {
147 if ( (*p)->status()!=1 )
continue;
148 int pid= (*p)->pdg_id();
150 if (apid>11 && apid<21)
continue;
151 double eta=(*p)->momentum().eta();
152 double phi=(*p)->momentum().phi();
154 double pt=(*p)->momentum().perp();
160 int charge3 = ((pdt->particle((*p)->pdg_id()))->ID().threeCharge());
162 if(charge3) etConeCharged+=
pt;
169 else if( fabs((*p)->momentum().px()/(*p)->momentum().pz() - tgx) >
deltaEE ||
170 fabs((*p)->momentum().py()/(*p)->momentum().pz() - tgy) >
deltaEE)
continue;
174 if(charge3) etPi0Charged+=
pt;
176 if(apid>100 && apid!=310 && pt>ptMaxHadron) ptMaxHadron=
pt;
182 double iso_cut1 = 5 + etPi0/20 - etPi0*etPi0/1
e4;
183 double iso_cut2 = 3 + etPi0/20 - etPi0*etPi0*etPi0/1e6;
184 double iso_cut3 = 4.5 + etPi0/40;
187 iso_cut1 = 5.+165./20.-165.*165./1
e4;
188 iso_cut2 = 3.+165./20.-165.*165.*165./1e6;
189 iso_cut3 = 4.5+165./40.;
191 double iso_cut4 = 0.02;
194 double iso_val1 = etCone - etPi0;
195 double iso_val2 = iso_val1 - (etConeCharged - etPi0Charged);
196 double iso_val3 = etConeCharged/etPi0;
198 if( iso_val1 < iso_cut1) {
199 if( iso_val2 < iso_cut2) {
200 if(ptMaxHadron < iso_cut3) {
201 if(iso_val3 < iso_cut4) {
213 cout <<
"========> Event: " << iEvent.
id()
214 <<
" of Proccess ID " << myGenEvent->signal_process_id()
215 <<
" preselected " << endl;
bool filter(edm::Event &, const edm::EventSetup &) override
bool getByToken(EDGetToken token, Handle< PROD > &result) const
~PythiaFilterGammaJetIsoPi0() override
edm::EDGetTokenT< edm::HepMCProduct > token_
bool getData(T &iHolder) const
Abs< T >::type abs(const T &t)
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)
PythiaFilterGammaJetIsoPi0(const edm::ParameterSet &)