22 return sqrt(dphi*dphi+(eta-eta0)*(eta-eta0));
25 struct ParticlePtGreater{
28 return a->momentum().perp() > b->momentum().perp();
37 minEventPt(iConfig.getUntrackedParameter<double>(
"MinEventPt",40.)),
38 etaMax(iConfig.getUntrackedParameter<double>(
"MaxEta", 2.8)),
39 cone_clust(iConfig.getUntrackedParameter<double>(
"ConeClust",0.10)),
40 cone_iso(iConfig.getUntrackedParameter<double>(
"ConeIso",0.50)),
41 nPartMin(iConfig.getUntrackedParameter<unsigned
int>(
"NumPartMin", 2)),
42 drMin(iConfig.getUntrackedParameter<double>(
"dRMin", 0.4)),
78 std::cout <<
" ... Minbias preselection ... " << std::endl;
126 throw cms::Exception(
"endJob")<<
"we have reached the maximum number of events ";
137 std::list<const HepMC::GenParticle *> seeds;
138 std::list<const HepMC::GenParticle *>
candidates;
141 for ( HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end(); ++
p ) {
143 double pt=(*p)->momentum().perp();
144 double eta=(*p)->momentum().eta();
146 int pdgid = (*p)->pdg_id();
147 if ( !(pdgid==22 ||
abs(pdgid)==11 ||
abs(pdgid)==211 ||
abs(pdgid)==321) )
continue;
154 if (fabs(eta)<1.5) EB =
true;
155 else if (fabs(eta)>=1.5&&fabs(eta)<
etaMax) EE =
true;
166 if (seeds.size() <
nPartMin )
return false;
168 seeds.sort(ParticlePtGreater());
171 std::list<const HepMC::GenParticle*>::iterator itSeed;
173 for(itSeed = seeds.begin(); itSeed != seeds.end(); ++itSeed) {
175 double pt=(*itSeed)->momentum().perp();
176 double eta=(*itSeed)->momentum().eta();
177 double phi=(*itSeed)->momentum().phi();
181 if (fabs(eta)<1.5) EB =
true;
182 else if (fabs(eta)>=1.5&&fabs(eta)<
etaMax) EE =
true;
192 for ( HepMC::GenEvent::particle_const_iterator
pp = myGenEvent->particles_begin();
pp != myGenEvent->particles_end(); ++
pp ) {
194 if ( (*pp)->status()!=1 )
continue;
195 int pid= (*pp)->pdg_id();
197 if(apid==310) apid = 22;
198 if (apid > 11 && apid < 20)
continue;
200 double pt_ =(*pp)->momentum().perp();
201 double eta_=(*pp)->momentum().eta();
202 double phi_=(*pp)->momentum().phi();
204 float dr =
deltaR(eta_, phi_, eta, phi);
205 if ( dr <=
cone_iso ) setCone_iso += pt_;
207 bool charged =
false;
208 if ( apid ==211 || apid == 321 || apid == 2212 || apid == 11 ) charged =
true;
210 setCone_clust += pt_;
211 if ( apid == 22 || apid == 11) setEM += pt_;
212 if ( apid>100 ) setHAD += pt_;
213 if ( apid>100 && pt_ > ptMaxHadron ) ptMaxHadron = pt_;
214 if ( charged && pt_ > 1 ) { Ncharged++; setCharged += pt_;}
219 if ( pt / setCone_clust < 0.15 )
continue;
237 if ( EB && ptMaxHadron >
ptHdMax_EB )
continue;
238 if ( EE && ptMaxHadron >
ptHdMax_EE )
continue;
242 if ( EB && setCone_iso / setCone_clust >
isoConeMax_EB)
continue;
243 if ( EE && setCone_iso / setCone_clust >
isoConeMax_EE)
continue;
247 std::cout <<
"(*itSeed)->pdg_id() = " << (*itSeed)->pdg_id() << std::endl;
249 std::cout <<
"setCone_clust = " << setCone_clust << std::endl;
250 std::cout <<
"setEM = " << setEM << std::endl;
251 std::cout <<
"ptMaxHadron = " << ptMaxHadron << std::endl;
252 std::cout <<
"setCone_iso = " << setCone_iso << std::endl;
253 std::cout <<
"setCone_iso / setCone_clust = " << setCone_iso / setCone_clust << std::endl;
258 std::list<const HepMC::GenParticle*>::iterator itPart;
259 for(itPart = candidates.begin(); itPart != candidates.end(); ++itPart) {
260 float eta_ = (*itPart)->momentum().eta();
261 float phi_ = (*itPart)->momentum().phi();
262 float dr =
deltaR(eta_, phi_, eta, phi);
263 if (dr <
drMin ) same =
true;
268 candidates.push_back(*itSeed);
272 if (candidates.size() >=
nPartMin ) {
285 std::cout<<
"\n *************************\n "<<std::endl;
288 std::cout<<
"\n ************************* \n"<<std::endl;
bool getByToken(EDGetToken token, Handle< PROD > &result) const
edm::EDGetTokenT< edm::HepMCProduct > token_
PythiaFilterEMJetHeep(const edm::ParameterSet &)
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Abs< T >::type abs(const T &t)
int maxnumberofeventsinrun
bool operator()(const HepMC::GenParticle *a, const HepMC::GenParticle *b) const
const HepMC::GenEvent * GetEvent() const
~PythiaFilterEMJetHeep() override
double deltaR(double eta0, double phi0, double eta, double phi)
bool filter(edm::Event &, const edm::EventSetup &) override