Roll back
[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 "AliHLTLogging.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 AliHLTCaloDigitDataStruct;
45 class AliHLTCaloClusterHeaderStruct;
46 class AliHLTCaloClusterDataStruct;
47 class AliHLTCaloGeometry;
48 class AliHLTCaloRecoParamHandler;
49
50 class TH1F; //DEBUG
51
52
53 /** 
54  * @class AliHLTCaloClusterAnalyser
55  * ClusterAnalyser for CALO HLT. Algorithms for center of gravity
56  * and moment calculations are based on classes from the CALO
57  * offline analysis directory
58  *
59  * @ingroup alihlt_calo
60  */
61 //class AliHLTCaloClusterAnalyser : public AliHLTCaloBase
62 class AliHLTCaloClusterAnalyser : public AliHLTLogging
63 {
64 public:
65
66   /** Constructor */
67   AliHLTCaloClusterAnalyser();
68
69   /** Destructor */
70   virtual ~AliHLTCaloClusterAnalyser();
71   
72   /**
73    * Set the rec point data buffer
74    * @param recPointDataPtr is a pointer to the rec points
75    */
76   void SetRecPointArray(AliHLTCaloRecPointDataStruct **recPointDataPtr, Int_t nRecPoints);
77
78   /** 
79    * Set the calo cluster output buffer
80    * @param caloClusterDataPtr is a pointer to the calo cluster buffer
81    */
82   void SetCaloClusterData(AliHLTCaloClusterDataStruct *caloClusterDataPtr);
83
84   /** 
85    * Calculates the center of gravity for the reconstruction points in the container
86    * @return
87    */
88   Int_t CalculateCenterOfGravity();
89
90   /** 
91    * Calculates the moments for the reconstruction points in the container
92    * @return 
93    */
94   Int_t CalculateRecPointMoments();
95
96   /** 
97    * Calculates the moments for a certain cluster
98    * @return 
99    */
100   Int_t CalculateClusterMoments(AliHLTCaloRecPointDataStruct *recPointPtr, AliHLTCaloClusterDataStruct* clusterPtr);
101
102   /** 
103    * Deconvolute the clusters in an AliHLTCaloRecPointContainerStruct
104    * @return
105    */
106   Int_t DeconvoluteClusters();
107
108   /**
109    * Convert the rec points into calo clusters
110    * @return
111    */
112   Int_t CreateClusters(Int_t nRecPoints, UInt_t availableSize, UInt_t& totSize);
113
114   /**
115    * Fit a cluster
116    * param recPointPtr is a pointer to the rec point to fit
117    * @return 
118    */
119   Int_t FitCluster(AliHLTCaloRecPointDataStruct* /*recPointPtr*/) { return 0; }
120
121   /**
122    * Get the distance to the nearest CPV rec point
123    * param recPointPtr is the pointer to the emc rec point
124    * @return the distance
125    */
126   Float_t GetCPVDistance(AliHLTCaloRecPointDataStruct* /*recPointPtr*/) { return 0; };
127
128   /**
129    * Do partice identification
130    * param clusterPtr is the pointer to the emc cluster
131    * @return 
132    */
133   Int_t DoParticleIdentification(AliHLTCaloClusterDataStruct* /*clusterPtr*/) { return 0; }
134   
135   /**
136    * Get the distance to the neares bad channel
137    * param clusterPtr is a pointer to the calo cluster
138    * @return the distance
139    */
140   Float_t GetDistanceToBadChannel(AliHLTCaloClusterDataStruct* /*clusterPtr*/) { return 0; }
141
142   /**
143    * Set do cluster fit
144    */
145   void SetDoClusterFit() { fDoClusterFit = true; }
146   
147   /**
148    * Set have cpv info
149    */
150   void SetHaveCPVInfo() { fHaveCPVInfo = true; }
151
152   /** 
153    * Set do PID
154    */
155   void SetDoPID() { fDoPID = true; }
156
157   /**
158    * Set have distance to bad channel
159    */
160   void SetHaveDistanceToBadChannel() { fHaveDistanceToBadChannel = true; }
161
162   /**
163   * Set the geometry object (different for EMCAL and PHOS)
164   */
165   void SetGeometry(AliHLTCaloGeometry *geometry) { fGeometry = geometry; }
166
167   /** 
168   * Set pointer to the digits
169   */
170   void SetDigitDataArray(AliHLTCaloDigitDataStruct **digits);
171
172   /**
173   * Set the cluster type 
174   */
175   void SetClusterType(Char_t clusterType) { fClusterType = clusterType; }
176   
177   /** 
178   * Set the reconstruction parameters handler 
179   */
180   void SetRecoParamHandler(AliHLTCaloRecoParamHandler *recoParams) { fRecoParamsPtr = recoParams; }
181   
182   /** Set cut on single cell clusters */
183   void SetCutOnSingleCellClusters(Bool_t doCut, Float_t energyCut) {fCutOnSingleCellClusters = doCut; fSingleCellEnergyCut = energyCut; }
184   
185  
186 private:
187   
188   /** Used for calculation of center of gravity */
189   Float_t fLogWeight;                                       //COMMENT
190   
191   /** Pointer to the rec points */
192   AliHLTCaloRecPointDataStruct **fRecPointArray;         //! transient
193
194   /** Pointer to the digits */
195   AliHLTCaloDigitDataStruct **fDigitDataArray;         //! transient
196
197   /** Number of rec points */
198   Int_t fNRecPoints;                                      //COMMENT
199
200   /** Pointer to the cluster buffer */
201   AliHLTCaloClusterDataStruct *fCaloClusterDataPtr;   //! transient
202
203   /** Pointer to the cluster header */
204   AliHLTCaloClusterHeaderStruct *fCaloClusterHeaderPtr;   //! transient
205
206   /** Should we do cluster fitting? */
207   Bool_t fDoClusterFit;                                     //COMMENT
208   
209   /** Do we have CPV info? */
210   Bool_t fHaveCPVInfo;                                      //COMMENT
211
212   /** Should we do PID? */ 
213   Bool_t fDoPID;                                            //COMMENT
214
215   /** Do we have distance to bad channel? */
216   Bool_t fHaveDistanceToBadChannel;                         //COMMENT
217   
218   /** The geometry object */
219   AliHLTCaloGeometry* fGeometry;                                   //! transient
220
221   /** The cluster type */
222   Char_t fClusterType;                   //COMMENT
223   
224   /** Handler to get the hold of reconstruction parameters */
225   AliHLTCaloRecoParamHandler *fRecoParamsPtr; //COMMENT
226   
227   /** Should we cut out single celled high energy clusters? */
228   Bool_t fCutOnSingleCellClusters;       //COMMENT
229   
230   /** If we cut on single celled clusters, what is our energy cut? */
231   Float_t fSingleCellEnergyCut; //COMMENT
232  
233  /** Copy constructor  not implemented */
234  AliHLTCaloClusterAnalyser ( const AliHLTCaloClusterAnalyser &); // not implemented
235     
236  /** Assignment */
237 AliHLTCaloClusterAnalyser & operator = ( const AliHLTCaloClusterAnalyser &); // not implemented
238     
239 };
240
241 #endif