added AddSignal function to AliITSMapA2, used in new AliITSsimulationSSD code.
* 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"
#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>
//___________________________________________________________________________
-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
};
* 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
}
+
#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
#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;
+}
#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