CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
VertexProducer.cc
Go to the documentation of this file.
15 
16 using namespace l1tVertexFinder;
17 using namespace std;
18 
20  : l1TracksToken_(consumes<TTTrackCollectionView>(iConfig.getParameter<edm::InputTag>("l1TracksInputTag"))),
22  outputCollectionName_(iConfig.getParameter<std::string>("l1VertexCollectionName")),
23  settings_(AlgoSettings(iConfig)) {
24  // Get configuration parameters
25 
26  switch (settings_.vx_algo()) {
27  case Algorithm::FastHisto:
28  edm::LogInfo("VertexProducer") << "VertexProducer::Finding vertices using the FastHisto binning algorithm";
29  break;
30  case Algorithm::FastHistoLooseAssociation:
31  edm::LogInfo("VertexProducer")
32  << "VertexProducer::Finding vertices using the FastHistoLooseAssociation binning algorithm";
33  break;
34  case Algorithm::GapClustering:
35  edm::LogInfo("VertexProducer") << "VertexProducer::Finding vertices using a gap clustering algorithm";
36  break;
37  case Algorithm::AgglomerativeHierarchical:
38  edm::LogInfo("VertexProducer") << "VertexProducer::Finding vertices using a Simple Merge Clustering algorithm";
39  break;
40  case Algorithm::DBSCAN:
41  edm::LogInfo("VertexProducer") << "VertexProducer::Finding vertices using a DBSCAN algorithm";
42  break;
43  case Algorithm::PVR:
44  edm::LogInfo("VertexProducer") << "VertexProducer::Finding vertices using a PVR algorithm";
45  break;
46  case Algorithm::AdaptiveVertexReconstruction:
47  edm::LogInfo("VertexProducer")
48  << "VertexProducer::Finding vertices using an AdaptiveVertexReconstruction algorithm";
49  break;
50  case Algorithm::HPV:
51  edm::LogInfo("VertexProducer") << "VertexProducer::Finding vertices using a Highest Pt Vertex algorithm";
52  break;
53  case Algorithm::Kmeans:
54  edm::LogInfo("VertexProducer") << "VertexProducer::Finding vertices using a kmeans algorithm";
55  break;
56  }
57 
58  //--- Define EDM output to be written to file (if required)
59  produces<l1t::VertexCollection>(outputCollectionName_);
60 }
61 
64  iEvent.getByToken(l1TracksToken_, l1TracksHandle);
65 
66  std::vector<l1tVertexFinder::L1Track> l1Tracks;
67  l1Tracks.reserve(l1TracksHandle->size());
68  for (const auto& track : l1TracksHandle->ptrs()) {
69  auto l1track = L1Track(track);
70  // Check the minimum pT of the tracks
71  // This is left here because it represents the smallest pT to be sent by the track finding boards
72  // This has less to do with the algorithms than the constraints of what will be sent to the vertexing algorithm
73  if (l1track.pt() > settings_.vx_TrackMinPt()) {
74  l1Tracks.push_back(l1track);
75  }
76  }
77 
78  VertexFinder vf(l1Tracks, settings_);
79 
80  switch (settings_.vx_algo()) {
81  case Algorithm::FastHisto: {
83  vf.fastHisto(tTopoHandle.product());
84  break;
85  }
86  case Algorithm::FastHistoLooseAssociation:
88  break;
89  case Algorithm::GapClustering:
90  vf.GapClustering();
91  break;
92  case Algorithm::AgglomerativeHierarchical:
94  break;
95  case Algorithm::DBSCAN:
96  vf.DBSCAN();
97  break;
98  case Algorithm::PVR:
99  vf.PVR();
100  break;
101  case Algorithm::AdaptiveVertexReconstruction:
103  break;
104  case Algorithm::HPV:
105  vf.HPV();
106  break;
107  case Algorithm::Kmeans:
108  vf.Kmeans();
109  break;
110  }
111 
112  vf.SortVerticesInPt();
113  vf.findPrimaryVertex();
114 
115  // //=== Store output EDM track and hardware stub collections.
116  std::unique_ptr<l1t::VertexCollection> lProduct(new std::vector<l1t::Vertex>());
117 
118  for (const auto& vtx : vf.vertices()) {
119  std::vector<edm::Ptr<l1t::Vertex::Track_t>> lVtxTracks;
120  lVtxTracks.reserve(vtx.tracks().size());
121  for (const auto& t : vtx.tracks())
122  lVtxTracks.push_back(t->getTTTrackPtr());
123  lProduct->emplace_back(l1t::Vertex(vtx.pt(), vtx.z0(), lVtxTracks));
124  }
125  iEvent.put(std::move(lProduct), outputCollectionName_);
126 }
127 
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
void fastHistoLooseAssociation()
High pT Vertex Algorithm.
const std::vector< RecoVertex<> > & vertices() const
Returns the z positions of the reconstructed primary vertices.
Definition: VertexFinder.h:63
void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override
void GapClustering()
Gap Clustering Algorithm.
Definition: VertexFinder.cc:60
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
void agglomerativeHierarchicalClustering()
Simple Merge Algorithm.
const std::string outputCollectionName_
void adaptiveVertexReconstruction()
Adaptive Vertex Reconstruction algorithm.
int iEvent
Definition: GenABIO.cc:224
void findPrimaryVertex()
Find the primary vertex.
void fastHisto(const TrackerTopology *tTopo)
Histogramming algorithm.
def move
Definition: eostools.py:511
VertexProducer(const edm::ParameterSet &)
Log< level::Info, false > LogInfo
void PVR()
Principal Vertex Reconstructor algorithm.
Algorithm vx_algo() const
Definition: AlgoSettings.h:31
void SortVerticesInPt()
Sort vertices in pT.
Definition: VertexFinder.h:90
void HPV()
High pT Vertex Algorithm.
T const * product() const
Definition: ESHandle.h:86
TTTrack< Ref_Phase2TrackerDigi_ > L1Track
Definition: L1Track.h:8
trackerTopologyToken_(iC.esConsumes())
void Kmeans()
Kmeans Algorithm.
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:157
void DBSCAN()
DBSCAN algorithm.
ESGetTokenH3DDVariant esConsumes(std::string const &Reccord, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
l1tVertexFinder::AlgoSettings settings_