CMS 3D CMS Logo

VertexingHelper.cc
Go to the documentation of this file.
2 #include <algorithm>
3 
4 #include <iostream>
5 
10 
12  if (!iConfig.empty()) {
13  enabled_ = true;
14  if (iConfig.existsAs<edm::InputTag>("vertexAssociations") == iConfig.existsAs<edm::InputTag>("vertices")) {
15  throw cms::Exception("Configuration") << "VertexingHelper: you must configure either 'vertices' (to produce "
16  "associations) or 'vertexAssociations' (to read them from disk), "
17  << "you can't specify both, nor you can specify none!\n";
18  }
19 
20  if (iConfig.existsAs<edm::InputTag>("vertexAssociations")) {
21  playback_ = true;
23  iConfig.getParameter<edm::InputTag>("vertexAssociations"));
24  }
25  if (iConfig.existsAs<edm::InputTag>("vertices")) { // vertex have been specified, so run on the fly
26  playback_ = false;
27  verticesToken_ = iC.consumes<reco::VertexCollection>(iConfig.getParameter<edm::InputTag>("vertices"));
28  // ------ MODE ------------------
29  useTracks_ = iConfig.getParameter<bool>("useTracks");
30  // ------ CUTS (fully optional) ------------------
31  }
32  assoSelector_ = reco::modules::make<pat::VertexAssociationSelector>(iConfig);
33  } else {
34  enabled_ = false;
35  }
36 }
37 
39  if (playback_) {
40  iEvent.getByToken(vertexAssociationsToken_, vertexAssoMap_);
41  } else {
42  iEvent.getByToken(verticesToken_, vertexHandle_);
43  }
44 }
45 
47  newEvent(iEvent);
48  if (!playback_)
49  iSetup.get<TransientTrackRecord>().get("TransientTrackBuilder", ttBuilder_);
50 }
51 
53  if (playback_)
54  throw cms::Exception("Configuration")
55  << "VertexingHelper: if this module was configured to read associations from the event,"
56  << " you must use 'operator()' passing a candidate ref, and not 'associate()' directly!\n";
57 
58  reco::VertexCollection::const_iterator vtx, end;
59  size_t ivtx;
62  if (useTracks_) {
63  if (!ttBuilder_.isValid())
64  throw cms::Exception("Configuration")
65  << "VertexingHelper: If you use 'useTracks', you must call newEvent(iEvent,iSetup)!\n";
66  tk = getTrack_(c);
67  if (tk.isNull())
68  return pat::VertexAssociation();
69  tt = ttBuilder_->build(*tk);
70  }
71  for (vtx = vertexHandle_->begin(), end = vertexHandle_->end(), ivtx = 0; vtx != end; ++vtx, ++ivtx) {
72  pat::VertexAssociation association(reco::VertexRef(vertexHandle_, ivtx), tk);
73  if (useTracks_ == false) {
74  association.setDistances(c.vertex(), vtx->position(), vtx->error());
75  } else {
76  GlobalPoint vtxGP(vtx->x(), vtx->y(), vtx->z()); // need to convert XYZPoint to GlobalPoint
77  TrajectoryStateClosestToPoint tscp = tt.trajectoryStateClosestToPoint(vtxGP);
78  GlobalPoint trackPos = tscp.theState().position();
79  AlgebraicSymMatrix33 trackErr = tscp.theState().cartesianError().matrix().Sub<AlgebraicSymMatrix33>(0, 0);
80  association.setDistances(trackPos, vtx->position(), trackErr + vtx->error());
81  }
82  if (assoSelector_(association))
83  return association;
84  }
85  return pat::VertexAssociation();
86 }
87 
89  const reco::RecoCandidate *rc = dynamic_cast<const reco::RecoCandidate *>(&c);
90  if (rc != nullptr) {
91  return rc->bestTrackRef();
92  }
93  const reco::PFCandidate *pfc = dynamic_cast<const reco::PFCandidate *>(&c);
94  if (pfc != nullptr) {
95  return reco::TrackBaseRef(pfc->trackRef());
96  }
97 
98  return reco::TrackBaseRef();
99 }
reco::PFCandidate::trackRef
reco::TrackRef trackRef() const
Definition: PFCandidate.cc:408
edm::RefToBase::isNull
bool isNull() const
Checks for null.
Definition: RefToBase.h:295
AlgebraicSymMatrix33
ROOT::Math::SMatrix< double, 3, 3, ROOT::Math::MatRepSym< double, 3 > > AlgebraicSymMatrix33
Definition: AlgebraicROOTObjects.h:21
pat::helper::VertexingHelper::vertexAssociationsToken_
edm::EDGetTokenT< edm::ValueMap< pat::VertexAssociation > > vertexAssociationsToken_
Definition: VertexingHelper.h:88
groupFilesInBlocks.tt
int tt
Definition: groupFilesInBlocks.py:144
PFCandidate.h
reco::VertexCollection
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
hgcal::association
std::tuple< layerClusterToCaloParticle, caloParticleToLayerCluster > association
Definition: LayerClusterAssociatorByEnergyScoreImpl.h:44
pat::helper::VertexingHelper::verticesToken_
edm::EDGetTokenT< reco::VertexCollection > verticesToken_
Definition: VertexingHelper.h:81
reco::TrackBaseRef
edm::RefToBase< reco::Track > TrackBaseRef
persistent reference to a Track, using views
Definition: TrackFwd.h:35
edm::ParameterSet::existsAs
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:171
TransientTrack.h
RecoCandidate.h
edm::Ref< VertexCollection >
pat::helper::VertexingHelper::useTracks_
bool useTracks_
use tracks inside candidates
Definition: VertexingHelper.h:84
edm::EventSetup::get
T get() const
Definition: EventSetup.h:80
mps_fire.end
end
Definition: mps_fire.py:242
TransientTrackRecord
Definition: TransientTrackRecord.h:11
pat::helper::VertexingHelper::getTrack_
reco::TrackBaseRef getTrack_(const reco::Candidate &c) const
Get out the track from the Candidate / RecoCandidate / PFCandidate.
Definition: VertexingHelper.cc:88
pat::helper::VertexingHelper::playback_
bool playback_
true if it's just reading the associations from the event
Definition: VertexingHelper.h:75
pat::helper::VertexingHelper::assoSelector_
pat::VertexAssociationSelector assoSelector_
selector of associations
Definition: VertexingHelper.h:78
Point3DBase< float, GlobalTag >
pat::helper::VertexingHelper::newEvent
void newEvent(const edm::Event &event)
To be called for each new event, reads in the vertex collection.
Definition: VertexingHelper.cc:38
edm::ParameterSet
Definition: ParameterSet.h:47
iEvent
int iEvent
Definition: GenABIO.cc:224
edm::EventSetup
Definition: EventSetup.h:57
TrajectoryStateClosestToPoint
Definition: TrajectoryStateClosestToPoint.h:18
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
reco::RecoCandidate
Definition: RecoCandidate.h:20
TransientTrackRecord.h
get
#define get
pat::VertexAssociation
Analysis-level structure for vertex-related information.
Definition: Vertexing.h:25
reco::Candidate
Definition: Candidate.h:27
VertexingHelper.h
reco::TransientTrack
Definition: TransientTrack.h:19
extraflags_cff.vtx
vtx
Definition: extraflags_cff.py:18
edm::ValueMap
Definition: ValueMap.h:107
Exception
Definition: hltDiff.cc:246
pat::helper::VertexingHelper::associate
pat::VertexAssociation associate(const reco::Candidate &) const
Definition: VertexingHelper.cc:52
pat::helper::VertexingHelper::VertexingHelper
VertexingHelper()
Definition: VertexingHelper.h:52
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
edm::RefToBase< reco::Track >
pat::helper::VertexingHelper::enabled_
bool enabled_
true if it has non null configuration
Definition: VertexingHelper.h:72
reco::PFCandidate
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:41
cms::Exception
Definition: Exception.h:70
edm::Event
Definition: Event.h:73
edm::InputTag
Definition: InputTag.h:15
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
edm::ParameterSet::empty
bool empty() const
Definition: ParameterSet.h:201
reco::RecoCandidate::bestTrackRef
virtual TrackBaseRef bestTrackRef() const
best track RefToBase
Definition: RecoCandidate.cc:45