From: mivanov Date: Sun, 14 Dec 2014 13:01:23 +0000 (+0100) Subject: ATO-98 AliTPCBoundaryVoltError::AddCorrectionCompact implemented and test included X-Git-Url: http://git.uio.no/git/?a=commitdiff_plain;h=954a5d1b80ba87e4482627efcf265422c3dc10f4;p=u%2Fmrichter%2FAliRoot.git ATO-98 AliTPCBoundaryVoltError::AddCorrectionCompact implemented and test included --- diff --git a/TPC/Base/AliTPCBoundaryVoltError.cxx b/TPC/Base/AliTPCBoundaryVoltError.cxx index 4ec62a70fda..dfa621ddb00 100644 --- a/TPC/Base/AliTPCBoundaryVoltError.cxx +++ b/TPC/Base/AliTPCBoundaryVoltError.cxx @@ -103,6 +103,37 @@ AliTPCBoundaryVoltError::~AliTPCBoundaryVoltError() { + +Bool_t AliTPCBoundaryVoltError::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; + } + AliTPCBoundaryVoltError* corrC = dynamic_cast(corr); + if (corrC == NULL) { + AliError(TString::Format("Inconsistent class types: %s\%s",IsA()->GetName(),corr->IsA()->GetName()).Data()); + return kFALSE; + } + if (fROCdisplacement!=corrC->fROCdisplacement){ + AliError(TString::Format("Inconsistent fROCdisplacement : %s\%s",IsA()->GetName(),corr->IsA()->GetName()).Data()); + return kFALSE; + } + for (Int_t i=0;i <8; i++){ + fBoundariesA[i]+= corrC->fBoundariesA[i]*weight; + fBoundariesC[i]+= corrC->fBoundariesC[i]*weight; + } + // + return kTRUE; +} + + + + void AliTPCBoundaryVoltError::Init() { // // Initialization funtion diff --git a/TPC/Base/AliTPCBoundaryVoltError.h b/TPC/Base/AliTPCBoundaryVoltError.h index 595c0be8779..b1bf6d33dea 100644 --- a/TPC/Base/AliTPCBoundaryVoltError.h +++ b/TPC/Base/AliTPCBoundaryVoltError.h @@ -17,7 +17,7 @@ class AliTPCBoundaryVoltError : public AliTPCCorrection { public: AliTPCBoundaryVoltError(); virtual ~AliTPCBoundaryVoltError(); - + virtual Bool_t AddCorrectionCompact(AliTPCCorrection* corr, Double_t weight); // initialization and update functions virtual void Init(); virtual void Update(const TTimeStamp &timeStamp); diff --git a/TPC/Base/test/UnitTest.C b/TPC/Base/test/UnitTest.C index de020b87240..2c6ffc8c6c9 100644 --- a/TPC/Base/test/UnitTest.C +++ b/TPC/Base/test/UnitTest.C @@ -8,6 +8,7 @@ TestCorrection_AliTPCExBTwistAddCorrectionCompact(); TestCorrection_AliTPCFCVoltError3DAddCorrectionCompact(); TestCorrection_AliTPCRocVoltError3DAddCorrectionCompact(); + TestCorrection_AliTPCBoundaryVoltErrorAddCorrectionCompact(); */ @@ -28,8 +29,8 @@ #include "AliTPCExBTwist.h" #include "AliTPCFCVoltError3D.h" #include "AliTPCROCVoltError3D.h" -//#include "AliTPCBoundaryVoltError.h" - +#include "AliTPCBoundaryVoltError.h" + // // PARAMETERS to set from outside: // @@ -285,3 +286,68 @@ Bool_t TestCorrection_AliTPCRocVoltError3DAddCorrectionCompact(){ } return res; } + + + + + +Bool_t TestCorrection_AliTPCBoundaryVoltErrorAddCorrectionCompact(){ + // + // AliTPCBoundaryVoltErrorAddCorrectionCompact + // + const Float_t kEpsilon=0.00000001; + Bool_t isOK[10]={kTRUE,kTRUE,kTRUE,kTRUE,kTRUE,kTRUE}; + AliTPCComposedCorrection *compCorrBoundaryVoltError = new AliTPCComposedCorrection(); + AliTPCBoundaryVoltError *corr0 = new AliTPCBoundaryVoltError; + AliTPCBoundaryVoltError *corr1 = new AliTPCBoundaryVoltError; + Float_t boundaries[8]; + for (Int_t ibound=0; ibound<8; ibound++){ + boundaries[ibound]=gRandom->Rndm()-0.5; + } + corr0->SetBoundariesA(boundaries); + corr1->SetBoundariesA(boundaries); + // + isOK[0]&=compCorrBoundaryVoltError->AddCorrectionCompact(corr0,1); + isOK[0]&=compCorrBoundaryVoltError->AddCorrectionCompact(corr1,1); + isOK[0]&=compCorrBoundaryVoltError->AddCorrectionCompact(corr1,-1); + isOK[0]&=compCorrBoundaryVoltError->AddCorrectionCompact(corr0,-1); + isOK[1]=compCorrBoundaryVoltError->GetCorrections()->GetEntries()==1; + AliTPCBoundaryVoltError *corrRes=0; + if (isOK[1]==kFALSE){ + isOK[2]=kFALSE; + isOK[3]=kFALSE; + isOK[4]=kFALSE; + }else{ + corrRes= dynamic_cast(compCorrBoundaryVoltError->GetSubCorrection(0)); + if (corrRes==NULL){ + isOK[2]=kFALSE; + isOK[3]=kFALSE; + isOK[4]=kFALSE; + }else{ + for (Int_t ibound=0; ibound<8; ibound++){ + isOK[3]&=TMath::Abs(corrRes->GetBoundariesA(ibound))GetBoundariesC(ibound))