ATLAS Offline Software
Loading...
Searching...
No Matches
Trk::AlignAlg Class Reference

#include <AlignAlg.h>

Inheritance diagram for Trk::AlignAlg:
Collaboration diagram for Trk::AlignAlg:

Public Member Functions

virtual ~AlignAlg ()
 destructor
virtual StatusCode initialize ()
 initialize method
virtual StatusCode start ()
 set up geometry and prepare the tools
virtual StatusCode execute ()
 loops over tracks in event, and accumulates information necessary for alignmnet
virtual StatusCode stop ()
 processes information accumulated in execute method to determine alignment parameters
virtual StatusCode finalize ()
 finalize method
void showStatistics ()
 dumps statistics accumulated in each event
 AthAlgorithm (const std::string &name, ISvcLocator *pSvcLocator)
 constructor
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

ToolHandle< ITrackCollectionProviderm_trackCollectionProvider
ToolHandle< IAlignTrackPreProcessorm_alignTrackPreProcessor
 Pointer to AlignTrackPreProcessor, used to select hits on tracks and/or tracks before passing to AlignTrackCreator.
ToolHandle< IAlignTrackCreatorm_alignTrackCreator
 Pointer to alignTrackCreator, used to convert Trk::Track to vector of AlignTrack.
ToolHandle< IAlignTrackDresserm_alignTrackDresser
 Pointer to alignTrackDresser, used to add residuals, derivatives, etc.
ToolHandle< IAlignToolm_alignTool
 Pointer to alignTool.
PublicToolHandle< IGeometryManagerToolm_geometryManagerTool
 Pointer to GeometryManagerTool, used to get lists of chambers for which alignment parameters will be determined.
ToolHandle< ITrkAlignDBToolm_trkAlignDBTool
 Pointer to TrkAlignDBTool, used for reading/writing alignment parameters from/to the database.
ToolHandle< IFillNtupleToolm_fillNtupleTool
 Pointer to FillNtupleTool, used to write track information to ntuple.
StringProperty m_filename {this, "FileName", "Align.root", "name of ntuple file"}
StringProperty m_filepath {this, "FilePath", "./", "path to ntuple file"}
BooleanProperty m_solveOnly
BooleanProperty m_writeNtuple
IntegerProperty m_alignSolveLevel
TFile * m_ntuple = nullptr
 output ntuple
BooleanProperty m_writeLogfile
StringProperty m_logfileName
std::ostream * m_logStream = nullptr
 logfile output stream
int m_nevents = 0
 number of processed events
int m_ntracks = 0
 number of processed tracks
int m_ntracksSel = 0
 number of selected tracks
int m_ntracksProc = 0
 number of tracks successfully processed
int m_ntracksDress = 0
 number of tracks successfully dressed
int m_ntracksAccum = 0
 number of tracks successfully accumulated
StringProperty m_alignTracksName
DataObjIDColl m_extendedExtraObjects
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 40 of file AlignAlg.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ ~AlignAlg()

AlignAlg::~AlignAlg ( )
virtual

destructor

Definition at line 17 of file AlignAlg.cxx.

18{
19
20 if (m_ntuple && m_solveOnly) {
21 ATH_MSG_DEBUG("closing file");
22 m_ntuple->Close();
23 ATH_MSG_DEBUG("file closed");
24 }
25}
#define ATH_MSG_DEBUG(x)
BooleanProperty m_solveOnly
Definition AlignAlg.h:112
TFile * m_ntuple
output ntuple
Definition AlignAlg.h:120

Member Function Documentation

◆ AthAlgorithm()

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

constructor

Definition at line 51 of file AthAlgorithm.cxx.

25 :
27{
28 // Set up to run AthAlgorithmDHUpdate in sysInitialize before
29 // merging dependency lists. This extends the output dependency
30 // list with any symlinks implied by inheritance relations.
31 m_updateDataHandles =
32 std::make_unique<AthenaBaseComps::AthAlgorithmDHUpdate>
34 std::move (m_updateDataHandles));
35}
DataObjIDColl m_extendedExtraObjects
AthCommonDataStore(const std::string &name, T... args)

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode AlignAlg::execute ( )
virtual

