66 vectorial_ = iConfig.
getParameter<
bool>(
"VectorialCorrection");
76 produces<reco::JPTJetCollection>().setBranchAlias(alias_);
77 produces<reco::CaloJetCollection>().setBranchAlias(
"ak4CaloJetsJPT");
79 input_jets_token_ = consumes<edm::View<reco::CaloJet> >(src_);
81 input_trackjets_token_ = consumes<edm::View<reco::TrackJet> >(srcTrackJets_);
82 input_vertex_token_ = consumes<reco::VertexCollection>(srcPVs_);
101 auto const& jets_h =
iEvent.get(input_jets_token_);
102 auto const& addjets_h =
iEvent.get(input_addjets_token_);
103 auto const& iExtrapolations =
iEvent.get(mExtrapolations_);
107 auto pOut = std::make_unique<reco::JPTJetCollection>();
108 auto pOut1 = std::make_unique<reco::CaloJetCollection>();
110 for (
auto const&
jet :
iEvent.get(input_trackjets_token_)) {
113 for (
auto const& oldjet : addjets_h) {
115 if (dr2 <= dRcone_ * dRcone_) {
122 auto const& mycalo = addjets_h[icalo];
123 std::vector<edm::Ptr<reco::Track> > tracksinjet =
jet.tracks();
126 for (
auto const& itrack : tracksinjet) {
127 for (
auto const& ixtrp : iExtrapolations) {
128 if (ixtrp.positions().empty())
131 double mydphi =
deltaPhi(ixtrp.track()->phi(), itrack->phi());
132 if (fabs(ixtrp.track()->pt() - itrack->pt()) > 0.001 || fabs(ixtrp.track()->eta() - itrack->eta()) > 0.001 ||
136 if (itrack.id() != ixtrp.track().id() || itrack.key() != ixtrp.track().key())
142 if (dr2 <= dRcone_ * dRcone_) {
154 mJPTalgo->correction(corrected, mycalo,
iEvent, iSetup, tracksinvert, tracksincalo, p4, pions,
muons,
elecs);
155 if (p4.pt() > ptCUT_) {
169 reco::JPTJet fJet(p4,
jet.primaryVertex()->position(), jptspe, mycalo.getJetConstituents());
170 pOut->push_back(fJet);
171 pOut1->push_back(mycalo);
176 for (
auto const& oldjet : jets_h) {
180 double factorZSP = 1.;
182 factorZSP = mZSPalgo->correction(corrected,
iEvent, iSetup);
190 bool validMatches =
false;
193 double scaleJPT = mJPTalgo->correction(corrected, oldjet,
iEvent, iSetup, pions,
muons,
elecs, validMatches);
195 corrected.
py() * scaleJPT,
196 corrected.
pz() * scaleJPT,
197 corrected.
energy() * scaleJPT);
199 mJPTalgo->correction(corrected, oldjet,
iEvent, iSetup, p4, pions,
muons,
elecs, validMatches);
218 specific.mResponseOfChargedWithEff = (
float)mJPTalgo->getResponseOfChargedWithEff();
219 specific.mResponseOfChargedWithoutEff = (
float)mJPTalgo->getResponseOfChargedWithoutEff();
220 specific.mSumPtOfChargedWithEff = (
float)mJPTalgo->getSumPtWithEff();
221 specific.mSumPtOfChargedWithoutEff = (
float)mJPTalgo->getSumPtWithoutEff();
222 specific.mSumEnergyOfChargedWithEff = (
float)mJPTalgo->getSumEnergyWithEff();
223 specific.mSumEnergyOfChargedWithoutEff = (
float)mJPTalgo->getSumEnergyWithoutEff();
224 specific.mChargedHadronEnergy = (
float)mJPTalgo->getSumEnergyWithoutEff();
229 double deEta2Tr = 0.;
230 double dePhi2Tr = 0.;
234 double denominator_tracks = 0.;
239 double deR =
deltaR((*it)->eta(), (*it)->phi(), p4.eta(), p4.phi());
240 double deEta = (*it)->eta() - p4.eta();
241 double dePhi =
deltaPhi((*it)->phi(), p4.phi());
242 if ((**it).ptError() / (**it).pt() < 0.1) {
243 deR2Tr = deR2Tr + deR * deR * (*it)->pt();
244 deEta2Tr = deEta2Tr + deEta * deEta * (*it)->pt();
245 dePhi2Tr = dePhi2Tr + dePhi * dePhi * (*it)->pt();
246 denominator_tracks = denominator_tracks + (*it)->pt();
247 Zch = Zch + (*it)->pt();
249 Pout2 = Pout2 + (**it).p() * (**it).p() - (Zch * p4.P()) * (Zch * p4.P());
255 double deR =
deltaR((*it)->eta(), (*it)->phi(), p4.eta(), p4.phi());
256 double deEta = (*it)->eta() - p4.eta();
257 double dePhi =
deltaPhi((*it)->phi(), p4.phi());
258 if ((**it).ptError() / (**it).pt() < 0.1) {
259 deR2Tr = deR2Tr + deR * deR * (*it)->pt();
260 deEta2Tr = deEta2Tr + deEta * deEta * (*it)->pt();
261 dePhi2Tr = dePhi2Tr + dePhi * dePhi * (*it)->pt();
262 denominator_tracks = denominator_tracks + (*it)->pt();
263 Zch = Zch + (*it)->pt();
265 Pout2 = Pout2 + (**it).p() * (**it).p() - (Zch * p4.P()) * (Zch * p4.P());
271 double deR =
deltaR((*it)->eta(), (*it)->phi(), p4.eta(), p4.phi());
272 double deEta = (*it)->eta() - p4.eta();
273 double dePhi =
deltaPhi((*it)->phi(), p4.phi());
274 if ((**it).ptError() / (**it).pt() < 0.1) {
275 deR2Tr = deR2Tr + deR * deR * (*it)->pt();
276 deEta2Tr = deEta2Tr + deEta * deEta * (*it)->pt();
277 dePhi2Tr = dePhi2Tr + dePhi * dePhi * (*it)->pt();
278 denominator_tracks = denominator_tracks + (*it)->pt();
279 Zch = Zch + (*it)->pt();
281 Pout2 = Pout2 + (**it).p() * (**it).p() - (Zch * p4.P()) * (Zch * p4.P());
289 Zch = Zch + (*it)->pt();
292 it !=
muons.inVertexOutOfCalo_.end();
294 Zch = Zch + (*it)->pt();
297 it !=
elecs.inVertexOutOfCalo_.end();
299 Zch = Zch + (*it)->pt();
302 if (mJPTalgo->getSumPtForBeta() > 0.)
303 Zch = Zch / mJPTalgo->getSumPtForBeta();
308 if (denominator_tracks != 0) {
309 deR2Tr = deR2Tr / denominator_tracks;
310 deEta2Tr = deEta2Tr / denominator_tracks;
311 dePhi2Tr = dePhi2Tr / denominator_tracks;
333 if (fJet.pt() > ptCUT_)
334 pOut->push_back(fJet);
reco::TrackRefVector muonsInVertexOutCalo
T getParameter(std::string const &) const
std::remove_cv< typename std::remove_reference< argument_type >::type >::type key_type
double pz() const final
z coordinate of momentum vector
Jets made from CaloTowers.
reco::TrackRefVector muonsInVertexInCalo
virtual void scaleEnergy(double fScale)
scale energy of the jet
reco::TrackRefVector inVertexInCalo_
reco::TrackRefVector muonsOutVertexInCalo
reco::TrackRefVector inVertexOutOfCalo_
void produce(edm::Event &, const edm::EventSetup &) override
reco::TrackRefVector elecsOutVertexInCalo
reco::TrackRefVector pionsInVertexOutCalo
muons
the two sets of parameters below are mutually exclusive, depending if RECO or ALCARECO is used the us...
T getUntrackedParameter(std::string const &, T const &) const
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
virtual Constituents getJetConstituents() const
list of constituents
double px() const final
x coordinate of momentum vector
Jets made from CaloJets corrected for ZSP and tracks.
reco::TrackRefVector pionsOutVertexInCalo
math::XYZPoint Point
point in the space
bool sort_by_pt(const reco::JPTJet &a, const reco::JPTJet &b)
reco::TrackRefVector outOfVertexInCalo_
reco::TrackRefVector elecsInVertexInCalo
math::XYZPoint Point
point in the space
double py() const final
y coordinate of momentum vector
edm::RefToBase< reco::Jet > theCaloJetRef
JetPlusTrackProducer(const edm::ParameterSet &)
reco::TrackRefVector pionsInVertexInCalo
const_iterator end() const
Termination of iteration.
reco::TrackRefVector elecsInVertexOutCalo
Particles matched to tracks that are in/in, in/out, out/in at Vertex and CaloFace.
Jet energy correction algorithm using tracks.
void push_back(value_type const &ref)
Add a Ref<C, T> to the RefVector.
~JetPlusTrackProducer() override
const_iterator begin() const
Initialize an iterator over the RefVector.
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
std::vector< CaloJet > CaloJetCollection
collection of CaloJet objects
math::XYZPoint Point
point in the space
double energy() const final
energy