#include #include #include #include #include "IOARuntimeParameters.hxx" #include // ---------------------------------------------------------------------------- COMET::IStrawTrkTracking::IStrawTrkTracking() :COMET::IAlgorithm("COMET::IStrawTrkTracking") ,fInitialized(false) ,fMCTrackFinder(0) ,fGenFitter(0) ,fIterationNo(0) { COMETNamedInfo("IStrawTrkTracking", " Constructor"); } COMET::IStrawTrkTracking::~IStrawTrkTracking() { fMCTrackFinder->Finish(); fGenFitter->Finish(); if(fMCTrackFinder) delete fMCTrackFinder; if(fGenFitter) delete fGenFitter; } void COMET::IStrawTrkTracking::Init(){ // Prepare algorithm COMETNamedInfo("IStrawTrkTracking", "Input FieldMap FileName"); COMET::IOARuntimeParameters& param = COMET::IOARuntimeParameters::Get(); std::string fFieldMapFileName=param.GetParameterS("ReconStrawTrk.FieldMapFile"); std::string fGeometryFileName=param.GetParameterS("ReconStrawTrk.GeometryFile"); //fFieldMapFileName=fGeometryFileName="/data/comet/wrk/sim/SimG4.root"; COMETNamedInfo("IStrawTrkTracking", " FieldMap FileName = " << fFieldMapFileName); COMETNamedInfo("IStrawTrkTracking", " Geometry FileName = " << fGeometryFileName); Int_t useMCTruth = param.GetParameterI("ReconStrawTrk.UseMCTruth"); Int_t smearDriftDist = param.GetParameterI("ReconStrawTrk.EnableSmearing"); Double_t sigmaDist = param.GetParameterD("ReconStrawTrk.PositionResolution"); Int_t defaultPID = param.GetParameterI("ReconStrawTrk.DefaultPID"); fMCTrackFinder = new IMCTrackFinder("IMCTrackFinder", "MC track finder"); fMCTrackFinder->Init(); fGenFitter = new IGenFitter("IGenFitter", "GenFit based track fitter"); //probaly COMETLoop should care about field loading fGenFitter->SetFieldMap(fFieldMapFileName); //or can be taken from open file fGenFitter->SetGeometry(fGeometryFileName); // set the default PID fGenFitter->SetPID(defaultPID); if (!useMCTruth) fGenFitter->SetUseMCTruth(false); else fGenFitter->SetUseMCTruth(true); if (!smearDriftDist) fGenFitter->SetSmearing(false); else fGenFitter->SetSmearing(true); fGenFitter->SetSigmaDistance(sigmaDist); fGenFitter->Init(); fInitialized=true; } //====================================================================== // BeginOfEvent //====================================================================== void COMET::IStrawTrkTracking::BeginOfEvent() { fGenFitter->BeginOfEvent(); } //====================================================================== // EndOfEvent //====================================================================== void COMET::IStrawTrkTracking::EndOfEvent() { } // ---------------------------------------------------------------------------- COMET::IHandle COMET::IStrawTrkTracking::Process(const COMET::IAlgorithmResult& input) { //temporarily workaround - look's like cometEventLoop not properly load geometry before IUserLoop:::Initialize if(!fInitialized) Init(); COMET::IHandle mcTrackCandidates = fMCTrackFinder->Process(input); if (!mcTrackCandidates) return mcTrackCandidates; COMET::IHandle result = fGenFitter->Process(*mcTrackCandidates); return result; }