]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Added many comments and some documentation, fixed up some coding violations
authornilsen <nilsen@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 24 Aug 2001 21:09:09 +0000 (21:09 +0000)
committernilsen <nilsen@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 24 Aug 2001 21:09:09 +0000 (21:09 +0000)
added AddSignal function to AliITSMapA2, used in new AliITSsimulationSSD code.

ITS/AliITSMap.cxx
ITS/AliITSMap.h
ITS/AliITSMapA1.cxx
ITS/AliITSMapA1.h
ITS/AliITSMapA2.cxx
ITS/AliITSMapA2.h

index 0ed43cb9bbf11dcd70aa9a46d3d3e912232421be..def345e3574adc940f68aeed37e79817780d6591 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
+////////////////////////////////////////////////////////////////////////
+// Virtual base class for ITS AliITSMap class. In general a Map is a  //
+// structure where the charge liberated by an ion passing through some//
+// material is collected and a sighned to the appropreate detector    //
+// structure.                                                         //
+////////////////////////////////////////////////////////////////////////
 
 #include "AliITSMap.h"
 
index 2ddc06485fbc7811d24b26d779addd385a09ee93..3ce043097d1a45b49cb88df3d67117379a467003 100644 (file)
@@ -1,6 +1,11 @@
 #ifndef ALIITSMAP_H
 #define ALIITSMAP_H
-
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice     */
+/* $Id$ */
+////////////////////////////////////////////////
+//  Map Class for ITS.                        //
+////////////////////////////////////////////////
 
 #include <TObject.h>
 
@@ -8,33 +13,32 @@ typedef enum {kEmpty, kUsed, kUnused} FlagType;
 
 //___________________________________________________________________________
 
-class AliITSMap :
-  public TObject {
+class AliITSMap : public TObject {
 
-public:
-  virtual ~AliITSMap() {}
+ public:
+    virtual ~AliITSMap() {}
     // Fill hits from list of digits into hit map
-  virtual  void  FillMap()                                       =0;
+    virtual  void  FillMap()                                       =0;
     // Clear the map
-  virtual  void  ClearMap()                                      =0;
+    virtual  void  ClearMap()                                      =0;
     // Set a single hit
-  virtual  void  SetHit(Int_t iz, Int_t ix, Int_t idigit)        =0;
+    virtual  void  SetHit(Int_t iz, Int_t ix, Int_t idigit)        =0;
     // Set threshold for the signal
-  virtual  void  SetThreshold(Int_t)                             =0;
+    virtual  void  SetThreshold(Int_t)                             =0;
     // Delete a single hit
-  virtual  void  DeleteHit(Int_t iz, Int_t ix)                   =0;
+    virtual  void  DeleteHit(Int_t iz, Int_t ix)                   =0;
     // Flag a hit as used
-  virtual  void  FlagHit(Int_t iz, Int_t ix)                     =0;    
+    virtual  void  FlagHit(Int_t iz, Int_t ix)                     =0;    
     // Get index of hit in the list of digits
-  virtual Int_t  GetHitIndex(Int_t iz, Int_t ix)                 =0;
+    virtual Int_t  GetHitIndex(Int_t iz, Int_t ix)                 =0;
     // Get pointer to digit
-  virtual TObject * GetHit(Int_t iz, Int_t ix)                   =0;
+    virtual TObject * GetHit(Int_t iz, Int_t ix)                   =0;
     // Test hit status
-  virtual FlagType TestHit(Int_t iz, Int_t ix)                   =0;
+    virtual FlagType TestHit(Int_t iz, Int_t ix)                   =0;
     // Get signal from map
-  virtual Double_t  GetSignal(Int_t iz, Int_t ix)                =0;
-  
-  ClassDef(AliITSMap,1) //virtual base class for ITS Hit/Digit Map
+    virtual Double_t  GetSignal(Int_t iz, Int_t ix)                =0;
+
+    ClassDef(AliITSMap,1) //virtual base class for ITS Hit/Digit Map
 
 };
 
index 754cb3b7aba20cd7d1fccd1e19dbd46b0800c035..fdb73deed28ab91f7ca499b86a3ce9a24c4b7ca5 100644 (file)
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
-
+#include <TObjArray.h>
+#include <TMath.h>
 
 #include "AliITSMapA1.h"
 #include "AliITSsegmentation.h"
 #include "AliITSresponse.h"
 #include "AliITSdigit.h"
 
-#include <TObjArray.h>
-#include <TMath.h>
-
+////////////////////////////////////////////////////////////////////////
+//  Map Class for ITS. Implementation A1. In this implementation, the //
+// 2 dimensional (iz,ix) map is filled with integers values. For each //
+// cell a corresponding TObject, a hit, can also be stored.           //
+//  The detector geometry is accessed via the that detectors          //
+// segmentation class and stored here for conveniance.                //
+////////////////////////////////////////////////////////////////////////
 
 ClassImp(AliITSMapA1)
-
-AliITSMapA1::AliITSMapA1()
-{
-  // default constructor
-  fSegmentation = 0;
-  fNpz=0;
-  fNpx=0;
-  fMaxIndex=0;         
-  
-  fHitMap = 0;
-  fObjects = 0;
-  fNobjects = 0;
-  fMapThreshold=0;
-}
-
-AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg)
-{
-  //constructor
-  fSegmentation = seg;
-  fNpz=fSegmentation->Npz();
-  fNpx=fSegmentation->Npx();
-  fMaxIndex=fNpz*fNpx+fNpx;             // 2 halves of detector
-  
-  fHitMap = new Int_t[fMaxIndex];
-  fObjects = 0;
-  fNobjects = 0;
-  fMapThreshold=0;
-  ClearMap();
-}
-
-AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg, TObjArray *obj)
-{
-  //constructor
-  fNobjects = 0;
-  fSegmentation = seg;
-  fNpz=fSegmentation->Npz();
-  fNpx=fSegmentation->Npx();
-  fMaxIndex=fNpz*fNpx+fNpx;             // 2 halves of detector
-  
-  fHitMap = new Int_t[fMaxIndex];
-  fObjects =  obj;
-  if (fObjects) fNobjects = fObjects->GetEntriesFast();
-  fMapThreshold=0;
-  ClearMap();
-}
-
-AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg, TObjArray *obj, Int_t thr)
-{
-  //constructor
-  fNobjects = 0;
-  fSegmentation = seg;
-  fNpz=fSegmentation->Npz();
-  fNpx=fSegmentation->Npx();
-  fMaxIndex=fNpz*fNpx+fNpx;             // 2 halves of detector
-  
-  fHitMap = new Int_t[fMaxIndex];
-  fObjects =  obj;
-  if (fObjects) fNobjects = fObjects->GetEntriesFast();
-  fMapThreshold=thr;
-  ClearMap();
-}
-
-
-AliITSMapA1::~AliITSMapA1()
-{
-  //destructor
-  if (fHitMap) delete[] fHitMap;
-}
-
-//__________________________________________________________________________
-AliITSMapA1::AliITSMapA1(const AliITSMapA1 &source){
-  //     Copy Constructor 
-  if(&source == this) return;
-  this->fNpx = source.fNpx;
-  this->fNpz = source.fNpz;
-  this->fObjects = source.fObjects;
-  this->fNobjects = source.fNobjects;
-  this->fMaxIndex = source.fMaxIndex;
-  this->fHitMap = source.fHitMap;
-  this->fMapThreshold = source.fMapThreshold;
-  return;
+//______________________________________________________________________
+AliITSMapA1::AliITSMapA1(){
+    // default constructor
+
+    fSegmentation = 0;
+    fNpz          = 0;
+    fNpx          = 0;
+    fMaxIndex     = 0;
+    fHitMap       = 0;
+    fObjects      = 0;
+    fNobjects     = 0;
+    fMapThreshold = 0;
+}
+//______________________________________________________________________
+AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg){
+    //constructor
+
+    fSegmentation = seg;
+    fNpz          = fSegmentation->Npz();
+    fNpx          = fSegmentation->Npx();
+    fMaxIndex     = fNpz*fNpx+fNpx;             // 2 halves of detector
+    fHitMap       = new Int_t[fMaxIndex];
+    fObjects      = 0;
+    fNobjects     = 0;
+    fMapThreshold = 0;
+    ClearMap();
+}
+//______________________________________________________________________
+AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg, TObjArray *obj){
+    //constructor
+
+    fNobjects     = 0;
+    fSegmentation = seg;
+    fNpz          = fSegmentation->Npz();
+    fNpx          = fSegmentation->Npx();
+    fMaxIndex     = fNpz*fNpx+fNpx;             // 2 halves of detector
+    fHitMap       = new Int_t[fMaxIndex];
+    fObjects      =  obj;
+    if(fObjects) fNobjects = fObjects->GetEntriesFast();
+    fMapThreshold = 0;
+    ClearMap();
+}
+//______________________________________________________________________
+AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg, TObjArray *obj, Int_t thr){
+    //constructor
+
+    fNobjects     = 0;
+    fSegmentation = seg;
+    fNpz          = fSegmentation->Npz();
+    fNpx          = fSegmentation->Npx();
+    fMaxIndex     = fNpz*fNpx+fNpx;             // 2 halves of detector
+    fHitMap       = new Int_t[fMaxIndex];
+    fObjects      =  obj;
+    if(fObjects) fNobjects = fObjects->GetEntriesFast();
+    fMapThreshold = thr;
+    ClearMap();
+}
+//______________________________________________________________________
+AliITSMapA1::~AliITSMapA1(){
+    //destructor
+
+    if(fHitMap) delete[] fHitMap;
 }