loops over tracks in event, and accumulates information necessary for alignmnet

Definition at line 181 of file AlignAlg.cxx.

182{
183 ATH_MSG_DEBUG("AlignAlg::execute()");
184
185 // increment number of events
186 m_nevents++;
187
188 if(m_solveOnly) {
189 if (m_nevents<=1)
190 return StatusCode::SUCCESS;
191 else {
192 // return FAILURE to make sure that the job ends after 1st event
193 msg(MSG::INFO)<<"Only doing the solving. Aborting event processing after first event."<<endmsg;
194 msg(MSG::INFO)<<"Following ERROR message is not a problem..."<<endmsg;
195 return StatusCode::FAILURE;
196 }
197 }
198
199
201 // 1. apply event selection, select hits, refit tracks
203 // m_trackSelector->cleanTracks();
204
205 // loop over tracks
206 TrackCollection * alignTracks;
207 const TrackCollection* originalTracks;
208
209 StatusCode sc = m_trackCollectionProvider->trackCollection(originalTracks);
210 if (!originalTracks || sc.isFailure()) return sc;
211
212 if(originalTracks->empty()) {
213 ATH_MSG_DEBUG("found no tracks");
214 return StatusCode::SUCCESS;
215 }
216
217 // increment number of processed tracks
218 m_ntracks += originalTracks->size();
219 ATH_MSG_DEBUG("nTracks: "<<m_ntracks);
220
221 // process track collection and create collection of AlignTracks
222 alignTracks = m_alignTrackPreProcessor->processTrackCollection(originalTracks);
223
224 // method returns zero or empty collection
225 if (!alignTracks || alignTracks->empty()) {
226 ATH_MSG_DEBUG("processTrackCollection() returned empty Track collection.");
227 return StatusCode::SUCCESS;
228 }
229
230 // increment number of selected tracks
231 m_ntracksSel += alignTracks->size();
232
233 // loop over AlignTracks and pass to AlignTrackCreator and Dresser for more processing
234 int itrk = 0;
235 for (Track* trk : *alignTracks) { // first loop over AlignTracks
236
237 ATH_MSG_DEBUG("1st loop: Processing track "<<itrk);
238
239 // each track in the collection HAS to be an AlignTrack
240 AlignTrack * alignTrack = dynamic_cast<AlignTrack*>(trk);
241 if(!alignTrack) {
242 msg(MSG::FATAL)<<"Track is not an AlignTrack. PreProcessor returns TrackCollection but"
243 <<"it has to be filled with AlignTracks. Otherwise the code doesn't work."<<endmsg;
244 return StatusCode::FAILURE;
245 }
246
247 // process AlignTrack
248 bool success = m_alignTrackCreator->processAlignTrack(alignTrack);
249 if (!success) {
250 ATH_MSG_DEBUG("processAlignTrack() returned FALSE, Skipping the track.");
251 continue;
252 }
253
255
256 // dress AlignTrack with extra info
257 success = m_alignTrackDresser->dressAlignTrack(alignTrack);
258 ATH_MSG_DEBUG("back from dressing AlignTrack");
259
260 if (!success) {
261 ATH_MSG_DEBUG("dressAlignTrack() returned FALSE, Skipping the track.");
262 continue;
263 }
264
266
267 // accumulate vertex fit information:
268 m_alignTrackPreProcessor->accumulateVTX(alignTrack);
269
270 ATH_MSG_DEBUG("back from accumulateVTX");
271
272 } // end of the first loop over AlignTracks
273
274
275 // solve existing vertices:
276 m_alignTrackPreProcessor->solveVTX();
277
278
279 for (Track* trk : *alignTracks) { // second loop over AlignTracks
280
281 ATH_MSG_DEBUG("2nd loop: Processing tracks");
282
283 // each track in the collection HAS to be an AlignTrack
284 AlignTrack * alignTrack = dynamic_cast<AlignTrack*>(trk);
285 if(!alignTrack) {
286 msg(MSG::FATAL)<<"Track is not an AlignTrack. PreProcessor returns TrackCollection but"
287 <<"it has to be filled with AlignTracks. Otherwise the code doesn't work."<<endmsg;
288 return StatusCode::FAILURE;
289 }
290
291
292 // check if the dressing was successful:
293 const Amg::SymMatrixX * ptrWeights = alignTrack->weightMatrix(); //Symmetric Matrix
294 if ( !ptrWeights ) {
295 ATH_MSG_DEBUG("dressAlignTrack failed, Skipping the track.");
296 continue;
297 }
298
299 // check if the eventual VTX solving was successful:
300 const AlignVertex * ptrVertex = alignTrack->getVtx();
301 if ( ptrVertex && (ptrVertex->type() < AlignVertex::Refitted) ) {
302 ATH_MSG_DEBUG("Vertex fit failed for this track. Skipping the track.");
303 continue;
304 }
305
306
307 // pass to AlignTool for processing of track information
308 bool success = m_alignTool->accumulate(alignTrack);
309 ATH_MSG_DEBUG("back from accumulate");
310
311 if (!success) {
312 ATH_MSG_DEBUG("accumulate() returned FALSE, Skipping the track.");
313 continue;
314 }
315
316 ATH_MSG_DEBUG("calling fillntuple::dumptrack");
317
319
320 if (m_writeNtuple)
321 m_fillNtupleTool->dumpTrack(itrk,alignTrack);
322 ATH_MSG_DEBUG("done with track "<<itrk);
323
324 } // end of the second loop over AlignTracks
325
326
327
328
329 // record the collection in the StoreGate
330 // the ownership is transferred to StoreGate so we don't delete the collection here
331 if(evtStore()->record(alignTracks,m_alignTracksName,false).isFailure()) {
332 ATH_MSG_ERROR("Unable to record "<<m_alignTracksName<<" in the StoreGate");
333 delete alignTracks;
334 alignTracks = nullptr;
335 }
336 if (alignTracks) ATH_MSG_DEBUG("Recorded \'"<<m_alignTracksName<<"\' with size "<<alignTracks->size()<<" to StoreGate");
337
338 ATH_MSG_DEBUG("returning SUCCESS");
339 return StatusCode::SUCCESS;
340}
#define endmsg
#define ATH_MSG_ERROR(x)
static Double_t sc
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
MsgStream & msg() const
size_type size() const noexcept
Returns the number of elements in the collection.
bool empty() const noexcept
Returns true if the collection is empty.
ToolHandle< ITrackCollectionProvider > m_trackCollectionProvider
Definition AlignAlg.h:70
StringProperty m_alignTracksName
Definition AlignAlg.h:134
int m_ntracksProc
number of tracks successfully processed
Definition AlignAlg.h:130
ToolHandle< IAlignTool > m_alignTool
Pointer to alignTool.
Definition AlignAlg.h:90
int m_ntracksAccum
number of tracks successfully accumulated
Definition AlignAlg.h:132
int m_nevents
number of processed events
Definition AlignAlg.h:127
int m_ntracksSel
number of selected tracks
Definition AlignAlg.h:129
BooleanProperty m_writeNtuple
Definition AlignAlg.h:114
int m_ntracks
number of processed tracks
Definition AlignAlg.h:128
ToolHandle< IAlignTrackPreProcessor > m_alignTrackPreProcessor
Pointer to AlignTrackPreProcessor, used to select hits on tracks and/or tracks before passing to Alig...
Definition AlignAlg.h:75
ToolHandle< IAlignTrackDresser > m_alignTrackDresser
Pointer to alignTrackDresser, used to add residuals, derivatives, etc.
Definition AlignAlg.h:85
ToolHandle< IFillNtupleTool > m_fillNtupleTool
Pointer to FillNtupleTool, used to write track information to ntuple.
Definition AlignAlg.h:104
int m_ntracksDress
number of tracks successfully dressed
Definition AlignAlg.h:131
ToolHandle< IAlignTrackCreator > m_alignTrackCreator
Pointer to alignTrackCreator, used to convert Trk::Track to vector of AlignTrack.
Definition AlignAlg.h:80
@ Refitted
normally refitted, without adding any pseudo-measurement
Definition AlignVertex.h:46
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > SymMatrixX
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 50 of file AthAlgorithm.cxx.

