00001 #include <map>
00002 #include <string>
00003
00004 #include "TH1.h"
00005
00006 #include "FWCore/Framework/interface/Event.h"
00007 #include "FWCore/Framework/interface/EDAnalyzer.h"
00008 #include "FWCore/Utilities/interface/InputTag.h"
00009 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00010 #include "FWCore/ServiceRegistry/interface/Service.h"
00011 #include "CommonTools/UtilAlgos/interface/TFileService.h"
00012 #include "Math/VectorUtil.h"
00013
00014
00015 class PatMCMatchingExtended : public edm::EDAnalyzer {
00016
00017 public:
00019 explicit PatMCMatchingExtended(const edm::ParameterSet&);
00021 ~PatMCMatchingExtended();
00022
00023 private:
00024
00025 virtual void beginJob() ;
00026 virtual void analyze(const edm::Event&, const edm::EventSetup&);
00027 virtual void endJob() ;
00028
00029
00030
00031
00032 std::map<std::string,TH1F*> histContainer_;
00033
00034
00035 edm::InputTag muonSrc_;
00036
00037
00038 unsigned int diffCharge;
00039
00040
00041 unsigned int noMatch;
00042
00043
00044 unsigned int decayInFlight;
00045
00046
00047 unsigned int numberMuons;
00048
00049 };
00050
00051
00052 #include "DataFormats/PatCandidates/interface/Muon.h"
00053
00054
00055 PatMCMatchingExtended::PatMCMatchingExtended(const edm::ParameterSet& iConfig):
00056 histContainer_(),
00057 muonSrc_(iConfig.getUntrackedParameter<edm::InputTag>("muonSrc"))
00058 {
00059 }
00060
00061 PatMCMatchingExtended::~PatMCMatchingExtended()
00062 {
00063 }
00064
00065 void
00066 PatMCMatchingExtended::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00067 {
00068
00069
00070 edm::Handle<edm::View<pat::Muon> > muons;
00071 iEvent.getByLabel(muonSrc_,muons);
00072
00073 for(edm::View<pat::Muon>::const_iterator muon=muons->begin(); muon!=muons->end(); ++muon){
00074 if(muon->genParticleById(0,1).isNonnull() ){
00075 histContainer_["DR_status1Match"]->Fill( ROOT::Math::VectorUtil::DeltaR(muon->p4() , (muon->genParticleById(0,1) )->p4() ) );
00076 histContainer_["DPt_status1Match"]->Fill(muon->pt() - (muon->genParticleById(0,1) )->pt() );
00077 }
00078 if(muon->genParticleById(0,3).isNonnull() ){
00079 histContainer_["DR_status3Match"]->Fill( ROOT::Math::VectorUtil::DeltaR(muon->p4() , (muon->genParticleById(0,3) )->p4() ) );
00080 histContainer_["DPt_status3Match"]->Fill(muon->pt() - (muon->genParticleById(0,3) )->pt() );
00081 }
00082 if(muon->genParticleById(0,-1).isNonnull() ){
00083 histContainer_["DR_defaultMatch"]->Fill( ROOT::Math::VectorUtil::DeltaR(muon->p4() , (muon->genParticleById(0,-1) )->p4() ) );
00084 histContainer_["DPt_defaultMatch"]->Fill(muon->pt() - (muon->genParticleById(0,-1) )->pt() );
00085 }
00086 if(muon->genParticleById(0,1).isNull() && muon->genParticleById(0,3).isNull() && muon->genParticleById(0,-1).isNull()) noMatch++;
00087 if(muon->genParticleById(0,1).isNull() && muon->genParticleById(0,3).isNull() && muon->genParticleById(0,-1).isNonnull())decayInFlight++;
00088
00089
00090
00091 if( muon->genParticleById(-13,0, 1).isNonnull() ){
00092 diffCharge++;
00093 std::cout<<" DIFF CHARGE!!! charge gen: "<< muon->genParticleById(-13,0, true)->charge()<< " charge reco: "<< muon->charge()<<std::endl;
00094 }
00095 numberMuons++;
00096 }
00097
00098 }
00099
00100 void
00101 PatMCMatchingExtended::beginJob()
00102 {
00103
00104 edm::Service<TFileService> fs;
00105
00106
00107
00108 histContainer_["DR_defaultMatch" ]=fs->make<TH1F>("DR_defaultMatch", "DR_defaultMatch", 100, 0, 0.02);
00109 histContainer_["DR_status1Match" ]=fs->make<TH1F>("DR_status1Match", "DR_status1Match", 100, 0, 0.02);
00110 histContainer_["DR_status3Match" ]=fs->make<TH1F>("DR_status3Match", "DR_status3Match", 100, 0, 0.02);
00111
00112 histContainer_["DPt_defaultMatch" ]=fs->make<TH1F>("DPt_defaultMatch", "DPt_defaultMatch", 10, 0, 1.2);
00113 histContainer_["DPt_status1Match" ]=fs->make<TH1F>("DPt_status1Match", "DPt_status1Match", 10, 0, 1.2);
00114 histContainer_["DPt_status3Match" ]=fs->make<TH1F>("DPt_status3Match", "DPt_status3Match", 10, 0, 1.2);
00115
00116 diffCharge=0;
00117 noMatch=0;
00118 decayInFlight=0;
00119 numberMuons=0;
00120
00121 }
00122
00123 void
00124 PatMCMatchingExtended::endJob()
00125 {
00126 std::cout<<"diffcharge: "<< diffCharge <<std::endl;
00127 std::cout<<"noMatch: "<< noMatch <<std::endl;
00128 std::cout<<"decayInFlight: "<< decayInFlight <<std::endl;
00129 std::cout<<"numberMuons: "<< numberMuons <<std::endl;
00130 }
00131
00132 #include "FWCore/Framework/interface/MakerMacros.h"
00133 DEFINE_FWK_MODULE(PatMCMatchingExtended);
00134
00135