From faebf2f5a62923a87d7ee7523a38e7f28026e94a Mon Sep 17 00:00:00 2001 From: loizides Date: Wed, 29 May 2002 18:06:57 +0000 Subject: [PATCH] Added capability to handle backlinked list properly. --- HLT/misc/AliL3AltroMemHandler.cxx | 193 ++++++++++++++++++------------ HLT/misc/AliL3AltroMemHandler.h | 36 ++++-- 2 files changed, 144 insertions(+), 85 deletions(-) diff --git a/HLT/misc/AliL3AltroMemHandler.cxx b/HLT/misc/AliL3AltroMemHandler.cxx index a32e8d7c05e..9c4ab6c7e40 100644 --- a/HLT/misc/AliL3AltroMemHandler.cxx +++ b/HLT/misc/AliL3AltroMemHandler.cxx @@ -9,9 +9,8 @@ Author: Constantin Loizides /** \class 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. -// As soon as you have more than 35 digits per pad, this class needs to -// improved to properly handle the backlinked list. */ ClassImp(AliL3AltroMemHandler) @@ -20,95 +19,128 @@ AliL3AltroMemHandler::AliL3AltroMemHandler(){ Clear(); }; -Bool_t AliL3AltroMemHandler::Write(UShort_t row, UChar_t pad, UShort_t charge, UShort_t time) -{ - Bool_t redo=kFALSE; - - if((counter==0)||(tcounter==0)){ //new package or new sequence - ltime=time; - lpad=pad; - lrow=row; - altromem[counter]=charge; - counter++; - tcounter++; - } else if ((row==lrow)&&(pad==lpad)) { - if(time-ltime==1){ //add charge to sequence - ltime=time; - altromem[counter]=charge; - counter++; - tcounter++; - - if(counter==MAX_VALS){ - WriteFinal(); - Clear(); - } - } else { //finish old sequence - altromem[counter]=ltime; - counter++; - altromem[counter]=tcounter+2; - counter++; - - //start new sequence - if(counter==MAX_VALS){ - WriteTrailer(); - Clear(); - } else tcounter=0; - - redo=kTRUE; - } - } else { //finish old package - WriteFinal(); - Clear(); - - //start new package - redo=kTRUE; - } - - if(redo==kTRUE) Write(row,pad,charge,time); - return kTRUE; -}; - void AliL3AltroMemHandler::Clear(){ memset(altromem,0,ALTRO_SIZE); - counter=0; + memset(times_per_pad,0,1024); + memset(charges_per_pad,0,1024); + counter=ALTRO_SIZE; tcounter=0; lpad=0; - ltime=0; lrow=0; flag=kFALSE; }; -Bool_t AliL3AltroMemHandler::WriteFinal(){ - if(counter>0){ - altromem[counter]=ltime; - counter++; - altromem[counter]=tcounter+2; - counter++; - WriteTrailer(); - } - return kTRUE; +void AliL3AltroMemHandler::Write(UShort_t row, UChar_t pad, UShort_t charge, UShort_t time) +{ + 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; + int ddd=0; + while(t0){ + MakeAltroPackets(); + Write(); + } } /* @@ -128,5 +160,16 @@ Bool_t AliL3AltroMemHandler::SetBinaryOutput(FILE *file){ LOG(AliL3Log::kWarning,"AliL3AltroMemHandler::SetBinaryOutput","File Open") <<"Pointer to File = 0x0 "<