CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
JetExtractor.cc
Go to the documentation of this file.
1 #include "JetExtractor.h"
2 
6 
11 
13 
17 
19 
20 using namespace edm;
21 using namespace std;
22 using namespace reco;
23 using namespace muonisolation;
25 
26 JetExtractor::JetExtractor() {}
27 
28 JetExtractor::JetExtractor(const ParameterSet& par, edm::ConsumesCollector&& iC)
29  : theJetCollectionToken(iC.consumes<CaloJetCollection>(par.getParameter<edm::InputTag>("JetCollectionLabel"))),
30  thePropagatorName(par.getParameter<std::string>("PropagatorName")),
31  theFieldToken(iC.esConsumes()),
32  theThreshold(par.getParameter<double>("Threshold")),
33  theDR_Veto(par.getParameter<double>("DR_Veto")),
34  theDR_Max(par.getParameter<double>("DR_Max")),
35  theExcludeMuonVeto(par.getParameter<bool>("ExcludeMuonVeto")),
36  theService(nullptr),
37  theAssociator(nullptr),
38  thePrintTimeReport(par.getUntrackedParameter<bool>("PrintTimeReport")) {
39  ParameterSet serviceParameters = par.getParameter<ParameterSet>("ServiceParameters");
40  theService = std::make_unique<MuonServiceProxy>(serviceParameters, edm::ConsumesCollector(iC));
41 
42  // theAssociatorParameters = new TrackAssociatorParameters(par.getParameter<edm::ParameterSet>("TrackAssociatorParameters"), iC_);
43  theAssociatorParameters = std::make_unique<TrackAssociatorParameters>();
44  theAssociatorParameters->loadParameters(par.getParameter<edm::ParameterSet>("TrackAssociatorParameters"), iC);
45  theAssociator = std::make_unique<TrackDetectorAssociator>();
46 }
47 
49 
51  // LogWarning("JetExtractor")
52  // <<"fillVetos does nothing now: IsoDeposit provides enough functionality\n"
53  // <<"to remove a deposit at/around given (eta, phi)";
54 }
55 
56 IsoDeposit JetExtractor::deposit(const Event& event, const EventSetup& eventSetup, const Track& muon) const {
57  theService->update(eventSetup);
58  theAssociator->setPropagator(&*(theService->propagator(thePropagatorName)));
59 
60  typedef IsoDeposit::Veto Veto;
61  IsoDeposit::Direction muonDir(muon.eta(), muon.phi());
62 
63  IsoDeposit depJet(muonDir);
64 
65  auto const& bField = eventSetup.getData(theFieldToken);
66 
67  reco::TransientTrack tMuon(muon, &bField);
69  TrackDetMatchInfo mInfo = theAssociator->associate(event, eventSetup, iFTS, *theAssociatorParameters);
70 
71  reco::isodeposit::Direction vetoDirection(mInfo.trkGlobPosAtHcal.eta(), mInfo.trkGlobPosAtHcal.phi());
72  depJet.setVeto(Veto(vetoDirection, theDR_Veto));
73 
75  event.getByToken(theJetCollectionToken, caloJetsH);
76 
77  //use calo towers
78  CaloJetCollection::const_iterator jetCI = caloJetsH->begin();
79  for (; jetCI != caloJetsH->end(); ++jetCI) {
80  double deltar0 = reco::deltaR(muon, *jetCI);
81  if (deltar0 > theDR_Max)
82  continue;
83  if (jetCI->et() < theThreshold)
84  continue;
85 
86  //should I make a separate config option for this?
87  std::vector<CaloTowerPtr> jetConstituents = jetCI->getCaloConstituents();
88 
89  std::vector<DetId>::const_iterator crossedCI = mInfo.crossedTowerIds.begin();
90  std::vector<CaloTowerPtr>::const_iterator jetTowCI = jetConstituents.begin();
91 
92  double sumEtExcluded = 0;
93  for (; jetTowCI != jetConstituents.end(); ++jetTowCI) {
94  bool isExcluded = false;
95  double deltaRLoc = reco::deltaR(vetoDirection, *jetCI);
96  if (deltaRLoc < theDR_Veto) {
97  isExcluded = true;
98  }
99  for (; !isExcluded && crossedCI != mInfo.crossedTowerIds.end(); ++crossedCI) {
100  if (crossedCI->rawId() == (*jetTowCI)->id().rawId()) {
101  isExcluded = true;
102  }
103  }
104  if (isExcluded)
105  sumEtExcluded += (*jetTowCI)->et();
106  }
107  if (theExcludeMuonVeto) {
108  if (jetCI->et() - sumEtExcluded < theThreshold)
109  continue;
110  }
111 
112  double depositEt = jetCI->et();
113  if (theExcludeMuonVeto)
114  depositEt = depositEt - sumEtExcluded;
115 
116  reco::isodeposit::Direction jetDir(jetCI->eta(), jetCI->phi());
117  depJet.addDeposit(jetDir, depositEt);
118  }
119 
120  std::vector<const CaloTower*>::const_iterator crossedCI = mInfo.crossedTowers.begin();
121  double muSumEt = 0;
122  for (; crossedCI != mInfo.crossedTowers.end(); ++crossedCI) {
123  muSumEt += (*crossedCI)->et();
124  }
125  depJet.addCandEnergy(muSumEt);
126 
127  return depJet;
128 }
std::unique_ptr< TrackAssociatorParameters > theAssociatorParameters
Definition: JetExtractor.h:67
std::vector< const CaloTower * > crossedTowers
std::vector< DetId > crossedTowerIds
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > theFieldToken
Definition: JetExtractor.h:54
std::unique_ptr< MuonServiceProxy > theService
the event setup proxy, it takes care the services update
Definition: JetExtractor.h:65
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:649
void fillVetos(const edm::Event &ev, const edm::EventSetup &evSetup, const reco::TrackCollection &tracks) override
Definition: JetExtractor.cc:50
math::XYZPoint trkGlobPosAtHcal
std::unique_ptr< TrackDetectorAssociator > theAssociator
Definition: JetExtractor.h:68
bool getData(T &iHolder) const
Definition: EventSetup.h:122
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:652
edm::EDGetTokenT< reco::CaloJetCollection > theJetCollectionToken
Definition: JetExtractor.h:50
constexpr auto deltaR(const T1 &t1, const T2 &t2) -> decltype(t1.eta())
Definition: deltaR.h:30
FreeTrajectoryState initialFreeState() const
reco::IsoDeposit deposit(const edm::Event &ev, const edm::EventSetup &evSetup, const reco::Track &track) const override
Definition: JetExtractor.cc:56
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
thePropagatorName(iConfig.getParameter< std::string >("Propagator"))
tuple muons
Definition: patZpeak.py:41
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
std::vector< CaloJet > CaloJetCollection
collection of CaloJet objects