00001 #ifndef TRACKMCTOOLS_TRUESTATECREATOR_H 00002 #define TRACKMCTOOLS_TRUESTATECREATOR_H 1 00003 00004 // Include files 00005 // ------------- 00006 // from Gaudi 00007 #include "GaudiAlg/GaudiTool.h" 00008 00009 // from Event 00010 #include "Event/MCParticle.h" 00011 #include "Event/MCHit.h" 00012 #include "Event/MCVeloHit.h" 00013 00014 // from Det 00015 #include "VeloDet/DeVelo.h" 00016 00017 // from LHCbKernel 00018 #include "Relations/IAssociator.h" 00019 00020 // from TrackInterfacces 00021 #include "TrackInterfaces/ITrackExtrapolator.h" 00022 #include "TrackInterfaces/IStateCreator.h" 00023 00024 class State; 00025 00044 class TrueStateCreator: public GaudiTool, 00045 virtual public IStateCreator { 00046 public: 00048 typedef IAssociator<MCParticle, MCHit> MCHitAsct; 00049 typedef IAssociator<MCParticle, MCVeloHit> MCVeloHitAsct; 00050 00052 TrueStateCreator( const std::string& type, 00053 const std::string& name, 00054 const IInterface* parent ); 00055 00057 virtual ~TrueStateCreator(); 00058 00060 virtual StatusCode initialize(); 00061 00069 virtual StatusCode createState( const MCParticle* mcPart, 00070 double zRec, 00071 State*& pState ) const; 00072 00079 virtual StatusCode createStateVertex( const MCParticle* mcPart, 00080 State*& pState ) const; 00081 private: 00082 00084 double qOverP( const MCParticle* mcPart ) const; 00085 00086 DeVelo* m_velo; 00087 00088 MCVeloHitAsct* m_p2VeloHitAsct; 00089 MCHitAsct* m_p2ITHitAsct; 00090 MCHitAsct* m_p2OTHitAsct; 00091 00092 ITrackExtrapolator* m_extrapolator; 00093 00094 // Job options: 00095 std::string m_p2VeloHitAsctName; 00096 std::string m_p2ITHitAsctName; 00097 std::string m_p2OTHitAsctName; 00098 std::string m_extrapolatorName; 00099 double m_eX2; 00100 double m_eY2; 00101 double m_eTx2; 00102 double m_eTy2; 00103 double m_eP; 00104 }; 00105 00106 00107 #endif // TRACKMCTOOLS_TRUESTATECREATOR_H