#include "TH1F.h"
#include "TH2F.h"
#include "AliITSMapSDD.h"
#include "AliITSCorrMap1DSDD.h"
ClassImp(AliITSMapSDD)
AliITSMapSDD::AliITSMapSDD():TNamed("defaultmap","")
{
for(Int_t iAn=0;iAn<fgkNAnodPts; iAn++){
for(Int_t iDr=0;iDr<fgkNDrifPts; iDr++){
fMap[iAn][iDr]=0;
}
}
}
AliITSMapSDD::AliITSMapSDD(Char_t *mapname):TNamed(mapname,"")
{
for(Int_t iAn=0;iAn<fgkNAnodPts; iAn++){
for(Int_t iDr=0;iDr<fgkNDrifPts; iDr++){
fMap[iAn][iDr]=0;
}
}
}
void AliITSMapSDD::SetMap(TH2F* hmap){
for(Int_t iAn=0;iAn<fgkNAnodPts; iAn++){
for(Int_t iDr=0;iDr<fgkNDrifPts; iDr++){
SetCellContent(iAn,iDr,hmap->GetBinContent(iAn+1,iDr+1));
}
}
}
Float_t AliITSMapSDD::GetCorrection(Float_t z, Float_t x, AliITSsegmentationSDD *seg){
const Double_t kMicronTocm = 1.0e-4;
Int_t nAnodes=seg->Npz();
Int_t nAnodesHybrid=seg->NpzHalf();
Int_t bina =(Int_t) seg->GetAnodeFromLocal(x,z);
if(bina>nAnodes) AliError("Wrong anode anumber!");
if(bina>=nAnodesHybrid) bina-=nAnodesHybrid;
Float_t stept = seg->Dx()*kMicronTocm/(Float_t)fgkNDrifPts;
Int_t bint = TMath::Abs((Int_t)(x/stept));
if(bint==fgkNDrifPts) bint-=1;
if(bint>=fgkNDrifPts) AliError("Wrong bin number along drift direction!");
return kMicronTocm*GetCellContent(bina,bint);
}
TH2F* AliITSMapSDD::GetMapHisto() const{
TString hname;
hname.Form("h%s",GetName());
TH2F* hmap=new TH2F(hname.Data(),"",fgkNAnodPts,-0.5,255.5,fgkNDrifPts,0.,35.);
for(Int_t iAn=0;iAn<fgkNAnodPts; iAn++){
for(Int_t iDr=0;iDr<fgkNDrifPts; iDr++){
hmap->SetBinContent(iAn+1,iDr+1,GetCellContent(iAn,iDr));
}
}
return hmap;
}
TH1F* AliITSMapSDD::GetResidualDistr(Float_t dmin, Float_t dmax) const{
TString hname;
hname.Form("hd%s",GetName());
TH1F* hd=new TH1F(hname.Data(),"",100,dmin,dmax);
for(Int_t iAn=0;iAn<fgkNAnodPts; iAn++){
for(Int_t iDr=0;iDr<fgkNDrifPts; iDr++){
hd->Fill(GetCellContent(iAn,iDr));
}
}
return hd;
}
AliITSCorrMapSDD* AliITSMapSDD::ConvertToNewFormat() const{
Char_t* name=(Char_t*)GetName();
AliITSCorrMapSDD* newmap=new AliITSCorrMap1DSDD(name,fgkNDrifPts);
for(Int_t i=0; i<fgkNDrifPts; i++){
newmap->SetCellContent(0,i,GetCellContent(0,i));
}
return newmap;
}