CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/RecoBTag/Skimming/src/BTagSkimMC.cc

Go to the documentation of this file.
00001 #include "RecoBTag/Skimming/interface/BTagSkimMC.h"
00002 #include "DataFormats/Common/interface/Handle.h"
00003 #include "FWCore/Framework/interface/Event.h"
00004 #include "FWCore/Utilities/interface/InputTag.h"
00005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00006 
00007 using namespace edm;
00008 using namespace std;
00009 
00010 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
00011 using namespace reco;
00012 
00013 BTagSkimMC::BTagSkimMC( const ParameterSet & p ) :
00014   nEvents_(0), nAccepted_(0)
00015 {
00016   verbose = p.getUntrackedParameter<bool> ("verbose", false);
00017   pthatMin = p.getParameter<double> ("pthat_min");
00018   pthatMax = p.getParameter<double> ("pthat_max");
00019   process_ = p.getParameter<string> ("mcProcess");
00020   if (verbose) cout << " Requested:  " << process_<<endl;
00021 
00022 }
00023 
00024 
00025 bool BTagSkimMC::filter( Event& evt, const EventSetup& es )
00026 {
00027   nEvents_++;
00028 
00029   Handle<int> genProcessID;
00030   evt.getByLabel( "genEventProcID", genProcessID );
00031   double processID = *genProcessID;
00032 
00033   Handle<double> genEventScale;
00034   evt.getByLabel( "genEventScale", genEventScale );
00035   double pthat = *genEventScale;
00036 
00037   if (verbose) cout << "processID: "<< processID << " - pthat: " << pthat;
00038   
00039   if  ((processID != 4) && (process_=="QCD")){  // the Pythia events (for ALPGEN see below)
00040 
00041     Handle<double> genFilterEff;
00042     evt.getByLabel( "genEventRunInfo", "FilterEfficiency", genFilterEff);
00043     double filter_eff = *genFilterEff;
00044     if (verbose) cout << " Is QCD ";
00045     // qcd (including min bias HS)
00046     if ((filter_eff == 1. || filter_eff == 0.964) && (processID == 11 || processID == 12 || processID == 13 || processID == 28 || processID == 68 || processID == 53)) {
00047 
00048       if (pthat > pthatMin && pthat < pthatMax) {
00049       if (verbose) cout << " ACCEPTED "<<endl;
00050         nAccepted_++;
00051         return true;
00052       }
00053     }
00054 
00055 
00056   }  // ALPGEN
00057   else if(processID == 4) { // this is the number for external ALPGEN events
00058 
00059     Handle<GenParticleCollection> genParticles;
00060     evt.getByLabel( "genParticles", genParticles );
00061 
00062     for( size_t i = 0; i < genParticles->size(); ++ i ) {
00063       const Candidate & p = (*genParticles)[ i ];
00064       int id = p.pdgId();
00065       int st = p.status();
00066 
00067       // tt+jets
00068       if(st == 3 && (id == 6 || id == -6) ) {
00069         if (verbose) cout << "We have a ttbar event"<<endl;
00070         nAccepted_++;
00071         return true;
00072       }
00073     }
00074   }
00075   if (verbose) cout << " REJECTED "<<endl;
00076 
00077   return false;
00078 }
00079 
00080 void BTagSkimMC::endJob()
00081 {
00082   edm::LogVerbatim( "BTagSkimMC" ) 
00083     << "=============================================================================\n"
00084         << " Events read: " << nEvents_
00085     << "\n Events accepted by BTagSkimMC: " << nAccepted_
00086     << "\n Efficiency: " << (double)(nAccepted_)/(double)(nEvents_)
00087         << "\n==========================================================================="
00088     << endl;
00089 }
00090 
00091 
00092 #include "FWCore/Framework/interface/MakerMacros.h"
00093 
00094 DEFINE_FWK_MODULE( BTagSkimMC );