ATLAS Offline Software
TRT_DetElementsRoadCondAlg_xk.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
8 
16 #include <memory>
17 
18 
20 // Constructor
22 
24  : ::AthReentrantAlgorithm(name, pSvcLocator)
25 {
26 }
27 
29 // Initialisation
31 
33 {
34 
36  ATH_CHECK(m_writeKey.initialize());
37 
38  return StatusCode::SUCCESS;
39 }
40 
42 // Map of detector elements production
43 // Taken from InDet::TRT_DetElementsRoadMaker_xk::mapDetectorElementsProduction()
45 
47 {
48 
49  const double pi2=2.*M_PI, pi=M_PI;
50 
52  if (writeHandle.isValid()) {
53  ATH_MSG_DEBUG("CondHandle " << writeHandle.fullKey() << " is already valid.");
54  return StatusCode::SUCCESS;
55  }
56 
57 
58  EventIDRange rangeTrt;
59 
61  if (not trtDetEleHandle.isValid()) {
62  ATH_MSG_FATAL(m_trtDetEleContKey.fullKey() << " is not available.");
63  return StatusCode::FAILURE;
64  }
65 
66  const InDetDD::TRT_Numerology* trtNum = trtDetEleHandle->getTRTNumerology();
67  if (trtNum==nullptr){
68  ATH_MSG_FATAL("Pointer to TRT_Numerology not found in condition store" << m_trtDetEleContKey.fullKey());
69  }
70 
72 
73  if (not trtDetEleHandle.range(rangeTrt)) {
74  ATH_MSG_FATAL("Failed to retrieve validity range for " << trtDetEleHandle.key());
75  return StatusCode::FAILURE;
76  }
77 
78 
79  double P[33], Wf = 0.,Wz = 0.;
80  double mzmin [3] ; // min Z coordinate
81  double mzmax [3] ; // max Z coordinate
82  double mrmin [3] ; // min radius
83  double mrmax [3] ; // max radius
84 
85  // Barrel
86  //
87  int N = 1;
88 
89  int Rings = trtNum->getNBarrelRings();
90  int NPhi = trtNum->getNBarrelPhi();
91 
92  mrmin[N] = 100000.; mrmax[N] =-100000.;
93  mzmin[N] = 100000.; mzmax[N] =-100000.;
94 
95  std::vector<const InDetDD::TRT_BaseElement*> pE;
96  pE.reserve(NPhi*2);
97 
98  for(int ring = 0; ring!=Rings; ++ring) {
99 
100  int NSlayers = trtNum->getNBarrelLayers(ring);
101 
102  for(int nsl=0; nsl!=NSlayers; ++nsl) {
103 
105  double rmin = 100000., rmax =-100000.;
106  double zmin = 100000., zmax =-100000.;
107  double dfm = 0.;
108 
109  pE.clear(); // RESET PE
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));
113  }
114 
115  std::sort(pE.begin(),pE.end(),InDet::compTRTDetElements_AZ());
116  for(auto & j : pE) {
117 
118  if (j) {
119 
121  P);
122  Wf = sqrt(P[20] * P[20] + P[21] * P[21]);
123  Wz = sqrt(P[22] * P[22] + P[23] * P[23]);
124  if (P[9] < mrmin[N])
125  mrmin[N] = P[9];
126  if (P[10] > mrmax[N])
127  mrmax[N] = P[10];
128  if (P[11] < mzmin[N])
129  mzmin[N] = P[11];
130  if (P[12] > mzmax[N])
131  mzmax[N] = P[12];
132 
133  if (P[9] < rmin)
134  rmin = P[9];
135  if (P[10] > rmax)
136  rmax = P[10];
137  if (P[11] < zmin)
138  zmin = P[11];
139  if (P[12] > zmax)
140  zmax = P[12];
141 
142  double df1 = std::abs(P[13] - P[2]);
143  if (df1 > pi)
144  df1 = std::abs(df1 - pi2);
145  double df2 = std::abs(P[14] - P[2]);
146  if (df2 > pi)
147  df2 = std::abs(df2 - pi2);
148  if (df1 > dfm)
149  dfm = df1;
150  if (df2 > dfm)
151  dfm = df2;
153  }
154  }
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));
161 
162  }
163  }
164 
165  // Endcaps
166  //
167  int Wheels = trtNum->getNEndcapWheels();
168  NPhi = trtNum->getNEndcapPhi();
169  if(Wheels ) {
170 
171  for(N=0; N<3; N+=2) {
172 
173  mrmin[N] = 100000.; mrmax[N] =-100000.;
174  mzmin[N] = 100000.; mzmax[N] =-100000.;
175 
176  int side = 0; if(N==2) side = 1;
177  for(int wh = 0; wh!=Wheels; ++wh) {
178 
179  int ns = trtNum->getNEndcapLayers(wh);
180  for(int s = 0; s!=ns; ++s) {
181 
183  double rmin = 100000., rmax =-100000.;
184  double zmin = 100000., zmax =-100000.;
185  double dfm = 0.;
186  pE.clear(); //Reset Pe
187 
188  for(int f=0; f!=NPhi; ++f) {
189  pE.push_back(trtDetEleHandle->getEndcapDetElement(side,wh,s,f));
190  }
191  std::sort(pE.begin(),pE.end(),InDet::compTRTDetElements_A());
192 
193  for(auto & j : pE) {
194 
195  if(j) {
196 
198  Wf = sqrt(P[20]*P[20]+P[21]*P[21]);
199  Wz = sqrt(P[22]*P[22]+P[23]*P[23]);
200 
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];
205 
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];
210 
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;
215 
217  }
218  }
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));
225  }
226  }
227  }
228  }
229 
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];
240  }
241  }
242 
243  double hz = std::abs(zma);
244  if(hz<std::abs(zmi)) hz = std::abs(zmi);
245 
246  const Trk::CylinderBounds CB(rma+20.,hz+20.);
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);
250 
251  if (writeHandle.record(rangeTrt, std::move(writeCdo)).isFailure()) {
252  ATH_MSG_FATAL("Could not record " << writeHandle.key()
253  << " with EventRange " << rangeTrt
254  << " into Conditions Store");
255  return StatusCode::FAILURE;
256  }
257  ATH_MSG_DEBUG("recorded new CDO " << writeHandle.key() << " with range " << rangeTrt << " into Conditions Store");
258 
259  return StatusCode::SUCCESS;
260 }
InDet::TRT_DetElementsRoadCondAlg_xk::TRT_DetElementsRoadCondAlg_xk
TRT_DetElementsRoadCondAlg_xk(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TRT_DetElementsRoadCondAlg_xk.cxx:23
TRT_DetElementsLayer_xk.h
beamspotman.r
def r
Definition: beamspotman.py:676
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
InDet::TRT_DetElementsRoadCondAlg_xk::m_trtDetEleContKey
SG::ReadCondHandleKey< InDetDD::TRT_DetElementContainer > m_trtDetEleContKey
Definition: TRT_DetElementsRoadCondAlg_xk.h:52
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
PixelAthClusterMonAlgCfg.zmin
zmin
Definition: PixelAthClusterMonAlgCfg.py:176
python.PhysicalConstants.pi2
float pi2
Definition: PhysicalConstants.py:52
M_PI
#define M_PI
Definition: ActiveFraction.h:11
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:206
JetTiledMap::N
@ N
Definition: TiledEtaPhiMap.h:44
python.TurnDataReader.dr
dr
Definition: TurnDataReader.py:112
SG::ReadCondHandle::range
bool range(EventIDRange &r)
Definition: ReadCondHandle.h:224
InDet::TRT_DetElementsLayerVectors_xk
std::vector< std::vector< InDet::TRT_DetElementsLayer_xk > > TRT_DetElementsLayerVectors_xk
Definition: TRT_DetElementsLayerVectors_xk.h:16
empty
bool empty(TH1 *h)
Definition: computils.cxx:294
pi
#define pi
Definition: TileMuonFitter.cxx:65
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:83
TRT::Hit::side
@ side
Definition: HitInfo.h:83
InDet::TRT_DetElementsRoadCondAlg_xk::execute
virtual StatusCode execute(const EventContext &ctx) const override
Definition: TRT_DetElementsRoadCondAlg_xk.cxx:46
InDetDD::TRT_Numerology::getNEndcapWheels
unsigned int getNEndcapWheels() const
TRT_EndcapElement.h
InDetDD::TRT_Numerology
Definition: TRT_Numerology.h:22
TRT_DetElementsComparison.h
lumiFormat.i
int i
Definition: lumiFormat.py:92
z
#define z
InDet::TRT_DetElementsRoadCondAlg_xk::m_writeKey
SG::WriteCondHandleKey< TRT_DetElementsRoadData_xk > m_writeKey
Definition: TRT_DetElementsRoadCondAlg_xk.h:53
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TRT_DetElementsRoadCondAlg_xk.h
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Trk::CylinderBounds
Definition: CylinderBounds.h:46
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
PixelAthClusterMonAlgCfg.zmax
zmax
Definition: PixelAthClusterMonAlgCfg.py:176
parseDir.wh
wh
Definition: parseDir.py:46
InDetDD::TRT_Numerology::getNBarrelPhi
unsigned int getNBarrelPhi() const
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
InDetDD::TRT_Numerology::getNBarrelLayers
unsigned int getNBarrelLayers(unsigned int iMod) const
TRT_DetElementsRoadUtils_xk.h
TRT_BarrelElement.h
TRT_BaseElement.h
InDetDD::TRT_DetElementContainer::getBarrelDetElement
const TRT_BarrelElement * getBarrelDetElement(unsigned int positive, unsigned int moduleIndex, unsigned int phiIndex, unsigned int strawLayerIndex) const
Definition: TRT_DetElementContainer.cxx:39
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
CylinderBounds.h
InDet::compTRTDetElements_AZ
Definition: TRT_DetElementsComparison.h:38
InDet::TRT_DetElementsRoadUtils_xk::detElementInformation
void detElementInformation(const InDetDD::TRT_BaseElement &E, double *P)
Definition: TRT_DetElementsRoadUtils_xk.cxx:48
InDetDD::TRT_DetElementContainer::getTRTNumerology
const TRT_Numerology * getTRTNumerology() const
Definition: TRT_DetElementContainer.cxx:34
InDet::TRT_DetElementsLayer_xk
Definition: TRT_DetElementsLayer_xk.h:28
TRT_Numerology.h
python.SystemOfUnits.ns
int ns
Definition: SystemOfUnits.py:130
InDetDD::TRT_Numerology::getNEndcapPhi
unsigned int getNEndcapPhi() const
InDetDD::TRT_Numerology::getNEndcapLayers
unsigned int getNEndcapLayers(unsigned int iWheel) const
InDet::compTRTDetElements_A
Definition: TRT_DetElementsComparison.h:18
InDetDD::TRT_Numerology::getNBarrelRings
unsigned int getNBarrelRings() const
fitman.hz
def hz
Definition: fitman.py:516
SG::ReadCondHandle::key
const std::string & key() const
Definition: ReadCondHandle.h:59
InDetDD::TRT_DetElementContainer::getEndcapDetElement
const TRT_EndcapElement * getEndcapDetElement(unsigned int positive, unsigned int wheelIndex, unsigned int strawLayerIndex, unsigned int phiIndex) const
Definition: TRT_DetElementContainer.cxx:62
SG::WriteCondHandle
Definition: WriteCondHandle.h:26
InDet::TRT_DetElementsRoadCondAlg_xk::initialize
virtual StatusCode initialize() override
Definition: TRT_DetElementsRoadCondAlg_xk.cxx:32