ROOT logo
// $Id$

/**************************************************************************
 * This file is property of and copyright by the ALICE HLT Project        * 
 * ALICE Experiment at CERN, All rights reserved.                         *
 *                                                                        *
 * Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
 *                  for The ALICE HLT Project.                            *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/** @file   testAliHLTTPCMapping.C
    @author Matthias Richter
    @date   
    @brief  Test macro/program for the AliHLTTPCMapping class
 */

#ifndef __CINT__
#include "TSystem.h"
#include "AliHLTTPCMapping.h"
#include "AliHLTTPCTransform.h"
#include <ostream>
#include <istream>
#endif //__CINT__

/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
//
// configuration of the test program
//

// printouts or not
const bool bVerbose=true;

/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////

class AliHLTTPCMapping;
bool compareMapping(int patch, AliHLTTPCMapping* mapper);

int testAliHLTTPCMapping()
{
  int iResult=0;
#ifdef __CINT__
  gSystem->Load("libAliHLTUtil.so");
  gSystem->Load("libAliHLTRCU.so");
  gSystem->Load("libAliHLTTPC.so");
#endif
  //AliHLTSystem gHLT;

  const int nofMappers=6;
  AliHLTTPCMapping* mappers[nofMappers];
  AliHLTTPCMapping* mappers2[nofMappers];
  for (int i=0; i<nofMappers; i++) {
    mappers[i]=NULL;
    mappers2[i]=NULL;
  }

  // create mappers
  for (int i=0; i<nofMappers; i++) {
    mappers[i]=new AliHLTTPCMapping(i);
  }

  // check mappers
  for (int i=0; i<nofMappers; i++) {
    if (!compareMapping(i, mappers[i])) {
      iResult=-1;
    }
  }
  cout << "checking: 1st instance:";
  if (iResult<0) 
    cout << " failed" << endl;
  else {
    cout << " ok" << endl;

    // create 2nd instance
    for (int i=0; i<nofMappers; i++) {
      mappers2[i]=new AliHLTTPCMapping(i);
    }

    // check 2nd instance
    for (int i=0; i<nofMappers; i++) {
      if (!compareMapping(i, mappers2[i])) {
	iResult=-1;
      }
    }
    cout << "checking: 2nd instance:";
    if (iResult<0) 
      cout << " failed" << endl;
    else
      cout << " ok" << endl;
  }

  // delete mappers
  for (int i=0; i<nofMappers; i++) {
    if (mappers[i]) delete mappers[i];
    if (mappers2[i]) delete mappers2[i];
  }
  return iResult;
}

bool compareMapping(int patch, AliHLTTPCMapping* mapper)
{
  bool result=true;
  if (!mapper) return false;
  ifstream inFile;
  TString filename;
  const char* basePath=getenv("ALICE_ROOT");
  if (basePath) {
    filename.Form("%s/TPC/mapping/Patch%d.data", basePath,patch);
  }
  inFile.open(filename.Data());
  if (!inFile) {
    cout << "Unable to open file: " << filename << endl;
    return false;
  }

  UInt_t nHWAdd=0;
  UInt_t maxHWAdd=0;
  UInt_t hwAdd=0;
  UInt_t row=0;
  UInt_t pad=0;
  Int_t dummy=0;
  Int_t rowOffset=0;
  result=AliHLTTPCTransform::Slice2Sector(0, AliHLTTPCTransform::GetFirstRow(patch), dummy, rowOffset);
  
  if(inFile >> nHWAdd && inFile >> maxHWAdd) {
    while(result && inFile>>hwAdd && inFile>>row && inFile>>pad){
      row-=rowOffset;
      if (row!=mapper->GetRow(hwAdd) || pad!=mapper->GetPad(hwAdd)) {
	cout << "channel to row/pad mapping mismatch at channel " << hwAdd << ": expected " << row << "/" << pad << "  got " << mapper->GetRow(hwAdd) << "/" << mapper->GetPad(hwAdd) << endl;
	result=false;
	break;
      }
      if (hwAdd!=mapper->GetHwAddress(row, pad)) {
	cout << "row/pad to channel mapping mismatch for " << row << "/" << pad << ": expected channel:" << hwAdd << "  got " << mapper->GetHwAddress(row,pad) << endl;
	result=false;
	break;
      }
    }
  }
  inFile.close();
  return result;  
}

