23 return StatusCode::SUCCESS;
39 for(
int i_station=0; i_station<6; i_station++) {
48 for(
int i_sector=0; i_sector<
N_SECTOR; i_sector++) {
51 if( sector==99 )
continue;
53 float zMin {0}, zMax {0}, rMin {0}, rMax {0};
54 float tmp_zMin {0}, tmp_zMax {0}, tmp_rMin {0}, tmp_rMax {0};
56 int ty1 {-1}, ty2 {-1};
59 for(
unsigned int sta_iter=0; sta_iter< muonRoad.
stationList.size(); sta_iter++){
62 int stationPhi = m_idHelperSvc->mdtIdHelper().stationPhi(
id);
63 std::string
name = m_idHelperSvc->mdtIdHelper().stationNameString(m_idHelperSvc->mdtIdHelper().stationName(
id));
64 int chamber_this = 99;
67 find_station_sector(
name, stationPhi, isEndcap, chamber_this, sector_this);
69 if(chamber_this ==
chamber && sector_this == sector ){
71 if(ty1 == -1) ty1 = m_idHelperSvc->mdtIdHelper().stationNameIndex(
name)+1;
72 else if(ty2 == -1) ty2 = m_idHelperSvc->mdtIdHelper().stationNameIndex(
name)+1;
79 tmp_zMin = (trans*OrigOfMdtInAmdbFrame).
z();
80 if(tmp_zMin < 0)
sign = -1;
81 else if(tmp_zMin > 0)
sign = 1;
82 tmp_zMax = tmp_zMin +
sign*muonStation->
Zsize();
83 if(zMin==0 || tmp_zMin < zMin) zMin = tmp_zMin;
84 if(zMax==0 || tmp_zMax > zMax) zMax = tmp_zMax;
86 tmp_rMin = (trans*OrigOfMdtInAmdbFrame).
perp();
87 tmp_rMax = tmp_rMin + muonStation->
Rsize();
88 if(rMin==0 || tmp_rMin < rMin) rMin = tmp_rMin;
89 if(rMax==0 || tmp_rMax > rMax) rMax = tmp_rMax;
108 ATH_MSG_DEBUG(
"...zMin/zMax/ty1/ty2=" << zMin <<
"/" << zMax <<
"/" << ty1 <<
"/" << ty2);
111 find_eta_min_max(zMin, rMin, zMax, rMax,
etaMin,
etaMax);
112 find_phi_min_max(muonRoad.
phiRoI, phiMin, phiMax);
124 for(
int i_type=0; i_type<2; i_type++) {
125 int type = (i_type==0) ? ty1 : ty2;
126 if(
type == -1 )
continue;
132 double phi = (m_use_rpc && rpcFitResult.
isSuccess) ? rpcFitResult.
phi : p_roids->
phi();
133 for (
int i=0;
i<6;
i++){
135 if (
i==4) muonRoad.
phi[9][j] = phi;
136 else if (
i==5) muonRoad.
phi[10][j] = phi;
137 else muonRoad.
phi[
i][j] = phi;
141 return StatusCode::SUCCESS;
166 for(
int i_station=0; i_station<7; i_station++) {
175 for(
int i_sector=0; i_sector<2; i_sector++) {
176 int sector = sectors[i_sector];
178 if( sector==99 )
continue;
201 for(
unsigned int sta_iter=0; sta_iter<muonRoad.
stationList.size(); sta_iter++){
203 int stationPhi = m_idHelperSvc->mdtIdHelper().stationPhi(
id);
204 std::string
name = m_idHelperSvc->mdtIdHelper().stationNameString(m_idHelperSvc->mdtIdHelper().stationName(
id));
205 int chamber_this = 99;
206 int sector_this = 99;
208 find_station_sector(
name, stationPhi, isEndcap, chamber_this, sector_this);
209 ATH_MSG_DEBUG(
"name/stationPhi/isEndcap/chamber_this/sector_this=" <<
210 name <<
"/" << stationPhi <<
"/" << isEndcap <<
"/" << chamber_this <<
"/" << sector_this);
212 if(chamber_this ==
chamber && sector_this == sector){
214 ty1 = m_idHelperSvc->mdtIdHelper().stationNameIndex(
name)+1;
216 ty2 = m_idHelperSvc->mdtIdHelper().stationNameIndex(
name)+1;
227 tmp_zMin = (trans*OrigOfMdtInAmdbFrame).
z();
228 if(tmp_zMin < 0)
sign = -1;
229 else if(tmp_zMin > 0)
sign = 1;
230 tmp_zMax = tmp_zMin +
sign*muonStation->
Zsize();
232 if(sta_zMin==0 || tmp_zMin<sta_zMin) sta_zMin = tmp_zMin;
233 if(sta_zMin==0 || tmp_zMax<sta_zMin) sta_zMin = tmp_zMax;
234 if(sta_zMax==0 || tmp_zMax>sta_zMax) sta_zMax = tmp_zMax;
235 if(sta_zMax==0 || tmp_zMin>sta_zMax) sta_zMax = tmp_zMin;
237 if (chamber_this==barrel_inner){
238 tmp_rMin = (trans*OrigOfMdtInAmdbFrame).
perp()/
scale;
239 tmp_rMax = tmp_rMin+muonStation->
Rsize()/
scale;
240 if(rMin==0 || tmp_rMin < rMin)rMin = tmp_rMin;
241 if(rMax==0 || tmp_rMax > rMax)rMax = tmp_rMax;
244 if (chamber_this==bee){
245 tmp_rMin = (trans*OrigOfMdtInAmdbFrame).
perp()/
scale;
246 tmp_rMax = tmp_rMin+muonStation->
Rsize()/
scale;
247 if(rMin==0 || tmp_rMin < rMin)rMin = tmp_rMin;
248 if(rMax==0 || tmp_rMax > rMax)rMax = tmp_rMax;
258 zMin = tgcFitResult.
tgcMid1[3];
259 zMax = tgcFitResult.
tgcMid2[3];
261 zMin = tgcFitResult.
tgcMid2[3];
262 zMax = tgcFitResult.
tgcMid1[3];
272 float max_road = 50 ;
273 find_barrel_road_dim(max_road,
292 ATH_MSG_DEBUG(
"...zMin/zMax/ty1/ty2=" << zMin <<
"/" << zMax <<
"/" << types[0] <<
"/" << types[1]);
295 find_eta_min_max(zMin, rMin, zMax, rMax,
etaMin,
etaMax);
297 find_phi_min_max(muonRoad.
phiRoI, phiMin, phiMax);
309 for(
int i_type=0; i_type<2; i_type++) {
310 int type = types[i_type];
311 if(
type == -1 )
continue;
317 StatusCode sc = computePhi(p_roids, tgcFitResult, mdtRegion, muonRoad);
318 if (
sc.isFailure()) {
323 return StatusCode::SUCCESS;
332 endcap = (
name[0]==
'E' ||
name[0]==
'F' || (
name[0]==
'B' &&
name[1]==
'E')) ? true :
false;
335 if(
name[2]==
'S' ||
name[2]==
'F' ||
name[2]==
'G') largeSmall = 1;
336 if (
name[1]==
'E' &&
name[2]==
'E') largeSmall=1;
337 sector = (phi-1)*2 + largeSmall;
368 phiMin = phiMiddle - 0.1;
369 phiMax = phiMiddle + 0.1;
370 if ( phiMin < -1.*
M_PI ) phiMin += 2.*
M_PI;
371 if ( phiMax > 1.*
M_PI ) phiMax -= 2.*
M_PI;
382 if(rMin > 0 && rMax > 0){
383 std::array<float,4> eta{};
386 theta = (std::abs(zMin)>0.1)?
std::atan(rMin/std::abs(zMin)):
M_PI/2.;
389 theta = (std::abs(zMax)>0.1)?
std::atan(rMin/std::abs(zMax)):
M_PI/2.;
392 theta = (std::abs(zMax)>0.1)?
std::atan(rMax/std::abs(zMax)):
M_PI/2.;
395 theta = (std::abs(zMin)>0.1)?
std::atan(rMax/std::abs(zMin)):
M_PI/2.;
413 const float rMin,
const float rMax,
float& zMin,
float& zMax)
const
426 dz = max_road*std::sqrt(1.+ia*ia);
427 z1 = (ia)? (rMin-bw)*ia : bw;
428 z2 = (ia)? (rMax-bw)*ia : bw;
430 zMin =
std::min({z1-dz, z1+dz, z2-dz, z2+dz});
431 zMax =
std::max({z1-dz, z1+dz, z2-dz, z2+dz});
438 const float zMax,
float& rMin,
float& rMax)
const
444 if(zMin>=99999. && zMax<=-99999.){
452 rMin =
std::min({r1-road, r1+road, r2-road, r2+road});
453 rMax =
std::max({r1-road, r1+road, r2-road, r2+road});
455 if(rMin<0.) rMin = 0.;
456 if(rMax<0.) rMax = 0.;
464 const double PHI_BOUNDARY = 0.2;
468 for (iHit = 0; iHit < tgcHits.size(); iHit++)
481 double phi = hit.
phi;
482 if( phi < 0 && ( (
M_PI+phi)<PHI_BOUNDARY) ) phi +=
M_PI*2;
483 if ( hit.
sta < 3 ) { m_tgcStripMidPoints.push_back(
TgcFit::Point(iHit + 1, hit.
sta, hit.
z, phi,
w)); }
484 else if ( hit.
sta ==3 ) { m_tgcStripInnPoints.push_back(
TgcFit::Point(iHit + 1, hit.
sta, hit.
z, phi,
w)); }
489 else if ( hit.
sta ==3 ) { m_tgcWireInnPoints.push_back(
TgcFit::Point(iHit + 1, hit.
sta, hit.
z, hit.
r,
w)); }
493 return StatusCode::SUCCESS;
510 for(
int i_station=0; i_station<5; i_station++) {
517 for(
int i_sector=0; i_sector<2; i_sector++) {
530 double MiddleZ = std::abs(mdtRegion.
zMin[endcap_middle][i_sector] + mdtRegion.
zMax[endcap_middle][i_sector])/2.;
531 double MiddleR = MiddleZ*muonRoad.
aw[endcap_middle][i_sector] + muonRoad.
bw[endcap_middle][i_sector];
533 double OuterZ = std::abs(mdtRegion.
zMin[endcap_outer][i_sector] + mdtRegion.
zMax[endcap_outer][i_sector])/2.;
534 double OuterR = OuterZ*muonRoad.
aw[endcap_outer][i_sector] + muonRoad.
bw[endcap_outer][i_sector];
535 double DrOuter = std::abs(OuterR-MiddleR);
536 dz = std::sqrt((OuterZ-MiddleZ)*(OuterZ-MiddleZ) + DrOuter*DrOuter);
537 dz = (OuterZ-MiddleZ);
544 if(tgcFitResult.
tgcInn[2] != 0.) {
548 double InnerZ = std::abs(mdtRegion.
zMin[endcap_inner][i_sector] + mdtRegion.
zMax[endcap_inner][i_sector])/2.;
549 double InnerR = InnerZ*muonRoad.
aw[endcap_inner][i_sector] + muonRoad.
bw[endcap_inner][i_sector];
550 double DrInner = std::abs(InnerR-MiddleR);
551 dz = -std::sqrt((InnerZ-MiddleZ)*(InnerZ-MiddleZ) + DrInner*DrInner);
552 dz = -std::abs(InnerZ-MiddleZ);
565 return StatusCode::SUCCESS;