51{
52 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}

◆ finalize()

StatusCode AlignAlg::finalize ( )
virtual

finalize method

Definition at line 415 of file AlignAlg.cxx.

416{
417 ATH_MSG_INFO("AlignAlg::finalize()");
418
419 // close the logfile
420 if(m_writeLogfile) {
421 if(std::ofstream * ofs = dynamic_cast<std::ofstream *>(m_logStream)) {
422 if(ofs->is_open()) {
423 *ofs<<std::flush;
424 ofs->close();
425 }
426 delete m_logStream;
427 }
428 }
429
430 if (m_writeNtuple) {
431 ATH_MSG_INFO("closing "<<m_ntuple->GetName());
432 m_ntuple->Close();
433 }
434
435 return StatusCode::SUCCESS;
436}
#define ATH_MSG_INFO(x)
std::ostream * m_logStream
logfile output stream
Definition AlignAlg.h:125
BooleanProperty m_writeLogfile
Definition AlignAlg.h:121

◆ initialize()

StatusCode AlignAlg::initialize ( )
virtual

initialize method

Definition at line 28 of file AlignAlg.cxx.

29{
30 ATH_MSG_INFO("AlignAlg::initialize()");
31
32 // Get GeometryManagerTool
33 if ( m_geometryManagerTool.retrieve().isFailure() ) {
34 msg(MSG::FATAL)<<"Failed to retrieve tool " << m_geometryManagerTool
35 << endmsg;
36 return StatusCode::FAILURE;
37 }
38 else
39 ATH_MSG_INFO("Retrieved tool " << m_geometryManagerTool);
40
41 // some tools are not needed if only solving is done
42 if ( !m_solveOnly ) {
43
44 // get TrackCollectionProvider
45 if (m_trackCollectionProvider.retrieve().isSuccess())
47 else{
48 msg(MSG::FATAL) << "Could not get " << m_trackCollectionProvider << endmsg;
49 return StatusCode::FAILURE;
50 }
51
52 // get AlignTrackPreProcessor
53 if (m_alignTrackPreProcessor.retrieve().isSuccess())
55 else{
56 msg(MSG::FATAL) << "Could not get " << m_alignTrackPreProcessor << endmsg;
57 return StatusCode::FAILURE;
58 }
59
60 // Get AlignTrackCreator tool
61 if ( m_alignTrackCreator.retrieve().isFailure() ) {
62 msg(MSG::FATAL)<<"Failed to retrieve tool "<<m_alignTrackCreator<<endmsg;
63 return StatusCode::FAILURE;
64 }
65 else
66 ATH_MSG_INFO("Retrieved tool "<<m_alignTrackCreator);
67
68 // Get AlignTrackDresser tool
69 if ( m_alignTrackDresser.retrieve().isFailure() ) {
70 msg(MSG::FATAL)<<"Failed to retrieve tool "<<m_alignTrackDresser<<endmsg;
71 return StatusCode::FAILURE;
72 }
73 else
74 ATH_MSG_INFO("Retrieved tool "<<m_alignTrackDresser);
75
76 // Get TrkAlign::FillTrack
77 if (m_writeNtuple) {
78 if ( m_fillNtupleTool.retrieve().isFailure() ) {
79 msg(MSG::FATAL)<<"Failed to retrieve tool "<<m_fillNtupleTool<<endmsg;
80 return StatusCode::FAILURE;
81 }
82 else
83 ATH_MSG_INFO("Retrieved tool "<<m_fillNtupleTool);
84 }
85 }
86
87 // Get AlignTool tool
88 if ( m_alignTool.retrieve().isFailure() ) {
89 msg(MSG::FATAL)<<"Failed to retrieve tool "<<m_alignTool<<endmsg;
90 return StatusCode::FAILURE;
91 }
92 else
93 ATH_MSG_INFO("Retrieved tool "<<m_alignTool);
94
95 // Get TrkAlignDataBaseTool
96 if ( m_trkAlignDBTool.retrieve().isFailure() ) {
97 msg(MSG::FATAL)<<"Failed to retrieve tool "<<m_trkAlignDBTool<<endmsg;
98 return StatusCode::FAILURE;
99 }
100 else
101 ATH_MSG_INFO("Retrieved tool "<<m_trkAlignDBTool);
102
103 // Alignment Level
104 // Number of layers in the superstructures
106 msg(MSG::FATAL)<<"AlignSolveLevel could be 1, 2 or 3"<<endmsg;
107 return StatusCode::FAILURE;
108 }
109
110 // open logfile
111 if(m_writeLogfile) {
112 std::ostream * out = &std::cout;
113 std::ofstream * ofile = new std::ofstream(m_logfileName.value().c_str());
114 if(!ofile->is_open()) {
115 msg(MSG::ERROR)<<"Couldn't open logfile. Writing to standard output."<<endmsg;
116 delete ofile;
117 }
118 else
119 out = ofile;
120
122
123 // set logStream in the tools
124 m_geometryManagerTool->setLogStream(m_logStream);
125 m_alignTool->setLogStream(m_logStream);
126 m_trkAlignDBTool->setLogStream(m_logStream);
127 if( !m_solveOnly ) {
130 m_alignTrackCreator->setLogStream(m_logStream);
131 m_alignTrackDresser->setLogStream(m_logStream);
132 if (m_writeNtuple)
133 m_fillNtupleTool->setLogStream(m_logStream);
134 }
135 }
136
137 return StatusCode::SUCCESS;
138}
StringProperty m_logfileName
Definition AlignAlg.h:123
PublicToolHandle< IGeometryManagerTool > m_geometryManagerTool
Pointer to GeometryManagerTool, used to get lists of chambers for which alignment parameters will be ...
Definition AlignAlg.h:95
ToolHandle< ITrkAlignDBTool > m_trkAlignDBTool
Pointer to TrkAlignDBTool, used for reading/writing alignment parameters from/to the database.
Definition AlignAlg.h:100
IntegerProperty m_alignSolveLevel
Definition AlignAlg.h:117

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ msg()

