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/CellCollection.h" 00084 #include "AtlfastEvent/ClusterCollection.h" 00085 00086 #include "AtlfastUtils/KinematicHelper.h" 00087 00088 class ISvcLocator; 00089 class MsgStream; 00090 00091 //*************************************************************** 00092 // ClusterMaker class declaration 00093 // 00094 //**************************************************************** 00095 00096 namespace Atlfast { 00097 class Cell; 00098 class Cluster; 00099 class IClusterStrategy; 00100 class TesIO; 00101 00102 using std::string; 00114 class ClusterMaker : public Algorithm{ 00115 00116 public: 00117 00118 //------------------------- 00119 // Constructors/Destructors 00120 //------------------------- 00122 ClusterMaker( const std::string& name, ISvcLocator* pSvcLocator ) ; 00124 virtual ~ClusterMaker(); 00125 00126 00127 //------------------------------------------------------ 00128 // Methods used by Athena to run the algorithm 00129 //------------------------------------------------------ 00131 StatusCode initialize() ; 00133 StatusCode execute() ; 00135 StatusCode finalize() ; 00136 00137 00138 private: 00139 00140 00141 //------------------------------------ 00142 // Types used internally by this class 00143 //------------------------------------ 00144 00145 // For local mutable copies of collections needed for algorithm operation 00146 // typedef std::vector<Cell*> localCellCollection ; 00147 // typedef localCellCollection::iterator localCellIterator ; 00148 00149 00150 00151 //--------------------------------------------------- 00152 // Parameters of this algorithm 00153 //--------------------------------------------------- 00154 00156 double m_rConeBarrel; 00158 double m_rConeForward; 00159 00161 double m_minInitiatorET ; 00162 00164 double m_minClusterET; 00165 00167 bool m_masslessJets; 00168 00170 std::string m_strategy; 00171 IClusterStrategy* m_clusterStrategy; 00173 std::string m_inputLocation ; 00175 std::string m_outputLocation ; 00177 std::string m_unusedCellLocation ; 00178 00179 00180 00181 //------------------------------- 00182 // Objects used by this class to do its job 00183 //------------------------------- 00184 00186 KinematicHelper m_kinehelp ; 00187 00188 //------------------------------- 00189 // Private methods 00190 //------------------------------- 00191 00193 // void makeClusters( MsgStream& log, 00194 // localCellCollection, ClusterCollection* ) ; 00195 void makeClusters( MsgStream& log, 00196 std::vector<Cell*>, 00197 ClusterCollection* ) ; 00198 00199 // looks up R-cone size according to position of initiator 00200 // double rCone( Cell* ) ; 00201 //Cell* version commented out for now: arg is not used+ gives 00202 //a compiler warning 00204 double rCone() ; 00205 00208 TesIO* m_tesIO; 00209 //------------------------------- 00210 // Private helper class 00211 // For accumulating weighted kinematic quantities 00212 //------------------------------- 00213 00216 class PreCluster { 00217 // using ClusterMaker::localCellIterator; 00218 00219 private: 00220 00221 double m_eT_total ; 00222 double m_eta_weighted ; 00223 HepLorentzVector m_momentum_sum ; 00224 public: 00225 00226 // Construct 00227 // PreCluster( localCellIterator start, localCellIterator end ) ; 00228 PreCluster( std::vector<Cell*>::iterator start, 00229 std::vector<Cell*>::iterator end 00230 ); 00231 00233 double eT() ; 00235 double eta() ; 00237 double phi() ; 00238 00240 operator HepLorentzVector () ; 00241 }; 00242 00243 Cluster * lnkCluster; 00244 }; 00245 00246 } // end of namespace bracket 00247 00248 #endif