int main(int /*argc*/, const char** /*argv*/)
{
  return testAliHLTTPCMapping();
}
 testAliHLTTPCMapping.C:1
 testAliHLTTPCMapping.C:2
 testAliHLTTPCMapping.C:3
 testAliHLTTPCMapping.C:4
 testAliHLTTPCMapping.C:5
 testAliHLTTPCMapping.C:6
 testAliHLTTPCMapping.C:7
 testAliHLTTPCMapping.C:8
 testAliHLTTPCMapping.C:9
 testAliHLTTPCMapping.C:10
 testAliHLTTPCMapping.C:11
 testAliHLTTPCMapping.C:12
 testAliHLTTPCMapping.C:13
 testAliHLTTPCMapping.C:14
 testAliHLTTPCMapping.C:15
 testAliHLTTPCMapping.C:16
 testAliHLTTPCMapping.C:17
 testAliHLTTPCMapping.C:18
 testAliHLTTPCMapping.C:19
 testAliHLTTPCMapping.C:20
 testAliHLTTPCMapping.C:21
 testAliHLTTPCMapping.C:22
 testAliHLTTPCMapping.C:23
 testAliHLTTPCMapping.C:24
 testAliHLTTPCMapping.C:25
 testAliHLTTPCMapping.C:26
 testAliHLTTPCMapping.C:27
 testAliHLTTPCMapping.C:28
 testAliHLTTPCMapping.C:29
 testAliHLTTPCMapping.C:30
 testAliHLTTPCMapping.C:31
 testAliHLTTPCMapping.C:32
 testAliHLTTPCMapping.C:33
 testAliHLTTPCMapping.C:34
 testAliHLTTPCMapping.C:35
 testAliHLTTPCMapping.C:36
 testAliHLTTPCMapping.C:37
 testAliHLTTPCMapping.C:38
 testAliHLTTPCMapping.C:39
 testAliHLTTPCMapping.C:40
 testAliHLTTPCMapping.C:41
 testAliHLTTPCMapping.C:42
 testAliHLTTPCMapping.C:43
 testAliHLTTPCMapping.C:44
 testAliHLTTPCMapping.C:45
 testAliHLTTPCMapping.C:46
 testAliHLTTPCMapping.C:47
 testAliHLTTPCMapping.C:48
 testAliHLTTPCMapping.C:49
 testAliHLTTPCMapping.C:50
 testAliHLTTPCMapping.C:51
 testAliHLTTPCMapping.C:52
 testAliHLTTPCMapping.C:53
 testAliHLTTPCMapping.C:54
 testAliHLTTPCMapping.C:55
 testAliHLTTPCMapping.C:56
 testAliHLTTPCMapping.C:57
 testAliHLTTPCMapping.C:58
 testAliHLTTPCMapping.C:59
 testAliHLTTPCMapping.C:60
 testAliHLTTPCMapping.C:61
 testAliHLTTPCMapping.C:62
 testAliHLTTPCMapping.C:63
 testAliHLTTPCMapping.C:64
 testAliHLTTPCMapping.C:65
 testAliHLTTPCMapping.C:66
 testAliHLTTPCMapping.C:67
 testAliHLTTPCMapping.C:68
 testAliHLTTPCMapping.C:69
 testAliHLTTPCMapping.C:70
 testAliHLTTPCMapping.C:71
 testAliHLTTPCMapping.C:72
 testAliHLTTPCMapping.C:73
 testAliHLTTPCMapping.C:74
 testAliHLTTPCMapping.C:75
 testAliHLTTPCMapping.C:76
 testAliHLTTPCMapping.C:77
 testAliHLTTPCMapping.C:78
 testAliHLTTPCMapping.C:79
 testAliHLTTPCMapping.C:80
 testAliHLTTPCMapping.C:81
 testAliHLTTPCMapping.C:82
 testAliHLTTPCMapping.C:83
 testAliHLTTPCMapping.C:84
 testAliHLTTPCMapping.C:85
 testAliHLTTPCMapping.C:86
 testAliHLTTPCMapping.C:87
 testAliHLTTPCMapping.C:88
 testAliHLTTPCMapping.C:89
 testAliHLTTPCMapping.C:90
 testAliHLTTPCMapping.C:91
 testAliHLTTPCMapping.C:92
 testAliHLTTPCMapping.C:93
 testAliHLTTPCMapping.C:94
 testAliHLTTPCMapping.C:95
 testAliHLTTPCMapping.C:96
 testAliHLTTPCMapping.C:97
 testAliHLTTPCMapping.C:98
 testAliHLTTPCMapping.C:99
 testAliHLTTPCMapping.C:100
 testAliHLTTPCMapping.C:101
 testAliHLTTPCMapping.C:102
 testAliHLTTPCMapping.C:103
 testAliHLTTPCMapping.C:104
 testAliHLTTPCMapping.C:105
 testAliHLTTPCMapping.C:106
 testAliHLTTPCMapping.C:107
 testAliHLTTPCMapping.C:108
 testAliHLTTPCMapping.C:109
 testAliHLTTPCMapping.C:110
 testAliHLTTPCMapping.C:111
 testAliHLTTPCMapping.C:112
 testAliHLTTPCMapping.C:113
 testAliHLTTPCMapping.C:114
 testAliHLTTPCMapping.C:115
 testAliHLTTPCMapping.C:116
 testAliHLTTPCMapping.C:117
 testAliHLTTPCMapping.C:118
 testAliHLTTPCMapping.C:119
 testAliHLTTPCMapping.C:120
 testAliHLTTPCMapping.C:121
 testAliHLTTPCMapping.C:122
 testAliHLTTPCMapping.C:123
 testAliHLTTPCMapping.C:124
 testAliHLTTPCMapping.C:125
 testAliHLTTPCMapping.C:126
 testAliHLTTPCMapping.C:127
 testAliHLTTPCMapping.C:128
 testAliHLTTPCMapping.C:129
 testAliHLTTPCMapping.C:130
 testAliHLTTPCMapping.C:131
 testAliHLTTPCMapping.C:132
 testAliHLTTPCMapping.C:133
 testAliHLTTPCMapping.C:134
 testAliHLTTPCMapping.C:135
 testAliHLTTPCMapping.C:136
 testAliHLTTPCMapping.C:137
 testAliHLTTPCMapping.C:138
 testAliHLTTPCMapping.C:139
 testAliHLTTPCMapping.C:140
 testAliHLTTPCMapping.C:141
 testAliHLTTPCMapping.C:142
 testAliHLTTPCMapping.C:143
 testAliHLTTPCMapping.C:144
 testAliHLTTPCMapping.C:145
 testAliHLTTPCMapping.C:146
 testAliHLTTPCMapping.C:147
 testAliHLTTPCMapping.C:148
 testAliHLTTPCMapping.C:149
 testAliHLTTPCMapping.C:150
 testAliHLTTPCMapping.C:151
 testAliHLTTPCMapping.C:152
 testAliHLTTPCMapping.C:153
 testAliHLTTPCMapping.C:154
 testAliHLTTPCMapping.C:155
 testAliHLTTPCMapping.C:156
 testAliHLTTPCMapping.C:157
 testAliHLTTPCMapping.C:158
 testAliHLTTPCMapping.C:159