00001 #ifndef TRACKIDEALPR_TRUETRACKSCREATOR_H 00002 #define TRACKIDEALPR_TRUETRACKSCREATOR_H 1 00003 00004 // Include files 00005 // ------------- 00006 // from Gaudi 00007 #include "GaudiAlg/GaudiAlgorithm.h" 00008 00009 // from TrackEvent 00010 #include "Event/Track.h" 00011 00012 // from TrackFitEvent 00013 #include "Event/TrackFunctor.h" 00014 00015 // from XxxAssociators 00016 #include "OTAssociators/OTTime2MCHitAsct.h" 00017 #include "ITAssociators/ITCluster2MCParticleAsct.h" 00018 #include "VeloAssociators/VeloCluster2MCParticleAsct.h" 00019 00020 // from TrackInterfaces 00021 #include "TrackInterfaces/IStateCreator.h" 00022 #include "TrackInterfaces/ITrackSelector.h" 00023 //#include "Event/ITrackFitter.h" 00024 00025 // Forward declarations 00026 class DeOTDetector; 00027 class DeSTDetector; 00028 class DeVelo; 00029 00063 class TrueTracksCreator: public GaudiAlgorithm { 00064 00065 public: 00066 00068 TrueTracksCreator( const std::string& name, ISvcLocator* pSvcLocator ); 00069 00070 virtual ~TrueTracksCreator( ); 00071 00072 virtual StatusCode initialize(); 00073 virtual StatusCode execute (); 00074 virtual StatusCode finalize (); 00075 00076 void sortMeasurements( Track* track ) { 00077 std::sort( track->measurements().begin(), 00078 track->measurements().end(), 00079 TrackFunctor::increasingByZ<Measurement>() ); 00080 }; 00081 00082 private: 00084 StatusCode registerTracks( Tracks* tracksCont ); 00085 00087 StatusCode addOTTimes( OTTimes* times, 00088 MCParticle* mcPart, 00089 Track* track ); 00090 00092 StatusCode addITClusters( MCParticle* mcPart, Track* track ); 00093 00095 StatusCode addVeloClusters( MCParticle* mcPart, Track* track ); 00096 00098 StatusCode initializeState( double z, Track* track, MCParticle* mcPart ); 00099 00101 StatusCode deleteStates( Track* track ); 00102 00103 // MC associators 00104 OTTime2MCHitAsct::IAsct* m_otTim2MCHit; 00105 ITCluster2MCParticleAsct::IAsct* m_itClus2MCP; 00106 VeloCluster2MCParticleAsct::IAsct* m_veloClus2MCP; 00107 00108 // Geometry information 00109 DeOTDetector* m_otTracker; 00110 DeSTDetector* m_itTracker; 00111 DeVelo* m_velo; 00112 std::string m_otTrackerPath; 00113 std::string m_itTrackerPath; 00114 std::string m_veloPath; 00115 00116 // Interfaces 00117 ITrackSelector* m_trackSelector; 00118 IStateCreator* m_stateCreator; 00119 // ITrackFitter* m_tracksFitter; ///< General fitter tool 00120 // ITrackFitter* m_veloTracksFitter; ///< Fitter tool for velo and veloBack 00121 // ITrackFitter* m_veloTTTracksFitter; ///< Fitter tool for veloTT 00122 // ITrackFitter* m_seedTracksFitter; ///< Fitter tool for seeds 00123 00124 // job options 00125 bool m_addOTTimes; 00126 bool m_addITClusters; 00127 bool m_addVeloClusters; 00128 bool m_initState; 00129 bool m_fitTracks; 00130 bool m_upstream; 00131 bool m_trueStatesAtMeas; 00132 std::string m_tracksTESPath; 00133 std::string m_relationTable; 00134 int m_minNHits; 00135 double m_errorX2; 00136 double m_errorY2; 00137 double m_errorTx2; 00138 double m_errorTy2; 00139 double m_errorP; 00140 }; 00141 00142 #endif // TRACKIDEALPR_TRUETRACKSCREATOR_H