00001 // ================================================ 00002 // ClusterMaker class description 00003 // ================================================ 00004 // 00005 // THIS TEXT TO BE REPLACED BY ATLAS STANDARD FORMAT 00006 // 00007 // 00008 // Namespace Atlfast:: 00009 // 00010 // class: ClusterMaker 00011 // 00012 // Authors: P.Clarke, H.Phillips, E.Richter-Was, P.Sherwood, R.Steward 00013 // (P.Clarke was principle author of this class) 00014 // 00015 // Description: 00016 // 00017 // Algorithm which makes Clusters from Cells 00018 // 00019 // Note that the definition of cluster inherited from ATLFAST++ 00020 // is really jet finding, in that it summs up enery in Cells 00021 // in a cone of a given radius. 00022 // 00023 // 00024 // This version of ClusterMaker implements the following strategy: 00025 // 00026 // This is meant to be the NON ENERGY SHARING strategy coded in ATLFAST++ 00027 // If this is wrong it is due to mis-interpretaion of ATLFAST++ code by 00028 // the Author. 00029 // 00030 // 1. Read in all calorimeter Cells (pointers) from the TES 00031 // 00032 // =============> 00033 // 2. Start iteration over available cells 00034 // 00035 // 2.1 Take the (next) highest eT() Cell as initiator 00036 // 00037 // 2.2 If ( initiator.eT() < threshold ) strategy terminates immediately 00038 // 00039 // 2.3 If ( initiator.eT() > threshold ) 00040 // 00041 // 2.3.1 Add up initiator and all cells within a given cone (eg 0.4) 00042 // of initiator ( an eT() weighted eta() and phi() are formed ) 00043 // 00044 // 2.3.2 If( (sum of cells).eT() > threshold ) 00045 // 00046 // 2.3.2.1 Make a new Cluster 00047 // 00048 // 2.3.2.2 Remove all cells used (including initiator) 00049 // from the list of available cells 00050 // 00051 // <============ continue iteration 00052 // 00053 // 2.3.3 If ( (sum of cells).eT() < threshold ) 00054 // 00055 // 2.3.3.1 Mark initiator so that it is not considered again 00056 // as an initiator (but it may still be included in a 00057 // cone sum) 00058 // 00059 // Return all cells in cone to the available cells. 00060 // 00061 // <============ continue iteration 00062 // 00063 // 00064 // 00065 // ................................................................ 00066 // 00067 00068 00069 #ifndef ATLFAST_CLUSTERMAKER_H 00070 #define ATLFAST_CLUSTERMAKER_H 00071 00072 // STL 00073 #include <string> 00074 #include <vector> 00075 00076 // Gaudi 00077 #include "GaudiKernel/Algorithm.h" 00078 00079 // Other 00080 #include "CLHEP/Vector/LorentzVector.h" 00081 00082 // Atlfast 00083 #include "AtlfastEvent/CollectionDefs.h" 00084 00085 #include "AtlfastUtils/KinematicHelper.h" 00086 00087 class ISvcLocator; 00088 class MsgStream; 00089 00090 //*************************************************************** 00091 // ClusterMaker class declaration 00092 // 00093 //**************************************************************** 00094 00095 namespace Atlfast { 00096 class Cell; 00097 class Cluster; 00098 class IClusterStrategy; 00099 class TesIO; 00100 00101 using std::string; 00102 00117 class ClusterMaker : public Algorithm{ 00118 00119 public: 00120 00121 //------------------------- 00122 // Constructors/Destructors 00123 //------------------------- 00125 ClusterMaker( const std::string& name, ISvcLocator* pSvcLocator ) ; 00127 virtual ~ClusterMaker(); 00128 00129 00130 //------------------------------------------------------ 00131 // Methods used by Athena to run the algorithm 00132 //------------------------------------------------------ 00134 StatusCode initialize() ; 00136 StatusCode execute() ; 00138 StatusCode finalize() ; 00139 00140 00141 private: 00142 00143 00144 //------------------------------------ 00145 // Types used internally by this class 00146 //------------------------------------ 00147 00148 // For local mutable copies of collections needed for algorithm operation 00149 // typedef std::vector<Cell*> localCellCollection ; 00150 // typedef localCellCollection::iterator localCellIterator ; 00151 00152 00153 00154 //--------------------------------------------------- 00155 // Parameters of this algorithm 00156 //--------------------------------------------------- 00157 00159 double m_rConeBarrel; 00161 double m_rConeForward; 00162 00164 double m_minInitiatorET ; 00165 00167 double m_minClusterET; 00168 00170 bool m_masslessJets; 00171 00173 std::string m_strategy; 00174 IClusterStrategy* m_clusterStrategy; 00176 bool m_processTracks; 00177 bool m_processCells; 00179 std::string m_inputCellLocation ; 00180 std::string m_inputTrackLocation ; 00182 std::string m_outputLocation ; 00184 std::string m_unusedCellLocation ; 00185 std::string m_unusedTrackLocation ; 00186 00188 double m_ktRParameter; 00189 std::string m_ktAngle; 00190 std::string m_ktRecomScheme; 00192 int m_ktYCut; 00193 00194 //------------------------------- 00195 // Objects used by this class to do its job 00196 //------------------------------- 00197 00199 KinematicHelper m_kinehelp ; 00200 00201 //------------------------------- 00202 // Private methods 00203 //------------------------------- 00204 00206 // void makeClusters( MsgStream& log, 00207 // localCellCollection, ClusterCollection* ) ; 00208 // void makeClusters( MsgStream& log, 00209 // std::vector<Cell*>, 00210 // ClusterCollection* ) ; 00211 00212 // looks up R-cone size according to position of initiator 00213 // double rCone( Cell* ) ; 00214 //Cell* version commented out for now: arg is not used+ gives 00215 //a compiler warning 00217 double rCone() ; 00218 00221 TesIO* m_tesIO; 00222 00223 //holds the Stotegate MC location 00224 std::string m_mcLocation; 00225 00226 //------------------------------- 00227 // Private helper class 00228 // For accumulating weighted kinematic quantities 00229 //------------------------------- 00230 00234 // class PreCluster { 00235 // // using ClusterMaker::localCellIterator; 00236 // 00237 // private: 00238 // 00239 // double m_eT_total ; 00240 // double m_eta_weighted ; 00241 // HepLorentzVector m_momentum_sum ; 00242 // public: 00243 // 00244 // // Construct 00245 // // PreCluster( localCellIterator start, localCellIterator end ) ; 00246 // PreCluster( std::vector<Cell*>::iterator start, 00247 // std::vector<Cell*>::iterator end 00248 // ); 00249 // 00250 // /** kinematic query */ 00251 // double eT() ; 00252 // /** kinematic query */ 00253 // double eta() ; 00254 // /** kinematic query */ 00255 // double phi() ; 00256 // 00257 // /** Conversion to HepLorentzVector */ 00258 // operator HepLorentzVector () ; 00259 // }; 00260 00261 // Cluster * lnkCluster; 00262 }; 00263 } // end of namespace bracket 00264 00265 #endif 00266 00267 00268 00269