35 #include "HepMC/GenParticle.h"
36 #include "HepMC/GenVertex.h"
50 gammaClus_ = iConfig.
getUntrackedParameter<std::string>(
"gammaClus",
"GammaJetGammaBackToBackCollection");
56 CutOnEgammaEnergy_ = iConfig.
getParameter<
double>(
"CutOnEgammaEnergy");
81 GammaJetAnalysis::~GammaJetAnalysis()
91 hOutputFile =
new TFile( fOutputFileName.c_str(),
"RECREATE" ) ;
92 myTree =
new TTree(
"GammaJet",
"GammaJet Tree");
93 myTree->Branch(
"run", &
run,
"run/I");
94 myTree->Branch(
"event", &
event,
"event/I");
102 myTree->Branch(
"NumRecoJets", &NumRecoJets,
"NumRecoJets/I");
103 myTree->Branch(
"JetRecoEt", JetRecoEt,
"JetRecoEt[10]/F");
104 myTree->Branch(
"JetRecoEta", JetRecoEta,
"JetRecoEta[10]/F");
105 myTree->Branch(
"JetRecoPhi", JetRecoPhi,
"JetRecoPhi[10]/F");
106 myTree->Branch(
"JetRecoType", JetRecoType,
"JetRecoType[10]/F");
109 myTree->Branch(
"NumRecoGamma", &NumRecoGamma,
"NumRecoGamma/I");
110 myTree->Branch(
"EcalClusDet", &EcalClusDet,
"EcalClusDet[20]/I");
111 myTree->Branch(
"GammaRecoEt", GammaRecoEt,
"GammaRecoEt[20]/F");
112 myTree->Branch(
"GammaRecoEta", GammaRecoEta,
"GammaRecoEta[20]/F");
113 myTree->Branch(
"GammaRecoPhi", GammaRecoPhi,
"GammaRecoPhi[20]/F");
114 myTree->Branch(
"GammaIsoEcal", GammaIsoEcal,
"GammaIsoEcal[9][20]/F");
117 myTree->Branch(
"NumRecoTrack", &NumRecoTrack,
"NumRecoTrack/I");
118 myTree->Branch(
"TrackRecoEt", TrackRecoEt,
"TrackRecoEt[200]/F");
119 myTree->Branch(
"TrackRecoEta", TrackRecoEta,
"TrackRecoEta[200]/F");
120 myTree->Branch(
"TrackRecoPhi", TrackRecoPhi,
"TrackRecoPhi[200]/F");
128 myout_part =
new ofstream((myName+
"_part.dat").c_str());
129 if(!myout_part)
cout <<
" Output file not open!!! "<<endl;
130 myout_hcal =
new ofstream((myName+
"_hcal.dat").c_str());
131 if(!myout_hcal)
cout <<
" Output file not open!!! "<<endl;
132 myout_ecal =
new ofstream((myName+
"_ecal.dat").c_str());
133 if(!myout_ecal)
cout <<
" Output file not open!!! "<<endl;
135 myout_jet =
new ofstream((myName+
"_jet.dat").c_str());
136 if(!myout_jet)
cout <<
" Output file not open!!! "<<endl;
137 myout_photon =
new ofstream((myName+
"_photon.dat").c_str());
138 if(!myout_photon)
cout <<
" Output file not open!!! "<<endl;
143 void GammaJetAnalysis::endJob()
146 cout <<
"===== Start writing user histograms =====" << endl;
147 hOutputFile->SetCompressionLevel(2);
150 hOutputFile->Close() ;
151 cout <<
"===== End writing user histograms =======" << endl;
170 std::vector<Provenance const*> theProvenance;
182 (*myout_part)<<
"Event "<<iEvent.
id().
run()<<
" "<<iEvent.
id().
event()<<endl;
183 (*myout_jet)<<
"Event "<<iEvent.
id().
run()<<
" "<<iEvent.
id().
event()<<endl;
184 (*myout_hcal)<<
"Event "<<iEvent.
id().
run()<<
" "<<iEvent.
id().
event()<<endl;
185 (*myout_ecal)<<
"Event "<<iEvent.
id().
run()<<
" "<<iEvent.
id().
event()<<endl;
186 (*myout_photon)<<
"Event "<<iEvent.
id().
run()<<
" "<<iEvent.
id().
event()<<endl;
189 std::vector<edm::InputTag>::const_iterator ic;
193 double etlost = -100.1;
201 reco::CaloJetCollection::const_iterator
jet = jets->begin ();
202 cout<<
" Size of Calo jets "<<jets->size()<<endl;
205 if(jets->size() > 0 )
208 for (; jet != jets->end (); jet++)
210 cout<<
" Jet et "<<(*jet).et()<<
" "<<(*jet).eta()<<
" "<<(*jet).phi()<<endl;
212 if(ij<4) (*myout_jet)<<jettype<<
" "<<
reco<<
" "<<ij<<
" "<<(*jet).et()<<
" "<<(*jet).eta()<<
" "<<(*jet).phi()
213 <<
" "<<iEvent.
id().
event()<<endl;
215 if( NumRecoJets < 8 )
217 JetRecoEt[NumRecoJets] = (*jet).et();
218 JetRecoEta[NumRecoJets] = (*jet).eta();
219 JetRecoPhi[NumRecoJets] = (*jet).phi();
220 JetRecoType[NumRecoJets] = jettype;
226 if (!allowMissingInputs_) {
227 cout<<
" Calojets are missed "<<endl;
232 cout<<
" We filled CaloJet part "<<jetexist<<endl;
234 if( jetexist < 0 ) (*myout_jet)<<jetexist<<
" "<<
reco<<
" "<<etlost
235 <<
" "<<etlost<<
" "<<etlost
236 <<
" "<<iEvent.
id().
event()<<endl;
239 std::vector<edm::InputTag>::const_iterator
i;
240 vector<CaloRecHit> theRecHits;
248 recHit != (*ec).end(); ++recHit)
253 theRecHits.push_back(*recHit);
255 if( (*recHit).energy()> ecut[recHit->detid().subdetId()-1][0] )
256 (*myout_ecal)<<recHit->detid().subdetId()<<
" "<<(*recHit).energy()<<
" "<<pos.
phi()<<
" "<<pos.
eta()
257 <<
" "<<iEvent.
id().
event()<<endl;
262 if (!allowMissingInputs_) {
263 cout<<
" Ecal collection is missed "<<endl;
268 cout<<
" Fill EcalRecHits "<<endl;
278 hbheItr != (*hbhe).end(); ++hbheItr)
282 (*myout_hcal)<<
id.subdetId()<<
" "<<(*hbheItr).energy()<<
" "<<pos.
phi()<<
283 " "<<pos.
eta()<<
" "<<iEvent.
id().
event()<<endl;
284 theRecHits.push_back(*hbheItr);
288 if (!allowMissingInputs_) {
289 cout<<
" HBHE collection is missed "<<endl;
295 for(
int i = 0;
i<9;
i++)
297 for(
int j= 0;
j<10;
j++) GammaIsoEcal[
i][
j] = 0.;
309 iEvent.
getByLabel(nameProd_,gammaClus_, eclus);
312 for(reco::SuperClusterCollection::const_iterator aClus = correctedSuperClusters->begin();
313 aClus != correctedSuperClusters->end(); aClus++) {
314 double vet = aClus->energy()/cosh(aClus->eta());
315 cout<<
" Supercluster " << ij<<
" Et "<< vet <<
" energy "<<aClus->energy()<<
" eta "<<aClus->eta()<<
" Cut "<<CutOnEgammaEnergy_<<endl;
317 if(vet>CutOnEgammaEnergy_) {
319 float gammaiso_ecal[9] = {0.,0.,0.,0.,0.,0.,0.,0.,0.};
320 for(vector<CaloRecHit>::iterator it = theRecHits.begin(); it != theRecHits.end(); it++)
325 double deta = fabs(eta-aClus->eta());
326 double dphi = fabs(phi-aClus->phi());
327 if(dphi>4.*atan(1.)) dphi = 8.*atan(1.)-dphi;
328 double dr =
sqrt(deta*deta+dphi*dphi);
331 if( fabs(aClus->eta()) > 1.47 ) rmin = 0.07*(fabs(aClus->eta())-.47)*1.2;
332 if( fabs(aClus->eta()) > 2.2 ) rmin = 0.07*(fabs(aClus->eta())-.47)*1.4;
336 for (
int i = 0;
i<3;
i++)
338 for (
int j = 0;
j<3;
j++)
343 if(it->detid().subdetId() == 1) ecutn = ecut[0][
j];
344 if(it->detid().subdetId() == 2) ecutn = ecut[1][
j];
345 if( dr>rmin && dr<risol[
i])
347 if((*it).energy() > ecutn) gammaiso_ecal[itype_ecal] = gammaiso_ecal[itype_ecal]+(*it).energy()/cosh(eta);
354 if( dr>rmin && dr<risol[
i])
356 if((*it).energy() > ecutn)
358 gammaiso_ecal[itype_ecal] = gammaiso_ecal[itype_ecal]+(*it).energy()/cosh(eta);
371 if( NumRecoGamma < 10 )
373 for (
int ii = 0; ii<9 ; ii++)
375 GammaIsoEcal[ii][NumRecoGamma] = gammaiso_ecal[ii];
377 EcalClusDet[NumRecoGamma] = 1;
378 GammaRecoEt[NumRecoGamma] = vet;
379 GammaRecoEta[NumRecoGamma] = aClus->eta();
380 GammaRecoPhi[NumRecoGamma] = aClus->phi();
383 (*myout_photon)<<ij<<
" "<<
barrel<<
" "<<vet<<
" "<<aClus->eta()<<
" "<<aClus->phi()<<
" "<<iEvent.
id().
event()<<endl;
384 (*myout_photon)<<ij<<
" "<<gammaiso_ecal[0]<<
" "<<gammaiso_ecal[1] <<
" "<<gammaiso_ecal[2]<<
" "<<gammaiso_ecal[3]
385 <<
" "<<gammaiso_ecal[4]<<
" "<<gammaiso_ecal[5]<<
" "<<gammaiso_ecal[6]<<
" "<<gammaiso_ecal[7]<<
" "<<gammaiso_ecal[8]<<endl;
391 if (!allowMissingInputs_) {
392 cout<<
" Ecal barrel clusters are missed "<<endl;
397 cout<<
" After iso cuts "<<jetexist<<endl;
399 double ecluslost = -100.1;
400 if(jetexist<0) (*myout_photon)<<jetexist<<
" "<<
barrel<<
" "<<ecluslost<<
" "<<ecluslost
401 <<
" "<<ecluslost<<
" "<<iEvent.
id().
event()<<endl;
403 cout<<
" Event is ready "<<endl;
T getParameter(std::string const &) const
EventNumber_t event() const
T getUntrackedParameter(std::string const &, T const &) const
void getAllProvenance(std::vector< Provenance const * > &provenances) const
Geom::Phi< T > phi() const
std::vector< EcalRecHit >::const_iterator const_iterator
std::vector< SuperCluster > SuperClusterCollection
collection of SuperCluser objectr
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
T const * product() const
T const * product() const