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")){
00040
00041 Handle<double> genFilterEff;
00042 evt.getByLabel( "genEventRunInfo", "FilterEfficiency", genFilterEff);
00043 double filter_eff = *genFilterEff;
00044 if (verbose) cout << " Is QCD ";
00045
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 }
00057 else if(processID == 4) {
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
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 );