ClusterMaker.h

Go to the documentation of this file.
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 

Generated on Mon Sep 24 14:19:10 2007 for AtlfastAlgs by  doxygen 1.5.1