2 Unit test for some functions classes used in the $ALICE_ROOT/TPC/Base directory:
3 gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/ -I$ALICE_ROOT/include -I$ALICE_ROOT/STEER\
4 -I$ALICE_ROOT/TPC -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TRD -I$ALICE_ROOT/TOF -I$ALICE_ROOT/RAW -I$ALICE_ROOT/PWG1 -I$ALICE_ROOT/STAT -I$ALICE_ROOT/TPC/Base -I$ALICE_ROOT/TPC/Calib");
6 .L $ALICE_ROOT/TPC/Base/test/UnitTest.C+
7 UnitTestAliTPCCalPadTree();
8 TestCorrection_AliTPCExBTwistAddCorrectionCompact();
9 TestCorrection_AliTPCFCVoltError3DAddCorrectionCompact();
10 TestCorrection_AliTPCRocVoltError3DAddCorrectionCompact();
16 #include "TLinearFitter.h"
18 #include "AliSysInfo.h"
23 #include "AliTPCCalPad.h"
24 #include "AliTPCCalibViewer.h"
25 #include "AliTPCcalibDButil.h"
26 #include "AliTPCCorrection.h"
27 #include "AliTPCComposedCorrection.h"
28 #include "AliTPCExBTwist.h"
29 #include "AliTPCFCVoltError3D.h"
30 #include "AliTPCROCVoltError3D.h"
31 //#include "AliTPCBoundaryVoltError.h"
34 // PARAMETERS to set from outside:
36 TString baseDir="/hera/alice/wiechula/calib/guiTrees"; // TO FIX specification of inout data
41 void UnitTestAliTPCCalPadTree(){
43 // Make a UnitTest of the AliTPCCalPad
44 // a.) TTree functionaility
45 // b.) MedianFilterFunctionality
46 // c.) LTMFilterFunctionality
48 TObjArray *fArray = new TObjArray(100);
49 TTree * treePad=AliTPCcalibDButil::ConnectGainTrees(baseDir);
50 for (Int_t i=0; i<5; i+=2){
51 AliTPCCalPad * padLx = AliTPCCalPad::MakePadFromTree(treePad,"lx.fElements","Lx",kTRUE);
52 AliTPCCalPad * padLy = AliTPCCalPad::MakePadFromTree(treePad,"ly.fElements","Ly",kTRUE);
53 AliTPCCalPad * padLLx = AliTPCCalPad::MakePadFromTree(treePad,"lx.fElements","LLx",kTRUE);
54 AliTPCCalPad * padLLy = AliTPCCalPad::MakePadFromTree(treePad,"ly.fElements","LLy",kTRUE);
55 AliTPCCalPad * padMax = AliTPCCalPad::MakePadFromTree(treePad,"QA.2010.LHC10d.MaxCharge.fElements","QMax",kTRUE);
56 AliTPCCalPad * padMean = AliTPCCalPad::MakePadFromTree(treePad,"QA.2010.LHC10d.MeanCharge.fElements","QTot",kTRUE);
57 AliTPCCalPad * padMaxL = AliTPCCalPad::MakePadFromTree(treePad,"QA.2010.LHC10d.MaxCharge.fElements","QMax",kTRUE);
58 AliTPCCalPad * padMeanL = AliTPCCalPad::MakePadFromTree(treePad,"QA.2010.LHC10d.MeanCharge.fElements","QTot",kTRUE);
60 padLx->MedianFilter(i,2*i);
61 padLy->MedianFilter(i,2*i);
62 padLLx->LTMFilter(i,2*i,1.00, 0);
63 padLLy->LTMFilter(i,2*i,1.00, 0);
64 padMax->MedianFilter(i,2*i);
65 padMean->MedianFilter(i,2*i);
66 padMaxL->LTMFilter(i,2*i,0.8,0);
67 padMeanL->LTMFilter(i,2*i,0.8,0);
69 padLx->SetName(TString::Format("Lx%d",i).Data());
70 padLy->SetName(TString::Format("Ly%d",i).Data());
71 padLLx->SetName(TString::Format("LLx%d",i).Data());
72 padLLy->SetName(TString::Format("LLy%d",i).Data());
73 padMax->SetName(TString::Format("QMax%d",i).Data());
74 padMean->SetName(TString::Format("QTot%d",i).Data());
75 padMaxL->SetName(TString::Format("QMaxL%d",i).Data());
76 padMeanL->SetName(TString::Format("QTotL%d",i).Data());
77 fArray->AddLast(padLx);
78 fArray->AddLast(padLy);
79 fArray->AddLast(padLLx);
80 fArray->AddLast(padLLy);
81 fArray->AddLast(padMax);
82 fArray->AddLast(padMean);
83 fArray->AddLast(padMaxL);
84 fArray->AddLast(padMeanL);
86 AliTPCCalibViewer::MakeTree("QAtest.root", fArray,0);
88 // 2.) Check invariants
90 TFile*fout= TFile::Open("QAtest.root");
91 TTree * tree = (TTree*)fout->Get("calPads");
92 Int_t isOutM0 = tree->Draw("(Ly2.fElements-Ly0.fElements)>>his0(100,-10,10)","abs((Ly2.fElements-Ly0.fElements))>2","goff");
93 Int_t isOutM1=tree->Draw("(Lx2.fElements-Lx0.fElements)/0.75>>his1(100,-10,10)","abs((Lx2.fElements-Lx0.fElements))>0","goff");
94 printf("IsOut=%d\t%d\n",isOutM0,isOutM1);
95 if ((isOutM0+isOutM1)==0) ::Info("UnitTestAliTPCCalPadTree","MedianTest OK");
96 if (isOutM0||isOutM1) ::Fatal("UnitTestAliTPCCalPadTree","MedianTest FAILED");
98 Int_t isOutL0 = tree->Draw("(LLy2.fElements-Ly0.fElements)>>his0(100,-10,10)","abs((LLy2.fElements-LLy0.fElements))>0","goff");
99 Int_t isOutL1=tree->Draw("(LLx2.fElements-Lx0.fElements)/0.75>>his1(100,-10,10)","abs((LLx2.fElements-LLx0.fElements))>0","goff");
100 printf("IsOut=%d\t%d\n",isOutL0,isOutL1);
101 if ((isOutL0+isOutL1)==0) ::Info("UnitTestAliTPCCalPadTree","LTMTest OK");
102 if (isOutL0||isOutL1) ::Fatal("UnitTestAliTPCCalPadTree","LTMTest FAILED");
106 Bool_t TestCorrection_AliTPCExBTwistAddCorrectionCompact(){
109 // 1.) Test ExB twist AddCorrectionCompact
111 Bool_t isOK[10]={kTRUE,kTRUE,kTRUE,kTRUE,kTRUE,kTRUE};
112 AliTPCComposedCorrection *compCorrTwist = new AliTPCComposedCorrection();
113 AliTPCExBTwist *twistX = new AliTPCExBTwist;
114 AliTPCExBTwist *twistY = new AliTPCExBTwist;
115 twistX->SetXTwist(0.001); // 1 mrad twist in x
116 twistY->SetYTwist(0.001); // 1 mrad twist in x
117 isOK[0]&=compCorrTwist->AddCorrectionCompact(twistX,1);
118 isOK[0]&=compCorrTwist->AddCorrectionCompact(twistY,1);
119 isOK[0]&=compCorrTwist->AddCorrectionCompact(twistY,-1);
120 isOK[0]&=compCorrTwist->AddCorrectionCompact(twistX,-1);
121 isOK[1]=compCorrTwist->GetCorrections()->GetEntries()==1;
122 AliTPCExBTwist *twistRes=0;
123 if (isOK[1]==kFALSE){
128 twistRes= dynamic_cast<AliTPCExBTwist *>(compCorrTwist->GetSubCorrection(0));
134 isOK[3] &= (twistRes->GetXTwist()==0);
135 isOK[4] &= (twistRes->GetYTwist()==0);
139 for (Int_t i=0; i<5; i++) res&=isOK[i];
141 if (isOK[0]==kFALSE){
142 ::Error("TestCorrection_AddCorrectionCompact","AliTPCExBTwist -ADD FAILED");
144 ::Info("TestCorrection_AddCorrectionCompact","AliTPCExBTwist -ADD OK");
146 if (isOK[1]==kFALSE){
147 ::Error("TestCorrection_AddCorrectionCompact","AliTPCExBTwist - wrong entries FAILED");
149 ::Info("TestCorrection_AddCorrectionCompact","AliTPCExBTwist - entries OK");
151 if (isOK[2]==kFALSE || isOK[3]==kFALSE ||isOK[4]==kFALSE ){
152 ::Error("TestCorrection_AddCorrectionCompact","AliTPCExBTwist - inconsitent entries FAILED");
154 ::Info("TestCorrection_AddCorrectionCompact","AliTPCExBTwist - consistent entries OK");
161 Bool_t TestCorrection_AliTPCFCVoltError3DAddCorrectionCompact(){
163 // TestCorrection_AliTPCFCVoltError3DAddCorrectionCompact
165 const Float_t kEpsilon=0.000001;
166 Bool_t isOK[10]={kTRUE,kTRUE,kTRUE,kTRUE,kTRUE,kTRUE};
167 AliTPCComposedCorrection *compCorrComp = new AliTPCComposedCorrection();
168 AliTPCFCVoltError3D *corr0 = new AliTPCFCVoltError3D;
169 AliTPCFCVoltError3D *corr1 = new AliTPCFCVoltError3D;
170 for (Int_t isec=0; isec<36; isec++){
171 corr0->SetRodVoltShiftA(isec,TMath::Cos(TMath::Pi()*isec/36),kFALSE);
172 corr0->SetRodVoltShiftC(isec,TMath::Cos(TMath::Pi()*isec/36),kFALSE);
173 corr1->SetRodVoltShiftA(isec,TMath::Sin(TMath::Pi()*isec/36),kFALSE);
174 corr1->SetRodVoltShiftC(isec,TMath::Sin(TMath::Pi()*isec/36),kFALSE);
175 corr1->SetCopperRodShiftA(isec,TMath::Sin(TMath::Pi()*isec/36),kFALSE);
176 corr1->SetCopperRodShiftC(isec,TMath::Sin(TMath::Pi()*isec/36),kFALSE);
179 isOK[0]&=compCorrComp->AddCorrectionCompact(corr0,1);
180 isOK[0]&=compCorrComp->AddCorrectionCompact(corr1,1);
181 isOK[0]&=compCorrComp->AddCorrectionCompact(corr1,-1);
182 isOK[0]&=compCorrComp->AddCorrectionCompact(corr0,-1);
183 isOK[1]=compCorrComp->GetCorrections()->GetEntries()==1;
184 AliTPCFCVoltError3D *corrRes=0;
185 if (isOK[1]==kFALSE){
190 corrRes= dynamic_cast<AliTPCFCVoltError3D *>(compCorrComp->GetSubCorrection(0));
196 for (Int_t isec=0; isec<36; isec++){
197 isOK[3] &=( TMath::Abs(corrRes->GetRodVoltShiftA(isec))<kEpsilon);
198 isOK[4] &=( TMath::Abs(corrRes->GetRodVoltShiftC(isec))<kEpsilon);
199 isOK[5] &=( TMath::Abs(corrRes->GetCopperRodShiftA(isec))<kEpsilon);
200 isOK[6] &=( TMath::Abs(corrRes->GetCopperRodShiftC(isec))<kEpsilon);
205 for (Int_t i=0; i<5; i++) res&=isOK[i];
207 if (isOK[0]==kFALSE){
208 ::Error("TestCorrection_AddCorrectionCompact","AliTPCFCVoltError3D -ADD FAILED");
210 ::Info("TestCorrection_AddCorrectionCompact","AliTPCFCVoltError3D -ADD OK");
212 if (isOK[1]==kFALSE){
213 ::Error("TestCorrection_AddCorrectionCompact","AliTPCFCVoltError3D - wrong entries FAILED");
215 ::Info("TestCorrection_AddCorrectionCompact","AliTPCFCVoltError3D - entries OK");
217 if (isOK[2]==kFALSE || isOK[3]==kFALSE ||isOK[4]==kFALSE ){
218 ::Error("TestCorrection_AddCorrectionCompact","AliTPCFCVoltError3D - inconsitent entries FAILED");
220 ::Info("TestCorrection_AddCorrectionCompact","AliTPCFCVoltError3D - consistent entries OK");
228 Bool_t TestCorrection_AliTPCRocVoltError3DAddCorrectionCompact(){
230 // AliTPCRocVoltError3DAddCorrectionCompact
232 const Float_t kEpsilon=0.00000001;
233 Bool_t isOK[10]={kTRUE,kTRUE,kTRUE,kTRUE,kTRUE,kTRUE};
234 AliTPCComposedCorrection *compCorrROCVoltError3D = new AliTPCComposedCorrection();
235 AliTPCROCVoltError3D *corr0 = new AliTPCROCVoltError3D;
236 AliTPCROCVoltError3D *corr1 = new AliTPCROCVoltError3D;
237 TMatrixD matrixDz(72,3);
238 for (Int_t isec=0; isec<72; isec++){
239 matrixDz(isec,0)=gRandom->Rndm()*0.1;
240 matrixDz(isec,1)=gRandom->Rndm()*0.001;
241 matrixDz(isec,2)=gRandom->Rndm()*0.001;
243 corr0->SetROCData(&matrixDz);
245 corr1->SetROCData(&matrixDz);
247 isOK[0]&=compCorrROCVoltError3D->AddCorrectionCompact(corr0,1);
248 isOK[0]&=compCorrROCVoltError3D->AddCorrectionCompact(corr1,1);
249 isOK[0]&=compCorrROCVoltError3D->AddCorrectionCompact(corr1,-1);
250 isOK[0]&=compCorrROCVoltError3D->AddCorrectionCompact(corr0,-1);
251 isOK[1]=compCorrROCVoltError3D->GetCorrections()->GetEntries()==1;
252 AliTPCROCVoltError3D *corrRes=0;
253 if (isOK[1]==kFALSE){
258 corrRes= dynamic_cast<AliTPCROCVoltError3D *>(compCorrROCVoltError3D->GetSubCorrection(0));
264 isOK[3]=TMath::Abs(corrRes->GetMatrix()->Sum())<kEpsilon;
268 for (Int_t i=0; i<5; i++) res&=isOK[i];
270 if (isOK[0]==kFALSE){
271 ::Error("TestCorrection_AddCorrectionCompact","AliTPCROCVoltError3D -ADD FAILED");
273 ::Info("TestCorrection_AddCorrectionCompact","AliTPCROCVoltError3D -ADD OK");
275 if (isOK[1]==kFALSE){
276 ::Error("TestCorrection_AddCorrectionCompact","AliTPCROCVoltError3D - wrong entries FAILED");
278 ::Info("TestCorrection_AddCorrectionCompact","AliTPCROCVoltError3D - entries OK");
280 if (isOK[2]==kFALSE || isOK[3]==kFALSE ||isOK[4]==kFALSE ){
281 ::Error("TestCorrection_AddCorrectionCompact","AliTPCROCVoltError3D - inconsitent entries FAILED");
283 ::Info("TestCorrection_AddCorrectionCompact","AliTPCROCVoltError3D - consistent entries OK");