ATLAS Offline Software
Loading...
Searching...
No Matches
TRTCondStoreText.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
6#include "TRTCondStoreText.h"
7
13
14#include <fstream>
15#include <iostream>
16#include <string>
17
18
25TRTCondStoreText::TRTCondStoreText(const std::string& name, ISvcLocator* pSvcLocator):AthAlgorithm (name, pSvcLocator){}
26
28{
29
30 // Get TRT ID helper
31 ATH_CHECK(detStore()->retrieve(m_trtid, "TRT_ID"));
32
33 // Format of input text file
34 int format = 0;
35 if (m_par_caltextfile != ""){
36 ATH_MSG_INFO(" input text file supplied " << m_par_caltextfile);
37 if (StatusCode::SUCCESS != checkTextFile(m_par_caltextfile, format)){
38 ATH_MSG_FATAL("Could not read format of text file" << m_par_caltextfile);
39 return StatusCode::FAILURE;
40 }
41 ATH_MSG_INFO(" Found format " << format << " in text file " << m_par_caltextfile);
42 }
43 else{
44 ATH_MSG_FATAL(" No input text file supplied. Nothing can be done. ");
45 return StatusCode::FAILURE;
46 }
47
48 ATH_MSG_INFO(" Read calibration constants from text file " << m_par_caltextfile);
49 if (StatusCode::SUCCESS != readTextFile(m_par_caltextfile, format)){
50 ATH_MSG_FATAL("Could not read calibration objects from text file " << m_par_caltextfile);
51 return StatusCode::FAILURE;
52 }
53
54 return StatusCode::SUCCESS;
55}
56
58
59 StatusCode sc = StatusCode::SUCCESS;
60 return sc;
61}
62
64
65 StatusCode sc = StatusCode::SUCCESS;
66 return sc;
67}
68
69StatusCode TRTCondStoreText::checkTextFile(const std::string& filename, int& format )
70{
71
72 StatusCode sc=StatusCode::SUCCESS ;
73 std::ifstream infile(filename) ;
74 if(!infile) {
75 ATH_MSG_ERROR( "Cannot find input file " << filename ) ;
76 sc=StatusCode::FAILURE;
77 } else {
78 // read the format tag. if none, default to 0
79 format = 0 ;
80 char line[512] ;
81 infile.getline(line,512) ;
82 std::string linestring(line) ;
83 size_t pos = linestring.find("Fileformat") ;
84 if(pos != std::string::npos) {
85 sscanf(line,"# Fileformat=%d",&format) ;
86 } else {
87 ATH_MSG_WARNING( "Input file has no Fileformat identifier. Assuming format=0.");
88 // 'rewind' the file
89
90 infile.close() ;
91 infile.open(filename) ;
92 }
93 }
94 infile.close() ;
95 return sc ;
96}
97
98StatusCode TRTCondStoreText::readTextFile(const std::string& filename, int& format )
99{
100
101 StatusCode sc=StatusCode::SUCCESS ;
102 std::ifstream infile(filename) ;
103 if(!infile) {
104 ATH_MSG_ERROR( "Cannot find input file " << filename ) ;
105 } else {
106 // read the format tag. if none, default to 0
107 format = 0 ;
108 char line[512] ;
109 infile.getline(line,512) ;
110 std::string linestring(line) ;
111 size_t pos = linestring.find("Fileformat") ;
112 if(pos != std::string::npos) {
113 sscanf(line,"# Fileformat=%d",&format) ;
114 } else {
115 ATH_MSG_WARNING( "Input file has no Fileformat identifier. Assuming format=1");
116 // 'rewind' the file
117
118 infile.close() ;
119 infile.open(filename) ;
120 }
121 ATH_MSG_INFO( "Reading calibration data from text file " << filename << " format " << format ) ;
122 switch(format) {
123 case 1: sc=readTextFile_Format1(infile) ; break ;
124 case 2: sc=readTextFile_Format2(infile) ; break ;
125 case 3: sc=readTextFile_Format3(infile) ; break ;
126 default : sc=readTextFile_Format1(infile) ; break ;
127 }
128 }
129 infile.close() ;
130
131 return sc ;
132}
133
134
135StatusCode TRTCondStoreText::readTextFile_Format1(std::istream& infile)
136{
137
138
139 enum ReadMode { ReadingRtRelation, ReadingStrawT0, ReadingGarbage } ;
140 ReadMode readmode =ReadingGarbage ;
141
142 // The OutputConditionAlg only works with old-style conditions access, so create raw pointers here.
143
146
147 char line[512] ;
148 int nrtrelations(0), nstrawt0(0) ;
149 while( infile.getline(line,512) ) {
150 if(line[0] == '#') {
151 // line with tag
152 std::string linestring(line) ;
153 if(linestring.find("RtRelation") != std::string::npos) {
154 readmode = ReadingRtRelation ;
155 ATH_MSG_INFO(" Found line with Rt tag ");
156
157 } else if (linestring.find("StrawT0") != std::string::npos) {
158 readmode = ReadingStrawT0 ;
159 ATH_MSG_INFO(" Found line with T0 tag ");
160
161 }else readmode = ReadingGarbage ;
162 } else if( readmode != ReadingGarbage) {
163 std::istringstream is(line) ;
164 // read the id
166 is >> id ;
167 // read the semicolon that end the id
168 char dummy ;
169 is >> dummy ;
170
171 // read the object
172 if( readmode == ReadingRtRelation ) {
173
174
176 // coverity[tainted_data]
177 rtContainer->set( id,rt);
178 delete rt ;
179 ++nrtrelations ;
180 } else if( readmode == ReadingStrawT0 ) {
181
182 float t0(0), t0err(0) ;
183 is >> t0 >> t0err;
184
185 //skip straws with t0=0. The
186 if(t0==0) continue;
187 // coverity[tainted_data]
188 t0Container->setT0( id, t0, t0err );
189 //debug
190 //id.print();
191 //std::cout << " t0 " << t0 << " t0err " << t0err << std::endl;
192 ++nstrawt0 ;
193 }
194 }
195 }
196
197 // Check that containers were filled
198
199 size_t t0footprint = t0Container->footprint() ;
200 size_t rtfootprint = rtContainer->footprint() ;
201
202
203 ATH_MSG_INFO( "read " << nstrawt0 << " t0 and " << nrtrelations << " rt from file. "
204 << " t0/rt footprints " << t0footprint << " / " << rtfootprint ) ;
205
206
207 //Record the containers the old way for the OutputConditionsAlg
208
209 if(t0Container->initialize().isFailure()) ATH_MSG_WARNING("Could not initialize T0 Container for key " << m_par_t0containerkey);
210 ATH_MSG_INFO(" Recording T0 container ");
211 if( (detStore()->record(t0Container,m_par_t0containerkey))!=StatusCode::SUCCESS ) {
212 ATH_MSG_ERROR("Could not record T0 container for key " << m_par_t0containerkey << " with DetStore ");
213 return StatusCode::FAILURE;
214 } else {
215 if(StatusCode::SUCCESS!=detStore()->retrieve(t0Container,m_par_t0containerkey)) {
216 ATH_MSG_FATAL( "Could not retrieve data handle for StrawT0Container " );
217 return StatusCode::FAILURE ;
218 } else {
219 ATH_MSG_INFO("Successfully recorded T0 Container " << m_par_t0containerkey << " with DetStore ");
220 }
221 }
222
223
224 ATH_MSG_INFO(" Recording RT container ");
225 if( (detStore()->record(rtContainer,m_par_rtcontainerkey))!=StatusCode::SUCCESS ) {
226 ATH_MSG_ERROR("Could not record RT container for key " << m_par_rtcontainerkey << " with DetStore ");
227 return StatusCode::FAILURE;
228 } else {
229 if(StatusCode::SUCCESS!=detStore()->retrieve(rtContainer,m_par_rtcontainerkey)) {
230 ATH_MSG_FATAL( "Could not retrieve data handle for RtRelationContainer " );
231 return StatusCode::FAILURE ;
232 } else {
233 ATH_MSG_INFO("Successfully recorded RT Container " << m_par_rtcontainerkey << " with DetStore ");
234 }
235 }
236
237
238 return StatusCode::SUCCESS ;
239}
240
241StatusCode TRTCondStoreText::readTextFile_Format2(std::istream& infile)
242{
243
244
245 enum ReadMode { ReadingRtRelation, ReadingErrors, ReadingStrawT0, ReadingGarbage } ;
246 ReadMode readmode =ReadingGarbage ;
247 char line[512] ;
248 int nrtrelations(0), nerrors(0), nstrawt0(0) ;
249
250 // The OutputConditionAlg only works with old-style access, so create a raw pointer.
254
255
256 while( infile.getline(line,512) ) {
257 if(line[0] == '#') {
258 // line with tag
259 std::string linestring(line) ;
260 if( linestring.find("RtRelation") != std::string::npos) {
261 readmode = ReadingRtRelation ;
262 ATH_MSG_INFO(" Found line with Rt tag ");
263 rtContainer->clear() ;
264 } else if(linestring.find("StrawT0") != std::string::npos) {
265 readmode = ReadingStrawT0 ;
266 ATH_MSG_INFO(" Found line with T0 tag ");
267 t0Container->clear() ;
268 } else if(linestring.find("RtErrors") != std::string::npos) {
269 readmode = ReadingErrors ;
270 ATH_MSG_INFO(" Found line with Error tag ");
271 errContainer->clear() ;
272 } else { readmode = ReadingGarbage ; }
273 } else if( readmode != ReadingGarbage) {
274 std::istringstream is(line) ;
275 // read the id
277 is >> id ;
278 // read the semicolon that end the id
279 char dummy ;
280 is >> dummy ;
281 // read the object
282 if( readmode == ReadingRtRelation ) {
283
285 // coverity[tainted_data]
286 rtContainer->set( id,rt);
287 delete rt ;
288 ++nrtrelations ;
289
290 } else if( readmode == ReadingErrors ) {
291
293 // coverity[tainted_data]
294 errContainer->set( id,err);
295 delete err ;
296 ++nerrors ;
297
298 } else if( readmode == ReadingStrawT0 ) {
299
300 float t0(0), t0err(0) ;
301 is >> t0 >> t0err ;
302 // coverity[tainted_data]
303 t0Container->setT0( id, t0, t0err );
304
305 ++nstrawt0 ;
306 }
307 }
308 }
309
310 size_t t0footprint = t0Container->footprint() ;
311 size_t rtfootprint = rtContainer->footprint() ;
312 size_t errfootprint = errContainer->footprint() ;
313
314 ATH_MSG_INFO( "read " << nstrawt0 << " t0 and " << nerrors << " errors and " << nrtrelations << " rt relations "
315 << " t0/rt/err footprints " << t0footprint << " / " << rtfootprint << " / " << errfootprint ) ;
316
317 //Record the containers the old way for the OutputConditionsAlg
318 if(t0Container->initialize().isFailure()) ATH_MSG_WARNING("Could not initialize T0 Container for key " << m_par_t0containerkey);
319 ATH_MSG_INFO(" Recording T0 container ");
320 if( (detStore()->record(t0Container,m_par_t0containerkey))!=StatusCode::SUCCESS ) {
321 ATH_MSG_ERROR("Could not record T0 container for key " << m_par_t0containerkey << " with DetStore ");
322 return StatusCode::FAILURE;
323 } else {
324 if(StatusCode::SUCCESS!=detStore()->retrieve(t0Container,m_par_t0containerkey)) {
325 ATH_MSG_FATAL( "Could not retrieve data handle for StrawT0Container " );
326 return StatusCode::FAILURE ;
327 } else {
328 ATH_MSG_INFO("Successfully recorded T0 Container " << m_par_t0containerkey << " with DetStore ");
329 }
330 }
331
332
333 ATH_MSG_INFO(" Recording RT container ");
334 if( (detStore()->record(rtContainer,m_par_rtcontainerkey))!=StatusCode::SUCCESS ) {
335 ATH_MSG_ERROR("Could not record RT container for key " << m_par_rtcontainerkey << " with DetStore ");
336 return StatusCode::FAILURE;
337 } else {
338 if(StatusCode::SUCCESS!=detStore()->retrieve(rtContainer,m_par_rtcontainerkey)) {
339 ATH_MSG_FATAL( "Could not retrieve data handle for RtRelationContainer " );
340 return StatusCode::FAILURE ;
341 } else {
342 ATH_MSG_INFO("Successfully recorded RT Container " << m_par_rtcontainerkey << " with DetStore ");
343 }
344 }
345
346 ATH_MSG_INFO(" Recording Error container ");
347 if( (detStore()->record(errContainer,m_par_errcontainerkey))!=StatusCode::SUCCESS ) {
348 ATH_MSG_ERROR("Could not record Error container for key " << m_par_errcontainerkey << " with DetStore ");
349 return StatusCode::FAILURE;
350 } else {
351 if(StatusCode::SUCCESS!=detStore()->retrieve(errContainer,m_par_errcontainerkey)) {
352 ATH_MSG_FATAL( "Could not retrieve data handle for RtRelationContainer " );
353 return StatusCode::FAILURE ;
354 } else {
355 ATH_MSG_INFO("Successfully recorded Error Container " << m_par_errcontainerkey << " with DetStore ");
356 }
357 }
358
359 return StatusCode::SUCCESS ;
360}
361
362
363StatusCode TRTCondStoreText::readTextFile_Format3(std::istream& infile)
364{
365
366 // The OutputConditionAlg only works with old-style access, so create a raw pointer.
371
372
373 enum ReadMode { ReadingRtRelation, ReadingErrors, ReadingSlopes, ReadingStrawT0, ReadingGarbage } ;
374 ReadMode readmode =ReadingGarbage ;
375 char line[512] ;
376 int nrtrelations(0), nerrors(0), nslopes(0), nstrawt0(0) ;
377
378 while( infile.getline(line,512) ) {
379 if(line[0] == '#') {
380 // line with tag
381 std::string linestring(line) ;
382 if( linestring.find("RtRelation") != std::string::npos) {
383 readmode = ReadingRtRelation ;
384 rtContainer->clear() ;
385 ATH_MSG_INFO(" Found line with Rt tag ");
386 } else if(linestring.find("RtErrors") != std::string::npos) {
387 readmode = ReadingErrors ;
388 errContainer->clear() ;
389 ATH_MSG_INFO(" Found line with Error tag ");
390 } else if(linestring.find("RtSlopes") != std::string::npos) {
391 readmode = ReadingSlopes ;
392 slopeContainer->clear() ;
393 ATH_MSG_INFO(" Found line with Slope tag ");
394 } else if(linestring.find("StrawT0") != std::string::npos) {
395 readmode = ReadingStrawT0 ;
396 t0Container->clear() ;
397 ATH_MSG_INFO(" Found line with T0 tag ");
398 } else { readmode = ReadingGarbage ; }
399 } else if( readmode != ReadingGarbage) {
400 std::istringstream is(line) ;
401 // read the id
403 is >> id ;
404 // read the semicolon that end the id
405 char dummy ;
406 is >> dummy ;
407 // read the object
408 if( readmode == ReadingRtRelation ) {
409
411 // coverity[tainted_data]
412 rtContainer->set( id,rt);
413 delete rt ;
414 ++nrtrelations ;
415
416 } else if( readmode == ReadingErrors ) {
417
419 // coverity[tainted_data]
420 errContainer->set( id,err);
421 delete err ;
422 ++nerrors ;
423
424 } else if( readmode == ReadingSlopes ) {
425
427 // coverity[tainted_data]
428 slopeContainer->set( id,slope);
429 delete slope ;
430 ++nslopes ;
431
432 } else if( readmode == ReadingStrawT0 ) {
433
434 float t0(0), t0err(0) ;
435 is >> t0 >> t0err ;
436 // coverity[tainted_data]
437 t0Container->setT0( id, t0, t0err );
438 ++nstrawt0 ;
439 }
440 }
441 }
442
443 size_t t0footprint = t0Container->footprint() ;
444 size_t rtfootprint = rtContainer->footprint() ;
445 size_t errfootprint = errContainer->footprint() ;
446 size_t slopefootprint = slopeContainer->footprint() ;
447
448 ATH_MSG_INFO( "read " << nstrawt0 << " t0 and " << nerrors << " errors and " << nrtrelations << " rt relations and " << nslopes << " error slopes "
449 << " t0/rt/err/slope footprints " << t0footprint << " / " << rtfootprint << " / " << errfootprint << " / " << slopefootprint) ;
450
451
452 //Record the containers the old way for the OutputConditionsAlg
453 if(t0Container->initialize().isFailure()) ATH_MSG_WARNING("Could not initialize T0 Container for key " << m_par_t0containerkey);
454 ATH_MSG_INFO(" Recording T0 container ");
455 if( (detStore()->record(t0Container,m_par_t0containerkey))!=StatusCode::SUCCESS ) {
456 ATH_MSG_ERROR("Could not record T0 container for key " << m_par_t0containerkey << " with DetStore ");
457 return StatusCode::FAILURE;
458 } else {
459 if(StatusCode::SUCCESS!=detStore()->retrieve(t0Container,m_par_t0containerkey)) {
460 ATH_MSG_FATAL( "Could not retrieve data handle for StrawT0Container " );
461 return StatusCode::FAILURE ;
462 } else {
463 ATH_MSG_INFO("Successfully recorded T0 Container " << m_par_t0containerkey << " with DetStore ");
464 }
465 }
466
467
468 ATH_MSG_INFO(" Recording RT container ");
469 if( (detStore()->record(rtContainer,m_par_rtcontainerkey))!=StatusCode::SUCCESS ) {
470 ATH_MSG_ERROR("Could not record RT container for key " << m_par_rtcontainerkey << " with DetStore ");
471 return StatusCode::FAILURE;
472 } else {
473 if(StatusCode::SUCCESS!=detStore()->retrieve(rtContainer,m_par_rtcontainerkey)) {
474 ATH_MSG_FATAL( "Could not retrieve data handle for RtRelationContainer " );
475 return StatusCode::FAILURE ;
476 } else {
477 ATH_MSG_INFO("Successfully recorded RT Container " << m_par_rtcontainerkey << " with DetStore ");
478 }
479 }
480
481 ATH_MSG_INFO(" Recording Error container ");
482 if( (detStore()->record(errContainer,m_par_errcontainerkey))!=StatusCode::SUCCESS ) {
483 ATH_MSG_ERROR("Could not record Error container for key " << m_par_errcontainerkey << " with DetStore ");
484 return StatusCode::FAILURE;
485 } else {
486 if(StatusCode::SUCCESS!=detStore()->retrieve(errContainer,m_par_errcontainerkey)) {
487 ATH_MSG_FATAL( "Could not retrieve data handle for RtRelationContainer " );
488 return StatusCode::FAILURE ;
489 } else {
490 ATH_MSG_INFO("Successfully recorded Error Container " << m_par_errcontainerkey << " with DetStore ");
491 }
492 }
493
494 ATH_MSG_INFO(" Recording Slope container ");
495 if( (detStore()->record(slopeContainer,m_par_slopecontainerkey))!=StatusCode::SUCCESS ) {
496 ATH_MSG_ERROR("Could not record Slope container for key " << m_par_slopecontainerkey << " with DetStore ");
497 return StatusCode::FAILURE;
498 } else {
499 if(StatusCode::SUCCESS!=detStore()->retrieve(slopeContainer,m_par_slopecontainerkey)) {
500 ATH_MSG_FATAL( "Could not retrieve data handle for RtRelationContainer " );
501 return StatusCode::FAILURE ;
502 } else {
503 ATH_MSG_INFO("Successfully recorded Slope Container " << m_par_slopecontainerkey << " with DetStore ");
504 }
505 }
506
507
508 return StatusCode::SUCCESS ;
509}
510
511
513{
514 return TRTCond::ExpandedIdentifier( m_trtid->barrel_ec(id),m_trtid->layer_or_wheel(id),
515 m_trtid->phi_module(id),m_trtid->straw_layer(id),
516 m_trtid->straw(id),level ) ;
517}
518
519
520
521
522
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_WARNING(x)
Algorithm to read TRT Conditions objects from text file and stream them to db.
This is an Identifier helper class for the TRT subdetector.
AthAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
const ServiceHandle< StoreGateSvc > & detStore() const
virtual StatusCode readTextFile_Format3(std::istream &)
virtual StatusCode readTextFile(const std::string &file, int &format)
Gaudi::Property< std::string > m_par_slopecontainerkey
Gaudi::Property< std::string > m_par_errcontainerkey
virtual StatusCode finalize(void) override
TRTCondStoreText(const std::string &name, ISvcLocator *pSvcLocator)
constructor
Gaudi::Property< std::string > m_par_caltextfile
virtual StatusCode checkTextFile(const std::string &file, int &format)
read calibration from text file into TDS
Gaudi::Property< std::string > m_par_rtcontainerkey
virtual StatusCode initialize(void) override
virtual StatusCode readTextFile_Format2(std::istream &)
Gaudi::Property< std::string > m_par_t0containerkey
const TRT_ID * m_trtid
trt id helper
TRTCond::StrawT0MultChanContainer StrawT0Container
virtual StatusCode execute(void) override
virtual TRTCond::ExpandedIdentifier trtcondid(const Identifier &id, int level=TRTCond::ExpandedIdentifier::STRAW) const
create an TRTCond::ExpandedIdentifier from a TRTID identifier
virtual StatusCode readTextFile_Format1(std::istream &)
TRTCond::RtRelationMultChanContainer RtRelationContainer
void set(const ExpandedIdentifier &id, const typename DaughterContainer::value_type &t)
set a value
void clear()
clear all layercontainers
size_t footprint() const
return the memory allocated by the layercontainers.
StatusCode initialize()
Initialization done after creation or read back - derived classes may augment the functionality.
static RtRelation * readFromFile(std::istream &is)
read method
Multichannel container for RtRelation objects.
Base class for rt-relations in the TRT.
Definition RtRelation.h:27
A COOL Multichannel container for StrawT0 objects.
void setT0(const ExpandedIdentifier &id, float t0, float t0err)
set t0