ATLAS Offline Software
Loading...
Searching...
No Matches
TRT_StrawAlignDbSvc Class Reference

interface to TRT straw alignment constants More...

#include <TRT_StrawAlignDbSvc.h>

Inheritance diagram for TRT_StrawAlignDbSvc:
Collaboration diagram for TRT_StrawAlignDbSvc:

Public Member Functions

 TRT_StrawAlignDbSvc (const std::string &name, ISvcLocator *pSvcLocator)
 constructor
virtual ~TRT_StrawAlignDbSvc ()
 destructor
virtual StatusCode initialize ()
 tool initialize
virtual StatusCode finalize ()
 tool finalize
TRTCond::ExpandedIdentifier trtcondid (const Identifier &id, int level=TRTCond::ExpandedIdentifier::STRAW) const
 create an TRTCond::ExpandedIdentifier from a TRTID identifier
void setDx (const TRTCond::ExpandedIdentifier &id, float dx1, float dx2, float dxerr)
 set endpoints for a TRTCond::ExpandedIdentifier
StatusCode writeTextFile (const std::string &file) const
 write calibration constants to flat text file
virtual StatusCode readTextFile (const std::string &file)
 read calibration from text file into TDS
StatusCode readTextFile (StrawDxContainer *dxcontainer, const std::string &file)
StatusCode streamOutObjects () const
 write the calibration objects to output, after cleaning
StatusCode registerObjects (std::string tag, int run1, int event1, int run2, int event2) const
 register calibration objects with the IoV service
StrawDxContainer * getDxContainer () const
 access to containers
const StrawDxContainer * getConstDxContainer () const
StatusCode IOVCallBack ()
 IOV call back for dx objects. normally this doesn't do anything.
float getDx1 (const Identifier &id) const
 get shift near electronics
float getDx2 (const Identifier &id) const
 get shift far from electronics
float getDxErr (const Identifier &id) const
 get error on shift
void setDx (const Identifier &id, float dx1, float dx2, float dxerr)
 set shifts

Private Attributes

ServiceHandle< StoreGateSvcm_detStore
std::string m_par_dxcontainerkey
std::string m_par_strawtextfile
bool m_par_forcecallback
const TRT_IDm_trtid
const InDetDD::TRT_DetectorManagerm_trtman
const DataHandle< StrawDxContainer > m_dxcontainer
ToolHandle< IAthenaOutputStreamToolm_streamer

Detailed Description

interface to TRT straw alignment constants

Definition at line 34 of file TRT_StrawAlignDbSvc.h.

Constructor & Destructor Documentation

◆ TRT_StrawAlignDbSvc()

TRT_StrawAlignDbSvc::TRT_StrawAlignDbSvc ( const std::string & name,
ISvcLocator * pSvcLocator )

constructor

Definition at line 27 of file TRT_StrawAlignDbSvc.cxx.

29 : base_class(name,pSvcLocator),
30 m_detStore("DetectorStore",name),
31 m_par_dxcontainerkey("/TRT/Calib/DX"),
34 m_trtid(nullptr),
35 m_trtman(nullptr),
36 m_streamer("AthenaOutputStreamTool/CondStream1")
37{
38 declareProperty("StrawTextFile",m_par_strawtextfile);
39 declareProperty("ForceCallback",m_par_forcecallback);
40 declareProperty("StreamTool",m_streamer);
41 declareProperty("DetectorStore",m_detStore);
42}
const InDetDD::TRT_DetectorManager * m_trtman
ServiceHandle< StoreGateSvc > m_detStore
ToolHandle< IAthenaOutputStreamTool > m_streamer

◆ ~TRT_StrawAlignDbSvc()

TRT_StrawAlignDbSvc::~TRT_StrawAlignDbSvc ( )
virtualdefault

destructor

Member Function Documentation

◆ finalize()

StatusCode TRT_StrawAlignDbSvc::finalize ( )
virtual

tool finalize

Definition at line 86 of file TRT_StrawAlignDbSvc.cxx.

87{
88 ATH_MSG_INFO ("TRT_StrawAlignDbSvc finalize method called");
89 return StatusCode::SUCCESS;
90}
#define ATH_MSG_INFO(x)

◆ getConstDxContainer()

const TRT_StrawAlignDbSvc::StrawDxContainer * TRT_StrawAlignDbSvc::getConstDxContainer ( ) const
inline

Definition at line 119 of file TRT_StrawAlignDbSvc.h.

