4 /**************************************************************************
\r
5 * This file is property of and copyright by the ALICE HLT Project *
\r
6 * All rights reserved. *
\r
8 * Primary Authors: Oystein Djuvsland *
\r
10 * Permission to use, copy, modify and distribute this software and its *
\r
11 * documentation strictly for non-commercial purposes is hereby granted *
\r
12 * without fee, provided that the above copyright notice appears in all *
\r
13 * copies and that both the copyright notice and this permission notice *
\r
14 * appear in the supporting documentation. The authors make no claims *
\r
15 * about the suitability of this software for any purpose. It is *
\r
16 * provided "as is" without express or implied warranty. *
\r
17 **************************************************************************/
\r
19 #ifndef ALIHLTCALOCLUSTERIZER_H
\r
20 #define ALIHLTCALOCLUSTERIZER_H
\r
24 * Class does clusterization in for Calorimeters on an event basis. It is intended
\r
25 * for use in HLT, but can also be used offline
\r
27 * @file AliHLTCaloClusterizer.h
\r
28 * @author Oystein Djuvsland
\r
30 * @brief Clusterizer for CALO HLT
\r
33 // see header file for class documentation
\r
35 // refer to README to build package
\r
37 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
\r
39 //#include "AliHLTCaloBase.h"
\r
41 #include "AliHLTCaloRecPointContainerStruct.h"
\r
42 #include "AliHLTCaloRecPointDataStruct.h"
\r
43 #include "AliHLTCaloDigitContainerDataStruct.h"
\r
44 #include "AliHLTCaloDigitDataStruct.h"
\r
45 #include "TString.h"
\r
46 #include "AliHLTCaloConstantsHandler.h"
\r
48 //#include "AliPHOSGeometry.h"
\r
49 #include "AliHLTLogging.h"
\r
53 //class AliPHOSDigit;
\r
54 //class AliPHOSRecoParamEmc;
\r
55 //class AliPHOSRecoParam;
\r
58 * @class AliHLTCaloClusterizer
\r
59 * Clusterizer for CALO HLT. The clusterizer takes digits as input, either
\r
60 * in the form of a container of AliHLTCaloDigitDataStruct or a
\r
61 * TClonesArray of AliPHOSDigit through an instance of a AliPHOSLoader
\r
63 * @ingroup alihlt_calo
\r
67 class AliHLTCaloClusterizer : public AliHLTCaloConstantsHandler, public AliHLTLogging
\r
73 AliHLTCaloClusterizer(TString det);
\r
76 virtual ~AliHLTCaloClusterizer();
\r
78 /** Set digit container */
\r
79 void SetDigitContainer(AliHLTCaloDigitContainerDataStruct* digitContainerPtr)
\r
80 { fDigitContainerPtr = digitContainerPtr; }
\r
82 /** Set array with digits */
\r
83 void SetDigitArray(AliHLTCaloDigitDataStruct **digitPointerArr)
\r
84 { fDigitsPointerArray = digitPointerArr; }
\r
86 /** Set rec point data buffer */
\r
87 void SetRecPointDataPtr(AliHLTCaloRecPointDataStruct* recPointDataPtr);
\r
89 /** Set reco parameters */
\r
90 // void SetRecoParameters(AliPHOSRecoParam* recoPars);
\r
92 /** Set emc clustering threshold */
\r
93 void SetEmcClusteringThreshold(Float_t threshold) { fEmcClusteringThreshold = threshold; }
\r
95 /** Set emc min energy threshold */
\r
96 void SetEmcMinEnergyThreshold(Float_t threshold) { fEmcMinEnergyThreshold = threshold; }
\r
98 /** Set emc time gate */
\r
99 void SetEmcTimeGate(Float_t gate) { fEmcTimeGate = gate; }
\r
101 /** Starts clusterization of the event */
\r
102 virtual Int_t ClusterizeEvent(Int_t nDigits);
\r
105 * For a given digit this digit scans for neighbouring digits which
\r
106 * passes the threshold for inclusion in a rec point. If one is found
\r
107 * it is added to the current rec point
\r
108 * @param digIndex index of the digit in the digit container
\r
109 * @param recPoint pointer to the current rec point
\r
111 virtual Int_t ScanForNeighbourDigits(Int_t digIndex, AliHLTCaloRecPointDataStruct* recPoint);
\r
114 * Checks if two digits are neighbours
\r
115 * @param d1 first digit
\r
116 * @param d2 second digit
\r
118 virtual Int_t AreNeighbours(AliHLTCaloDigitDataStruct* d1, AliHLTCaloDigitDataStruct* d2);
\r
121 * Get pointer to the rec points array
\r
123 AliHLTCaloRecPointDataStruct** GetRecPoints() const { return fRecPointArray; }
\r
125 Int_t CheckDigits(AliHLTCaloRecPointDataStruct **recArray = 0, AliHLTCaloDigitDataStruct **digArray = 0, Int_t nRP = 0);
\r
127 Int_t CheckDigits(AliHLTCaloRecPointDataStruct **recArray, AliHLTCaloDigitDataStruct *digArray, Int_t nRP = 0);
\r
132 * Check the rec point buffer size and resize the buffer if necessary
\r
134 virtual Int_t CheckBuffer(); //COMMENT
\r
137 * Check the rec point array size and resize the array if necessary
\r
139 virtual Int_t CheckArray(); //COMMENT
\r
141 /** Array of pointers to the rec point output */
\r
142 AliHLTCaloRecPointDataStruct **fRecPointArray; //COMMENT
\r
144 /** Pointer to the rec point output */
\r
145 AliHLTCaloRecPointDataStruct *fRecPointDataPtr; //COMMENT
\r
147 /** The first rec point in the list */
\r
148 AliHLTCaloRecPointDataStruct *fFirstRecPointPtr; //COMMENT
\r
150 /** Size of the rec point array */
\r
153 /** Available size for the rec point output */
\r
154 Int_t fAvailableSize;
\r
156 /** The used size for the rec point output */
\r
159 /** Number of rec points created so far */
\r
162 /** Pointer to the digit index array in the rec point */
\r
163 Int_t* fDigitIndexPtr; //! transient
\r
165 /** Energy threshold for starting a cluster for the calorimeter */
\r
166 Float_t fEmcClusteringThreshold; //COMMENT
\r
168 /** Energy threshold for including a crystal in a cluster */
\r
169 Float_t fEmcMinEnergyThreshold; //COMMENT
\r
171 /** Maximum time difference for inclusion in a rec point */
\r
172 Float_t fEmcTimeGate; //COMMENT
\r
174 /** Counts the digits in a rec point */
\r
175 Int_t fDigitsInCluster; //COMMENT
\r
177 /** Array of our digits */
\r
178 AliHLTCaloDigitDataStruct **fDigitsPointerArray; //! transient
\r
180 /** Contains the digits from one event */
\r
181 AliHLTCaloDigitContainerDataStruct *fDigitContainerPtr; //! transient
\r
183 /** Maximum difference in index to be a neighbour */
\r
184 Int_t fMaxDigitIndexDiff; //COMMENT
\r
186 /** Number of digits in event */
\r
187 Int_t fNDigits; //COMMENT
\r
191 /** Default constructor, prohibited */
\r
192 AliHLTCaloClusterizer(); // COMMENT
\r
194 /** Copy constructor, prohibited */
\r
195 AliHLTCaloClusterizer (const AliHLTCaloClusterizer &); //COMMENT
\r
197 /** Assignment operator, prohibited */
\r
198 AliHLTCaloClusterizer & operator = (const AliHLTCaloClusterizer &); //COMMENT
\r
200 ClassDef(AliHLTCaloClusterizer, 0);
\r