-
 //_________________________________________________________________________
-AliITSMapA1& 
-  AliITSMapA1::operator=(const AliITSMapA1 &source) {
-  //    Assignment operator
-  if(&source == this) return *this;
-  this->fNpx = source.fNpx;
-  this->fNpz = source.fNpz;
-  this->fObjects = source.fObjects;
-  this->fNobjects = source.fNobjects;
-  this->fMaxIndex = source.fMaxIndex;
-  this->fHitMap = source.fHitMap;
-  this->fMapThreshold = source.fMapThreshold;
-  return *this;
-}
+AliITSMapA1& AliITSMapA1::operator=(const AliITSMapA1 &source) {
+    //    Assignment operator
 
-void AliITSMapA1::ClearMap()
-{
-  //clear array
-  memset(fHitMap,0,sizeof(int)*fMaxIndex);
+    if(&source == this) return *this;
+
+    this->fNpx          = source.fNpx;
+    this->fNpz          = source.fNpz;
+    this->fObjects      = source.fObjects;
+    this->fNobjects     = source.fNobjects;
+    this->fMaxIndex     = source.fMaxIndex;
+    this->fHitMap       = source.fHitMap;
+    this->fMapThreshold = source.fMapThreshold;
+    return *this;
 }
-
-void AliITSMapA1::SetArray(TObjArray *obj)
-{
-  // set array of objects
-  fObjects =  obj;
-  if (fObjects) fNobjects = fObjects->GetEntriesFast();
+//______________________________________________________________________
+AliITSMapA1::AliITSMapA1(const AliITSMapA1 &source){
+    //     Copy Constructor
+
+    *this = source;
 }
+//______________________________________________________________________
+void AliITSMapA1::ClearMap(){
+    //clear array
 
+    memset(fHitMap,0,sizeof(int)*fMaxIndex);
+}
+//______________________________________________________________________
+void AliITSMapA1::SetArray(TObjArray *obj){
+    // set array of objects
 
-Int_t AliITSMapA1::CheckedIndex(Int_t iz, Int_t ix)
-{
-  //check boundaries and return an index in array
-  Int_t index=fNpx*iz+ix;
-
-  //if (index > fMaxIndex) {
-  if (index > fMaxIndex || index < 0) {
-    printf("\n \n \n Try to read/write outside array !!!! \n \n %d %d %d %d %d %d \n",iz,ix, fMaxIndex, index, fNpz, fNpx);
-    // force crash
-    return  -1;
-  } else {
-    return index;
-  }
+    fObjects =  obj;
+    if (fObjects) fNobjects = fObjects->GetEntriesFast();
 }
+//______________________________________________________________________
+Int_t AliITSMapA1::CheckedIndex(Int_t iz, Int_t ix){
+    //check boundaries and return an index in array
+    Int_t index=fNpx*iz+ix;
 
+    //if (index > fMaxIndex) {
+    if (index > fMaxIndex || index < 0) {
+       printf("\n \n \n Try to read/write outside array !!!!"
+              " \n \n %d %d %d %d %d %d \n",iz,ix,fMaxIndex,index,fNpz,fNpx);
+       // force crash
+       return  -1;
+    } else {
+       return index;
+    } // end if index>max or < 0
+}
+//______________________________________________________________________
+void  AliITSMapA1::FillMap(){
+    // fill array with digits indices
 
-void  AliITSMapA1::FillMap()
-{
-  // fill array with digits indices
+    Int_t ndigits = fObjects->GetEntriesFast();
+    if (!ndigits) return;
 
-  //printf("fMapThreshold %d\n",fMapThreshold);
-  Int_t ndigits = fObjects->GetEntriesFast();
-  if (!ndigits) return;
-  
-  AliITSdigit *dig;
-  for (Int_t ndig=0; ndig<ndigits; ndig++) {
-    dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
-    if(dig->fSignal > fMapThreshold) {
-      SetHit(dig->fCoord1,dig->fCoord2,ndig);
-    }
-  }
-  
+    AliITSdigit *dig;
+    for (Int_t ndig=0; ndig<ndigits; ndig++) {
+       dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
+       if(dig->fSignal > fMapThreshold) {
+           SetHit(dig->fCoord1,dig->fCoord2,ndig);
+       } // end if fSignal > fMapthreshold
+    } // end for ndig
 }
+//______________________________________________________________________
+void  AliITSMapA1::SetHit(Int_t iz, Int_t ix, Int_t idigit){
+    // set the digit index at a certain position in array
 
-void  AliITSMapA1::SetHit(Int_t iz, Int_t ix, Int_t idigit)
-{
-  // set the digit index at a certain position in array
-  fHitMap[CheckedIndex(iz, ix)]=idigit+1;
+    fHitMap[CheckedIndex(iz, ix)]=idigit+1;
 }
+//______________________________________________________________________
+void AliITSMapA1::DeleteHit(Int_t iz, Int_t ix){
+    // delete an entry in array
 
-void AliITSMapA1::DeleteHit(Int_t iz, Int_t ix)
-{
-  // delete an entry in array
-  fHitMap[CheckedIndex(iz, ix)]=0;
+    fHitMap[CheckedIndex(iz, ix)]=0;
 }
+//______________________________________________________________________
+void AliITSMapA1::FlagHit(Int_t iz, Int_t ix){
+    // flag an entry in array
 
-void AliITSMapA1::FlagHit(Int_t iz, Int_t ix)
-{
-  // flag an entry in array
-  fHitMap[CheckedIndex(iz, ix)]=
-      -TMath::Abs(fHitMap[CheckedIndex(iz, ix)]);
-
+    fHitMap[CheckedIndex(iz, ix)] = -TMath::Abs(fHitMap[CheckedIndex(iz, ix)]);
 }
+//______________________________________________________________________
+Int_t AliITSMapA1::GetHitIndex(Int_t iz, Int_t ix){
+    // return the digit index from a specific entry in array
 
-Int_t AliITSMapA1::GetHitIndex(Int_t iz, Int_t ix)
-{
-  // return the digit index from a specific entry in array
-  return TMath::Abs(fHitMap[CheckedIndex(iz, ix)])-1;
+    return TMath::Abs(fHitMap[CheckedIndex(iz, ix)])-1;
 }
+//______________________________________________________________________
+TObject* AliITSMapA1::GetHit(Int_t iz, Int_t ix){
+    // return the pointer to the digit 
 
-TObject* AliITSMapA1::GetHit(Int_t iz, Int_t ix)
-{
-  // return the pointer to the digit 
-  Int_t index=GetHitIndex(iz,ix);
-  // Force crash if index does not exist ! 
-  return (index <0) ? 0 : fObjects->UncheckedAt(GetHitIndex(iz,ix));
+    Int_t index=GetHitIndex(iz,ix);
+    // Force crash if index does not exist ! 
+    return (index <0) ? 0 : fObjects->UncheckedAt(GetHitIndex(iz,ix));
 }
+//______________________________________________________________________
+Double_t AliITSMapA1::GetSignal(Int_t iz, Int_t ix){
+    // get a pad signal
+    Double_t signal;
 
-Double_t AliITSMapA1::GetSignal(Int_t iz, Int_t ix)
-{
-  // get a pad signal 
-  Double_t signal;
-  AliITSdigit *dig = (AliITSdigit*)GetHit(iz,ix);
-  if(dig) signal=(Double_t)dig->fSignal;
-  else signal=0.;
-  return signal;
-
+    AliITSdigit *dig = (AliITSdigit*)GetHit(iz,ix);
+    if(dig) signal=(Double_t)dig->fSignal;
+    else signal=0.;
+    return signal;
 }
+//______________________________________________________________________
+FlagType AliITSMapA1::TestHit(Int_t iz, Int_t ix){
+    // check whether the digit has already been flagged
 
-FlagType AliITSMapA1::TestHit(Int_t iz, Int_t ix)
-{
-  // check whether the digit has already been flagged
-
-  if (CheckedIndex(iz, ix) < 0) return kEmpty;
-  Int_t inf=fHitMap[CheckedIndex(iz, ix)]; 
-  if (inf < 0) {
-      return kUsed;
-  } else if (inf == 0) {
-      return kEmpty;
-  } else {
-      return kUnused;
-  }
+    if (CheckedIndex(iz, ix) < 0) return kEmpty;
+    Int_t inf=fHitMap[CheckedIndex(iz, ix)]; 
+    if (inf < 0) {
+       return kUsed;
+    } else if (inf == 0) {
+       return kEmpty;
+    } else {
+       return kUnused;
+    } // end if inf
 }
+
index c814bdb7f3837f235433182a2292493dfe0182c9..7a8bcc4a476540362ab0014ed273ab6095e51ccc 100644 (file)
@@ -1,67 +1,76 @@
 #ifndef ALIITSMAPA1_H
 #define ALIITSMAPA1_H
-
-
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice     */
+/* $Id$ */
+////////////////////////////////////////////////////////////////////////
+//  Map Class for ITS. Implementation A1. In this implementation, the //
+// 2 dimensional (iz,ix) map is filled with integers values. For each //
+// cell a corresponding TObject, a hit, can also be stored.           //
+////////////////////////////////////////////////////////////////////////
 #include "AliITSMap.h"
 class AliITSsegmentation;
 class TObjArray;
 
+class AliITSMapA1 : public AliITSMap{
 
-class AliITSMapA1 :
-  public AliITSMap 
-{
-  
-public:
-  AliITSMapA1();
-  AliITSMapA1(AliITSsegmentation *seg);
-  AliITSMapA1(AliITSsegmentation *seg, TObjArray *dig);
-  AliITSMapA1(AliITSsegmentation *seg, TObjArray *dig, Int_t threshold);
-  AliITSMapA1(const AliITSMapA1 &source);
+ public:
+    AliITSMapA1(); // default creator
+    // Standard reator using only a segmentation class
+    AliITSMapA1(AliITSsegmentation *seg);
+    // Standard reator using only a segmentation class and pointer to digits
+    AliITSMapA1(AliITSsegmentation *seg, TObjArray *dig);
+    // Standard reator using only a segmentation class and pointer to digits
+    // and a threshold value
+    AliITSMapA1(AliITSsegmentation *seg, TObjArray *dig, Int_t threshold);
+    // Copy Operator
+    AliITSMapA1(const AliITSMapA1 &source);
     // Assignment operator
-  AliITSMapA1& operator=(const AliITSMapA1 &source);
-  
-  virtual ~AliITSMapA1();
+    AliITSMapA1& operator=(const AliITSMapA1 &source);
+    // Distructor
+    virtual ~AliITSMapA1();
     // Fill hits from list of digits into hit map
-  virtual  void  FillMap();
+    virtual  void  FillMap();
     // Clear the hit map
-  virtual  void  ClearMap();    
+    virtual  void  ClearMap();    
     // Set a single hit
-  virtual  void  SetHit(Int_t iz, Int_t ix, Int_t idigit);
+    virtual  void  SetHit(Int_t iz, Int_t ix, Int_t idigit);
     // Set threshold for the signal
-  virtual  void  SetThreshold(Int_t thresh) {fMapThreshold=thresh;}
+    virtual  void  SetThreshold(Int_t thresh) {fMapThreshold=thresh;}
     // Delete a single hit
-  virtual  void  DeleteHit(Int_t iz, Int_t ix);
+    virtual  void  DeleteHit(Int_t iz, Int_t ix);
     // Get index of hit in the list of digits
-  virtual Int_t  GetHitIndex(Int_t iz, Int_t ix);
+    virtual Int_t  GetHitIndex(Int_t iz, Int_t ix);
     // Get pointer to digit
-  virtual TObject* GetHit(Int_t iz, Int_t ix);
+    virtual TObject* GetHit(Int_t iz, Int_t ix);
     // Flag a hit as used
-  virtual  void  FlagHit(Int_t iz, Int_t ix);    
+    virtual  void  FlagHit(Int_t iz, Int_t ix);
     // Test hit status
-  virtual FlagType TestHit(Int_t iz, Int_t ix);
+    virtual FlagType TestHit(Int_t iz, Int_t ix);
     // Get signal from map
-  virtual Double_t  GetSignal(Int_t iz, Int_t ix); 
+    virtual Double_t  GetSignal(Int_t iz, Int_t ix);
     // Get max index inmap
-  Int_t   MaxIndex() {return fMaxIndex;}
-   // Set the array of objects
-  void SetArray(TObjArray *obj);
-  
-protected:
+    Int_t   MaxIndex() const  {return fMaxIndex;}
+    // Set the array of objects
+    void SetArray(TObjArray *obj);
+
+ protected:
     // Check index
-  Int_t   CheckedIndex(Int_t iz, Int_t ix);
+    Int_t   CheckedIndex(Int_t iz, Int_t ix);
+
+    // Data members
+    AliITSsegmentation *fSegmentation;   // segmentation class
+    Int_t fNpx;                          // fNpx
+    Int_t fNpz;                          // fNpz
+    TObjArray  *fObjects;                // object
+    Int_t fNobjects;                     // number of objects
+    Int_t fMaxIndex;                     // max index in map
 
-  AliITSsegmentation *fSegmentation;   // segmentation class
-  Int_t fNpx;                          // fNpx
-  Int_t fNpz;                          // fNpz
-  TObjArray  *fObjects;                // object
-  Int_t fNobjects;                     // number of objects
-  Int_t fMaxIndex;                     // max index in map
-  
-private:
-  Int_t *fHitMap;                      //! [fMaxIndex]
-  Int_t fMapThreshold;                 // signal threshold (ADC)
+ private:
+    Int_t *fHitMap;                      //! [fMaxIndex]
+    Int_t fMapThreshold;                 // signal threshold (ADC)
 
-  ClassDef(AliITSMapA1,1)              // Implements Hit/Digit Map 
+    ClassDef(AliITSMapA1,1)  // Implements Hit/Digit Map 
 };
 
 #endif 
index 9aa03fbf765836f8d04e74767ad20f98faca0f78..05145485dd5cc1f411e89b2f6e374b95d1ea2812 100644 (file)
 #include "AliITSresponse.h"
 #include "AliITSdigit.h"
 
+////////////////////////////////////////////////////////////////////////
+//  Map Class for ITS. Implementation A2. In this implementation, the //
+// 2 dimensional (iz,ix) map is filled with Double precision floating //
+// point values. Since this class is derived for AliITSMapA1 it also  //
+// has all of the functionality of that class as well. For each       //
+// cell a corresponding TObject, a hit, can also be stored.           //
+//  The detector geometry is accessed via the that detectors          //
+// segmentation class and stored here for conveniance.                //
+////////////////////////////////////////////////////////////////////////
 
 ClassImp(AliITSMapA2)
 
-AliITSMapA2::AliITSMapA2()
-{
-  // default constructor
-  fSegmentation = 0;
-  fNpz=0;
-  fNpx=0;
-  fMaxIndex=0;         
-  
-  fHitMapD = 0;
-  fObjects = 0;
-  fNobjects = 0;
-  fMapThresholdD=0.;
-}
+//______________________________________________________________________
+AliITSMapA2::AliITSMapA2(){
+    // default constructor
 
-  AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg)
-{
-  //constructor
-  fScaleSizeZ=1;
-  fScaleSizeX=1;
-  fSegmentation = seg;
-  fNpz=fSegmentation->Npz();
-  fNpx=fSegmentation->Npx();
-  fMaxIndex=fNpz*fNpx+fNpx;             // 2 halves of detector
-  
-  fHitMapD = new Double_t[fMaxIndex];
-  fMapThresholdD=0.;
-  fObjects = 0;
-  fNobjects = 0;
-  ClearMap();
-}
-//--------------------------------------
-  AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg, Int_t scalesizeX, Int_t scalesizeZ)
-{
-  //constructor
-  fSegmentation = seg;
-  fScaleSizeX=scalesizeX;
-  fScaleSizeZ=scalesizeZ;
-  fNpz=fScaleSizeZ*fSegmentation->Npz();
-  fNpx=fScaleSizeX*fSegmentation->Npx();
-  fMaxIndex=fNpz*fNpx+fNpx;             // 2 halves of detector
-  
-  fHitMapD = new Double_t[fMaxIndex];
-  fMapThresholdD=0.;
-  fObjects = 0;
-  fNobjects = 0;
-  ClearMap();
+    fSegmentation  = 0;
+    fNpz           = 0;
+    fNpx           = 0;
+    fMaxIndex      = 0;
+    fHitMapD       = 0;
+    fObjects       = 0;
+    fNobjects      = 0;
+    fMapThresholdD =0.;
 }
+//______________________________________________________________________
+AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg){
+    //constructor
 
-//--------------------------------------
-AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg, TObjArray *obj, Double_t thresh)
-{
-  //constructor
-  fNobjects = 0;
-  fScaleSizeZ=1;
-  fScaleSizeX=1;
-  fSegmentation = seg;
-  fNpz=fSegmentation->Npz();
-  fNpx=fSegmentation->Npx();
-  fMaxIndex=fNpz*fNpx+fNpx;             // 2 halves of detector
-  
-  fHitMapD = new Double_t[fMaxIndex];
-  fObjects =  obj;
-  if (fObjects) fNobjects = fObjects->GetEntriesFast();
-  fMapThresholdD = thresh;
-  ClearMap();
+    fScaleSizeZ    = 1;
+    fScaleSizeX    = 1;
+    fSegmentation  = seg;
+    fNpz           = fSegmentation->Npz();
+    fNpx           = fSegmentation->Npx();
+    fMaxIndex      = fNpz*fNpx+fNpx;       // 2 halves of detector
+    fHitMapD       = new Double_t[fMaxIndex];
+    fMapThresholdD = 0.;
+    fObjects       = 0;
+    fNobjects      = 0;
+    ClearMap();
 }
-//--------------------------------------
+//______________________________________________________________________
+AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg,
+                        Int_t scalesizeX, Int_t scalesizeZ){
+    //constructor
 
-
-AliITSMapA2::~AliITSMapA2()
-{
-  //destructor
-  if (fHitMapD) delete[] fHitMapD;
+    fSegmentation  = seg;
+    fScaleSizeX    = scalesizeX;
+    fScaleSizeZ    = scalesizeZ;
+    fNpz           = fScaleSizeZ*fSegmentation->Npz();
+    fNpx           = fScaleSizeX*fSegmentation->Npx();
+    fMaxIndex      = fNpz*fNpx+fNpx;             // 2 halves of detector
+    fHitMapD       = new Double_t[fMaxIndex];
+    fMapThresholdD = 0.;
+    fObjects       = 0;
+    fNobjects      = 0;
+    ClearMap();
 }
-//--------------------------------------
+//______________________________________________________________________
+AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg, TObjArray *obj, 
+                        Double_t thresh){
+    //constructor
 
-//__________________________________________________________________________
-AliITSMapA2::AliITSMapA2(const AliITSMapA2 &source){
-  //     Copy Constructor 
-  if(&source == this) return;
-  this->fMapThresholdD = source.fMapThresholdD;
-  this->fScaleSizeX = source.fScaleSizeX;
-  this->fScaleSizeZ = source.fScaleSizeZ;
-  this->fHitMapD = source.fHitMapD;
-  return;
+    fNobjects      = 0;
+    fScaleSizeZ    = 1;
+    fScaleSizeX    = 1;
+    fSegmentation  = seg;
+    fNpz           = fSegmentation->Npz();
+    fNpx           = fSegmentation->Npx();
+    fMaxIndex      = fNpz*fNpx+fNpx;             // 2 halves of detector  
+    fHitMapD       = new Double_t[fMaxIndex];
+    fObjects       =  obj;
+    if (fObjects) fNobjects = fObjects->GetEntriesFast();
+    fMapThresholdD = thresh;
+    ClearMap();
 }
+//______________________________________________________________________
+AliITSMapA2::~AliITSMapA2(){
+    //destructor
 
-//_________________________________________________________________________
-AliITSMapA2& 
-  AliITSMapA2::operator=(const AliITSMapA2 &source) {
-  //    Assignment operator
-  if(&source == this) return *this;
-  this->fMapThresholdD = source.fMapThresholdD;
-  this->fScaleSizeX = source.fScaleSizeX;
-  this->fScaleSizeZ = source.fScaleSizeZ;
-  this->fHitMapD = source.fHitMapD;
-  return *this;
+    if (fHitMapD) delete[] fHitMapD;
 }
+//______________________________________________________________________
+AliITSMapA2::AliITSMapA2(const AliITSMapA2 &source){
+    //     Copy Constructor 
 
-//_________________________________________________________________________
-void AliITSMapA2::ClearMap()
-{
-  //clear array
-  memset(fHitMapD,0,sizeof(Double_t)*fMaxIndex);
+    if(&source == this) return;
+
+    this->fMapThresholdD = source.fMapThresholdD;
+    this->fScaleSizeX    = source.fScaleSizeX;
+    this->fScaleSizeZ    = source.fScaleSizeZ;
+    this->fHitMapD       = source.fHitMapD;
+    return;
 }
+//______________________________________________________________________
+AliITSMapA2& AliITSMapA2::operator=(const AliITSMapA2 &source) {
+    //    Assignment operator
 
-//--------------------------------------
-void  AliITSMapA2::FillMap()
-{
-  
-  // fills signal map from digits - apply a threshold for signal
-  
-  if (!fObjects) return; 
-  
-  Int_t ndigits = fObjects->GetEntriesFast();
-  if (!ndigits) return;
-  
-  AliITSdigit *dig;
-  for (Int_t ndig=0; ndig<ndigits; ndig++) {
-    dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
-    Double_t signal = (Double_t)(dig->fSignal);
-    if (signal > fMapThresholdD) SetHit(dig->fCoord1,dig->fCoord2,signal);
-  }
+    if(&source == this) return *this;
+
+    this->fMapThresholdD = source.fMapThresholdD;
+    this->fScaleSizeX    = source.fScaleSizeX;
+    this->fScaleSizeZ    = source.fScaleSizeZ;
+    this->fHitMapD       = source.fHitMapD;
+    return *this;
 }
+//______________________________________________________________________
+void AliITSMapA2::ClearMap(){
+    //clear array
 
-//--------------------------------------
-void  AliITSMapA2::SetHit(Int_t iz, Int_t ix, Double_t signal)
-{
-  // set signal at a certain position in array
-  fHitMapD[CheckedIndex(iz, ix)]=signal;
+    memset(fHitMapD,0,sizeof(Double_t)*fMaxIndex);
+}
+//______________________________________________________________________
+void  AliITSMapA2::FillMap(){
+    // fills signal map from digits - apply a threshold for signal
   
+    if (!fObjects) return;
+
+    Int_t ndigits = fObjects->GetEntriesFast();
+    if (!ndigits) return;
+
+    AliITSdigit *dig;
+    for (Int_t ndig=0; ndig<ndigits; ndig++) {
+       dig = (AliITSdigit*)fObjects->UncheckedAt(ndig);
+       Double_t signal = (Double_t)(dig->fSignal);
+       if (signal > fMapThresholdD) SetHit(dig->fCoord1,dig->fCoord2,signal);
+    } // end for ndig
 }
+//______________________________________________________________________
+void  AliITSMapA2::SetHit(Int_t iz, Int_t ix, Double_t signal){
+    // set signal at a certain position in array
 
-//--------------------------------------
-void AliITSMapA2::DeleteHit(Int_t iz, Int_t ix)
-{
-  //set the entry value to zero
-  fHitMapD[CheckedIndex(iz, ix)]=0;
+    fHitMapD[CheckedIndex(iz, ix)]=signal;
 }
+//______________________________________________________________________
+void AliITSMapA2::DeleteHit(Int_t iz, Int_t ix){
+    //set the entry value to zero
 
-//--------------------------------------
-void AliITSMapA2::FlagHit(Int_t iz, Int_t ix)
-{
-  //flag an entry
-  fHitMapD[CheckedIndex(iz, ix)]=
-    -1000.*TMath::Abs((Int_t)(fHitMapD[CheckedIndex(iz, ix)])+1.);
-  
+    fHitMapD[CheckedIndex(iz, ix)]=0;
 }
+//______________________________________________________________________
+void AliITSMapA2::FlagHit(Int_t iz, Int_t ix){
+  //flag an entry
 
-//--------------------------------------
-Int_t AliITSMapA2::GetHitIndex(Int_t iz, Int_t ix)
-{
-  //return the index of an entry in array 
-  return CheckedIndex(iz, ix);
+    fHitMapD[CheckedIndex(iz, ix)]=
+                -1000.*TMath::Abs((Int_t)(fHitMapD[CheckedIndex(iz, ix)])+1.);
 }
+//______________________________________________________________________
+Int_t AliITSMapA2::GetHitIndex(Int_t iz, Int_t ix){
+    //return the index of an entry in array 
 
-//--------------------------------------
-TObject* AliITSMapA2::GetHit(Int_t i, Int_t dummy)
-{
-  
-  //return a pointer to the 1D histogram
-  if (fObjects) {
-    
-    return fObjects->UncheckedAt(i); 
-    
-  } else return NULL;
-  
+    return CheckedIndex(iz, ix);
 }
+//______________________________________________________________________
+TObject* AliITSMapA2::GetHit(Int_t i, Int_t dummy){
+  //return a pointer to the 1D histogram
 
-//--------------------------------------
-Double_t AliITSMapA2::GetSignal(Int_t iz, Int_t ix)
-{
-  //get signal in a cell 
-  Int_t index=GetHitIndex(iz,ix);
-  return (index <0) ? 0. : fHitMapD[CheckedIndex(iz, ix)];
+    if (fObjects) {
+       return fObjects->UncheckedAt(i);
+    } else return NULL;
 }
+//______________________________________________________________________
+Double_t AliITSMapA2::GetSignal(Int_t index){
+    //get signal in a cell 
 
-//--------------------------------------
-Double_t AliITSMapA2::GetSignal(Int_t index)
-{
-  //get signal in a cell 
-  if (index<fMaxIndex) return (index <0) ? 0. : fHitMapD[index];
-  else return 0.;
+    if (index<fMaxIndex) return (index <0) ? 0. : fHitMapD[index];
+    else return 0.;
 }
-//--------------------------------------
-FlagType AliITSMapA2::TestHit(Int_t iz, Int_t ix)
-{
-  // check if the entry has already been flagged
+//______________________________________________________________________
+FlagType AliITSMapA2::TestHit(Int_t iz, Int_t ix){
+    // check if the entry has already been flagged
 
     if (CheckedIndex(iz, ix) < 0) return kEmpty;
     Int_t inf=(Int_t)fHitMapD[CheckedIndex(iz, ix)];
     
     if (inf <= -1000) {
-      return kUsed;
+       return kUsed;
     } else if (inf == 0) {
-      return kEmpty;
+       return kEmpty;
     } else {
-      return kUnused;
-    }
+       return kUnused;
+    } // end if inf...
 }
+//______________________________________________________________________
+void  AliITSMapA2::FillMapFromHist(){
+    // fills map from 1D histograms
 
-//--------------------------------------
-void  AliITSMapA2::FillMapFromHist()
-{
-  
-  // fills map from 1D histograms
-  
-  if (!fObjects) return; 
-  
-  // an example
-  for( Int_t i=0; i<fNobjects; i++) {
-    TH1F *hist =(TH1F *)fObjects->UncheckedAt(i);
-    Int_t nsamples = hist->GetNbinsX();
-    for( Int_t j=0; j<nsamples; j++) {
-      Double_t signal = (Double_t)(hist->GetBinContent(j+1));
-      if (signal > fMapThresholdD) SetHit(i,j,signal);
-    }
-  }
-  
+    if (!fObjects) return;
+
+    // an example
+    for( Int_t i=0; i<fNobjects; i++) {
+       TH1F *hist =(TH1F *)fObjects->UncheckedAt(i);
+       Int_t nsamples = hist->GetNbinsX();
+       for( Int_t j=0; j<nsamples; j++) {
+           Double_t signal = (Double_t)(hist->GetBinContent(j+1));
+           if (signal > fMapThresholdD) SetHit(i,j,signal);
+       } // end for j
+    } // end for i
 }
-//--------------------------------------
-void  AliITSMapA2::FillHist()
-{
-  
-  // fill 1D histograms from map
-  if (!fObjects || fScaleSizeX != 1) return; 
-  
-  // an example
-  for( Int_t i=0; i<fNobjects; i++) {
-    TH1F *hist =(TH1F *)fObjects->UncheckedAt(i);
-    for( Int_t j=0; j<fNpx; j++) {
-      Double_t signal=GetSignal(i,j);
-      if (signal > fMapThresholdD) hist->Fill((Float_t)j,signal);
-    }
-  }
-  
+//______________________________________________________________________
+void  AliITSMapA2::FillHist(){
+    // fill 1D histograms from map
+
+    if (!fObjects || fScaleSizeX != 1) return;
+
+    // an example
+    for( Int_t i=0; i<fNobjects; i++) {
+       TH1F *hist =(TH1F *)fObjects->UncheckedAt(i);
+       for( Int_t j=0; j<fNpx; j++) {
+           Double_t signal=GetSignal(i,j);
+           if (signal > fMapThresholdD) hist->Fill((Float_t)j,signal);
+       } // end for j
+    } // end for i
 }
-//--------------------------------------
-void  AliITSMapA2::ResetHist()
-{
-  //
-  // Reset histograms 
-  //
-  
-  if (!fObjects) return; 
-  
-  for( Int_t i=0; i<fNobjects; i++) {
-    if ((*fObjects)[i])    ((TH1F*)(*fObjects)[i])->Reset();
-  }
-  
+//______________________________________________________________________
+void  AliITSMapA2::ResetHist(){
+    // Reset histograms
+
+    if (!fObjects) return;
+
+    for( Int_t i=0; i<fNobjects; i++) {
+       if ((*fObjects)[i])    ((TH1F*)(*fObjects)[i])->Reset();
+    } // end for i
 }
+//______________________________________________________________________
+void AliITSMapA2::AddSignal(Int_t iz,Int_t ix,Double_t sig){
+    // Addes sig to cell iz. equivalent to the very common
+    // sig = fMapA2->GetSignal(iz,ix) + sig; fMapA2->SetHit(iz,ix,sig);
 
+
+    Int_t index=GetHitIndex(iz,ix);
+    if(index<0) return;
+    fHitMapD[CheckedIndex(iz, ix)] += sig;    
+}
index 4ab675f08b9acaa6a91dd3f8346d8102477a5208..6ae1cd8dc773d77950984f4f8dce5f19d9eaacf6 100644 (file)
@@ -1,58 +1,74 @@
 #ifndef ALIITSMAPA2_H
 #define ALIITSMAPA2_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice     */
+/* $Id$ */
 
+////////////////////////////////////////////////////////////////////////
+//  Map Class for ITS. Implementation A2. In this implementation, the //
+// 2 dimensional (iz,ix) map is filled with Double precision floating //
+// point values. For each cell a corresponding TObject, a hit, can    //
+// also be stored. This class is derived from AliITSMapA1 so that is  //
+// retains all of the functionality of that map class as well.        //
+////////////////////////////////////////////////////////////////////////
 
 #include "AliITSMapA1.h"
 
-class AliITSMapA2 :
-public AliITSMapA1 
-{
-
-public:
-  AliITSMapA2();
-  AliITSMapA2(AliITSsegmentation *seg);
-  AliITSMapA2(AliITSsegmentation *seg,Int_t scalesizeX,Int_t scalesizeZ);
-  AliITSMapA2(AliITSsegmentation *seg, TObjArray *hist,Double_t thresh);
-  virtual ~AliITSMapA2();
-  AliITSMapA2(const AliITSMapA2 &source); // copy constructor
-   // assignment operator
-  AliITSMapA2& operator=(const AliITSMapA2 &source);
-   // fill pad signals into map 
-  virtual  void  FillMap();
-   // clear map
-  virtual  void  ClearMap();    
-   // set hit
-  virtual  void  SetHit(Int_t iz, Int_t ix, Int_t signal){}
+class AliITSMapA2 : public AliITSMapA1{
+
+ public:
+    AliITSMapA2(); // default creator
+    // Standard reator using only a segmentation class
+    AliITSMapA2(AliITSsegmentation *seg);
+    // Standard reator using only a segmentation class and X and Z scale sizes
+    AliITSMapA2(AliITSsegmentation *seg,Int_t scalesizeX,Int_t scalesizeZ);
+    // Standard reator using only a segmentation class pointer to hits, and
+    // a threshold value
+    AliITSMapA2(AliITSsegmentation *seg, TObjArray *hist,Double_t thresh);
+    virtual ~AliITSMapA2(); // destructor
+    AliITSMapA2(const AliITSMapA2 &source); // copy constructor
+    // assignment operator
+    AliITSMapA2& operator=(const AliITSMapA2 &source);
+    // fill pad signals into map 
+    virtual void FillMap();
+    // clear map
+    virtual void ClearMap();    
+    // set hit. Over written with a null function. See Double version below.
+    virtual void SetHit(Int_t iz, Int_t ix, Int_t signal){}
+    // set hit
+    void  SetHit(Int_t iz, Int_t ix, Double_t signal);
     // Flag a hit as used
     // Set threshold for the signal
-  virtual  void  SetThreshold(Int_t thresh) {fMapThresholdD=(double)thresh;}
-  virtual  void  FlagHit(Int_t iz, Int_t ix);    
-  virtual  void  DeleteHit(Int_t iz, Int_t ix);
+    virtual void SetThreshold(Int_t thresh) {fMapThresholdD=(Double_t)thresh;}
+    // flags hit in map
+    virtual  void  FlagHit(Int_t iz, Int_t ix);
+    // delets hit from map
+    virtual  void  DeleteHit(Int_t iz, Int_t ix);
     // Get index in the map
-  virtual Int_t  GetHitIndex(Int_t iz, Int_t ix);
+    virtual Int_t  GetHitIndex(Int_t iz, Int_t ix);
     // Get object (1D histogram)
-  virtual TObject *GetHit(Int_t iz, Int_t dummy);
+    virtual TObject *GetHit(Int_t iz, Int_t dummy);
     // Test hit status
-  virtual FlagType TestHit(Int_t iz, Int_t ix);
-    // Get signal
-  virtual Double_t  GetSignal(Int_t iz, Int_t ix);
-   // set hit
-  void  SetHit(Int_t iz, Int_t ix, Double_t signal);
+    virtual FlagType TestHit(Int_t iz, Int_t ix);
+    // Get signal using two dim. index
+    virtual Double_t GetSignal(Int_t iz, Int_t ix)
+       {return GetSignal(GetHitIndex(iz,ix));}
     // Get signal
-  Double_t  GetSignal(Int_t index);
+    Double_t GetSignal(Int_t index);
+    // Add new value to Map at cell
+    virtual void AddSignal(Int_t iz, Int_t ix, Double_t sig);
 
-private:
-  void  FillMapFromHist();
-  void  FillHist();
-  void  ResetHist();
+ private:
+    void  FillMapFromHist(); // fills the map from a historgram
+    void  FillHist(); // fills a histogram from the map
+    void  ResetHist(); // resets the histogram
 
-  Double_t *fHitMapD;         //! [fMaxIndex]
-  Double_t fMapThresholdD;    // threshold for signal
-  Int_t    fScaleSizeX;      // scale factor on x
-  Int_t    fScaleSizeZ;      // scale factor on z
+    Double_t *fHitMapD;         //! [fMaxIndex]
+    Double_t fMapThresholdD;    // threshold for signal
+    Int_t    fScaleSizeX;       // scale factor on x
+    Int_t    fScaleSizeZ;       // scale factor on z
 
-  ClassDef(AliITSMapA2,1) // Implements Signal Map
+    ClassDef(AliITSMapA2,1) // Implements Signal Map
 };
 
-
 #endif