]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Last set of modifications for reducing size of SDD correction maps in OCDB. Flag...
authorprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 6 Apr 2009 13:53:40 +0000 (13:53 +0000)
committerprino <prino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 6 Apr 2009 13:53:40 +0000 (13:53 +0000)
ITS/AliITSCalibrationSDD.cxx
ITS/AliITSCalibrationSDD.h
ITS/AliITSClusterFinderV2SDD.cxx
ITS/AliITSMapSDD.cxx
ITS/AliITSMapSDD.h
ITS/AliITSPreprocessorSDD.cxx
ITS/AliITSRecoParam.cxx
ITS/AliITSRecoParam.h
ITS/ITSbaseLinkDef.h
ITS/StoreMapsSDD.C
ITS/libITSbase.pkg

index 1cf831f0d8a1519b5b24ec439cae1df2435b0e50..a9728dc4d3dc81419826e0bcfd21965b6c9fcc15 100644 (file)
@@ -43,8 +43,6 @@ fDeadChips(0),
 fDeadChannels(0),
 fIsBad(kFALSE),
 fBadChannels(),
-fUseACorrMap(0),
-fUseTCorrMap(0),
 fMapAW0(0),
 fMapAW1(0),
 fMapTW0(0),
@@ -70,7 +68,6 @@ fDrSpeed1(0)
     }
   }
   SetTemperature(fgkTemperatureDefault);
-  SetUseCorrectionMaps(kTRUE,kTRUE);
   SetDataType();
  }
 //______________________________________________________________________
@@ -82,8 +79,6 @@ fDeadChips(0),
 fDeadChannels(0),
 fIsBad(kFALSE),
 fBadChannels(),
-fUseACorrMap(0),
-fUseTCorrMap(0),
 fMapAW0(0),
 fMapAW1(0),
 fMapTW0(0),
@@ -110,7 +105,6 @@ fDrSpeed1(0)
   }
 
   SetTemperature(fgkTemperatureDefault);
-  SetUseCorrectionMaps(kTRUE,kTRUE);
   SetDataType(dataType);
  }
 //_____________________________________________________________________
@@ -146,15 +140,11 @@ void AliITSCalibrationSDD::GetCorrections(Float_t z, Float_t x, Float_t &devz, F
   //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;
 }
 //______________________________________________________________________
index 61facfbc53f6d00e934f13ef1fc40fd0cf3a2742..1d92bd9e7e74cb07cbe71f7a7241457297fbbaa0 100644 (file)
@@ -108,10 +108,6 @@ class AliITSCalibrationSDD : public AliITSCalibration {
       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);
@@ -181,9 +177,6 @@ class AliITSCalibrationSDD : public AliITSCalibration {
     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
@@ -196,7 +189,7 @@ class AliITSCalibrationSDD : public AliITSCalibration {
     AliITSCalibrationSDD& operator=(const AliITSCalibrationSDD & /* source */); // ass. op.
 
 
-    ClassDef(AliITSCalibrationSDD,13
+    ClassDef(AliITSCalibrationSDD,17
     
     };
 #endif
index 4e05236a4ce7db39441bef8e57de4e2871514411..29eeb00a76c744645cf0abe85619ef24d8a3a3a9 100644 (file)
@@ -238,10 +238,12 @@ FindClustersSDD(AliBin* bins[2], Int_t nMaxBin, Int_t nzBins,
        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);
index 661487476f954d5ba1806a14477b924993c3eb60..6b730e343abada699d62c98cef562fb7f48c8897 100644 (file)
 #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){
@@ -67,10 +55,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)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);
 }
 //______________________________________________________________________
@@ -78,9 +66,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,"",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));
     }
   }
@@ -92,8 +80,8 @@ 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;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));
     }
   }
index e40198c2910bca4ffbaa05bfbe67e4ea54b2ed19..b8b31c14dc8f724b51e54344160a29e4a074ba51 100644 (file)
@@ -7,7 +7,7 @@
 
 ///////////////////////////////////////////////////////////////////
 //                                                               //
-// 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                     //
 //                                                               //
@@ -26,37 +26,58 @@ class AliITSMapSDD : public TNamed {
   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
index 569747bae5c68c5f88df67f1641d9e2f04e9241c..9ca282499e46897870d651e4244b83f41ad7cb4b 100644 (file)
@@ -150,7 +150,6 @@ UInt_t AliITSPreprocessorSDD::ProcessPulser(AliITSDDLModuleMapSDD* ddlmap){
       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];
index 6bb0fb3928f03ff492fcfa3956caca3a435fafdf..481caf8df636783c1315cbcfe990ab8f74257e0c 100644 (file)
@@ -151,6 +151,7 @@ fStoreLikeSignV0s(kFALSE),
 fUseUnfoldingInClusterFinderSPD(kFALSE),
 fUseUnfoldingInClusterFinderSDD(kTRUE),
 fUseUnfoldingInClusterFinderSSD(kTRUE),
+fUseSDDCorrectionMaps(kTRUE),
 fUseSDDClusterSizeSelection(kFALSE),
 fMinClusterChargeSDD(0.),
 fUseChargeMatchingInClusterFinderSSD(kTRUE),
@@ -489,6 +490,7 @@ AliITSRecoParam *AliITSRecoParam::GetCosmicTestParam()
   param->fSigmaZDeadZoneHit2 = 0.001/12.;
   param->fXPassDeadZoneHits = 0.018;
 
+  param->fUseSDDCorrectionMaps = kFALSE;
   
   return param;
 }
index e2920377036ca39e788ccbe95d372f05f99dbdad..1d120d3c7f2234a49ad0d8332872bd085e178de1 100644 (file)
@@ -293,6 +293,8 @@ class AliITSRecoParam : public AliDetectorRecoParam
   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;}
@@ -497,6 +499,7 @@ class AliITSRecoParam : public AliDetectorRecoParam
   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
 
@@ -518,7 +521,7 @@ class AliITSRecoParam : public AliDetectorRecoParam
   Bool_t  fSPDRemoveDeadFlag;   // Flag saying whether dead pixels should be removed
 
   
-  ClassDef(AliITSRecoParam,18) // ITS reco parameters
+  ClassDef(AliITSRecoParam,19) // ITS reco parameters
 };
 
 #endif
index 62cbfcf8e49bfbf119f546ce598c024b40ae303e..ce5430fa959f3fc6cb400d83eaf3f8878d31318a 100644 (file)
@@ -55,6 +55,8 @@
 #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+;
index fc685d330453dceea274c3ca011396c704e02cf0..dcfbca56cd45896f6a37a4b0a9044415c61ae537 100644 (file)
@@ -24,59 +24,50 @@ void StoreMapsSDD(Int_t firstRun=0,Int_t lastRun=9999999 ){
   }
   
 
-  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);
 
 }
index 32305fefe8c8f9a4e0300c4fdc4d8303bd2b10c5..508063986ada01dd48a9963cf26781f9be58d953 100644 (file)
@@ -33,6 +33,8 @@ SRCS =        AliITSgeom.cxx \
                AliITSCalibrationSSD.cxx \
                 AliITSChannelStatus.cxx \
                AliITSMapSDD.cxx \
+               AliITSMap1DSDD.cxx \
+               AliITSMap2DSDD.cxx \
                AliITSHLTforSDD.cxx \
                AliITSDriftSpeedSDD.cxx \
                AliITSDDLModuleMapSDD.cxx \