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   testAliHLTTPCDigitReaderPacked.C
    @author Matthias Richter
    @date   
    @brief  Test macro/program for the AliHLTTPCDigitReaderPacked
 */

#ifndef __CINT__
#include "TSystem.h"
#include "AliHLTSystem.h"
#include "AliRawDataHeader.h"
#include "AliHLTAltroGenerator.h"
#include "AliHLTTPCDigitReaderPacked.h"
#include <ostream>
#endif //__CINT__

#ifndef __CINT__
const int sizeofAliRawDataHeader=sizeof(AliRawDataHeader);
#else
// cint does not handle sizeof correctly
const int sizeofAliRawDataHeader=32;
#endif

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

// printouts or not
const bool bVerbose=true;

// some defaults
const int maxChannels=10;
const int maxBunches=10;
const int maxBunchLength=10;
const int maxTimebin=1024;
const int maxSignal=1024;

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

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

  AliHLTAltroGenerator generator(maxChannels, maxBunches, maxBunchLength, maxTimebin, maxSignal);
  //generator.SetDirection(AliHLTAltroGenerator::kForwards);
  if ((iResult=generator.Generate())<0) return iResult;

  ///////////////////////////////////////////////////////////////////////////////////////////////////
  if (bVerbose) {
    cout << "***************************************************************" << endl;
    cout << "************** Dumping simulated Altro data *******************" << endl;
    generator.Print();
    cout << endl;
  }

  ///////////////////////////////////////////////////////////////////////////////////////////////////
  AliRawDataHeader cdh;
  generator.SetCDH(&cdh, 32);

  UInt_t trailer=0;
  generator.SetRCUTrailer((UChar_t*)&trailer, 4);

  UChar_t* pBuffer=NULL;
  Int_t size=generator.GetData(pBuffer);

  int partition=0;
  if (bVerbose) {
    AliHLTTPCDigitReaderPacked decoder;
    decoder.SetOldRCUFormat(true);
    decoder.SetUnsorted(true);
    if ((iResult=decoder.InitBlock(pBuffer, size, partition, 0))>=0) {
      cout << "***************************************************************" << endl;
      cout << "********************** reading bunch model  *******************" << endl;
      while (iResult>=0 && decoder.NextChannel()) {
	cout << "***************************************************************" << endl;
	cout << "channel address: " << decoder.GetAltroBlockHWaddr() << endl;

	while (iResult>=0 && decoder.NextBunch()) {
	  int bunchLength=decoder.GetBunchSize();
	  cout << "   length " << bunchLength << " time " << decoder.GetTime() << ":     ";
	  const UInt_t* pData=decoder.GetSignals();
	  while (bunchLength-->0 && pData) {
	    cout << " " << *pData++;
	  }
	  cout << endl;
	}
      }
      cout << endl;
    }
  }   

  ///////////////////////////////////////////////////////////////////////////////////////////////////
  if (bVerbose) {
    AliHLTTPCDigitReaderPacked decoder;
    decoder.SetOldRCUFormat(true);
    decoder.SetUnsorted(true);
    if ((iResult=decoder.InitBlock(pBuffer, size, partition, 0))>=0) {
      int lastChannel=-1;
      int lastTime=-1;
      cout << "***************************************************************" << endl;
      cout << "********************** reading stream model *******************" << endl;
      while (iResult>=0 && decoder.Next()) {
	if (lastTime>=0 && lastTime!=decoder.GetTime()+1 && lastTime!=decoder.GetTime()-1)
	  cout << endl;
	
	if (lastChannel<0 || lastChannel!=(int)decoder.GetAltroBlockHWaddr()) {
	  cout << "***************************************************************" << endl;
	  cout << "channel address: " << decoder.GetAltroBlockHWaddr() << endl;
	}

	if (lastTime<0 || (lastTime!=decoder.GetTime()+1 && lastTime!=decoder.GetTime()-1))
	  cout << " time " << decoder.GetTime() << ":     ";

	cout << " " << decoder.GetSignal();

	lastChannel=decoder.GetAltroBlockHWaddr();
	lastTime=decoder.GetTime();
      }
      cout << endl;
      cout << endl;
    }    
  }

  ///////////////////////////////////////////////////////////////////////////////////////////////////
  if (bVerbose) {
    cout << "***************************************************************" << endl;
    cout << "********************* comparing encoded data ******************" << endl;
    cout << "***************************************************************" << endl;
  }

  generator.Rewind();
  AliHLTTPCDigitReaderPacked decoder;
  decoder.SetUnsorted(true);
  if (iResult>=0) iResult=decoder.InitBlock(pBuffer, size, partition, 0);
  while (iResult>=0 && decoder.NextChannel()) {
    if (!generator.NextChannel()) {
      cout << "error getting next simulated channel" << endl;
      iResult=-1;
      break;
    }
    int hwadd=decoder.GetAltroBlockHWaddr();
    if (hwadd!=generator.GetHwAddress()) {
      cout << "channel address missmatch: simulated " << generator.GetHwAddress() << " encoded " << hwadd << endl;
      iResult=-1;
      break;
    }

    if (bVerbose) cout << "comparing channel " << hwadd << endl;

    while (iResult>=0 && decoder.NextBunch()) {
      if (!generator.NextBunch()) {
	cout << "error getting bunch in simulated data" <<endl;
	iResult=-1;
	break;
      }
      int bunchLength=decoder.GetBunchSize();
      if (bunchLength!=(int)generator.GetBunchSize()) {
	cout << "bunch length missmatch: simulated " << generator.GetBunchSize() << " encoded " << bunchLength << hex << " (" << bunchLength << ")" << dec << endl;
	iResult=-1;
	break;
      }
      int bunchStartTime=decoder.GetTime();
	if (bunchStartTime!=(int)generator.GetStartTime()) {
	cout << "bunch end time missmatch: simulated " << generator.GetStartTime() << " encoded " << bunchStartTime << endl;
	iResult=-1;
	break;
      }
      if (bVerbose) cout << " bunch length " << bunchLength << ", end time " << bunchStartTime << endl;
      const  UInt_t* bunchData=decoder.GetSignals();
      const  Short_t* simData=generator.GetSignals();
      for (int bin=0; bin<bunchLength; bin++) {
	if ((Short_t)bunchData[bin]!=simData[bin]) {
	  cout << "data missmatch at bunch position " << bin << " : simulated " << simData[bin] << " encoded " << bunchData[bin] << endl;
	  iResult=-1;
	  break;
	}
      }
    }
  }

  return 0;
}

