CMS 3D CMS Logo

HadSUSYQCDSkim.cc

Go to the documentation of this file.
00001 
00014 #include <iostream>
00015 #include <string>
00016 #include <list>
00017 #include <cmath>
00018 #include <cstdio>
00019 #include <vector>
00020 #include <memory>
00021 
00022 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00023 #include "DataFormats/Common/interface/Handle.h"    
00024 
00025 //#include "DataFormats/JetReco/interface/CaloJetfwd.h" 
00026 #include "DataFormats/JetReco/interface/CaloJet.h"
00027 #include "DataFormats/METReco/interface/CaloMETCollection.h"
00028 #include "DataFormats/METReco/interface/CaloMET.h"
00029 #include "SUSYBSMAnalysis/CSA07Skims/interface/HadSUSYQCDSkim.h"
00030 
00031 using namespace edm;
00032 using namespace std;
00033 using namespace reco;
00034 
00035 class PtSorter {
00036 public:
00037   template <class T> bool operator() ( const T& a, const T& b ) {
00038     return ( a.pt() > b.pt() );
00039   }
00040 };
00041 
00042 double DeltaPhi( double v1, double v2 )
00043 { // Computes the correctly normalized phi difference
00044   // v1, v2 = phi of object 1 and 2
00045  double diff = fabs( v2 - v1 );
00046  double corr = 2.*acos(-1.) - diff;
00047  if ( diff < acos(-1.) ) { return diff;} else { return corr;}
00048 }
00049 
00050 HadSUSYQCDSkim::HadSUSYQCDSkim( const edm::ParameterSet& iConfig ) :
00051   nEvents_(0), nAccepted_(0)
00052 {
00053   CaloJetsrc_ = iConfig.getParameter<InputTag>( "CaloJetsrc" );
00054   CaloJetPtmin_ = 
00055     iConfig.getParameter<double>( "CaloJetPtmin");
00056   NminCaloJet_ = iConfig.getParameter<int>( "NminCaloJet");
00057   if ( NminCaloJet_ < 2 ) {
00058     edm::LogError( "HadSUSYQCDSkim" ) 
00059       << "Setting NminCaloJet to 2 !!";
00060     NminCaloJet_ = 2;
00061   }
00062   CaloMETsrc_ = iConfig.getParameter<InputTag>( "CaloMETsrc" );
00063 }
00064 
00065 /*------------------------------------------------------------------------*/
00066 
00067 HadSUSYQCDSkim::~HadSUSYQCDSkim() 
00068 {}
00069 
00070 /*------------------------------------------------------------------------*/
00071 
00072 bool HadSUSYQCDSkim::filter( edm::Event& iEvent, 
00073                              const edm::EventSetup& iSetup )
00074 {
00075   nEvents_++;
00076 
00077   Handle<CaloJetCollection> CaloJetsHandle;
00078 //  try {
00079     iEvent.getByLabel( CaloJetsrc_, CaloJetsHandle );
00080 //  } 
00081 //  catch ( cms::Exception& ex ) {
00082 //    edm::LogError( "HadSUSYQCDSkim" ) 
00083 //      << "Unable to get CaloJet collection "
00084 //      << CaloJetsrc_.label();
00085 //    return false;
00086 //  }
00087   if ( CaloJetsHandle->empty() ) return false;
00088   CaloJetCollection TheCaloJets = *CaloJetsHandle;
00089   std::stable_sort( TheCaloJets.begin(), TheCaloJets.end(), PtSorter() );
00090 
00091   Handle<CaloMETCollection> METHandle;
00092 //  try {
00093     iEvent.getByLabel( CaloMETsrc_, METHandle );
00094 //  }
00095 //  catch ( cms::Exception& ex ) {
00096 //    edm::LogError( "HadSUSYQCDSkim" )
00097 //      << "Unable to get CaloMET collection "
00098 //      << CaloMETsrc_.label();
00099 //    return false;
00100 //  }
00101   if ( METHandle->empty() ) return false;
00102   double METphi = METHandle->begin()->phi();
00103 
00104   // Jet and phi cuts
00105   int nJet = 0;
00106   double phiJet[2];
00107   for ( CaloJetCollection::const_iterator it = TheCaloJets.begin(); 
00108         it != TheCaloJets.end() ; it++ ) {
00109     if ( (fabs(it->eta()) < 3.0) &&
00110          (it->pt() > CaloJetPtmin_) ) {
00111      if(nJet<2)  phiJet[nJet] = it->phi();
00112        nJet++;
00113       if ( DeltaPhi( it->phi(), METphi ) < 0.3 ) return false;
00114     }
00115   }
00116   if ( nJet < NminCaloJet_ ) return false;
00117 
00118   double dphi1 = DeltaPhi( phiJet[0], METphi );
00119   double dphi2 = DeltaPhi( phiJet[1], METphi );
00120   double R1 = sqrt( dphi2*dphi2 
00121                     + (2.*acos(-1.)-dphi1)*(2.*acos(-1.)-dphi1) );
00122   if ( R1 < 0.5 ) return false;
00123   double R2 = sqrt( dphi1*dphi1 
00124                     + (2.*acos(-1.)-dphi2)*(2.*acos(-1.)-dphi2) ); 
00125   if ( R2 < 0.5 ) return false;
00126   if ( DeltaPhi( METphi, phiJet[1] ) < (20./180.*acos(-1.)) )
00127     return false;
00128   
00129   nAccepted_++;
00130 
00131   return true;
00132 }
00133 
00134 /*------------------------------------------------------------------------*/
00135 
00136 void HadSUSYQCDSkim::endJob()
00137 {
00138   edm::LogVerbatim( "HadSUSYQCDSkim" ) 
00139     << "Events read " << nEvents_
00140     << " Events accepted " << nAccepted_
00141     << "\nEfficiency " << (double)(nAccepted_)/(double)(nEvents_) 
00142     << endl;
00143 }

Generated on Tue Jun 9 17:48:03 2009 for CMSSW by  doxygen 1.5.4