CMS 3D CMS Logo

Functions

/data/refman/pasoursint/CMSSW_6_1_2_SLHC4_patch1/src/PhysicsTools/FWLite/bin/FWLiteLumiAccess.cc File Reference

#include <TFile.h>
#include <TSystem.h>
#include "DataFormats/FWLite/interface/Event.h"
#include "DataFormats/FWLite/interface/Handle.h"
#include "FWCore/FWLite/interface/AutoLibraryLoader.h"
#include "DataFormats/FWLite/interface/Run.h"
#include "DataFormats/FWLite/interface/LuminosityBlock.h"
#include "DataFormats/Luminosity/interface/LumiSummary.h"
#include "PhysicsTools/FWLite/interface/CommandLineParser.h"

Go to the source code of this file.

Functions

int main (int argc, char **argv)

Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 14 of file FWLiteLumiAccess.cc.

References fwlite::Event::atEnd(), fwlite::Run::atEnd(), fwlite::LuminosityBlock::atEnd(), gather_cfg::cout, AutoLibraryLoader::enable(), fwlite::Handle< T >::getByLabel(), fwlite::Event::getLuminosityBlock(), fwlite::Event::getRun(), fwlite::LuminosityBlock::getRun(), edm::RunBase::id(), edm::LuminosityBlockBase::id(), python::rootplot::utilities::ls(), optutl::CommandLineParser::parseArguments(), geometryXMLtoCSV::parser, alignCSCRings::r, optutl::VariableMapCont::stringVector(), summarizeEdmComparisonLogfiles::summary, fwlite::Run::toBegin(), fwlite::Event::toBegin(), and fwlite::LuminosityBlock::toBegin().

                                {
  // load framework libraries
  gSystem->Load( "libFWCoreFWLite" );
  AutoLibraryLoader::enable();

  // initialize command line parser
  optutl::CommandLineParser parser ("Analyze FWLite Histograms");

  // parse arguments
  parser.parseArguments (argc, argv);
  std::vector<std::string> inputFiles_ = parser.stringVector("inputFiles");
  
  for(unsigned int iFile=0; iFile<inputFiles_.size(); ++iFile){
    // open input file (can be located on castor)
    TFile* inFile = TFile::Open(inputFiles_[iFile].c_str());
    if( inFile ){
      fwlite::Event ev(inFile);
      fwlite::Handle<LumiSummary> summary;
      
      std::cout << "----------- Accessing by event ----------------" << std::endl;
      
      // get run and luminosity blocks from events as well as associated 
      // products. (This works for both ChainEvent and MultiChainEvent.)
      for(ev.toBegin(); !ev.atEnd(); ++ev){
        // get the Luminosity block ID from the event
        std::cout << " Luminosity ID " << ev.getLuminosityBlock().id() << std::endl;
        // get the Run ID from the event
        std::cout <<" Run ID " << ev.getRun().id()<< std::endl;
        // get the Run ID from the luminosity block you got from the event
        std::cout << "Run via lumi " << ev.getLuminosityBlock().getRun().id() << std::endl;
        // get the integrated luminosity (or any luminosity product) from 
        // the event
        summary.getByLabel(ev.getLuminosityBlock(),"lumiProducer");
      }
      
      std::cout << "----------- Accessing by lumi block ----------------" << std::endl;
      
      double lumi_tot = 0.0;
      // loop over luminosity blocks (in analogy to looping over events)
      fwlite::LuminosityBlock ls(inFile);
      for(ls.toBegin(); !ls.atEnd(); ++ls){
        summary.getByLabel(ls,"lumiProducer");
        std::cout  << ls.id() << " Inst.  Luminosity = " << summary->avgInsRecLumi() << std::endl;
        // get the associated run from this lumi
        std::cout << "Run from lumi " << ls.getRun().id() << std::endl;
        // add up the luminosity by lumi block
        lumi_tot += summary->avgInsRecLumi();
      }
      // print the result
      std::cout << "----------------------------------------------------" << std::endl;
      std::cout << "Total luminosity from lumi sections = " << lumi_tot   << std::endl;
      std::cout << "----------------------------------------------------" << std::endl;
      
      std::cout << "----------- Accessing by run ----------------" << std::endl;
      
      // do the same for runs
      fwlite::Run r(inFile);
      for(r.toBegin(); !r.atEnd(); ++r) {
        std::cout << "Run " << r.id() << std::endl;
      }
      // close input file
      inFile->Close();
    }
  }
  return 0;
}