CMS 3D CMS Logo

EgammaHLTGsfTrackVarProducer.cc
Go to the documentation of this file.
1 
9 //this class is designed to calculate dEtaIn,dPhiIn gsf track - supercluster pairs
10 //it can take as input std::vector<Electron> which the gsf track-sc is already done
11 //or it can run over the std::vector<GsfTrack> directly in which case it will pick the smallest dEta,dPhi
12 //the dEta, dPhi do not have to be from the same track
13 //it can optionally set dEta, dPhi to 0 based on the number of tracks found
14 
39 
41 public:
43  void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override;
44  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
45 
46 private:
51 
54 
59 
69 };
70 
72  : recoEcalCandToken_(
73  consumes<reco::RecoEcalCandidateCollection>(config.getParameter<edm::InputTag>("recoEcalCandidateProducer"))),
74  electronToken_{consumes<reco::ElectronCollection>(config.getParameter<edm::InputTag>("inputCollection"))},
75  gsfTrackToken_{consumes<reco::GsfTrackCollection>(config.getParameter<edm::InputTag>("inputCollection"))},
76  beamSpotToken_{consumes<reco::BeamSpot>(config.getParameter<edm::InputTag>("beamSpotProducer"))},
77  magneticFieldToken_{esConsumes<MagneticField, IdealMagneticFieldRecord>()},
78  trackerGeometryToken_{esConsumes<TrackerGeometry, TrackerDigiGeometryRecord>()},
79  upperTrackNrToRemoveCut_{config.getParameter<int>("upperTrackNrToRemoveCut")},
80  lowerTrackNrToRemoveCut_{config.getParameter<int>("lowerTrackNrToRemoveCut")},
81  useDefaultValuesForBarrel_{config.getParameter<bool>("useDefaultValuesForBarrel")},
82  useDefaultValuesForEndcap_{config.getParameter<bool>("useDefaultValuesForEndcap")},
83  dEtaMapPutToken_{produces<reco::RecoEcalCandidateIsolationMap>("Deta").setBranchAlias("deta")},
84  dEtaSeedMapPutToken_{produces<reco::RecoEcalCandidateIsolationMap>("DetaSeed").setBranchAlias("detaseed")},
85  dPhiMapPutToken_{produces<reco::RecoEcalCandidateIsolationMap>("Dphi").setBranchAlias("dphi")},
86  oneOverESuperMinusOneOverPMapPutToken_{produces<reco::RecoEcalCandidateIsolationMap>("OneOESuperMinusOneOP")},
87  oneOverESeedMinusOneOverPMapPutToken_{produces<reco::RecoEcalCandidateIsolationMap>("OneOESeedMinusOneOP")},
88  missingHitsMapPutToken_{
89  produces<reco::RecoEcalCandidateIsolationMap>("MissingHits").setBranchAlias("missinghits")},
90  validHitsMapPutToken_{produces<reco::RecoEcalCandidateIsolationMap>("ValidHits").setBranchAlias("validhits")},
91  nLayerITMapPutToken_{produces<reco::RecoEcalCandidateIsolationMap>("NLayerIT").setBranchAlias("nlayerit")},
92  chi2MapPutToken_{produces<reco::RecoEcalCandidateIsolationMap>("Chi2").setBranchAlias("chi2")} {}
93 
96  desc.add<edm::InputTag>(("recoEcalCandidateProducer"), edm::InputTag("hltRecoEcalSuperClusterActivityCandidate"));
97  desc.add<edm::InputTag>(("inputCollection"), edm::InputTag("hltActivityElectronGsfTracks"));
98  desc.add<edm::InputTag>(("beamSpotProducer"), edm::InputTag("hltOnlineBeamSpot"));
99  desc.add<int>(("upperTrackNrToRemoveCut"), 9999);
100  desc.add<int>(("lowerTrackNrToRemoveCut"), -1);
101  desc.add<bool>(("useDefaultValuesForBarrel"), false);
102  desc.add<bool>(("useDefaultValuesForEndcap"), false);
103 
104  descriptions.add("hltEgammaHLTGsfTrackVarProducer", desc);
105 }
107  // Get the HLT filtered objects
108  auto recoEcalCandHandle = iEvent.getHandle(recoEcalCandToken_);
109 
110  auto const& beamSpotPosition = iEvent.get(beamSpotToken_).position();
111  auto const& magneticField = iSetup.getData(magneticFieldToken_);
112  auto const& trackerGeometry = iSetup.getData(trackerGeometryToken_);
113 
116 
117  reco::RecoEcalCandidateIsolationMap dEtaMap(recoEcalCandHandle);
118  reco::RecoEcalCandidateIsolationMap dEtaSeedMap(recoEcalCandHandle);
119  reco::RecoEcalCandidateIsolationMap dPhiMap(recoEcalCandHandle);
120  reco::RecoEcalCandidateIsolationMap oneOverESuperMinusOneOverPMap(recoEcalCandHandle);
121  reco::RecoEcalCandidateIsolationMap oneOverESeedMinusOneOverPMap(recoEcalCandHandle);
122  reco::RecoEcalCandidateIsolationMap missingHitsMap(recoEcalCandHandle);
123  reco::RecoEcalCandidateIsolationMap validHitsMap(recoEcalCandHandle);
124  reco::RecoEcalCandidateIsolationMap nLayerITMap(recoEcalCandHandle);
125  reco::RecoEcalCandidateIsolationMap chi2Map(recoEcalCandHandle);
126 
127  for (unsigned int iRecoEcalCand = 0; iRecoEcalCand < recoEcalCandHandle->size(); ++iRecoEcalCand) {
128  reco::RecoEcalCandidateRef recoEcalCandRef(recoEcalCandHandle, iRecoEcalCand);
129 
130  const reco::SuperClusterRef scRef = recoEcalCandRef->superCluster();
131  //the idea is that we can take the tracks from properly associated electrons or just take all gsf tracks with that sc as a seed
132  std::vector<const reco::GsfTrack*> gsfTracks;
133  if (auto electronHandle = iEvent.getHandle(electronToken_)) {
134  for (auto const& ele : *electronHandle) {
135  if (ele.superCluster() == scRef) {
136  gsfTracks.push_back(ele.gsfTrack().get());
137  }
138  }
139  } else {
140  for (auto const& trk : iEvent.get(gsfTrackToken_)) {
141  auto elseed = trk.extra()->seedRef().castTo<reco::ElectronSeedRef>();
142  if (elseed->caloCluster().castTo<reco::SuperClusterRef>() == scRef) {
143  gsfTracks.push_back(&trk);
144  }
145  }
146  }
147 
148  int nLayerITValue = -1;
149  int validHitsValue = 0;
150  float chi2Value = 9999999.;
151  float missingHitsValue = 9999999;
152  float dEtaInValue = 999999;
153  float dEtaSeedInValue = 999999;
154  float dPhiInValue = 999999;
155  float oneOverESuperMinusOneOverPValue = 999999;
156  float oneOverESeedMinusOneOverPValue = 999999;
157 
158  const int nrTracks = gsfTracks.size();
159  const bool rmCutsDueToNrTracks = nrTracks <= lowerTrackNrToRemoveCut_ || nrTracks >= upperTrackNrToRemoveCut_;
160  //to use the default values, we require at least one track...
161  const bool useDefaultValues = std::abs(recoEcalCandRef->eta()) < 1.479
162  ? useDefaultValuesForBarrel_ && nrTracks >= 1
163  : useDefaultValuesForEndcap_ && nrTracks >= 1;
164 
165  if (rmCutsDueToNrTracks || useDefaultValues) {
166  nLayerITValue = 100;
167  dEtaInValue = 0;
168  dEtaSeedInValue = 0;
169  dPhiInValue = 0;
170  missingHitsValue = 0;
171  validHitsValue = 100;
172  chi2Value = 0;
173  oneOverESuperMinusOneOverPValue = 0;
174  oneOverESeedMinusOneOverPValue = 0;
175  } else {
176  for (size_t trkNr = 0; trkNr < gsfTracks.size(); trkNr++) {
177  GlobalPoint scPos(scRef->x(), scRef->y(), scRef->z());
178 
179  GlobalPoint trackExtrapToSC;
180  {
181  auto innTSOS =
183  auto posTSOS = extrapolator.extrapolate(innTSOS, scPos);
184  multiTrajectoryStateMode::positionFromModeCartesian(posTSOS, trackExtrapToSC);
185  }
186 
187  EleRelPointPair scAtVtx(scRef->position(), trackExtrapToSC, beamSpotPosition);
188 
189  float trkP = gsfTracks[trkNr]->p();
190  if (scRef->energy() != 0 && trkP != 0) {
191  if (std::abs(1 / scRef->energy() - 1 / trkP) < oneOverESuperMinusOneOverPValue) {
192  oneOverESuperMinusOneOverPValue = std::abs(1 / scRef->energy() - 1 / trkP);
193  }
194  }
195  if (scRef->seed().isNonnull() && scRef->seed()->energy() != 0 && trkP != 0) {
196  if (std::abs(1 / scRef->seed()->energy() - 1 / trkP) < oneOverESeedMinusOneOverPValue) {
197  oneOverESeedMinusOneOverPValue = std::abs(1 / scRef->seed()->energy() - 1 / trkP);
198  }
199  }
200 
201  if (gsfTracks[trkNr]->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS) < missingHitsValue) {
202  missingHitsValue = gsfTracks[trkNr]->hitPattern().numberOfLostHits(reco::HitPattern::MISSING_INNER_HITS);
203  }
204 
205  if (gsfTracks[trkNr]->numberOfValidHits() > validHitsValue) {
206  validHitsValue = gsfTracks[trkNr]->numberOfValidHits();
207  }
208 
209  // number of Layers crossed in inner tracker
210  if (gsfTracks[trkNr]->hitPattern().pixelLayersWithMeasurement() > nLayerITValue) {
211  nLayerITValue = gsfTracks[trkNr]->hitPattern().pixelLayersWithMeasurement();
212  }
213 
214  if (gsfTracks[trkNr]->normalizedChi2() < chi2Value) {
215  chi2Value = gsfTracks[trkNr]->normalizedChi2();
216  }
217 
218  if (std::abs(scAtVtx.dEta()) < dEtaInValue) {
219  //we are allowing them to come from different tracks
220  dEtaInValue = std::abs(scAtVtx.dEta());
221  }
222 
223  if (std::abs(scAtVtx.dEta()) < dEtaSeedInValue) {
224  dEtaSeedInValue = std::abs(scAtVtx.dEta() - scRef->position().eta() + scRef->seed()->position().eta());
225  }
226 
227  if (std::abs(scAtVtx.dPhi()) < dPhiInValue) {
228  //we are allowing them to come from different tracks
229  dPhiInValue = std::abs(scAtVtx.dPhi());
230  }
231  }
232  }
233 
234  dEtaMap.insert(recoEcalCandRef, dEtaInValue);
235  dEtaSeedMap.insert(recoEcalCandRef, dEtaSeedInValue);
236  dPhiMap.insert(recoEcalCandRef, dPhiInValue);
237  oneOverESuperMinusOneOverPMap.insert(recoEcalCandRef, oneOverESuperMinusOneOverPValue);
238  oneOverESeedMinusOneOverPMap.insert(recoEcalCandRef, oneOverESeedMinusOneOverPValue);
239  missingHitsMap.insert(recoEcalCandRef, missingHitsValue);
240  validHitsMap.insert(recoEcalCandRef, validHitsValue);
241  nLayerITMap.insert(recoEcalCandRef, nLayerITValue);
242  chi2Map.insert(recoEcalCandRef, chi2Value);
243  }
244 
245  iEvent.emplace(dEtaMapPutToken_, dEtaMap);
246  iEvent.emplace(dEtaSeedMapPutToken_, dEtaSeedMap);
247  iEvent.emplace(dPhiMapPutToken_, dPhiMap);
248  iEvent.emplace(oneOverESuperMinusOneOverPMapPutToken_, oneOverESuperMinusOneOverPMap);
249  iEvent.emplace(oneOverESeedMinusOneOverPMapPutToken_, oneOverESeedMinusOneOverPMap);
250  iEvent.emplace(missingHitsMapPutToken_, missingHitsMap);
251  iEvent.emplace(validHitsMapPutToken_, validHitsMap);
252  iEvent.emplace(nLayerITMapPutToken_, nLayerITMap);
253  iEvent.emplace(chi2MapPutToken_, chi2Map);
254 }
255 
RecoEcalCandidateIsolation.h
ConfigurationDescriptions.h
edm::StreamID
Definition: StreamID.h:30
EgammaHLTGsfTrackVarProducer::chi2MapPutToken_
const edm::EDPutTokenT< reco::RecoEcalCandidateIsolationMap > chi2MapPutToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:68
TrajectoryStateOnSurface.h
reco::RecoEcalCandidateCollection
std::vector< RecoEcalCandidate > RecoEcalCandidateCollection
collectin of RecoEcalCandidate objects
Definition: RecoEcalCandidateFwd.h:9
anyDirection
Definition: PropagationDirection.h:4
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
TrackerGeometry.h
EgammaHLTGsfTrackVarProducer::trackerGeometryToken_
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerGeometryToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:53
EgammaHLTGsfTrackVarProducer::dEtaSeedMapPutToken_
const edm::EDPutTokenT< reco::RecoEcalCandidateIsolationMap > dEtaSeedMapPutToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:61
GsfPropagatorAdapter.h
HLT_2018_cff.magneticField
magneticField
Definition: HLT_2018_cff.py:348
EgammaHLTGsfTrackVarProducer::validHitsMapPutToken_
const edm::EDPutTokenT< reco::RecoEcalCandidateIsolationMap > validHitsMapPutToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:66
edm::EDGetTokenT< reco::RecoEcalCandidateCollection >
edm
HLT enums.
Definition: AlignableModifier.h:19
edm::EDPutTokenT
Definition: EDPutToken.h:33
EgammaHLTGsfTrackVarProducer::gsfTrackToken_
const edm::EDGetTokenT< reco::GsfTrackCollection > gsfTrackToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:49
TrackCollections2monitor_cff.numberOfValidHits
numberOfValidHits
Definition: TrackCollections2monitor_cff.py:248
EgammaHLTGsfTrackVarProducer::upperTrackNrToRemoveCut_
const int upperTrackNrToRemoveCut_
Definition: EgammaHLTGsfTrackVarProducer.cc:55
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
TransverseImpactPointExtrapolator
Definition: TransverseImpactPointExtrapolator.h:26
reco
fixed size matrix
Definition: AlignmentAlgorithmBase.h:45
ElectronUtilities.h
edm::Ref
Definition: AssociativeIterator.h:58
config
Definition: config.py:1
EgammaHLTGsfTrackVarProducer::electronToken_
const edm::EDGetTokenT< reco::ElectronCollection > electronToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:48
MakerMacros.h
Track.h
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
EgammaHLTGsfTrackVarProducer::useDefaultValuesForBarrel_
const bool useDefaultValuesForBarrel_
Definition: EgammaHLTGsfTrackVarProducer.cc:57
MultiTrajectoryStateMode.h
EgammaHLTGsfTrackVarProducer
Definition: EgammaHLTGsfTrackVarProducer.cc:40
IdealMagneticFieldRecord.h
EgammaHLTGsfTrackVarProducer::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: EgammaHLTGsfTrackVarProducer.cc:94
ecalDrivenGsfElectronCoresFromMultiCl_cff.gsfTracks
gsfTracks
Definition: ecalDrivenGsfElectronCoresFromMultiCl_cff.py:4
Point3DBase< float, GlobalTag >
ParameterSetDescription.h
EgammaHLTGsfTrackVarProducer::dPhiMapPutToken_
const edm::EDPutTokenT< reco::RecoEcalCandidateIsolationMap > dPhiMapPutToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:62
edm::global::EDProducer
Definition: EDProducer.h:32
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
AnalyticalPropagator_cfi.AnalyticalPropagator
AnalyticalPropagator
Definition: AnalyticalPropagator_cfi.py:3
MultiTrajectoryStateTransform.h
TrackerDigiGeometryRecord.h
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
edm::ParameterSet
Definition: ParameterSet.h:36
Event.h
EgammaHLTGsfTrackVarProducer::nLayerITMapPutToken_
const edm::EDPutTokenT< reco::RecoEcalCandidateIsolationMap > nLayerITMapPutToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:67
edm::AssociationMap
Definition: AssociationMap.h:48
EgammaHLTGsfTrackVarProducer::useDefaultValuesForEndcap_
const bool useDefaultValuesForEndcap_
Definition: EgammaHLTGsfTrackVarProducer.cc:58
EgammaHLTGsfTrackVarProducer::lowerTrackNrToRemoveCut_
const int lowerTrackNrToRemoveCut_
Definition: EgammaHLTGsfTrackVarProducer.cc:56
edm::Ref::isNonnull
bool isNonnull() const
Checks for non-null.
Definition: Ref.h:238
iEvent
int iEvent
Definition: GenABIO.cc:224
multiTrajectoryStateMode::positionFromModeCartesian
bool positionFromModeCartesian(TrajectoryStateOnSurface const &tsos, GlobalPoint &position)
Definition: MultiTrajectoryStateMode.cc:63
EgammaHLTGsfTrackVarProducer::beamSpotToken_
const edm::EDGetTokenT< reco::BeamSpot > beamSpotToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:50
MagneticField.h
edm::EventSetup
Definition: EventSetup.h:57
AnalyticalPropagator.h
EleRelPointPair
Definition: ElectronUtilities.h:43
EgammaHLTGsfTrackVarProducer::missingHitsMapPutToken_
const edm::EDPutTokenT< reco::RecoEcalCandidateIsolationMap > missingHitsMapPutToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:65
TrackCollections2monitor_cff.normalizedChi2
normalizedChi2
Definition: TrackCollections2monitor_cff.py:247
TrajectorySeedCollection.h
edm::ESGetToken< MagneticField, IdealMagneticFieldRecord >
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:113
edm::AssociationMap::insert
void insert(const key_type &k, const data_type &v)
insert an association
Definition: AssociationMap.h:166
Electron.h
RecoEcalCandidate.h
SuperCluster.h
reco::HitPattern::MISSING_INNER_HITS
Definition: HitPattern.h:155
EgammaHLTGsfTrackVarProducer::dEtaMapPutToken_
const edm::EDPutTokenT< reco::RecoEcalCandidateIsolationMap > dEtaMapPutToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:60
TransverseImpactPointExtrapolator.h
ElectronIsolationAssociation.h
MultiTrajectoryStateTransform::innerStateOnSurface
TrajectoryStateOnSurface innerStateOnSurface(const reco::GsfTrack &tk) const
Definition: MultiTrajectoryStateTransform.cc:23
EgammaHLTGsfTrackVarProducer::produce
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
Definition: EgammaHLTGsfTrackVarProducer.cc:106
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
EgammaHLTGsfTrackVarProducer::EgammaHLTGsfTrackVarProducer
EgammaHLTGsfTrackVarProducer(const edm::ParameterSet &)
Definition: EgammaHLTGsfTrackVarProducer.cc:71
EDProducer.h
GsfPropagatorAdapter
Definition: GsfPropagatorAdapter.h:14
edm::Event
Definition: Event.h:73
EgammaHLTGsfTrackVarProducer::oneOverESuperMinusOneOverPMapPutToken_
const edm::EDPutTokenT< reco::RecoEcalCandidateIsolationMap > oneOverESuperMinusOneOverPMapPutToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:63
EgammaHLTGsfTrackVarProducer::recoEcalCandToken_
const edm::EDGetTokenT< reco::RecoEcalCandidateCollection > recoEcalCandToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:47
EgammaHLTGsfTrackVarProducer::magneticFieldToken_
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magneticFieldToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:52
edm::InputTag
Definition: InputTag.h:15
ElectronSeed.h
EgammaHLTGsfTrackVarProducer::oneOverESeedMinusOneOverPMapPutToken_
const edm::EDPutTokenT< reco::RecoEcalCandidateIsolationMap > oneOverESeedMinusOneOverPMapPutToken_
Definition: EgammaHLTGsfTrackVarProducer.cc:64