ATLAS Offline Software
Loading...
Searching...
No Matches
ALFA_LocRecCorr.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "ALFA_LocRecCorr.h"
7
10
11using namespace std;
12
13
14ALFA_LocRecCorr::ALFA_LocRecCorr(const string& name, ISvcLocator* pSvcLocator) :
15AthAlgorithm(name, pSvcLocator)
16{
17 //MsgStream LogStream(Athena::getMessageSvc(), "ALFA_LocRecCorr::ALFA_LocRecCorr");
18 ATH_MSG_DEBUG("begin ALFA_LocRecCorr::ALFA_LocRecCorr");
19
20 m_pGeometryReader = nullptr;
21
22// m_Config.eOwner=EOT_RECO;
23 m_Config.clear();
24
25 //begin of Geometry properties
26 declareProperty("MetrologyType",m_Config.eRPMetrologyGeoType=EMT_NOMINAL);//EGST_FILE
27 declareProperty("MetrologySource",m_Config.strRPMetrologyConnString=string(""));//"rpmetrology.dat"
28 declareProperty("ShiftToX97Pos",m_Config.bShiftToX97Pos=false);
29
30 declareProperty("B7L1U_PosType",m_Config.CfgRPosParams[0].eRPPosType=ERPPT_ACTIVE);
31 declareProperty("B7L1U_MDGeometryType",m_Config.CfgRPosParams[0].eMDGeoType=EGST_IDEALGEOMETRY);
32 declareProperty("B7L1U_ODGeometryType",m_Config.CfgRPosParams[0].eODGeoType=EGST_IDEALGEOMETRY);
33 declareProperty("B7L1U_MDSource",m_Config.CfgRPosParams[0].strMDConnString=string(""));
34 declareProperty("B7L1U_ODSource",m_Config.CfgRPosParams[0].strODConnString=string(""));
35 declareProperty("B7L1U_CurrentLVDT",m_Config.CfgRPosParams[0].fCurrentLVDTmm=7.0*CLHEP::mm);
36
37 declareProperty("B7L1L_PosType",m_Config.CfgRPosParams[1].eRPPosType=ERPPT_ACTIVE);
38 declareProperty("B7L1L_MDGeometryType",m_Config.CfgRPosParams[1].eMDGeoType=EGST_IDEALGEOMETRY);
39 declareProperty("B7L1L_ODGeometryType",m_Config.CfgRPosParams[1].eODGeoType=EGST_IDEALGEOMETRY);
40 declareProperty("B7L1L_MDSource",m_Config.CfgRPosParams[1].strMDConnString=string(""));
41 declareProperty("B7L1L_ODSource",m_Config.CfgRPosParams[1].strODConnString=string(""));
42 declareProperty("B7L1L_CurrentLVDT",m_Config.CfgRPosParams[1].fCurrentLVDTmm=7.0*CLHEP::mm);
43
44 declareProperty("A7L1U_PosType",m_Config.CfgRPosParams[2].eRPPosType=ERPPT_ACTIVE);
45 declareProperty("A7L1U_MDGeometryType",m_Config.CfgRPosParams[2].eMDGeoType=EGST_IDEALGEOMETRY);
46 declareProperty("A7L1U_ODGeometryType",m_Config.CfgRPosParams[2].eODGeoType=EGST_IDEALGEOMETRY);
47 declareProperty("A7L1U_MDSource",m_Config.CfgRPosParams[2].strMDConnString=string(string("")));
48 declareProperty("A7L1U_ODSource",m_Config.CfgRPosParams[2].strODConnString=string(string("")));
49 declareProperty("A7L1U_CurrentLVDT",m_Config.CfgRPosParams[2].fCurrentLVDTmm=7.0*CLHEP::mm);
50
51 declareProperty("A7L1L_PosType",m_Config.CfgRPosParams[3].eRPPosType=ERPPT_ACTIVE);
52 declareProperty("A7L1L_MDGeometryType",m_Config.CfgRPosParams[3].eMDGeoType=EGST_IDEALGEOMETRY);
53 declareProperty("A7L1L_ODGeometryType",m_Config.CfgRPosParams[3].eODGeoType=EGST_IDEALGEOMETRY);
54 declareProperty("A7L1L_MDSource",m_Config.CfgRPosParams[3].strMDConnString=string(""));
55 declareProperty("A7L1L_ODSource",m_Config.CfgRPosParams[3].strODConnString=string(""));
56 declareProperty("A7L1L_CurrentLVDT",m_Config.CfgRPosParams[3].fCurrentLVDTmm=7.0*CLHEP::mm);
57
58 declareProperty("A7R1U_PosType",m_Config.CfgRPosParams[4].eRPPosType=ERPPT_ACTIVE);
59 declareProperty("A7R1U_MDGeometryType",m_Config.CfgRPosParams[4].eMDGeoType=EGST_IDEALGEOMETRY);
60 declareProperty("A7R1U_ODGeometryType",m_Config.CfgRPosParams[4].eODGeoType=EGST_IDEALGEOMETRY);
61 declareProperty("A7R1U_MDSource",m_Config.CfgRPosParams[4].strMDConnString=string(""));
62 declareProperty("A7R1U_ODSource",m_Config.CfgRPosParams[4].strODConnString=string(""));
63 declareProperty("A7R1U_CurrentLVDT",m_Config.CfgRPosParams[4].fCurrentLVDTmm=7.0*CLHEP::mm);
64
65 declareProperty("A7R1L_PosType",m_Config.CfgRPosParams[5].eRPPosType=ERPPT_ACTIVE);
66 declareProperty("A7R1L_MDGeometryType",m_Config.CfgRPosParams[5].eMDGeoType=EGST_IDEALGEOMETRY);
67 declareProperty("A7R1L_ODGeometryType",m_Config.CfgRPosParams[5].eODGeoType=EGST_IDEALGEOMETRY);
68 declareProperty("A7R1L_MDSource",m_Config.CfgRPosParams[5].strMDConnString=string(""));
69 declareProperty("A7R1L_ODSource",m_Config.CfgRPosParams[5].strODConnString=string(""));
70 declareProperty("A7R1L_CurrentLVDT",m_Config.CfgRPosParams[5].fCurrentLVDTmm=7.0*CLHEP::mm);
71
72 declareProperty("B7R1U_PosType",m_Config.CfgRPosParams[6].eRPPosType=ERPPT_ACTIVE);
73 declareProperty("B7R1U_MDGeometryType",m_Config.CfgRPosParams[6].eMDGeoType=EGST_IDEALGEOMETRY);
74 declareProperty("B7R1U_ODGeometryType",m_Config.CfgRPosParams[6].eODGeoType=EGST_IDEALGEOMETRY);
75 declareProperty("B7R1U_MDSource",m_Config.CfgRPosParams[6].strMDConnString=string(""));
76 declareProperty("B7R1U_ODSource",m_Config.CfgRPosParams[6].strODConnString=string(""));
77 declareProperty("B7R1U_CurrentLVDT",m_Config.CfgRPosParams[6].fCurrentLVDTmm=7.0*CLHEP::mm);
78
79 declareProperty("B7R1L_PosType",m_Config.CfgRPosParams[7].eRPPosType=ERPPT_ACTIVE);
80 declareProperty("B7R1L_MDGeometryType",m_Config.CfgRPosParams[7].eMDGeoType=EGST_IDEALGEOMETRY);
81 declareProperty("B7R1L_ODGeometryType",m_Config.CfgRPosParams[7].eODGeoType=EGST_IDEALGEOMETRY);
82 declareProperty("B7R1L_MDSource",m_Config.CfgRPosParams[7].strMDConnString=string(""));
83 declareProperty("B7R1L_ODSource",m_Config.CfgRPosParams[7].strODConnString=string(""));
84 declareProperty("B7R1L_CurrentLVDT",m_Config.CfgRPosParams[7].fCurrentLVDTmm=7.0*CLHEP::mm);
85 //end of Geometry properties
86
87 //for transformations
88 m_bIsTransformInStation.assign(8, false);
89 m_bIsTransformInDetector.assign(8, false);
90
99
100 m_vecTransformInDetectorB7L1U.assign(7, 0.0);
101 m_vecTransformInDetectorB7L1L.assign(7, 0.0);
102 m_vecTransformInDetectorA7L1U.assign(7, 0.0);
103 m_vecTransformInDetectorA7L1L.assign(7, 0.0);
104 m_vecTransformInDetectorB7R1U.assign(7, 0.0);
105 m_vecTransformInDetectorB7R1L.assign(7, 0.0);
106 m_vecTransformInDetectorA7R1U.assign(7, 0.0);
107 m_vecTransformInDetectorA7R1L.assign(7, 0.0);
108
109 m_vecTransformInStationB7L1U.assign(7, 0.0);
110 m_vecTransformInStationB7L1L.assign(7, 0.0);
111 m_vecTransformInStationA7L1U.assign(7, 0.0);
112 m_vecTransformInStationA7L1L.assign(7, 0.0);
113 m_vecTransformInStationB7R1U.assign(7, 0.0);
114 m_vecTransformInStationB7R1L.assign(7, 0.0);
115 m_vecTransformInStationA7R1U.assign(7, 0.0);
116 m_vecTransformInStationA7R1L.assign(7, 0.0);
117
118 declareProperty("bIsTransformInStation", m_bIsTransformInStation, "status if transformation in station will be calculated");
119 declareProperty("bIsTransformInDetector", m_bIsTransformInDetector, "status if transformation in station will be calculated");
120
121 declareProperty("pointTransformInDetectorB7L1U", m_pointTransformInDetectorB7L1U, "transformation point in the detectorfor B7L1U RP");
122 declareProperty("pointTransformInDetectorB7L1L", m_pointTransformInDetectorB7L1L, "transformation point in the detectorfor B7L1L RP");
123 declareProperty("pointTransformInDetectorA7L1U", m_pointTransformInDetectorA7L1U, "transformation point in the detectorfor A7L1U RP");
124 declareProperty("pointTransformInDetectorA7L1L", m_pointTransformInDetectorA7L1L, "transformation point in the detectorfor A7L1L RP");
125 declareProperty("pointTransformInDetectorA7R1U", m_pointTransformInDetectorA7R1U, "transformation point in the detectorfor A7R1U RP");
126 declareProperty("pointTransformInDetectorA7R1L", m_pointTransformInDetectorA7R1L, "transformation point in the detectorfor A7R1L RP");
127 declareProperty("pointTransformInDetectorB7R1U", m_pointTransformInDetectorB7R1U, "transformation point in the detectorfor B7R1U RP");
128 declareProperty("pointTransformInDetectorB7R1L", m_pointTransformInDetectorB7R1L, "transformation point in the detectorfor B7R1L RP");
129
130 declareProperty("vecTransformInDetectorB7L1U", m_vecTransformInDetectorB7L1U, "transformation data in the detectorfor B7L1U RP");
131 declareProperty("vecTransformInDetectorB7L1L", m_vecTransformInDetectorB7L1L, "transformation data in the detectorfor B7L1L RP");
132 declareProperty("vecTransformInDetectorA7L1U", m_vecTransformInDetectorA7L1U, "transformation data in the detectorfor A7L1U RP");
133 declareProperty("vecTransformInDetectorA7L1L", m_vecTransformInDetectorA7L1L, "transformation data in the detectorfor A7L1L RP");
134 declareProperty("vecTransformInDetectorA7R1U", m_vecTransformInDetectorA7R1U, "transformation data in the detectorfor A7R1U RP");
135 declareProperty("vecTransformInDetectorA7R1L", m_vecTransformInDetectorA7R1L, "transformation data in the detectorfor A7R1L RP");
136 declareProperty("vecTransformInDetectorB7R1U", m_vecTransformInDetectorB7R1U, "transformation data in the detectorfor B7R1U RP");
137 declareProperty("vecTransformInDetectorB7R1L", m_vecTransformInDetectorB7R1L, "transformation data in the detectorfor B7R1L RP");
138
139 declareProperty("vecTransformInStationB7L1U", m_vecTransformInStationB7L1U, "transformation data in the stationfor B7L1U RP");
140 declareProperty("vecTransformInStationB7L1L", m_vecTransformInStationB7L1L, "transformation data in the stationfor B7L1L RP");
141 declareProperty("vecTransformInStationA7L1U", m_vecTransformInStationA7L1U, "transformation data in the stationfor A7L1U RP");
142 declareProperty("vecTransformInStationA7L1L", m_vecTransformInStationA7L1L, "transformation data in the stationfor A7L1L RP");
143 declareProperty("vecTransformInStationA7R1U", m_vecTransformInStationA7R1U, "transformation data in the stationfor A7R1U RP");
144 declareProperty("vecTransformInStationA7R1L", m_vecTransformInStationA7R1L, "transformation data in the stationfor A7R1L RP");
145 declareProperty("vecTransformInStationB7R1U", m_vecTransformInStationB7R1U, "transformation data in the stationfor B7R1U RP");
146 declareProperty("vecTransformInStationB7R1L", m_vecTransformInStationB7R1L, "transformation data in the stationfor B7R1L RP");
147
148 m_ListExistingRPots.clear();
149
150 // data type using in the local reconstruction
151 // for the simulation data the value is 0, for the real data the value is 1. Unset value is -1
152 declareProperty("DataType", m_iDataType=1, "data type using in the local reconstruction");
153
154 m_strKeyGeometryForReco = "ALFA_GeometryForReco";
155 m_strLocRecCollectionName = "ALFA_LocRecEvCollection";
156 m_strLocRecODCollectionName = "ALFA_LocRecODEvCollection";
157 m_strKeyLocRecEvCollection = "ALFA_LocRecEvCollection";
158 m_strKeyLocRecODEvCollection = "ALFA_LocRecODEvCollection";
159 m_strKeyLocRecCorrEvCollection = "ALFA_LocRecCorrEvCollection";
160 m_strKeyLocRecCorrODEvCollection = "ALFA_LocRecCorrODEvCollection";
161
162 m_bCoolData = true;
163 declareProperty("CoolData", m_bCoolData);
164
167 m_iEvt = 0;
168
169 ATH_MSG_DEBUG("end ALFA_LocRecCorr::ALFA_LocRecCorr");
170}
171
173{
174 //MsgStream LogStream(Athena::getMessageSvc(), "ALFA_LocRecCorr::~ALFA_LocRecCorr");
175 ATH_MSG_DEBUG("begin ALFA_LocRecCorr::~ALFA_LocRecCorr");
176
177 ATH_MSG_DEBUG("end ALFA_LocRecCorr::~ALFA_LocRecCorr");
178}
179
181{
182 //MsgStream LogStream(Athena::getMessageSvc(), "ALFA_LocRecCorr::Initialize()");
183 ATH_MSG_DEBUG("begin ALFA_LocRecCorr::Initialize()");
184
185 //read ALFA_Geometry from StoreGate
187 {
188 ATH_MSG_ERROR("m_pGeometryReader is not in StoreGate");
189 }
190 else ATH_MSG_DEBUG("m_pGeometryReader is in StoreGate");
191
192 if (StatusCode::SUCCESS != detStore()->retrieve(m_pGeometryReader, m_strKeyGeometryForReco))
193 {
194 ATH_MSG_ERROR("m_pGeometryReader: unable to retrieve data from SG");
195 }
196 else ATH_MSG_DEBUG("m_pGeometryReader: retrieved from SG");
197
198 if (m_Config.eRPMetrologyGeoType==EMT_SWCORRECTIONS)
199 {
200 CHECK(COOLUpdate());
201 }
202
203 if(m_Config.eRPMetrologyGeoType==EMT_NOMINAL)
205
206 // do update geometry at the end of the initialization process
208 ATH_MSG_DEBUG("Geometry updated successfully.");
209 else
210 ATH_MSG_FATAL("Unable to update a geometry!");
211
212 ATH_MSG_DEBUG("end ALFA_LocRecCorr::initialize()");
213
214 return StatusCode::SUCCESS;
215}
216
218{
219 ATH_MSG_DEBUG("begin ALFA_LocRecCorr::Execute()");
220
221 StatusCode sc = StatusCode::SUCCESS;
222
224 if (sc.isFailure())
225 {
226 ATH_MSG_ERROR("ALFA_LocRecCorr recordCollection failed");
227 return StatusCode::SUCCESS;
228 }
229
231 if (sc.isFailure())
232 {
233 ATH_MSG_ERROR("ALFA_LocRecCorr recordODCollection failed");
234 return StatusCode::SUCCESS;
235 }
236
237 int iRPot, iSide;
238 int iAlgo;
239 double fRecPosX = -9999.0, fRecPosY = -9999.0, fRecPosOD = -9999.0;
240 HepGeom::Point3D<double> PointInDetCS;
241 HepGeom::Point3D<double> PointInPotCS;
242 HepGeom::Point3D<double> PointInStatCS;
243 HepGeom::Point3D<double> PointInAtlasCS;
244
245 const ALFA_LocRecEvCollection* pLocRecCorrCol = nullptr;
246 const ALFA_LocRecODEvCollection* pLocRecCorrODCol = nullptr;
247
248 sc = evtStore()->retrieve(pLocRecCorrCol, m_strLocRecCollectionName);
249 if(sc.isFailure() || !pLocRecCorrCol)
250 {
251 ATH_MSG_ERROR("Container "<< m_strLocRecCollectionName <<" NOT FOUND !!!!!!!");
252// return StatusCode::FAILURE;
253 }
254 else
255 {
256 ALFA_LocRecEvCollection::const_iterator mcColBeg = pLocRecCorrCol->begin();
257 ALFA_LocRecEvCollection::const_iterator mcColEnd = pLocRecCorrCol->end();
258
259 //loop over collection (container) with hits (i.e. over 1 event)
260 for(; mcColBeg!=mcColEnd; ++mcColBeg)
261 {
262 iAlgo = (*mcColBeg)->getAlgoNum();
263 iRPot = (*mcColBeg)->getPotNum();
264 fRecPosX = (*mcColBeg)->getXposition();
265 fRecPosY = (*mcColBeg)->getYposition();
266
267 PointInDetCS = HepGeom::Point3D<double>(fRecPosX, fRecPosY, 10.0);
268 PointInAtlasCS = m_pGeometryReader->GetDetPointInAtlas((eRPotName)(iRPot+1), PointInDetCS);
269 PointInPotCS = m_pGeometryReader->GetDetPointInRPot((eRPotName)(iRPot+1), PointInDetCS);
270 PointInStatCS = m_TransMatrixSt[iRPot]*PointInDetCS;
271
272 m_pLocRecCorrEvCollection->push_back(new ALFA_LocRecCorrEvent(iAlgo, iRPot, PointInAtlasCS[0], PointInAtlasCS[1], PointInAtlasCS[2], PointInPotCS[0], PointInPotCS[1], PointInStatCS[0], PointInStatCS[1], -9999.0, -9999.0));
273 }
274 }
275
276 sc = evtStore()->retrieve(pLocRecCorrODCol, m_strLocRecODCollectionName);
277 if(sc.isFailure() || !pLocRecCorrODCol)
278 {
279 ATH_MSG_ERROR("Container "<< m_strLocRecODCollectionName <<" NOT FOUND !!!!!!!");
280// return StatusCode::FAILURE;
281 }
282 else
283 {
284 ALFA_LocRecODEvCollection::const_iterator mcColODBeg = pLocRecCorrODCol->begin();
285 ALFA_LocRecODEvCollection::const_iterator mcColODEnd = pLocRecCorrODCol->end();
286
287 //loop over collection (container) with hits (i.e. over 1 event)
288 Int_t iSign;
289 for(; mcColODBeg!=mcColODEnd; ++mcColODBeg)
290 {
291 iAlgo = (*mcColODBeg)->getAlgoNum();
292 iRPot = (*mcColODBeg)->getPotNum();
293 iSide = (*mcColODBeg)->getSide();
294 fRecPosOD = (*mcColODBeg)->getYposition();
295
296 iSign = (iSide==0)? -1 : 1;
297 PointInDetCS = HepGeom::Point3D<double>(iSign*22, fRecPosOD, 35.5);
298 PointInAtlasCS = m_pGeometryReader->GetDetPointInAtlas((eRPotName)(iRPot+1), PointInDetCS);
299 PointInPotCS = m_pGeometryReader->GetDetPointInRPot((eRPotName)(iRPot+1), PointInDetCS);
300 PointInStatCS = m_TransMatrixSt[iRPot]*PointInDetCS;
301 m_pLocRecCorrODEvCollection->push_back(new ALFA_LocRecCorrODEvent(iAlgo, iRPot, iSide, PointInAtlasCS[1], PointInAtlasCS[2], PointInPotCS[1], PointInStatCS[1], -9999.0));
302 }
303 }
304
305 ATH_MSG_DEBUG("end ALFA_LocRecCorr::execute()");
306 return StatusCode::SUCCESS;
307}
308
309
311{
312 //MsgStream LogStream(Athena::getMessageSvc(), "ALFA_LocRecCorr::UserTransform3DInStation(eRPotName eRPName)");
313 ATH_MSG_DEBUG("begin ALFA_LocRecCorr::UserTransform3DInStation()");
314
315 CLHEP::HepRep3x3 matRotation;
316 USERTRANSFORM structUserTransform;
317
318 switch(eRPName)
319 {
320 case ERPN_B7L1U:
321 structUserTransform.fAngle = m_vecTransformInStationB7L1U[0];
324 break;
325 case ERPN_B7L1L:
326 structUserTransform.fAngle = m_vecTransformInStationB7L1L[0];
329 break;
330 case ERPN_A7L1U:
331 structUserTransform.fAngle = m_vecTransformInStationA7L1U[0];
334 break;
335 case ERPN_A7L1L:
336 structUserTransform.fAngle = m_vecTransformInStationA7L1L[0];
339 break;
340 case ERPN_A7R1U:
341 structUserTransform.fAngle = m_vecTransformInStationA7R1U[0];
344 break;
345 case ERPN_A7R1L:
346 structUserTransform.fAngle = m_vecTransformInStationA7R1L[0];
349 break;
350 case ERPN_B7R1U:
351 structUserTransform.fAngle = m_vecTransformInStationB7R1U[0];
354 break;
355 case ERPN_B7R1L:
356 structUserTransform.fAngle = m_vecTransformInStationB7R1L[0];
359 break;
360 default:
361 ATH_MSG_WARNING("Unknown Roman pot, station transformation will be set to default (zero) values");
362 structUserTransform.fAngle = 0.0;
363 structUserTransform.vecRotation = CLHEP::Hep3Vector(0.0, 0.0, 0.0);
364 structUserTransform.vecTranslation = CLHEP::Hep3Vector(0.0, 0.0, 0.0);
365 }
366
367 double fPhi = structUserTransform.fAngle;
368
369 CLHEP::Hep3Vector vRotation = CLHEP::Hep3Vector(structUserTransform.vecRotation);
370 CLHEP::Hep3Vector vTranslation = CLHEP::Hep3Vector(structUserTransform.vecTranslation);
371
372 matRotation.xx_ = vRotation.x()*vRotation.x()*(1 - cos(fPhi)) + cos(fPhi);
373 matRotation.xy_ = vRotation.x()*vRotation.y()*(1 - cos(fPhi)) - vRotation.z()*sin(fPhi);
374 matRotation.xz_ = vRotation.x()*vRotation.z()*(1 - cos(fPhi)) + vRotation.y()*sin(fPhi);
375
376 matRotation.yx_ = vRotation.y()*vRotation.x()*(1 - cos(fPhi)) + vRotation.z()*sin(fPhi);
377 matRotation.yy_ = vRotation.y()*vRotation.y()*(1 - cos(fPhi)) + cos(fPhi);
378 matRotation.yz_ = vRotation.y()*vRotation.z()*(1 - cos(fPhi)) - vRotation.x()*sin(fPhi);
379
380 matRotation.zx_ = vRotation.z()*vRotation.x()*(1 - cos(fPhi)) - vRotation.y()*sin(fPhi);
381 matRotation.zy_ = vRotation.z()*vRotation.y()*(1 - cos(fPhi)) + vRotation.x()*sin(fPhi);
382 matRotation.zz_ = vRotation.z()*vRotation.z()*(1 - cos(fPhi)) + cos(fPhi);
383
384 ATH_MSG_DEBUG("end ALFA_LocRecCorr::UserTransform3DInStation()");
385
386 return HepGeom::Transform3D(CLHEP::HepRotation(matRotation), vTranslation);
387}
388
390{
391 //MsgStream LogStream(Athena::getMessageSvc(), "ALFA_LocRecCorr::UserTransform3DInDetector(eRPotName eRPName)");
392 ATH_MSG_DEBUG("begin ALFA_LocRecCorr::UserTransform3DInDetector()");
393
394 CLHEP::HepRep3x3 matRotation;
395 USERTRANSFORM structUserTransform;
396
397 switch(eRPName)
398 {
399 case ERPN_B7L1U:
400 structUserTransform.fAngle = m_vecTransformInDetectorB7L1U[0];
403 break;
404 case ERPN_B7L1L:
405 structUserTransform.fAngle = m_vecTransformInDetectorB7L1L[0];
408 break;
409 case ERPN_A7L1U:
410 structUserTransform.fAngle = m_vecTransformInDetectorA7L1U[0];
413 break;
414 case ERPN_A7L1L:
415 structUserTransform.fAngle = m_vecTransformInDetectorA7L1L[0];
418 break;
419 case ERPN_A7R1U:
420 structUserTransform.fAngle = m_vecTransformInDetectorA7R1U[0];
423 break;
424 case ERPN_A7R1L:
425 structUserTransform.fAngle = m_vecTransformInDetectorA7R1L[0];
428 break;
429 case ERPN_B7R1U:
430 structUserTransform.fAngle = m_vecTransformInDetectorB7R1U[0];
433 break;
434 case ERPN_B7R1L:
435 structUserTransform.fAngle = m_vecTransformInDetectorB7R1L[0];
438 break;
439 default:
440 ATH_MSG_WARNING("Unknown Roman pot, detector transformation will be set to default (zero) values");
441 structUserTransform.fAngle = 0.0;
442 structUserTransform.vecRotation = CLHEP::Hep3Vector(0.0, 0.0, 0.0);
443 structUserTransform.vecTranslation = CLHEP::Hep3Vector(0.0, 0.0, 0.0);
444 }
445
446 double fPhi = structUserTransform.fAngle;
447
448 CLHEP::Hep3Vector vRotation = CLHEP::Hep3Vector(structUserTransform.vecRotation);
449 CLHEP::Hep3Vector vTranslation = CLHEP::Hep3Vector(structUserTransform.vecTranslation);
450
451 matRotation.xx_ = vRotation.x()*vRotation.x()*(1 - cos(fPhi)) + cos(fPhi);
452 matRotation.xy_ = vRotation.x()*vRotation.y()*(1 - cos(fPhi)) - vRotation.z()*sin(fPhi);
453 matRotation.xz_ = vRotation.x()*vRotation.z()*(1 - cos(fPhi)) + vRotation.y()*sin(fPhi);
454
455 matRotation.yx_ = vRotation.y()*vRotation.x()*(1 - cos(fPhi)) + vRotation.z()*sin(fPhi);
456 matRotation.yy_ = vRotation.y()*vRotation.y()*(1 - cos(fPhi)) + cos(fPhi);
457 matRotation.yz_ = vRotation.y()*vRotation.z()*(1 - cos(fPhi)) - vRotation.x()*sin(fPhi);
458
459 matRotation.zx_ = vRotation.z()*vRotation.x()*(1 - cos(fPhi)) - vRotation.y()*sin(fPhi);
460 matRotation.zy_ = vRotation.z()*vRotation.y()*(1 - cos(fPhi)) + vRotation.x()*sin(fPhi);
461 matRotation.zz_ = vRotation.z()*vRotation.z()*(1 - cos(fPhi)) + cos(fPhi);
462
463 ATH_MSG_DEBUG("end ALFA_LocRecCorr::UserTransform3DInDetector()");
464
465 return HepGeom::Transform3D(CLHEP::HepRotation(matRotation), vTranslation);
466}
467
468HepGeom::Point3D<double> ALFA_LocRecCorr::Point3DInDetector(eRPotName eRPName)
469{
470 //MsgStream LogStream(Athena::getMessageSvc(), "ALFA_LocRecCorr::Point3DInDetector(eRPotName eRPName)");
471 ATH_MSG_DEBUG("begin ALFA_LocRecCorr::Point3DInDetector()");
472
473 HepGeom::Point3D<double> Point;
474
475 switch(eRPName)
476 {
477 case ERPN_B7L1U:
479 break;
480 case ERPN_B7L1L:
482 break;
483 case ERPN_A7L1U:
485 break;
486 case ERPN_A7L1L:
488 break;
489 case ERPN_A7R1U:
491 break;
492 case ERPN_A7R1L:
494 break;
495 case ERPN_B7R1U:
497 break;
498 case ERPN_B7R1L:
500 break;
501 default:
502 ATH_MSG_WARNING("Unknown Roman pot, transformation point will be set to default (zero) value");
503 }
504
505 ATH_MSG_DEBUG("end ALFA_LocRecCorr::Point3DInDetector()");
506
507 return Point;
508}
509
511{
512 //MsgStream LogStream(Athena::getMessageSvc(), "ALFA_LocRecCorr::RecordCollection()");
513 ATH_MSG_DEBUG("begin ALFA_LocRecCorr::RecordCollection()");
514
515 StatusCode sc = StatusCode::SUCCESS;
516
519
520 if (sc.isFailure())
521 {
522 ATH_MSG_FATAL("MD - Could not record the empty LocRecCorrEv collection in StoreGate");
523 return sc;
524 }
525 else
526 {
527 ATH_MSG_DEBUG("MD - LocRecCorrEv collection was recorded in StoreGate");
528 }
529
530 ATH_MSG_DEBUG("end ALFA_LocRecCorr::RecordCollection()");
531
532 return sc;
533}
534
536{
537 //MsgStream LogStream(Athena::getMessageSvc(), "ALFA_LocRecCorr::RecordODCollection()");
538 ATH_MSG_DEBUG("begin ALFA_LocRecCorr::RecordODCollection()");
539
540 StatusCode sc = StatusCode::SUCCESS;
541
544
545 if (sc.isFailure())
546 {
547 ATH_MSG_FATAL("OD - Could not record the empty LocRecCorrEv collection in StoreGate");
548
549 return sc;
550 }
551 else
552 {
553 ATH_MSG_DEBUG("OD - LocRecCorrEv collection is recorded in StoreGate");
554 }
555
556 ATH_MSG_DEBUG("end ALFA_LocRecCorr::RecordODCollection()");
557
558 return sc;
559}
560
562{
563 ATH_MSG_DEBUG("begin ALFA_LocRecCorr::COOLUpdate()");
564
565 SG::ReadCondHandleKey<CondAttrListCollection> key("/FWD/ALFA/position_calibration");
567 ATH_CHECK( listAttrColl.isValid() );
568
569 for(CondAttrListCollection::const_iterator iterAttr=listAttrColl->begin();iterAttr!=listAttrColl->end();++iterAttr)
570 {
571 int iChannel=iterAttr->first; //RPot ID
572 m_Config.CfgRPosParams[iChannel].swcorr.fXOffset=((iterAttr->second)[0]).data<float>();
573 m_Config.CfgRPosParams[iChannel].swcorr.fTheta =((iterAttr->second)[1]).data<float>();
574 m_Config.CfgRPosParams[iChannel].swcorr.fYOffset=((iterAttr->second)[2]).data<float>();
575
576 ATH_MSG_DEBUG("iChannel, fXOffset, fTheta, fYOffset = " << iChannel << ", " << m_Config.CfgRPosParams[iChannel].swcorr.fXOffset);
577 ATH_MSG_DEBUG(", " << m_Config.CfgRPosParams[iChannel].swcorr.fTheta << ", " << m_Config.CfgRPosParams[iChannel].swcorr.fYOffset);
578 }
579
580 // update SW corrections - needs to be updated during the COOL DB check
582 {
583 ATH_MSG_DEBUG("Geometry for the SW corrections updated successfully");
584 }
585 else
586 {
587 ATH_MSG_FATAL("Unable to update a geometry of the SW corrections!");
588 ATH_MSG_DEBUG("end ALFA_LocRecCorr::COOLUpdate()");
589 return StatusCode::FAILURE;
590 }
591
592 return StatusCode::SUCCESS;
593}
594
596{
597 //MsgStream LogStream(Athena::getMessageSvc(), "ALFA_LocRecCorr::UpdateGeometryAtlas()");
598 ATH_MSG_DEBUG("begin ALFA_LocRecCorr::UpdateGeometryAtlas()");
599
600 if(m_pGeometryReader->Initialize(&m_Config,EFCS_ATLAS))
601 {
602 ATH_MSG_DEBUG("Geometry successfully updated.");
603 m_pGeometryReader->GetListOfExistingRPotIDs(&m_ListExistingRPots);
604 }
605 else
606 {
607 ATH_MSG_FATAL("Cannot update geometry. Initialization process failed.");
608 ATH_MSG_DEBUG("end ALFA_LocRecCorr::UpdateGeometryAtlas()");
609 return false;
610 }
611
612 ATH_MSG_DEBUG("end ALFA_LocRecCorr::UpdateGeometryAtlas()");
613 return true;
614}
615
617{
618 eRPotName eRPName;
619 for(int i=0;i<RPOTSCNT;i++)
620 {
621 eRPName=(eRPotName)(i+1);
623 {
624 m_Config.CfgRPosParams[i].usercorr.bIsEnabledUserTranform=true;
625 m_Config.CfgRPosParams[i].usercorr.UserOriginOfDetTransInRPot=Point3DInDetector(eRPName);
626 m_Config.CfgRPosParams[i].usercorr.UserTransformOfDetInRPot=UserTransform3DInDetector(eRPName);
627 }
629 {
630 m_Config.CfgRPosParams[i].usercorr.bIsEnabledUserTranform=true;
631 m_Config.CfgRPosParams[i].usercorr.UserTransformOfRPInStation=UserTransform3DInStation(eRPName);
632 }
633 }
634}
635
#define RPOTSCNT
@ ERPPT_ACTIVE
@ EFCS_ATLAS
@ EGST_IDEALGEOMETRY
@ ERPN_B7L1L
@ ERPN_A7L1L
@ ERPN_B7R1L
@ ERPN_B7L1U
@ ERPN_A7R1L
@ ERPN_B7R1U
@ ERPN_A7L1U
@ ERPN_A7R1U
@ EMT_SWCORRECTIONS
@ EMT_NOMINAL
struct _USERTRANSFORM USERTRANSFORM
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
Helpers for checking error return status codes and reporting errors.
#define CHECK(...)
Evaluate an expression and check for errors.
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
static Double_t sc
std::vector< double > m_vecTransformInStationB7R1U
ALFA_LocRecCorrEvCollection * m_pLocRecCorrEvCollection
HepGeom::Point3D< double > Point3DInDetector(eRPotName eRPName)
std::vector< double > m_vecTransformInStationA7R1U
std::string m_strKeyLocRecCorrODEvCollection
ALFA_GeometryReader * m_pGeometryReader
StatusCode COOLUpdate()
std::vector< bool > m_bIsTransformInDetector
std::vector< double > m_vecTransformInStationB7R1L
HepGeom::Transform3D UserTransform3DInStation(eRPotName eRPName)
HepGeom::Transform3D m_TransMatrixSt[RPOTSCNT]
GEOMETRYCONFIGURATION m_Config
std::vector< double > m_pointTransformInDetectorA7L1L
std::vector< double > m_vecTransformInDetectorA7R1U
std::vector< double > m_pointTransformInDetectorA7R1L
std::vector< double > m_vecTransformInDetectorB7L1L
std::vector< double > m_vecTransformInStationA7L1U
std::string m_strKeyLocRecEvCollection
std::vector< double > m_vecTransformInDetectorA7L1L
std::vector< double > m_vecTransformInStationA7R1L
std::vector< double > m_vecTransformInDetectorB7R1U
std::vector< double > m_vecTransformInDetectorA7L1U
std::string m_strKeyLocRecODEvCollection
std::vector< double > m_vecTransformInDetectorB7R1L
std::vector< double > m_vecTransformInDetectorB7L1U
StatusCode RecordCollection()
std::vector< double > m_vecTransformInStationA7L1L
std::string m_strLocRecCollectionName
std::vector< double > m_vecTransformInStationB7L1U
std::vector< double > m_pointTransformInDetectorB7L1L
std::vector< double > m_pointTransformInDetectorA7L1U
std::vector< double > m_vecTransformInStationB7L1L
std::vector< double > m_pointTransformInDetectorB7R1L
std::string m_strLocRecODCollectionName
ALFA_LocRecCorr(const std::string &name, ISvcLocator *pSvcLocator)
std::vector< bool > m_bIsTransformInStation
ALFA_LocRecCorrODEvCollection * m_pLocRecCorrODEvCollection
StatusCode RecordODCollection()
StatusCode initialize()
HepGeom::Transform3D UserTransform3DInDetector(eRPotName eRPName)
std::string m_strKeyLocRecCorrEvCollection
std::vector< double > m_pointTransformInDetectorA7R1U
std::vector< double > m_pointTransformInDetectorB7L1U
std::vector< double > m_vecTransformInDetectorA7R1L
std::string m_strKeyGeometryForReco
std::vector< double > m_pointTransformInDetectorB7R1U
std::list< eRPotName > m_ListExistingRPots
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
const ServiceHandle< StoreGateSvc > & detStore() const
ChanAttrListMap::const_iterator const_iterator
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
Default object of 2D space.
bool contains(const std::string &s, const std::string &regx)
does a string contain the substring
Definition hcg.cxx:114
STL namespace.
CLHEP::Hep3Vector vecTranslation
CLHEP::Hep3Vector vecRotation