ATO-98 AliTPCRocVoltError3D::AddCorrectionCompact implmented and test included
[u/mrichter/AliRoot.git] / TPC / Base / AliTPCROCVoltError3D.cxx
index 4aa3ebc..a9bf24e 100644 (file)
@@ -54,6 +54,7 @@
 //   gROOT->SetStyle("Plain"); gStyle->SetPalette(1);
 //   TCanvas *c2 = new TCanvas("cAliTPCROCVoltError3D","cAliTPCROCVoltError3D",500,400); 
 //   AliTPCROCVoltError3D roc; 
+//   roc.SetROCDataFileName("$ALICE_ROOT/TPC/Calib/maps/TPCROCdzSurvey.root");
 //   roc.SetElectronArrivalCorrection(kFALSE);  // Correction for electron arrival offset, IROC vs OROC
 //   roc.SetROCDisplacement(kTRUE);   // include the chamber offset in z when calculating the dz 
 //   roc.SetOmegaTauT1T2(0,1,1); // B=0
@@ -105,8 +106,8 @@ AliTPCROCVoltError3D::AliTPCROCVoltError3D()
     fLookUpEphiOverEz[k] =  new TMatrixF(kNR,kNZ);
     fLookUpDeltaEz[k]    =  new TMatrixF(kNR,kNZ);   
   }
-  // fROCDataFileName="$ALICE_ROOT/TPC/Calib/maps/TPCROCdzSurvey.root";
-  // SetROCDataFileName(fROCDataFileName.Data()); // initialization of fdzDataLinFit is included
+  //  fROCDataFileName="$ALICE_ROOT/TPC/Calib/maps/TPCROCdzSurvey.root";
+  //  SetROCDataFileName(fROCDataFileName.Data()); // initialization of fdzDataLinFit is included
 
 }
 
@@ -124,6 +125,39 @@ AliTPCROCVoltError3D::~AliTPCROCVoltError3D() {
   delete fdzDataLinFit;
 }
 
+
+
+Bool_t AliTPCROCVoltError3D::AddCorrectionCompact(AliTPCCorrection* corr, Double_t weight){
+  //
+  // Add correction  and make them compact
+  // Assumptions:
+  //  - origin of distortion/correction are additive
+  //  - only correction ot the same type supported ()
+  if (corr==NULL) {
+    AliError("Zerro pointer - correction");
+    return kFALSE;
+  }  
+  AliTPCROCVoltError3D * corrC = dynamic_cast<AliTPCROCVoltError3D *>(corr);
+  if (corrC == NULL) {
+    AliError(TString::Format("Inconsistent class types: %s\%s",IsA()->GetName(),corr->IsA()->GetName()).Data());
+    return kFALSE;
+  }
+  //
+  TMatrixD matrixDz=*(corrC->fdzDataLinFit);
+  matrixDz*=weight;
+  if (fdzDataLinFit==NULL) {
+    fdzDataLinFit=new TMatrixD(matrixDz);
+  }
+  else{
+    (*fdzDataLinFit)+=matrixDz;
+  }
+  return kTRUE;
+}
+
+
+
+
+
 void AliTPCROCVoltError3D::SetROCData(TMatrixD * matrix){
   //
   // Set a z alignment map of the chambers not via a file, but