From 54af1addac9b317077543cb8f3e5e13eeff8bcec Mon Sep 17 00:00:00 2001 From: masera Date: Thu, 7 May 2009 17:12:14 +0000 Subject: [PATCH] Restore backward compatibility for SDD map objects - Savannah bug 49895 (F. Prino) --- ITS/AliITSCalibration.h | 6 +- ITS/AliITSCalibrationSDD.h | 14 +-- ...ITSMap1DSDD.cxx => AliITSCorrMap1DSDD.cxx} | 26 +++--- ...{AliITSMap1DSDD.h => AliITSCorrMap1DSDD.h} | 24 ++--- ...ITSMap2DSDD.cxx => AliITSCorrMap2DSDD.cxx} | 26 +++--- ...{AliITSMap2DSDD.h => AliITSCorrMap2DSDD.h} | 24 ++--- ITS/AliITSCorrMapSDD.cxx | 89 ++++++++++++++++++ ITS/AliITSCorrMapSDD.h | 90 +++++++++++++++++++ ITS/AliITSDetTypeRec.cxx | 28 ++++-- ITS/AliITSDetTypeSim.cxx | 26 ++++-- ITS/AliITSMapSDD.cxx | 62 +++++++++---- ITS/AliITSMapSDD.h | 63 +++++-------- ITS/CMake_libITSbase.txt | 5 +- ITS/ITSbaseLinkDef.h | 5 +- ITS/StoreMapsSDD.C | 19 ++-- ITS/libITSbase.pkg | 5 +- 16 files changed, 363 insertions(+), 149 deletions(-) rename ITS/{AliITSMap1DSDD.cxx => AliITSCorrMap1DSDD.cxx} (84%) rename ITS/{AliITSMap1DSDD.h => AliITSCorrMap1DSDD.h} (70%) rename ITS/{AliITSMap2DSDD.cxx => AliITSCorrMap2DSDD.cxx} (83%) rename ITS/{AliITSMap2DSDD.h => AliITSCorrMap2DSDD.h} (70%) create mode 100644 ITS/AliITSCorrMapSDD.cxx create mode 100644 ITS/AliITSCorrMapSDD.h diff --git a/ITS/AliITSCalibration.h b/ITS/AliITSCalibration.h index 6e02d54a06e..58b1203ffe5 100644 --- a/ITS/AliITSCalibration.h +++ b/ITS/AliITSCalibration.h @@ -12,7 +12,7 @@ #include #include #include "AliLog.h" -#include "AliITSMapSDD.h" +#include "AliITSCorrMapSDD.h" #include "AliITSDriftSpeedArraySDD.h" class AliITSsegmentation; @@ -55,8 +55,8 @@ class AliITSCalibration : public TObject { virtual Int_t NDetParam() const = 0; virtual void GetDetParam(Double_t *) const = 0; - virtual void SetMapA(Int_t, AliITSMapSDD*) {AliError("This method must be implemented in a derived class");} - virtual void SetMapT(Int_t, AliITSMapSDD*) {AliError("This method must be implemented in a derived class");} + virtual void SetMapA(Int_t, AliITSCorrMapSDD*) {AliError("This method must be implemented in a derived class");} + virtual void SetMapT(Int_t, AliITSCorrMapSDD*) {AliError("This method must be implemented in a derived class");} virtual void SetDriftSpeed(Int_t, AliITSDriftSpeedArraySDD*) {AliError("This method must be implemented in a derived class");} // Set sigmas of the charge spread function virtual void SetSigmaSpread(Double_t, Double_t) = 0; diff --git a/ITS/AliITSCalibrationSDD.h b/ITS/AliITSCalibrationSDD.h index 1d92bd9e7e7..ceb82060f90 100644 --- a/ITS/AliITSCalibrationSDD.h +++ b/ITS/AliITSCalibrationSDD.h @@ -10,7 +10,7 @@ #include "AliITSsegmentationSDD.h" #include "TArrayI.h" -class AliITSMapSDD; +class AliITSCorrMapSDD; class AliITSDriftSpeedArraySDD; /////////////////////////////////////////////////////// @@ -112,7 +112,7 @@ class AliITSCalibrationSDD : public AliITSCalibration { if(i<256) return fMapAW0->GetCellContent(i,j); else return fMapAW1->GetCellContent(i-256,j); } - virtual void SetMapA(Int_t wing,AliITSMapSDD* mapA) { + virtual void SetMapA(Int_t wing,AliITSCorrMapSDD* mapA) { if(wing==0) fMapAW0=mapA; else fMapAW1=mapA; } @@ -120,7 +120,7 @@ class AliITSCalibrationSDD : public AliITSCalibration { if(i<256) return fMapTW0->GetCellContent(i,j); else return fMapTW1->GetCellContent(i-256,j); } - virtual void SetMapT(Int_t wing,AliITSMapSDD* mapT) { + virtual void SetMapT(Int_t wing,AliITSCorrMapSDD* mapT) { if(wing==0) fMapTW0=mapT; else fMapTW1=mapT; } @@ -177,10 +177,10 @@ class AliITSCalibrationSDD : public AliITSCalibration { TArrayI fBadChannels; //Array with bad anodes number (0-512) - 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 - AliITSMapSDD* fMapTW1; //! map of residuals on time coord. wing 1 + AliITSCorrMapSDD* fMapAW0; //! map of residuals on anode coord. wing 0 + AliITSCorrMapSDD* fMapAW1; //! map of residuals on anode coord. wing 1 + AliITSCorrMapSDD* fMapTW0; //! map of residuals on time coord. wing 0 + AliITSCorrMapSDD* fMapTW1; //! map of residuals on time coord. wing 1 AliITSDriftSpeedArraySDD* fDrSpeed0; //! drift speed for wing 0 AliITSDriftSpeedArraySDD* fDrSpeed1; //! drift speed for wing 1 diff --git a/ITS/AliITSMap1DSDD.cxx b/ITS/AliITSCorrMap1DSDD.cxx similarity index 84% rename from ITS/AliITSMap1DSDD.cxx rename to ITS/AliITSCorrMap1DSDD.cxx index 9dbe560f0a4..c3ff19b393f 100644 --- a/ITS/AliITSMap1DSDD.cxx +++ b/ITS/AliITSCorrMap1DSDD.cxx @@ -13,7 +13,7 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* $Id: $ */ +/* $Id$ */ /////////////////////////////////////////////////////////////////// // // @@ -23,43 +23,43 @@ /////////////////////////////////////////////////////////////////// #include "TH1F.h" -#include "AliITSMapSDD.h" -#include "AliITSMap1DSDD.h" +#include "AliITSCorrMapSDD.h" +#include "AliITSCorrMap1DSDD.h" -ClassImp(AliITSMap1DSDD) +ClassImp(AliITSCorrMap1DSDD) //______________________________________________________________________ -AliITSMap1DSDD::AliITSMap1DSDD(): -AliITSMapSDD() +AliITSCorrMap1DSDD::AliITSCorrMap1DSDD(): +AliITSCorrMapSDD() { // default constructor ResetMap(); SetNBinsAnode(1); } //______________________________________________________________________ -AliITSMap1DSDD::AliITSMap1DSDD(Char_t *mapname): -AliITSMapSDD(mapname) +AliITSCorrMap1DSDD::AliITSCorrMap1DSDD(Char_t *mapname): +AliITSCorrMapSDD(mapname) { // standard constructor ResetMap(); SetNBinsAnode(1); } //______________________________________________________________________ -AliITSMap1DSDD::AliITSMap1DSDD(Char_t *mapname, Int_t nbinsdr): -AliITSMapSDD(mapname) +AliITSCorrMap1DSDD::AliITSCorrMap1DSDD(Char_t *mapname, Int_t nbinsdr): +AliITSCorrMapSDD(mapname) { ResetMap(); SetNBinsAnode(1); SetNBinsDrift(nbinsdr); } //______________________________________________________________________ -void AliITSMap1DSDD::ResetMap(){ +void AliITSCorrMap1DSDD::ResetMap(){ // Sets contents to zero for(Int_t iDr=0;iDrGetNbinsX()!=fNDriftPts){ AliError(Form("N. of histo bins (%d) not matching N. of map cells (%d)\n",hmap->GetNbinsX(),fNDriftPts)); diff --git a/ITS/AliITSMap1DSDD.h b/ITS/AliITSCorrMap1DSDD.h similarity index 70% rename from ITS/AliITSMap1DSDD.h rename to ITS/AliITSCorrMap1DSDD.h index 8b3d2b1daaa..bb9b97b8d52 100644 --- a/ITS/AliITSMap1DSDD.h +++ b/ITS/AliITSCorrMap1DSDD.h @@ -1,9 +1,9 @@ -#ifndef ALIITSMAP1DSDD_H -#define ALIITSMAP1DSDD_H +#ifndef ALIITSCORRMAP1DSDD_H +#define ALIITSCORRMAP1DSDD_H /* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * * See cxx source for full Copyright notice */ -/* $Id: $ */ +/* $Id$ */ /////////////////////////////////////////////////////////////////// // // @@ -18,31 +18,31 @@ #include "AliLog.h" class TH1F; -class AliITSMap1DSDD : public AliITSMapSDD { +class AliITSCorrMap1DSDD : public AliITSCorrMapSDD { public: - AliITSMap1DSDD(); - AliITSMap1DSDD(Char_t *mapname); - AliITSMap1DSDD(Char_t *mapname, Int_t nbinsdr); - virtual ~AliITSMap1DSDD(){}; + AliITSCorrMap1DSDD(); + AliITSCorrMap1DSDD(Char_t *mapname); + AliITSCorrMap1DSDD(Char_t *mapname, Int_t nbinsdr); + virtual ~AliITSCorrMap1DSDD(){}; virtual void ResetMap(); virtual void Set1DMap(TH1F* hmap); virtual void SetCellContent(Int_t /*iAn*/, Int_t iTb, Float_t devMicron){ - if(CheckDriftBounds(iTb)) fMap[iTb]=(Short_t)(devMicron*10.+0.5); + if(CheckDriftBounds(iTb)) fCorrMap[iTb]=(Short_t)(devMicron*10.+0.5); } virtual Float_t GetCellContent(Int_t /*iAn*/, Int_t iTb) const { - if(CheckDriftBounds(iTb)) return (Float_t)fMap[iTb]/10.; + if(CheckDriftBounds(iTb)) return (Float_t)fCorrMap[iTb]/10.; else return 0.; } protected: - Short_t fMap[kMaxNDriftPts]; // map of deviations + Short_t fCorrMap[kMaxNDriftPts]; // map of deviations // stored as Short_t: integer // values from -32000 to 32000 // in the range -3.2 - 3.2 mm - ClassDef(AliITSMap1DSDD,1); + ClassDef(AliITSCorrMap1DSDD,1); }; #endif diff --git a/ITS/AliITSMap2DSDD.cxx b/ITS/AliITSCorrMap2DSDD.cxx similarity index 83% rename from ITS/AliITSMap2DSDD.cxx rename to ITS/AliITSCorrMap2DSDD.cxx index c0c5f19dcb4..1444fce1339 100644 --- a/ITS/AliITSMap2DSDD.cxx +++ b/ITS/AliITSCorrMap2DSDD.cxx @@ -13,7 +13,7 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* $Id: $ */ +/* $Id$ */ /////////////////////////////////////////////////////////////////// // // @@ -24,27 +24,27 @@ #include "TH1F.h" #include "TH2F.h" -#include "AliITSMapSDD.h" -#include "AliITSMap2DSDD.h" +#include "AliITSCorrMapSDD.h" +#include "AliITSCorrMap2DSDD.h" -ClassImp(AliITSMap2DSDD) +ClassImp(AliITSCorrMap2DSDD) //______________________________________________________________________ -AliITSMap2DSDD::AliITSMap2DSDD(): -AliITSMapSDD() +AliITSCorrMap2DSDD::AliITSCorrMap2DSDD(): +AliITSCorrMapSDD() { // default constructor ResetMap(); } //______________________________________________________________________ -AliITSMap2DSDD::AliITSMap2DSDD(Char_t *mapname): -AliITSMapSDD(mapname) +AliITSCorrMap2DSDD::AliITSCorrMap2DSDD(Char_t *mapname): +AliITSCorrMapSDD(mapname) { // standard constructor ResetMap(); } //______________________________________________________________________ -AliITSMap2DSDD::AliITSMap2DSDD(Char_t *mapname, Int_t nbinsan, Int_t nbinsdr): -AliITSMapSDD(mapname) +AliITSCorrMap2DSDD::AliITSCorrMap2DSDD(Char_t *mapname, Int_t nbinsan, Int_t nbinsdr): +AliITSCorrMapSDD(mapname) { // standard constructor ResetMap(); @@ -52,17 +52,17 @@ AliITSMapSDD(mapname) SetNBinsDrift(nbinsdr); } //______________________________________________________________________ -void AliITSMap2DSDD::ResetMap(){ +void AliITSCorrMap2DSDD::ResetMap(){ // Sets contents to zero for(Int_t iAn=0;iAnGetNbinsX()!=fNAnodePts || hmap->GetNbinsY()!=fNDriftPts){ diff --git a/ITS/AliITSMap2DSDD.h b/ITS/AliITSCorrMap2DSDD.h similarity index 70% rename from ITS/AliITSMap2DSDD.h rename to ITS/AliITSCorrMap2DSDD.h index 7f27945b9b5..d8fd97e89fe 100644 --- a/ITS/AliITSMap2DSDD.h +++ b/ITS/AliITSCorrMap2DSDD.h @@ -1,9 +1,9 @@ -#ifndef ALIITSMAP2DSDD_H -#define ALIITSMAP2DSDD_H +#ifndef ALIITSCORRMAP2DSDD_H +#define ALIITSCORRMAP2DSDD_H /* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * * See cxx source for full Copyright notice */ -/* $Id: $ */ +/* $Id$ */ /////////////////////////////////////////////////////////////////// // // @@ -19,31 +19,31 @@ class TH1F; class TH2F; -class AliITSMap2DSDD : public AliITSMapSDD { +class AliITSCorrMap2DSDD : public AliITSCorrMapSDD { public: - AliITSMap2DSDD(); - AliITSMap2DSDD(Char_t *mapname); - AliITSMap2DSDD(Char_t *mapname, Int_t nbinsan, Int_t nbinsdr); - virtual ~AliITSMap2DSDD(){}; + AliITSCorrMap2DSDD(); + AliITSCorrMap2DSDD(Char_t *mapname); + AliITSCorrMap2DSDD(Char_t *mapname, Int_t nbinsan, Int_t nbinsdr); + virtual ~AliITSCorrMap2DSDD(){}; virtual void ResetMap(); virtual void Set2DMap(TH2F* hmap); virtual void SetCellContent(Int_t iAn, Int_t iTb, Float_t devMicron){ - if(CheckAnodeBounds(iAn) && CheckDriftBounds(iTb)) fMap[iAn][iTb]=(Short_t)(devMicron*10.+0.5); + if(CheckAnodeBounds(iAn) && CheckDriftBounds(iTb)) fCorrMap[iAn][iTb]=(Short_t)(devMicron*10.+0.5); } virtual Float_t GetCellContent(Int_t iAn, Int_t iTb) const { - if(CheckAnodeBounds(iAn) && CheckDriftBounds(iTb)) return (Float_t)fMap[iAn][iTb]/10.; + if(CheckAnodeBounds(iAn) && CheckDriftBounds(iTb)) return (Float_t)fCorrMap[iAn][iTb]/10.; else return 0.; } protected: - Short_t fMap[kMaxNAnodePts][kMaxNDriftPts]; // map of deviations + Short_t fCorrMap[kMaxNAnodePts][kMaxNDriftPts]; // map of deviations // stored as Short_t: integer // values from -32000 to 32000 // in the range -3.2 - 3.2 mm - ClassDef(AliITSMap2DSDD,1); + ClassDef(AliITSCorrMap2DSDD,1); }; #endif diff --git a/ITS/AliITSCorrMapSDD.cxx b/ITS/AliITSCorrMapSDD.cxx new file mode 100644 index 00000000000..a648187340e --- /dev/null +++ b/ITS/AliITSCorrMapSDD.cxx @@ -0,0 +1,89 @@ +/************************************************************************** + * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +/* $Id$ */ + +/////////////////////////////////////////////////////////////////// +// // +// Implementation of the base class for SDD map corrections // +// Origin: F.Prino, Torino, prino@to.infn.it // +// // +/////////////////////////////////////////////////////////////////// + +#include "TH1F.h" +#include "TH2F.h" +#include "AliITSCorrMapSDD.h" + +const Int_t AliITSCorrMapSDD::fgkNAnodePtsDefault = 1; +const Int_t AliITSCorrMapSDD::fgkNDriftPtsDefault = 72; + +ClassImp(AliITSCorrMapSDD) +//______________________________________________________________________ +AliITSCorrMapSDD::AliITSCorrMapSDD(): +TNamed("defaultmap",""), +fNAnodePts(fgkNAnodePtsDefault), +fNDriftPts(fgkNDriftPtsDefault) +{ + // default constructor +} +//______________________________________________________________________ +AliITSCorrMapSDD::AliITSCorrMapSDD(Char_t *mapname): +TNamed(mapname,""), +fNAnodePts(fgkNAnodePtsDefault), +fNDriftPts(fgkNDriftPtsDefault) +{ + // standard constructor +} +//______________________________________________________________________ +Float_t AliITSCorrMapSDD::GetCorrection(Float_t z, Float_t x, AliITSsegmentationSDD *seg){ + // returns correction in cm starting from local coordinates on the module + 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)fNDriftPts; + Int_t bint = TMath::Abs((Int_t)(x/stept)); + if(bint==fNDriftPts) bint-=1; + if(bint>=fNDriftPts) AliError("Wrong bin number along drift direction!"); + return kMicronTocm*GetCellContent(bina,bint); +} +//______________________________________________________________________ +TH2F* AliITSCorrMapSDD::GetMapHisto() const{ + // Returns a TH2F histogram with map of residuals + Char_t hname[50]; + sprintf(hname,"h%s",GetName()); + TH2F* hmap=new TH2F(hname,"",fNAnodePts,-0.5,255.5,fNDriftPts,0.,35.); + for(Int_t iAn=0;iAnSetBinContent(iAn+1,iDr+1,GetCellContent(iAn,iDr)); + } + } + return hmap; +} +//______________________________________________________________________ +TH1F* AliITSCorrMapSDD::GetResidualDistr(Float_t dmin, Float_t dmax) const{ + // Returns a TH1F histogram with distribution of residual + Char_t hname[50]; + sprintf(hname,"hd%s",GetName()); + TH1F* hd=new TH1F(hname,"",100,dmin,dmax); + for(Int_t iAn=0;iAnFill(GetCellContent(iAn,iDr)); + } + } + return hd; +} diff --git a/ITS/AliITSCorrMapSDD.h b/ITS/AliITSCorrMapSDD.h new file mode 100644 index 00000000000..f00d13592d1 --- /dev/null +++ b/ITS/AliITSCorrMapSDD.h @@ -0,0 +1,90 @@ +#ifndef ALIITSCORRMAPSDD_H +#define ALIITSCORRMAPSDD_H +/* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +/* $Id$ */ + +/////////////////////////////////////////////////////////////////// +// // +// Mother class for SDD maps used to correct for // +// voltage divider shape and doping fluctuations // +// Origin: F.Prino, Torino, prino@to.infn.it // +// // +/////////////////////////////////////////////////////////////////// + +#include "AliITSsegmentationSDD.h" +#include +#include "AliLog.h" +class TH1F; +class TH2F; + +class AliITSCorrMapSDD : public TNamed { + + public: + AliITSCorrMapSDD(); + AliITSCorrMapSDD(Char_t *mapname); + virtual ~AliITSCorrMapSDD(){}; + + 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; + } + 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; + } + + virtual void Set1DMap(TH1F* /*hmap*/){ + AliError("Not implemented"); + } + virtual void Set2DMap(TH2F* /*hmap*/){ + AliError("Not implemented"); + } + + virtual void ResetMap(){ + AliError("Not implemented"); + } + virtual void SetCellContent(Int_t /*iAn*/, Int_t /*iTb*/, Float_t /*devMicron*/){ + AliError("Not implemented"); + } + virtual Float_t GetCellContent(Int_t /*iAn*/, Int_t /*iTb*/) const { + AliError("Not implemented"); + return -99999.; + } + + 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: + + 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(AliITSCorrMapSDD,1); +}; +#endif diff --git a/ITS/AliITSDetTypeRec.cxx b/ITS/AliITSDetTypeRec.cxx index f1a73794c82..7f36b4c4468 100644 --- a/ITS/AliITSDetTypeRec.cxx +++ b/ITS/AliITSDetTypeRec.cxx @@ -35,6 +35,7 @@ #include "AliITSDDLModuleMapSDD.h" #include "AliITSRecPoint.h" #include "AliITSCalibrationSDD.h" +#include "AliITSMapSDD.h" #include "AliITSHLTforSDD.h" #include "AliITSCalibrationSSD.h" #include "AliITSNoiseSSDv2.h" @@ -56,7 +57,7 @@ #include "AliITSLoader.h" class AliITSDriftSpeedArraySDD; -class AliITSMapSDD; +class AliITSCorrMapSDD; class AliITSRecoParam; const Int_t AliITSDetTypeRec::fgkNdettypes = 3; @@ -562,6 +563,13 @@ Bool_t AliITSDetTypeRec::GetCalibrationSDD(Bool_t cacheStatus) { AliITSCalibration* cal; Float_t avegain=0.; Float_t nGdAnodes=0; + Bool_t oldMapFormat=kFALSE; + TObject* objmap=(TObject*)mapT->At(0); + TString cname(objmap->ClassName()); + if(cname.CompareTo("AliITSMapSDD")==0){ + oldMapFormat=kTRUE; + AliInfo("SDD Maps converted to new format"); + } for(Int_t iddl=0; iddlGetModuleNumber(iddl,icar); @@ -576,15 +584,21 @@ Bool_t AliITSDetTypeRec::GetCalibrationSDD(Bool_t cacheStatus) { nGdAnodes++; } AliITSDriftSpeedArraySDD* arr0 = (AliITSDriftSpeedArraySDD*) drSp->At(i0); - // AliITSMapSDD* ma0 = (AliITSMapSDD*)mapAn->At(i0); - AliITSMapSDD* mt0 = (AliITSMapSDD*)mapT->At(i0); AliITSDriftSpeedArraySDD* arr1 = (AliITSDriftSpeedArraySDD*) drSp->At(i1); - // AliITSMapSDD* ma1 = (AliITSMapSDD*)mapAn->At(i1); - AliITSMapSDD* mt1 = (AliITSMapSDD*)mapT->At(i1); + + AliITSCorrMapSDD* mt0 = 0; + AliITSCorrMapSDD* mt1 = 0; + if(oldMapFormat){ + AliITSMapSDD* oldmap0=(AliITSMapSDD*)mapT->At(i0); + AliITSMapSDD* oldmap1=(AliITSMapSDD*)mapT->At(i1); + mt0=oldmap0->ConvertToNewFormat(); + mt1=oldmap1->ConvertToNewFormat(); + }else{ + mt0=(AliITSCorrMapSDD*)mapT->At(i0); + mt1=(AliITSCorrMapSDD*)mapT->At(i1); + } cal->SetDriftSpeed(0,arr0); cal->SetDriftSpeed(1,arr1); -// cal->SetMapA(0,ma0); -// cal->SetMapA(1,ma1); cal->SetMapT(0,mt0); cal->SetMapT(1,mt1); SetCalibrationModel(iMod, cal); diff --git a/ITS/AliITSDetTypeSim.cxx b/ITS/AliITSDetTypeSim.cxx index 798a72efbb2..57b662ac018 100644 --- a/ITS/AliITSDetTypeSim.cxx +++ b/ITS/AliITSDetTypeSim.cxx @@ -45,6 +45,7 @@ #include "AliITSCalibration.h" #include "AliITSCalibrationSDD.h" #include "AliITSMapSDD.h" +#include "AliITSCorrMapSDD.h" #include "AliITSDriftSpeedArraySDD.h" #include "AliITSDriftSpeedSDD.h" #include "AliITSHLTforSDD.h" @@ -620,6 +621,13 @@ if(!deadSPD || !noisySPD || !foEffSPD || !foNoiSPD fDDLMapSDD->SetDDLMap(ddlsdd); fIsHLTmodeC=hltsdd->IsHLTmodeC(); + Bool_t oldMapFormat=kFALSE; + TObject* objmap=(TObject*)mapT->At(0); + TString cname(objmap->ClassName()); + if(cname.CompareTo("AliITSMapSDD")==0){ + oldMapFormat=kTRUE; + AliInfo("SDD Maps converted to new format"); + } for (Int_t i=0; iAt(i0); -// AliITSMapSDD* ma0 = (AliITSMapSDD*)mapAn->At(i0); - AliITSMapSDD* mt0 = (AliITSMapSDD*)mapT->At(i0); AliITSDriftSpeedArraySDD* arr1 = (AliITSDriftSpeedArraySDD*) drSp->At(i1); - // AliITSMapSDD* ma1 = (AliITSMapSDD*)mapAn->At(i1); - AliITSMapSDD* mt1 = (AliITSMapSDD*)mapT->At(i1); + + AliITSCorrMapSDD* mt0 = 0; + AliITSCorrMapSDD* mt1 = 0; + if(oldMapFormat){ + AliITSMapSDD* oldmap0=(AliITSMapSDD*)mapT->At(i0); + AliITSMapSDD* oldmap1=(AliITSMapSDD*)mapT->At(i1); + mt0=oldmap0->ConvertToNewFormat(); + mt1=oldmap1->ConvertToNewFormat(); + }else{ + mt0=(AliITSCorrMapSDD*)mapT->At(i0); + mt1=(AliITSCorrMapSDD*)mapT->At(i1); + } cal->SetDriftSpeed(0,arr0); cal->SetDriftSpeed(1,arr1); -// cal->SetMapA(0,ma0); -// cal->SetMapA(1,ma1); cal->SetMapT(0,mt0); cal->SetMapT(1,mt1); SetCalibrationModel(iMod, cal); diff --git a/ITS/AliITSMapSDD.cxx b/ITS/AliITSMapSDD.cxx index 6b730e343ab..47a6c938886 100644 --- a/ITS/AliITSMapSDD.cxx +++ b/ITS/AliITSMapSDD.cxx @@ -25,26 +25,39 @@ #include "TH1F.h" #include "TH2F.h" #include "AliITSMapSDD.h" - -const Int_t AliITSMapSDD::fgkNAnodePtsDefault = 1; -const Int_t AliITSMapSDD::fgkNDriftPtsDefault = 72; +#include "AliITSCorrMap1DSDD.h" ClassImp(AliITSMapSDD) //______________________________________________________________________ -AliITSMapSDD::AliITSMapSDD(): -TNamed("defaultmap",""), -fNAnodePts(fgkNAnodePtsDefault), -fNDriftPts(fgkNDriftPtsDefault) +AliITSMapSDD::AliITSMapSDD():TNamed("defaultmap","") { // default constructor + for(Int_t iAn=0;iAnGetBinContent(iAn+1,iDr+1)); + } + } } //______________________________________________________________________ Float_t AliITSMapSDD::GetCorrection(Float_t z, Float_t x, AliITSsegmentationSDD *seg){ @@ -55,10 +68,10 @@ Float_t AliITSMapSDD::GetCorrection(Float_t z, Float_t x, AliITSsegmentationSDD 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)fNDriftPts; + Float_t stept = seg->Dx()*kMicronTocm/(Float_t)fgkNDrifPts; Int_t bint = TMath::Abs((Int_t)(x/stept)); - if(bint==fNDriftPts) bint-=1; - if(bint>=fNDriftPts) AliError("Wrong bin number along drift direction!"); + if(bint==fgkNDrifPts) bint-=1; + if(bint>=fgkNDrifPts) AliError("Wrong bin number along drift direction!"); return kMicronTocm*GetCellContent(bina,bint); } //______________________________________________________________________ @@ -66,9 +79,9 @@ TH2F* AliITSMapSDD::GetMapHisto() const{ // Returns a TH2F histogram with map of residuals Char_t hname[50]; sprintf(hname,"h%s",GetName()); - TH2F* hmap=new TH2F(hname,"",fNAnodePts,-0.5,255.5,fNDriftPts,0.,35.); - for(Int_t iAn=0;iAnSetBinContent(iAn+1,iDr+1,GetCellContent(iAn,iDr)); } } @@ -80,10 +93,21 @@ TH1F* AliITSMapSDD::GetResidualDistr(Float_t dmin, Float_t dmax) const{ Char_t hname[50]; sprintf(hname,"hd%s",GetName()); TH1F* hd=new TH1F(hname,"",100,dmin,dmax); - for(Int_t iAn=0;iAnFill(GetCellContent(iAn,iDr)); } } return hd; } +//______________________________________________________________________ +AliITSCorrMapSDD* AliITSMapSDD::ConvertToNewFormat() const{ + // convert correction map to new format + Char_t* name=(Char_t*)GetName(); + AliITSCorrMapSDD* newmap=new AliITSCorrMap1DSDD(name,fgkNDrifPts); + for(Int_t i=0; iSetCellContent(0,i,GetCellContent(0,i)); + } + return newmap; +} + diff --git a/ITS/AliITSMapSDD.h b/ITS/AliITSMapSDD.h index b8b31c14dc8..5d12b51fe88 100644 --- a/ITS/AliITSMapSDD.h +++ b/ITS/AliITSMapSDD.h @@ -7,13 +7,14 @@ /////////////////////////////////////////////////////////////////// // // -// Mother class for SDD maps used to correct for // +// Class for SDD maps used to correct for // // voltage divider shape and doping fluctuations // // Origin: F.Prino, Torino, prino@to.infn.it // // // /////////////////////////////////////////////////////////////////// #include "AliITSsegmentationSDD.h" +#include "AliITSCorrMapSDD.h" #include #include "AliLog.h" class TH1F; @@ -26,58 +27,38 @@ class AliITSMapSDD : public TNamed { AliITSMapSDD(Char_t *mapname); virtual ~AliITSMapSDD(){}; - 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)); + 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)); return kFALSE; } return kTRUE; } - 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; + void SetCellContent(Int_t iAn, Int_t iTb, Float_t devMicron){ + if(CheckBounds(iAn,iTb)) fMap[iAn][iTb]=(Short_t)(devMicron*10.+0.5); } - virtual void Set1DMap(TH1F* /*hmap*/){ - AliError("Not implemented"); - } - virtual void Set2DMap(TH2F* /*hmap*/){ - AliError("Not implemented"); + 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 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); + static Int_t GetNBinsAnode() {return fgkNAnodPts;} + static Int_t GetNBinsDrift() {return fgkNDrifPts;} + AliITSCorrMapSDD* ConvertToNewFormat() const; + TH2F* GetMapHisto() const; TH1F* GetResidualDistr(Float_t dmin=-300., Float_t dmax=300.) const; - protected: - 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 + 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,3); + ClassDef(AliITSMapSDD,2); }; #endif diff --git a/ITS/CMake_libITSbase.txt b/ITS/CMake_libITSbase.txt index 9853d12b4cd..2c0d79f6162 100644 --- a/ITS/CMake_libITSbase.txt +++ b/ITS/CMake_libITSbase.txt @@ -34,8 +34,9 @@ set(SRCS AliITSCalibrationSSD.cxx AliITSChannelStatus.cxx AliITSMapSDD.cxx - AliITSMap1DSDD.cxx - AliITSMap2DSDD.cxx + AliITSCorrMapSDD.cxx + AliITSCorrMap1DSDD.cxx + AliITSCorrMap2DSDD.cxx AliITSHLTforSDD.cxx AliITSDriftSpeedSDD.cxx AliITSDDLModuleMapSDD.cxx diff --git a/ITS/ITSbaseLinkDef.h b/ITS/ITSbaseLinkDef.h index 4ed30c2b995..f585bce87ef 100644 --- a/ITS/ITSbaseLinkDef.h +++ b/ITS/ITSbaseLinkDef.h @@ -55,8 +55,9 @@ #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 AliITSCorrMapSDD+; +#pragma link C++ class AliITSCorrMap1DSDD+; +#pragma link C++ class AliITSCorrMap2DSDD+; #pragma link C++ class AliITSDriftSpeedSDD+; #pragma link C++ class AliITSDriftSpeedArraySDD+; #pragma link C++ class AliITSDDLModuleMapSDD+; diff --git a/ITS/StoreMapsSDD.C b/ITS/StoreMapsSDD.C index dcfbca56cd4..278021457bf 100644 --- a/ITS/StoreMapsSDD.C +++ b/ITS/StoreMapsSDD.C @@ -1,7 +1,7 @@ #if !defined(__CINT__) || defined(__MAKECINT__) #include "AliCDBManager.h" #include "AliITSCalibrationSDD.h" -#include "AliITSMapSDD.h" +#include "AliITSCorrMapSDD.h" #include "AliCDBMetaData.h" #include "AliCDBStorage.h" #include "AliCDBId.h" @@ -13,10 +13,9 @@ void StoreMapsSDD(Int_t firstRun=0,Int_t lastRun=9999999 ){ /////////////////////////////////////////////////////////////////////// - // Macro to generate and store the residual maps for SDD // + // Macro to generate and store the correction maps for SDD // // Generates: // - // 1 file with 520 AliITSMapSDD anode maps (MapsAnodeSDD) // - // 1 file with 520 AliITSMapSDD drift coordinate maps (MapsTimeSDD) // + // 1 file with 520 AliITSCorrMapSDD drift maps (MapsTimeSDD) // /////////////////////////////////////////////////////////////////////// if(!AliCDBManager::Instance()->IsDefaultStorageSet()) { @@ -38,8 +37,8 @@ void StoreMapsSDD(Int_t firstRun=0,Int_t lastRun=9999999 ){ TRandom3 *gran = new TRandom3(); - AliITSMapSDD* mapTime0; - AliITSMapSDD* mapTime1; + AliITSCorrMapSDD* mapTime0; + AliITSCorrMapSDD* mapTime1; for(Int_t mod=0;mod<260;mod++){ // maps Char_t name[20]; @@ -48,14 +47,14 @@ void StoreMapsSDD(Int_t firstRun=0,Int_t lastRun=9999999 ){ if(mod==10 || mod==240){ nbinsan=256; sprintf(name,"DriftTimeMap_%d_%d\n",mod,0); - mapTime0 = new AliITSMap2DSDD(name,nbinsan,72); + mapTime0 = new AliITSCorrMap2DSDD(name,nbinsan,72); sprintf(name,"DriftTimeMap_%d_%d\n",mod,1); - mapTime1 = new AliITSMap2DSDD(name,nbinsan,72); + mapTime1 = new AliITSCorrMap2DSDD(name,nbinsan,72); }else{ sprintf(name,"DriftTimeMap_%d_%d\n",mod,0); - mapTime0 = new AliITSMap1DSDD(name,72); + mapTime0 = new AliITSCorrMap1DSDD(name,72); sprintf(name,"DriftTimeMap_%d_%d\n",mod,1); - mapTime1 = new AliITSMap1DSDD(name,72); + mapTime1 = new AliITSCorrMap1DSDD(name,72); } for(Int_t nan = 0;nan< nbinsan;nan++){ for(Int_t nt = 0;nt<36*2;nt++){ diff --git a/ITS/libITSbase.pkg b/ITS/libITSbase.pkg index 67b69ab38b5..78b534d9902 100644 --- a/ITS/libITSbase.pkg +++ b/ITS/libITSbase.pkg @@ -33,8 +33,9 @@ SRCS = AliITSgeom.cxx \ AliITSCalibrationSSD.cxx \ AliITSChannelStatus.cxx \ AliITSMapSDD.cxx \ - AliITSMap1DSDD.cxx \ - AliITSMap2DSDD.cxx \ + AliITSCorrMapSDD.cxx \ + AliITSCorrMap1DSDD.cxx \ + AliITSCorrMap2DSDD.cxx \ AliITSHLTforSDD.cxx \ AliITSDriftSpeedSDD.cxx \ AliITSDDLModuleMapSDD.cxx \ -- 2.43.0