CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
GEMSegmentBuilder Class Reference

#include <GEMSegmentBuilder.h>

Public Member Functions

void build (const GEMRecHitCollection *rechits, GEMSegmentCollection &oc)
 
 GEMSegmentBuilder (const edm::ParameterSet &)
 
void setGeometry (const GEMGeometry *g)
 
 ~GEMSegmentBuilder ()
 Destructor. More...
 

Private Attributes

std::unique_ptr< GEMSegmentAlgorithmBasege0Algo
 
std::string ge0AlgoName
 
edm::ParameterSet ge0AlgoPSet
 
const GEMGeometrygeom_
 
std::unique_ptr< GEMSegmentAlgorithmBasesegAlgo
 
std::string segAlgoName
 
edm::ParameterSet segAlgoPSet
 

Detailed Description

CSCSegmentBuilder Algorithm to build GEMSegment's from GEMRecHit collection by implementing a 'build' function required by GEMSegmentProducer.

Implementation notes:
Configured via the Producer's ParameterSet.
Presume this might become an abstract base class one day.

Author
Piet Verwilligen

Definition at line 23 of file GEMSegmentBuilder.h.

Constructor & Destructor Documentation

◆ GEMSegmentBuilder()

GEMSegmentBuilder::GEMSegmentBuilder ( const edm::ParameterSet ps)
explicit

Configure the algorithm via ctor. Receives ParameterSet percolated down from EDProducer which owns this Builder.

Definition at line 12 of file GEMSegmentBuilder.cc.

References ge0Algo, ge0AlgoName, ge0AlgoPSet, get, edm::ParameterSet::getParameter(), segAlgo, segAlgoName, segAlgoPSet, and AlCaHLTBitMon_QueryRunRegistry::string.

12  : geom_(nullptr) {
13  // Algo name
14  segAlgoName = ps.getParameter<std::string>("algo_name");
15  ge0AlgoName = ps.getParameter<std::string>("ge0_name");
16 
17  edm::LogVerbatim("GEMSegmentBuilder") << "GEMSegmentBuilder algorithm : ge0 name : " << ge0AlgoName
18  << " name: " << segAlgoName;
19 
20  // SegAlgo parameter set
21  segAlgoPSet = ps.getParameter<edm::ParameterSet>("algo_pset");
22  ge0AlgoPSet = ps.getParameter<edm::ParameterSet>("ge0_pset");
23 
24  // Ask factory to build these algorithms, giving them the appropriate ParameterSets
27 }
Log< level::Info, true > LogVerbatim
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
const GEMGeometry * geom_
std::string segAlgoName
std::unique_ptr< GEMSegmentAlgorithmBase > ge0Algo
edm::ParameterSet ge0AlgoPSet
#define get
edm::ParameterSet segAlgoPSet
std::unique_ptr< GEMSegmentAlgorithmBase > segAlgo
std::string ge0AlgoName

◆ ~GEMSegmentBuilder()

GEMSegmentBuilder::~GEMSegmentBuilder ( )

Destructor.

Definition at line 28 of file GEMSegmentBuilder.cc.

28 {}

Member Function Documentation

◆ build()

void GEMSegmentBuilder::build ( const GEMRecHitCollection rechits,
GEMSegmentCollection oc 
)

Find rechits in each ensemble of 6 GEM layers, build GEMSegment's , and fill into output collection.

Definition at line 30 of file GEMSegmentBuilder.cc.

References relativeConstraints::chamber, GEMGeometry::etaPartition(), ge0Algo, gemRecHits_cfi::gemRecHits, geom_, triggerObjects_cff::id, LogTrace, FastTrackerRecHitMaskProducer_cfi::recHits, segAlgo, and GEMGeometry::superChamber().