MsgStream & AthCommonMsg< Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ showStatistics()

void Trk::AlignAlg::showStatistics ( )

dumps statistics accumulated in each event

◆ start()

StatusCode AlignAlg::start ( )
virtual

set up geometry and prepare the tools

Definition at line 141 of file AlignAlg.cxx.

142{
143 ATH_MSG_DEBUG("AlignAlg::start()");
144
145 if (m_writeNtuple) {
146 m_ntuple = new TFile((m_filepath.value()+m_filename.value()).c_str(),"RECREATE");
147 // set the ntuple points of the tools
151 m_alignTool->setNtuple(m_ntuple);
152 m_trkAlignDBTool->setNtuple(m_ntuple);
153 m_fillNtupleTool->setNtuple(m_ntuple);
154 }
155
156 ATH_MSG_DEBUG("reading geometry");
157 int NDoF = m_geometryManagerTool->ReadGeometry(m_alignSolveLevel);
158 ATH_MSG_DEBUG("read geometry, "<<NDoF<<" alignment parameters");
159
160 m_geometryManagerTool->PrintModPositions();
161
162 // fix pathname (used to be m_pathbin+m+prefixName)
163 // m_geometryManagerTool->StoreModPositions(pathname);
164
165 StatusCode sc = m_alignTool->firstEventInitialize();
166
167 if (sc != StatusCode::SUCCESS) {
168 msg(MSG::FATAL)<<"problem with alignTool->firstEventInitialize()"<<endmsg;
169 return StatusCode::FAILURE;
170 }
171
172 if(m_solveOnly) {
173 ATH_MSG_DEBUG("getting data from files");
174 m_alignTool->accumulateFromFiles();
175 }
176
177 return StatusCode::SUCCESS;
178}
StringProperty m_filename
Definition AlignAlg.h:109
StringProperty m_filepath
Definition AlignAlg.h:110

