]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSDetTypeRec.cxx
Removed obsolete and no longer maintained cluster finders
[u/mrichter/AliRoot.git] / ITS / AliITSDetTypeRec.cxx
index b99914658a47efb38a904d600f3d30ec1e41dab9..d0b93b7ca49af01e1997c879cdaa446596d4f8a5 100644 (file)
 #include "AliCDBStorage.h"
 #include "AliCDBEntry.h"
 #include "AliITSClusterFinder.h"
-#include "AliITSClusterFinderV2.h"
 #include "AliITSClusterFinderV2SPD.h"
 #include "AliITSClusterFinderV2SDD.h"
 #include "AliITSClusterFinderV2SSD.h"
-#include "AliITSClusterFinderSPD.h"
-#include "AliITSClusterFinderSDD.h"
-#include "AliITSClusterFinderSSD.h"
 #include "AliITSDetTypeRec.h"
 #include "AliITSgeom.h"
 #include "AliITSRawCluster.h"
 #include "AliITSRawClusterSDD.h"
 #include "AliITSRawClusterSSD.h"
 #include "AliITSRecPoint.h"
-#include "AliITSCalibrationSPD.h"
+#include "AliITSReconstructor.h"
+#include "AliITSRecoParam.h"
 #include "AliITSCalibrationSDD.h"
 #include "AliITSMapSDD.h"
 #include "AliITSDriftSpeedArraySDD.h"
+#include "AliITSDriftSpeedSDD.h"
+#include "AliITSHLTforSDD.h"
 #include "AliITSCalibrationSSD.h"
+#include "AliITSNoiseSSDv2.h"
+#include "AliITSGainSSDv2.h"
+#include "AliITSBadChannelsSSDv2.h"
 #include "AliITSNoiseSSD.h"
 #include "AliITSGainSSD.h"
 #include "AliITSBadChannelsSSD.h"
-#include "AliITSPedestalSSD.h"
 #include "AliITSsegmentationSPD.h"
 #include "AliITSsegmentationSDD.h"
 #include "AliITSsegmentationSSD.h"
@@ -72,17 +73,24 @@ fITSgeom(0),
 fReconstruction(0),
 fSegmentation(0),
 fCalibration(0),
+fSSDCalibration(0),
+fSPDDead(0),
 fPreProcess(0),
 fPostProcess(0),
 fDigits(0),
 fDDLMapSDD(0),
+fRespSDD(0),
+fAveGainSDD(0),
+fIsHLTmodeC(0),
 fNdtype(0),
 fCtype(0),
 fNctype(0),
 fRecPoints(0),
 fNRecPoints(0),
 fSelectedVertexer(),
