]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFDDLRawData.cxx
Verbose printout commented out
[u/mrichter/AliRoot.git] / TOF / AliTOFDDLRawData.cxx
index 2f6323f24e229362604177d21a021946810b3d75..73585d44102f448c51f42b822eb6d17372a5ec51 100644 (file)
 
 /*
 $Log$
+Revision 1.19  2007/06/22 11:37:47  cvetan
+Fixes in order to write correct raw-data on big-endian platforms (Marco)
+
+Revision 1.18  2007/05/21 13:26:19  decaro
+Correction on matching_window control and bug fixing (R.Preghenella)
+
+Revision 1.17  2007/05/10 09:29:34  hristov
+Last moment fixes and changes from v4-05-Release (Silvia)
+
 Revision 1.16  2007/05/03 09:07:22  decaro
 Double digit in the same TDC channel. Wrong sequence during the raw data writing in unpacked mode: solved
 
@@ -71,12 +80,14 @@ Revision 0.01  2004/6/11 A.De Caro, S.B.Sellitto, R.Silvestri
 #include "AliLog.h"
 //#include "AliRawDataHeader.h"
 #include "AliRawDataHeaderSim.h"
+#include "AliFstream.h"
 
 #include "AliTOFDDLRawData.h"
 #include "AliTOFDigitMap.h"
 #include "AliTOFdigit.h"
 #include "AliTOFGeometry.h"
 #include "AliTOFRawStream.h"
+//#include "AliTOFCableLengthMap.h"
 
 extern TRandom *gRandom;
 
@@ -84,81 +95,65 @@ ClassImp(AliTOFDDLRawData)
 
 //---------------------------------------------------------------------------
 AliTOFDDLRawData::AliTOFDDLRawData():
+  TObject(),
   fVerbose(0),
   fIndex(-1),
-  fPackedAcquisition(kTRUE),
+  fPackedAcquisition(kFALSE),
   fFakeOrphaneProduction(kFALSE),
   fMatchingWindow(8192),
-  fTOFgeometry(0),
   fTOFdigitMap(new AliTOFDigitMap()),
   fTOFdigitArray(0x0),
-  fTOFrawStream(new AliTOFRawStream())
+  fWordsPerDRM(0),
+  fWordsPerTRM(0),
+  fWordsPerChain(0)
 {
   //Default constructor
 }
-
-//----------------------------------------------------------------------------
-AliTOFDDLRawData::AliTOFDDLRawData(AliTOFGeometry *tofGeom):
-  fVerbose(0),
-  fIndex(-1),
-  fPackedAcquisition(kTRUE),
-  fFakeOrphaneProduction(kFALSE),
-  fMatchingWindow(8192),
-  fTOFgeometry(tofGeom),
-  fTOFdigitMap(new AliTOFDigitMap()),
-  fTOFdigitArray(0x0),
-  fTOFrawStream(new AliTOFRawStream())
-{
-  //Constructor
-
-}
-
 //----------------------------------------------------------------------------
 AliTOFDDLRawData::AliTOFDDLRawData(const AliTOFDDLRawData &source) :
   TObject(source),
-  fVerbose(0),
-  fIndex(-1),
-  fPackedAcquisition(kTRUE),
-  fFakeOrphaneProduction(kFALSE),
-  fMatchingWindow(8192),
-  fTOFgeometry(0),
-  fTOFdigitMap(new AliTOFDigitMap()),
-  fTOFdigitArray(0x0),
-  fTOFrawStream(new AliTOFRawStream())
+  fVerbose(source.fVerbose),
+  fIndex(source.fIndex),
+  fPackedAcquisition(source.fPackedAcquisition),
+  fFakeOrphaneProduction(source.fFakeOrphaneProduction),
+  fMatchingWindow(source.fMatchingWindow),
+  fTOFdigitMap(source.fTOFdigitMap),
+  fTOFdigitArray(source.fTOFdigitArray),
+  fWordsPerDRM(source.fWordsPerDRM),
+  fWordsPerTRM(source.fWordsPerTRM),
+  fWordsPerChain(source.fWordsPerChain)
  {
   //Copy Constructor
-  this->fIndex=source.fIndex;
-  this->fVerbose=source.fVerbose;
-  this->fPackedAcquisition=source.fPackedAcquisition;
-  this->fFakeOrphaneProduction=source.fFakeOrphaneProduction;
-  this->fMatchingWindow=source.fMatchingWindow;
-  this->fTOFgeometry=source.fTOFgeometry;
-  this->fTOFdigitMap=source.fTOFdigitMap;
-  this->fTOFdigitArray=source.fTOFdigitArray;
-  this->fTOFrawStream=source.fTOFrawStream;
   return;
 }
 
 //----------------------------------------------------------------------------
 AliTOFDDLRawData& AliTOFDDLRawData::operator=(const AliTOFDDLRawData &source) {
   //Assigment operator
-  this->fIndex=source.fIndex;
-  this->fVerbose=source.fVerbose;
-  this->fPackedAcquisition=source.fPackedAcquisition;
-  this->fFakeOrphaneProduction=source.fFakeOrphaneProduction;
-  this->fMatchingWindow=source.fMatchingWindow;
-  this->fTOFgeometry=source.fTOFgeometry;
-  this->fTOFdigitMap=source.fTOFdigitMap;
-  this->fTOFdigitArray=source.fTOFdigitArray;
-  this->fTOFrawStream=source.fTOFrawStream;
+
+  if (this == &source)
+    return *this;
+
+  TObject::operator=(source);
+  fIndex=source.fIndex;
+  fVerbose=source.fVerbose;
+  fPackedAcquisition=source.fPackedAcquisition;
+  fFakeOrphaneProduction=source.fFakeOrphaneProduction;
+  fMatchingWindow=source.fMatchingWindow;
+  fTOFdigitMap=source.fTOFdigitMap;
+  fTOFdigitArray=source.fTOFdigitArray;
+  fWordsPerDRM=source.fWordsPerDRM;
+  fWordsPerTRM=source.fWordsPerTRM;
+  fWordsPerChain=source.fWordsPerChain;
   return *this;
 }
 
 //----------------------------------------------------------------------------
 AliTOFDDLRawData::~AliTOFDDLRawData()
 {
+  // dtr
+
   delete fTOFdigitMap;
-  delete fTOFrawStream;
 }
 //----------------------------------------------------------------------------
 Int_t AliTOFDDLRawData::RawDataTOF(TBranch* branch)
@@ -167,18 +162,19 @@ Int_t AliTOFDDLRawData::RawDataTOF(TBranch* branch)
   // This method creates the Raw data files for TOF detector
   //
 
-  const Int_t kSize = 5000; //max number of digits per DDL file times 2
+  const Int_t kSize = 5000; // max number of digits per DDL file times 2
 
   UInt_t buf[kSize];
 
+  // To clear the digit indices map for each event
+  fTOFdigitMap->Clear();
+
   fIndex = -1;
 
   fTOFdigitArray = * (TClonesArray**) branch->GetAddress();
 
-  char fileName[15];
-  ofstream outfile;         // logical name of the output file 
+  AliFstream* outfile;      // logical name of the output file 
 
-  //AliRawDataHeader header;
   AliRawDataHeaderSim header;
 
   UInt_t sizeRawData = 0;
@@ -187,95 +183,94 @@ Int_t AliTOFDDLRawData::RawDataTOF(TBranch* branch)
   
   GetDigits();
 
+  //if (!fPackedAcquisition) fMatchingWindow = 2097152;//AdC
+
   Int_t jj = -1;
   Int_t iDDL = -1;
   Int_t nDDL = -1;
   Int_t nTRM =  0;
   Int_t iChain = -1;
 
-  UInt_t nWordsPerTRM = 0;
-
   //loop over TOF DDL files
   for (nDDL=0; nDDL<AliDAQ::NumberOfDdls("TOF"); nDDL++) {
 
-    strcpy(fileName,AliDAQ::DdlFileName("TOF",nDDL)); //The name of the output file
-#ifndef __DECCXX
-    outfile.open(fileName,ios::binary);
-#else
-    outfile.open(fileName);
-#endif
+    char fileName[256]="";
+    strncpy(fileName,AliDAQ::DdlFileName("TOF",nDDL),255); //The name of the output file
 
-    iDDL = fTOFrawStream->GetDDLnumberPerSector(nDDL);
+    outfile = new AliFstream(fileName);
+    iDDL = AliTOFRawStream::GetDDLnumberPerSector(nDDL);
 
     // write Dummy DATA HEADER
-    UInt_t dataHeaderPosition = outfile.tellp();
-    outfile.write((char*)(&header),sizeof(header));
+    UInt_t dataHeaderPosition = outfile->Tellp();
+    outfile->WriteBuffer((char*)(&header),sizeof(header));
 
     // DRM section: trailer
     MakeDRMtrailer(buf);
 
-    // LTM section
-    fIndex++;
-    buf[fIndex] = MakeFiller();
-    MakeLTMtrailer(buf);
-    MakeLTMdata(buf);
-    MakeLTMheader(buf);
-
     // loop on TRM number per DRM
     for (nTRM=AliTOFGeometry::NTRM(); nTRM>=3; nTRM--) {
 
-      nWordsPerTRM = 0;
+      fWordsPerTRM = 0;
 
       // the slot number 3 of the even DRM (i.e. right) doesn't contain TDC digit data
       if (iDDL%2==0 && nTRM==3) continue;
 
-      // TRM global trailer
-      MakeTRMtrailer(buf);
-
       // loop on TRM chain number per TRM
       for (iChain=AliTOFGeometry::NChain()-1; iChain>=0; iChain--) {
 
        // TRM chain trailer
-       MakeTRMchainTrailer(iChain, buf);
-       nWordsPerTRM++;
+       MakeTRMchainTrailer(iChain, buf); fWordsPerTRM++;
 
        // TRM TDC digits
-       MakeTDCdigits(nDDL, nTRM, iChain, buf, nWordsPerTRM);
+       MakeTDCdigits(nDDL, nTRM, iChain, buf);
 
        // TRM chain header
-       MakeTRMchainHeader(nTRM, iChain, buf);
-       nWordsPerTRM++;
+       MakeTRMchainHeader(nTRM, iChain, buf); fWordsPerTRM++;
 
       } // end loop on iChain
 
       // TRM global header
-      MakeTRMheader(nTRM, buf);
+      MakeTRMheader(nTRM, buf); fWordsPerTRM++;
 
       // TRM filler in case where TRM data number is odd
-      if (nWordsPerTRM%2!=0) MakeTRMfiller(buf, nWordsPerTRM);
+      if ((fWordsPerTRM+1)%2!=0) {
+       MakeTRMfiller(buf); fWordsPerTRM++;
+      }
+
+      MakeTRMtrailer(buf); fWordsPerDRM++;
+
+      fWordsPerDRM += fWordsPerTRM;
 
     } // end loop on nTRM
-       
+
+
+    // LTM section
+    //fIndex++;
+    //buf[fIndex] = MakeFiller(); fWordsPerDRM++; // valid till when LTM word number was 33
+    MakeLTMtrailer(buf); fWordsPerDRM++;
+    MakeLTMdata(buf); fWordsPerDRM+=48;
+    MakeLTMheader(buf); fWordsPerDRM++;
+
     // DRM section: in
     MakeDRMheader(nDDL, buf);
 
     ReverseArray(buf, fIndex+1);
 
-    outfile.write((char *)buf,((fIndex+1)*sizeof(UInt_t)));
+    outfile->WriteBuffer((char *)buf,((fIndex+1)*sizeof(UInt_t)));
 
     for (jj=0; jj<(fIndex+1); jj++) buf[jj]=0;
     fIndex = -1;
     
     //Write REAL DATA HEADER
-    UInt_t currentFilePosition = outfile.tellp();
+    UInt_t currentFilePosition = outfile->Tellp();
     sizeRawData = currentFilePosition - dataHeaderPosition - sizeof(header);
     header.fSize = currentFilePosition - dataHeaderPosition;
     header.SetAttribute(0);  // valid data
-    outfile.seekp(dataHeaderPosition);
-    outfile.write((char*)(&header),sizeof(header));
-    outfile.seekp(currentFilePosition);
+    outfile->Seekp(dataHeaderPosition);
+    outfile->WriteBuffer((char*)(&header),sizeof(header));
+    outfile->Seekp(currentFilePosition);
 
-    outfile.close();
+    delete outfile;
 
   } //end loop on DDL file number
 
@@ -294,7 +289,7 @@ void AliTOFDDLRawData::GetDigits()
 
   Int_t digit = -1;
   Int_t ndigits = fTOFdigitArray->GetEntries();
-
+  AliDebug(2, Form(" Number of read digits = %d",ndigits));
   AliTOFdigit *digs;
 
   // loop on TOF digits
@@ -310,7 +305,7 @@ void AliTOFDDLRawData::GetDigits()
     fTOFdigitMap->AddDigit(vol, digit);
 
   } // close loop on digit del TOF
-
+  AliDebug(2,Form(" Number of mapped digits = %d",fTOFdigitMap->GetFilledCellNumber()));
 }
 
 //----------------------------------------------------------------------------
@@ -320,9 +315,11 @@ void AliTOFDDLRawData::MakeDRMheader(Int_t nDDL, UInt_t *buf)
   // DRM global header
   //
 
-  Int_t iDDL = fTOFrawStream->GetDDLnumberPerSector(nDDL);
+  //Int_t iDDL = fTOFrawStream->GetDDLnumberPerSector(nDDL);
+  Int_t iDDL = AliTOFRawStream::GetDDLnumberPerSector(nDDL);
 
-  Int_t iSector = fTOFrawStream->GetSectorNumber(nDDL);
+  //Int_t iSector = fTOFrawStream->GetSectorNumber(nDDL);
+  Int_t iSector = AliTOFRawStream::GetSectorNumber(nDDL);
 
   UInt_t baseWord=0;
   UInt_t word;
@@ -331,7 +328,7 @@ void AliTOFDDLRawData::MakeDRMheader(Int_t nDDL, UInt_t *buf)
   baseWord=0;
   word = 1; // 0001 -> DRM data are coming from the VME slot number 1
   AliBitPacking::PackWord(word,baseWord, 0, 3);
-  word = 0; // event CRC
+  word = 0; // event CRC --> CHANGED
   AliBitPacking::PackWord(word,baseWord, 4,19);
   word = 0; // reserved for future use
   AliBitPacking::PackWord(word,baseWord,20,27);
@@ -340,12 +337,35 @@ void AliTOFDDLRawData::MakeDRMheader(Int_t nDDL, UInt_t *buf)
   fIndex++;
   buf[fIndex]=baseWord;
 
+  // DRM status header 4
+  baseWord=0;
+  word = 1; // 0001 -> DRM data are coming from the VME slot number 1
+  AliBitPacking::PackWord(word,baseWord, 0, 3);
+  word = 0; // temperature
+  AliBitPacking::PackWord(word,baseWord, 4,13);
+  word = 0; // zero
+  AliBitPacking::PackWord(word,baseWord, 14,14);
+  word = 0; // ACK
+  AliBitPacking::PackWord(word,baseWord, 15,15);
+  word = 0; // Sens AD
+  AliBitPacking::PackWord(word,baseWord, 16,18);
+  word = 0; // zero
+  AliBitPacking::PackWord(word,baseWord, 19,19);
+  word = 0; // reserved for future use
+  AliBitPacking::PackWord(word,baseWord, 20,27);
+  word = 4; // 0100 -> DRM header ID
+  AliBitPacking::PackWord(word,baseWord,28,31);
+  fIndex++;
+  buf[fIndex]=baseWord;
+
   // DRM status header 3
   baseWord=0;
   word = 1; // 0001 -> DRM data are coming from the VME slot number 1
   AliBitPacking::PackWord(word,baseWord, 0, 3);
-  word = 0; // TTC event counter
-  AliBitPacking::PackWord(word,baseWord, 4,27);
+  word = 0; // L0 BCID
+  AliBitPacking::PackWord(word,baseWord, 4,15);
+  word = 0; // Run Time info
+  AliBitPacking::PackWord(word,baseWord, 16,27);
   word = 4; // 0100 -> DRM header ID
   AliBitPacking::PackWord(word,baseWord,28,31);
   fIndex++;
@@ -369,7 +389,9 @@ void AliTOFDDLRawData::MakeDRMheader(Int_t nDDL, UInt_t *buf)
   word = 0; //
   AliBitPacking::PackWord(word,baseWord,15,15);
   word = 0; // fault ID
-  AliBitPacking::PackWord(word,baseWord,16,27);
+  AliBitPacking::PackWord(word,baseWord,16,26);
+  word = 0; // RTO
+  AliBitPacking::PackWord(word,baseWord,27,27);
   word = 4; // 0100 -> DRM header ID
   AliBitPacking::PackWord(word,baseWord,28,31);
   fIndex++;
@@ -392,8 +414,12 @@ void AliTOFDDLRawData::MakeDRMheader(Int_t nDDL, UInt_t *buf)
       
   word = 1; // LHC clock status: 1/0
   AliBitPacking::PackWord(word,baseWord,15,15);
+  word = 0; // Vers ID
+  AliBitPacking::PackWord(word,baseWord,16,20);
+  word = 0; // DRMH size
+  AliBitPacking::PackWord(word,baseWord,21,24);
   word = 0; // reserved for future use
-  AliBitPacking::PackWord(word,baseWord,16,27);
+  AliBitPacking::PackWord(word,baseWord,25,27);
   word = 4; // 0100 -> DRM header ID
   AliBitPacking::PackWord(word,baseWord,28,31);
   fIndex++;
@@ -429,7 +455,7 @@ void AliTOFDDLRawData::MakeDRMtrailer(UInt_t *buf)
   baseWord=0;
   word = 1; // 0001 -> DRM data are coming from the VME slot number 1
   AliBitPacking::PackWord(word,baseWord, 0, 3);
-  word = 0; // local event counter
+  word = 0; // local event counter --> TO BE CHANGED IN fWordsPerDRM+5
   AliBitPacking::PackWord(word,baseWord, 4,15);
   word = 0; // reserved for future use
   AliBitPacking::PackWord(word,baseWord,16,27);
@@ -477,146 +503,235 @@ void AliTOFDDLRawData::MakeLTMdata(UInt_t *buf)
 
   UInt_t baseWord;
   UInt_t word;
-  
+
   baseWord=0;
-  word = 100; // Local temperature in LTM5 -> 4 X 25 degree (environment temperature)
-  AliBitPacking::PackWord(word,baseWord, 0, 9);
-  word = 100; // Local temperature in LTM6 -> 4 X 25 degree (environment temperature)
+  word = 0;
+  AliBitPacking::PackWord(word,baseWord,0,9);
+  word = 0;
   AliBitPacking::PackWord(word,baseWord,10,19);
-  word = 100; // Local temperature in LTM7 -> 4 X 25 degree (environment temperature)
+  word = 0;
   AliBitPacking::PackWord(word,baseWord,20,29);
   word = 0;
-  AliBitPacking::PackWord(word,baseWord,30,31);
+  AliBitPacking::PackWord(word,baseWord,30,30);
+  word = 0;
+  AliBitPacking::PackWord(word,baseWord,31,31);
+
+
+  // OR45, OR46, OR47
+  fIndex++;
+  buf[fIndex]=baseWord;
+
+  // OR42, OR43, OR44
+  fIndex++;
+  buf[fIndex]=baseWord;
+
+  // OR39, OR40, OR41
+  fIndex++;
+  buf[fIndex]=baseWord;
 
+  // OR36, OR37, OR38
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // Local temperature in LTM2, LMT3, LTM4 -> 4 X 25 degree (environment temperature)
+  // OR33, OR34, OR35
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // Local temperature in FEAC7, FEAC8, LTM1 -> 4 X 25 degree (environment temperature)
+  // OR30, OR31, OR32
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // Local temperature in FEAC4, FEAC5, FEAC6 -> 4 X 25 degree (environment temperature)
+  // OR27, OR28, OR29
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // Local temperature in FEAC1, FEAC2, FEAC3 -> 4 X 25 degree (environment temperature)
+  // OR24, OR25, OR26
   fIndex++;
   buf[fIndex]=baseWord;
 
+  // OR21, OR22, OR23
+  fIndex++;
+  buf[fIndex]=baseWord;
+
+  // OR18, OR19, OR20
+  fIndex++;
+  buf[fIndex]=baseWord;
+
+  // OR15, OR16, OR17
+  fIndex++;
+  buf[fIndex]=baseWord;
+
+  // OR12, OR12, OR24
+  fIndex++;
+  buf[fIndex]=baseWord;
+
+  // OR9, OR10, OR11
+  fIndex++;
+  buf[fIndex]=baseWord;
+
+  // OR6, OR7, OR8
+  fIndex++;
+  buf[fIndex]=baseWord;
+
+  // OR3, OR4, OR5
+  fIndex++;
+  buf[fIndex]=baseWord;
+
+  // OR0, OR1, OR2
+  fIndex++;
+  buf[fIndex]=baseWord;
+
+
+  
   baseWord=0;
-  word = 0; // GND-FEAC15 -> Voltage drop between GND and FEAC15
+  word = 100; // Local temperature in LTM11 -> 4 X 25 degree (environment temperature)
   AliBitPacking::PackWord(word,baseWord, 0, 9);
-  word = 0; // VTH16 -> Thereshould voltage for FEAC16
+  word = 100; // Local temperature in LTM10 -> 4 X 25 degree (environment temperature)
   AliBitPacking::PackWord(word,baseWord,10,19);
-  word = 0; // GND-FEAC16 -> Voltage drop between GND and FEAC16
+  word = 100; // Local temperature in LTM9 -> 4 X 25 degree (environment temperature)
   AliBitPacking::PackWord(word,baseWord,20,29);
   word = 0;
-  AliBitPacking::PackWord(word,baseWord,30,31);
+  AliBitPacking::PackWord(word,baseWord,30,30);
+  word = 0;
+  AliBitPacking::PackWord(word,baseWord,31,31);
+
+  fIndex++;
+  buf[fIndex]=baseWord;
+
+  // Local temperature in LTM8, LMT7, LTM6 -> 4 X 25 degree (environment temperature)
+  fIndex++;
+  buf[fIndex]=baseWord;
+
+  // Local temperature in LTM5, LMT4, LTM3 -> 4 X 25 degree (environment temperature)
+  fIndex++;
+  buf[fIndex]=baseWord;
+
+  // Local temperature in LTM2, LMT1, LTM0 -> 4 X 25 degree (environment temperature)
+  fIndex++;
+  buf[fIndex]=baseWord;
+
 
+
+  // Local temperature in T7, T6, T5 -> 4 X 25 degree (environment temperature)
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // VTH14 -> Thereshould voltage for FEAC14
-  // GND-FEAC14 -> Voltage drop between GND and FEAC14
-  // VTH15 -> Thereshould voltage for FEAC15
+  // Local temperature in T4, T3, T2 -> 4 X 25 degree (environment temperature)
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // GND-FEAC12 -> Voltage drop between GND and FEAC12
-  // VTH13 -> Thereshould voltage for FEAC13
-  // GND-FEAC13 -> Voltage drop between GND and FEAC13
+  // Local temperature in T1, T0 -> 4 X 25 degree (environment temperature)
+  // Local temperature in VTH15 -> Thereshould voltage for FEAC15
+  fIndex++;
+  buf[fIndex]=baseWord;
+
+  baseWord=0;
+  word = 0; // VTH13 -> Thereshould voltage for FEAC16
+  AliBitPacking::PackWord(word,baseWord, 0, 9);
+  word = 0; // VTH14 -> Thereshould voltage for FEAC14
+  AliBitPacking::PackWord(word,baseWord,10,19);
+  word = 0; // GND-FEAC7 -> Voltage drop between GND and FEAC7
+  AliBitPacking::PackWord(word,baseWord,20,29);
+  word = 0;
+  AliBitPacking::PackWord(word,baseWord,30,30);
+  word = 0;
+  AliBitPacking::PackWord(word,baseWord,31,31);
+
   fIndex++;
   buf[fIndex]=baseWord;
 
   // VTH11 -> Thereshould voltage for FEAC11
-  // GND-FEAC11 -> Voltage drop between GND and FEAC11
   // VTH12 -> Thereshould voltage for FEAC12
+  // GND-FEAC6 -> Voltage drop between GND and FEAC6
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // GND-FEAC9 -> Voltage drop between GND and FEAC9
-  // VTH10 -> Thereshould voltage for FEAC10
-  // GND-FEAC10 -> Voltage drop between GND and FEAC10
+  // VTH9 -> Thereshould voltage for FEAC11
+  // VTH10 -> Thereshould voltage for FEAC12
+  // GND-FEAC5 -> Voltage drop between GND and FEAC6
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // VTH8 -> Thereshould voltage for FEAC8
-  // GND-FEAC8 -> Voltage drop between GND and FEAC8
-  // VTH9 -> Thereshould voltage for FEAC9
+  // VTH7 -> Thereshould voltage for FEAC11
+  // VTH8 -> Thereshould voltage for FEAC12
+  // GND-FEAC4 -> Voltage drop between GND and FEAC6
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // GND-FEAC6 -> Voltage drop between GND and FEAC6
-  // VTH7 -> Thereshould voltage for FEAC7
-  // GND-FEAC7 -> Voltage drop between GND and FEAC7
+  // VTH5 -> Thereshould voltage for FEAC11
+  // VTH6 -> Thereshould voltage for FEAC12
+  // GND-FEAC3 -> Voltage drop between GND and FEAC6
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // VTH5 -> Thereshould voltage for FEAC5
-  // GND-FEAC5 -> Voltage drop between GND and FEAC5
-  // VTH6 -> Thereshould voltage for FEAC6
+  // VTH3 -> Thereshould voltage for FEAC11
+  // VTH4 -> Thereshould voltage for FEAC12
+  // GND-FEAC2 -> Voltage drop between GND and FEAC6
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // GND-FEAC3 -> Voltage drop between GND and FEAC3
-  // VTH4 -> Thereshould voltage for FEAC4
-  // GND-FEAC4 -> Voltage drop between GND and FEAC4
+  // VTH1 -> Thereshould voltage for FEAC11
+  // VTH2 -> Thereshould voltage for FEAC12
+  // GND-FEAC1 -> Voltage drop between GND and FEAC6
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // VTH2 -> Thereshould voltage for FEAC2
-  // GND-FEAC2 -> Voltage drop between GND and FEAC2
-  // VTH3 -> Thereshould voltage for FEAC3
+  // LV15
+  // VTH0 -> Thereshould voltage for FEAC12
+  // GND-FEAC0 -> Voltage drop between GND and FEAC6
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // LV16 -> Low Voltage measured by FEAC16
-  // GND-FEAC1 -> Voltage drop between GND and FEAC1
-  // VTH1 -> Thereshould voltage for FEAC1
+  // LV15
+  // VTH0 -> Thereshould voltage for FEAC12
+  // GND-FEAC0 -> Voltage drop between GND and FEAC6
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // Low Voltage measured by FEAC13, FEAC14, FEAC15
+  // LV12
+  // LV13
+  // LV14
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // Low Voltage measured by FEAC10, FEAC11, FEAC12
+  // LV9
+  // LV10
+  // LV11
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // Low Voltage measured by FEAC7, FEAC8, FEAC9
+  // LV6
+  // LV7
+  // LV8
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // Low Voltage measured by FEAC4, FEAC5, FEAC6
+  // LV3
+  // LV4
+  // LV5
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // Low Voltage measured by FEAC1, FEAC2, FEAC3
+  // LV0
+  // LV1
+  // LV2
   fIndex++;
   buf[fIndex]=baseWord;
 
 
+
   baseWord=0;
-  word = 0; // PDL45 -> Delay Line setting for PDL45
+  word = 0; // PDL45 -> Delay Line setting for PDL41
   AliBitPacking::PackWord(word,baseWord, 0, 7);
-  word = 0; // PDL46 -> Delay Line setting for PDL46
+  word = 0; // PDL46 -> Delay Line setting for PDL42
   AliBitPacking::PackWord(word,baseWord, 8,15);
-  word = 0; // PDL47 -> Delay Line setting for PDL47
+  word = 0; // PDL47 -> Delay Line setting for PDL43
   AliBitPacking::PackWord(word,baseWord,16,23);
-  word = 0; // PDL48 -> Delay Line setting for PDL48
+  word = 0; // PDL48 -> Delay Line setting for PDL44
   AliBitPacking::PackWord(word,baseWord,24,31);
   fIndex++;
   buf[fIndex]=baseWord;
 
-  // Delay Line setting for PDL41, PDL42, PDL43, PDL44
-  fIndex++;
-  buf[fIndex]=baseWord;
-
   // Delay Line setting for PDL37, PDL38, PDL39, PDL40
   fIndex++;
   buf[fIndex]=baseWord;
@@ -725,7 +840,8 @@ void AliTOFDDLRawData::MakeTRMheader(Int_t nTRM, UInt_t *buf)
 void AliTOFDDLRawData::MakeTRMtrailer(UInt_t *buf)
 {
   //
-  // TRM trailer
+  // Set TRM Global Trailer
+  // with the calculated CRC
   //
 
   UInt_t baseWord;
@@ -734,17 +850,34 @@ void AliTOFDDLRawData::MakeTRMtrailer(UInt_t *buf)
   baseWord=0;
   word = 15; // 1111 -> TRM trailer ID 1
   AliBitPacking::PackWord(word,baseWord, 0, 3);
-  word = 0; // event CRC
-  AliBitPacking::PackWord(word,baseWord, 4,15);
-  word = 0; // local event counter == DRM local event counter
+
+  UInt_t trmCRC=0x0;
+  for (Int_t ii=fIndex-(fWordsPerTRM-1); ii<fIndex; ii++)
+    trmCRC ^= buf[ii];
+  //PH  printf(" A trmCRC=%d\n",trmCRC);
+
+  word = 0x0;
+  word ^= ( (trmCRC & 0x00000fff) >>  0);
+  word ^= ( (trmCRC & 0x00fff000) >> 12);
+  word ^= ( (trmCRC & 0xff000000) >> 24);
+
+  //PH  printf(" B trmCRC=%d\n",word);
+
+  AliBitPacking::PackWord(word,baseWord, 4,15); // event CRC --> CHANGED
+
+  word = 0; // local event counter == DRM local event counter --> TO BE CHANGED
   AliBitPacking::PackWord(word,baseWord,16,27);
   word = 5; // 0101 -> TRM trailer ID 2
   AliBitPacking::PackWord(word,baseWord,28,31);
+
   fIndex++;
-  buf[fIndex]=baseWord;
+  for (Int_t ii=fIndex; ii>fIndex-fWordsPerTRM; ii--)
+    buf[ii]=buf[ii-1];
 
-}
+  buf[fIndex-fWordsPerTRM] = baseWord;
 
+}
+  
 //----------------------------------------------------------------------------
 void AliTOFDDLRawData::MakeTRMchainHeader(Int_t nTRM, Int_t iChain,
                                          UInt_t *buf)
@@ -771,9 +904,9 @@ void AliTOFDDLRawData::MakeTRMchainHeader(Int_t nTRM, Int_t iChain,
   AliBitPacking::PackWord(word,baseWord, 0, 3);
   word = 0; // bunch ID
   AliBitPacking::PackWord(word,baseWord, 4,15);
-  word = 100; // PB24 temperature -> 4 X 25 degree (environment temperature)
+  word = 0;//100; // PB24 temperature -> 4 X 25 degree (environment temperature)
   AliBitPacking::PackWord(word,baseWord,16,23);
-  word = (Int_t)(5 * gRandom->Rndm()); // PB24 ID [0;4]
+  word = 0;//(Int_t)(5 * gRandom->Rndm()); // PB24 ID [0;4]
   AliBitPacking::PackWord(word,baseWord,24,26);
   word = 0; // TS
   AliBitPacking::PackWord(word,baseWord,27,27);
@@ -792,7 +925,7 @@ void AliTOFDDLRawData::MakeTRMchainHeader(Int_t nTRM, Int_t iChain,
 }
 
 //----------------------------------------------------------------------------
-void AliTOFDDLRawData::MakeTRMfiller(UInt_t *buf, UInt_t nWordsPerTRM)
+void AliTOFDDLRawData::MakeTRMfiller(UInt_t *buf)
 {
   //
   // TRM filler
@@ -801,16 +934,15 @@ void AliTOFDDLRawData::MakeTRMfiller(UInt_t *buf, UInt_t nWordsPerTRM)
   Int_t jj = -1;
 
   fIndex++;
-  for (jj=fIndex; jj>fIndex-(Int_t)nWordsPerTRM; jj--) {
+  for (jj=fIndex; jj>fIndex-fWordsPerTRM; jj--)
     buf[jj] = buf[jj-1];
-  }
 
-  buf[fIndex-nWordsPerTRM] = MakeFiller();
+  buf[fIndex-fWordsPerTRM] = MakeFiller();
 
 }
   
 //----------------------------------------------------------------------------
-UInt_t AliTOFDDLRawData::MakeFiller()
+UInt_t AliTOFDDLRawData::MakeFiller() const
 {
   //
   // Filler word definition: to make even the number of words per TRM/LTM
@@ -851,7 +983,7 @@ void AliTOFDDLRawData::MakeTRMchainTrailer(Int_t iChain, UInt_t *buf)
   AliBitPacking::PackWord(word,baseWord, 0, 3);
   word = 0; // MBZ
   AliBitPacking::PackWord(word,baseWord, 4,15);
-  word = 0; // event counter
+  word = 0; // event counter --> TO BE CHANGED
   AliBitPacking::PackWord(word,baseWord,16,27);
   switch (iChain) {
     case 0:
@@ -868,15 +1000,14 @@ void AliTOFDDLRawData::MakeTRMchainTrailer(Int_t iChain, UInt_t *buf)
 }
 
 //----------------------------------------------------------------------------
-void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
-                                    UInt_t *buf, UInt_t &nWordsPerTRM)
+void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain, UInt_t *buf)
 {
   //
   // TRM TDC digit
   //
 
-  const Double_t kOneMoreFilledCell = 1./(fTOFgeometry->NPadXSector()*fTOFgeometry->NSectors());
-  Double_t percentFilledCells = Double_t(fTOFdigitMap->GetFilledCellNumber())/(fTOFgeometry->NPadXSector()*fTOFgeometry->NSectors());
+  const Double_t kOneMoreFilledCell = 1./(AliTOFGeometry::NPadXSector()*AliTOFGeometry::NSectors());
+  Double_t percentFilledCells = Double_t(fTOFdigitMap->GetFilledCellNumber())/(AliTOFGeometry::NPadXSector()*AliTOFGeometry::NSectors());
 
   if (nDDL<0 || nDDL>71) {
     AliWarning(Form(" DDL number is out of the right range [0;71] (nDDL = %3i", nDDL));
@@ -933,18 +1064,23 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
 
     // the DRM odd (i.e. left) slot number 3 doesn't contain TDC digit data
     // for TDC numbers 3-14
-    if (iDDL%2==1 && nTRM==3 && (Int_t)(nTDC/3.)!=0) continue;
+    if (iDDL%2==1 && nTRM==3 && (Int_t)(nTDC/3)!=0) continue;
 
     // loop on TDC channel number
     for (iCH=AliTOFGeometry::NCh()-1; iCH>=0; iCH--) {
 
       //numberOfMeasuresPerChannel = 0;
 
-      fTOFrawStream->EquipmentId2VolumeId(nDDL, nTRM, iChain, nTDC, iCH, volume);
+      for (Int_t aa=0; aa<5; aa++) volume[aa]=-1;
+      AliTOFRawStream::EquipmentId2VolumeId(nDDL, nTRM, iChain, nTDC, iCH, volume);
        
+      AliDebug(3,Form(" volume -> %2d %1d %2d %2d %1d",volume[0],volume[1],volume[2],volume[3],volume[4]));
+
       if (volume[0]==-1 || volume[1]==-1 || volume[2]==-1 ||
          volume[3]==-1 || volume[4]==-1) continue;
 
+      AliDebug(3,Form(" ====== %2d %1d %2d %2d %1d",volume[0],volume[1],volume[2],volume[3],volume[4]));
+
       for (jj=0; jj<3; jj++) indexDigit[jj] = -1;
 
       fTOFdigitMap->GetDigitIndex(volume, indexDigit);
@@ -1011,11 +1147,10 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
          word = 1; // TRM TDC digit ID
          AliBitPacking::PackWord(word,baseWord,31,31);
 
-         localIndex++;
+         localIndex++; fWordsPerTRM++;
          localBuffer[localIndex]=baseWord;
          psArray[localIndex]=dummyPS;
 
-         nWordsPerTRM++;
          baseWord=0;
 
        } // if ( fFakeOrphaneProduction && ( ( fPackedAcquisition && percentFilledCells<0.12 && gRandom->Rndm()<(0.12-percentFilledCells) ) or ... ) )
@@ -1025,17 +1160,33 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
 
        if (indexDigit[jj]<0) continue;
 
+       AliDebug(3,Form(" ====== %2d %1d %2d %2d %1d -> %1d %d",volume[0],volume[1],volume[2],volume[3],volume[4],jj,indexDigit[jj]));
+
        digs = (AliTOFdigit*)fTOFdigitArray->UncheckedAt(indexDigit[jj]);
          
        if (digs->GetSector()!=volume[0] ||
            digs->GetPlate() !=volume[1] ||
            digs->GetStrip() !=volume[2] ||
            digs->GetPadx()  !=volume[3] ||
-           digs->GetPadz()  !=volume[4]) AliWarning(" --- ERROR --- ");
-
-       timeOfFlight = (Int_t)(digs->GetTdc())%8192;
-
-       if (timeOfFlight>fMatchingWindow) continue;
+           digs->GetPadz()  !=volume[4]) AliWarning(Form(" --- ERROR --- %2i (%2i)  %1i (%1i)  %2i (%2i)  %2i (%2i)  %1i (%1i)",
+                                                         digs->GetSector(), volume[0],
+                                                         digs->GetPlate(), volume[1],
+                                                         digs->GetStrip(), volume[2],
+                                                         digs->GetPadx(), volume[3],
+                                                         digs->GetPadz(), volume[4])
+                                                    );
+
+       timeOfFlight = (Int_t)(digs->GetTdc());
+       /*+
+         fTOFCableLengthMap->GetCableTimeShiftBin(nDDL, nTRM, iChain, nTDC)*/;
+
+       //if (timeOfFlight>=fMatchingWindow+1000) continue; // adc
+       //if (timeOfFlight>=fMatchingWindow) continue; // adc
+       if (digs->GetTdcND()>=fMatchingWindow) {
+         AliDebug(2,"Out of matching window.");
+         continue; // adc
+       }
+       else AliDebug(2,"In matching window");
 
        //numberOfMeasuresPerChannel++;
 