◆ stop()

StatusCode AlignAlg::stop ( )
virtual

processes information accumulated in execute method to determine alignment parameters

Definition at line 343 of file AlignAlg.cxx.

344{
345 ATH_MSG_INFO("AlignAlg::stop()");
346
347 if(m_logStream && !m_solveOnly) {
348 *m_logStream<<"*************************************************************"<<std::endl;
349 *m_logStream<<"****** Alignment Job summary ******"<<std::endl;
350 *m_logStream<<"*************************************************************"<<std::endl;
351 *m_logStream<<"*"<<std::endl;
352 *m_logStream<<"* number of processed events: "<<m_nevents<<std::endl;
353 *m_logStream<<"* number of processed tracks: "<<m_ntracks<<std::endl;
354 *m_logStream<<"* number of selected tracks: "<<m_ntracksSel<<std::endl;
355 *m_logStream<<"* number of tracks processed: "<<m_ntracksProc<<std::endl;
356 *m_logStream<<"* number of tracks dressed: "<<m_ntracksDress<<std::endl;
357 *m_logStream<<"* number of tracks accumulated: "<<m_ntracksAccum<<std::endl;
358
359 *m_logStream<<"*"<<std::endl;
360
361 m_alignTrackPreProcessor->printSummary();
362 m_trackCollectionProvider->printSummary();
363 }
364
365 // fill ntuple for all tools
366 if (m_writeNtuple) {
367 ATH_MSG_INFO("calling alignTool->fillNtuple()");
368 if(m_alignTool->fillNtuple().isFailure()) {
369 msg(MSG::ERROR)<<"problem with alignTool fillNtuple()!"<<endmsg;
370 return StatusCode::FAILURE;
371 }
372 ATH_MSG_INFO("calling fillNtupleTool->fillNtuple()");
373 if(m_fillNtupleTool->fillNtuple().isFailure()) {
374 msg(MSG::ERROR)<<"problem with fillNtupleTool fillNtuple()!"<<endmsg;
375 return StatusCode::FAILURE;
376 }
377
378 ATH_MSG_INFO("calling alignTrackPreProcessor->fillNtuple()");
379 if(m_alignTrackPreProcessor->fillNtuple().isFailure()) {
380 msg(MSG::ERROR)<<"problem with alignTrackPreProcessor fillNtuple()!"<<endmsg;
381 return StatusCode::FAILURE;
382 }
383
384 ATH_MSG_INFO("calling trackCollectionProvider->fillNtuple()");
385 if(m_trackCollectionProvider->fillNtuple().isFailure()) {
386 msg(MSG::ERROR)<<"problem with trackCollectionProvider fillNtuple()!"<<endmsg;
387 return StatusCode::FAILURE;
388 }
389 }
390
391 if(!m_solveOnly && m_ntracksSel==0) {
392 msg(MSG::WARNING)<<"No tracks passed track selection. No solving."<<endmsg;
393 return StatusCode::SUCCESS;
394 }
395
396 ATH_MSG_INFO("calling trkAlignDBTool->preSolve()");
397 if (m_trkAlignDBTool->preSolve().isFailure()) {
398 msg(MSG::FATAL)<<"failure in ITrkAlignDBTool->preSolve()"<<endmsg;
399 return StatusCode::FAILURE;
400 }
401
402 ATH_MSG_INFO("calling alignTool->solve()");
403 if (m_alignTool->solve().isFailure()) {
404 msg(MSG::FATAL)<<"failure in IAlignTool->solve()"<<endmsg;
405 return StatusCode::FAILURE;
406 }
407
408 ATH_MSG_INFO("calling trkAlignDBTool->writeAlignPar()");
409 m_trkAlignDBTool->writeAlignPar();
410
411 return StatusCode::SUCCESS;
412}

