fDeadChannels(0),
fIsBad(kFALSE),
fBadChannels(),
-fUseACorrMap(0),
-fUseTCorrMap(0),
fMapAW0(0),
fMapAW1(0),
fMapTW0(0),
}
}
SetTemperature(fgkTemperatureDefault);
- SetUseCorrectionMaps(kTRUE,kTRUE);
SetDataType();
}
//______________________________________________________________________
fDeadChannels(0),
fIsBad(kFALSE),
fBadChannels(),
-fUseACorrMap(0),
-fUseTCorrMap(0),
fMapAW0(0),
fMapAW1(0),
fMapTW0(0),
}
SetTemperature(fgkTemperatureDefault);
- SetUseCorrectionMaps(kTRUE,kTRUE);
SetDataType(dataType);
}
//_____________________________________________________________________
//correction of coordinates using the maps stored in the DB
Int_t nSide=seg->GetSideFromLocalX(x);
devz=0;
-// if(fUseACorrMap){
// if(nSide==0) devz=fMapAW0->GetCorrection(z,x,seg);
// else devz=fMapAW1->GetCorrection(z,x,seg);
-// }
devx=0;
- if(fUseTCorrMap){
- if(nSide==0) devx=fMapTW0->GetCorrection(z,x,seg);
- else devx=fMapTW1->GetCorrection(z,x,seg);
- }
+ if(nSide==0) devx=fMapTW0->GetCorrection(z,x,seg);
+ else devx=fMapTW1->GetCorrection(z,x,seg);
return;
}
//______________________________________________________________________
if(GetChannelGain(anode)==0) return kTRUE;
else return kFALSE;
}
- void SetUseCorrectionMaps(Bool_t useAnodeMap, Bool_t useDriftMap){
- fUseACorrMap=useAnodeMap;
- fUseTCorrMap=useDriftMap;
- }
Float_t GetMapACell(Int_t i,Int_t j) const {
if(i<256) return fMapAW0->GetCellContent(i,j);
else return fMapAW1->GetCellContent(i-256,j);
TArrayI fBadChannels; //Array with bad anodes number (0-512)
- Bool_t fUseACorrMap; // flag for the use of correction maps (anode)
- Bool_t fUseTCorrMap; // flag for the use of correction maps (drift)
-
AliITSMapSDD* fMapAW0; //! map of residuals on anode coord. wing 0
AliITSMapSDD* fMapAW1; //! map of residuals on anode coord. wing 1
AliITSMapSDD* fMapTW0; //! map of residuals on time coord. wing 0
AliITSCalibrationSDD& operator=(const AliITSCalibrationSDD & /* source */); // ass. op.
- ClassDef(AliITSCalibrationSDD,13)
+ ClassDef(AliITSCalibrationSDD,17)
};
#endif
Float_t xdet=(driftPathMicron-GetSeg()->Dx())*kMicronTocm; // xdet is negative
if (s==0) xdet=-xdet; // left side has positive local x
- Float_t corrx=0, corrz=0;
- cal->GetCorrections(zdet,xdet,corrz,corrx,GetSeg());
- zdet+=corrz;
- xdet+=corrx;
+ if(repa->GetUseSDDCorrectionMaps()){
+ Float_t corrx=0, corrz=0;
+ cal->GetCorrections(zdet,xdet,corrz,corrx,GetSeg());
+ zdet+=corrz;
+ xdet+=corrx;
+ }
Double_t loc[3]={xdet,0.,zdet},trk[3]={0.,0.,0.};
mT2L->MasterToLocal(loc,trk);
#include "TH2F.h"
#include "AliITSMapSDD.h"
+const Int_t AliITSMapSDD::fgkNAnodePtsDefault = 1;
+const Int_t AliITSMapSDD::fgkNDriftPtsDefault = 72;
+
ClassImp(AliITSMapSDD)
//______________________________________________________________________
-AliITSMapSDD::AliITSMapSDD():TNamed("defaultmap","")
+AliITSMapSDD::AliITSMapSDD():
+TNamed("defaultmap",""),
+fNAnodePts(fgkNAnodePtsDefault),
+fNDriftPts(fgkNDriftPtsDefault)
{
// default constructor
- 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,"")
+AliITSMapSDD::AliITSMapSDD(Char_t *mapname):
+TNamed(mapname,""),
+fNAnodePts(fgkNAnodePtsDefault),
+fNDriftPts(fgkNDriftPtsDefault)
{
// standard constructor
- 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){
- // Fill map staring from 2D histo
- // with anodes on x axis and drift dist. on y axis
- 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){
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;
+ Float_t stept = seg->Dx()*kMicronTocm/(Float_t)fNDriftPts;
Int_t bint = TMath::Abs((Int_t)(x/stept));
- if(bint==fgkNDrifPts) bint-=1;
- if(bint>=fgkNDrifPts) AliError("Wrong bin number along drift direction!");
+ if(bint==fNDriftPts) bint-=1;
+ if(bint>=fNDriftPts) AliError("Wrong bin number along drift direction!");
return kMicronTocm*GetCellContent(bina,bint);
}
//______________________________________________________________________
// Returns a TH2F histogram with map of residuals
Char_t hname[50];
sprintf(hname,"h%s",GetName());
- TH2F* hmap=new TH2F(hname,"",fgkNAnodPts,-0.5,255.5,fgkNDrifPts,0.,35.);
- for(Int_t iAn=0;iAn<fgkNAnodPts; iAn++){
- for(Int_t iDr=0;iDr<fgkNDrifPts; iDr++){
+ TH2F* hmap=new TH2F(hname,"",fNAnodePts,-0.5,255.5,fNDriftPts,0.,35.);
+ for(Int_t iAn=0;iAn<fNAnodePts; iAn++){
+ for(Int_t iDr=0;iDr<fNDriftPts; iDr++){
hmap->SetBinContent(iAn+1,iDr+1,GetCellContent(iAn,iDr));
}
}
Char_t hname[50];
sprintf(hname,"hd%s",GetName());
TH1F* hd=new TH1F(hname,"",100,dmin,dmax);
- for(Int_t iAn=0;iAn<fgkNAnodPts; iAn++){
- for(Int_t iDr=0;iDr<fgkNDrifPts; iDr++){
+ for(Int_t iAn=0;iAn<fNAnodePts; iAn++){
+ for(Int_t iDr=0;iDr<fNDriftPts; iDr++){
hd->Fill(GetCellContent(iAn,iDr));
}
}
///////////////////////////////////////////////////////////////////
// //
-// Class for SDD maps used to correct for //
+// Mother class for SDD maps used to correct for //
// voltage divider shape and doping fluctuations //
// Origin: F.Prino, Torino, prino@to.infn.it //
// //
AliITSMapSDD(Char_t *mapname);
virtual ~AliITSMapSDD(){};
- void SetMap(TH2F* hmap);
- Bool_t CheckBounds(Int_t iAn, Int_t iTb) const {
- if(iAn<0 || iAn>=fgkNAnodPts || iTb<0 || iTb >= fgkNDrifPts){
- AliWarning(Form("Cell out of bounds, anode=%d time-bin=%d",iAn,iTb));
+ Int_t GetNBinsAnode() const {return fNAnodePts;}
+ Int_t GetNBinsDrift() const {return fNDriftPts;}
+ void SetNBinsAnode(Int_t nbins) {
+ if(nbins<=kMaxNAnodePts) fNAnodePts=nbins;
+ else AliError(Form("Max. number of anode bins = %d",kMaxNAnodePts));
+ }
+ void SetNBinsDrift(Int_t nbins) {
+ if(nbins<=kMaxNDriftPts) fNDriftPts=nbins;
+ else AliError(Form("Max. number of drift bins = %d",kMaxNDriftPts));
+ }
+
+ Bool_t CheckAnodeBounds(Int_t iAn) const {
+ if(iAn<0 || iAn>=fNAnodePts){
+ AliWarning(Form("Cell out of bounds, anode=%d",iAn));
return kFALSE;
}
return kTRUE;
}
- void SetCellContent(Int_t iAn, Int_t iTb, Float_t devMicron){
- if(CheckBounds(iAn,iTb)) fMap[iAn][iTb]=(Short_t)(devMicron*10.+0.5);
+ Bool_t CheckDriftBounds(Int_t iTb) const {
+ if(iTb<0 || iTb >= fNDriftPts){
+ AliWarning(Form("Cell out of bounds, time-bin=%d",iTb));
+ return kFALSE;
+ }
+ return kTRUE;
}
- Float_t GetCellContent(Int_t iAn, Int_t iTb) const {
- if(CheckBounds(iAn,iTb)) return (Float_t)fMap[iAn][iTb]/10.;
- else return 0.;
+ virtual void Set1DMap(TH1F* /*hmap*/){
+ AliError("Not implemented");
}
- Float_t GetCorrection(Float_t z, Float_t x, AliITSsegmentationSDD *seg);
- static Int_t GetNBinsAnode() {return fgkNAnodPts;}
- static Int_t GetNBinsDrift() {return fgkNDrifPts;}
+ virtual void Set2DMap(TH2F* /*hmap*/){
+ AliError("Not implemented");
+ }
+
+ virtual void ResetMap() = 0;
+ virtual void SetCellContent(Int_t iAn, Int_t iTb, Float_t devMicron) = 0;
+ virtual Float_t GetCellContent(Int_t iAn, Int_t iTb) const = 0;
+ Float_t GetCorrection(Float_t z, Float_t x, AliITSsegmentationSDD *seg);
TH2F* GetMapHisto() const;
TH1F* GetResidualDistr(Float_t dmin=-300., Float_t dmax=300.) const;
+
protected:
- static const Int_t fgkNAnodPts = 256; // number of map points along anodes
- static const Int_t fgkNDrifPts = 72; // number of map points along anodes
- Short_t fMap[fgkNAnodPts][fgkNDrifPts]; // map of deviations
- // stored as Short_t: integer
- // values from -32000 to 32000
- // in the range -3.2 - 3.2 mm
-
- ClassDef(AliITSMapSDD,2);
+ enum {kMaxNAnodePts=256};// max number of map points along anodes
+ enum {kMaxNDriftPts=291};// max number of map points along drift
+
+ static const Int_t fgkNAnodePtsDefault; // default value for fNAnodePts
+ static const Int_t fgkNDriftPtsDefault; // default value for fNDriftPts
+
+ Int_t fNAnodePts; // number of map points along anodes
+ Int_t fNDriftPts; // number of map points along anodes
+
+ ClassDef(AliITSMapSDD,3);
};
#endif
if(modID==-1) continue;
modID-=240; // to have SDD modules numbering from 0 to 260
AliITSCalibrationSDD *cal = new AliITSCalibrationSDD("simulated");
- cal->SetUseCorrectionMaps(0,0); // temporary disabling of maps
cal->SetAMAt20MHz(); // for runs > 51275 with clock at 20 MHz
numOfBadChannels[modID]=0;
Int_t badch[kNumberOfChannels];
fUseUnfoldingInClusterFinderSPD(kFALSE),
fUseUnfoldingInClusterFinderSDD(kTRUE),
fUseUnfoldingInClusterFinderSSD(kTRUE),
+fUseSDDCorrectionMaps(kTRUE),
fUseSDDClusterSizeSelection(kFALSE),
fMinClusterChargeSDD(0.),
fUseChargeMatchingInClusterFinderSSD(kTRUE),
param->fSigmaZDeadZoneHit2 = 0.001/12.;
param->fXPassDeadZoneHits = 0.018;
+ param->fUseSDDCorrectionMaps = kFALSE;
return param;
}
void SetUseUnfoldingInClusterFinderSSD(Bool_t use=kTRUE) { fUseUnfoldingInClusterFinderSSD=use; return; }
Bool_t GetUseUnfoldingInClusterFinderSSD() const { return fUseUnfoldingInClusterFinderSSD; }
+ void SetUseSDDCorrectionMaps(Bool_t use=kTRUE) {fUseSDDCorrectionMaps=use;}
+ Bool_t GetUseSDDCorrectionMaps() const {return fUseSDDCorrectionMaps;}
void SetUseSDDClusterSizeSelection(Bool_t use=kTRUE) {fUseSDDClusterSizeSelection=use;}
Bool_t GetUseSDDClusterSizeSelection() const {return fUseSDDClusterSizeSelection;}
void SetMinClusterChargeSDD(Float_t qcut=0.){fMinClusterChargeSDD=qcut;}
Bool_t fUseUnfoldingInClusterFinderSDD; // SDD
Bool_t fUseUnfoldingInClusterFinderSSD; // SSD
+ Bool_t fUseSDDCorrectionMaps; // flag for use of SDD maps in C.F.
Bool_t fUseSDDClusterSizeSelection; // cut on SDD cluster size
Float_t fMinClusterChargeSDD; // cut on SDD cluster charge
Bool_t fSPDRemoveDeadFlag; // Flag saying whether dead pixels should be removed
- ClassDef(AliITSRecoParam,18) // ITS reco parameters
+ ClassDef(AliITSRecoParam,19) // ITS reco parameters
};
#endif
#pragma link C++ class AliITSChannelStatus+;
#pragma link C++ class AliITSHLTforSDD+;
#pragma link C++ class AliITSMapSDD+;
+#pragma link C++ class AliITSMap1DSDD+;
+#pragma link C++ class AliITSMap2DSDD+;
#pragma link C++ class AliITSDriftSpeedSDD+;
#pragma link C++ class AliITSDriftSpeedArraySDD+;
#pragma link C++ class AliITSDDLModuleMapSDD+;
}
- AliCDBMetaData *md3 = new AliCDBMetaData();
- md3->SetObjectClassName("AliITSMapSDD");
- md3->SetResponsible("Elisabetta Crescio, Francesco Prino");
- md3->SetBeamPeriod(0);
- md3->SetAliRootVersion("Head 24 sept. 2007");
- md3->SetComment("This is a test");
+ AliCDBMetaData *md = new AliCDBMetaData();
+ md->SetObjectClassName("TObjArray");
+ md->SetResponsible("Francesco Prino");
+ md->SetBeamPeriod(0);
+ md->SetComment("Simulated data");
- AliCDBMetaData *md4 = new AliCDBMetaData();
- md4->SetObjectClassName("AliITSMapSDD");
- md4->SetResponsible("Elisabetta Crescio, Francesco Prino");
- md4->SetBeamPeriod(0);
- md4->SetAliRootVersion("Head 24 sept. 2007");
- md4->SetComment("This is a test");
- AliCDBId mapA("ITS/Calib/MapsAnodeSDD",firstRun,lastRun);
- TObjArray anmap(520);
- anmap.SetOwner(kFALSE);
-
AliCDBId mapT("ITS/Calib/MapsTimeSDD",firstRun,lastRun);
TObjArray tmap(520);
tmap.SetOwner(kFALSE);
TRandom3 *gran = new TRandom3();
+ AliITSMapSDD* mapTime0;
+ AliITSMapSDD* mapTime1;
for(Int_t mod=0;mod<260;mod++){
// maps
Char_t name[20];
- sprintf(name,"AnodeMap_%d_%d\n",mod,0);
- AliITSMapSDD* mapAnodes0 = new AliITSMapSDD(name);
sprintf(name,"DriftTimeMap_%d_%d\n",mod,0);
- AliITSMapSDD* mapTime0 = new AliITSMapSDD(name);
- sprintf(name,"AnodeMap_%d_%d\n",mod,1);
- AliITSMapSDD* mapAnodes1 = new AliITSMapSDD(name);
- sprintf(name,"DriftTimeMap_%d_%d\n",mod,1);
- AliITSMapSDD* mapTime1 = new AliITSMapSDD(name);
-
- for(Int_t nan = 0;nan<256;nan++){
+ Int_t nbinsan=1;
+ if(mod==10 || mod==240){
+ nbinsan=256;
+ sprintf(name,"DriftTimeMap_%d_%d\n",mod,0);
+ mapTime0 = new AliITSMap2DSDD(name,nbinsan,72);
+ sprintf(name,"DriftTimeMap_%d_%d\n",mod,1);
+ mapTime1 = new AliITSMap2DSDD(name,nbinsan,72);
+ }else{
+ sprintf(name,"DriftTimeMap_%d_%d\n",mod,0);
+ mapTime0 = new AliITSMap1DSDD(name,72);
+ sprintf(name,"DriftTimeMap_%d_%d\n",mod,1);
+ mapTime1 = new AliITSMap1DSDD(name,72);
+ }
+ for(Int_t nan = 0;nan< nbinsan;nan++){
for(Int_t nt = 0;nt<36*2;nt++){
- mapAnodes0->SetCellContent(nan,nt,gran->Gaus(0,20));
mapTime0->SetCellContent(nan,nt,gran->Gaus(0,20));
- mapAnodes1->SetCellContent(nan,nt,gran->Gaus(0,20));
mapTime1->SetCellContent(nan,nt,gran->Gaus(0,20));
}
}
- anmap.Add(mapAnodes0);
tmap.Add(mapTime0);
- anmap.Add(mapAnodes1);
tmap.Add(mapTime1);
printf("Added module %d\n",mod);
}
- AliCDBManager::Instance()->GetDefaultStorage()->Put(&anmap, mapA, md3);
- AliCDBManager::Instance()->GetDefaultStorage()->Put(&tmap, mapT, md4);
+ AliCDBManager::Instance()->GetDefaultStorage()->Put(&tmap, mapT, md);
}
AliITSCalibrationSSD.cxx \
AliITSChannelStatus.cxx \
AliITSMapSDD.cxx \
+ AliITSMap1DSDD.cxx \
+ AliITSMap2DSDD.cxx \
AliITSHLTforSDD.cxx \
AliITSDriftSpeedSDD.cxx \
AliITSDDLModuleMapSDD.cxx \