Line data Source code
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 0 : 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 0 : 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 0 : 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 0 : Float_t GetDistanceToBadChannel(AliHLTCaloClusterDataStruct* /*clusterPtr*/) { return 0; }
141 :
142 : /**
143 : * Set do cluster fit
144 : */
145 0 : void SetDoClusterFit() { fDoClusterFit = true; }
146 :
147 : /**
148 : * Set have cpv info
149 : */
150 0 : void SetHaveCPVInfo() { fHaveCPVInfo = true; }
151 :
152 : /**
153 : * Set do PID
154 : */
155 0 : void SetDoPID() { fDoPID = true; }
156 :
157 : /**
158 : * Set have distance to bad channel
159 : */
160 0 : void SetHaveDistanceToBadChannel() { fHaveDistanceToBadChannel = true; }
161 :
162 : /**
163 : * Set the geometry object (different for EMCAL and PHOS)
164 : */
165 0 : 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 0 : void SetClusterType(Char_t clusterType) { fClusterType = clusterType; }
176 :
177 : /**
178 : * Set the reconstruction parameters handler
179 : */
180 0 : void SetRecoParamHandler(AliHLTCaloRecoParamHandler *recoParams) { fRecoParamsPtr = recoParams; }
181 :
182 : /** Set cut on single cell clusters */
183 0 : 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
|