◆ sysInitialize()

StatusCode AthAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.

Definition at line 66 of file AthAlgorithm.cxx.

66 {
68
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
87 return sc;
88}
#define ATH_MSG_WARNING(x)
virtual StatusCode sysInitialize() override
Override sysInitialize.
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_alignSolveLevel

IntegerProperty Trk::AlignAlg::m_alignSolveLevel
private
Initial value:
{this, "AlignSolveLevel", 3,
"Set the Alignment Solve Level"}

Definition at line 117 of file AlignAlg.h.

117 {this, "AlignSolveLevel", 3,
118 "Set the Alignment Solve Level"};

◆ m_alignTool

ToolHandle<IAlignTool> Trk::AlignAlg::m_alignTool
private
Initial value:
{
this, "AlignTool", "Trk::GlobalChi2AlignTool",
"alignment algorithm-specific tool"}

Pointer to alignTool.

Definition at line 90 of file AlignAlg.h.

90 {
91 this, "AlignTool", "Trk::GlobalChi2AlignTool",
92 "alignment algorithm-specific tool"};

◆ m_alignTrackCreator

ToolHandle<IAlignTrackCreator> Trk::AlignAlg::m_alignTrackCreator
private
Initial value:
{
this, "AlignTrackCreator", "Trk::AlignTrackCreator",
"tool for creating AlignTSOSCollection to store on AlignTrack"}