@@ -1090,10 +1241,9 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
        word = 1; // TRM TDC digit ID
        AliBitPacking::PackWord(word,baseWord,31,31);
 
-       localIndex++;
+       localIndex++; fWordsPerTRM++;
        localBuffer[localIndex]=baseWord;
 
-       nWordsPerTRM++;
        baseWord=0;
 
        if ( fFakeOrphaneProduction &&
@@ -1155,11 +1305,10 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
          word = 1; // TRM TDC digit ID
          AliBitPacking::PackWord(word,baseWord,31,31);
 
-         localIndex++;
+         localIndex++; fWordsPerTRM++;
          localBuffer[localIndex]=baseWord;
          psArray[localIndex]=dummyPS;
 
-         nWordsPerTRM++;
          baseWord=0;
 
        } // if ( fFakeOrphaneProduction && percentFilledCells<0.12 && gRandom->Rndm()<(0.12-percentFilledCells) )
@@ -1217,11 +1366,10 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
          word = 1; // TRM TDC digit ID
          AliBitPacking::PackWord(word,baseWord,31,31);
 
-         localIndex++;
+         localIndex++; fWordsPerTRM++;
          localBuffer[localIndex]=baseWord;
          psArray[localIndex]=dummyPS;
 
-         nWordsPerTRM++;
          baseWord=0;
 
        } // if ( fFakeOrphaneProduction && percentFilledCells<0.24 && gRandom->Rndm()<(0.24-percentFilledCells)  && outOut )
