#ifndef TrackingUtils_hxx_seen #define TrackingUtils_hxx_seen #include "IHandle.hxx" #include "IHit.hxx" #include "IReconState.hxx" #include "IReconBase.hxx" #include "ICOMETEvent.hxx" #include "IAlgorithm.hxx" #include "IReconPID.hxx" #include "IReconShower.hxx" #include "IReconTrack.hxx" #include "IReconVertex.hxx" #include "IReconCluster.hxx" #include #include /// Possible fit types in TPC enum TTPCTrackMergingType {kKALFITUNKNOWN = 0, kKALFITCATHCROSS, kKALFITCURVBACK}; /// This namespace contains functions that were originally in oaRecPack. There are a variety of /// useful functions for accessing the information of a track namespace TrackingUtils { // ====> Detector COMET::IReconBase::Status GetDetector(COMET::IHandle hit); COMET::IReconBase::Status GetDetector(const COMET::IGeometryId& id); COMET::IReconBase::Status GetDetector(const TVector3& pos); // ====> Extract physics from state double GetMomentumError(COMET::IHandle state); CLHEP::HepMatrix GetDirectionMomentumCov(COMET::IHandle state); bool Curvature_to_MomentumAndCharge(const TVector3& pos, const TVector3& dir, double curv, double& p, double& q); bool MomentumAndCharge_to_Curvature(const TVector3& pos, const TVector3& dir, double p, double q, double& curv); bool ConvertCurvature_to_MomentumAndCharge(const TVector3& pos, const TVector3& dir, double curv, double& p, double& q); // ====> Special treatment void SetCurvBackTrack(COMET::IReconBase& object); bool GetCurvBackTrack(const COMET::IReconBase& object); // ====> Various ID things COMET::IReconPID::ParticleId GetCOMETPID(const COMET::IReconBase& rbase); COMET::IReconPID::ParticleId GetCOMETPID(const std::string& pid1); bool IsShower(COMET::IHandle object); bool IsPID(const COMET::IReconBase& object); int GetNumberPID(const std::string& pid1); UInt_t GetBit(COMET::IReconPID::ParticleId pid); void SetParticleId(COMET::IReconState& tstate, COMET::IReconPID::ParticleId pid); COMET::IReconPID::ParticleId GetParticleId(const COMET::IReconState& tstate); // ====> Info stored in IDatum void SetMatchingChi2(COMET::IReconBase& object, double chi2ndf); double GetMatchingChi2(const COMET::IReconBase& object); void SetMergedNoRefitStatus(COMET::IReconBase& object, bool status = true); bool GetMergedNoRefitStatus(const COMET::IReconBase& object); void SetTRealDatumValue(COMET::IReconBase& object, double value, std::string name, std::string title=""); double GetTRealDatumValue(const COMET::IReconBase& object, std::string name, double defaultval = 0.); void CopyTRealDatum(COMET::IHandle object_from, COMET::IHandle object_to, std::string name_from, std::string name_to=""); void SetSenseOK(COMET::IReconBase& object, bool sense); bool GetSenseOK(const COMET::IReconBase& object); // ====> Functions to access first and last Nodes and States COMET::IHandle GetFirstState(const COMET::IReconBase& object, COMET::IReconBase::Status det=COMET::IReconBase::kDetectorMask); COMET::IHandle GetLastState(const COMET::IReconBase& object, COMET::IReconBase::Status det=COMET::IReconBase::kDetectorMask); COMET::IHandle GetFirstFittedNode(const COMET::IReconBase& object, COMET::IReconBase::Status det=COMET::IReconBase::kDetectorMask); COMET::IHandle GetLastFittedNode(const COMET::IReconBase& object, COMET::IReconBase::Status det=COMET::IReconBase::kDetectorMask); COMET::IHandle GetFirstNode(const COMET::IReconBase& object, COMET::IReconBase::Status det=COMET::IReconBase::kDetectorMask); COMET::IHandle GetLastNode(const COMET::IReconBase& object, COMET::IReconBase::Status det=COMET::IReconBase::kDetectorMask); COMET::IHandle GetFirstNode(const COMET::IReconBase& object, bool fitted, COMET::IReconBase::Status det); COMET::IHandle GetLastNode(const COMET::IReconBase& object, bool fitted, COMET::IReconBase::Status det); // ====> RETRIEVE INFORMATION from IReconState and IReconBase TLorentzVector GetPosition(COMET::IHandle state); TLorentzVector GetPositionVariance(COMET::IHandle state); TVector3 GetDirection(COMET::IHandle state); TVector3 GetDirectionVariance(COMET::IHandle state); double GetMomentum(COMET::IHandle state); double GetMomentumError(COMET::IHandle state); double GetCharge(COMET::IHandle state); double GetEDeposit(COMET::IHandle state); TVector3 GetWidth(COMET::IHandle state); TVector3 GetCone(COMET::IHandle state); TLorentzVector GetPosition(COMET::IHandle object); TLorentzVector GetPositionVariance(COMET::IHandle object); TVector3 GetDirection(COMET::IHandle object); TVector3 GetDirectionVariance(COMET::IHandle object); double GetMomentum(COMET::IHandle object); double GetMomentumError(COMET::IHandle object); double GetCharge(COMET::IHandle object); double GetEDeposit(COMET::IHandle object); TVector3 GetWidth(COMET::IHandle object); TVector3 GetCone(COMET::IHandle object); }; #endif