ATLAS Offline Software
AlignAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
8 
14 
17 
18 #include "TFile.h"
19 
20 namespace Trk {
21 
22 //___________________________________________________________________________
23 AlignAlg::AlignAlg(const std::string& name, ISvcLocator* pSvcLocator)
24  : AthAlgorithm (name, pSvcLocator)
25  , m_trackCollectionProvider("Trk::TrackCollectionProvider",this)
26  , m_alignTrackPreProcessor("Trk::AlignTrackPreProcessor",this)
27  , m_alignTrackCreator("Trk::AlignTrackCreator",this)
28  , m_alignTrackDresser("Trk::AlignTrackDresser",this)
29  , m_alignTool("Trk::GlobalChi2AlignTool",this)
30  , m_geometryManagerTool("Muon::MuonGeometryManagerTool") // use as public tool
31  , m_trkAlignDBTool("Trk::TrkAlignDBTool", this)
32  , m_fillNtupleTool("",this)
33  , m_nDoF(-1)
34  , m_ntuple(nullptr)
35  , m_logStream(nullptr)
36  , m_nevents(0)
37  , m_ntracks(0)
38  , m_ntracksSel(0)
39  , m_ntracksProc(0)
40  , m_ntracksDress(0)
41  , m_ntracksAccum(0)
42 {
43 
44  // TrkGlobalChi2AlignTools
45  declareProperty("AlignDBTool", m_trkAlignDBTool,
46  "tool for handling DB stuff ");
47 
48  declareProperty("TrackCollectionProvider", m_trackCollectionProvider,
49  "tool for getting track collection from StoreGate");
50 
51  declareProperty("AlignTrackPreProcessor", m_alignTrackPreProcessor,
52  "tool for converting Trk::Track to AlignTrack after processing if necessary");
53 
54  declareProperty("AlignTrackCreator", m_alignTrackCreator,
55  "tool for creating AlignTSOSCollection to store on AlignTrack");
56 
57  declareProperty("AlignTrackDresser", m_alignTrackDresser,
58  "tool for dressing AlignTrack with residuals, derivatives, etc.");
59 
60  declareProperty("AlignTool", m_alignTool,
61  "alignment algorithm-specific tool");
62 
63  declareProperty("GeometryManagerTool", m_geometryManagerTool,
64  "tool for configuring geometry");
65 
66  declareProperty("FillNtupleTool", m_fillNtupleTool,
67  "tool for storing Trk::Track information into the ntuple");
68 
69  // processing options
70  declareProperty("WriteNtuple", m_writeNtuple = true );
71  declareProperty("FileName", m_filename = "Align.root" );
72  declareProperty("FilePath", m_filepath = "./" );
73 
74  declareProperty("AlignSolveLevel", m_alignSolveLevel = 3 );
75 
76  declareProperty("SolveOnly", m_solveOnly = false );
77 
78  declareProperty("WriteLogFile", m_writeLogfile = true );
79  declareProperty("LogFileName", m_logfileName = "alignlogfile.txt" );
80 
81  declareProperty("AlignTracksName", m_alignTracksName = "AlignTracks" );
82 
83 }
84 
85 //___________________________________________________________________________
87 {
88 
89  if (m_ntuple && m_solveOnly) {
90  ATH_MSG_DEBUG("closing file");
91  m_ntuple->Close();
92  ATH_MSG_DEBUG("file closed");
93  }
94 }
95 
96 //___________________________________________________________________________
98 {
99  ATH_MSG_INFO("AlignAlg::initialize()");
100 
101  // Get GeometryManagerTool
102  if ( m_geometryManagerTool.retrieve().isFailure() ) {
103  msg(MSG::FATAL)<<"Failed to retrieve tool " << m_geometryManagerTool
104  << endmsg;
105  return StatusCode::FAILURE;
106  }
107  else
108  ATH_MSG_INFO("Retrieved tool " << m_geometryManagerTool);
109 
110  // some tools are not needed if only solving is done
111  if ( !m_solveOnly ) {
112 
113  // get TrackCollectionProvider
114  if (m_trackCollectionProvider.retrieve().isSuccess())
115  ATH_MSG_INFO("Retrieved " << m_trackCollectionProvider);
116  else{
117  msg(MSG::FATAL) << "Could not get " << m_trackCollectionProvider << endmsg;
118  return StatusCode::FAILURE;
119  }
120 
121  // get AlignTrackPreProcessor
122  if (m_alignTrackPreProcessor.retrieve().isSuccess())
123  ATH_MSG_INFO("Retrieved " << m_alignTrackPreProcessor);
124  else{
125  msg(MSG::FATAL) << "Could not get " << m_alignTrackPreProcessor << endmsg;
126  return StatusCode::FAILURE;
127  }
128 
129  // Get AlignTrackCreator tool
130  if ( m_alignTrackCreator.retrieve().isFailure() ) {
131  msg(MSG::FATAL)<<"Failed to retrieve tool "<<m_alignTrackCreator<<endmsg;
132  return StatusCode::FAILURE;
133  }
134  else
135  ATH_MSG_INFO("Retrieved tool "<<m_alignTrackCreator);
136 
137  // Get AlignTrackDresser tool
138  if ( m_alignTrackDresser.retrieve().isFailure() ) {
139  msg(MSG::FATAL)<<"Failed to retrieve tool "<<m_alignTrackDresser<<endmsg;
140  return StatusCode::FAILURE;
141  }
142  else
143  ATH_MSG_INFO("Retrieved tool "<<m_alignTrackDresser);
144 
145  // Get TrkAlign::FillTrack
146  if (m_writeNtuple) {
147  if ( m_fillNtupleTool.retrieve().isFailure() ) {
148  msg(MSG::FATAL)<<"Failed to retrieve tool "<<m_fillNtupleTool<<endmsg;
149  return StatusCode::FAILURE;
150  }
151  else
152  ATH_MSG_INFO("Retrieved tool "<<m_fillNtupleTool);
153  }
154  }
155 
156  // Get AlignTool tool
157  if ( m_alignTool.retrieve().isFailure() ) {
158  msg(MSG::FATAL)<<"Failed to retrieve tool "<<m_alignTool<<endmsg;
159  return StatusCode::FAILURE;
160  }
161  else
162  ATH_MSG_INFO("Retrieved tool "<<m_alignTool);
163 
164  // Get TrkAlignDataBaseTool
165  if ( m_trkAlignDBTool.retrieve().isFailure() ) {
166  msg(MSG::FATAL)<<"Failed to retrieve tool "<<m_trkAlignDBTool<<endmsg;
167  return StatusCode::FAILURE;
168  }
169  else
170  ATH_MSG_INFO("Retrieved tool "<<m_trkAlignDBTool);
171 
172  // Alignment Level
173  // Number of layers in the superstructures
175  msg(MSG::FATAL)<<"AlignSolveLevel could be 1, 2 or 3"<<endmsg;
176  return StatusCode::FAILURE;
177  }
178 
179  // open logfile
180  if(m_writeLogfile) {
181  std::ostream * out = &std::cout;
182  std::ofstream * ofile = new std::ofstream(m_logfileName.c_str());
183  if(!ofile->is_open()) {
184  msg(MSG::ERROR)<<"Couldn't open logfile. Writing to standard output."<<endmsg;
185  delete ofile;
186  }
187  else
188  out = ofile;
189 
190  m_logStream = out;
191 
192  // set logStream in the tools
193  m_geometryManagerTool->setLogStream(m_logStream);
194  m_alignTool->setLogStream(m_logStream);
195  m_trkAlignDBTool->setLogStream(m_logStream);
196  if( !m_solveOnly ) {
197  m_trackCollectionProvider->setLogStream(m_logStream);
198  m_alignTrackPreProcessor->setLogStream(m_logStream);
199  m_alignTrackCreator->setLogStream(m_logStream);
200  m_alignTrackDresser->setLogStream(m_logStream);
201  if (m_writeNtuple)
202  m_fillNtupleTool->setLogStream(m_logStream);
203  }
204  }
205 
206  return StatusCode::SUCCESS;
207 }
208 
209 //___________________________________________________________________________
211 {
212  ATH_MSG_DEBUG("AlignAlg::start()");
213 
214  if (m_writeNtuple) {
215  m_ntuple = new TFile((m_filepath+m_filename).c_str(),"RECREATE");
216  // set the ntuple points of the tools
217  m_geometryManagerTool->setNtuple(m_ntuple);
220  m_alignTool->setNtuple(m_ntuple);
221  m_trkAlignDBTool->setNtuple(m_ntuple);
222  m_fillNtupleTool->setNtuple(m_ntuple);
223  }
224 
225  ATH_MSG_DEBUG("reading geometry");
226  int NDoF = m_geometryManagerTool->ReadGeometry(m_alignSolveLevel);
227  ATH_MSG_DEBUG("read geometry, "<<NDoF<<" alignment parameters");
228 
229  m_geometryManagerTool->PrintModPositions();
230 
231  // fix pathname (used to be m_pathbin+m+prefixName)
232  // m_geometryManagerTool->StoreModPositions(pathname);
233 
234  StatusCode sc = m_alignTool->firstEventInitialize();
235 
236  if (sc != StatusCode::SUCCESS) {
237  msg(MSG::FATAL)<<"problem with alignTool->firstEventInitialize()"<<endmsg;
238  return StatusCode::FAILURE;
239  }
240 
241  if(m_solveOnly) {
242  ATH_MSG_DEBUG("getting data from files");
243  m_alignTool->accumulateFromFiles();
244  }
245 
246  return StatusCode::SUCCESS;
247 }
248 
249 //___________________________________________________________________________
251 {
252  ATH_MSG_DEBUG("AlignAlg::execute()");
253 
254  // increment number of events
255  m_nevents++;
256 
257  if(m_solveOnly) {
258  if (m_nevents<=1)
259  return StatusCode::SUCCESS;
260  else {
261  // return FAILURE to make sure that the job ends after 1st event
262  msg(MSG::INFO)<<"Only doing the solving. Aborting event processing after first event."<<endmsg;
263  msg(MSG::INFO)<<"Following ERROR message is not a problem..."<<endmsg;
264  return StatusCode::FAILURE;
265  }
266  }
267 
268 
270  // 1. apply event selection, select hits, refit tracks
272  // m_trackSelector->cleanTracks();
273 
274  // loop over tracks
275  TrackCollection * alignTracks;
276  const TrackCollection* originalTracks;
277 
278  StatusCode sc = m_trackCollectionProvider->trackCollection(originalTracks);
279  if (!originalTracks || sc.isFailure()) return sc;
280 
281  if(originalTracks->empty()) {
282  ATH_MSG_DEBUG("found no tracks");
283  return StatusCode::SUCCESS;
284  }
285 
286  // increment number of processed tracks
287  m_ntracks += originalTracks->size();
288  ATH_MSG_DEBUG("nTracks: "<<m_ntracks);
289 
290  // process track collection and create collection of AlignTracks
291  alignTracks = m_alignTrackPreProcessor->processTrackCollection(originalTracks);
292 
293  // method returns zero or empty collection
294  if (!alignTracks || alignTracks->empty()) {
295  ATH_MSG_DEBUG("processTrackCollection() returned empty Track collection.");
296  return StatusCode::SUCCESS;
297  }
298 
299  // increment number of selected tracks
300  m_ntracksSel += alignTracks->size();
301 
302  // loop over AlignTracks and pass to AlignTrackCreator and Dresser for more processing
303  int itrk = 0;
304  for (Track* trk : *alignTracks) { // first loop over AlignTracks
305 
306  ATH_MSG_DEBUG("1st loop: Processing track "<<itrk);
307 
308  // each track in the collection HAS to be an AlignTrack
309  AlignTrack * alignTrack = dynamic_cast<AlignTrack*>(trk);
310  if(!alignTrack) {
311  msg(MSG::FATAL)<<"Track is not an AlignTrack. PreProcessor returns TrackCollection but"
312  <<"it has to be filled with AlignTracks. Otherwise the code doesn't work."<<endmsg;
313  return StatusCode::FAILURE;
314  }
315 
316  // process AlignTrack
317  bool success = m_alignTrackCreator->processAlignTrack(alignTrack);
318  if (!success) {
319  ATH_MSG_DEBUG("processAlignTrack() returned FALSE, Skipping the track.");
320  continue;
321  }
322 
323  m_ntracksProc++;
324 
325  // dress AlignTrack with extra info
326  success = m_alignTrackDresser->dressAlignTrack(alignTrack);
327  ATH_MSG_DEBUG("back from dressing AlignTrack");
328 
329  if (!success) {
330  ATH_MSG_DEBUG("dressAlignTrack() returned FALSE, Skipping the track.");
331  continue;
332  }
333 
334  m_ntracksDress++;
335 
336  // accumulate vertex fit information:
337  m_alignTrackPreProcessor->accumulateVTX(alignTrack);
338 
339  ATH_MSG_DEBUG("back from accumulateVTX");
340 
341  } // end of the first loop over AlignTracks
342 
343 
344  // solve existing vertices:
345  m_alignTrackPreProcessor->solveVTX();
346 
347 
348  for (Track* trk : *alignTracks) { // second loop over AlignTracks
349 
350  ATH_MSG_DEBUG("2nd loop: Processing tracks");
351 
352  // each track in the collection HAS to be an AlignTrack
353  AlignTrack * alignTrack = dynamic_cast<AlignTrack*>(trk);
354  if(!alignTrack) {
355  msg(MSG::FATAL)<<"Track is not an AlignTrack. PreProcessor returns TrackCollection but"
356  <<"it has to be filled with AlignTracks. Otherwise the code doesn't work."<<endmsg;
357  return StatusCode::FAILURE;
358  }
359 
360 
361  // check if the dressing was successful:
362  const Amg::SymMatrixX * ptrWeights = alignTrack->weightMatrix(); //Symmetric Matrix
363  if ( !ptrWeights ) {
364  ATH_MSG_DEBUG("dressAlignTrack failed, Skipping the track.");
365  continue;
366  }
367 
368  // check if the eventual VTX solving was successful:
369  const AlignVertex * ptrVertex = alignTrack->getVtx();
370  if ( ptrVertex && (ptrVertex->type() < AlignVertex::Refitted) ) {
371  ATH_MSG_DEBUG("Vertex fit failed for this track. Skipping the track.");
372  continue;
373  }
374 
375 
376  // pass to AlignTool for processing of track information
377  bool success = m_alignTool->accumulate(alignTrack);
378  ATH_MSG_DEBUG("back from accumulate");
379 
380  if (!success) {
381  ATH_MSG_DEBUG("accumulate() returned FALSE, Skipping the track.");
382  continue;
383  }
384 
385  ATH_MSG_DEBUG("calling fillntuple::dumptrack");
386 
387  m_ntracksAccum++;
388 
389  if (m_writeNtuple)
390  m_fillNtupleTool->dumpTrack(itrk,alignTrack);
391  ATH_MSG_DEBUG("done with track "<<itrk);
392 
393  } // end of the second loop over AlignTracks
394 
395 
396 
397 
398  // record the collection in the StoreGate
399  // the ownership is transferred to StoreGate so we don't delete the collection here
400  if(evtStore()->record(alignTracks,m_alignTracksName,false).isFailure()) {
401  ATH_MSG_ERROR("Unable to record "<<m_alignTracksName<<" in the StoreGate");
402  delete alignTracks;
403  alignTracks = nullptr;
404  }
405  if (alignTracks) ATH_MSG_DEBUG("Recorded \'"<<m_alignTracksName<<"\' with size "<<alignTracks->size()<<" to StoreGate");
406 
407  ATH_MSG_DEBUG("returning SUCCESS");
408  return StatusCode::SUCCESS;
409 }
410 
411 //___________________________________________________________________________
413 {
414  ATH_MSG_INFO("AlignAlg::stop()");
415 
416  if(m_logStream && !m_solveOnly) {
417  *m_logStream<<"*************************************************************"<<std::endl;
418  *m_logStream<<"****** Alignment Job summary ******"<<std::endl;
419  *m_logStream<<"*************************************************************"<<std::endl;
420  *m_logStream<<"*"<<std::endl;
421  *m_logStream<<"* number of processed events: "<<m_nevents<<std::endl;
422  *m_logStream<<"* number of processed tracks: "<<m_ntracks<<std::endl;
423  *m_logStream<<"* number of selected tracks: "<<m_ntracksSel<<std::endl;
424  *m_logStream<<"* number of tracks processed: "<<m_ntracksProc<<std::endl;
425  *m_logStream<<"* number of tracks dressed: "<<m_ntracksDress<<std::endl;
426  *m_logStream<<"* number of tracks accumulated: "<<m_ntracksAccum<<std::endl;
427 
428  *m_logStream<<"*"<<std::endl;
429 
430  m_alignTrackPreProcessor->printSummary();
431  m_trackCollectionProvider->printSummary();
432  }
433 
434  // fill ntuple for all tools
435  if (m_writeNtuple) {
436  ATH_MSG_INFO("calling alignTool->fillNtuple()");
437  if(m_alignTool->fillNtuple().isFailure()) {
438  msg(MSG::ERROR)<<"problem with alignTool fillNtuple()!"<<endmsg;
439  return StatusCode::FAILURE;
440  }
441  ATH_MSG_INFO("calling fillNtupleTool->fillNtuple()");
442  if(m_fillNtupleTool->fillNtuple().isFailure()) {
443  msg(MSG::ERROR)<<"problem with fillNtupleTool fillNtuple()!"<<endmsg;
444  return StatusCode::FAILURE;
445  }
446 
447  ATH_MSG_INFO("calling alignTrackPreProcessor->fillNtuple()");
448  if(m_alignTrackPreProcessor->fillNtuple().isFailure()) {
449  msg(MSG::ERROR)<<"problem with alignTrackPreProcessor fillNtuple()!"<<endmsg;
450  return StatusCode::FAILURE;
451  }
452 
453  ATH_MSG_INFO("calling trackCollectionProvider->fillNtuple()");
454  if(m_trackCollectionProvider->fillNtuple().isFailure()) {
455  msg(MSG::ERROR)<<"problem with trackCollectionProvider fillNtuple()!"<<endmsg;
456  return StatusCode::FAILURE;
457  }
458  }
459 
460  if(!m_solveOnly && m_ntracksSel==0) {
461  msg(MSG::WARNING)<<"No tracks passed track selection. No solving."<<endmsg;
462  return StatusCode::SUCCESS;
463  }
464 
465  ATH_MSG_INFO("calling trkAlignDBTool->preSolve()");
466  if (m_trkAlignDBTool->preSolve().isFailure()) {
467  msg(MSG::FATAL)<<"failure in ITrkAlignDBTool->preSolve()"<<endmsg;
468  return StatusCode::FAILURE;
469  }
470 
471  ATH_MSG_INFO("calling alignTool->solve()");
472  if (m_alignTool->solve().isFailure()) {
473  msg(MSG::FATAL)<<"failure in IAlignTool->solve()"<<endmsg;
474  return StatusCode::FAILURE;
475  }
476 
477  ATH_MSG_INFO("calling trkAlignDBTool->writeAlignPar()");
478  m_trkAlignDBTool->writeAlignPar();
479 
480  return StatusCode::SUCCESS;
481 }
482 
483 //___________________________________________________________________________
485 {
486  ATH_MSG_INFO("AlignAlg::finalize()");
487 
488  // close the logfile
489  if(m_writeLogfile) {
490  if(std::ofstream * ofs = dynamic_cast<std::ofstream *>(m_logStream)) {
491  if(ofs->is_open()) {
492  *ofs<<std::flush;
493  ofs->close();
494  }
495  delete m_logStream;
496  }
497  }
498 
499  if (m_writeNtuple) {
500  ATH_MSG_INFO("closing "<<m_ntuple->GetName());
501  m_ntuple->Close();
502  }
503 
504  return StatusCode::SUCCESS;
505 }
506 
507 
508 }
Trk::AlignVertex
Definition: AlignVertex.h:39
Trk::AlignAlg::m_ntracksSel
int m_ntracksSel
number of selected tracks
Definition: AlignAlg.h:123
Trk::AlignAlg::m_ntracksProc
int m_ntracksProc
number of tracks successfully processed
Definition: AlignAlg.h:124
Trk::AlignAlg::m_fillNtupleTool
ToolHandle< IFillNtupleTool > m_fillNtupleTool
Pointer to FillNtupleTool, used to write track information to ntuple.
Definition: AlignAlg.h:102
IAlignTrackPreProcessor.h
python.Constants.FATAL
int FATAL
Definition: Control/AthenaCommon/python/Constants.py:19
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
FullCPAlgorithmsTest_eljob.flush
flush
Definition: FullCPAlgorithmsTest_eljob.py:168
Trk::AlignAlg::finalize
virtual StatusCode finalize()
finalize method
Definition: AlignAlg.cxx:484
IFillNtupleTool.h
Trk::AlignAlg::m_writeNtuple
bool m_writeNtuple
write track and event information to ntuple
Definition: AlignAlg.h:110
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Trk::AlignAlg::m_ntracksDress
int m_ntracksDress
number of tracks successfully dressed
Definition: AlignAlg.h:125
Trk::AlignAlg::start
virtual StatusCode start()
set up geometry and prepare the tools
Definition: AlignAlg.cxx:210
validation.ofile
ofile
Definition: validation.py:96
Trk::AlignAlg::initialize
virtual StatusCode initialize()
initialize method
Definition: AlignAlg.cxx:97
Trk::AlignAlg::stop
virtual StatusCode stop()
processes information accumulated in execute method to determine alignment parameters
Definition: AlignAlg.cxx:412
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
Trk::AlignAlg::m_alignTrackCreator
ToolHandle< IAlignTrackCreator > m_alignTrackCreator
Pointer to alignTrackCreator, used to convert Trk::Track to vector of AlignTrack.
Definition: AlignAlg.h:87
Trk::AlignAlg::m_ntracksAccum
int m_ntracksAccum
number of tracks successfully accumulated
Definition: AlignAlg.h:126
ITrkAlignDBTool.h
Trk::AlignAlg::m_ntuple
TFile * m_ntuple
output ntuple
Definition: AlignAlg.h:116
Trk::AlignAlg::m_solveOnly
bool m_solveOnly
only do the solving (accumulate from binaries)
Definition: AlignAlg.h:109
Trk::AlignAlg::AlignAlg
AlignAlg(const std::string &name, ISvcLocator *pSvcLocator)
constructor
Definition: AlignAlg.cxx:23
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Trk::AlignAlg::m_alignTracksName
std::string m_alignTracksName
name of the AlignTrack collection in the StoreGate
Definition: AlignAlg.h:128
AlignAlg.h
Trk::AlignAlg::m_trackCollectionProvider
ToolHandle< ITrackCollectionProvider > m_trackCollectionProvider
Definition: AlignAlg.h:81
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
AlignVertex.h
AlignTrack.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
Trk::AlignAlg::m_trkAlignDBTool
ToolHandle< ITrkAlignDBTool > m_trkAlignDBTool
Pointer to TrkAlignDBTool, used for reading/writing alignment parameters from/to the database.
Definition: AlignAlg.h:99
Trk::AlignAlg::m_logStream
std::ostream * m_logStream
logfile output stream
Definition: AlignAlg.h:119
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TrackCollection.h
Trk::AlignAlg::m_alignSolveLevel
int m_alignSolveLevel
Set the Alignment Solve Level.
Definition: AlignAlg.h:112
Trk::AlignTrack::getVtx
const AlignVertex * getVtx() const
set and get pointer to the associated vertex
Definition: AlignTrack.h:188
Trk::AlignAlg::m_alignTrackDresser
ToolHandle< IAlignTrackDresser > m_alignTrackDresser
Pointer to alignTrackDresser, used to add residuals, derivatives, etc.
Definition: AlignAlg.h:90
DataVector< Trk::Track >
Trk::AlignAlg::m_ntracks
int m_ntracks
number of processed tracks
Definition: AlignAlg.h:122
AthAlgorithm
Definition: AthAlgorithm.h:47
Trk::AlignTrack::weightMatrix
const Amg::SymMatrixX * weightMatrix() const
Weight matrix is W from Si alignment (see Eqn.
Definition: AlignTrack.h:156
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::AlignAlg::~AlignAlg
virtual ~AlignAlg()
destructor
Definition: AlignAlg.cxx:86
Trk::AlignAlg::execute
virtual StatusCode execute()
loops over tracks in event, and accumulates information necessary for alignmnet
Definition: AlignAlg.cxx:250
IGeometryManagerTool.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
Trk::AlignAlg::m_alignTool
ToolHandle< IAlignTool > m_alignTool
Pointer to alignTool.
Definition: AlignAlg.h:93
Trk::AlignAlg::m_geometryManagerTool
ToolHandle< IGeometryManagerTool > m_geometryManagerTool
Pointer to GeometryManagerTool, used to get lists of chambers for which alignment parameters will be ...
Definition: AlignAlg.h:96
Trk::AlignTrack
Definition: AlignTrack.h:41
ITrackCollectionProvider.h
Trk::AlignAlg::m_alignTrackPreProcessor
ToolHandle< IAlignTrackPreProcessor > m_alignTrackPreProcessor
Pointer to AlignTrackPreProcessor, used to select hits on tracks and/or tracks before passing to Alig...
Definition: AlignAlg.h:84
Trk::AlignAlg::m_filename
std::string m_filename
name of ntuple file
Definition: AlignAlg.h:106
AthCommonMsg< Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
Trk::AlignAlg::m_writeLogfile
bool m_writeLogfile
write a logfile for solving
Definition: AlignAlg.h:117
Trk::AlignAlg::m_filepath
std::string m_filepath
path to ntuple file
Definition: AlignAlg.h:107
Trk::AlignAlg::m_logfileName
std::string m_logfileName
name of the logfile
Definition: AlignAlg.h:118
Track
Definition: TriggerChamberClusterOnTrackCreator.h:21
Trk::AlignVertex::Refitted
@ Refitted
normally refitted, without adding any pseudo-measurement
Definition: AlignVertex.h:46
Trk::AlignAlg::m_nevents
int m_nevents
number of processed events
Definition: AlignAlg.h:121
Trk::AlignVertex::type
AlignVertexType type() const
get and set the refit type
Definition: AlignVertex.h:85
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
Amg::SymMatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > SymMatrixX
Definition: EventPrimitives.h:30