@@ -1270,11 +1418,10 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
        word = 1; // TRM TDC digit ID
        AliBitPacking::PackWord(word,baseWord,31,31);
 
-       localIndex++;
+       localIndex++; fWordsPerTRM++;
        localBuffer[localIndex]=baseWord;
        psArray[localIndex]=2;
 
-       nWordsPerTRM++;
        baseWord=0;
 
        word = timeOfFlight%2097152; // leading edge measurement
@@ -1320,11 +1467,10 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
        word = 1; // TRM TDC digit ID
        AliBitPacking::PackWord(word,baseWord,31,31);
 
-       localIndex++;
+       localIndex++; fWordsPerTRM++;
        localBuffer[localIndex]=baseWord;
        psArray[localIndex]=1;
 
-       nWordsPerTRM++;
        baseWord=0;
 
 
@@ -1377,11 +1523,10 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
          word = 1; // TRM TDC digit ID
          AliBitPacking::PackWord(word,baseWord,31,31);
 
-         localIndex++;
+         localIndex++; fWordsPerTRM++;
          localBuffer[localIndex]=baseWord;
          psArray[localIndex]=dummyPS;
 
-         nWordsPerTRM++;
          baseWord=0;
 
        } // if ( fFakeOrphaneProduction && percentFilledCells<0.24 && gRandom->Rndm()<(0.24-percentFilledCells) && !outOut )
