diff --git a/InnerDetector/InDetExample/InDetAlignExample/share/ElectronEoverPTracking.py b/InnerDetector/InDetExample/InDetAlignExample/share/ElectronEoverPTracking.py index e8fcde204bfe9782014ef50627904f53493c8157..d0c8b10b17be291d4a55f63f88921979324c5774 100755 --- a/InnerDetector/InDetExample/InDetAlignExample/share/ElectronEoverPTracking.py +++ b/InnerDetector/InDetExample/InDetAlignExample/share/ElectronEoverPTracking.py @@ -177,7 +177,6 @@ GSFTrackFitter = Trk__GaussianSumFitter(name = 'GSFTrackFitte MakePerigee = True, RefitOnMeasurementBase = True, DoHitSorting = True, - ValidationMode = False, OutputLevel = 3) # --- end of fitter loading ToolSvc += GSFTrackFitter diff --git a/Reconstruction/egamma/egammaRec/python/EMCommonRefitter.py b/Reconstruction/egamma/egammaRec/python/EMCommonRefitter.py index 14035858f480d99420d41d045ecf0e04432d4c33..4a44afc101c42bd4bce4499bb126d8f328c4bf23 100644 --- a/Reconstruction/egamma/egammaRec/python/EMCommonRefitter.py +++ b/Reconstruction/egamma/egammaRec/python/EMCommonRefitter.py @@ -208,7 +208,6 @@ GSFTrackFitter = Trk__GaussianSumFitter(name = 'GSFTrackFitte MakePerigee = True, RefitOnMeasurementBase = True, DoHitSorting = True, - ValidationMode = False, ToolForROTCreation = egRotCreator) # --- end of fitter loading ToolSvc += GSFTrackFitter diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h index 9c80d601ac973a40df7b2e04264c919dd0c364d6..3714b3c87cf03df01420a9f253397973fc210382 100755 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/TrkGaussianSumFilter/GaussianSumFitter.h @@ -27,7 +27,7 @@ decription : Class for fitting according to the Gaussian Sum Filter #include "GaudiKernel/IChronoStatSvc.h" #include "xAODEventInfo/EventInfo.h" -#include "TTree.h" +#include<atomic> namespace Trk { @@ -41,9 +41,6 @@ class IForwardGsfFitter; class IGsfSmoother; class Track; -#define TRKFGSF_VALSURFACES 100 -#define TRKGSF_VALSTATES 24 - class GaussianSumFitter : virtual public ITrackFitter, public AthAlgTool { public: @@ -59,11 +56,6 @@ class GaussianSumFitter : virtual public ITrackFitter, public AthAlgTool { /** AlgTool finalise method */ StatusCode finalize(); -#if 0 - /** Configuration of the Gaussian sum filter. */ - StatusCode configureTools(const IMultiStateMeasurementUpdator*, const IRIO_OnTrackCreator*); -#endif - using ITrackFitter::fit; /** Refit a track using the Gaussian Sum Filter */ @@ -115,13 +107,7 @@ class GaussianSumFitter : virtual public ITrackFitter, public AthAlgTool { const MultiComponentStateOnSurface* makePerigee ( const SmoothedTrajectory*, const ParticleHypothesis particleHypothesis = nonInteracting ) const; - /**Add Data from a FrorwardTrajectory to an Ntuple*/ - void SaveMCSOSF(const Trk::ForwardTrajectory& ) const; - - /**Add Data from a SmoothedTrajectory to an Ntuple*/ - void SaveMCSOSS(const Trk::SmoothedTrajectory& ) const; - - + private: ToolHandle<IMultiStateExtrapolator> m_extrapolator; @@ -150,66 +136,15 @@ class GaussianSumFitter : virtual public ITrackFitter, public AthAlgTool { // GSF Fit Statistics - - mutable int m_FitPRD; // Number of Fit PrepRawData Calls - mutable int m_FitMeasuremnetBase; // Number of Fit MeasurementBase Calls - mutable int m_FowardFailure; // Number of Foward Fit Failures - mutable int m_SmootherFailure; // Number of Smoother Failures - mutable int m_PerigeeFailure; // Number of MakePerigee Failures - mutable int m_fitQualityFailure; // Number of Tracks that fail fit Quailty test - - //------VALIDATION MODE SECTION ----------------------------------// - - static int s_Gsf_ValSurface; - static int s_Gsf_ValStates; - - bool m_validationMode; //!< boolean to switch to validation mode - std::string m_validationTreeName; //!< validation tree name - to be acessed by this from root - std::string m_validationTreeDescription; //!< validation tree description - second argument in TTree - std::string m_validationTreeFolder; //!< stream/folder to for the TTree to be written out - - - TTree* m_validationTree; //!< Root Validation Tree - mutable int m_surfaceCounterF; //!< counter for boundary surfaces hit + mutable std::atomic<int> m_FitPRD; // Number of Fit PrepRawData Calls + mutable std::atomic<int> m_FitMeasuremnetBase; // Number of Fit MeasurementBase Calls + mutable std::atomic<int> m_FowardFailure; // Number of Foward Fit Failures + mutable std::atomic<int> m_SmootherFailure; // Number of Smoother Failures + mutable std::atomic<int> m_PerigeeFailure; // Number of MakePerigee Failures + mutable std::atomic<int> m_fitQualityFailure; // Number of Tracks that fail fit Quailty test - mutable int m_surfacesF; //!< associated Ntuple variable - mutable float m_surfaceXF[TRKFGSF_VALSURFACES]; //!< x Position of interseciton with Surface - mutable float m_surfaceYF[TRKFGSF_VALSURFACES]; //!< y Position of interseciton with Surface - mutable float m_surfaceRF[TRKFGSF_VALSURFACES]; //!< Radius of interseciton with Surface - mutable float m_surfaceZF[TRKFGSF_VALSURFACES]; //!< z Position of interseciton with Surface - mutable int m_surfaceTypeF[TRKFGSF_VALSURFACES]; //!< Surface type - mutable int m_surfaceNstatesF[TRKFGSF_VALSURFACES]; //!< Number of components on Surface - mutable float m_surfaceThetaF[TRKFGSF_VALSURFACES][TRKGSF_VALSTATES]; //!< Track theta on Surface - mutable float m_surfacePhiF[TRKFGSF_VALSURFACES][TRKGSF_VALSTATES]; //!< Track Phi on Surface - mutable float m_surfaceQoverPF[TRKFGSF_VALSURFACES][TRKGSF_VALSTATES]; //!< Track q over p on Surface - mutable float m_surfaceWeightF[TRKFGSF_VALSURFACES][TRKGSF_VALSTATES]; //!< Component weight Surface - mutable float m_surfaceErrThetaF[TRKFGSF_VALSURFACES][TRKGSF_VALSTATES]; //!< Track theta error on Surface - mutable float m_surfaceErrPhiF[TRKFGSF_VALSURFACES][TRKGSF_VALSTATES]; //!< Track phi error on Surface - mutable float m_surfaceErrQoverPF[TRKFGSF_VALSURFACES][TRKGSF_VALSTATES]; //!< Track q over p error on Surface - - mutable int m_surfaceCounterS; //!< counter for boundary surfaces hit - - mutable int m_surfacesS; //!< associated Ntuple variable - mutable float m_surfaceXS[TRKFGSF_VALSURFACES]; //!< x Position of interseciton with Surface - mutable float m_surfaceYS[TRKFGSF_VALSURFACES]; //!< y Position of interseciton with Surface - mutable float m_surfaceRS[TRKFGSF_VALSURFACES]; //!< Radius of interseciton with Surface - mutable float m_surfaceZS[TRKFGSF_VALSURFACES]; //!< z Position of interseciton with Surface - mutable int m_surfaceTypeS[TRKFGSF_VALSURFACES]; //!< Surface type - mutable int m_surfaceNstatesS[TRKFGSF_VALSURFACES]; //!< Number of components on Surface - - mutable float m_surfaceThetaS[TRKFGSF_VALSURFACES][TRKGSF_VALSTATES]; //!< Track theta on Surface - mutable float m_surfacePhiS[TRKFGSF_VALSURFACES][TRKGSF_VALSTATES]; //!< Track Phi on Surface - mutable float m_surfaceQoverPS[TRKFGSF_VALSURFACES][TRKGSF_VALSTATES]; //!< Track q over p on Surface - mutable float m_surfaceWeightS[TRKFGSF_VALSURFACES][TRKGSF_VALSTATES]; //!< Component weight Surface - mutable float m_surfaceErrThetaS[TRKFGSF_VALSURFACES][TRKGSF_VALSTATES]; //!< Track theta error on Surface - mutable float m_surfaceErrPhiS[TRKFGSF_VALSURFACES][TRKGSF_VALSTATES]; //!< Track phi error on Surface - mutable float m_surfaceErrQoverPS[TRKFGSF_VALSURFACES][TRKGSF_VALSTATES]; //!< Track q over p error on Surface - mutable int m_event_ID; - - SG::ReadHandleKey<xAOD::EventInfo> m_readKey; - }; } // end Trk namespace diff --git a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx index b7c020558af810a90fa10d0a96760e36e67955d5..9dfaa23988fa809c8d57646378187a10f490c0bc 100644 --- a/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx +++ b/Tracking/TrkFitter/TrkGaussianSumFilter/src/GaussianSumFitter.cxx @@ -12,7 +12,6 @@ decription : Implementation code for Gaussian Sum Fitter class ********************************************************************************** */ #include "TrkGaussianSumFilter/GaussianSumFitter.h" - #include "TrkGaussianSumFilter/IMultiStateMeasurementUpdator.h" #include "TrkGaussianSumFilter/IMultiComponentStateCombiner.h" #include "TrkGaussianSumFilter/IMultiStateExtrapolator.h" @@ -39,15 +38,9 @@ decription : Implementation code for Gaussian Sum Fitter class #include "GaudiKernel/Chrono.h" #include <vector> - -// Validation mode - TTree includes -#include "GaudiKernel/ITHistSvc.h" - #include <algorithm> -int Trk::GaussianSumFitter::s_Gsf_ValSurface = 100; -int Trk::GaussianSumFitter::s_Gsf_ValStates = 24; Trk::GaussianSumFitter::GaussianSumFitter(const std::string& type, const std::string& name, const IInterface* parent) : @@ -65,53 +58,13 @@ Trk::GaussianSumFitter::GaussianSumFitter(const std::string& type, const std::st m_trkParametersComparisonFunction(0), m_stateCombiner("Trk::MultiComponentStateCombiner"), m_chronoSvc("ChronoStatSvc", name), - m_inputPreparator(0), - m_FitPRD(0), - m_FitMeasuremnetBase(0), - m_FowardFailure(0), - m_SmootherFailure(0), - m_PerigeeFailure(0), - m_fitQualityFailure(0), - m_validationMode(false), - m_validationTreeName("GSFValidation"), - m_validationTreeDescription("Surface MCSOS"), - m_validationTreeFolder("/valGSF/GSFValidation"), - m_validationTree(0), - m_surfaceCounterF(0), - m_surfacesF(0), - m_surfaceXF{}, - m_surfaceYF{}, - m_surfaceRF{}, - m_surfaceZF{}, - m_surfaceTypeF{}, - m_surfaceNstatesF{}, - - m_surfaceThetaF{}, - m_surfacePhiF{}, - m_surfaceQoverPF{}, - m_surfaceWeightF{}, - m_surfaceErrThetaF{}, - m_surfaceErrPhiF{}, - m_surfaceErrQoverPF{}, - m_surfaceCounterS(0), - m_surfacesS(0), - m_surfaceXS{}, - m_surfaceYS{}, - m_surfaceRS{}, - m_surfaceZS{}, - m_surfaceTypeS{}, - m_surfaceNstatesS{}, - - m_surfaceThetaS{}, - m_surfacePhiS{}, - m_surfaceQoverPS{}, - m_surfaceWeightS{}, - m_surfaceErrThetaS{}, - m_surfaceErrPhiS{}, - m_surfaceErrQoverPS{}, - - m_event_ID(0) - + m_inputPreparator(nullptr), + m_FitPRD{0}, + m_FitMeasuremnetBase{0}, + m_FowardFailure{0}, + m_SmootherFailure{0}, + m_PerigeeFailure{0}, + m_fitQualityFailure{0} { declareInterface<ITrackFitter>(this); @@ -125,16 +78,13 @@ Trk::GaussianSumFitter::GaussianSumFitter(const std::string& type, const std::st declareProperty("DoHitSorting", m_doHitSorting ); declareProperty("SortingReferencePoint", m_sortingReferencePoint ); declareProperty("StateCombiner", m_stateCombiner ); - declareProperty("ValidationMode", m_validationMode ); declareProperty("GsfSmoother",m_gsfSmoother); declareProperty("ForwardGsfFitter",m_forwardGsfFitter); - declareProperty("EventInfoKey", m_readKey="EventInfo"); // Estrablish reference point as origin m_sortingReferencePoint.push_back(0.); m_sortingReferencePoint.push_back(0.); m_sortingReferencePoint.push_back(0.); - } StatusCode Trk::GaussianSumFitter::initialize() @@ -212,65 +162,9 @@ StatusCode Trk::GaussianSumFitter::initialize() m_SmootherFailure = 0; // Number of Smoother Failures: m_PerigeeFailure = 0; // Number of MakePerigee Failures: m_fitQualityFailure = 0; - - - // the validation setup ---------------------------------------------------------------------------------- - if (m_validationMode){ - - if (m_validationTree ==0){ - // create the new Tree - m_validationTree = new TTree(m_validationTreeName.c_str(), m_validationTreeDescription.c_str()); - - // counter for boundary surfaces - m_validationTree->Branch("nSurfacesF" , &m_surfacesF, "surfacef/I"); - m_validationTree->Branch("SurfaceXF" , m_surfaceXF, "surfacexf[surfacef]/F"); - m_validationTree->Branch("SurfaceYF" , m_surfaceYF, "surfaceyf[surfacef]/F"); - m_validationTree->Branch("SurfaceRF" , m_surfaceRF, "surfacerf[surfacef]/F"); - m_validationTree->Branch("SurfaceZF" , m_surfaceZF, "surfacezf[surfacef]/F"); - m_validationTree->Branch("SurfaceTypeF" , m_surfaceTypeF, "surfacetypef[surfacef]/I"); - - m_validationTree->Branch("NSONSF" , m_surfaceNstatesF, "surfaceNstatesf[surfacef]/I"); - m_validationTree->Branch("SurfaceThetaF" , m_surfaceThetaF , "surfaceThetaf[surfacef][24]/F"); - m_validationTree->Branch("SurfacePhiF" , m_surfacePhiF , "surfacePhif[surfacef][24]/F"); - m_validationTree->Branch("SurfaceQoverPF" , m_surfaceQoverPF , "surfaceQoverPf[surfacef][24]/F"); - m_validationTree->Branch("SurfaceWeightF" , m_surfaceWeightF , "surfaceWeightf[surfacef][24]/F"); - m_validationTree->Branch("SurfaceThetaErrF" , m_surfaceErrThetaF , "surfaceErrorThetaf[surfacef][24]/F"); - m_validationTree->Branch("SurfacePhiErrF" , m_surfaceErrPhiF , "surfaceErrorPhif[surfacef][24]/F"); - m_validationTree->Branch("SurfaceQoverPErrF" , m_surfaceErrQoverPF , "surfaceErrorQoverPf[surfacef][24]/F"); - - m_validationTree->Branch("nSurfacesS" , &m_surfacesS, "surfaces/I"); - m_validationTree->Branch("SurfaceXS" , m_surfaceXS, "surfacexs[surfaces]/F"); - m_validationTree->Branch("SurfaceYS" , m_surfaceYS, "surfaceys[surfaces]/F"); - m_validationTree->Branch("SurfaceRS" , m_surfaceRS, "surfacers[surfaces]/F"); - m_validationTree->Branch("SurfaceZS" , m_surfaceZS, "surfacezs[surfaces]/F"); - m_validationTree->Branch("SurfaceTypeS" , m_surfaceTypeS, "surfacetypes[surfaces]/I"); - - m_validationTree->Branch("NSONSS" , m_surfaceNstatesS, "surfaceNstatess[surfaces]/I"); - m_validationTree->Branch("SurfaceThetaS" , m_surfaceThetaS , "surfaceThetas[surfaces][24]/F"); - m_validationTree->Branch("SurfacePhiS" , m_surfacePhiS , "surfacePhis[surfaces][24]/F"); - m_validationTree->Branch("SurfaceQoverPS" , m_surfaceQoverPS , "surfaceQoverPs[surfaces][24]/F"); - m_validationTree->Branch("SurfaceWeightS" , m_surfaceWeightS , "surfaceWeights[surfaces][24]/F"); - m_validationTree->Branch("SurfaceThetaErrS" , m_surfaceErrThetaS , "surfaceErrorThetas[surfaces][24]/F"); - m_validationTree->Branch("SurfacePhiErrS" , m_surfaceErrPhiS , "surfaceErrorPhis[surfaces][24]/F"); - m_validationTree->Branch("SurfaceQoverPErrS" , m_surfaceErrQoverPS , "surfaceErrorQoverPs[surfaces][24]/F"); - m_validationTree->Branch("EventID" , &m_event_ID, "EventID/I"); - } - - // now register the Tree - ITHistSvc* tHistSvc = nullptr; - if (service("THistSvc",tHistSvc).isFailure()){ - msg(MSG::ERROR)<<"initialize() Could not find Hist Service -> Switching ValidationMode Off !" << endmsg; - delete m_validationTree; m_validationTree = 0; - } - if ((tHistSvc->regTree(m_validationTreeFolder, m_validationTree)).isFailure()) { - msg(MSG::ERROR)<<"initialize() Could not register the validation Tree -> Switching ValidationMode Off !" << endmsg; - delete m_validationTree; m_validationTree = 0; - } - } // ------------- end of validation mode ----------------------------------------------------------------- - + m_inputPreparator = new TrackFitInputPreparator(); - ATH_CHECK( m_readKey.initialize() ); msg(MSG::INFO) << "Initialisation of " << name() << " was successful" << endmsg; @@ -464,7 +358,7 @@ Trk::Track* Trk::GaussianSumFitter::fit ( const Trk::PrepRawDataSet& prepRawD msg() << "Material effects switch: " << particleHypothesis << endmsg; msg() << "Outlier removal switch: " << outlierRemoval << endmsg; } - + ++m_FitPRD; // Start the timer @@ -512,7 +406,6 @@ Trk::Track* Trk::GaussianSumFitter::fit ( const Trk::PrepRawDataSet& prepRawD SmoothedTrajectory* smoothedTrajectory = m_gsfSmoother->fit( *forwardTrajectory, particleHypothesis ); - if(m_validationMode) SaveMCSOSF( *forwardTrajectory ); // Protect against failed smoother fit @@ -559,11 +452,7 @@ Trk::Track* Trk::GaussianSumFitter::fit ( const Trk::PrepRawDataSet& prepRawD // Delete forward trajectory. New memory was assigned in ForwardGsfFitter. delete forwardTrajectory; - if (m_validationMode) { - SaveMCSOSS( *smoothedTrajectory ); - validationAction(); - } - + //Reverse the order of the TSOS's to make be order flow from inside to out std::reverse(smoothedTrajectory->begin(), smoothedTrajectory->end()); @@ -686,7 +575,6 @@ Trk::Track* Trk::GaussianSumFitter::fit ( const Trk::MeasurementSet& measurem if (msgLvl(MSG::VERBOSE)) msg() << "*** GSF smoother fit passed! ***" << endmsg; - if(m_validationMode) SaveMCSOSF( *forwardTrajectory ); // Outlier m_logic and track finalisation const FitQuality* fitQuality = m_outlierLogic->fitQuality( *smoothedTrajectory ); @@ -721,10 +609,6 @@ Trk::Track* Trk::GaussianSumFitter::fit ( const Trk::MeasurementSet& measurem //Delete forward trajectory. New memory was assigned in ForwardGsfFitter. delete forwardTrajectory; - if(m_validationMode) { - SaveMCSOSS( *smoothedTrajectory ); - validationAction(); - } //Reverse the order of the TSOS's to make be order flow from inside to out @@ -969,248 +853,9 @@ const Trk::MultiComponentStateOnSurface* Trk::GaussianSumFitter::makePerigee ( } -void Trk::GaussianSumFitter::SaveMCSOSF(const Trk::ForwardTrajectory& forwardTrajectory) const -{ - - if (!m_validationMode) return; - m_surfaceCounterF = 0; - - //* Retrieve the event info for later syncrinization - SG::ReadHandle<xAOD::EventInfo> eventInfo (m_readKey); - if (!eventInfo.isValid()) { - msg(MSG::ERROR) << "Could not retrieve event info" << endmsg; - } - - m_event_ID = eventInfo->eventNumber(); - - for (int i=0; i< 100; i++){ - m_surfaceXF[i] = 0; - m_surfaceYF[i] = 0; - m_surfaceRF[i] = 0; - m_surfaceZF[i] = 0; - m_surfaceTypeF[i] = -999; - - for (int j=0; j< 24; j++){ - m_surfaceThetaF[i][j]=0; - m_surfacePhiF[i][j]=0; - m_surfaceQoverPF[i][j]=0; - m_surfaceWeightF[i][j]=0; - m_surfaceErrThetaF[i][j]=0; - m_surfaceErrPhiF[i][j]=0; - m_surfaceErrQoverPF[i][j]=0; - } - } - - Trk::ForwardTrajectory::const_iterator trackStateOnSurface = forwardTrajectory.begin(); - - for ( ; trackStateOnSurface != forwardTrajectory.end(); ++trackStateOnSurface ) { - - const Trk::MultiComponentState* forwardsMultiState = 0; - const Trk::MultiComponentStateOnSurface* forwardsMultiStateOnSurface = dynamic_cast<const Trk::MultiComponentStateOnSurface*>(*trackStateOnSurface); - - if (m_surfaceCounterF < s_Gsf_ValSurface){ - - if (!forwardsMultiStateOnSurface) { - // Create new multiComponentState from single state - Trk::ComponentParameters componentParameters( (*trackStateOnSurface)->trackParameters(), 1. ); - forwardsMultiState = new Trk::MultiComponentState( componentParameters ); - } - else - forwardsMultiState = forwardsMultiStateOnSurface->components(); - - - if (forwardsMultiStateOnSurface) { - const Amg::Vector3D& posOnSurf = forwardsMultiStateOnSurface->trackParameters()->position(); - - m_surfaceXF[m_surfaceCounterF] = posOnSurf.x(); - m_surfaceYF[m_surfaceCounterF] = posOnSurf.y(); - m_surfaceRF[m_surfaceCounterF] = posOnSurf.perp(); - m_surfaceZF[m_surfaceCounterF] = posOnSurf.z(); - m_surfaceTypeF[m_surfaceCounterF] = (int) (*trackStateOnSurface)->type(TrackStateOnSurface::Measurement); - } else { - msg(MSG::WARNING) << "forwardsMultiStateOnSurface is null! Setting surface position values to -999 ..." << endmsg; - m_surfaceXF[m_surfaceCounterF] = -999.; - m_surfaceYF[m_surfaceCounterF] = -999.; - m_surfaceRF[m_surfaceCounterF] = -999.; - m_surfaceZF[m_surfaceCounterF] = -999.; - m_surfaceTypeF[m_surfaceCounterF] = -999; - } - - // Clean up stored items for surface - for (int wiper=0; wiper < s_Gsf_ValStates; wiper++){ - m_surfaceThetaF[m_surfaceCounterF][wiper]=0; - m_surfacePhiF[m_surfaceCounterF][wiper]=0; - m_surfaceQoverPF[m_surfaceCounterF][wiper]=0; - m_surfaceWeightF[m_surfaceCounterF][wiper]=0; - m_surfaceErrThetaF[m_surfaceCounterF][wiper]=0; - m_surfaceErrPhiF[m_surfaceCounterF][wiper]=0; - m_surfaceErrQoverPF[m_surfaceCounterF][wiper]=0; - } - - int FMCSOSsize=0; - - m_surfaceNstatesF[m_surfaceCounterF]=forwardsMultiState->size(); - - Trk::MultiComponentState::const_iterator forwardsComponent = forwardsMultiState->begin(); - for ( ; forwardsComponent != forwardsMultiState->end(); ++forwardsComponent ) { - - // Need to check that all components have associated weight matricies - const AmgSymMatrix(5)* forwardsMeasuredCov = forwardsComponent->first->covariance(); - - if ( !forwardsMeasuredCov ){ - - m_surfaceThetaF[m_surfaceCounterF][FMCSOSsize] = forwardsComponent->first->parameters()[Trk::theta]; - m_surfacePhiF[m_surfaceCounterF][FMCSOSsize] = forwardsComponent->first->parameters()[Trk::phi]; - m_surfaceQoverPF[m_surfaceCounterF][FMCSOSsize] = forwardsComponent->first->parameters()[Trk::qOverP]; - m_surfaceWeightF[m_surfaceCounterF][FMCSOSsize] = forwardsComponent->second; - m_surfaceErrThetaF[m_surfaceCounterF][FMCSOSsize] = forwardsComponent->first->parameters()[Trk::theta]; - m_surfaceErrPhiF[m_surfaceCounterF][FMCSOSsize] = forwardsComponent->first->parameters()[Trk::phi]; - m_surfaceErrQoverPF[m_surfaceCounterF][FMCSOSsize]= forwardsComponent->first->parameters()[Trk::qOverP]; - - FMCSOSsize++; - continue; - } - - m_surfaceThetaF[m_surfaceCounterF][FMCSOSsize] = forwardsComponent->first->parameters()[Trk::theta]; - m_surfacePhiF[m_surfaceCounterF][FMCSOSsize] = forwardsComponent->first->parameters()[Trk::phi]; - m_surfaceQoverPF[m_surfaceCounterF][FMCSOSsize] = forwardsComponent->first->parameters()[Trk::qOverP]; - m_surfaceWeightF[m_surfaceCounterF][FMCSOSsize] = forwardsComponent->second; - m_surfaceErrThetaF[m_surfaceCounterF][FMCSOSsize] = sqrt((*forwardsMeasuredCov)(Trk::theta,Trk::theta)); - m_surfaceErrPhiF[m_surfaceCounterF][FMCSOSsize] = sqrt((*forwardsMeasuredCov)(Trk::phi,Trk::phi)); - m_surfaceErrQoverPF[m_surfaceCounterF][FMCSOSsize]= sqrt((*forwardsMeasuredCov)(Trk::qOverP,Trk::qOverP)); - - FMCSOSsize++; - } - } - m_surfaceCounterF++; - } -} - -void Trk::GaussianSumFitter::SaveMCSOSS( const Trk::SmoothedTrajectory& smoothedTrajectory) const -{ - - if (!m_validationMode) return; - m_surfaceCounterS = 0; - - for (int i=0; i< 100; i++){ - m_surfaceXS[i] = 0; - m_surfaceYS[i] = 0; - m_surfaceRS[i] = 0; - m_surfaceZS[i] = 0; - m_surfaceTypeS[i] = -999; - - for (int j=0; j< 24; j++){ - m_surfaceThetaS[i][j]=0; - m_surfacePhiS[i][j]=0; - m_surfaceQoverPS[i][j]=0; - m_surfaceWeightS[i][j]=0; - m_surfaceErrThetaS[i][j]=0; - m_surfaceErrPhiS[i][j]=0; - m_surfaceErrQoverPS[i][j]=0; - } - } - - Trk::SmoothedTrajectory::const_reverse_iterator trackStateOnSurfaceS = smoothedTrajectory.rbegin(); - for ( ; trackStateOnSurfaceS != smoothedTrajectory.rend(); ++trackStateOnSurfaceS ) { - - //Check if it is a brempoint, if it is, skip the trackstateonsurface - if ((*trackStateOnSurfaceS)->type(TrackStateOnSurface::BremPoint)) - continue; - - const Trk::MultiComponentState* smoothedMultiState = 0; - const Trk::MultiComponentStateOnSurface* smoothedMultiStateOnSurface = dynamic_cast<const Trk::MultiComponentStateOnSurface*>(*trackStateOnSurfaceS); - - if (m_surfaceCounterS < s_Gsf_ValSurface){ - - if (!smoothedMultiStateOnSurface) { - // Create new multiComponentState from single state - Trk::ComponentParameters componentParameters( (*trackStateOnSurfaceS)->trackParameters(), 1. ); - smoothedMultiState = new Trk::MultiComponentState( componentParameters ); - } - else - smoothedMultiState = smoothedMultiStateOnSurface->components(); - - if (smoothedMultiStateOnSurface) { - const Amg::Vector3D& posOnSurf = smoothedMultiStateOnSurface->trackParameters()->position(); - - m_surfaceXS[m_surfaceCounterS] = posOnSurf.x(); - m_surfaceYS[m_surfaceCounterS] = posOnSurf.y(); - m_surfaceRS[m_surfaceCounterS] = posOnSurf.perp(); - m_surfaceZS[m_surfaceCounterS] = posOnSurf.z(); - m_surfaceTypeS[m_surfaceCounterS] = (int) (*trackStateOnSurfaceS)->type(TrackStateOnSurface::Measurement); - } else { - msg(MSG::WARNING) << "smoothedMultiStateOnSurface is null! Setting surface position values to -999 ..." << endmsg; - m_surfaceXS[m_surfaceCounterS] = -999.; - m_surfaceYS[m_surfaceCounterS] = -999.; - m_surfaceRS[m_surfaceCounterS] = -999.; - m_surfaceZS[m_surfaceCounterS] = -999.; - m_surfaceTypeS[m_surfaceCounterS] = -999; - } - - // Clean up stored items for surface - for (int wiper=0; wiper < s_Gsf_ValStates; wiper++){ - m_surfaceThetaS[m_surfaceCounterS][wiper]=0; - m_surfacePhiS[m_surfaceCounterS][wiper]=0; - m_surfaceQoverPS[m_surfaceCounterS][wiper]=0; - m_surfaceWeightS[m_surfaceCounterS][wiper]=0; - m_surfaceErrThetaS[m_surfaceCounterS][wiper]=0; - m_surfaceErrPhiS[m_surfaceCounterS][wiper]=0; - m_surfaceErrQoverPS[m_surfaceCounterS][wiper]=0; - } - - int SMCSOSsize=0; - - m_surfaceNstatesS[m_surfaceCounterS]=smoothedMultiState->size(); - - Trk::MultiComponentState::const_iterator smoothedComponent = smoothedMultiState->begin(); - for ( ; smoothedComponent != smoothedMultiState->end(); ++smoothedComponent ) { - - // Need to check that all components have associated weight matricies - const AmgSymMatrix(5)* smoothedMeasuredCov = smoothedComponent->first->covariance(); - - if ( !smoothedMeasuredCov ){ - - m_surfaceThetaS[m_surfaceCounterS][SMCSOSsize] = smoothedComponent->first->parameters()[Trk::theta]; - m_surfacePhiS[m_surfaceCounterS][SMCSOSsize] = smoothedComponent->first->parameters()[Trk::phi]; - m_surfaceQoverPS[m_surfaceCounterS][SMCSOSsize] = smoothedComponent->first->parameters()[Trk::qOverP]; - m_surfaceWeightS[m_surfaceCounterS][SMCSOSsize] = smoothedComponent->second; - m_surfaceErrThetaS[m_surfaceCounterS][SMCSOSsize] = smoothedComponent->first->parameters()[Trk::theta]; - m_surfaceErrPhiS[m_surfaceCounterS][SMCSOSsize] = smoothedComponent->first->parameters()[Trk::phi]; - m_surfaceErrQoverPS[m_surfaceCounterS][SMCSOSsize]= smoothedComponent->first->parameters()[Trk::qOverP]; - - SMCSOSsize++; - - continue; - } - - m_surfaceThetaS[m_surfaceCounterS][SMCSOSsize] = smoothedComponent->first->parameters()[Trk::theta]; - m_surfacePhiS[m_surfaceCounterS][SMCSOSsize] = smoothedComponent->first->parameters()[Trk::phi]; - m_surfaceQoverPS[m_surfaceCounterS][SMCSOSsize] = smoothedComponent->first->parameters()[Trk::qOverP]; - m_surfaceWeightS[m_surfaceCounterS][SMCSOSsize] = smoothedComponent->second; - m_surfaceErrThetaS[m_surfaceCounterS][SMCSOSsize] = sqrt((*smoothedMeasuredCov)(Trk::theta,Trk::theta)); - m_surfaceErrPhiS[m_surfaceCounterS][SMCSOSsize] = sqrt((*smoothedMeasuredCov)(Trk::phi,Trk::phi)); - m_surfaceErrQoverPS[m_surfaceCounterS][SMCSOSsize]= sqrt((*smoothedMeasuredCov)(Trk::qOverP,Trk::qOverP)); - - - SMCSOSsize++; - } - } - m_surfaceCounterS++; - } -} - void Trk::GaussianSumFitter::validationAction() const { - // first record the values - if (m_validationTree){ - m_surfacesF = long(m_surfaceCounterF); - m_surfacesS = long(m_surfaceCounterS); - m_validationTree->Fill(); - // then reset - m_surfaceCounterF = 0; - m_surfaceCounterS = 0; - } }