+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(t<tcounter){
+ pcounter=0;
+ altromem[--counter]=0xFFFF; //mark return
+
+ //make packets
+ while((pcounter<ALTRO_SIZE) && (t<tcounter)){
+
+ //find sequence
+ i=t;
+ ltime=times_per_pad[t];
+ j=0;
+ while((i+1<tcounter)&&(times_per_pad[i+1]==ltime+j+1)){
+ i++;
+ j++;
+ }
+ seqlength=j+1; //number of consecutive times
+ htime=times_per_pad[i]; //abs. time for sequence
+/*
+ cout << " counter " << counter << endl;
+ if(htime!=ltime+j){
+ cerr << "Error: " << ltime << " - " << htime << endl;
+ exit(1);
+ }
+*/
+ //store charges of sequence
+ for(UShort_t k=0;k<seqlength;k++){
+ altromem[--counter]=charges_per_pad[t];
+ pcounter++;
+ t++;
+ }
+
+ altromem[--counter]=htime; //store abs. time of sequence
+ pcounter++;
+ altromem[--counter]=seqlength+2; //store length of sequence
+ pcounter++;
+ }
+
+ AddTrailer();
+ }