ROOT logo
/*
  Unit test for fucntions used in the calibrations
  .L $ALICE_ROOT/TPC/Calib/test/UnitTest.C+

  
*/

#include "TF1.h"
#include "TMath.h"
#include "TLinearFitter.h"
#include "TFile.h"
#include "AliTPCcalibAlign.h"
#include "AliTPCcalibLaser.h"
#include "AliSysInfo.h"
#include "TTree.h"
#include "AliLog.h"
#include "THn.h"
#include "TRandom.h"


const Double_t kAlmost0=1.e-13;

void UnitTestPlaneFitter();
void UnitTestF1Plane();


void UnitTest(){ 
  UnitTestPlaneFitter();
  UnitTestF1Plane();
}

void UnitTestPlaneFitter(){
  //
  // Unit test plane fitter
  //
  TLinearFitter fitter(6,"x[0]++x[1]++x[2]++x[3]++x[4]++x[5]");
  Double_t x[6]={0};
  TVectorD vec(6);
  for (Int_t i=0; i<10000; i++) { 
    x[0]=i; 
    x[1]=i*i; 
    x[2]=i*i*i; 
    x[3]=TMath::Power(i,1/2.); 
    x[4]=TMath::Power(i,1/3.); 
    x[5]=TMath::Power(i,1/4.); 
    fitter.AddPoint(x,i*i*i);
  }
  fitter.Eval();
  fitter.GetParameters(vec);
  vec.Print();
  if (TMath::Abs(vec[2]-1)>kAlmost0){
    ::Fatal("UnitTestPlaneFitter","Wrong value\n");    
  }else{
    ::Info("UnitTestPlaneFitter","OK");
  }
}


void UnitTestF1Plane(){
  //
  // Test multiplane interface
  //
  TF1 f1("f1","x[0]++x[1]++x[2]");
  Double_t xxx[6]={1,2,3,4,5,6}; 
  Double_t par[6]={1,2,3,4,5,6}; 
  f1.EvalPar(xxx,xxx);  //shoul be 14  = 1*1+2*2+3*3
  //
  if (TMath::Abs(f1.EvalPar(xxx,par)-14.)>kAlmost0){
    ::Fatal("UnitTestF1Plane","Wrong value\n");
  }else{
    ::Info("UnitTestF1Plane", Form("OK: Diff=%f\n",f1.EvalPar(xxx,par)-14 ));
  }
}



