00001 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00002 // 17.07.2007, AUTHOR: OLIVER KORTNER 00003 // Modified: 29.07.2007 by O. Kortner, options for a special treatment of 00004 // multivertex events. 00005 // 20.08.2007 by O. Kortner, get vertices from the 00006 // MPIHiggsAnalysis::VertexCollectionSvc. 00007 // 14.09.2007 by S. Kaiser, added option to ignore isolated leptons 00008 // 00009 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 00010 00011 #ifndef JetTrackSelectorToolH 00012 #define JetTrackSelectorToolH 00013 00014 //:::::::::::::::::::::::::::::::: 00015 //:: CLASS JetTrackSelectorTool :: 00016 //:::::::::::::::::::::::::::::::: 00017 00038 00039 //:::::::::::::::::: 00040 //:: HEADER FILES :: 00041 //:::::::::::::::::: 00042 00043 // AtlasCore // 00044 #include "StoreGate/StoreGateSvc.h" 00045 00046 // JetRec // 00047 #include "JetRec/JetAlgToolBase.h" 00048 00049 // STL // 00050 #include <string> 00051 00052 // CLHEP // 00053 #include "CLHEP/Vector/ThreeVector.h" 00054 00055 // NtupleWriter14 // 00056 #include "NtupleWriter14/VertexCollectionSvc.h" 00057 #include "Particle/TrackParticleContainer.h" 00058 00059 class JetTrackSelectorTool : public JetAlgToolBase { 00060 00061 public: 00062 // Constructors // 00063 JetTrackSelectorTool(const std::string & name, const std::string & type, 00064 const IInterface * parent); 00066 00067 ~JetTrackSelectorTool(void); 00069 00070 // Methods // 00071 // methods required by the base class // 00072 virtual StatusCode initialize(void); 00074 virtual StatusCode execute(JetAlgToolBase::jetcollection_t * theJets); 00080 00081 private: 00082 // job options // 00083 double m_pt_min; // minimum transverse momentum of a track 00084 std::string m_output_collection_name; // name of the output collection 00085 std::string m_track_particle_container_name; // name of the container 00086 // of track particles 00087 bool m_ignore_multivertices; // option how to treat multivertex events 00088 std::string m_primary_vertex_container; // name of the vertex container 00089 std::string m_vert_coll_svc_name; // name of the output vertex collection 00090 00091 // ATHENA services // 00092 StoreGateSvc *m_storeGate; // pointer to the store gate 00093 MsgStream *m_log; // pointer to the message stream 00094 MPIHiggsAnalysis::VertexCollectionSvc *m_vert_coll; 00095 // pointer to the output vertex collection 00096 00097 // private methods // 00098 Hep3Vector highest_pt_vertex(void) const; // get the primary vertex 00099 // with the highest transverse 00100 // momentum 00101 00102 double get_energy_in_cone(const double & cone, 00103 const HepLorentzVector & p, 00104 const Hep3Vector & vertex, 00105 const Rec::TrackParticleContainer *track_particle_container); 00106 // get the energy of particle emerging 00107 // from the vertex "vertex" in a cone 00108 // of "cone" in delta R of p 00109 00110 std::string m_electron_container; // name of the electron container 00111 std::string m_muon_container; // name of the muon container 00112 00113 bool m_remove_isol_leptons; //flag to remove isolated e,mu from tracks list 00114 double m_electron_cone; //cone size for electron isolation 00115 double m_electron_et_cut; //et cut for electron isolation 00116 double m_muon_cone; //cone size for muon isolation 00117 double m_muon_et_cut; //et cut for muon isolation 00118 00119 double m_inner_cone; //size of the inner cone 00120 // -> et_in_cone: inner_cone < dR < m_lepton_cone 00121 00122 }; 00123 00124 #endif