CMS 3D CMS Logo

ShiftedPFCandidateProducerByMatchedObject.cc
Go to the documentation of this file.
1 
15 
17 
20 
24 
25 #include <string>
26 #include <vector>
27 
29 public:
32 
33 private:
34  void produce(edm::Event&, const edm::EventSetup&) override;
35 
39 
44 
45  struct objectEntryType {
47  const reco::Candidate::LorentzVector& unshiftedObjectP4,
48  double dRmatch)
49  : shiftedObjectP4_(shiftedObjectP4),
50  unshiftedObjectP4_(unshiftedObjectP4),
51  dRmatch_(dRmatch),
53  if (unshiftedObjectP4.energy() > 0.) {
54  shift_ = (shiftedObjectP4.energy() / unshiftedObjectP4.energy()) - 1.;
55  isValidMatch_ = true;
56  }
57  }
61  double dRmatch_;
62  double shift_;
64  };
65 
66  std::vector<objectEntryType> objects_;
67 };
68 
69 const double dRDefault = 1000;
70 
72  srcPFCandidates_ = consumes<reco::PFCandidateCollection>(cfg.getParameter<edm::InputTag>("srcPFCandidates"));
73  srcUnshiftedObjects_ = consumes<edm::View<reco::Candidate> >(cfg.getParameter<edm::InputTag>("srcUnshiftedObjects"));
74  srcShiftedObjects_ = consumes<edm::View<reco::Candidate> >(cfg.getParameter<edm::InputTag>("srcShiftedObjects"));
75 
76  dRmatch_PFCandidate_ = cfg.getParameter<double>("dRmatch_PFCandidate");
78  dRmatch_Object_ = cfg.exists("dRmatch_Object") ? cfg.getParameter<double>("dRmatch_Object") : 0.1;
80  produces<reco::PFCandidateCollection>();
81 }
82 
84  // nothing to be done yet...
85 }
86 
88  edm::Handle<reco::PFCandidateCollection> originalPFCandidates;
89  evt.getByToken(srcPFCandidates_, originalPFCandidates);
90 
92 
93  edm::Handle<CandidateView> unshiftedObjects;
94  evt.getByToken(srcUnshiftedObjects_, unshiftedObjects);
95 
96  edm::Handle<CandidateView> shiftedObjects;
97  evt.getByToken(srcShiftedObjects_, shiftedObjects);
98 
99  objects_.clear();
100 
101  CandidateView::const_iterator shiftedObjectP4_matched;
102  bool isMatched_Object = false;
103  double dR2bestMatch_Object = dRDefault;
104  for (CandidateView::const_iterator unshiftedObject = unshiftedObjects->begin();
105  unshiftedObject != unshiftedObjects->end();
106  ++unshiftedObject) {
107  isMatched_Object = false;
108  dR2bestMatch_Object = dRDefault;
109 
110  for (CandidateView::const_iterator shiftedObject = shiftedObjects->begin(); shiftedObject != shiftedObjects->end();
111  ++shiftedObject) {
112  double dR2 = deltaR2(unshiftedObject->p4(), shiftedObject->p4());
113  if (dR2 < dR2match_Object_ && dR2 < dR2bestMatch_Object) {
114  shiftedObjectP4_matched = shiftedObject;
115  isMatched_Object = true;
116  dR2bestMatch_Object = dR2;
117  }
118  }
119  if (isMatched_Object) {
120  objects_.push_back(
121  objectEntryType(shiftedObjectP4_matched->p4(), unshiftedObject->p4(), sqrt(dR2bestMatch_Object)));
122  }
123  }
124 
125  auto shiftedPFCandidates = std::make_unique<reco::PFCandidateCollection>();
126 
127  for (reco::PFCandidateCollection::const_iterator originalPFCandidate = originalPFCandidates->begin();
128  originalPFCandidate != originalPFCandidates->end();
129  ++originalPFCandidate) {
130  double shift = 0.;
131  bool applyShift = false;
132  double dR2bestMatch_PFCandidate = dRDefault;
133  for (std::vector<objectEntryType>::const_iterator object = objects_.begin(); object != objects_.end(); ++object) {
134  if (!object->isValidMatch_)
135  continue;
136  double dR2 = deltaR2(originalPFCandidate->p4(), object->unshiftedObjectP4_);
137  if (dR2 < dR2match_PFCandidate_ && dR2 < dR2bestMatch_PFCandidate) {
138  shift = object->shift_;
139  applyShift = true;
140  dR2bestMatch_PFCandidate = dR2;
141  }
142  }
143 
144  reco::Candidate::LorentzVector shiftedPFCandidateP4 = originalPFCandidate->p4();
145  if (applyShift) {
146  double shiftedPx = (1. + shift) * originalPFCandidate->px();
147  double shiftedPy = (1. + shift) * originalPFCandidate->py();
148  double shiftedPz = (1. + shift) * originalPFCandidate->pz();
149  double mass = originalPFCandidate->mass();
150  double shiftedEn = sqrt(shiftedPx * shiftedPx + shiftedPy * shiftedPy + shiftedPz * shiftedPz + mass * mass);
151  shiftedPFCandidateP4.SetPxPyPzE(shiftedPx, shiftedPy, shiftedPz, shiftedEn);
152  }
153 
154  reco::PFCandidate shiftedPFCandidate(*originalPFCandidate);
155  shiftedPFCandidate.setP4(shiftedPFCandidateP4);
156 
157  shiftedPFCandidates->push_back(shiftedPFCandidate);
158  }
159 
160  evt.put(std::move(shiftedPFCandidates));
161 }
162 
164 
Handle.h
reco::CandidateView
edm::View< Candidate > CandidateView
view of a collection containing candidates
Definition: CandidateFwd.h:23
ShiftedPFCandidateProducerByMatchedObject::objectEntryType
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:45
resolutioncreator_cfi.object
object
Definition: resolutioncreator_cfi.py:4
funct::false
false
Definition: Factorize.h:29
PFCandidate.h
ShiftedPFCandidateProducerByMatchedObject::dR2match_PFCandidate_
double dR2match_PFCandidate_
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:41
edm::EDGetTokenT< reco::PFCandidateCollection >
EDProducer.h
ShiftedPFCandidateProducerByMatchedObject::objectEntryType::shiftedObjectP4_
reco::Candidate::LorentzVector shiftedObjectP4_
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:59
edm::Handle
Definition: AssociativeIterator.h:50
ShiftedPFCandidateProducerByMatchedObject::objectEntryType::unshiftedObjectP4_
reco::Candidate::LorentzVector unshiftedObjectP4_
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:60
ShiftedPFCandidateProducerByMatchedObject::objectEntryType::~objectEntryType
~objectEntryType()
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:58
MakerMacros.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
ShiftedPFCandidateProducerByMatchedObject::~ShiftedPFCandidateProducerByMatchedObject
~ShiftedPFCandidateProducerByMatchedObject() override
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:83
ShiftedPFCandidateProducerByMatchedObject::srcShiftedObjects_
edm::EDGetTokenT< edm::View< reco::Candidate > > srcShiftedObjects_
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:38
ShiftedPFCandidateProducerByMatchedObject::dRmatch_PFCandidate_
double dRmatch_PFCandidate_
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:40
ShiftedPFCandidateProducerByMatchedObject::dRmatch_Object_
double dRmatch_Object_
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:42
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
edm::Event::getByToken
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
edm::View
Definition: CaloClusterFwd.h:14
edm::ParameterSet
Definition: ParameterSet.h:47
Event.h
deltaR.h
ShiftedPFCandidateProducerByMatchedObject::objectEntryType::objectEntryType
objectEntryType(const reco::Candidate::LorentzVector &shiftedObjectP4, const reco::Candidate::LorentzVector &unshiftedObjectP4, double dRmatch)
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:46
ShiftedPFCandidateProducerByMatchedObject::srcPFCandidates_
edm::EDGetTokenT< reco::PFCandidateCollection > srcPFCandidates_
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:36
ShiftedPFCandidateProducerByMatchedObject::objectEntryType::dRmatch_
double dRmatch_
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:61
edm::Event::put
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
edm::stream::EDProducer
Definition: EDProducer.h:36
edm::EventSetup
Definition: EventSetup.h:58
ShiftedPFCandidateProducerByMatchedObject
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:28
InputTag.h
looper.cfg
cfg
Definition: looper.py:296
ShiftedPFCandidateProducerByMatchedObject::objects_
std::vector< objectEntryType > objects_
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:66
ShiftedPFCandidateProducerByMatchedObject::srcUnshiftedObjects_
edm::EDGetTokenT< edm::View< reco::Candidate > > srcUnshiftedObjects_
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:37
ShiftedPFCandidateProducerByMatchedObject::dR2match_Object_
double dR2match_Object_
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:43
reco::LeafCandidate::setP4
void setP4(const LorentzVector &p4) final
set 4-momentum
Definition: LeafCandidate.h:158
eostools.move
def move(src, dest)
Definition: eostools.py:511
edm::shift
static unsigned const int shift
Definition: LuminosityBlockID.cc:7
HLTMuonOfflineAnalyzer_cfi.deltaR2
deltaR2
Definition: HLTMuonOfflineAnalyzer_cfi.py:105
ShiftedPFCandidateProducerByMatchedObject::objectEntryType::isValidMatch_
bool isValidMatch_
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:63
EgHLTOffHistBins_cfi.mass
mass
Definition: EgHLTOffHistBins_cfi.py:34
EventSetup.h
reco::PFCandidate
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:41
Candidate.h
View.h
ParameterSet.h
ShiftedPFCandidateProducerByMatchedObject::ShiftedPFCandidateProducerByMatchedObject
ShiftedPFCandidateProducerByMatchedObject(const edm::ParameterSet &)
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:71
reco::Candidate::LorentzVector
math::XYZTLorentzVector LorentzVector
Lorentz vector.
Definition: Candidate.h:36
ShiftedPFCandidateProducerByMatchedObject::objectEntryType::shift_
double shift_
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:62
edm::Event
Definition: Event.h:73
dRDefault
const double dRDefault
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:69
edm::InputTag
Definition: InputTag.h:15
ShiftedPFCandidateProducerByMatchedObject::produce
void produce(edm::Event &, const edm::EventSetup &) override
Definition: ShiftedPFCandidateProducerByMatchedObject.cc:87
PFCandidateFwd.h