#include <TH1.h>
#include <TObjArray.h>
#include "AliITSMapA2.h"
#include "AliITSsegmentation.h"
#include "AliITSdigit.h"
ClassImp(AliITSMapA2)
AliITSMapA2::AliITSMapA2():
fHitMapD(0),
fMapThresholdD(0),
fScaleSizeX(0),
fScaleSizeZ(0){
fSegmentation = 0;
fNpz = 0;
fNpx = 0;
fMaxIndex = 0;
fObjects = 0;
fNobjects = 0;
}
AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg):
fHitMapD(0),
fMapThresholdD(0),
fScaleSizeX(1),
fScaleSizeZ(1){
fSegmentation = seg;
fNpz = fSegmentation->Npz();
fNpx = fSegmentation->Npx();
fMaxIndex = fNpz*fNpx+fNpx;
fHitMapD = new Double_t[fMaxIndex+1];
fObjects = 0;
fNobjects = 0;
ClearMap();
}
AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg,
Int_t scalesizeX, Int_t scalesizeZ):
fHitMapD(0),
fMapThresholdD(0),
fScaleSizeX(scalesizeX),
fScaleSizeZ(scalesizeZ){
fSegmentation = seg;
fNpz = fScaleSizeZ*fSegmentation->Npz();
fNpx = fScaleSizeX*fSegmentation->Npx();
fMaxIndex = fNpz*fNpx+fNpx;
fHitMapD = new Double_t[fMaxIndex+1];
fObjects = 0;
fNobjects = 0;
ClearMap();
}
AliITSMapA2::AliITSMapA2(AliITSsegmentation *seg, TObjArray *obj,
Double_t thresh):
fHitMapD(0),
fMapThresholdD(thresh),
fScaleSizeX(1),
fScaleSizeZ(1){
fNobjects = 0;
fSegmentation = seg;
fNpz = fSegmentation->Npz();
fNpx = fSegmentation->Npx();
fMaxIndex = fNpz*fNpx+fNpx;
fHitMapD = new Double_t[fMaxIndex+1];
fObjects = obj;
if (fObjects) fNobjects = fObjects->GetEntriesFast();
ClearMap();
}
AliITSMapA2::~AliITSMapA2(){
if (fHitMapD) delete[] fHitMapD;
}
void AliITSMapA2::ClearMap(){
memset(fHitMapD,0,sizeof(Double_t)*fMaxIndex);
}
void AliITSMapA2::FillMap(){
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->GetSignal());
if (signal > fMapThresholdD) SetHit(dig->GetCoord1(),dig->GetCoord2(),signal);
}
}
void AliITSMapA2::FlagHit(Int_t iz, Int_t ix){
fHitMapD[CheckedIndex(iz, ix)]=
-1000.*TMath::Abs((Int_t)(fHitMapD[CheckedIndex(iz, ix)])+1.);
}
TObject* AliITSMapA2::GetHit(Int_t i, Int_t ) const {
if (fObjects) {
return fObjects->UncheckedAt(i);
} else return NULL;
}
Double_t AliITSMapA2::GetSignal(Int_t index) const {
if (index<fMaxIndex) return (index <0) ? 0. : fHitMapD[index];
else return 0.;
}
FlagTypeITS AliITSMapA2::TestHit(Int_t iz, Int_t ix){
if (CheckedIndex(iz, ix) < 0) return kEmptyITS;
Int_t inf=(Int_t)fHitMapD[CheckedIndex(iz, ix)];
if (inf <= -1000) {
return kUsedITS;
} else if (inf == 0) {
return kEmptyITS;
} else {
return kUnusedITS;
}
}
void AliITSMapA2::FillMapFromHist(){
if (!fObjects) return;
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);
}
}
}
void AliITSMapA2::FillHist(){
if (!fObjects || fScaleSizeX != 1) return;
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::ResetHist(){
if (!fObjects) return;
for( Int_t i=0; i<fNobjects; i++) {
if ((*fObjects)[i]) ((TH1F*)(*fObjects)[i])->Reset();
}
}
void AliITSMapA2::AddSignal(Int_t iz,Int_t ix,Double_t sig){
Int_t index=GetHitIndex(iz,ix);
if(index<0) return;
fHitMapD[CheckedIndex(iz, ix)] += sig;
}