Go to the documentation of this file.00001 #include "RecoMuon/MuonIsolation/interface/MuIsoByTrackPt.h"
00002
00003 #include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractor.h"
00004 #include "PhysicsTools/IsolationAlgos/interface/IsoDepositExtractorFactory.h"
00005 #include "RecoMuon/MuonIsolation/interface/IsolatorByDeposit.h"
00006
00007 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00008 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00009
00010 #include "DataFormats/TrackReco/interface/Track.h"
00011 #include "DataFormats/TrackReco/interface/TrackFwd.h"
00012
00013 #include <vector>
00014 #include <iostream>
00015
00016 using std::vector;
00017 using std::string;
00018 using reco::IsoDeposit;
00019 using namespace muonisolation;
00020
00021
00022 MuIsoByTrackPt::MuIsoByTrackPt(const edm::ParameterSet& conf)
00023 : theExtractor(0), theIsolator(0)
00024 {
00025 edm::ParameterSet extractorPSet = conf.getParameter<edm::ParameterSet>("ExtractorPSet");
00026 string extractorName = extractorPSet.getParameter<string>("ComponentName");
00027 theExtractor = IsoDepositExtractorFactory::get()->create(extractorName, extractorPSet);
00028
00029 theCut = conf.getUntrackedParameter<double>("Threshold", 0.);
00030 float coneSize = conf.getUntrackedParameter<double>("ConeSize", 0.);
00031 vector<double> weights(1,1.);
00032 theIsolator = new IsolatorByDeposit(coneSize, weights);
00033 }
00034
00035 MuIsoByTrackPt::~MuIsoByTrackPt()
00036 {
00037 delete theExtractor;
00038 delete theIsolator;
00039 }
00040
00041 void MuIsoByTrackPt::setConeSize(float dr)
00042 {
00043 theIsolator->setConeSize(dr);
00044 }
00045
00046 float MuIsoByTrackPt::isolation(const edm::Event& ev, const edm::EventSetup& es, const reco::Track & muon)
00047 {
00048 IsoDeposit dep = extractor()->deposit(ev,es,muon);
00049 MuIsoBaseIsolator::DepositContainer deposits;
00050 deposits.push_back(&dep);
00051 if (isolator()->resultType() == MuIsoBaseIsolator::ISOL_FLOAT_TYPE){
00052 return isolator()->result(deposits).valFloat;
00053 }
00054
00055 return -999.;
00056 }
00057
00058 bool MuIsoByTrackPt::isIsolated(const edm::Event& ev, const edm::EventSetup& es, const reco::Track& muon)
00059 {
00060 return (isolation(ev,es,muon) > theCut);
00061 }