CMS 3D CMS Logo

PatMcMatchFWLiteAnalyzer.cc
Go to the documentation of this file.
1 #include <memory>
2 #include <string>
3 #include <vector>
4 #include <sstream>
5 #include <fstream>
6 #include <iostream>
7 
8 #include <TH2F.h> // Use the correct histograms
9 #include <TROOT.h>
10 #include <TFile.h>
11 #include <TSystem.h>
12 
14 #include "DataFormats/PatCandidates/interface/Muon.h" // Include the examined data formats
15 #include "DataFormats/PatCandidates/interface/Jet.h" // Include the examined data formats
17 
18 
19 int main(int argc, char* argv[])
20 {
21  // ----------------------------------------------------------------------
22  // First Part:
23  //
24  // * enable FWLite
25  // * book the histograms of interest
26  // * open the input file
27  // ----------------------------------------------------------------------
28 
29  // load framework libraries
30  gSystem->Load( "libFWCoreFWLite" );
32 
33  // book a set of histograms
34  TH2F* muonPt_ = new TH2F( "muonPt", "Muon Pt", 60, 0., 300., 60, 0., 300. ); // 2-D histo for muon Pt
35  muonPt_->SetXTitle( "gen." );
36  muonPt_->SetYTitle( "reco." );
37  TH2F* jetPt_ = new TH2F( "jetPt", "Jet Pt", 100, 0., 500., 100, 0., 500. ); // 2-D histo for jet Pt
38  jetPt_->SetXTitle( "gen." );
39  jetPt_->SetYTitle( "reco." );
40 
41  // open input file (can be located on castor)
42  TFile* inFile = TFile::Open( "file:edmPatMcMatch.root" ); // Adapt the input file name
43 
44  // ----------------------------------------------------------------------
45  // Second Part:
46  //
47  // * loop the events in the input file
48  // * receive the collections of interest via fwlite::Handle
49  // * fill the histograms
50  // * after the loop close the input file
51  // ----------------------------------------------------------------------
52 
53  // loop the events
54  unsigned int iEvent=0;
55  fwlite::Event event(inFile);
56  for(event.toBegin(); !event.atEnd(); ++event, ++iEvent){
57  // break loop after end of file is reached
58  // or after 1000 events have been processed
59  if( iEvent==1000 ) break;
60 
61  // simple event counter
62  if(iEvent>0 && iEvent%25==0){ // Reduce print-out
63  std::cout << " processing event: " << iEvent << std::endl;
64  }
65 
66  // fwlite::Handle to the muon collection
67  fwlite::Handle<std::vector<pat::Muon> > muons; // Access the muon collection
68  muons.getByLabel(event, "cleanLayer1Muons");
69  // fwlite::Handle to the muon collection
70  fwlite::Handle<std::vector<pat::Jet> > jets; // Access the jet collection
71  jets.getByLabel(event, "cleanLayer1Jets");
72 
73  // loop muon collection and fill histograms
74  for(unsigned i=0; i<muons->size(); ++i){
75  const reco::GenParticle * genMuon = (*muons)[i].genParticle(); // Get the matched generator muon
76  if ( genMuon ) { // Check for valid reference
77  muonPt_->Fill( genMuon->pt(), (*muons)[i].pt() ); // Fill 2-D histo
78  }
79  }
80  // loop jet collection and fill histograms
81  for(unsigned i=0; i<jets->size(); ++i){
82  const reco::GenJet * genJet = (*jets)[i].genJet(); // Get the matched generator jet
83  if ( genJet ) { // Check for valid reference
84  jetPt_->Fill( genJet->pt(), (*jets)[i].pt() ); // Fill 2-D histo
85  }
86  }
87  }
88  // close input file
89  inFile->Close();
90 
91  // ----------------------------------------------------------------------
92  // Third Part:
93  //
94  // * open the output file
95  // * write the histograms to the output file
96  // * close the output file
97  // ----------------------------------------------------------------------
98 
99  //open output file
100  TFile outFile( "rootPatMcMatch.root", "recreate" ); // Adapt the output file name
101  outFile.mkdir("analyzeMcMatchPat"); // Adapt output file according to modifications
102  outFile.cd("analyzeMcMatchPat");
103  muonPt_->Write( );
104  jetPt_->Write( );
105  outFile.Close();
106 
107  // ----------------------------------------------------------------------
108  // Fourth Part:
109  //
110  // * never forgett to free the memory of the histograms
111  // ----------------------------------------------------------------------
112 
113  // free allocated space
114  delete muonPt_; // Delete the muon histo
115  delete jetPt_; // Delete the jet histo
116 
117  // that's it!
118  return 0;
119 }
virtual double pt() const final
transverse momentum
Event const & toBegin() override
Go to the very first Event.
Definition: Event.cc:240
int main(int argc, char *argv[])
void getByLabel(const P &iP, const char *iModuleLabel, const char *iProductInstanceLabel=0, const char *iProcessLabel=0)
Definition: Handle.h:91
virtual bool atEnd() const override
Definition: Event.cc:283
int iEvent
Definition: GenABIO.cc:230
vector< PseudoJet > jets
static void enable()
enable automatic library loading
Jets made from MC generator particles.
Definition: GenJet.h:24
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