@@ -1396,13 +1541,13 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
 
     } // end loop on TDC channel number
 
-    //AliInfo(Form(" TDC number %2i:  numberOfMeasuresPerChannel = %2i  ---  maxMeasuresPerChannelInTDC = %2i ", nTDC, numberOfMeasuresPerChannel, maxMeasuresPerChannelInTDC));
+    //AliDebug(3,Form(" TDC number %2i:  numberOfMeasuresPerChannel = %2i  ---  maxMeasuresPerChannelInTDC = %2i ", nTDC, numberOfMeasuresPerChannel, maxMeasuresPerChannelInTDC));
 
     if (localIndex==-1) continue;
 
     if (fPackedAcquisition) {
 
-      for (Int_t jj=0; jj<=localIndex; jj++) {
+      for (jj=0; jj<=localIndex; jj++) {
        fIndex++;
        buf[fIndex] = localBuffer[jj];
        localBuffer[jj] = 0;
@@ -1434,10 +1579,10 @@ void AliTOFDDLRawData::MakeTDCdigits(Int_t nDDL, Int_t nTRM, Int_t iChain,
       } // if (maxMeasuresPerChannelInTDC = 1)
       else if (maxMeasuresPerChannelInTDC>1) {
 
-       AliInfo(Form(" In the TOF DDL %2i, TRM %2i, TDC %2i, chain %1i, the maximum number of t.o.f. good measurements per channel is %2i",
+       AliDebug(3,Form(" In the TOF DDL %2i, TRM %2i, TDC %2i, chain %1i, the maximum number of t.o.f. good measurements per channel is %2i",
                     nDDL, nTRM, iChain, nTDC, iCH, maxMeasuresPerChannelInTDC));
       */
-       for (Int_t jj=0; jj<=localIndex; jj++) {
+      for (jj=0; jj<=localIndex; jj++) {
            fIndex++;
            buf[fIndex] = localBuffer[jj];
            localBuffer[jj] = 0;