21 template <
class T,
class Scalar =
typename T::Scalar>
33 vector<DetLayer*>
result[2];
36 int iendcap = (
endcap == 1) ? 0 : 1;
44 std::vector<int> rings;
45 int FirstStationRing = 1;
46 rings.push_back(FirstStationRing);
48 rolls.push_back(roll);
53 result[iendcap].push_back(ringLayer);
59 std::vector<int> rings;
61 rings.push_back(
ring);
64 rolls.push_back(roll);
69 result[iendcap].push_back(ringLayer);
76 std::vector<int> rings;
78 rings.push_back(
ring);
81 rolls.push_back(roll);
86 result[iendcap].push_back(ringLayer);
90 pair<vector<DetLayer*>, vector<DetLayer*> > res_pair(
result[0],
result[1]);
96 const std::string metname =
"Muon|RPC|RecoMuon|RecoMuonDetLayers|MuonRPCDetLayerGeometryBuilder";
98 vector<const ForwardDetRing*> frontRings, backRings;
100 for (std::vector<int>::const_iterator
ring = rings.begin();
ring < rings.end(); ++
ring) {
101 for (vector<int>::iterator roll = rolls.begin(); roll != rolls.end(); ++roll) {
102 vector<const GeomDet*> frontDets, backDets;
106 bool isInFront = isFront(rpcId);
110 frontDets.push_back(geomDet);
112 backDets.push_back(geomDet);
114 LogTrace(
metname) <<
"get RPC Endcap roll " << rpcId << (isInFront ?
"front" :
"back ")
120 if (!frontDets.empty()) {
122 frontRings.push_back(
new MuDetRing(frontDets));
124 <<
" chambers at z=" << frontRings.back()->position().z();
126 if (!backDets.empty()) {
128 backRings.push_back(
new MuDetRing(backDets));
130 <<
" chambers at z=" << backRings.back()->position().z();
137 if (!backRings.empty() || !frontRings.empty()) {
143 LogTrace(
metname) <<
"New layer with " << frontRings.size() <<
" front rings and " << backRings.size()
144 <<
" back rings, at Z " <<
result->position().z();
151 const std::string metname =
"Muon|RPC|RecoMuon|RecoMuonDetLayers|MuonRPCDetLayerGeometryBuilder";
153 vector<DetLayer*> detlayers;
154 vector<MuRodBarrelLayer*>
result;
158 vector<const GeomDet*> geomDets;
167 geomDets.push_back(geomDet);
177 makeBarrelLayers(geomDets,
result);
180 for (vector<MuRodBarrelLayer*>::const_iterator it =
result.begin(); it !=
result.end(); it++)
181 detlayers.push_back((
DetLayer*)(*it));
187 vector<MuRodBarrelLayer*>&
result) {
188 const std::string metname =
"Muon|RPC|RecoMuon|RecoMuonDetLayers|MuonRPCDetLayerGeometryBuilder";
195 float r0 =
float(geomDets.front()->position().perp());
201 vector<const GeomDet*>::iterator
first = geomDets.begin();
202 vector<const GeomDet*>::iterator
last = geomDets.end();
204 for (vector<const GeomDet*>::iterator
i =
first;
i !=
last;
i++) {
205 hisR.fill(
float((*i)->position().perp()) - r0);
208 vector<float> rClust = hisR.clusterize(
resolution);
212 vector<const GeomDet*>::iterator layerStart =
first;
213 vector<const GeomDet*>::iterator separ =
first;
215 for (
unsigned int i = 0;
i < rClust.size();
i++) {
217 if (
i < rClust.size() - 1) {
218 rSepar = (rClust[
i] + rClust[
i + 1]) / 2.
f;
225 while (separ <
last &&
float((*separ)->position().perp()) - r0 < rSepar) {
230 if (
int(separ - layerStart) > 0) {
232 vector<const DetRod*> rods;
233 vector<const GeomDet*> layerDets(layerStart, separ);
234 makeBarrelRods(layerDets, rods);
238 LogTrace(
metname) <<
" New MuRodBarrelLayer with " << rods.size() <<
" rods, at R "
239 <<
result.back()->specificSurface().radius();
247 const std::string metname =
"Muon|RPC|RecoMuon|RecoMuonDetLayers|MuonRPCDetLayerGeometryBuilder";
254 float phi0 =
float(geomDets.front()->position().phi());
260 vector<const GeomDet*>::iterator
first = geomDets.begin();
261 vector<const GeomDet*>::iterator
last = geomDets.end();
263 for (vector<const GeomDet*>::iterator
i =
first;
i !=
last;
i++) {
264 hisPhi.fill(
float((*i)->position().phi()) - phi0);
267 vector<float> phiClust = hisPhi.clusterize(
resolution);
271 vector<const GeomDet*>::iterator rodStart =
first;
272 vector<const GeomDet*>::iterator separ =
first;
274 for (
unsigned int i = 0;
i < phiClust.size();
i++) {
276 if (
i < phiClust.size() - 1) {
277 phiSepar = (phiClust[
i] + phiClust[
i + 1]) / 2.
f;
284 while (separ <
last &&
float((*separ)->position().phi()) - phi0 < phiSepar) {
289 if (
int(separ - rodStart) > 0) {
292 <<
" rolls at R=" << (*rodStart)->position().perp()
293 <<
", phi=" <<
float((*rodStart)->position().phi());
319 if (rpcId.
sector() % 2 == 0)