-fFirstcall(kTRUE){
+fFirstcall(kTRUE),
+fLoadOnlySPDCalib(0),
+fFastOrFiredMap(1200){
     // Standard Constructor
     // Inputs:
     //    none.
@@ -98,7 +106,7 @@ fFirstcall(kTRUE){
     fDigClassName[i]=0;
     fRecPointClassName[i]=0;
   }
-  fDDLMapSDD=new AliITSDDLModuleMapSDD();
+  fSSDCalibration=new AliITSCalibrationSSD();
   fNdtype = new Int_t[fgkNdettypes];
   fCtype = new TObjArray(fgkNdettypes);
   fNctype = new Int_t[fgkNdettypes];
@@ -124,18 +132,24 @@ fITSgeom(rec.fITSgeom),
 fReconstruction(rec.fReconstruction),
 fSegmentation(rec.fSegmentation),
 fCalibration(rec.fCalibration),
+fSSDCalibration(rec.fSSDCalibration),
+fSPDDead(rec.fSPDDead),
 fPreProcess(rec.fPreProcess),
 fPostProcess(rec.fPostProcess),
 fDigits(rec.fDigits),
 fDDLMapSDD(rec.fDDLMapSDD),
+fRespSDD(rec.fRespSDD),
+fAveGainSDD(rec.fAveGainSDD),
+fIsHLTmodeC(rec.fIsHLTmodeC),
 fNdtype(rec.fNdtype),
 fCtype(rec.fCtype),
 fNctype(rec.fNctype),
 fRecPoints(rec.fRecPoints),
 fNRecPoints(rec.fNRecPoints),
 fSelectedVertexer(rec.fSelectedVertexer),
-fFirstcall(rec.fFirstcall)
-{
+fFirstcall(rec.fFirstcall),
+fLoadOnlySPDCalib(rec.fLoadOnlySPDCalib),
+fFastOrFiredMap(rec.fFastOrFiredMap){
 
   // Copy constructor. 
 
@@ -165,20 +179,23 @@ AliITSDetTypeRec::~AliITSDetTypeRec(){
   }
   if(fCalibration){
     if(!(AliCDBManager::Instance()->GetCacheFlag())) {
-      AliITSresponse* rspd = ((AliITSCalibration*)fCalibration->At(GetITSgeom()->GetStartSPD()))->GetResponse();    
-      AliITSresponse* rsdd = ((AliITSCalibration*)fCalibration->At(GetITSgeom()->GetStartSDD()))->GetResponse();
-      AliITSresponse* rssd = ((AliITSCalibration*)fCalibration->At(GetITSgeom()->GetStartSSD()))->GetResponse();
-      if(rspd) delete rspd;
-      if(rsdd) delete rsdd;
-      if(rssd) delete rssd;
       fCalibration->Delete();
       delete fCalibration;
       fCalibration = 0;
-    }
+      if(fRespSDD) delete fRespSDD;
+      if(fDDLMapSDD) delete fDDLMapSDD;
+   }
   }
+  if(fSSDCalibration) delete fSSDCalibration;
+   if(fSPDDead){
+    if(!(AliCDBManager::Instance()->GetCacheFlag())) {
+      fSPDDead->Delete();
+      delete fSPDDead;
+      fSPDDead = 0;
+    }
+  }  
   if(fPreProcess) delete fPreProcess;
   if(fPostProcess) delete fPostProcess;
-  if(fDDLMapSDD) delete fDDLMapSDD;
   if(fDigits){
     fDigits->Delete();
     delete fDigits;
@@ -260,6 +277,20 @@ void AliITSDetTypeRec::SetCalibrationModel(Int_t iMod, AliITSCalibration *cal){
 
 }
 //_______________________________________________________________________
+void AliITSDetTypeRec::SetSPDDeadModel(Int_t iMod, AliITSCalibration *cal){
+
+  //Set dead pixel info for the SPD module iMod
+  if (fSPDDead==0) {
+    fSPDDead = new TObjArray(fgkDefaultNModulesSPD);
+    fSPDDead->SetOwner(kTRUE);
+    fSPDDead->Clear();
+  }
+
+  if (fSPDDead->At(iMod) != 0)
+    delete (AliITSCalibration*) fSPDDead->At(iMod);
+  fSPDDead->AddAt(cal,iMod);
+}
+//_______________________________________________________________________
 AliITSCalibration* AliITSDetTypeRec::GetCalibrationModel(Int_t iMod){
   
   //Get calibration model for module type
@@ -269,7 +300,26 @@ AliITSCalibration* AliITSDetTypeRec::GetCalibrationModel(Int_t iMod){
     return 0; 
   }  
 
-  return (AliITSCalibration*)fCalibration->At(iMod);
+  if(iMod<fgkDefaultNModulesSPD+fgkDefaultNModulesSDD){
+    return (AliITSCalibration*)fCalibration->At(iMod);
+  }else{
+    Int_t i=iMod-(fgkDefaultNModulesSPD+fgkDefaultNModulesSDD);
+    fSSDCalibration->SetModule(i);
+    return (AliITSCalibration*)fSSDCalibration;
+  }
+
+}
+//_______________________________________________________________________
+AliITSCalibration* AliITSDetTypeRec::GetSPDDeadModel(Int_t iMod){
+  
+  //Get SPD dead for module iMod
+  
+  if(fSPDDead==0) {
+    AliWarning("fSPDDead is 0!");
+    return 0; 
+  }  
+
+  return (AliITSCalibration*)fSPDDead->At(iMod);
 }
 
 //______________________________________________________________________
@@ -351,27 +401,26 @@ void AliITSDetTypeRec::SetDefaults(){
       SetClusterClassName(dettype,"AliITSRawClusterSPD");
 
     }
-    if(dettype==1){
-      AliITSCalibrationSDD* res=(AliITSCalibrationSDD*) GetCalibrationModel(GetITSgeom()->GetStartSDD()); 
-      seg = new AliITSsegmentationSDD();
-      SetSegmentationModel(dettype,seg);
-      const char *kopt = ((AliITSresponseSDD*)res->GetResponse())->ZeroSuppOption();
-      if((!strstr(kopt,"2D"))&&(!strstr(kopt,"1D"))) SetDigitClassName(dettype,"AliITSdigit");
-      else SetDigitClassName(dettype,"AliITSdigitSDD");
-      SetClusterClassName(dettype,"AliITSRawClusterSDD");
-
+    if(fLoadOnlySPDCalib==kFALSE){
+      if(dettype==1){
+       seg = new AliITSsegmentationSDD();
+       AliITSCalibrationSDD* cal=(AliITSCalibrationSDD*)GetCalibrationModel(fgkDefaultNModulesSPD+1);
+       if(cal->IsAMAt20MHz()){ 
+         seg->SetPadSize(seg->Dpz(0),20.);
+         seg->SetNPads(seg->Npz()/2,128);
+       }
+       SetSegmentationModel(dettype,seg);
+       SetDigitClassName(dettype,"AliITSdigitSDD");
+       SetClusterClassName(dettype,"AliITSRawClusterSDD");
+      }
     }
     if(dettype==2){
       AliITSsegmentationSSD* seg2 = new AliITSsegmentationSSD();
-      seg2->SetAngles(0.0075,0.0275); // strip angels rad P and N side.
-      seg2->SetAnglesLay5(0.0075,0.0275); // strip angels rad P and N side.
-      seg2->SetAnglesLay6(0.0275,0.0075); // strip angels rad P and N side.
       SetSegmentationModel(dettype,seg2);
       SetDigitClassName(dettype,"AliITSdigitSSD");
       SetClusterClassName(dettype,"AliITSRawClusterSSD");
     }
   }
-  
 }
 //______________________________________________________________________
 Bool_t AliITSDetTypeRec::GetCalibration() {
@@ -380,8 +429,7 @@ Bool_t AliITSDetTypeRec::GetCalibration() {
   if(!fFirstcall){
     AliITSCalibration* cal = GetCalibrationModel(0);
     if(cal)return kTRUE;
-  }
-  else {
+  }else {
     fFirstcall = kFALSE;
   }
 
@@ -394,43 +442,81 @@ Bool_t AliITSDetTypeRec::GetCalibration() {
     fCalibration->SetOwner(!cacheStatus);
     fCalibration->Clear();
   }
+    
+  Bool_t retCode=GetCalibrationSPD(cacheStatus);
+  if(retCode==kFALSE) return kFALSE;
+
+  if(fLoadOnlySPDCalib==kFALSE){
+    retCode=GetCalibrationSDD(cacheStatus);
+    if(retCode==kFALSE) return kFALSE;
+    retCode=GetCalibrationSSD(cacheStatus);
+    if(retCode==kFALSE) return kFALSE;
+  }
 
-  AliCDBEntry *entrySPD = AliCDBManager::Instance()->Get("ITS/Calib/SPDDead");
-  AliCDBEntry *entrySPDn = AliCDBManager::Instance()->Get("ITS/Calib/SPDNoisy");
-  AliCDBEntry *entrySDD = AliCDBManager::Instance()->Get("ITS/Calib/CalibSDD");
+  AliInfo(Form("%i SPD, %i SDD and %i SSD in calibration database",
+              fNMod[0], fNMod[1], fNMod[2]));
+  return kTRUE;
+}
+//______________________________________________________________________
+Bool_t AliITSDetTypeRec::GetCalibrationSPD(Bool_t cacheStatus) {
+  // Get SPD calibration objects from OCDB
+  // dead pixel are not used for local reconstruction
+
+  AliCDBEntry *entrySPD = AliCDBManager::Instance()->Get("ITS/Calib/SPDNoisy");
+  AliCDBEntry *deadSPD = AliCDBManager::Instance()->Get("ITS/Calib/SPDDead");
+  if(!entrySPD || !deadSPD ){
+    AliFatal("SPD Calibration object retrieval failed! ");
+    return kFALSE;
+  }    
+
+  TObjArray *calSPD = (TObjArray *)entrySPD->GetObject();
+  if(!cacheStatus)entrySPD->SetObject(NULL);
+  entrySPD->SetOwner(kTRUE);
  
- //  AliCDBEntry *entrySSD = AliCDBManager::Instance()->Get("ITS/Calib/CalibSSD");
-    AliCDBEntry *entryNoiseSSD = AliCDBManager::Instance()->Get("ITS/Calib/NoiseSSD");
-    AliCDBEntry *entryPedestalSSD = AliCDBManager::Instance()->Get("ITS/Calib/PedestalSSD");
-    AliCDBEntry *entryGainSSD = AliCDBManager::Instance()->Get("ITS/Calib/GainSSD");
-    AliCDBEntry *entryBadChannelsSSD = AliCDBManager::Instance()->Get("ITS/Calib/BadChannelsSSD");
+  TObjArray *caldeadSPD = (TObjArray *)deadSPD->GetObject();
+  if(!cacheStatus)deadSPD->SetObject(NULL);
+  deadSPD->SetOwner(kTRUE);
+
+  if(!cacheStatus){
+    delete entrySPD;
+    delete deadSPD;
+  }
+  if ((!calSPD) || (!caldeadSPD)){ 
+    AliWarning("Can not get SPD calibration from calibration database !");
+    return kFALSE;
+  }
 
-  AliCDBEntry *entry2SPD = AliCDBManager::Instance()->Get("ITS/Calib/RespSPD");
+  fNMod[0] = calSPD->GetEntries();
+
+  AliITSCalibration* cal;
+  for (Int_t i=0; i<fNMod[0]; i++) {
+    cal = (AliITSCalibration*) calSPD->At(i);
+    SetCalibrationModel(i, cal);
+    cal = (AliITSCalibration*) caldeadSPD->At(i);
+    SetSPDDeadModel(i, cal);
+  }
+
+  return kTRUE;
+}
+
+//______________________________________________________________________
+Bool_t AliITSDetTypeRec::GetCalibrationSDD(Bool_t cacheStatus) {
+  // Get SDD calibration objects from OCDB
+
+  AliCDBEntry *entrySDD = AliCDBManager::Instance()->Get("ITS/Calib/CalibSDD");
   AliCDBEntry *entry2SDD = AliCDBManager::Instance()->Get("ITS/Calib/RespSDD");
-  AliCDBEntry *entry2SSD = AliCDBManager::Instance()->Get("ITS/Calib/RespSSD");
   AliCDBEntry *drSpSDD = AliCDBManager::Instance()->Get("ITS/Calib/DriftSpeedSDD");
   AliCDBEntry *ddlMapSDD = AliCDBManager::Instance()->Get("ITS/Calib/DDLMapSDD");
-  AliCDBEntry *mapASDD = AliCDBManager::Instance()->Get("ITS/Calib/MapsAnodeSDD");
+  AliCDBEntry *hltforSDD = AliCDBManager::Instance()->Get("ITS/Calib/HLTforSDD");
+  //   AliCDBEntry *mapASDD = AliCDBManager::Instance()->Get("ITS/Calib/MapsAnodeSDD");
   AliCDBEntry *mapTSDD = AliCDBManager::Instance()->Get("ITS/Calib/MapsTimeSDD");
 
-  if(!entrySPD || !entrySPDn || !entrySDD || !entryNoiseSSD || !entryGainSSD || 
-     !entryPedestalSSD || !entryBadChannelsSSD || 
-     !entry2SPD || !entry2SDD || !entry2SSD || !drSpSDD || !ddlMapSDD || !mapASDD || !mapTSDD){
-    AliFatal("Calibration object retrieval failed! ");
+  if(!entrySDD || !entry2SDD || !drSpSDD || !ddlMapSDD || !hltforSDD || !mapTSDD ){
+    AliFatal("SDD Calibration object retrieval failed! ");
     return kFALSE;
   }    
 
-  TObjArray *calSPD = (TObjArray *)entrySPD->GetObject();
-  if(!cacheStatus)entrySPD->SetObject(NULL);
-  entrySPD->SetOwner(kTRUE);
 
-  TObjArray *calSPDn = (TObjArray *)entrySPDn->GetObject();
-  if(!cacheStatus)entrySPDn->SetObject(NULL);
-  entrySPDn->SetOwner(kTRUE);
-  AliITSresponseSPD *pSPD = (AliITSresponseSPD*)entry2SPD->GetObject();
-  if(!cacheStatus)entry2SPD->SetObject(NULL);
-  entry2SPD->SetOwner(kTRUE);
     
   TObjArray *calSDD = (TObjArray *)entrySDD->GetObject();
   if(!cacheStatus)entrySDD->SetObject(NULL);
@@ -448,171 +534,145 @@ Bool_t AliITSDetTypeRec::GetCalibration() {
   if(!cacheStatus)ddlMapSDD->SetObject(NULL);
   ddlMapSDD->SetOwner(kTRUE);
 
-  TObjArray *mapAn = (TObjArray *)mapASDD->GetObject();
-  if(!cacheStatus)mapASDD->SetObject(NULL);
-  mapASDD->SetOwner(kTRUE);
+  AliITSHLTforSDD* hltsdd=(AliITSHLTforSDD*)hltforSDD->GetObject();
+  if(!cacheStatus)hltforSDD->SetObject(NULL);
+  hltforSDD->SetOwner(kTRUE);
+  
+//   TObjArray *mapAn = (TObjArray *)mapASDD->GetObject();
+//   if(!cacheStatus)mapASDD->SetObject(NULL);
+//   mapASDD->SetOwner(kTRUE);
 
   TObjArray *mapT = (TObjArray *)mapTSDD->GetObject();
   if(!cacheStatus)mapTSDD->SetObject(NULL);
   mapTSDD->SetOwner(kTRUE);
 
-  TObjArray *noiseSSD = (TObjArray *)entryNoiseSSD->GetObject();
-  if(!cacheStatus)entryNoiseSSD->SetObject(NULL);
-  entryNoiseSSD->SetOwner(kTRUE);
-
-  TObjArray *pedestalSSD = (TObjArray *)entryPedestalSSD->GetObject();
-  if(!cacheStatus)entryPedestalSSD->SetObject(NULL);
-  entryPedestalSSD->SetOwner(kTRUE);
-
-  TObjArray *gainSSD = (TObjArray *)entryGainSSD->GetObject();
-  if(!cacheStatus)entryGainSSD->SetObject(NULL);
-  entryGainSSD->SetOwner(kTRUE);
-
-  TObjArray *badchannelsSSD = (TObjArray *)entryBadChannelsSSD->GetObject();
-  if(!cacheStatus)entryBadChannelsSSD->SetObject(NULL);
-  entryBadChannelsSSD->SetOwner(kTRUE);
-
-  AliITSresponseSSD *pSSD = (AliITSresponseSSD*)entry2SSD->GetObject();
-  if(!cacheStatus)entry2SSD->SetObject(NULL);
-  entry2SSD->SetOwner(kTRUE);
 
   // DB entries are deleted. In this way metadeta objects are deleted as well
   if(!cacheStatus){
-    delete entrySPD;
-    delete entrySPDn;
     delete entrySDD;
-    delete entryNoiseSSD;
-    delete entryPedestalSSD;
-    delete entryGainSSD;
-    delete entryBadChannelsSSD;
-    delete entry2SPD;
     delete entry2SDD;
-    delete entry2SSD;
-    delete mapASDD;
+    //delete mapASDD;
+    delete hltforSDD;
     delete mapTSDD;
     delete drSpSDD;
     delete ddlMapSDD;
   }
 
-  if ((!pSPD)||(!pSDD)||(!pSSD) || (!calSPD) || !(calSPDn) || (!calSDD) || (!drSp) || (!ddlsdd)
-      || (!mapAn) || (!mapT) || (!noiseSSD)|| (!gainSSD)|| (!badchannelsSSD)) {
-    AliWarning("Can not get calibration from calibration database !");
+  if ((!pSDD)||(!calSDD) || (!drSp) || (!ddlsdd) || (!hltsdd) || (!mapT) ){
+    AliWarning("Can not get SDD calibration from calibration database !");
     return kFALSE;
   }
 
-  fNMod[0] = calSPD->GetEntries();
-  if(fNMod[0] != calSPDn->GetEntries())AliFatal(Form("Different number of calibration objects in SPD dead (%d ) and SPD noisy (%d)\n",fNMod[0],calSPDn->GetEntries()));
   fNMod[1] = calSDD->GetEntries();
-  fNMod[2] = noiseSSD->GetEntries();
-  AliInfo(Form("%i SPD, %i SDD and %i SSD in calibration database",
-              fNMod[0], fNMod[1], fNMod[2]));
-  AliITSCalibrationSPD* calD;
-  AliITSCalibrationSPD* calN;
-  for (Int_t i=0; i<fNMod[0]; i++) {
-    calD = (AliITSCalibrationSPD*) calSPD->At(i);
-    printf("SPD module %d - Number of dead pixels %d \n",i,calD->GetNrBad());
-    calN = (AliITSCalibrationSPD*) calSPDn->At(i);
-    printf("SPD module %d - Number of noisy pixels %d \n",i,calN->GetNrBad());
-    for(Int_t ii=0; ii<calN->GetNrBad();ii++){
-      calD->AddBad(calN->GetBadColAt(ii),calN->GetBadRowAt(ii));
+
+  fDDLMapSDD=ddlsdd;
+  fRespSDD=pSDD;
+  fIsHLTmodeC=hltsdd->IsHLTmodeC();
+  AliITSCalibration* cal;
+  Float_t avegain=0.;
+  Float_t nGdAnodes=0;
+  for(Int_t iddl=0; iddl<AliITSDDLModuleMapSDD::GetNDDLs(); iddl++){
+    for(Int_t icar=0; icar<AliITSDDLModuleMapSDD::GetNModPerDDL();icar++){
+      Int_t iMod=fDDLMapSDD->GetModuleNumber(iddl,icar);
+      if(iMod==-1) continue;
+      Int_t i=iMod - fgkDefaultNModulesSPD;
+      cal = (AliITSCalibration*) calSDD->At(i);
+      Int_t i0=2*i;
+      Int_t i1=1+2*i;
+      for(Int_t iAnode=0;iAnode< ((AliITSCalibrationSDD*)cal)->NOfAnodes(); iAnode++){
+       if(((AliITSCalibrationSDD*)cal)->IsBadChannel(iAnode)) continue;
+       avegain+= ((AliITSCalibrationSDD*)cal)->GetChannelGain(iAnode);
+       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);
+      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);
     }
-    calD->SetResponse((AliITSresponse*)pSPD);
-    SetCalibrationModel(i, calD);
-    printf("SPD module %d - Number of bad pixels %d \n",i,calD->GetNrBad());
   }
-  calSPDn->Delete();
-  delete calSPDn;
-  calSPDn = NULL;
-  AliITSCalibration* cal;
-  for (Int_t i=0; i<fNMod[1]; i++) {
-    cal = (AliITSCalibration*) calSDD->At(i);
-    cal->SetResponse((AliITSresponse*)pSDD);
-    Int_t i0=2*i;
-    Int_t i1=1+2*i;
-    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);
-    cal->SetDriftSpeed(0,arr0);
-    cal->SetDriftSpeed(1,arr1);
-    cal->SetMapA(0,ma0);
-    cal->SetMapA(1,ma1);
-    cal->SetMapT(0,mt0);
-    cal->SetMapT(1,mt1);
-    fDDLMapSDD->SetDDLMap(ddlsdd);
-    Int_t iMod = i + fNMod[0];
-    SetCalibrationModel(iMod, cal);
-  }
-  for (Int_t i=0; i<fNMod[2]; i++) {
-
-    AliITSCalibrationSSD *calibSSD = new AliITSCalibrationSSD();
-    calibSSD->SetResponse((AliITSresponse*)pSSD);
-    
-    AliITSNoiseSSD *noise = (AliITSNoiseSSD*) (noiseSSD->At(i));
-    calibSSD->SetNoise(noise);
-    AliITSPedestalSSD *pedestal = (AliITSPedestalSSD*) (pedestalSSD->At(i));
-    calibSSD->SetPedestal(pedestal);
-    AliITSGainSSD *gain = (AliITSGainSSD*) (gainSSD->At(i));
-    calibSSD->SetGain(gain);
-    AliITSBadChannelsSSD *bad = (AliITSBadChannelsSSD*) (badchannelsSSD->At(i));
-    calibSSD->SetBadChannels(bad);
-
-    Int_t iMod = i + fNMod[0] + fNMod[1];
-    SetCalibrationModel(iMod, calibSSD);
- }
-
+  if(nGdAnodes) fAveGainSDD=avegain/nGdAnodes;
   return kTRUE;
 }
 
 
-//________________________________________________________________
-void AliITSDetTypeRec::SetDefaultClusterFinders(){
-  
-  //set defaults for standard cluster finder
+//______________________________________________________________________
+Bool_t AliITSDetTypeRec::GetCalibrationSSD(Bool_t cacheStatus) {
+  // Get SSD calibration objects from OCDB
+  //  AliCDBEntry *entrySSD = AliCDBManager::Instance()->Get("ITS/Calib/CalibSSD");
 
-  if(!GetITSgeom()){
-    Warning("SetDefaults","null pointer to AliITSgeom!");
-    return;
+  AliCDBEntry *entryNoiseSSD = AliCDBManager::Instance()->Get("ITS/Calib/NoiseSSD");
+  AliCDBEntry *entryGainSSD = AliCDBManager::Instance()->Get("ITS/Calib/GainSSD");
+  AliCDBEntry *entryBadChannelsSSD = AliCDBManager::Instance()->Get("ITS/Calib/BadChannelsSSD");
+
+  if(!entryNoiseSSD || !entryGainSSD || !entryBadChannelsSSD){
+    AliFatal("SSD Calibration object retrieval failed! ");
+    return kFALSE;
+  }    
+
+  TObject *emptyssd = 0; TString ssdobjectname = 0;
+  AliITSNoiseSSDv2 *noiseSSD = new AliITSNoiseSSDv2();  
+  emptyssd = (TObject *)entryNoiseSSD->GetObject();
+  ssdobjectname = emptyssd->GetName();
+  if(ssdobjectname=="TObjArray") {
+    TObjArray *noiseSSDOld = (TObjArray *)entryNoiseSSD->GetObject();
+    ReadOldSSDNoise(noiseSSDOld, noiseSSD);
   }
+  else if(ssdobjectname=="AliITSNoiseSSDv2")
+    noiseSSD = (AliITSNoiseSSDv2 *)entryNoiseSSD->GetObject();
+  if(!cacheStatus)entryNoiseSSD->SetObject(NULL);
+  entryNoiseSSD->SetOwner(kTRUE);
 
-  AliITSClusterFinder *clf; 
+  AliITSGainSSDv2 *gainSSD = new AliITSGainSSDv2();
+  emptyssd = (TObject *)entryGainSSD->GetObject();
+  ssdobjectname = emptyssd->GetName();
+  if(ssdobjectname=="Gain") {
+    TObjArray *gainSSDOld = (TObjArray *)entryGainSSD->GetObject();
+    ReadOldSSDGain(gainSSDOld, gainSSD);
+  }
+  else if(ssdobjectname=="AliITSGainSSDv2")
+    gainSSD = (AliITSGainSSDv2 *)entryGainSSD->GetObject();
+  if(!cacheStatus)entryGainSSD->SetObject(NULL);
+  entryGainSSD->SetOwner(kTRUE);
 
-  for(Int_t dettype=0;dettype<fgkNdettypes;dettype++){
-    //SPD
-    if(dettype==0){
-      if(!GetReconstructionModel(dettype)){
-       TClonesArray *dig0 = DigitsAddress(0);
-       TClonesArray *rec0 = ClustersAddress(0);
-       clf = new AliITSClusterFinderSPD(this,dig0,rec0);
-       SetReconstructionModel(dettype,clf);
+  AliITSBadChannelsSSDv2 *badChannelsSSD = new AliITSBadChannelsSSDv2();
+  emptyssd = (TObject *)entryBadChannelsSSD->GetObject();
+  ssdobjectname = emptyssd->GetName();
+  if(ssdobjectname=="TObjArray") {
+    TObjArray *badChannelsSSDOld = (TObjArray *)entryBadChannelsSSD->GetObject();
+    ReadOldSSDBadChannels(badChannelsSSDOld, badChannelsSSD);
+  }
+  else if(ssdobjectname=="AliITSBadChannelsSSDv2")
+    badChannelsSSD = (AliITSBadChannelsSSDv2*)entryBadChannelsSSD->GetObject();
+  if(!cacheStatus)entryBadChannelsSSD->SetObject(NULL);
+  entryBadChannelsSSD->SetOwner(kTRUE);
 
-      }
-    }
-   
-    //SDD
-    if(dettype==1){
-      if(!GetReconstructionModel(dettype)){
-       TClonesArray *dig1 = DigitsAddress(1);
-       TClonesArray *rec1 = ClustersAddress(1);
-       clf = new AliITSClusterFinderSDD(this,dig1,rec1);
-       SetReconstructionModel(dettype,clf);
-      }
+  // DB entries are deleted. In this way metadeta objects are deleted as well
+  if(!cacheStatus){
+    delete entryNoiseSSD;
+    delete entryGainSSD;
+    delete entryBadChannelsSSD;
+  }
 
-    }
-    //SSD
-    if(dettype==2){
-      if(!GetReconstructionModel(dettype)){
-       TClonesArray* dig2 = DigitsAddress(2);
-       clf = new AliITSClusterFinderSSD(this,dig2);
-       SetReconstructionModel(dettype,clf);
-      }
-    }
+  if ((!noiseSSD)|| (!gainSSD)|| (!badChannelsSSD)) {
+    AliWarning("Can not get SSD calibration from calibration database !");
+    return kFALSE;
+  }
 
- }
-  
+  fSSDCalibration->SetNoise(noiseSSD);
+  fSSDCalibration->SetGain(gainSSD);
+  fSSDCalibration->SetBadChannels(badChannelsSSD);
+  //fSSDCalibration->FillBadChipMap();
+
+  return kTRUE;
 }
 
 //________________________________________________________________
@@ -800,7 +860,7 @@ void AliITSDetTypeRec::AddRecPoint(const AliITSRecPoint &r){
 }
 
 //______________________________________________________________________
-void AliITSDetTypeRec::DigitsToRecPoints(TTree *treeD,TTree *treeR,Int_t lastentry,Option_t *opt, Bool_t v2){
+void AliITSDetTypeRec::DigitsToRecPoints(TTree *treeD,TTree *treeR,Int_t lastentry,Option_t *opt, Int_t optCluFind){
   // cluster finding and reconstruction of space points
   // the condition below will disappear when the geom class will be
   // initialized for all versions - for the moment it is only for v5 !
@@ -817,13 +877,12 @@ void AliITSDetTypeRec::DigitsToRecPoints(TTree *treeD,TTree *treeR,Int_t lastent
   const char *all = strstr(opt,"All");
   const char *det[3] = {strstr(opt,"SPD"),strstr(opt,"SDD"),
                         strstr(opt,"SSD")};
-  if(!v2) {
-    SetDefaultClusterFinders();
-    AliInfo("Original cluster finder has been selected\n");
-  }
-  else   { 
+  if(optCluFind==0){
     SetDefaultClusterFindersV2();
     AliInfo("V2 cluster finder has been selected \n");
+  }else{
+    SetDefaultClusterFindersV2();
+    AliInfo("Cluster Finder Option not implemented, V2 cluster finder will be udes \n");    
   }
 
   AliITSClusterFinder *rec     = 0;
@@ -870,7 +929,7 @@ void AliITSDetTypeRec::DigitsToRecPoints(AliRawReader* rawReader,TTree *treeR,Op
   const char *all = strstr(opt,"All");
   const char *det[3] = {strstr(opt,"SPD"),strstr(opt,"SDD"),
                         strstr(opt,"SSD")};
-  AliITSClusterFinderV2 *rec     = 0;
+  AliITSClusterFinder *rec     = 0;
   Int_t id=0;
 
   TClonesArray *array=new TClonesArray("AliITSRecPoint",1000);
@@ -883,9 +942,9 @@ void AliITSDetTypeRec::DigitsToRecPoints(AliRawReader* rawReader,TTree *treeR,Op
   }
   for(id=0;id<3;id++){
     if (!all && !det[id]) continue;
-    rec = (AliITSClusterFinderV2*)GetReconstructionModel(id);
+    rec = (AliITSClusterFinder*)GetReconstructionModel(id);
     if (!rec)
-      AliFatal("The reconstruction class was not instanciated");
+      AliFatal("The reconstruction class was not instantiated");
     rec->SetDetTypeRec(this);
     rec->RawdataToClusters(rawReader,clusters);    
   } 
@@ -916,4 +975,76 @@ void AliITSDetTypeRec::DigitsToRecPoints(AliRawReader* rawReader,TTree *treeR,Op
   
 }
 
+//______________________________________________________________________
+void AliITSDetTypeRec::ReadOldSSDNoise(TObjArray *array, 
+                                      AliITSNoiseSSDv2 *noiseSSD) {
+  //Reads the old SSD calibration object and converts it to the new format
+  const Int_t fgkSSDSTRIPSPERMODULE = 1536;
+  const Int_t fgkSSDPSIDESTRIPSPERMODULE = 768;
+
+  Int_t gNMod = array->GetEntries();
+  cout<<"Converting old calibration object for noise..."<<endl;
+
+  //NOISE
+  Double_t noise = 0.0;
+  for (Int_t iModule = 0; iModule < gNMod; iModule++) {
+    AliITSNoiseSSD *noiseModule = (AliITSNoiseSSD*) (array->At(iModule));
+    for(Int_t iStrip = 0; iStrip < fgkSSDSTRIPSPERMODULE; iStrip++) {
+      noise = (iStrip < fgkSSDPSIDESTRIPSPERMODULE) ? noiseModule->GetNoiseP(iStrip) : noiseModule->GetNoiseN(1535 - iStrip);
+      if(iStrip < fgkSSDPSIDESTRIPSPERMODULE)
+       noiseSSD->AddNoiseP(iModule,iStrip,noise);
+      if(iStrip >= fgkSSDPSIDESTRIPSPERMODULE)
+       noiseSSD->AddNoiseN(iModule,1535 - iStrip,noise);
+    }//loop over strips
+  }//loop over modules      
+}
+
+//______________________________________________________________________
+void AliITSDetTypeRec::ReadOldSSDBadChannels(TObjArray *array, 
+                                            AliITSBadChannelsSSDv2 *badChannelsSSD) {
+  //Reads the old SSD calibration object and converts it to the new format
+  Int_t gNMod = array->GetEntries();
+  cout<<"Converting old calibration object for bad channels..."<<endl;
+  for (Int_t iModule = 0; iModule < gNMod; iModule++) {
+    //for (Int_t iModule = 0; iModule < 1; iModule++) {
+    AliITSBadChannelsSSD *bad = (AliITSBadChannelsSSD*) (array->At(iModule));
+    TArrayI arrayPSide = bad->GetBadPChannelsList();
+    for(Int_t iPCounter = 0; iPCounter < arrayPSide.GetSize(); iPCounter++) 
+      badChannelsSSD->AddBadChannelP(iModule,
+                                    iPCounter,
+                                    (Char_t)arrayPSide.At(iPCounter));
+        
+    TArrayI arrayNSide = bad->GetBadNChannelsList();
+    for(Int_t iNCounter = 0; iNCounter < arrayNSide.GetSize(); iNCounter++) 
+      badChannelsSSD->AddBadChannelN(iModule,
+                                    iNCounter,
+                                    (Char_t)arrayNSide.At(iNCounter));
+    
+  }//loop over modules      
+}
+
+//______________________________________________________________________
+void AliITSDetTypeRec::ReadOldSSDGain(TObjArray *array, 
+                                     AliITSGainSSDv2 *gainSSD) {
+  //Reads the old SSD calibration object and converts it to the new format
+
+  Int_t gNMod = array->GetEntries();
+  cout<<"Converting old calibration object for gain..."<<endl;
+
+  //GAIN
+  for (Int_t iModule = 0; iModule < gNMod; iModule++) {
+    AliITSGainSSD *gainModule = (AliITSGainSSD*) (array->At(iModule));
+    TArrayF arrayPSide = gainModule->GetGainP();
+    for(Int_t iPCounter = 0; iPCounter < arrayPSide.GetSize(); iPCounter++)
+      gainSSD->AddGainP(iModule,
+                       iPCounter,
+                       arrayPSide.At(iPCounter));
+    TArrayF arrayNSide = gainModule->GetGainN();
+    for(Int_t iNCounter = 0; iNCounter < arrayNSide.GetSize(); iNCounter++)
+      gainSSD->AddGainN(iModule,
+                       iNCounter,
+                       arrayNSide.At(iNCounter));
+  }//loop over modules 
+}
+