Pointer to alignTrackCreator, used to convert Trk::Track to vector of AlignTrack.

Definition at line 80 of file AlignAlg.h.

80 {
81 this, "AlignTrackCreator", "Trk::AlignTrackCreator",
82 "tool for creating AlignTSOSCollection to store on AlignTrack"};

◆ m_alignTrackDresser

ToolHandle<IAlignTrackDresser> Trk::AlignAlg::m_alignTrackDresser
private
Initial value:
{
this, "AlignTrackDresser", "Trk::AlignTrackDresser",
"tool for dressing AlignTrack with residuals, derivatives, etc."}

Pointer to alignTrackDresser, used to add residuals, derivatives, etc.

to vector of AlignTrack

Definition at line 85 of file AlignAlg.h.

85 {
86 this, "AlignTrackDresser", "Trk::AlignTrackDresser",
87 "tool for dressing AlignTrack with residuals, derivatives, etc."};

◆ m_alignTrackPreProcessor

ToolHandle<IAlignTrackPreProcessor> Trk::AlignAlg::m_alignTrackPreProcessor
private
Initial value:
{
this, "AlignTrackPreProcessor", "Trk::AlignTrackPreProcessor",
"tool for converting Trk::Track to AlignTrack after processing if necessary"}

Pointer to AlignTrackPreProcessor, used to select hits on tracks and/or tracks before passing to AlignTrackCreator.

Definition at line 75 of file AlignAlg.h.

75 {
76 this, "AlignTrackPreProcessor", "Trk::AlignTrackPreProcessor",
77 "tool for converting Trk::Track to AlignTrack after processing if necessary"};

◆ m_alignTracksName

StringProperty Trk::AlignAlg::m_alignTracksName
private
Initial value:
{this, "AlignTracksName", "AlignTracks",
"name of the AlignTrack collection in the StoreGate"}

Definition at line 134 of file AlignAlg.h.

