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 "AtlfastCode/CellCollection.h" 00084 #include "AtlfastCode/ClusterCollection.h" 00085 00086 #include "AtlfastCode/KinematicHelper.h" 00087 00088 class ISvcLocator; 00089 class MsgStream; 00090 00091 //************************************* 00092 //Default parameters for this algorithm 00093 // (descriptions in class declaration) 00094 //************************************* 00095 #define DEFAULT_minInitiatorET 1.5 00096 //Cones set to 0.401 to avoid calorimeter grid problems 00097 #define DEFAULT_rConeBarrel 0.401 00098 #define DEFAULT_rConeForward 0.401 00099 #define DEFAULT_minClusterET 5. 00100 #define DEFAULT_inputLocation "/Event/AtlfastCells" 00101 #define DEFAULT_outputLocation "/Event/AtlfastClusters" 00102 #define DEFAULT_unusedCellLocation "/Event/AtlfastUnusedCells" 00103 #define DEFAULT_Strategy "Cone" 00104 00105 00106 00107 00108 00109 //*************************************************************** 00110 // ClusterMaker class declaration 00111 // 00112 //**************************************************************** 00113 00114 namespace Atlfast { 00115 class Cell; 00116 class Cluster; 00117 class IClusterStrategy; 00118 class TesIO; 00130 class ClusterMaker : public Algorithm 00131 { 00132 00133 public: 00134 00135 //------------------------- 00136 // Constructors/Destructors 00137 //------------------------- 00139 ClusterMaker( const std::string& name, ISvcLocator* pSvcLocator ) ; 00141 virtual ~ClusterMaker(); 00142 00143 00144 //------------------------------------------------------ 00145 // Methods used by Athena to run the algorithm 00146 //------------------------------------------------------ 00148 StatusCode initialize() ; 00150 StatusCode execute() ; 00152 StatusCode finalize() ; 00153 00154 00155 00156 private: 00157 00158 00159 //------------------------------------ 00160 // Types used internally by this class 00161 //------------------------------------ 00162 00163 // For local mutable copies of collections needed for algorithm operation 00164 typedef std::vector<Cell*> localCellCollection ; 00165 typedef localCellCollection::iterator localCellIterator ; 00166 00167 00168 00169 //--------------------------------------------------- 00170 // Parameters of this algorithm 00171 //--------------------------------------------------- 00172 00174 double m_rConeBarrel; 00176 double m_rConeForward; 00177 00179 double m_minInitiatorET ; 00180 00182 double m_minClusterET; 00183 00185 std::string m_strategy; 00186 IClusterStrategy* m_clusterStrategy; 00188 std::string m_inputLocation ; 00190 std::string m_outputLocation ; 00192 std::string m_unusedCellLocation ; 00193 00194 00195 00196 //------------------------------- 00197 // Objects used by this class to do its job 00198 //------------------------------- 00199 00201 KinematicHelper m_kinehelp ; 00202 00204 /*# Cell lnkCell; */ 00205 //------------------------------- 00206 // Private methods 00207 //------------------------------- 00208 00210 void makeClusters( MsgStream& log, localCellCollection, 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 // Private helper class 00224 // For accumulating weighted kinematic quantities 00225 //------------------------------- 00226 00229 class PreCluster { 00230 00231 private: 00232 00233 double m_eT_total ; 00234 double m_eta_weighted ; 00235 HepLorentzVector m_momentum_sum ; 00236 00237 public: 00238 00239 // Construct 00240 PreCluster( localCellIterator start, localCellIterator end ) ; 00241 00243 double eT() ; 00245 double eta() ; 00247 double phi() ; 00248 00250 operator HepLorentzVector () ; 00251 }; 00252 00253 00258 Cluster * lnkCluster; 00259 }; 00260 00261 } // end of namespace bracket 00262 00263 00264 #endif 00265 00266 00267 00268 00269 00270