1 #ifndef ALICALORIMETER_H
2 #define ALICALORIMETER_H
3 ///////////////////////////////////////////////////////////////////////////
4 // Class AliCalorimeter
5 // Description of a modular calorimeter system.
6 // A matrix geometry is used in which a module is identified by (row,col).
7 // Note : First module is identified as (1,1).
9 // This is the way to define and enter signals into a calorimeter :
11 // AliCalorimeter cal(10,15); // Calorimeter of 10x15 modules
12 // // All module signals set to 0.
13 // cal.AddSignal(5,7,85.4);
14 // cal.AddSignal(5,7,25.9);
15 // cal.AddSignal(3,5,1000);
16 // cal.SetSignal(5,7,10.3);
17 // cal.Reset(3,5); // Reset module (3,5) as being 'not fired'
18 // // All module data are re-initialised.
19 // cal.SetEdgeOn(1,1); // Declare module (1,1) as an 'edge module'
21 // cal.SetGain(2,8,3.2);
23 // Float_t vec[3]={6,1,20};
24 // cal.SetPosition(2,8,vec,"car");
26 // Float_t loc[3]={-1,12,3};
27 // cal.AddVetoSignal(loc,"car"); // Associate (extrapolated) position as a veto
29 // cal.Group(2); // Group 'fired' modules into clusters
30 // // Perform grouping over 2 rings around the center
31 // cal.Reset(); // Reset the complete calorimeter
32 // // Normally to prepare for the next event data
33 // // Note : Module gain, edge and dead flags remain
35 //--- NvE 13-jun-1997 UU-SAP Utrecht
36 ///////////////////////////////////////////////////////////////////////////
42 #include "TObjArray.h"
46 #include "AliDetector.h"
48 #include "AliCalmodule.h"
49 #include "AliCalcluster.h"
50 #include "AliSignal.h"
52 class AliCalorimeter : public AliDetector
55 AliCalorimeter(); // Default constructor
56 AliCalorimeter(Int_t nrow,Int_t ncol); // Create a calorimeter matrix
57 ~AliCalorimeter(); // Destructor
58 Int_t GetNrows(); // Return number of rows of the matrix
59 Int_t GetNcolumns(); // Return number of columns of the matrix
60 void SetSignal(Int_t row,Int_t col,Float_t s); // Set signal for a certain module
61 void AddSignal(Int_t row,Int_t col,Float_t s); // Add signal to a certain module
62 void Reset(Int_t row,Int_t col); // Reset signal for a certain module
63 void Reset(); // Reset the complete calorimeter
64 Float_t GetSignal(Int_t row,Int_t col); // Provide signal of a certain module
65 Int_t GetNsignals(); // Return number of modules with a signal
66 void Group(Int_t n); // Group modules into clusters (n rings)
67 Int_t GetNclusters(); // Return number of clusters
68 Float_t GetClusteredSignal(Int_t row,Int_t col); // Provide module signal after clustering
69 AliCalcluster* GetCluster(Int_t j); // Access to cluster number j
70 AliCalmodule* GetModule(Int_t j); // Access to 'fired' module number j
71 void SetEdgeOn(Int_t row,Int_t col); // Indicate module as 'edge module'
72 void SetEdgeOff(Int_t row,Int_t col); // Indicate module as 'non-edge module'
73 Int_t GetEdgeValue(Int_t row,Int_t col); // Provide the edge flag of a module
74 void SetDead(Int_t row,Int_t col); // Indicate module as 'dead module'
75 void SetAlive(Int_t row,Int_t col); // Indicate module as 'active module'
76 Int_t GetDeadValue(Int_t row,Int_t col); // Provide the dead flag of a module
77 void SetGain(Int_t row,Int_t col,Float_t g); // Set the gain value for a module
78 Float_t GetGain(Int_t row,Int_t col); // Provide the gain value of a module
79 void SetPosition(Int_t row,Int_t col,Float_t* r,TString f); // Set module position
80 void GetPosition(Int_t row,Int_t col,Float_t* r,TString f); // Return module position
81 TH2F* DrawModules(); // Draw lego plot of module signals
82 TH2F* DrawClusters(); // Draw lego plot of cluster signals
83 void AddVetoSignal(Float_t* r,TString f,Float_t s=0); // Associate (extrapolated) signal
84 AliSignal* GetVetoSignal(Int_t j); // Access to veto signal number j
85 Int_t GetNvetos(); // Provide the number of veto signals
88 Int_t fNrows; // The number of rows
89 Int_t fNcolumns; // The number of columns
90 Int_t fNsignals; // The number of modules with a signal
91 Int_t fNclusters; // The number of clusters
92 AliCalmodule** fMatrix; //! The matrix of modules for internal use
93 void Sortm(AliCalmodule*); // Order the modules with decreasing signal
94 TObjArray* fClusters; // The array of clusters
95 void AddRing(Int_t row,Int_t col,Int_t n); // add signals of n rings around cluster center
96 TObjArray* fModules; // The array of modules for output
97 void LoadMatrix(); // Load calorimeter matrix data from input
98 void Ungroup(); // Restore module matrix as before clustering
99 TH2F* fHmodules; //! The module 2-D histogram
100 TH2F* fHclusters; //! The cluster 2-D histogram
101 Int_t fNvetos; // The number of associated veto signals
102 TObjArray* fVetos; // The array of associated (extrapolated) veto signals
104 ClassDef(AliCalorimeter,1) // Class definition to enable ROOT I/O