14 double deltaPhi(
double phi0,
double phi){
21 class ParticlePtGreater{
25 return p1->momentum().perp() > p2->momentum().perp();
33 etaMin(iConfig.getUntrackedParameter<double>(
"MinEMEta", 0)),
34 eTSumMin(iConfig.getUntrackedParameter<double>(
"ETSumMin", 50.)),
35 pTMin(iConfig.getUntrackedParameter<double>(
"MinEMpT", 5.)),
36 etaMax(iConfig.getUntrackedParameter<double>(
"MaxEMEta", 2.7)),
37 eTSumMax(iConfig.getUntrackedParameter<double>(
"ETSumMax", 100.)),
38 pTMax(iConfig.getUntrackedParameter<double>(
"MaxEMpT", 999999.)),
40 maxnumberofeventsinrun(iConfig.getUntrackedParameter<
int>(
"MaxEvents",3000000)){
48 cout <<
" Cut Definition: " << endl;
55 cout <<
" 5x5 crystal cone around EM axis in ECAL Barrel = " <<
deltaEB << endl;
56 cout <<
" 5x5 crystal cone around EM axis in ECAL Endcap = " <<
deltaEE << endl;
71 throw cms::Exception(
"endJob") <<
"we have reached the maximum number of events ";
81 list<const HepMC::GenParticle *> EM_seeds;
87 for ( HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
88 p != myGenEvent->particles_end();
92 if ( (
abs((*p)->pdg_id())==11 || (*p)->pdg_id()==22)
94 && (*p)->momentum().perp() >
pTMin 95 && (*p)->momentum().perp() <
pTMax 96 && fabs((*p)->momentum().eta()) <
etaMax 97 && fabs((*p)->momentum().eta()) >
etaMin ) {
98 EM_seeds.push_back(*
p);
103 EM_seeds.sort(ParticlePtGreater());
108 for(std::list<const HepMC::GenParticle *>::const_iterator is=EM_seeds.begin();
111 double etaEM=(*is)->momentum().eta();
112 double phiEM=(*is)->momentum().phi();
113 double ptEM=(*is)->momentum().perp();
125 tgx=(*is)->momentum().px()/(*is)->momentum().pz();
126 tgy=(*is)->momentum().py()/(*is)->momentum().pz();
132 for ( HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
133 p != myGenEvent->particles_end();
136 if (((*p)->status()==1 && (*p)->pdg_id() == 22) ||
137 ((*p)->status()==1 &&
abs((*p)->pdg_id()) == 11) )
163 double pt=(*p)->momentum().perp();
164 if (pt == ptEM) continue ;
165 double eta=(*p)->momentum().eta();
166 double phi=(*p)->momentum().phi();
172 else if(
std::abs((*p)->momentum().px()/(*p)->momentum().pz() - tgx)
174 std::abs((*p)->momentum().py()/(*p)->momentum().pz() - tgy)
179 etaEMClus += (eta-etaEMClus)*pt/ptEMClus ;
180 phiEMClus +=
deltaPhi(phi,phiEM)*pt/ptEMClus;
184 etaEMClus += ((*p)->momentum().px()/(*p)->momentum().pz() - tgx)*pt/ptEMClus ;
185 phiEMClus += ((*p)->momentum().py()/(*p)->momentum().pz() - tgy)*pt/ptEMClus;
196 <<
" Proccess ID " << myGenEvent->signal_process_id() << endl;
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::EDGetTokenT< edm::HepMCProduct > token_
~PythiaFilterEMJet() override
PythiaFilterEMJet(const edm::ParameterSet &)
bool filter(edm::Event &, const edm::EventSetup &) override
Abs< T >::type abs(const T &t)
const HepMC::GenEvent * GetEvent() const
bool accepted(std::vector< std::string_view > const &, std::string_view)
int maxnumberofeventsinrun