CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
GammaJetAnalysis.cc
Go to the documentation of this file.
1 // user include files
2 #include "GammaJetAnalysis.h"
3 
7 /* #include "FWCore/Framework/interface/MakerMacros.h" */
10 
13 
19 // #include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h"
20 // #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
24 //#include "DataFormats/JetReco/interface/GenJetfwd.h"
26 
27 //#include "DataFormats/JetReco/interface/CaloJetCollection.h"
31 
34 #include "HepMC/GenParticle.h"
35 #include "HepMC/GenVertex.h"
36 #include "TFile.h"
37 #include "TTree.h"
38 
39 
40 using namespace std;
41 namespace cms
42 {
43 GammaJetAnalysis::GammaJetAnalysis(const edm::ParameterSet& iConfig)
44 {
45  // get names of modules, producing object collections
46 
47  nameProd_ = iConfig.getUntrackedParameter<std::string>("nameProd");
48  jetCalo_ = iConfig.getUntrackedParameter<std::string>("jetCalo","GammaJetJetBackToBackCollection");
49 
50  tok_jets_ = consumes<reco::CaloJetCollection>( edm::InputTag(nameProd_,
51  jetCalo_) );
52 
53  gammaClus_ = iConfig.getUntrackedParameter<std::string>("gammaClus","GammaJetGammaBackToBackCollection");
54 
55  tok_egamma_ = consumes<reco::SuperClusterCollection>( edm::InputTag(nameProd_,
56  gammaClus_) );
57 
58  ecalInput_=iConfig.getUntrackedParameter<std::string>("ecalInput","GammaJetEcalRecHitCollection");
59 
60  tok_ecal_ = consumes<EcalRecHitCollection>( edm::InputTag(nameProd_, ecalInput_) );
61 
62  hbheInput_ = iConfig.getUntrackedParameter<std::string>("hbheInput");
63 
64  tok_hbhe_ = consumes<HBHERecHitCollection>(edm::InputTag(nameProd_,hbheInput_));
65 
66  hoInput_ = iConfig.getUntrackedParameter<std::string>("hoInput");
67 
68  tok_ho_ = consumes<HORecHitCollection>(edm::InputTag(nameProd_,hoInput_));
69 
70  hfInput_ = iConfig.getUntrackedParameter<std::string>("hfInput");
71 
72  tok_hf_ = consumes<HFRecHitCollection>(edm::InputTag(nameProd_,hfInput_));
73 
74  Tracks_ = iConfig.getUntrackedParameter<std::string>("Tracks","GammaJetTracksCollection");
75  CutOnEgammaEnergy_ = iConfig.getParameter<double>("CutOnEgammaEnergy");
76 
77  myName = iConfig.getParameter<std::string> ("textout");
78  useMC = iConfig.getParameter<bool>("useMCInfo");
79  allowMissingInputs_=iConfig.getUntrackedParameter<bool>("AllowMissingInputs",false);
80  // get name of output file with histogramms
81  fOutputFileName = iConfig.getUntrackedParameter<string>("HistOutFile");
82  risol[0] = 0.5;
83  risol[1] = 0.7;
84  risol[2] = 1.0;
85 
86  ecut[0][0] = 0.09;
87  ecut[0][1] = 0.18;
88  ecut[0][2] = 0.27;
89 
90  ecut[1][0] = 0.45;
91  ecut[1][1] = 0.9;
92  ecut[1][2] = 1.35;
93 
94  ecut[2][0] = 0.5;
95  ecut[2][1] = 1.;
96  ecut[2][2] = 1.5;
97 }
98 
99 
100 GammaJetAnalysis::~GammaJetAnalysis()
101 {
102 
103  // do anything here that needs to be done at desctruction time
104  // (e.g. close files, deallocate resources etc.)
105 
106 }
107 
109 {
110  hOutputFile = new TFile( fOutputFileName.c_str(), "RECREATE" ) ;
111  myTree = new TTree("GammaJet","GammaJet Tree");
112  myTree->Branch("run", &run, "run/I");
113  myTree->Branch("event", &event, "event/I");
114 
115  NumRecoJets = 0;
116  NumGenJets = 0;
117  NumRecoGamma = 0;
118  NumRecoTrack = 0;
119  NumPart = 0;
120 // Jet block
121  myTree->Branch("NumRecoJets", &NumRecoJets, "NumRecoJets/I");
122  myTree->Branch("JetRecoEt", JetRecoEt, "JetRecoEt[10]/F");
123  myTree->Branch("JetRecoEta", JetRecoEta, "JetRecoEta[10]/F");
124  myTree->Branch("JetRecoPhi", JetRecoPhi, "JetRecoPhi[10]/F");
125  myTree->Branch("JetRecoType", JetRecoType, "JetRecoType[10]/F");
126 
127 // Gamma block for ECAL isolated gammas
128  myTree->Branch("NumRecoGamma", &NumRecoGamma, "NumRecoGamma/I");
129  myTree->Branch("EcalClusDet", &EcalClusDet, "EcalClusDet[20]/I");
130  myTree->Branch("GammaRecoEt", GammaRecoEt, "GammaRecoEt[20]/F");
131  myTree->Branch("GammaRecoEta", GammaRecoEta, "GammaRecoEta[20]/F");
132  myTree->Branch("GammaRecoPhi", GammaRecoPhi, "GammaRecoPhi[20]/F");
133  myTree->Branch("GammaIsoEcal", GammaIsoEcal, "GammaIsoEcal[9][20]/F");
134 
135 // Tracks block
136  myTree->Branch("NumRecoTrack", &NumRecoTrack, "NumRecoTrack/I");
137  myTree->Branch("TrackRecoEt", TrackRecoEt, "TrackRecoEt[200]/F");
138  myTree->Branch("TrackRecoEta", TrackRecoEta, "TrackRecoEta[200]/F");
139  myTree->Branch("TrackRecoPhi", TrackRecoPhi, "TrackRecoPhi[200]/F");
140 
141 // end of tree declaration
142 
143 // edm::ESHandle<CaloGeometry> pG;
144 // iSetup.get<CaloGeometryRecord>().get(pG);
145 // geo = pG.product();
146 
147  myout_part = new std::ofstream((myName+"_part.dat").c_str());
148  if(!myout_part) cout << " Output file not open!!! "<<endl;
149  myout_hcal = new std::ofstream((myName+"_hcal.dat").c_str());
150  if(!myout_hcal) cout << " Output file not open!!! "<<endl;
151  myout_ecal = new std::ofstream((myName+"_ecal.dat").c_str());
152  if(!myout_ecal) cout << " Output file not open!!! "<<endl;
153 
154  myout_jet = new std::ofstream((myName+"_jet.dat").c_str());
155  if(!myout_jet) cout << " Output file not open!!! "<<endl;
156  myout_photon = new std::ofstream((myName+"_photon.dat").c_str());
157  if(!myout_photon) cout << " Output file not open!!! "<<endl;
158 
159 
160 }
161 
162 void GammaJetAnalysis::endJob()
163 {
164 
165  cout << "===== Start writing user histograms =====" << endl;
166  hOutputFile->SetCompressionLevel(2);
167  hOutputFile->cd();
168  myTree->Write();
169  hOutputFile->Close() ;
170  cout << "===== End writing user histograms =======" << endl;
171 }
172 
173 
174 //
175 // member functions
176 //
177 
178 // ------------ method called to produce the data ------------
179 void
181 {
182 
184  iSetup.get<CaloGeometryRecord>().get(pG);
185  geo = pG.product();
186 
187 
188  using namespace edm;
189  std::vector<Provenance const*> theProvenance;
190  iEvent.getAllProvenance(theProvenance);
191 // for( std::vector<Provenance const*>::const_iterator ip = theProvenance.begin();
192 // ip != theProvenance.end(); ip++)
193 // {
194 // cout<<" Print all module/label names "<<(**ip).moduleName()<<" "<<(**ip).moduleLabel()<<
195 // " "<<(**ip).productInstanceName()<<endl;
196 // }
197 // Load generator information
198 // write HEPEVT block into file
199  run = iEvent.id().run();
200  event = iEvent.id().event();
201  (*myout_part)<<"Event "<<iEvent.id().run()<<" "<<iEvent.id().event()<<endl;
202  (*myout_jet)<<"Event "<<iEvent.id().run()<<" "<<iEvent.id().event()<<endl;
203  (*myout_hcal)<<"Event "<<iEvent.id().run()<<" "<<iEvent.id().event()<<endl;
204  (*myout_ecal)<<"Event "<<iEvent.id().run()<<" "<<iEvent.id().event()<<endl;
205  (*myout_photon)<<"Event "<<iEvent.id().run()<<" "<<iEvent.id().event()<<endl;
206 
207 
208  std::vector<edm::InputTag>::const_iterator ic;
209  int jettype = 0;
210  int jetexist = -100;
211  int reco = 1;
212  double etlost = -100.1;
213 
214  NumRecoJets = 0;
215 
216  try {
217 
219  iEvent.getByToken(tok_jets_, jets);
220  reco::CaloJetCollection::const_iterator jet = jets->begin ();
221  cout<<" Size of Calo jets "<<jets->size()<<endl;
222  jettype++;
223 
224  if(jets->size() > 0 )
225  {
226  int ij = 0;
227  for (; jet != jets->end (); jet++)
228  {
229  cout<<" Jet et "<<(*jet).et()<<" "<<(*jet).eta()<<" "<<(*jet).phi()<<endl;
230  ij++;
231  if(ij<4) (*myout_jet)<<jettype<<" "<<reco<<" "<<ij<<" "<<(*jet).et()<<" "<<(*jet).eta()<<" "<<(*jet).phi()
232  <<" "<<iEvent.id().event()<<endl;
233  jetexist = ij;
234  if( NumRecoJets < 8 )
235  {
236  JetRecoEt[NumRecoJets] = (*jet).et();
237  JetRecoEta[NumRecoJets] = (*jet).eta();
238  JetRecoPhi[NumRecoJets] = (*jet).phi();
239  JetRecoType[NumRecoJets] = jettype;
240  NumRecoJets++;
241  }
242  }
243  }
244  } catch (cms::Exception& e) { // can't find it!
245  if (!allowMissingInputs_) {
246  cout<< " Calojets are missed "<<endl;
247  throw e;
248  }
249  }
250 
251  cout<<" We filled CaloJet part "<<jetexist<<endl;
252 
253  if( jetexist < 0 ) (*myout_jet)<<jetexist<<" "<<reco<<" "<<etlost
254  <<" "<<etlost<<" "<<etlost
255  <<" "<<iEvent.id().event()<<endl;
256 // Load EcalRecHits
257 
258  std::vector<edm::InputTag>::const_iterator i;
259  vector<std::pair<DetId, double> > theRecHits;
260 
261  try {
262 
264  iEvent.getByToken(tok_ecal_,ec);
265 
266  for(EcalRecHitCollection::const_iterator recHit = (*ec).begin();
267  recHit != (*ec).end(); ++recHit)
268  {
269 // EcalBarrel = 1, EcalEndcap = 2
270 
271  GlobalPoint pos = geo->getPosition(recHit->detid());
272  theRecHits.push_back(std::pair<DetId, double>(recHit->detid(), recHit->energy()));
273 
274  if( (*recHit).energy()> ecut[recHit->detid().subdetId()-1][0] )
275  (*myout_ecal)<<recHit->detid().subdetId()<<" "<<(*recHit).energy()<<" "<<pos.phi()<<" "<<pos.eta()
276  <<" "<<iEvent.id().event()<<endl;
277 
278  }
279 
280  } catch (cms::Exception& e) { // can't find it!
281  if (!allowMissingInputs_) {
282  cout<<" Ecal collection is missed "<<endl;
283  throw e;
284  }
285  }
286 
287  cout<<" Fill EcalRecHits "<<endl;
288 // cout<<" Start to get hbhe "<<endl;
289 // Hcal Barrel and endcap for isolation
290  try {
292  iEvent.getByToken(tok_hbhe_,hbhe);
293 
294 // (*myout_hcal)<<(*hbhe).size()<<endl;
295  for(HBHERecHitCollection::const_iterator hbheItr = (*hbhe).begin();
296 
297  hbheItr != (*hbhe).end(); ++hbheItr)
298  {
299  DetId id = (hbheItr)->detid();
300  GlobalPoint pos = geo->getPosition(hbheItr->detid());
301  (*myout_hcal)<<id.subdetId()<<" "<<(*hbheItr).energy()<<" "<<pos.phi()<<
302  " "<<pos.eta()<<" "<<iEvent.id().event()<<endl;
303  theRecHits.push_back(std::pair<DetId, double>(hbheItr->detid(), hbheItr->energy()));
304 
305  }
306  } catch (cms::Exception& e) { // can't find it!
307  if (!allowMissingInputs_) {
308  cout<<" HBHE collection is missed "<<endl;
309  throw e;
310  }
311  }
312 
313 
314  for(int i = 0; i<9; i++)
315  {
316  for(int j= 0; j<10; j++) GammaIsoEcal[i][j] = 0.;
317  }
318 
319 // Load Ecal clusters
320  jetexist = -100;
321  int barrel = 1;
322  NumRecoGamma = 0;
323 
324  try {
325  int ij = 0;
326  // Get island super clusters after energy correction
328  iEvent.getByToken(tok_egamma_, eclus);
329  const reco::SuperClusterCollection* correctedSuperClusters=eclus.product();
330  // loop over the super clusters and fill the histogram
331  for(reco::SuperClusterCollection::const_iterator aClus = correctedSuperClusters->begin();
332  aClus != correctedSuperClusters->end(); aClus++) {
333  double vet = aClus->energy()/cosh(aClus->eta());
334  cout<<" Supercluster " << ij<<" Et "<< vet <<" energy "<<aClus->energy()<<" eta "<<aClus->eta()<<" Cut "<<CutOnEgammaEnergy_<<endl;
335 
336  if(vet>CutOnEgammaEnergy_) {
337  ij++;
338  float gammaiso_ecal[9] = {0.,0.,0.,0.,0.,0.,0.,0.,0.};
339  for(vector<std::pair<DetId, double> >::const_iterator it = theRecHits.begin(); it != theRecHits.end(); it++)
340  {
341  GlobalPoint pos = geo->getPosition(it->first);
342  double eta = pos.eta();
343  double phi = pos.phi();
344  double deta = fabs(eta-aClus->eta());
345  double dphi = fabs(phi-aClus->phi());
346  if(dphi>4.*atan(1.)) dphi = 8.*atan(1.)-dphi;
347  double dr = sqrt(deta*deta+dphi*dphi);
348 
349  double rmin = 0.07;
350  if( fabs(aClus->eta()) > 1.47 ) rmin = 0.07*(fabs(aClus->eta())-.47)*1.2;
351  if( fabs(aClus->eta()) > 2.2 ) rmin = 0.07*(fabs(aClus->eta())-.47)*1.4;
352 
353  int itype_ecal = 0;
354  double ecutn = 0.;
355  for (int i = 0; i<3; i++)
356  {
357  for (int j = 0; j<3; j++)
358  {
359 
360  if(it->first.det() == DetId::Ecal )
361  {
362  if(it->first.subdetId() == 1) ecutn = ecut[0][j];
363  if(it->first.subdetId() == 2) ecutn = ecut[1][j];
364  if( dr>rmin && dr<risol[i])
365  {
366  if((*it).second > ecutn) gammaiso_ecal[itype_ecal] = gammaiso_ecal[itype_ecal]+(*it).second/cosh(eta);
367  }
368  }
369 
370  if(it->first.det() == DetId::Hcal )
371  {
372  ecutn = ecut[2][j];
373  if( dr>rmin && dr<risol[i])
374  {
375  if((*it).first > ecutn)
376  {
377  gammaiso_ecal[itype_ecal] = gammaiso_ecal[itype_ecal]+(*it).second/cosh(eta);
378  }
379  }
380  }
381  jetexist = ij;
382  itype_ecal++;
383 
384  } // Ecal
385  } // cycle on iso radii
386  } // cycle on rechits
387 
388 
389 // Fill Tree
390  if( NumRecoGamma < 10 )
391  {
392  for (int ii = 0; ii<9 ; ii++)
393  {
394  GammaIsoEcal[ii][NumRecoGamma] = gammaiso_ecal[ii];
395  }
396  EcalClusDet[NumRecoGamma] = 1;
397  GammaRecoEt[NumRecoGamma] = vet;
398  GammaRecoEta[NumRecoGamma] = aClus->eta();
399  GammaRecoPhi[NumRecoGamma] = aClus->phi();
400  NumRecoGamma++;
401  }
402  (*myout_photon)<<ij<<" "<<barrel<<" "<<vet<<" "<<aClus->eta()<<" "<<aClus->phi()<<" "<<iEvent.id().event()<<endl;
403  (*myout_photon)<<ij<<" "<<gammaiso_ecal[0]<<" "<<gammaiso_ecal[1] <<" "<<gammaiso_ecal[2]<<" "<<gammaiso_ecal[3]
404  <<" "<<gammaiso_ecal[4]<<" "<<gammaiso_ecal[5]<<" "<<gammaiso_ecal[6]<<" "<<gammaiso_ecal[7]<<" "<<gammaiso_ecal[8]<<endl;
405 
406  jetexist = ij;
407  } //vet
408  } // number of superclusters
409  } catch (cms::Exception& e) { // can't find it!
410  if (!allowMissingInputs_) {
411  cout<<" Ecal barrel clusters are missed "<<endl;
412  throw e;
413  }
414  }
415 
416  cout<<" After iso cuts "<<jetexist<<endl;
417 
418  double ecluslost = -100.1;
419  if(jetexist<0) (*myout_photon)<<jetexist<<" "<<barrel<<" "<<ecluslost<<" "<<ecluslost
420  <<" "<<ecluslost<<" "<<iEvent.id().event()<<endl;
421 
422  cout<<" Event is ready "<<endl;
423 
424  myTree->Fill();
425 
426 } // analyze method
427 } // namespace cms
RunNumber_t run() const
Definition: EventID.h:39
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:41
T getUntrackedParameter(std::string const &, T const &) const
void getAllProvenance(std::vector< Provenance const * > &provenances) const
Definition: Event.cc:83
int i
Definition: DBlmapReader.cc:9
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:446
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
std::vector< EcalRecHit >::const_iterator const_iterator
T eta() const
int ii
Definition: cuy.py:588
void beginJob()
Definition: Breakpoints.cc:15
int iEvent
Definition: GenABIO.cc:230
std::vector< SuperCluster > SuperClusterCollection
collection of SuperCluser objectr
T sqrt(T t)
Definition: SSEVec.h:48
vector< PseudoJet > jets
int j
Definition: DBlmapReader.cc:9
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
Definition: DetId.h:18
T const * product() const
Definition: Handle.h:81
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:86
T eta() const
Definition: PV3DBase.h:76
edm::EventID id() const
Definition: EventBase.h:56
tuple cout
Definition: gather_cfg.py:121
Definition: DDAxes.h:10