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 const EventContext& ctx = Gaudi::Hive::currentContext();
186
187 // increment number of events
188 m_nevents++;
189
190 if(m_solveOnly) {
191 if (m_nevents<=1)
192 return StatusCode::SUCCESS;
193 else {
194 // return FAILURE to make sure that the job ends after 1st event
195 msg(MSG::INFO)<<"Only doing the solving. Aborting event processing after first event."<<endmsg;
196 msg(MSG::INFO)<<"Following ERROR message is not a problem..."<<endmsg;
197 return StatusCode::FAILURE;
198 }
199 }
200
201
203 // 1. apply event selection, select hits, refit tracks
205 // m_trackSelector->cleanTracks();
206
207 // loop over tracks
208 TrackCollection * alignTracks;
209 const TrackCollection* originalTracks;
210
211 StatusCode sc = m_trackCollectionProvider->trackCollection(originalTracks);
212 if (!originalTracks || sc.isFailure()) return sc;
213
214 if(originalTracks->empty()) {
215 ATH_MSG_DEBUG("found no tracks");
216 return StatusCode::SUCCESS;
217 }
218
219 // increment number of processed tracks
220 m_ntracks += originalTracks->size();
221 ATH_MSG_DEBUG("nTracks: "<<m_ntracks);
222
223 // process track collection and create collection of AlignTracks
224 alignTracks = m_alignTrackPreProcessor->processTrackCollection(originalTracks);
225
226 // method returns zero or empty collection
227 if (!alignTracks || alignTracks->empty()) {
228 ATH_MSG_DEBUG("processTrackCollection() returned empty Track collection.");
229 return StatusCode::SUCCESS;
230 }
231
232 // increment number of selected tracks
233 m_ntracksSel += alignTracks->size();
234
235 // loop over AlignTracks and pass to AlignTrackCreator and Dresser for more processing
236 int itrk = 0;
237 for (Track* trk : *alignTracks) { // first loop over AlignTracks
238
239 ATH_MSG_DEBUG("1st loop: Processing track "<<itrk);
240
241 // each track in the collection HAS to be an AlignTrack
242 AlignTrack * alignTrack = dynamic_cast<AlignTrack*>(trk);
243 if(!alignTrack) {
244 msg(MSG::FATAL)<<"Track is not an AlignTrack. PreProcessor returns TrackCollection but"
245 <<"it has to be filled with AlignTracks. Otherwise the code doesn't work."<<endmsg;
246 return StatusCode::FAILURE;
247 }
248
249 // process AlignTrack
250 bool success = m_alignTrackCreator->processAlignTrack(alignTrack);
251 if (!success) {
252 ATH_MSG_DEBUG("processAlignTrack() returned FALSE, Skipping the track.");
253 continue;
254 }
255
257
258 // dress AlignTrack with extra info
259 success = m_alignTrackDresser->dressAlignTrack(alignTrack);
260 ATH_MSG_DEBUG("back from dressing AlignTrack");
261
262 if (!success) {
263 ATH_MSG_DEBUG("dressAlignTrack() returned FALSE, Skipping the track.");
264 continue;
265 }
266
268
269 // accumulate vertex fit information:
270 m_alignTrackPreProcessor->accumulateVTX(alignTrack);
271
272 ATH_MSG_DEBUG("back from accumulateVTX");
273
274 } // end of the first loop over AlignTracks
275
276
277 // solve existing vertices:
278 m_alignTrackPreProcessor->solveVTX();
279
280
281 for (Track* trk : *alignTracks) { // second loop over AlignTracks
282
283 ATH_MSG_DEBUG("2nd loop: Processing tracks");
284
285 // each track in the collection HAS to be an AlignTrack
286 AlignTrack * alignTrack = dynamic_cast<AlignTrack*>(trk);
287 if(!alignTrack) {
288 msg(MSG::FATAL)<<"Track is not an AlignTrack. PreProcessor returns TrackCollection but"
289 <<"it has to be filled with AlignTracks. Otherwise the code doesn't work."<<endmsg;
290 return StatusCode::FAILURE;
291 }
292
293
294 // check if the dressing was successful:
295 const Amg::SymMatrixX * ptrWeights = alignTrack->weightMatrix(); //Symmetric Matrix
296 if ( !ptrWeights ) {
297 ATH_MSG_DEBUG("dressAlignTrack failed, Skipping the track.");
298 continue;
299 }
300
301 // check if the eventual VTX solving was successful:
302 const AlignVertex * ptrVertex = alignTrack->getVtx();
303 if ( ptrVertex && (ptrVertex->type() < AlignVertex::Refitted) ) {
304 ATH_MSG_DEBUG("Vertex fit failed for this track. Skipping the track.");
305 continue;
306 }
307
308
309 // pass to AlignTool for processing of track information
310 bool success = m_alignTool->accumulate(alignTrack);
311 ATH_MSG_DEBUG("back from accumulate");
312
313 if (!success) {
314 ATH_MSG_DEBUG("accumulate() returned FALSE, Skipping the track.");
315 continue;
316 }
317
318 ATH_MSG_DEBUG("calling fillntuple::dumptrack");
319
321
322 if (m_writeNtuple)
323 m_fillNtupleTool->dumpTrack(ctx, itrk,alignTrack);
324 ATH_MSG_DEBUG("done with track "<<itrk);
325
326 } // end of the second loop over AlignTracks
327
328
329
330
331 // record the collection in the StoreGate
332 // the ownership is transferred to StoreGate so we don't delete the collection here
333 if(evtStore()->record(alignTracks,m_alignTracksName,false).isFailure()) {
334 ATH_MSG_ERROR("Unable to record "<<m_alignTracksName<<" in the StoreGate");
335 delete alignTracks;
336 alignTracks = nullptr;
337 }
338 if (alignTracks) ATH_MSG_DEBUG("Recorded \'"<<m_alignTracksName<<"\' with size "<<alignTracks->size()<<" to StoreGate");
339
340 ATH_MSG_DEBUG("returning SUCCESS");
341 return StatusCode::SUCCESS;
342}
#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 417 of file AlignAlg.cxx.

418{
419 ATH_MSG_INFO("AlignAlg::finalize()");
420
421 // close the logfile
422 if(m_writeLogfile) {
423 if(std::ofstream * ofs = dynamic_cast<std::ofstream *>(m_logStream)) {
424 if(ofs->is_open()) {
425 *ofs<<std::flush;
426 ofs->close();
427 }
428 delete m_logStream;
429 }
430 }
431
432 if (m_writeNtuple) {
433 ATH_MSG_INFO("closing "<<m_ntuple->GetName());
434 m_ntuple->Close();
435 }
436
437 return StatusCode::SUCCESS;
438}
#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 345 of file AlignAlg.cxx.

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

◆ 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: