25 vector<DetLayer*>
result[2];
28 int iendcap = (
endcap == 1) ? 0 : 1;
34 rings.push_back(
ring);
38 rolls.push_back(roll);
43 result[iendcap].push_back(ringLayer);
47 pair<vector<DetLayer*>, vector<DetLayer*> > res_pair(result[0], result[1]);
59 const std::string metname =
"Muon|RecoMuon|RecoMuonDetLayers|MuonGEMDetLayerGeometryBuilder";
61 vector<const ForwardDetRing*> frontRings, backRings;
63 for (std::vector<int>::iterator
ring = rings.begin();
ring != rings.end() - 2;
ring++) {
64 for (vector<int>::iterator roll = rolls.begin(); roll != rolls.end(); roll++) {
65 vector<const GeomDet*> frontDets, backDets;
72 if (geomDet !=
nullptr) {
73 bool isInFront = isFront(gemId);
75 frontDets.push_back(geomDet);
77 backDets.push_back(geomDet);
79 LogTrace(metname) <<
"get GEM Endcap roll " << gemId << (isInFront ?
"front" :
"back ")
85 if (!frontDets.empty()) {
87 frontRings.push_back(
new MuDetRing(frontDets));
88 LogTrace(metname) <<
"New front ring with " << frontDets.size()
89 <<
" chambers at z=" << frontRings.back()->position().z();
91 if (!backDets.empty()) {
93 backRings.push_back(
new MuDetRing(backDets));
94 LogTrace(metname) <<
"New back ring with " << backDets.size()
95 <<
" chambers at z=" << backRings.back()->position().z();
102 if (!backRings.empty() && !frontRings.empty())
106 if (result !=
nullptr) {
107 LogTrace(metname) <<
"New MuRingForwardLayer with " << frontRings.size() <<
" and " << backRings.size()
108 <<
" rings, at Z " << result->position().z() <<
" R1: " << result->specificSurface().innerRadius()
109 <<
" R2: " << result->specificSurface().outerRadius();
118 if (chamber % 2 == 0)
125 const std::string metname =
"Muon|RecoMuon|RecoMuonDetLayers|MuonGEMDetLayerGeometryBuilder";
129 LogTrace(metname) <<
"New MuDetRing with " << geomDets.size() <<
" chambers at z=" << result->position().z()
130 <<
" R1: " << result->specificSurface().innerRadius()
131 <<
" R2: " << result->specificSurface().outerRadius();
ExtractPhi< GeomDet, float > DetPhi
const std::string metname
Geom::Phi< T > phi() const
static int32_t maxStationId
const Surface::PositionType & position() const
The position (origin of the R.F.)
static int32_t maxChamberId
static bool isFront(const GEMDetId &gemId)
virtual ~MuonGEMDetLayerGeometryBuilder()
Destructor.
static int32_t maxLayerId
void precomputed_value_sort(RandomAccessIterator begin, RandomAccessIterator end, const Extractor &extr, const Compare &comp)
const GeomDet * idToDet(DetId) const override
static int32_t minStationId
static int32_t minLayerId
static char chambers[264][20]
static int32_t minChamberId
static MuDetRing * makeDetRing(std::vector< const GeomDet * > &geomDets)
static std::pair< std::vector< DetLayer * >, std::vector< DetLayer * > > buildEndcapLayers(const GEMGeometry &geo)
static MuRingForwardDoubleLayer * buildLayer(int endcap, std::vector< int > &rings, int station, int layer, std::vector< int > &chambers, std::vector< int > &rolls, const GEMGeometry &geo)