CMS 3D CMS Logo

TTClusterBuilder.cc
Go to the documentation of this file.
1 
11 
13 template <>
16  auto ttClusterDSVForOutput = std::make_unique<edmNew::DetSetVector<TTCluster<Ref_Phase2TrackerDigi_>>>();
17  std::map<DetId, std::vector<Ref_Phase2TrackerDigi_>> rawHits;
18  this->RetrieveRawHits(rawHits, iEvent);
19 
20  // Retrieve tracker topology from geometry
22  iSetup.get<TrackerTopologyRcd>().get(tTopoHandle);
23  const TrackerTopology* const tTopo = tTopoHandle.product();
24 
26  iSetup.get<TrackerDigiGeometryRecord>().get(tGeomHandle);
27  const TrackerGeometry* const theTrackerGeom = tGeomHandle.product();
28 
29  // Loop on the OT stacks
30  for (auto gd = theTrackerGeom->dets().begin(); gd != theTrackerGeom->dets().end(); gd++) {
31  DetId detid = (*gd)->geographicalId();
32  if (detid.subdetId() == 1 || detid.subdetId() == 2)
33  continue; // only run on OT
34  if (!tTopo->isLower(detid))
35  continue; // loop on the stacks: choose the lower arbitrarily
36  DetId lowerDetid = detid;
37  DetId upperDetid = tTopo->partnerDetId(detid);
38 
41  std::vector<std::vector<Ref_Phase2TrackerDigi_>> lowerHits, upperHits;
42 
44  typename std::map<DetId, std::vector<Ref_Phase2TrackerDigi_>>::const_iterator lowerHitFind =
45  rawHits.find(lowerDetid);
46  typename std::map<DetId, std::vector<Ref_Phase2TrackerDigi_>>::const_iterator upperHitFind =
47  rawHits.find(upperDetid);
48 
52  bool isPSP = (theTrackerGeom->getDetectorType(lowerDetid) == TrackerGeometry::ModuleType::Ph2PSP);
53  if (lowerHitFind != rawHits.end())
54  theClusterFindingAlgoHandle->Cluster(lowerHits, lowerHitFind->second, isPSP);
55  if (upperHitFind != rawHits.end())
56  theClusterFindingAlgoHandle->Cluster(upperHits, upperHitFind->second, false);
57 
60  {
61  edmNew::DetSetVector<TTCluster<Ref_Phase2TrackerDigi_>>::FastFiller lowerOutputFiller(*ttClusterDSVForOutput,
62  lowerDetid);
63  for (unsigned int i = 0; i < lowerHits.size(); i++) {
64  TTCluster<Ref_Phase2TrackerDigi_> temp(lowerHits.at(i), lowerDetid, 0, storeLocalCoord);
65  lowerOutputFiller.push_back(temp);
66  }
67  if (lowerOutputFiller.empty())
68  lowerOutputFiller.abort();
69  }
70  {
71  edmNew::DetSetVector<TTCluster<Ref_Phase2TrackerDigi_>>::FastFiller upperOutputFiller(*ttClusterDSVForOutput,
72  upperDetid);
73  for (unsigned int i = 0; i < upperHits.size(); i++) {
74  TTCluster<Ref_Phase2TrackerDigi_> temp(upperHits.at(i), upperDetid, 1, storeLocalCoord);
75  upperOutputFiller.push_back(temp);
76  }
77  if (upperOutputFiller.empty())
78  upperOutputFiller.abort();
79  }
80  }
81 
83  iEvent.put(std::move(ttClusterDSVForOutput), "ClusterInclusive");
84 }
85 
87 template <>
89  std::map<DetId, std::vector<Ref_Phase2TrackerDigi_>>& mRawHits, const edm::Event& iEvent) {
90  mRawHits.clear();
92  std::vector<edm::EDGetTokenT<edm::DetSetVector<Phase2TrackerDigi>>>::iterator it;
93  for (it = rawHitTokens.begin(); it != rawHitTokens.end(); ++it) {
96  iEvent.getByToken(*it, HitHandle);
99 
101  for (detsIter = HitHandle->begin(); detsIter != HitHandle->end(); detsIter++) {
102  DetId id = detsIter->id;
103  for (hitsIter = detsIter->data.begin(); hitsIter != detsIter->data.end(); hitsIter++) {
104  mRawHits[id].push_back(edm::makeRefTo(HitHandle, id, hitsIter));
105  }
106  }
107  }
108 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
Item & push_back(id_type iid)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
void RetrieveRawHits(std::map< DetId, std::vector< T > > &mRawHits, const edm::Event &iEvent)
Get hits.
DetId partnerDetId(const DetId &id) const
bool isLower(const DetId &id) const
const DetContainer & dets() const override
Returm a vector of all GeomDet (including all GeomDetUnits)
int iEvent
Definition: GenABIO.cc:224
Ref< typename HandleT::element_type, typename HandleT::element_type::value_type::value_type > makeRefTo(const HandleT &iHandle, det_id_type iDetID, typename HandleT::element_type::value_type::const_iterator itIter)
Definition: DetSetVector.h:418
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
ModuleType getDetectorType(DetId) const
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:325
Definition: DetId.h:17
NOTE: this is needed even if it seems not.
Definition: TTCluster.h:27
T get() const
Definition: EventSetup.h:73
iterator begin()
Return an iterator to the first DetSet.
Definition: DetSetVector.h:314
collection_type::const_iterator const_iterator
Definition: DetSet.h:32
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:102
T const * product() const
Definition: ESHandle.h:86
def move(src, dest)
Definition: eostools.py:511