30  {
31  edm::LogVerbatim("GEMSegmentBuilder") << "[GEMSegmentBuilder::build] Total number of rechits in this event: "
32  << recHits->size();
33 
34  // Let's define the ensemble of GEM devices having the same region, chambers number (phi)
35  // different eta partitions and different layers are allowed
36 
37  std::map<uint32_t, std::vector<const GEMRecHit*> > ensembleRH;
38 
39  // Loop on the GEM rechit and select the different GEM Ensemble
40  for (GEMRecHitCollection::const_iterator it2 = recHits->begin(); it2 != recHits->end(); ++it2) {
41  // GEM Ensemble is defined by assigning all the GEMDetIds of the same "superchamber"
42  // (i.e. region same, chamber same) to the DetId of the first layer
43 
44  // here a reference GEMDetId is created: named "id"
45  // - Ring 1 (no other rings available for GEM)
46  // - Layer 1 = reference layer (effective layermask)
47  // - Roll 0 = reference roll (effective rollmask)
48  // - Station == 1 (GE1/1) or == 2 (GE2/1)
49  // this reference id serves to link all GEMEtaPartitions
50  // and will also be used to determine the GEMSuperChamber
51  // to which the GEMSegment is assigned (done inside GEMSegAlgoXX)
52  GEMDetId id(it2->gemId().superChamberId());
53  // save current GEMRecHit in vector associated to the reference id
54  ensembleRH[id.rawId()].push_back(&(*it2));
55  }
56 
57  // Loop on the entire map <ref id, vector of GEMRecHits>
58  for (auto enIt = ensembleRH.begin(); enIt != ensembleRH.end(); ++enIt) {
59  std::vector<const GEMRecHit*> gemRecHits;
60  std::map<uint32_t, const GEMEtaPartition*> ens;
61 
62  // all detIds have been assigned to the to chamber
63  const GEMSuperChamber* chamber = geom_->superChamber(enIt->first);
64  for (auto rechit = enIt->second.begin(); rechit != enIt->second.end(); ++rechit) {
65  gemRecHits.push_back(*rechit);
66  ens[(*rechit)->gemId()] = geom_->etaPartition((*rechit)->gemId());
67  }
68 
69 #ifdef EDM_ML_DEBUG // have lines below only compiled when in debug mode
70  LogTrace("GEMSegmentBuilder")
71  << "[GEMSegmentBuilder::build] -----------------------------------------------------------------------------";
72  LogTrace("GEMSegmentBuilder") << "[GEMSegmentBuilder::build] found " << gemRecHits.size()
73  << " rechits in GEM Super Chamber " << chamber->id() << " ::";
74  for (auto rh = gemRecHits.begin(); rh != gemRecHits.end(); ++rh) {
75  auto gemid = (*rh)->gemId();
76  // auto rhr = gemGeom->etaPartition(gemid);
77  auto rhLP = (*rh)->localPosition();
78  // auto rhGP = rhr->toGlobal(rhLP);
79  // no sense to print local y because local y here is in the roll reference frame
80  // in the roll reference frame the local y of a rechit is always the middle of the roll, and hence equal to 0.0
81  LogTrace("GEMSegmentBuilder") << "[RecHit :: Loc x = " << std::showpos << std::setw(9)
82  << rhLP.x() /*<<" Loc y = "<<std::showpos<<std::setw(9)<<rhLP.y()*/
83  << " BX = " << (*rh)->BunchX() << " -- " << gemid.rawId() << " = " << gemid << " ]";
84  }
85 #endif
86 
88  std::pair<const GEMSuperChamber*, std::map<uint32_t, const GEMEtaPartition*> >(chamber, ens));
89 
90 #ifdef EDM_ML_DEBUG // have lines below only compiled when in debug mode
91  LogTrace("GEMSegmentBuilder") << "[GEMSegmentBuilder::build] run the segment reconstruction algorithm now";
92 #endif
93 
94  // given the superchamber select the appropriate algo... and run it
95  std::vector<GEMSegment> segv;
96  if (chamber->id().station() == 0)
97  segv = ge0Algo->run(ensemble, gemRecHits);
98  else
99  segv = segAlgo->run(ensemble, gemRecHits);
100 #ifdef EDM_ML_DEBUG // have lines below only compiled when in debug mode
101  LogTrace("GEMSegmentBuilder") << "[GEMSegmentBuilder::build] found " << segv.size();
102 #endif
103 
104  GEMDetId mid(enIt->first);
105 
106 #ifdef EDM_ML_DEBUG // have lines below only compiled when in debug mode
107  LogTrace("GEMSegmentBuilder") << "[GEMSegmentBuilder::build] found " << segv.size()
108  << " segments in GEM Super Chamber " << mid;
109  LogTrace("GEMSegmentBuilder")
110  << "[GEMSegmentBuilder::build] -----------------------------------------------------------------------------";
111 #endif
112 
113  // Add the segments to master collection
114  oc.put(mid, segv.begin(), segv.end());
115  }
116 }
Log< level::Info, true > LogVerbatim
const GEMEtaPartition * etaPartition(GEMDetId id) const
Return a GEMEtaPartition given its id.
Definition: GEMGeometry.cc:77
const GEMGeometry * geom_
std::pair< const GEMSuperChamber *, std::map< uint32_t, const GEMEtaPartition * > > GEMEnsemble
#define LogTrace(id)
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:43
std::unique_ptr< GEMSegmentAlgorithmBase > ge0Algo
std::unique_ptr< GEMSegmentAlgorithmBase > segAlgo
const GEMSuperChamber * superChamber(GEMDetId id) const
Definition: GEMGeometry.cc:69

◆ setGeometry()

void GEMSegmentBuilder::setGeometry ( const GEMGeometry g)

Cache pointer to geometry for current event

Definition at line 118 of file GEMSegmentBuilder.cc.

References relativeConstraints::geom, and geom_.

Member Data Documentation

◆ ge0Algo

std::unique_ptr<GEMSegmentAlgorithmBase> GEMSegmentBuilder::ge0Algo
private

Definition at line 48 of file GEMSegmentBuilder.h.

Referenced by build(), and GEMSegmentBuilder().

◆ ge0AlgoName

std::string GEMSegmentBuilder::ge0AlgoName
private

Definition at line 44 of file GEMSegmentBuilder.h.

Referenced by GEMSegmentBuilder().

◆ ge0AlgoPSet

edm::ParameterSet GEMSegmentBuilder::ge0AlgoPSet
private

Definition at line 46 of file GEMSegmentBuilder.h.

Referenced by GEMSegmentBuilder().

◆ geom_

const GEMGeometry* GEMSegmentBuilder::geom_
private

Definition at line 49 of file GEMSegmentBuilder.h.

Referenced by build(), and setGeometry().

◆ segAlgo

std::unique_ptr<GEMSegmentAlgorithmBase> GEMSegmentBuilder::segAlgo
private

Definition at line 47 of file GEMSegmentBuilder.h.

Referenced by build(), and GEMSegmentBuilder().

◆ segAlgoName

std::string GEMSegmentBuilder::segAlgoName
private

Definition at line 43 of file GEMSegmentBuilder.h.

Referenced by GEMSegmentBuilder().

◆ segAlgoPSet

edm::ParameterSet GEMSegmentBuilder::segAlgoPSet
private

Definition at line 45 of file GEMSegmentBuilder.h.

Referenced by GEMSegmentBuilder().