00001 // ================================================ 00002 // TrackMaker class description 00003 // ================================================ 00004 // 00005 // THIS TEXT TO BE REPLACED BY ATLAS STANDARD FORMAT 00006 // 00007 // 00008 // This version.... 00009 // 00010 // 00011 // Namespace Atlfast:: 00012 // 00013 // class: TrackMaker 00014 // 00015 // Description: 00016 // 00017 // Default Algorithm which knows how to simulate Tracks from MC truth 00018 // 00019 // 00020 // 00021 // ................................................................ 00022 // 00023 00024 #ifndef ATLFAST_TRACKMAKER_H 00025 #define ATLFAST_TRACKMAKER_H 00026 00027 // STL 00028 #include <vector> 00029 #include <string> 00030 00031 // Gaudi 00032 #include "GaudiKernel/ISvcLocator.h" 00033 #include "GaudiKernel/IAlgorithm.h" 00034 #include "GaudiKernel/Algorithm.h" 00035 #include "GaudiKernel/MsgStream.h" 00036 #include "GaudiKernel/DataObject.h" 00037 00038 // Other 00039 #include "CLHEP/Vector/LorentzVector.h" 00040 #include "CLHEP/Vector/ThreeVector.h" 00041 #include "HepMC/GenEvent.h" 00042 #include "HepMC/GenParticle.h" 00043 #include "HepMC/ParticleDataTable.h" 00044 00045 00046 // Atlfast 00047 #include "AtlfastEvent/IKinematic.h" 00048 //#include "AtlfastEvent/TrackCollection.h" 00049 #include "AtlfastEvent/CollectionDefs.h" 00050 #include "AtlfastAlgs/TrackSmearer.h" 00051 #include "AtlfastUtils/TesIO.h" 00052 #include "AtlfastUtils/HeaderPrinter.h" 00053 #include "AtlfastEvent/MCparticleCollection.h" 00054 00055 00056 //*************************************************************** 00057 // TrackMaker class declaration 00058 // 00059 //**************************************************************** 00060 namespace HepMC_helper 00061 { 00062 class IMCselector; 00063 } 00064 00065 namespace Atlfast 00066 { 00067 using std::string; 00068 00069 class ChargeService; 00070 00071 class Track; 00072 00080 class TrackMaker : public Algorithm{ 00081 00082 public: 00083 00084 //------------------------- 00085 // Constructors/Destructors 00086 //------------------------- 00087 00088 TrackMaker( const std::string& name, ISvcLocator* pSvcLocator ) ; 00089 virtual ~TrackMaker(); 00090 00091 00092 //------------------------------------------------------ 00093 // Methods used by Gaudi to run the algorithm 00094 //------------------------------------------------------ 00095 00096 virtual StatusCode initialize() ; 00097 virtual StatusCode execute() ; 00098 virtual StatusCode finalize() ; 00099 00100 private: 00101 00102 // ------------------------------- 00103 // Parameters of this algorithm 00104 // (descriptions above) 00105 //-------------------------------- 00106 double m_vlMax; 00107 double m_vtMax; 00108 double m_mcPtMin; 00109 double m_mcEtaMax; 00110 bool m_doSmearing; 00111 double m_bField ; 00112 string m_muonParamFile; 00113 string m_pionParamFile; 00114 string m_electronParamFile; 00115 string m_bremParamFile; 00116 00117 00118 //-------------------------------------------- 00119 // Selector for HepMC generator particles 00120 //--------------------------------------------- 00121 00122 00123 TesIO* m_tesIO; 00124 HepMC_helper::IMCselector* m_ncutter ; 00125 //holds the Stotegate MC location 00126 std::string m_mcLocation; 00127 00128 //-------------------------------------------- 00129 // Smearer helper class which knows all about how to do smearing 00130 // for Tracks 00131 // There may need to be more of these added in order 00132 // to treat different species differently. 00133 // Alternately the single smearer object could be made to 00134 // dispatch on particle type. Not thought through yet. 00135 //--------------------------------------------- 00136 00137 00138 TrackSmearer* m_smearer; 00139 ChargeService* m_chargeService; 00140 00141 //-------------------------------------------------- 00142 // Paths in the Transient Event store to get/put things 00143 // These are currently set in member variables so that 00144 // they can be overwritten by the job options service 00145 //-------------------------------------------------- 00146 00147 // TES output location 00148 std::string m_outputLocation; 00149 00150 //------------------------------- 00151 // Private methods 00152 //------------------------------- 00153 00154 // Create a Track 00155 virtual Track* create( const HepMC::GenParticle* ); 00156 00157 // Test if Track passes kinematic requirements 00158 // virtual bool isAcceptable( Track* ); 00159 virtual bool isAcceptable(Track*); 00160 TrackTrajectory extractTrajectory( const HepMC::GenParticle* ) ; 00161 }; 00162 00163 } //end of namespace bracket 00164 00165 #endif