120{
121 const StrawDxContainer* rc = nullptr;
122 if (m_dxcontainer.isValid())
123 rc = m_dxcontainer.cptr();
124 else {
125 if (m_detStore->retrieve (rc, m_par_dxcontainerkey).isFailure()) {
126 ATH_MSG_ERROR("Cannot retrieve " << m_par_dxcontainerkey);
127 }
128 }
129 return rc;
130 return const_cast<StrawDxContainer*>(rc) ;
131}
#define ATH_MSG_ERROR(x)
static Double_t rc
const DataHandle< StrawDxContainer > m_dxcontainer

◆ getDx1()

float TRT_StrawAlignDbSvc::getDx1 ( const Identifier & id) const
inline

get shift near electronics

Definition at line 150 of file TRT_StrawAlignDbSvc.h.

151{
153}
TRTCond::ExpandedIdentifier trtcondid(const Identifier &id, int level=TRTCond::ExpandedIdentifier::STRAW) const
create an TRTCond::ExpandedIdentifier from a TRTID identifier
StrawDxContainer * getDxContainer() const
access to containers

◆ getDx2()

float TRT_StrawAlignDbSvc::getDx2 ( const Identifier & id) const
inline

get shift far from electronics

Definition at line 156 of file TRT_StrawAlignDbSvc.h.

157{
159}

◆ getDxContainer()

TRT_StrawAlignDbSvc::StrawDxContainer * TRT_StrawAlignDbSvc::getDxContainer ( ) const
inline

access to containers

Definition at line 113 of file TRT_StrawAlignDbSvc.h.

113 {
114 const StrawDxContainer* rc = getConstDxContainer();
115 return const_cast<StrawDxContainer*>(rc) ;
116}
const StrawDxContainer * getConstDxContainer() const

◆ getDxErr()

float TRT_StrawAlignDbSvc::getDxErr ( const Identifier & id) const
inline

get error on shift

Definition at line 162 of file TRT_StrawAlignDbSvc.h.

163{
165}

◆ initialize()

StatusCode TRT_StrawAlignDbSvc::initialize ( )
virtual

tool initialize

Definition at line 49 of file TRT_StrawAlignDbSvc.cxx.

