#include <TObjArray.h>
#include "AliITSMapA1.h"
#include "AliITSsegmentation.h"
#include "AliITSdigit.h"
ClassImp(AliITSMapA1)
AliITSMapA1::AliITSMapA1():
fSegmentation(0),
fNpx(0),
fNpz(0),
fObjects(0),
fNobjects(0),
fMaxIndex(0),
fMapThresholdArr(0),
fHitMap(0),
fMapThreshold(0){
}
AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg):
fSegmentation(seg),
fNpx(0),
fNpz(0),
fObjects(0),
fNobjects(0),
fMaxIndex(0),
fMapThresholdArr(0),
fHitMap(0),
fMapThreshold(0){
fNpz = fSegmentation->Npz();
fNpx = fSegmentation->Npx();
fMaxIndex = fNpz*fNpx+fNpx;
fHitMap = new Int_t[fMaxIndex];
ClearMap();
}
AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg, TObjArray *obj):
fSegmentation(seg),
fNpx(0),
fNpz(0),
fObjects(obj),
fNobjects(0),
fMaxIndex(0),
fMapThresholdArr(0),
fHitMap(0),
fMapThreshold(0){
fNpz = fSegmentation->Npz();
fNpx = fSegmentation->Npx();
fMaxIndex = fNpz*fNpx+fNpx;
fHitMap = new Int_t[fMaxIndex];
if(fObjects) fNobjects = fObjects->GetEntriesFast();
ClearMap();
}
AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg, TObjArray *obj, Int_t thr):
fSegmentation(seg),
fNpx(0),
fNpz(0),
fObjects(obj),
fNobjects(0),
fMaxIndex(0),
fMapThresholdArr(0),
fHitMap(0),
fMapThreshold(thr){
fNpz = fSegmentation->Npz();
fNpx = fSegmentation->Npx();
fMaxIndex = fNpz*fNpx+fNpx;
fHitMap = new Int_t[fMaxIndex];
if(fObjects) fNobjects = fObjects->GetEntriesFast();
ClearMap();
}
AliITSMapA1::AliITSMapA1(AliITSsegmentation *seg, TObjArray *obj, TArrayI thr):
fSegmentation(seg),
fNpx(0),
fNpz(0),
fObjects(obj),
fNobjects(0),
fMaxIndex(0),
fMapThresholdArr(thr),
fHitMap(0),
fMapThreshold(0){
fNpz = fSegmentation->Npz();
fNpx = fSegmentation->Npx();
fMaxIndex = fNpz*fNpx+fNpx;
fHitMap = new Int_t[fMaxIndex];
if(fObjects) fNobjects = fObjects->GetEntriesFast();
ClearMap();
}
AliITSMapA1::~AliITSMapA1(){
if(fHitMap) delete[] fHitMap;
}
void AliITSMapA1::ClearMap(){
memset(fHitMap,0,sizeof(int)*fMaxIndex);
}
void AliITSMapA1::SetArray(TObjArray *obj){
fObjects = obj;
if (fObjects) fNobjects = fObjects->GetEntriesFast();
}
Int_t AliITSMapA1::CheckedIndex(Int_t iz, Int_t ix) const {
Int_t index=fNpx*iz+ix;
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);
return -1;
} else {
return index;
}
}
void AliITSMapA1::FillMap(){
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->GetSignal() > fMapThreshold) {
SetHit(dig->GetCoord1(),dig->GetCoord2(),ndig);
}
}
}
void AliITSMapA1::FillMap2(){
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->GetSignal() > fMapThresholdArr[dig->GetCoord1()]) {
SetHit(dig->GetCoord1(),dig->GetCoord2(),ndig);
}
}
}
void AliITSMapA1::SetHit(Int_t iz, Int_t ix, Int_t idigit){
fHitMap[CheckedIndex(iz, ix)]=idigit+1;
}
void AliITSMapA1::DeleteHit(Int_t iz, Int_t ix){
fHitMap[CheckedIndex(iz, ix)]=0;
}
void AliITSMapA1::FlagHit(Int_t iz, Int_t ix){
fHitMap[CheckedIndex(iz, ix)] = -TMath::Abs(fHitMap[CheckedIndex(iz, ix)]);
}
Int_t AliITSMapA1::GetHitIndex(Int_t iz, Int_t ix) const {
return TMath::Abs(fHitMap[CheckedIndex(iz, ix)])-1;
}
TObject* AliITSMapA1::GetHit(Int_t iz, Int_t ix) const {
Int_t index=GetHitIndex(iz,ix);
return (index <0) ? 0 : fObjects->UncheckedAt(GetHitIndex(iz,ix));
}
Double_t AliITSMapA1::GetSignal(Int_t iz, Int_t ix) const{
Double_t signal;
AliITSdigit *dig = (AliITSdigit*)GetHit(iz,ix);
if(dig) signal=(Double_t)dig->GetSignal();
else signal=0.;
return signal;
}
FlagTypeITS AliITSMapA1::TestHit(Int_t iz, Int_t ix) {
if (CheckedIndex(iz, ix) < 0) return kEmptyITS;
Int_t inf=fHitMap[CheckedIndex(iz, ix)];
if (inf < 0) {
return kUsedITS;
} else if (inf == 0) {
return kEmptyITS;
} else {
return kUnusedITS;
}
}