06f164cc4dfec936c12834a150170466d96805d1
[u/mrichter/AliRoot.git] / HLT / CALO / AliHLTCaloClusterAnalyser.h
1 //-*- Mode: C++ -*-
2 // $Id: AliHLTCaloClusterAnalyser.h 35107 2009-09-30 01:45:06Z phille $
3
4  /**************************************************************************
5  * This file is property of and copyright by the ALICE HLT Project        * 
6  * All rights reserved.                                                   *
7  *                                                                        *
8  * Primary Authors: Oystein Djuvsland                                     *
9  *                                                                        *
10  * Permission to use, copy, modify and distribute this software and its   *
11  * documentation strictly for non-commercial purposes is hereby granted   *
12  * without fee, provided that the above copyright notice appears in all   *
13  * copies and that both the copyright notice and this permission notice   *
14  * appear in the supporting documentation. The authors make no claims     *
15  * about the suitability of this software for any purpose. It is          * 
16  * provided "as is" without express or implied warranty.                  *
17  **************************************************************************/
18
19 #ifndef ALIHLTCALOCLUSTERANALYSER_H
20 #define ALIHLTCALOCLUSTERANALYSER_H
21
22 #include "Rtypes.h"
23
24 /**
25  * Class calculates properties of rec points
26  *
27  * @file   AliHLTCaloClusterAnalyser.h
28  * @author Oystein Djuvsland
29  * @date
30  * @brief  Cluster analyser for CALO HLT
31  */
32
33 // see header file for class documentation
34 // or
35 // refer to README to build package
36 // or
37 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
38
39 //#include "AliHLTCaloBase.h"
40
41 //class AliHLTCaloPhysicsAnalyzer;
42 class AliHLTCaloRecPointHeaderStruct;
43 class AliHLTCaloRecPointDataStruct;
44 class AliHLTCaloClusterHeaderStruct;
45 class AliHLTCaloClusterDataStruct;
46 class AliPHOSGeoUtils;
47
48 /** 
49  * @class AliHLTCaloClusterAnalyser
50  * ClusterAnalyser for CALO HLT. Algorithms for center of gravity
51  * and moment calculations are based on classes from the CALO
52  * offline analysis directory
53  *
54  * @ingroup alihlt_calo
55  */
56 //class AliHLTCaloClusterAnalyser : public AliHLTCaloBase
57 class AliHLTCaloClusterAnalyser 
58 {
59 public:
60
61   /** Constructor */
62   AliHLTCaloClusterAnalyser();
63
64   /** Destructor */
65   virtual ~AliHLTCaloClusterAnalyser();
66   
67   /** Copy constructor */
68   AliHLTCaloClusterAnalyser(const AliHLTCaloClusterAnalyser &) : 
69     //   AliHLTCaloBase(),
70     fLogWeight(0),
71     fRecPointDataPtr(0),
72     fNRecPoints(0),
73     fCaloClusterDataPtr(0),
74     fCaloClusterHeaderPtr(0),
75     fPHOSGeometry(0),
76     //fAnalyzerPtr(0),
77     fDoClusterFit(false),
78     fHaveCPVInfo(false),
79     fDoPID(false),
80     fHaveDistanceToBadChannel(false)
81     
82   {
83     //Copy constructor not implemented
84   }
85   
86   /** Assignment */
87   AliHLTCaloClusterAnalyser & operator = (const AliHLTCaloClusterAnalyser)
88     {
89       //Assignment
90       return *this; 
91     }
92   
93   /**
94    * Set the rec point data buffer
95    * @param recPointDataPtr is a pointer to the rec points
96    */
97   void SetRecPointDataPtr(AliHLTCaloRecPointHeaderStruct *recPointDataPtr);
98
99   /** 
100    * Set the calo cluster output buffer
101    * @param caloClusterDataPtr is a pointer to the calo cluster buffer
102    */
103   void SetCaloClusterDataPtr(AliHLTCaloClusterDataStruct *caloClusterDataPtr);
104
105   /** 
106    * Calculates the center of gravity for the reconstruction points in the container
107    * @return
108    */
109   Int_t CalculateCenterOfGravity();
110
111   /** 
112    * Calculates the moments for the reconstruction points in the container
113    * @return 
114    */
115   Int_t CalculateRecPointMoments();
116
117   /** 
118    * Calculates the moments for a certain cluster
119    * @return 
120    */
121   Int_t CalculateClusterMoments(AliHLTCaloRecPointDataStruct *recPointPtr, AliHLTCaloClusterDataStruct* clusterPtr);
122
123   /** 
124    * Deconvolute the clusters in an AliHLTCaloRecPointContainerStruct
125    * @return
126    */
127   Int_t DeconvoluteClusters();
128
129   /**
130    * Convert the rec points into calo clusters
131    * @return
132    */
133   Int_t CreateClusters(UInt_t availableSize, UInt_t& totSize);
134
135   /**
136    * Fit a cluster
137    * param recPointPtr is a pointer to the rec point to fit
138    * @return 
139    */
140   Int_t FitCluster(AliHLTCaloRecPointDataStruct* /*recPointPtr*/) { return 0; }
141
142   /**
143    * Get the distance to the nearest CPV rec point
144    * param recPointPtr is the pointer to the emc rec point
145    * @return the distance
146    */
147   Float_t GetCPVDistance(AliHLTCaloRecPointDataStruct* /*recPointPtr*/) { return 0; };
148
149   /**
150    * Do partice identification
151    * param clusterPtr is the pointer to the emc cluster
152    * @return 
153    */
154   Int_t DoParticleIdentification(AliHLTCaloClusterDataStruct* /*clusterPtr*/) { return 0; }
155   
156   /**
157    * Get the distance to the neares bad channel
158    * param clusterPtr is a pointer to the calo cluster
159    * @return the distance
160    */
161   Float_t GetDistanceToBadChannel(AliHLTCaloClusterDataStruct* /*clusterPtr*/) { return 0; }
162
163   /**
164    * Set do cluster fit
165    */
166   void SetDoClusterFit() { fDoClusterFit = true; }
167   
168   /**
169    * Set have cpv info
170    */
171   void SetHaveCPVInfo() { fHaveCPVInfo = true; }
172
173   /** 
174    * Set do PID
175    */
176   void SetDoPID() { fDoPID = true; }
177
178   /**
179    * Set have distance to bad channel
180    */
181   void SetHaveDistanceToBadChannel() { fHaveDistanceToBadChannel = true; }
182
183 private:
184   
185   /** Used for calculation of center of gravity */
186   Float_t fLogWeight;                                       //COMMENT
187   
188   /** Pointer to the rec points */
189   AliHLTCaloRecPointDataStruct *fRecPointDataPtr;         //! transient
190
191   /** Number of rec points */
192   Int_t fNRecPoints;                                      //COMMENT
193
194   /** Pointer to the cluster buffer */
195   AliHLTCaloClusterDataStruct *fCaloClusterDataPtr;   //! transient
196
197   /** Pointer to the cluster header */
198   AliHLTCaloClusterHeaderStruct *fCaloClusterHeaderPtr;   //! transient
199
200   /** Instance of the PHOS geometry */
201   AliPHOSGeoUtils *fPHOSGeometry;                           //! transient
202
203   //TODO: should not use PhysicsAnalyzer for global coord!
204   /** */
205   //  AliHLTCaloPhysicsAnalyzer *fAnalyzerPtr;                  //! transient
206
207   /** Should we do cluster fitting? */
208   Bool_t fDoClusterFit;                                     //COMMENT
209   
210   /** Do we have CPV info? */
211   Bool_t fHaveCPVInfo;                                      //COMMENT
212
213   /** Should we do PID? */ 
214   Bool_t fDoPID;                                            //COMMENT
215
216   /** Do we have distance to bad channel? */
217   Bool_t fHaveDistanceToBadChannel;                         //COMMENT
218   
219   
220 };
221
222 #endif