50{
51 ATH_MSG_INFO ("TRT_StrawAlignDbSvc initialize method called");
52
53 ATH_CHECK( m_detStore->retrieve(m_trtid,"TRT_ID") );
54 ATH_CHECK( m_detStore->retrieve(m_trtman,"TRT") );
55
56
57 bool dxcontainerexists = m_detStore->StoreGateSvc::contains<StrawDxContainer>(m_par_dxcontainerkey) ;
58
59 if( dxcontainerexists ) {
60 /*
61 ATH_MSG_INFO (" dx container exists - reg callback ");
62 if( (m_detStore->regFcn(&TRT_StrawAlignDbSvc::IOVCallBack,this,m_dxcontainer,m_par_dxcontainerkey)).isFailure())
63 ATH_MSG_ERROR ("Could not register IOV callback for key: " << m_par_dxcontainerkey);
64 */
65 ATH_MSG_DEBUG(" dx container exists - do nothing ");
66
67 } else {
68
69 // create, record and update data handle
70 ATH_MSG_INFO ("Creating new dx container");
71 auto dxcontainer = std::make_unique<StrawDxContainer>();
72
73 // reading from file
74 if( !m_par_strawtextfile.empty() ) {
75 ATH_CHECK( this->readTextFile(dxcontainer.get(),
77 }
78
79 ATH_CHECK( m_detStore->record(std::move(dxcontainer), m_par_dxcontainerkey) );
80 }
81
82 return StatusCode::SUCCESS;
83}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
virtual StatusCode readTextFile(const std::string &file)
read calibration from text file into TDS

◆ IOVCallBack()

StatusCode TRT_StrawAlignDbSvc::IOVCallBack ( )

IOV call back for dx objects. normally this doesn't do anything.

Definition at line 207 of file TRT_StrawAlignDbSvc.cxx.

208{
209 /*
210 for (std::list<std::string>::const_iterator
211 itr=keys.begin(); itr!=keys.end(); ++itr)
212 ATH_MSG_INFO (" IOVCALLBACK for key " << *itr << " number " << I);
213 */
214
215 // if constants need to be read from textfile, we use the call back routine to refill the IOV objects
217
218 return StatusCode::SUCCESS;
219}

◆ readTextFile() [1/2]

StatusCode TRT_StrawAlignDbSvc::readTextFile ( const std::string & file)
virtual

read calibration from text file into TDS

Definition at line 127 of file TRT_StrawAlignDbSvc.cxx.

128{
129 return readTextFile( getDxContainer(), filename );
130}

◆ readTextFile() [2/2]

StatusCode TRT_StrawAlignDbSvc::readTextFile ( StrawDxContainer * dxcontainer,
const std::string & file )

Definition at line 133 of file TRT_StrawAlignDbSvc.cxx.

135{
136 ATH_MSG_INFO ("Reading straw alignment data from text file " << filename);
137
138 if(!dxcontainer) {
139 ATH_MSG_WARNING (" Could not find the container ");
140 return StatusCode::FAILURE;
141 }
142 dxcontainer->clear() ;
143 std::ifstream infile(filename.c_str()) ;
144 TRTCond::ExpandedIdentifier id ;
145 float dx1,dx2,dxerr;
146 int nentries(0) ;
147 while ((infile >> id >> dx1 >> dx2 >> dxerr ) ) {
148 setDx(id,dx1,dx2,dxerr) ;
149 ATH_MSG_DEBUG (" read from file: dx1 " << dx1 << " dx2 " << dx2 << " dxerr " << dxerr);
150 ++nentries ;
151 }
152 size_t dxfootprint = dxcontainer->footprint() ;
153 ATH_MSG_INFO (" read " << nentries << " from file. ");
154 ATH_MSG_INFO (" dx footprints " << dxfootprint);
155 ATH_MSG_INFO (" (no compression) ");
156
157 // force a call back in the geometry
158// (const_cast<InDetDD::TRT_DetectorManager*>(m_trtman))->align().ignore() ;
159
160 return StatusCode::SUCCESS ;
161}
#define ATH_MSG_WARNING(x)
void setDx(const TRTCond::ExpandedIdentifier &id, float dx1, float dx2, float dxerr)
set endpoints for a TRTCond::ExpandedIdentifier

◆ registerObjects()

StatusCode TRT_StrawAlignDbSvc::registerObjects ( std::string tag,
int run1,
int event1,
int run2,
int event2 ) const

register calibration objects with the IoV service

Definition at line 187 of file TRT_StrawAlignDbSvc.cxx.

188{
189 ATH_MSG_INFO ("registerObjects with IOV ");
190 ATH_MSG_INFO ("Run/evt1 [" << run1 << "," << event1 << "]");
191 ATH_MSG_INFO ("Run/evt2 [" << run2 << "," << event2 << "]");
192
193 // get pointer to registration svc
194 SmartIF<IIOVRegistrationSvc> regsvc{service("IOVRegistrationSvc")};
195 ATH_CHECK( regsvc.isValid() );
196
197 if (StatusCode::SUCCESS==regsvc->registerIOV(StrawDxContainer::classname(),
198 m_par_dxcontainerkey,tag,run1,run2,event1,event2))
199 ATH_MSG_INFO ("Registered StrawDxContainer object with key " << m_par_dxcontainerkey);
200 else
201 ATH_MSG_ERROR ("Could not register StrawDxContainer object with key " << m_par_dxcontainerkey);
202
203 return( StatusCode::SUCCESS);
204}

◆ setDx() [1/2]

void TRT_StrawAlignDbSvc::setDx ( const Identifier & id,
float dx1,
float dx2,
float dxerr )
inline

set shifts

Definition at line 168 of file TRT_StrawAlignDbSvc.h.

169{
170 setDx( trtcondid(id,TRTCond::ExpandedIdentifier::STRAW), dx1, dx2, dxerr) ;
171}

◆ setDx() [2/2]

void TRT_StrawAlignDbSvc::setDx ( const TRTCond::ExpandedIdentifier & id,
float dx1,
float dx2,
float dxerr )
inline

set endpoints for a TRTCond::ExpandedIdentifier

Definition at line 143 of file TRT_StrawAlignDbSvc.h.

144{
145 //std::cout << " Setting the dx1 to " << dx1 << " dx2 to " << dx2 << std::endl;
146 getDxContainer()->setDx( id, dx1, dx2, dxerr);
147}

◆ streamOutObjects()

StatusCode TRT_StrawAlignDbSvc::streamOutObjects ( ) const

write the calibration objects to output, after cleaning

Definition at line 164 of file TRT_StrawAlignDbSvc.cxx.

165{
166 ATH_MSG_INFO ("entering streamOutObjects ");
167
168 // Get Output Stream tool for writing
169 ATH_CHECK( m_streamer.retrieve() );
170
171 IAthenaOutputStreamTool* streamer=const_cast<IAthenaOutputStreamTool*>(&(*m_streamer));
172
173 ATH_CHECK( streamer->connectOutput() );
174
176 typeKeys.push_back( IAthenaOutputStreamTool::TypeKeyPair(StrawDxContainer::classname(),m_par_dxcontainerkey)) ;
177 getDxContainer()->crunch() ;
178
179 ATH_CHECK( streamer->streamObjects(typeKeys) );
180 ATH_CHECK( streamer->commitOutput() );
181
182 ATH_MSG_INFO (" Streamed out and committed " << typeKeys.size() << " objects ");
183 return StatusCode::SUCCESS;
184}
virtual StatusCode streamObjects(const TypeKeyPairs &typeKeys, const std::string &outputName="")=0
std::pair< std::string, std::string > TypeKeyPair
Stream out objects.
virtual StatusCode connectOutput(const std::string &outputName="")=0
Connect to the output stream Must connectOutput BEFORE streaming Only specify "outputName" if one wan...
std::vector< TypeKeyPair > TypeKeyPairs
virtual StatusCode commitOutput(bool doCommit=false)=0
Commit the output stream after having streamed out objects Must commitOutput AFTER streaming.

◆ trtcondid()

TRTCond::ExpandedIdentifier TRT_StrawAlignDbSvc::trtcondid ( const Identifier & id,
int level = TRTCond::ExpandedIdentifier::STRAW ) const
inline

create an TRTCond::ExpandedIdentifier from a TRTID identifier

Definition at line 134 of file TRT_StrawAlignDbSvc.h.

135{
136 return TRTCond::ExpandedIdentifier( m_trtid->barrel_ec(id),m_trtid->layer_or_wheel(id),
137 m_trtid->phi_module(id),m_trtid->straw_layer(id),
138 m_trtid->straw(id),level ) ;
139}

◆ writeTextFile()

StatusCode TRT_StrawAlignDbSvc::writeTextFile ( const std::string & file) const

write calibration constants to flat text file

Definition at line 92 of file TRT_StrawAlignDbSvc.cxx.

93{
94 ATH_MSG_INFO (" Write straw alignment data to text file " << filename);
95 std::ofstream outfile(filename.c_str());
96
97
98 // first reduce the container as much as possible
99 // getDxContainer()->crunch() ;
100
101 StrawDxContainer::FlatContainer packedstrawdata ;
102 const StrawDxContainer* dxcontainer = getConstDxContainer();
103 dxcontainer->getall( packedstrawdata ) ;
104
105 // now, we store the entries
106 ATH_MSG_INFO ("Number of entries in flatcontainer: "
107 << packedstrawdata.size());
108
109 for(auto & it : packedstrawdata) {
110 const TRTCond::ExpandedIdentifier& calid = it.first ;
111 // get the end point corrections. if not the right type, store zeros.
112 float dx1=dxcontainer->getDx1(calid) ;
113 float dx2=dxcontainer->getDx2(calid) ;
114 float dxerr=dxcontainer->getDxErr(calid) ;
115 outfile << calid << " "
116 << std::setprecision(5)
117 << std::setw(12) << dx1 << " "
118 << std::setw(12) << dx2 << " "
119 << std::setw(12) << dxerr << std::endl ;
120 }
121 outfile.close() ;
122 return StatusCode::SUCCESS ;
123}

Member Data Documentation

◆ m_detStore

ServiceHandle<StoreGateSvc> TRT_StrawAlignDbSvc::m_detStore
private

Definition at line 95 of file TRT_StrawAlignDbSvc.h.

◆ m_dxcontainer

const DataHandle<StrawDxContainer> TRT_StrawAlignDbSvc::m_dxcontainer
private

detector manager

Definition at line 103 of file TRT_StrawAlignDbSvc.h.

◆ m_par_dxcontainerkey

std::string TRT_StrawAlignDbSvc::m_par_dxcontainerkey
private

Definition at line 96 of file TRT_StrawAlignDbSvc.h.

◆ m_par_forcecallback

bool TRT_StrawAlignDbSvc::m_par_forcecallback
private

input text file

Definition at line 98 of file TRT_StrawAlignDbSvc.h.

◆ m_par_strawtextfile

std::string TRT_StrawAlignDbSvc::m_par_strawtextfile
private

folder name

Definition at line 97 of file TRT_StrawAlignDbSvc.h.

◆ m_streamer

ToolHandle<IAthenaOutputStreamTool> TRT_StrawAlignDbSvc::m_streamer
private

persistifiable container

Definition at line 105 of file TRT_StrawAlignDbSvc.h.

◆ m_trtid

const TRT_ID* TRT_StrawAlignDbSvc::m_trtid
private

force callback to manager

Definition at line 99 of file TRT_StrawAlignDbSvc.h.

◆ m_trtman

const InDetDD::TRT_DetectorManager* TRT_StrawAlignDbSvc::m_trtman
private

id helper

Definition at line 100 of file TRT_StrawAlignDbSvc.h.


The documentation for this class was generated from the following files: