/* $Id$ Author: Constantin Loizides */ #include #include #include #include "AliL3AltroMemHandler.h" /** \class AliL3AltroMemHandler //
//--------------------------------------------------------------------
// AliL3AltroMemHandler
//
// Converts digits in memory into a backlinked ALTRO like data format.
// Its output file is used as input to the various VHDL testbenches.
// The file misc/read.cxx shows how to use this class.
*/

ClassImp(AliL3AltroMemHandler)

AliL3AltroMemHandler::AliL3AltroMemHandler(){
  Clear();
  ClearRead();
};

void AliL3AltroMemHandler::Clear(){
  memset(altromem,0,ALTRO_SIZE);
  memset(times_per_pad,0,1024);
  memset(charges_per_pad,0,1024);
  counter=ALTRO_SIZE;
  tcounter=0;
  lpad=0;
  lrow=0;
  flag=kFALSE;
};

void AliL3AltroMemHandler::ClearRead(){
  rcounter=0;
  scounter=0;
  rpad=0;
  rrow=0;
  rtime=0;
}

void AliL3AltroMemHandler::Write(UShort_t row, UChar_t pad, UShort_t time, UShort_t charge)
{
  if(tcounter==0){
    lrow=row;
    lpad=pad;
  } else if((lrow!=row) || (lpad!=pad)){
    MakeAltroPackets(); //make packets
    Write();            //write packets
    Clear();            //clear up for next pad

    lrow=row;
    lpad=pad;
  }

  Add(charge,time);
}

void AliL3AltroMemHandler::Add(UShort_t charge, UShort_t time)
{
  times_per_pad[tcounter]=time;
  charges_per_pad[tcounter]=charge;
  tcounter++;
}

void AliL3AltroMemHandler::MakeAltroPackets()
{
  UShort_t i=0,j=0;
  UShort_t t=0,seqlength;
  UShort_t htime,ltime;

  while(t=ALTRO_SIZE) break;

      //store charges of sequence
      for(UShort_t k=0;k0){
    MakeAltroPackets();
    Write();
  }
}

Bool_t AliL3AltroMemHandler::Read(UShort_t &row, UChar_t &pad, UShort_t &time, UShort_t &charge)
{
  if(flag==kTRUE) {
    LOG(AliL3Log::kWarning,"AliL3AltroMemHandler::Read","File Open")<<"Binary not supported!"<