#include "TaskManager.h" #include "L1AlgoInputSettings.h" #include "InputDataArray.h" #include "L1AlgoInputMCData.h" #include "CbmL1Track.h" #include "CbmKFParticleDatabase.h" #include "L1Timer.h" #include "TDHelper.h" #include "TMath.h" void TaskManager::Init( const L1AlgoInputSettings* settings, int verbose ) { fVerbose = verbose; fSettings = settings; fTracker.Init( fSettings->GetSettings() ); fPerf.Init( "../Output/", &fTracker, &fParticles, fVerbose ); } void TaskManager::SetData( const L1AlgoInputData* data, const L1AlgoInputMCData* mcData ) { fData = data; fMCData = mcData; } void TaskManager::Run() { // set timers L1CATFIterTimerInfo timer; timer.Add("Total "); timer.Add("TrackFinder"); timer.Add("TrackFiter"); timer.Add("PrimaryVertexFinder"); timer.Add("SecondaryParticlesFinder"); timer.Add("QualityCheck"); static L1CATFIterTimerInfo stimer = timer; TStopwatch ts_all; TStopwatch ts; // --------- Track Reconstruction ------------- fTracker.SetData( fData->GetStsHits(), fData->GetStsStrips(), fData->GetStsStripsB(), fData->GetStsZPos(), fData->GetSFlag(), fData->GetSFlagB(), fData->GetStsHitsStartIndex(), fData->GetStsHitsStopIndex() ); if (fMCData) { fPerf.SetData( fMCData->GetHitStore(), fMCData->GetStsHits(), fMCData->GetMCPoints(), fMCData->GetMCTracks(), fMCData->GetHitMCRef() ); } ts.Start(1); fTracker.CATrackFinder(); ts.Stop(); timer["TrackFinder"] = ts; // ------- Track Fit --------- ts.Start(1); #if 1 fTracker.L1KFTrackFitter(); // TODO #else fTracker.KFTrackFitter_simple(); #endif ts.Stop(); timer["TrackFiter"] = ts; // - Convert Tracks - vector vRTracks; { vRTracks.clear(); int start_hit = 0; // for interation in fTrackervRecoHits[] for (unsigned i = 0; i < fTracker.NTracksIsecAll; i++){ L1Track it = fTracker.vTracks[i]; CbmL1Track t; // std::cout << "Track " << i << " "; // for( int k=0; k<6; k++) { t.T[k] = it.TFirst[k]; cout<::Chi2IProbability( t.NDF, t.chi2 )); //float prob = (TMath::Prob( t.chi2, t.NDF )); if (prob < 0.004) continue; vRTracks.push_back(t); } // for vTracks } #if 0 // ----------- Particle Reconstruction ------------- // select tracks vector vSelectedRTracks; for (unsigned i = 0; i < vRTracks.size(); i++){ const CbmL1Track &t = vRTracks[i]; bool ok = 1; for( int k=0; k<6; k++) ok = ok && finite(t.T[k]); for( int k=0; k<15; k++) ok = ok && finite(t.C[k]); ok = ok && finite(t.chi2) && finite(t.NDF); ok = ok && t.C[0]>0 && t.C[2]>0 && t.C[5]>0 && t.C[9]>0 && t.C[14]>0; if (!ok) continue; vSelectedRTracks.push_back(t); } // primary vertex CbmKFVertex pv; fParticles.clear(); fKFParticleFinder.SetHits(fData); fKFParticleFinder.SetAlgo(&fTracker); ts.Start(1); fKFParticleFinder.ConstructPV(vSelectedRTracks,pv); ts.Stop(); timer["PrimaryVertexFinder"] = ts; // std::cout << " Primary vertex " << pv.GetRefX() << " " << pv.GetRefY() << " " << pv.GetRefZ() << std::endl; // secondary particles ts.Start(1); fKFParticleFinder.FindParticles(vSelectedRTracks,fParticles,pv); ts.Stop(); timer["SecondaryParticlesFinder"] = ts; #else CbmKFVertex pv; #endif // ------------- QA ------------- ts.Start(1); if (fMCData) { fPerf.SetRecoTracks(vRTracks); fPerf.SetPrimaryVertex(pv); fPerf.RunEv(); } ts.Stop(); timer["QualityCheck"] = ts; ts_all.Stop(); timer["Total "] = ts_all; if ( fVerbose ) { static int NEvents = 0; NEvents++; stimer += timer; if ( NEvents % 100 == 0 ) { cout << " Timers, ms " << endl; L1CATFIterTimerInfo tmp_timer = stimer/0.001/NEvents; // ms tmp_timer.PrintReal( 1 ); } } } void TaskManager::PrintEff() { fPerf.PrintEff(); }