ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/kiesel/TreeWriter/treeWriter.cc
(Generate patch)

Comparing UserCode/kiesel/TreeWriter/treeWriter.cc (file contents):
Revision 1.8 by kiesel, Wed Apr 10 20:46:33 2013 UTC vs.
Revision 1.11 by kiesel, Mon Apr 15 16:01:40 2013 UTC

# Line 8 | Line 8
8  
9   using namespace std;
10  
11 < TreeWriter::TreeWriter(TString inputName, TString outputName, int loggingVerbosity_ ) {
11 > TreeWriter::TreeWriter( TString inputName, TString outputName, int loggingVerbosity_ ) {
12          // read the input file
13          inputTree = new TChain("susyTree");
14          if (loggingVerbosity_ > 0)
15                  std::cout << "Add files to chain" << std::endl;
16          inputTree->Add( inputName );
17 +        Init( outputName, loggingVerbosity_ );
18 + }
19 +
20 + TreeWriter::TreeWriter( TChain* inputTree_, TString outputName, int loggingVerbosity_ ) {
21 +        inputTree = inputTree_;
22 +        Init( outputName, loggingVerbosity_ );
23 + }
24 +
25 +
26 + void TreeWriter::Init( TString outputName, int loggingVerbosity_ ) {
27  
28          if (loggingVerbosity_ > 0)
29                  std::cout << "Set Branch Address of susy::Event" << std::endl;
30          event = new susy::Event;
31          inputTree->SetBranchAddress("susyEvent", &event);
32  
33 <        if (outputName == "") {
24 <                // Here the output filename is generated automaticly
25 <                try{
26 <                        string fName = (string) inputName;
27 <                        // Search for 'susyEvents_', and get the unique characters afterwards.
28 <                        // eg /path/susyEvents_123_Myl.root -> susyTree_123_Mly.root
29 <                        outputName = "susyTree_" + fName.substr(fName.find("susyEvents_")+11,-1);
30 <                } catch (int e ) {
31 <                        outputName = "susyTree.root";
32 <                }
33 <        }
34 <
33 >        // open the output file
34          if (loggingVerbosity_>0)
35                  std::cout << "Open file " << outputName << " for writing." << std::endl;
37        // open the output file
36          outFile = new TFile( outputName, "recreate" );
37          tree = new TTree("susyTree","Tree for single photon analysis");
38  
# Line 43 | Line 41 | TreeWriter::TreeWriter(TString inputName
41          reportEvery = 1000;
42          loggingVerbosity = loggingVerbosity_;
43          skim = true;
44 +        pileupHisto = 0;
45 + }
46  
47 + void TreeWriter::PileUpWeightFile( string pileupFileName ) {
48 +        TFile *puFile = new TFile( pileupFileName.c_str() );
49 +        pileupHisto = (TH1F*) puFile->Get("pileup");
50   }
51  
52   TreeWriter::~TreeWriter() {
53 <        if (!inputTree) return;
54 <        delete inputTree->GetCurrentFile();
53 >        if (pileupHisto != 0 )
54 >                delete pileupHisto;
55 >        inputTree->GetCurrentFile()->Close();
56   }
57  
58   // useful functions
# Line 111 | Line 115 | float photonIso_corrected(susy::Photon g
115    return iso;
116   }
117  
114
115
116
118   float TreeWriter::getPtFromMatchedJet( susy::Photon myPhoton, susy::Event myEvent ) {
119          /**
120           * \brief Takes jet p_T as photon p_T
# Line 132 | Line 133 | float TreeWriter::getPtFromMatchedJet( s
133          } else {
134                  susy::PFJetCollection& jetColl = pfJets_it->second;
135                  for(std::vector<susy::PFJet>::iterator it = jetColl.begin();
136 <                                it != jetColl.end(); it++) {
136 >                                it != jetColl.end(); ++it) {
137                          std::map<TString,Float_t>::iterator s_it = it->jecScaleFactors.find("L2L3");
138                          if (s_it == it->jecScaleFactors.end()) {
139                                  std::cout << "JEC is not available for this jet!!!" << std::endl;
# Line 156 | Line 157 | float TreeWriter::getPtFromMatchedJet( s
157          float pt = 0;
158          float minPtDifferenz = 1E20; // should be very high
159          for( std::vector<susy::PFJet>::iterator it = nearJets.begin(), jetEnd = nearJets.end();
160 <                        it != jetEnd; it++ ) {
160 >                        it != jetEnd; ++it ) {
161                  float ptDiff = fabs(myPhoton.momentum.Et() - it->momentum.Et());
162                  if (  ptDiff < minPtDifferenz ) {
163                          minPtDifferenz = ptDiff;
# Line 190 | Line 191 | void TreeWriter::Loop() {
191  
192          tree->Branch("photon", &photon);
193          tree->Branch("jet", &jet);
194 +        //tree->Branch("electron", &electron);
195 +        tree->Branch("muon", &muon);
196          tree->Branch("met", &met, "met/F");
197 +        tree->Branch("metPhi", &met_phi, "metPhi/F");
198 +        tree->Branch("type1met", &type1met, "type1met/F");
199 +        tree->Branch("type1metPhi", &type1met_phi, "type1metPhi/F");
200          tree->Branch("ht", &ht, "ht/F");
201          tree->Branch("nVertex", &nVertex, "nVertex/I");
202 <        tree->Branch("nElectron", &nElectron, "nElectron/I");
202 >        tree->Branch("pu_weight", &pu_weight, "pu_weight/F");
203  
204  
205 <        for (long jentry=0; jentry < processNEvents; jentry++) {
205 >        for (long jentry=0; jentry < processNEvents; ++jentry) {
206                  if ( loggingVerbosity>0 && jentry%reportEvery==0 )
207                          std::cout << jentry << " / " << processNEvents << std :: endl;
208                  inputTree->GetEntry(jentry);
209  
210                  photon.clear();
211                  jet.clear();
212 +                electron.clear();
213 +                muon.clear();
214                  ht = 0;
215  
216 +                // weights
217 +                if (pileupHisto == 0) {
218 +                        pu_weight = 1.;
219 +                } else {
220 +                        float trueNumInteractions = -1;
221 +                        for( susy::PUSummaryInfoCollection::const_iterator iBX = event->pu.begin();
222 +                                        iBX != event->pu.end() && trueNumInteractions < 0; ++iBX) {
223 +                                if (iBX->BX == 0)
224 +                                        trueNumInteractions = iBX->trueNumInteractions;
225 +                        }
226 +                        pu_weight = pileupHisto->GetBinContent( pileupHisto->FindBin( trueNumInteractions ) );
227 +                }
228 +
229 +
230                  // photons
231                  if( loggingVerbosity > 1 )
232                          std::cout << "Process photons" << std::endl;
233                  std::map<TString, std::vector<susy::Photon> >::iterator phoMap = event->photons.find("photons");
234                  for(std::vector<susy::Photon>::iterator it = phoMap->second.begin();
235 <                                it != phoMap->second.end() && phoMap != event->photons.end(); it++ ) {
235 >                                it != phoMap->second.end() && phoMap != event->photons.end(); ++it ) {
236                          if( ! it->isEB() && skim )
237                                  continue;
238                          thisphoton->pt = getPtFromMatchedJet( *it, *event );
# Line 221 | Line 243 | void TreeWriter::Loop() {
243                          thisphoton->chargedIso = chargedHadronIso_corrected(*it, event->rho25);
244                          thisphoton->neutralIso = neutralHadronIso_corrected(*it, event->rho25);
245                          thisphoton->photonIso = photonIso_corrected(*it, event->rho25);
224                        if ( it->r9 >= 1 && skim )
225                                continue;
246                          thisphoton->r9 = it->r9;
247                          thisphoton->sigmaIetaIeta = it->sigmaIetaIeta;
248                          thisphoton->hadTowOverEm = it->hadTowOverEm;
249                          thisphoton->pixelseed = it->nPixelSeeds;
250 +                        thisphoton->conversionSafeVeto = it->passelectronveto;
251                          photon.push_back( *thisphoton );
231                        ht += thisphoton->pt;
252                          if( loggingVerbosity > 2 )
253                                  std::cout << " p_T, gamma = " << thisphoton->pt << std::endl;
254                  }
# Line 248 | Line 268 | void TreeWriter::Loop() {
268                          susy::PFJetCollection& jetColl = pfJets_it->second;
269  
270                          for(std::vector<susy::PFJet>::iterator it = jetColl.begin();
271 <                                        it != jetColl.end(); it++) {
271 >                                        it != jetColl.end(); ++it) {
272                                  std::map<TString,Float_t>::iterator s_it = it->jecScaleFactors.find("L2L3");
273                                  if (s_it == it->jecScaleFactors.end()) {
274                                          std::cout << "JEC is not available for this jet!!!" << std::endl;
# Line 262 | Line 282 | void TreeWriter::Loop() {
282                                  thisjet->pt = corrP4.Et();
283                                  thisjet->eta = corrP4.Eta();
284                                  thisjet->phi = corrP4.Phi();
285 +                                thisjet->bCSV = it->bTagDiscriminators[susy::kCSV];
286 +                                if( loggingVerbosity > 2 )
287 +                                        std::cout << " p_T, jet = " << thisjet->pt << std::endl;
288 +
289                                  jet.push_back( *thisjet );
290                                  ht += thisjet->pt;
291                          }// for jet
# Line 269 | Line 293 | void TreeWriter::Loop() {
293                  if( jet.size() < 2 && skim )
294                          continue;
295                  std::sort( jet.begin(), jet.end(), tree::EtGreater);
296 +                if( loggingVerbosity > 1 )
297 +                        std::cout << "Found " << jet.size() << " jets" << std::endl;
298 +
299  
300                  // met
301                  std::map<TString, susy::MET>::iterator met_it = event->metMap.find("pfMet");
302                  susy::MET* metobj = &(met_it->second);
303                  met = metobj->met();
304 +                met_phi = metobj->mEt.Phi();
305 +                if( loggingVerbosity > 2 )
306 +                        std::cout << " met = " << met << std::endl;
307 +
308 +                std::map<TString, susy::MET>::iterator type1met_it = event->metMap.find("pfType1CorrectedMet");
309 +                susy::MET* type1metobj = &(type1met_it->second);
310 +                type1met = type1metobj->met();
311 +                type1met_phi = type1metobj->mEt.Phi();
312 +                if( loggingVerbosity > 2 )
313 +                        std::cout << " type1met = " << type1met << std::endl;
314  
315                  // electrons
316 <                //std::vector<susy::Electron> eVector = event->electrons["gsfElectrons"];
317 <                //nElectron = eVector.size();
316 >                /*
317 >                tree::Particle* thiselectron = new tree::Particle();
318 >                map<TString, vector<susy::Electron> >::iterator eleMap = event->electrons.find("gsfElectrons");
319 >                if(eleMap == event->electrons.end() && loggingVerbosity > 0) {
320 >                        cout << "gsfElectrons not found!" << endl;
321 >                } else {
322 >                        for(vector<susy::Electron>::iterator it = eleMap->second.begin(); it < eleMap->second.end(); ++it) {
323 >                                thiselectron->pt = it->momentum.Et();
324 >                                if( thiselectron->pt < 20 )
325 >                                        continue;
326 >                                if( loggingVerbosity > 2 )
327 >                                        std::cout << " p_T, electron = " << it->momentum.Et() << std::endl;
328 >                                thiselectron->eta = it->momentum.Eta();
329 >                                thiselectron->phi = it->momentum.Phi();
330 >                                electron.push_back( *thiselectron );
331 >                        }
332 >                }
333 >                if( loggingVerbosity > 1 )
334 >                        std::cout << "Found " << electron.size() << " electrons" << std::endl;
335 >                */
336  
337 <                // vertices
337 >                // this seems not to work yet, where is the bug?
338 >                /*
339 >                std::vector<susy::Electron> eVector = event->electrons["gsfElectronsx"];
340 >                for( std::vector<susy::Electron>::iterator it = eVector.begin(); it != eVector.end(); ++it) {
341 >                        thiselectron->pt = it->momentum.Et();
342 >                        if( thiselectron->pt < 20 )
343 >                                continue;
344 >                        if( loggingVerbosity > 2 )
345 >                                std::cout << " p_T, electron = " << it->momentum.Et() << std::endl;
346 >                        thiselectron->eta = it->momentum.Eta();
347 >                        thiselectron->phi = it->momentum.Phi();
348 >                        electron.push_back( *thiselectron );
349 >                }
350 >                */
351 >
352 >                // muons
353 >                std::vector<susy::Muon> mVector = event->muons["muons"];
354 >                tree::Particle* thismuon = new tree::Particle();
355 >                for( std::vector<susy::Muon>::iterator it = mVector.begin(); it != mVector.end(); ++it) {
356 >                        if( !( it->isPFMuon() && ( it->isGlobalMuon() || it->isTrackerMuon() ) ) )
357 >                                continue; // see https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuideMuonId#Loose_Muon
358 >                        thismuon->pt = it->momentum.Et();
359 >                        if( thismuon->pt < 20 )
360 >                                continue;
361 >                        thismuon->eta = it->momentum.Eta();
362 >                        thismuon->phi = it->momentum.Phi();
363 >                        muon.push_back( *thismuon );
364 >                }
365 >                if( loggingVerbosity > 1 )
366 >                        std::cout << "Found " << muon.size() << " muons" << std::endl;
367  
368 +
369 +                // vertices
370                  nVertex = event->vertices.size();
371  
372                  if( ht < 450 && skim)
# Line 290 | Line 376 | void TreeWriter::Loop() {
376          } // for jentry
377  
378  
293
294        tree->Write();
379          outFile->cd();
380 +        tree->Write();
381          outFile->Write();
382          outFile->Close();
383   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines