// ------------------------------------------------------------------------- // ----- CbmStsFitTracks source file ----- // ----- Created 18/02/05 by V. Friese ----- // ------------------------------------------------------------------------- #include "iostream.h" #include "TClonesArray.h" #include "CbmRootManager.h" #include "CbmStsFitTracks.h" #include "CbmStsTrackFitter.h" // ----- Default constructor ------------------------------------------- CbmStsFitTracks::CbmStsFitTracks() : CbmTask("STSFitTracks") { fFitter = NULL; fTracks = NULL; fNTracks = 0; } // ------------------------------------------------------------------------- // ----- Standard constructor ------------------------------------------ CbmStsFitTracks::CbmStsFitTracks(CbmStsTrackFitter* fitter, Int_t iVerbose) : CbmTask("STSFitTracks") { fFitter = fitter; fTracks = NULL; fNTracks = 0; } // ------------------------------------------------------------------------- // ----- Constructor with name ----------------------------------------- CbmStsFitTracks::CbmStsFitTracks(const char* name, CbmStsTrackFitter* fitter, Int_t iVerbose) : CbmTask(name, iVerbose) { fFitter = fitter; fTracks = NULL; fNTracks = 0; } // ------------------------------------------------------------------------- // ----- Destructor ---------------------------------------------------- CbmStsFitTracks::~CbmStsFitTracks() { } // ------------------------------------------------------------------------- // ----- Virtual public method Exec ------------------------------------ void CbmStsFitTracks::Exec(Option_t* opt) { fTimer.Start(); if ( ! fTracks ) { cout << "-E- " << fName << "::Exec: No StsTrack array! " << endl; fNFailed++; return; } Int_t nTracks = fTracks->GetEntriesFast(); for (Int_t iTrack=0; iTrackAt(iTrack); fFitter->DoFit(pTrack); } fTimer.Stop(); cout << "+ " << setw(15) << left << fName << ": " << setprecision(4) << setw(8) << fixed << right << fTimer.RealTime() << " s, tracks fitted " << nTracks << endl; fNEvents++; fTime += fTimer.RealTime(); fNTracks += Double_t(nTracks); } // ------------------------------------------------------------------------- // ----- Virtual private method Init -------------- -------------------- InitStatus CbmStsFitTracks::Init() { // Check for Track fitter if (! fFitter) { cout << "-E- CbmStsFitTracks: No track fitter selected!" << endl; return kERROR; } // Get and check CbmRootManager CbmRootManager* ioman = CbmRootManager::Instance(); if (! ioman) { cout << "-E- CbmStsFitTracks::Init: " << "RootManager not instantised!" << endl; return kFATAL; } // Get StsTrack array fTracks = (TClonesArray*) ioman->GetObject("STSTrack"); //=>SG if ( ! fTracks) { cout << "-E- CbmStsFitTracks::Init: No StsTrack array!" << endl; return kERROR; } // Call the Init method of the track fitter fFitter->Init(); return kSUCCESS; } // ------------------------------------------------------------------------- // ----- Virtual private method Finish --------------------------------- void CbmStsFitTracks::Finish() { cout << endl; cout << "============================================================" << endl; cout << "===== " << GetName() << ": Run summary " << endl; cout << "===== " << endl; cout << "===== Good events : " << setw(6) << fNEvents << endl; cout << "===== Failed events : " << setw(6) << fNFailed << endl; cout << "===== Average time : " << setprecision(4) << setw(8) << right << fTime / Double_t(fNEvents) << " s" << endl; cout << "===== " << endl; cout << "===== Fitted tracks per event : " << fixed << setprecision(0) << fNTracks / Double_t(fNEvents) << endl; cout << "============================================================" << endl; } // ------------------------------------------------------------------------- ClassImp(CbmStsFitTracks)