54 return StatusCode::SUCCESS;
58 EventIDRange rangeTrt;
61 if (not trtDetEleHandle.
isValid()) {
63 return StatusCode::FAILURE;
71 InDet::TRT_DetElementsLayerVectors_xk layerVectors(3);
73 if (not trtDetEleHandle.
range(rangeTrt)) {
74 ATH_MSG_FATAL(
"Failed to retrieve validity range for " << trtDetEleHandle.
key());
75 return StatusCode::FAILURE;
79 double P[33], Wf = 0.,Wz = 0.;
92 mrmin[N] = 100000.; mrmax[N] =-100000.;
93 mzmin[N] = 100000.; mzmax[N] =-100000.;
95 std::vector<const InDetDD::TRT_BaseElement*> pE;
98 for(
int ring = 0; ring!=Rings; ++ring) {
102 for(
int nsl=0; nsl!=NSlayers; ++nsl) {
105 double rmin = 100000., rmax =-100000.;
106 double zmin = 100000., zmax =-100000.;
110 for(
int f=0; f!=NPhi; ++f) {
111 pE.push_back(trtDetEleHandle->getBarrelDetElement(0,ring,f,nsl));
112 pE.push_back(trtDetEleHandle->getBarrelDetElement(1,ring,f,nsl));
122 Wf = sqrt(
P[20] *
P[20] +
P[21] *
P[21]);
123 Wz = sqrt(
P[22] *
P[22] +
P[23] *
P[23]);
126 if (
P[10] > mrmax[N])
128 if (
P[11] < mzmin[N])
130 if (
P[12] > mzmax[N])
142 double df1 = std::abs(
P[13] -
P[2]);
144 df1 = std::abs(df1 - pi2);
145 double df2 = std::abs(
P[14] -
P[2]);
147 df2 = std::abs(df2 - pi2);
155 double r =(rmax+rmin)*.5;
156 double dr =(rmax-rmin)*.5;
157 double z =(zmax+zmin)*.5;
158 double dz =(zmax-zmin)*.5;
159 layer.set(
r,dr,
z,dz,dfm,Wf,Wz);
160 (layerVectors.at(N)).push_back(std::move(layer));
171 for(N=0; N<3; N+=2) {
173 mrmin[N] = 100000.; mrmax[N] =-100000.;
174 mzmin[N] = 100000.; mzmax[N] =-100000.;
176 int side = 0;
if(N==2) side = 1;
177 for(
int wh = 0; wh!=Wheels; ++wh) {
180 for(
int s = 0; s!=ns; ++s) {
183 double rmin = 100000., rmax =-100000.;
184 double zmin = 100000., zmax =-100000.;
188 for(
int f=0; f!=NPhi; ++f) {
189 pE.push_back(trtDetEleHandle->getEndcapDetElement(side,wh,s,f));
198 Wf = sqrt(
P[20]*
P[20]+
P[21]*
P[21]);
199 Wz = sqrt(
P[22]*
P[22]+
P[23]*
P[23]);
201 if(
P[ 9] < mrmin[N] ) mrmin[N] =
P[ 9];
202 if(
P[10] > mrmax[N] ) mrmax[N] =
P[10];
203 if(
P[11] < mzmin[N] ) mzmin[N] =
P[11];
204 if(
P[12] > mzmax[N] ) mzmax[N] =
P[12];
206 if(
P[ 9] < rmin ) rmin =
P[ 9];
207 if(
P[10] > rmax ) rmax =
P[10];
208 if(
P[11] < zmin ) zmin =
P[11];
209 if(
P[12] > zmax ) zmax =
P[12];
211 double df1 = std::abs(
P[13]-
P[2]);
if(df1>
pi) df1 = std::abs(df1-pi2);
212 double df2 = std::abs(
P[14]-
P[2]);
if(df2>
pi) df2 = std::abs(df2-pi2);
213 if(df1>dfm) dfm = df1;
214 if(df2>dfm) dfm = df2;
219 double r =(rmax+rmin)*.5;
220 double dr =(rmax-rmin)*.5;
221 double z =(zmax+zmin)*.5;
222 double dz =(zmax-zmin)*.5;
223 layer.set(
r,dr,
z,dz,dfm,Wf,Wz);
224 (layerVectors.at(N)).push_back(std::move(layer));
230 double zmi = +100000.;
231 double zma = -100000.;
232 double rma = -100000.;
233 double rmi = +100000.;
234 for(
int i=0; i!=3; ++i) {
235 if(!layerVectors[i].
empty()) {
236 if(mzmin[i]<zmi) zmi=mzmin[i];
237 if(mzmax[i]>zma) zma=mzmax[i];
238 if(mrmax[i]>rma) rma=mrmax[i];
239 if(mrmin[i]<rmi) rmi=mrmin[i];
243 double hz = std::abs(zma);
244 if(hz<std::abs(zmi)) hz = std::abs(zmi);
247 std::unique_ptr<InDet::TRT_DetElementsRoadData_xk> writeCdo{std::make_unique<InDet::TRT_DetElementsRoadData_xk>()};
248 writeCdo->setTRTLayerVectors(std::move(layerVectors));
249 writeCdo->setBounds(CB,rmi);
251 if (writeHandle.
record(rangeTrt, std::move(writeCdo)).isFailure()) {
253 <<
" with EventRange " << rangeTrt
254 <<
" into Conditions Store");
255 return StatusCode::FAILURE;
257 ATH_MSG_DEBUG(
"recorded new CDO " << writeHandle.
key() <<
" with range " << rangeTrt <<
" into Conditions Store");
259 return StatusCode::SUCCESS;