]> git.uio.no Git - u/mrichter/AliRoot.git/blob - RALICE/AliCalorimeter.h
warning fixed
[u/mrichter/AliRoot.git] / RALICE / AliCalorimeter.h
1 #ifndef ALICALORIMETER_H
2 #define ALICALORIMETER_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 // $Id$
7
8 #include <math.h>
9  
10 #include "TNamed.h"
11 #include "TObjArray.h"
12 #include "TH2.h"
13 #include "TString.h"
14
15 #include "AliDevice.h"
16 #include "AliObjMatrix.h"
17 #include "AliCalmodule.h"
18 #include "AliCalcluster.h"
19 #include "AliPositionObj.h"
20 #include "AliAttribObj.h"
21  
22 class AliCalorimeter : public AliDevice
23 {
24  public:
25   AliCalorimeter();                                      // Default constructor
26   AliCalorimeter(Int_t nrow,Int_t ncol);                 // Create a calorimeter matrix
27   virtual ~AliCalorimeter();                             // Destructor
28   AliCalorimeter(const AliCalorimeter& c);               // Copy constructor
29   virtual TObject* Clone(const char* name="") const;     // Make a deep copy and provide pointer of the copy
30   Int_t GetNrows();                                      // Return number of rows of the matrix
31   Int_t GetNcolumns();                                   // Return number of columns of the matrix
32   using AliDevice::SetSignal;
33   void SetSignal(Int_t row,Int_t col,Float_t s);         // Set signal for a certain module
34   using AliDevice::AddSignal;
35   void AddSignal(Int_t row,Int_t col,Float_t s);         // Add signal to a certain module
36   void AddSignal(AliCalmodule* m);                       // Add module signal to current calorimeter
37   void Reset(Int_t row,Int_t col);                       // Reset signal for a certain module
38   virtual void Reset(Int_t mode=0);                      // Reset the complete calorimeter
39   using AliDevice::GetSignal;
40   virtual Float_t GetSignal(Int_t row,Int_t col=0) { return GetSignal(row,col,0); }
41   Float_t GetSignal(Int_t row,Int_t col,Int_t mode);     // Provide signal of a certain module
42   Int_t GetNsignals() const;                             // Return number of modules with a signal
43   void Group(Int_t n=1,Int_t mode=1);                    // Group modules into clusters (n rings)
44   Int_t GetNclusters() const;                            // Return number of clusters
45   Float_t GetClusteredSignal(Int_t row,Int_t col);       // Provide module signal after clustering
46   AliCalcluster* GetCluster(Int_t j) const;              // Access to cluster number j
47   AliCalmodule* GetModule(Int_t j) const;                // Access to 'fired' module number j
48   AliCalmodule* GetModule(Int_t row,Int_t col);          // Access to module at (row,col)
49   using AliDevice::SetEdgeOn;
50   void SetEdgeOn(Int_t row,Int_t col);                   // Indicate module as 'edge module'
51   using AliDevice::SetEdgeOff;
52   void SetEdgeOff(Int_t row,Int_t col);                  // Indicate module as 'non-edge module'
53   using AliDevice::GetEdgeValue;
54   Int_t GetEdgeValue(Int_t row,Int_t col);               // Provide the edge flag of a module
55   using AliDevice::SetDead;
56   void SetDead(Int_t row,Int_t col);                     // Indicate module as 'dead module'
57   using AliDevice::SetAlive;
58   void SetAlive(Int_t row,Int_t col);                    // Indicate module as 'active module'
59   using AliDevice::GetDeadValue;
60   Int_t GetDeadValue(Int_t row,Int_t col);               // Provide the dead flag of a module
61   using AliDevice::SetGain;
62   void SetGain(Int_t row,Int_t col,Float_t g);           // Set the gain value for a module
63   using AliDevice::SetOffset;
64   void SetOffset(Int_t row,Int_t col,Float_t o);         // Set the offset value for a module
65   using AliDevice::GetGain;
66   Float_t GetGain(Int_t row,Int_t col);                  // Provide the gain value of a module
67   using AliDevice::GetGainFlag;
68   Int_t GetGainFlag(Int_t row,Int_t col);                // Provide the gain flag value of a module
69   using AliDevice::GetOffset;
70   Float_t GetOffset(Int_t row,Int_t col);                // Provide the offset value of a module
71   using AliDevice::GetOffsetFlag;
72   Int_t GetOffsetFlag(Int_t row,Int_t col);              // Provide the offset flag value of a module
73   using AliDevice::SetPosition;
74   void SetPosition(Int_t row,Int_t col,Float_t* r,TString f); // Set module position
75   void SetPosition(Int_t row,Int_t col,Ali3Vector& r);   // Set module position
76   using AliDevice::GetPosition;
77   void GetPosition(Int_t row,Int_t col,Float_t* r,TString f); // Return module position
78   AliPosition* GetPosition(Int_t row,Int_t col);         // Access to module position
79   TH2F* DrawModules(Float_t thresh=0.,Int_t mode=0);     // Lego plot of module (corr.) signals above threshold
80   TH2F* DrawClusters(Float_t thresh=0.);                 // Lego plot of cluster signals above threshold
81   void AddVetoSignal(AliSignal& s);                      // Associate (extrapolated) signal
82   void AddVetoSignal(AliSignal* s) { AddVetoSignal(*s); }
83   AliSignal* GetVetoSignal(Int_t j) const;               // Access to veto signal number j
84   Int_t GetNvetos() const;                               // Provide the number of veto signals
85   void SetMatrixSwapMode(Int_t swap=1);                  // Set the swapmode for the storage of the matrices
86   Int_t GetMatrixSwapMode() const;                       // Provide the swapmode for the storage of the matrices
87  
88  protected:
89   Int_t fNrows;                              // The number of rows
90   Int_t fNcolumns;                           // The number of columns
91   AliObjMatrix* fMatrix;                     //! Matrix lookup table of module pointers
92   Int_t fSwap;                               // The swapmode for the module and position matrices
93   void SortM();                              // Order the modules with decreasing signal (matrix search)
94   void SortA();                              // Order the modules with decreasing signal (fired array search)
95   TObjArray* fClusters;                      // The array of clusters
96   void AddRing(Int_t row,Int_t col,Int_t n); // add signals of n rings around cluster center
97   void Ungroup();                            // Restore module matrix as before clustering
98   TH2F* fHmodules;                           //! The module 2-D histogram for event display
99   TH2F* fHclusters;                          //! The cluster 2-D histogram for event display
100   TObjArray* fVetos;                         // The array of associated (extrapolated) veto signals
101   TObjArray* fAttributes;                    //! Matrix dbase with module attributes (e.g. gain, offset etc...)
102   AliObjMatrix* fPositions;                  //! Matrix dbase of module position pointers
103   void LoadMatrix();                         // Loading of matrix lookup table from the linear hit array
104  
105  ClassDef(AliCalorimeter,11) // Description of a modular calorimeter system.
106 };
107 #endif