- moving the cluster parameter evalution from own component to clusterizer
[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
49 /** 
50  * @class AliHLTCaloClusterAnalyser
51  * ClusterAnalyser for CALO HLT. Algorithms for center of gravity
52  * and moment calculations are based on classes from the CALO
53  * offline analysis directory
54  *
55  * @ingroup alihlt_calo
56  */
57 //class AliHLTCaloClusterAnalyser : public AliHLTCaloBase
58 class AliHLTCaloClusterAnalyser : public AliHLTLogging
59 {
60 public:
61
62   /** Constructor */
63   AliHLTCaloClusterAnalyser();
64
65   /** Destructor */
66   virtual ~AliHLTCaloClusterAnalyser();
67   
68   /**
69    * Set the rec point data buffer
70    * @param recPointDataPtr is a pointer to the rec points
71    */
72   void SetRecPointArray(AliHLTCaloRecPointDataStruct **recPointDataPtr, Int_t nRecPoints);
73
74   /** 
75    * Set the calo cluster output buffer
76    * @param caloClusterDataPtr is a pointer to the calo cluster buffer
77    */
78   void SetCaloClusterData(AliHLTCaloClusterDataStruct *caloClusterDataPtr);
79
80   /** 
81    * Calculates the center of gravity for the reconstruction points in the container
82    * @return
83    */
84   Int_t CalculateCenterOfGravity();
85
86   /** 
87    * Calculates the moments for the reconstruction points in the container
88    * @return 
89    */
90   Int_t CalculateRecPointMoments();
91
92   /** 
93    * Calculates the moments for a certain cluster
94    * @return 
95    */
96   Int_t CalculateClusterMoments(AliHLTCaloRecPointDataStruct *recPointPtr, AliHLTCaloClusterDataStruct* clusterPtr);
97
98   /** 
99    * Deconvolute the clusters in an AliHLTCaloRecPointContainerStruct
100    * @return
101    */
102   Int_t DeconvoluteClusters();
103
104   /**
105    * Convert the rec points into calo clusters
106    * @return
107    */
108   Int_t CreateClusters(Int_t nRecPoints, UInt_t availableSize, UInt_t& totSize);
109
110   /**
111    * Fit a cluster
112    * param recPointPtr is a pointer to the rec point to fit
113    * @return 
114    */
115   Int_t FitCluster(AliHLTCaloRecPointDataStruct* /*recPointPtr*/) { return 0; }
116
117   /**
118    * Get the distance to the nearest CPV rec point
119    * param recPointPtr is the pointer to the emc rec point
120    * @return the distance
121    */
122   Float_t GetCPVDistance(AliHLTCaloRecPointDataStruct* /*recPointPtr*/) { return 0; };
123
124   /**
125    * Do partice identification
126    * param clusterPtr is the pointer to the emc cluster
127    * @return 
128    */
129   Int_t DoParticleIdentification(AliHLTCaloClusterDataStruct* /*clusterPtr*/) { return 0; }
130   
131   /**
132    * Get the distance to the neares bad channel
133    * param clusterPtr is a pointer to the calo cluster
134    * @return the distance
135    */
136   Float_t GetDistanceToBadChannel(AliHLTCaloClusterDataStruct* /*clusterPtr*/) { return 0; }
137
138   /**
139    * Set do cluster fit
140    */
141   void SetDoClusterFit() { fDoClusterFit = true; }
142   
143   /**
144    * Set have cpv info
145    */
146   void SetHaveCPVInfo() { fHaveCPVInfo = true; }
147
148   /** 
149    * Set do PID
150    */
151   void SetDoPID() { fDoPID = true; }
152
153   /**
154    * Set have distance to bad channel
155    */
156   void SetHaveDistanceToBadChannel() { fHaveDistanceToBadChannel = true; }
157
158   /**
159   * Set the geometry object (different for EMCAL and PHOS)
160   */
161   void SetGeometry(AliHLTCaloGeometry *geometry) { fGeometry = geometry; }
162
163   /** 
164   * Set pointer to the digits
165   */
166   void SetDigitDataArray(AliHLTCaloDigitDataStruct *digits);
167
168   
169   void DoNothing() { printf("Do nothing\n");}
170 private:
171   
172   /** Used for calculation of center of gravity */
173   Float_t fLogWeight;                                       //COMMENT
174   
175   /** Pointer to the rec points */
176   AliHLTCaloRecPointDataStruct **fRecPointArray;         //! transient
177
178   /** Pointer to the digits */
179   AliHLTCaloDigitDataStruct *fDigitDataArray;         //! transient
180
181   /** Number of rec points */
182   Int_t fNRecPoints;                                      //COMMENT
183
184   /** Pointer to the cluster buffer */
185   AliHLTCaloClusterDataStruct *fCaloClusterDataPtr;   //! transient
186
187   /** Pointer to the cluster header */
188   AliHLTCaloClusterHeaderStruct *fCaloClusterHeaderPtr;   //! transient
189
190   /** Should we do cluster fitting? */
191   Bool_t fDoClusterFit;                                     //COMMENT
192   
193   /** Do we have CPV info? */
194   Bool_t fHaveCPVInfo;                                      //COMMENT
195
196   /** Should we do PID? */ 
197   Bool_t fDoPID;                                            //COMMENT
198
199   /** Do we have distance to bad channel? */
200   Bool_t fHaveDistanceToBadChannel;                         //COMMENT
201   
202   /** The geometry object */
203   AliHLTCaloGeometry* fGeometry;                                   //COMMENT
204   
205 };
206
207 #endif