void UnitTestAliTPCcalibAlignStreamer(const char *fname="/hera/alice/local/benchmark/vAN-20140518/000128503/cpass1/CalibObjects.root"){
  //
  // test streamer of the AliTPCcalibAlign::Streamer
  //   0.) Read old data part
  //   1.) Fill part 
  //   2.) Write part
  //   3.) Read back - consistency check
  //   4.) Destructor check
  //   5.) Memory usage print
  //
  AliLog::SetClassDebugLevel("AliTPCcalibAlign",1);
  AliTPCcalibAlign * align=0;
  Int_t nPoints=1000000;
  //
  //  0.) Read old data part
  //
  TFile *fin= TFile::Open(fname);
  if (fin){
    AliSysInfo::AddStamp("LoadFile");
    align = (AliTPCcalibAlign * )fin->Get("TPCAlign/alignTPC");
    AliSysInfo::AddStamp("LoadAlign");
    fin->Close();
    delete fin;
    if (align->GetClusterDelta(0)==NULL){
      ::Error("UnitTestAliTPCcalibAlignStreamer","Not back compatible class- GetClusterDelta");
      align->MakeResidualHistos();    
    }
    if (align->GetTrackletDelta(0)==NULL){
      ::Error("UnitTestAliTPCcalibAlignStreamer","Not back compatible class- GetTrackletDelta");
      align->MakeResidualHistosTracklet();
    }
  }else{
  }


  //
  // 1.) Fill part test
  //
  for (Int_t ipoint=0; ipoint<nPoints; ipoint++){
    Double_t xxx[10]={0};
    for (Int_t ihis=0; ihis<2; ihis++){
      THn* his = align->GetClusterDelta(ihis);
      for (Int_t iaxis=0; iaxis<his->GetNdimensions(); iaxis++) {
	xxx[iaxis]=his->GetAxis(iaxis)->GetXmin()+gRandom->Rndm()*(his->GetAxis(iaxis)->GetXmax()-his->GetAxis(iaxis)->GetXmin());
      }
      his->Fill(xxx);
    }
    for (Int_t ihis=0; ihis<4; ihis++){
      THnSparse* his = align->GetTrackletDelta(ihis);
      for (Int_t iaxis=0; iaxis<his->GetNdimensions(); iaxis++) {
	xxx[iaxis]=his->GetAxis(iaxis)->GetXmin()+gRandom->Rndm()*(his->GetAxis(iaxis)->GetXmax()-his->GetAxis(iaxis)->GetXmin());
      }
      his->Fill(xxx);
    }
  } 
  AliSysInfo::AddStamp("FillTrees");
  //
  // 2.) Write part
  //
  TFile * fout=new TFile("testAliTPCcalibAlignStreamer.root","recreate");
  AliSysInfo::AddStamp("WriteAlignStart");
  align->Write("alignTPC"); 
  AliSysInfo::AddStamp("WriteAlignEnd");
  fout->ls();
  fout->Close();
  delete fout;
  //
  // 3.) Read back - consistency check
  //
  fin=new TFile("testAliTPCcalibAlignStreamer.root");
  AliTPCcalibAlign * align2 = (AliTPCcalibAlign *)fin->Get("alignTPC");  
  AliSysInfo::AddStamp("ReadAlign2");
  if (align2==NULL){
    ::Fatal("UnitTestAliTPCcalibAlignStreamer","Alignemnt not read");
  }else{
    ::Info("UnitTestAliTPCcalibAlignStreamer","Alignemnt read-OK");
  }
  if (align2->GetClusterDelta(0)==NULL){
    ::Fatal("UnitTestAliTPCcalibAlignStreamer","histogram GetClusterDelta(0) not read");
  }else{
    ::Info("UnitTestAliTPCcalibAlignStreamer","histogram read GetClusterDelta(0) -OK");
  }
  if (align2->GetTrackletDelta(0)==NULL){
    ::Fatal("UnitTestAliTPCcalibAlignStreamer","histogram GetTrackletDelta(0)not read");
  }else{
    ::Info("UnitTestAliTPCcalibAlignStreamer","histogram read GetTrackletDelta(0) -OK");
  }

  if (align2->GetClusterDelta(0)->GetEntries()!=align->GetClusterDelta(0)->GetEntries()){
    ::Fatal("UnitTestAliTPCcalibAlignStreamer","histogram with different entries");
  }else{
    ::Info("UnitTestAliTPCcalibAlignStreamer","histogram cont. GettrackletDelta(0) -OK");
  }
  if (align2->GetTrackletDelta(0)->GetEntries()!=align->GetTrackletDelta(0)->GetEntries()){
    ::Fatal("UnitTestAliTPCcalibAlignStreamer","histogram with different entries");
  }
  //
  // 4.) Destructor check
  //
  delete align2;
  AliSysInfo::AddStamp("deleteAlign2");
  delete align;
  AliSysInfo::AddStamp("deleteAlign");
  //
  // 5.) Memory usage print
  //
  TTree * treeSys =AliSysInfo::MakeTree("syswatch.log");
  treeSys->Scan("sname:deltaVM:VM:pI.fMemResident","","colsize=30:15:15:20");

}

 UnitTest.C:1
 UnitTest.C:2
 UnitTest.C:3
 UnitTest.C:4
 UnitTest.C:5
 UnitTest.C:6
 UnitTest.C:7
 UnitTest.C:8
 UnitTest.C:9
 UnitTest.C:10
 UnitTest.C:11
 UnitTest.C:12
 UnitTest.C:13
 UnitTest.C:14
 UnitTest.C:15
 UnitTest.C:16
 UnitTest.C:17
 UnitTest.C:18
 UnitTest.C:19
 UnitTest.C:20
 UnitTest.C:21
 UnitTest.C:22
 UnitTest.C:23
 UnitTest.C:24
 UnitTest.C:25
 UnitTest.C:26
 UnitTest.C:27
 UnitTest.C:28
 UnitTest.C:29
 UnitTest.C:30
 UnitTest.C:31
 UnitTest.C:32
 UnitTest.C:33
 UnitTest.C:34
 UnitTest.C:35
 UnitTest.C:36
 UnitTest.C:37
 UnitTest.C:38
 UnitTest.C:39
 UnitTest.C:40
 UnitTest.C:41
 UnitTest.C:42
 UnitTest.C:43
 UnitTest.C:44
 UnitTest.C:45
 UnitTest.C:46
 UnitTest.C:47
 UnitTest.C:48
 UnitTest.C:49
 UnitTest.C:50
 UnitTest.C:51
 UnitTest.C:52
 UnitTest.C:53
 UnitTest.C:54
 UnitTest.C:55
 UnitTest.C:56
 UnitTest.C:57
 UnitTest.C:58
 UnitTest.C:59
 UnitTest.C:60
 UnitTest.C:61
 UnitTest.C:62
 UnitTest.C:63
 UnitTest.C:64
 UnitTest.C:65
 UnitTest.C:66
 UnitTest.C:67
 UnitTest.C:68
 UnitTest.C:69
 UnitTest.C:70
 UnitTest.C:71
 UnitTest.C:72
 UnitTest.C:73
 UnitTest.C:74
 UnitTest.C:75
 UnitTest.C:76
 UnitTest.C:77
 UnitTest.C:78
 UnitTest.C:79
 UnitTest.C:80
 UnitTest.C:81
 UnitTest.C:82
 UnitTest.C:83
 UnitTest.C:84
 UnitTest.C:85
 UnitTest.C:86
 UnitTest.C:87
 UnitTest.C:88
 UnitTest.C:89
 UnitTest.C:90
 UnitTest.C:91
 UnitTest.C:92
 UnitTest.C:93
 UnitTest.C:94
 UnitTest.C:95
 UnitTest.C:96
 UnitTest.C:97
 UnitTest.C:98
 UnitTest.C:99
 UnitTest.C:100
 UnitTest.C:101
 UnitTest.C:102
 UnitTest.C:103
 UnitTest.C:104
 UnitTest.C:105
 UnitTest.C:106
 UnitTest.C:107
 UnitTest.C:108
 UnitTest.C:109
 UnitTest.C:110
 UnitTest.C:111
 UnitTest.C:112
 UnitTest.C:113
 UnitTest.C:114
 UnitTest.C:115
 UnitTest.C:116
 UnitTest.C:117
 UnitTest.C:118
 UnitTest.C:119
 UnitTest.C:120
 UnitTest.C:121
 UnitTest.C:122
 UnitTest.C:123
 UnitTest.C:124
 UnitTest.C:125
 UnitTest.C:126
 UnitTest.C:127
 UnitTest.C:128
 UnitTest.C:129
 UnitTest.C:130
 UnitTest.C:131
 UnitTest.C:132
 UnitTest.C:133
 UnitTest.C:134
 UnitTest.C:135
 UnitTest.C:136
 UnitTest.C:137
 UnitTest.C:138
 UnitTest.C:139
 UnitTest.C:140
 UnitTest.C:141
 UnitTest.C:142
 UnitTest.C:143
 UnitTest.C:144
 UnitTest.C:145
 UnitTest.C:146
 UnitTest.C:147
 UnitTest.C:148
 UnitTest.C:149
 UnitTest.C:150
 UnitTest.C:151
 UnitTest.C:152
 UnitTest.C:153
 UnitTest.C:154
 UnitTest.C:155
 UnitTest.C:156
 UnitTest.C:157
 UnitTest.C:158
 UnitTest.C:159
 UnitTest.C:160
 UnitTest.C:161
 UnitTest.C:162
 UnitTest.C:163
 UnitTest.C:164
 UnitTest.C:165
 UnitTest.C:166
 UnitTest.C:167
 UnitTest.C:168
 UnitTest.C:169
 UnitTest.C:170
 UnitTest.C:171
 UnitTest.C:172
 UnitTest.C:173
 UnitTest.C:174
 UnitTest.C:175
 UnitTest.C:176
 UnitTest.C:177
 UnitTest.C:178
 UnitTest.C:179
 UnitTest.C:180
 UnitTest.C:181
 UnitTest.C:182
 UnitTest.C:183
 UnitTest.C:184
 UnitTest.C:185
 UnitTest.C:186
 UnitTest.C:187
 UnitTest.C:188