134 {this, "AlignTracksName", "AlignTracks",
135 "name of the AlignTrack collection in the StoreGate"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 79 of file AthAlgorithm.h.

◆ m_filename

StringProperty Trk::AlignAlg::m_filename {this, "FileName", "Align.root", "name of ntuple file"}
private

Definition at line 109 of file AlignAlg.h.

109{this, "FileName", "Align.root", "name of ntuple file"};

◆ m_filepath

StringProperty Trk::AlignAlg::m_filepath {this, "FilePath", "./", "path to ntuple file"}
private

Definition at line 110 of file AlignAlg.h.

110{this, "FilePath", "./", "path to ntuple file"};

◆ m_fillNtupleTool

ToolHandle<IFillNtupleTool> Trk::AlignAlg::m_fillNtupleTool
private
Initial value:
{
this, "FillNtupleTool", "",
"tool for storing Trk::Track information into the ntuple"}

Pointer to FillNtupleTool, used to write track information to ntuple.

Definition at line 104 of file AlignAlg.h.

104 {
105 this, "FillNtupleTool", "",
106 "tool for storing Trk::Track information into the ntuple"};

◆ m_geometryManagerTool

PublicToolHandle<IGeometryManagerTool> Trk::AlignAlg::m_geometryManagerTool
private
Initial value:
{
this, "GeometryManagerTool", "InDet::InDetGeometryManagerTool",
"tool for configuring geometry"}

Pointer to GeometryManagerTool, used to get lists of chambers for which alignment parameters will be determined.

Definition at line 95 of file AlignAlg.h.

95 {
96 this, "GeometryManagerTool", "InDet::InDetGeometryManagerTool",
97 "tool for configuring geometry"};

◆ m_logfileName

StringProperty Trk::AlignAlg::m_logfileName
private
Initial value:
{this, "LogFileName", "alignlogfile.txt",
"name of the logfile"}

Definition at line 123 of file AlignAlg.h.

123 {this, "LogFileName", "alignlogfile.txt",
124 "name of the logfile"};

◆ m_logStream

std::ostream* Trk::AlignAlg::m_logStream = nullptr
private

logfile output stream

Definition at line 125 of file AlignAlg.h.

◆ m_nevents

int Trk::AlignAlg::m_nevents = 0
private

number of processed events

Definition at line 127 of file AlignAlg.h.

◆ m_ntracks

int Trk::AlignAlg::m_ntracks = 0
private

number of processed tracks

Definition at line 128 of file AlignAlg.h.

◆ m_ntracksAccum

int Trk::AlignAlg::m_ntracksAccum = 0
private

number of tracks successfully accumulated

Definition at line 132 of file AlignAlg.h.

◆ m_ntracksDress

int Trk::AlignAlg::m_ntracksDress = 0
private

number of tracks successfully dressed

Definition at line 131 of file AlignAlg.h.

◆ m_ntracksProc

int Trk::AlignAlg::m_ntracksProc = 0
private

number of tracks successfully processed

Definition at line 130 of file AlignAlg.h.

◆ m_ntracksSel

int Trk::AlignAlg::m_ntracksSel = 0
private

number of selected tracks

Definition at line 129 of file AlignAlg.h.

◆ m_ntuple

TFile* Trk::AlignAlg::m_ntuple = nullptr
private

output ntuple

Definition at line 120 of file AlignAlg.h.

◆ m_solveOnly

BooleanProperty Trk::AlignAlg::m_solveOnly
private
Initial value:
{this, "SolveOnly", false,
"only do the solving (accumulate from binaries)"}

Definition at line 112 of file AlignAlg.h.

112 {this, "SolveOnly", false,
113 "only do the solving (accumulate from binaries)"};

◆ m_trackCollectionProvider

ToolHandle<ITrackCollectionProvider> Trk::AlignAlg::m_trackCollectionProvider
private
Initial value:
{
this, "TrackCollectionProvider", "Trk::TrackCollectionProvider",
"tool for getting track collection from StoreGate"}

Definition at line 70 of file AlignAlg.h.

70 {
71 this, "TrackCollectionProvider", "Trk::TrackCollectionProvider",
72 "tool for getting track collection from StoreGate"};

◆ m_trkAlignDBTool

ToolHandle<ITrkAlignDBTool> Trk::AlignAlg::m_trkAlignDBTool
private
Initial value:
{
this, "AlignDBTool", "Trk::TrkAlignDBTool", "tool for handling DB stuff"}

Pointer to TrkAlignDBTool, used for reading/writing alignment parameters from/to the database.

Definition at line 100 of file AlignAlg.h.

100 {
101 this, "AlignDBTool", "Trk::TrkAlignDBTool", "tool for handling DB stuff"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_writeLogfile

BooleanProperty Trk::AlignAlg::m_writeLogfile
private
Initial value:
{this, "WriteLogFile", true,
"write a logfile for solving"}

Definition at line 121 of file AlignAlg.h.

121 {this, "WriteLogFile", true,
122 "write a logfile for solving"};

◆ m_writeNtuple

BooleanProperty Trk::AlignAlg::m_writeNtuple
private
Initial value:
{this, "WriteNtuple", true,
"write track and event information to ntuple"}

Definition at line 114 of file AlignAlg.h.

114 {this, "WriteNtuple", true,
115 "write track and event information to ntuple"};

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