int main(int /*argc*/, const char** /*argv*/)
{
  int iResult=0;
  int iCount=1;
  for (int i=0; i<iCount; i++) {
    if ((iResult=testAliHLTTPCDigitReaderPacked())<0) {
      cout << "missmatch in cycle no " << i << endl;
      return iResult;
    }
  }
  cout << "checking: "<< iCount << " encoding cycle(s) successfully tested" << endl;
  return 0;
}
 testAliHLTTPCDigitReaderPacked.C:1
 testAliHLTTPCDigitReaderPacked.C:2
 testAliHLTTPCDigitReaderPacked.C:3
 testAliHLTTPCDigitReaderPacked.C:4
 testAliHLTTPCDigitReaderPacked.C:5
 testAliHLTTPCDigitReaderPacked.C:6
 testAliHLTTPCDigitReaderPacked.C:7
 testAliHLTTPCDigitReaderPacked.C:8
 testAliHLTTPCDigitReaderPacked.C:9
 testAliHLTTPCDigitReaderPacked.C:10
 testAliHLTTPCDigitReaderPacked.C:11
 testAliHLTTPCDigitReaderPacked.C:12
 testAliHLTTPCDigitReaderPacked.C:13
 testAliHLTTPCDigitReaderPacked.C:14
 testAliHLTTPCDigitReaderPacked.C:15
 testAliHLTTPCDigitReaderPacked.C:16
 testAliHLTTPCDigitReaderPacked.C:17
 testAliHLTTPCDigitReaderPacked.C:18
 testAliHLTTPCDigitReaderPacked.C:19
 testAliHLTTPCDigitReaderPacked.C:20
 testAliHLTTPCDigitReaderPacked.C:21
 testAliHLTTPCDigitReaderPacked.C:22
 testAliHLTTPCDigitReaderPacked.C:23
 testAliHLTTPCDigitReaderPacked.C:24
 testAliHLTTPCDigitReaderPacked.C:25
 testAliHLTTPCDigitReaderPacked.C:26
 testAliHLTTPCDigitReaderPacked.C:27
 testAliHLTTPCDigitReaderPacked.C:28
 testAliHLTTPCDigitReaderPacked.C:29
 testAliHLTTPCDigitReaderPacked.C:30
 testAliHLTTPCDigitReaderPacked.C:31
 testAliHLTTPCDigitReaderPacked.C:32
 testAliHLTTPCDigitReaderPacked.C:33
 testAliHLTTPCDigitReaderPacked.C:34
 testAliHLTTPCDigitReaderPacked.C:35
 testAliHLTTPCDigitReaderPacked.C:36
 testAliHLTTPCDigitReaderPacked.C:37
 testAliHLTTPCDigitReaderPacked.C:38
 testAliHLTTPCDigitReaderPacked.C:39
 testAliHLTTPCDigitReaderPacked.C:40
 testAliHLTTPCDigitReaderPacked.C:41
 testAliHLTTPCDigitReaderPacked.C:42
 testAliHLTTPCDigitReaderPacked.C:43
 testAliHLTTPCDigitReaderPacked.C:44
 testAliHLTTPCDigitReaderPacked.C:45
 testAliHLTTPCDigitReaderPacked.C:46
 testAliHLTTPCDigitReaderPacked.C:47
 testAliHLTTPCDigitReaderPacked.C:48
 testAliHLTTPCDigitReaderPacked.C:49
 testAliHLTTPCDigitReaderPacked.C:50
 testAliHLTTPCDigitReaderPacked.C:51
 testAliHLTTPCDigitReaderPacked.C:52
 testAliHLTTPCDigitReaderPacked.C:53
 testAliHLTTPCDigitReaderPacked.C:54
 testAliHLTTPCDigitReaderPacked.C:55
 testAliHLTTPCDigitReaderPacked.C:56
 testAliHLTTPCDigitReaderPacked.C:57
 testAliHLTTPCDigitReaderPacked.C:58
 testAliHLTTPCDigitReaderPacked.C:59
 testAliHLTTPCDigitReaderPacked.C:60
 testAliHLTTPCDigitReaderPacked.C:61
 testAliHLTTPCDigitReaderPacked.C:62
 testAliHLTTPCDigitReaderPacked.C:63
 testAliHLTTPCDigitReaderPacked.C:64
 testAliHLTTPCDigitReaderPacked.C:65
 testAliHLTTPCDigitReaderPacked.C:66
 testAliHLTTPCDigitReaderPacked.C:67
 testAliHLTTPCDigitReaderPacked.C:68
 testAliHLTTPCDigitReaderPacked.C:69
 testAliHLTTPCDigitReaderPacked.C:70
 testAliHLTTPCDigitReaderPacked.C:71
 testAliHLTTPCDigitReaderPacked.C:72
 testAliHLTTPCDigitReaderPacked.C:73
 testAliHLTTPCDigitReaderPacked.C:74
 testAliHLTTPCDigitReaderPacked.C:75
 testAliHLTTPCDigitReaderPacked.C:76
 testAliHLTTPCDigitReaderPacked.C:77
 testAliHLTTPCDigitReaderPacked.C:78
 testAliHLTTPCDigitReaderPacked.C:79
 testAliHLTTPCDigitReaderPacked.C:80
 testAliHLTTPCDigitReaderPacked.C:81
 testAliHLTTPCDigitReaderPacked.C:82
 testAliHLTTPCDigitReaderPacked.C:83
 testAliHLTTPCDigitReaderPacked.C:84
 testAliHLTTPCDigitReaderPacked.C:85
 testAliHLTTPCDigitReaderPacked.C:86
 testAliHLTTPCDigitReaderPacked.C:87
 testAliHLTTPCDigitReaderPacked.C:88
 testAliHLTTPCDigitReaderPacked.C:89
 testAliHLTTPCDigitReaderPacked.C:90
 testAliHLTTPCDigitReaderPacked.C:91
 testAliHLTTPCDigitReaderPacked.C:92
 testAliHLTTPCDigitReaderPacked.C:93
 testAliHLTTPCDigitReaderPacked.C:94
 testAliHLTTPCDigitReaderPacked.C:95
 testAliHLTTPCDigitReaderPacked.C:96
 testAliHLTTPCDigitReaderPacked.C:97
 testAliHLTTPCDigitReaderPacked.C:98
 testAliHLTTPCDigitReaderPacked.C:99
 testAliHLTTPCDigitReaderPacked.C:100
 testAliHLTTPCDigitReaderPacked.C:101
 testAliHLTTPCDigitReaderPacked.C:102
 testAliHLTTPCDigitReaderPacked.C:103
 testAliHLTTPCDigitReaderPacked.C:104
 testAliHLTTPCDigitReaderPacked.C:105
 testAliHLTTPCDigitReaderPacked.C:106
 testAliHLTTPCDigitReaderPacked.C:107
 testAliHLTTPCDigitReaderPacked.C:108
 testAliHLTTPCDigitReaderPacked.C:109
 testAliHLTTPCDigitReaderPacked.C:110
 testAliHLTTPCDigitReaderPacked.C:111
 testAliHLTTPCDigitReaderPacked.C:112
 testAliHLTTPCDigitReaderPacked.C:113
 testAliHLTTPCDigitReaderPacked.C:114
 testAliHLTTPCDigitReaderPacked.C:115
 testAliHLTTPCDigitReaderPacked.C:116
 testAliHLTTPCDigitReaderPacked.C:117
 testAliHLTTPCDigitReaderPacked.C:118
 testAliHLTTPCDigitReaderPacked.C:119
 testAliHLTTPCDigitReaderPacked.C:120
 testAliHLTTPCDigitReaderPacked.C:121
 testAliHLTTPCDigitReaderPacked.C:122
 testAliHLTTPCDigitReaderPacked.C:123
 testAliHLTTPCDigitReaderPacked.C:124
 testAliHLTTPCDigitReaderPacked.C:125
 testAliHLTTPCDigitReaderPacked.C:126
 testAliHLTTPCDigitReaderPacked.C:127
 testAliHLTTPCDigitReaderPacked.C:128
 testAliHLTTPCDigitReaderPacked.C:129
 testAliHLTTPCDigitReaderPacked.C:130
 testAliHLTTPCDigitReaderPacked.C:131
 testAliHLTTPCDigitReaderPacked.C:132
 testAliHLTTPCDigitReaderPacked.C:133
 testAliHLTTPCDigitReaderPacked.C:134
 testAliHLTTPCDigitReaderPacked.C:135
 testAliHLTTPCDigitReaderPacked.C:136
 testAliHLTTPCDigitReaderPacked.C:137
 testAliHLTTPCDigitReaderPacked.C:138
 testAliHLTTPCDigitReaderPacked.C:139
 testAliHLTTPCDigitReaderPacked.C:140
 testAliHLTTPCDigitReaderPacked.C:141
 testAliHLTTPCDigitReaderPacked.C:142
 testAliHLTTPCDigitReaderPacked.C:143
 testAliHLTTPCDigitReaderPacked.C:144
 testAliHLTTPCDigitReaderPacked.C:145
 testAliHLTTPCDigitReaderPacked.C:146
 testAliHLTTPCDigitReaderPacked.C:147
 testAliHLTTPCDigitReaderPacked.C:148
 testAliHLTTPCDigitReaderPacked.C:149
 testAliHLTTPCDigitReaderPacked.C:150
 testAliHLTTPCDigitReaderPacked.C:151
 testAliHLTTPCDigitReaderPacked.C:152
 testAliHLTTPCDigitReaderPacked.C:153
 testAliHLTTPCDigitReaderPacked.C:154
 testAliHLTTPCDigitReaderPacked.C:155
 testAliHLTTPCDigitReaderPacked.C:156
 testAliHLTTPCDigitReaderPacked.C:157
 testAliHLTTPCDigitReaderPacked.C:158
 testAliHLTTPCDigitReaderPacked.C:159
 testAliHLTTPCDigitReaderPacked.C:160
 testAliHLTTPCDigitReaderPacked.C:161
 testAliHLTTPCDigitReaderPacked.C:162
 testAliHLTTPCDigitReaderPacked.C:163
 testAliHLTTPCDigitReaderPacked.C:164
 testAliHLTTPCDigitReaderPacked.C:165
 testAliHLTTPCDigitReaderPacked.C:166
 testAliHLTTPCDigitReaderPacked.C:167
 testAliHLTTPCDigitReaderPacked.C:168
 testAliHLTTPCDigitReaderPacked.C:169
 testAliHLTTPCDigitReaderPacked.C:170
 testAliHLTTPCDigitReaderPacked.C:171
 testAliHLTTPCDigitReaderPacked.C:172
 testAliHLTTPCDigitReaderPacked.C:173
 testAliHLTTPCDigitReaderPacked.C:174
 testAliHLTTPCDigitReaderPacked.C:175
 testAliHLTTPCDigitReaderPacked.C:176
 testAliHLTTPCDigitReaderPacked.C:177
 testAliHLTTPCDigitReaderPacked.C:178
 testAliHLTTPCDigitReaderPacked.C:179
 testAliHLTTPCDigitReaderPacked.C:180
 testAliHLTTPCDigitReaderPacked.C:181
 testAliHLTTPCDigitReaderPacked.C:182
 testAliHLTTPCDigitReaderPacked.C:183
 testAliHLTTPCDigitReaderPacked.C:184
 testAliHLTTPCDigitReaderPacked.C:185
 testAliHLTTPCDigitReaderPacked.C:186
 testAliHLTTPCDigitReaderPacked.C:187
 testAliHLTTPCDigitReaderPacked.C:188
 testAliHLTTPCDigitReaderPacked.C:189
 testAliHLTTPCDigitReaderPacked.C:190
 testAliHLTTPCDigitReaderPacked.C:191
 testAliHLTTPCDigitReaderPacked.C:192
 testAliHLTTPCDigitReaderPacked.C:193
 testAliHLTTPCDigitReaderPacked.C:194
 testAliHLTTPCDigitReaderPacked.C:195
 testAliHLTTPCDigitReaderPacked.C:196
 testAliHLTTPCDigitReaderPacked.C:197
 testAliHLTTPCDigitReaderPacked.C:198
 testAliHLTTPCDigitReaderPacked.C:199
 testAliHLTTPCDigitReaderPacked.C:200
 testAliHLTTPCDigitReaderPacked.C:201
 testAliHLTTPCDigitReaderPacked.C:202
 testAliHLTTPCDigitReaderPacked.C:203
 testAliHLTTPCDigitReaderPacked.C:204
 testAliHLTTPCDigitReaderPacked.C:205
 testAliHLTTPCDigitReaderPacked.C:206
 testAliHLTTPCDigitReaderPacked.C:207
 testAliHLTTPCDigitReaderPacked.C:208
 testAliHLTTPCDigitReaderPacked.C:209
 testAliHLTTPCDigitReaderPacked.C:210
 testAliHLTTPCDigitReaderPacked.C:211
 testAliHLTTPCDigitReaderPacked.C:212
 testAliHLTTPCDigitReaderPacked.C:213
 testAliHLTTPCDigitReaderPacked.C:214
 testAliHLTTPCDigitReaderPacked.C:215
 testAliHLTTPCDigitReaderPacked.C:216
 testAliHLTTPCDigitReaderPacked.C:217
 testAliHLTTPCDigitReaderPacked.C:218
 testAliHLTTPCDigitReaderPacked.C:219
 testAliHLTTPCDigitReaderPacked.C:220
 testAliHLTTPCDigitReaderPacked.C:221
 testAliHLTTPCDigitReaderPacked.C:222
 testAliHLTTPCDigitReaderPacked.C:223
 testAliHLTTPCDigitReaderPacked.C:224
 testAliHLTTPCDigitReaderPacked.C:225