bug fixed while filling the object AliPMDcluster
[u/mrichter/AliRoot.git] / RALICE / AliCalorimeter.h
index f8d284a..ae6cb4b 100644 (file)
@@ -5,35 +5,38 @@
 
 // $Id$
 
-#include "Riostream.h"
 #include <math.h>
  
 #include "TObject.h"
 #include "TObjArray.h"
 #include "TH2.h"
 #include "TString.h"
-#include "TMatrix.h"
 
+#include "AliObjMatrix.h"
 #include "AliCalmodule.h"
 #include "AliCalcluster.h"
 #include "AliSignal.h"
+#include "AliPositionObj.h"
+#include "AliAttribObj.h"
  
 class AliCalorimeter : public TObject
 {
  public:
   AliCalorimeter();                                // Default constructor
   AliCalorimeter(Int_t nrow,Int_t ncol);           // Create a calorimeter matrix
-  ~AliCalorimeter();                               // Destructor
+  virtual ~AliCalorimeter();                       // Destructor
+  AliCalorimeter(AliCalorimeter& c);               // Copy constructor
+  virtual AliCalorimeter* MakeCopy(AliCalorimeter& c); // Make a deep copy and provide pointer of the copy
   Int_t GetNrows();                                // Return number of rows of the matrix
   Int_t GetNcolumns();                             // Return number of columns of the matrix
   void SetSignal(Int_t row,Int_t col,Float_t s);   // Set signal for a certain module
   void AddSignal(Int_t row,Int_t col,Float_t s);   // Add signal to a certain module
   void AddSignal(AliCalmodule* m);                 // Add module signal to current calorimeter
   void Reset(Int_t row,Int_t col);                 // Reset signal for a certain module
-  void Reset();                                    // Reset the complete calorimeter
-  Float_t GetSignal(Int_t row,Int_t col);          // Provide signal of a certain module
+  void Reset(Int_t mode=0);                        // Reset the complete calorimeter
+  Float_t GetSignal(Int_t row,Int_t col,Int_t mode=0); // Provide signal of a certain module
   Int_t GetNsignals();                             // Return number of modules with a signal
-  void Group(Int_t n);                             // Group modules into clusters (n rings)
+  void Group(Int_t n=1,Int_t mode=1);              // Group modules into clusters (n rings)
   Int_t GetNclusters();                            // Return number of clusters
   Float_t GetClusteredSignal(Int_t row,Int_t col); // Provide module signal after clustering
   AliCalcluster* GetCluster(Int_t j);              // Access to cluster number j
@@ -46,41 +49,43 @@ class AliCalorimeter : public TObject
   void SetAlive(Int_t row,Int_t col);              // Indicate module as 'active module'
   Int_t GetDeadValue(Int_t row,Int_t col);         // Provide the dead flag of a module
   void SetGain(Int_t row,Int_t col,Float_t g);     // Set the gain value for a module
+  void SetOffset(Int_t row,Int_t col,Float_t o);   // Set the offset value for a module
   Float_t GetGain(Int_t row,Int_t col);            // Provide the gain value of a module
+  Int_t GetGainFlag(Int_t row,Int_t col);          // Provide the gain flag value of a module
+  Float_t GetOffset(Int_t row,Int_t col);          // Provide the offset value of a module
+  Int_t GetOffsetFlag(Int_t row,Int_t col);        // Provide the offset flag value of a module
   void SetPosition(Int_t row,Int_t col,Float_t* r,TString f); // Set module position
   void SetPosition(Int_t row,Int_t col,Ali3Vector& r); // Set module position
   void GetPosition(Int_t row,Int_t col,Float_t* r,TString f); // Return module position
   AliPosition* GetPosition(Int_t row,Int_t col);   // Access to module position
-  TH2F* DrawModules();                             // Draw lego plot of module signals
-  TH2F* DrawClusters();                            // Draw lego plot of cluster signals
+  TH2F* DrawModules(Float_t thresh=0.,Int_t mode=0); // Lego plot of module (corrected) signals above threshold
+  TH2F* DrawClusters(Float_t thresh=0.);           // Lego plot of cluster signals above threshold
   void AddVetoSignal(AliSignal& s);                // Associate (extrapolated) signal
   void AddVetoSignal(AliSignal* s) { AddVetoSignal(*s); }
   AliSignal* GetVetoSignal(Int_t j);               // Access to veto signal number j
   Int_t GetNvetos();                               // Provide the number of veto signals
   void SetName(TString name);                      // Set the name of the calorimeter system
   TString GetName();                               // Provide the name of the calorimeter system
+  void SetSwapMode(Int_t swap=1);                  // Set the swapmode for the storage of the matrices
+  Int_t GetSwapMode();                             // Provide the swapmode for the storage of the matrices
  
  protected:
   Int_t fNrows;                              // The number of rows
   Int_t fNcolumns;                           // The number of columns
-  Int_t fNsignals;                           // The number of modules with a signal
-  Int_t fNclusters;                          // The number of clusters
-  AliCalmodule ***fMatrix;                   //! The matrix of module pointers for internal use
-  void Sortm(AliCalmodule** a,Int_t& n);     // Order the modules with decreasing signal
+  AliObjMatrix* fMatrix;                     // The matrix of module pointers
+  Int_t fSwap;                               // The swapmode for the module and position matrices
+  void SortM(AliCalmodule** a,Int_t& n);     // Order the modules with decreasing signal (matrix search)
+  void SortA(AliCalmodule** a,Int_t& n);     // Order the modules with decreasing signal (fired array search)
   TObjArray* fClusters;                      // The array of clusters
   void AddRing(Int_t row,Int_t col,Int_t n); // add signals of n rings around cluster center
-  TObjArray* fModules;                       // The array of modules for output
-  void LoadMatrix();                         // Load calorimeter matrix data from input
   void Ungroup();                            // Restore module matrix as before clustering
   TH2F* fHmodules;                           //! The module 2-D histogram for event display
   TH2F* fHclusters;                          //! The cluster 2-D histogram for event display
-  Int_t fNvetos;                             // The number of associated veto signals
   TObjArray* fVetos;                         // The array of associated (extrapolated) veto signals
-  TMatrix* fAttributes;                      // Matrix with module attributes (dead+10*edge)
-  TMatrix* fGains;                           // Matrix with module gains
-  AliPosition ***fPositions;                 //! Matrix of module position pointers for internal use
+  TObjArray* fAttributes;                    //! Matrix with module attributes (e.g. gain, offset etc...)
+  AliObjMatrix* fPositions;                  //! The matrix of module position pointers
   TString fName;                             // Name of the calorimeter system
  
- ClassDef(AliCalorimeter,2) // Description of a modular calorimeter system.
+ ClassDef(AliCalorimeter,5) // Description of a modular calorimeter system.
 };
 #endif