]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - T0/AliT0RawData.cxx
macros for simulation and reconstruction
[u/mrichter/AliRoot.git] / T0 / AliT0RawData.cxx
index 3ced0347c6179d6c1d9fd93e279aead0c4edfda6..fb1604b0d7a5f9a4619af52a32581a340bced222 100644 (file)
 #include "AliBitPacking.h"
 #include "AliFstream.h"
 #include "AliRunLoader.h"
+#include "AliDAQ.h"
 
 ClassImp(AliT0RawData)
 
 //_____________________________________________________________________________
-AliT0RawData::AliT0RawData():TObject()
+  AliT0RawData::AliT0RawData():TObject(),
+ fVerbose(0),      
+ fIndex(-1) ,     
+ fEventNumber(0), 
+ fTimeCFD(new TArrayI(24)),    
+ fADC1( new TArrayI(24)),     
+ fTimeLED( new TArrayI(24)), 
+ fADC0( new TArrayI(24)),     
+ fFile(0x0),   
+ fDataHeaderPos(0),
+ fDRMDataHeaderPos(0),
+ fTRMDataHeaderPos(0),
+ fDigits(0)  
+
 {
   /*
 -  48 channels (2 words each as in TOF DDL) for :
@@ -57,22 +71,12 @@ and the same for amplified but A=Log(10*Amplitude).
 uncertances
   */
 
-  fIndex=-1;
-  fDigits = NULL;
-
-  fTimeCFD = new TArrayI(24);
-  fADC1 = new TArrayI(24);
-  fTimeLED = new TArrayI(24);
-  fADC0 = new TArrayI(24);
-  fFile = NULL;
-  fDataHeaderPos = 0;
-  fDRMDataHeaderPos = 0; 
-  memset(fBuffer,0,512*sizeof(UInt_t));
-
   //open the output file
   char fileName[15];
-  sprintf(fileName,"T0_%d.ddl", 0xd00);
+  strcpy(fileName,AliDAQ::DdlFileName("T0",0)); //The name of the output file
   fFile = new AliFstream(fileName);
+  memset(fBuffer,0,512*sizeof(UInt_t));
+
   //get event number 
   AliRunLoader *runloader = AliRunLoader::GetRunLoader();
   if (runloader) {
@@ -81,7 +85,21 @@ uncertances
 }
 
 //_____________________________________________________________________________
-AliT0RawData::AliT0RawData(const AliT0RawData &r):TObject()
+
+AliT0RawData::AliT0RawData(const AliT0RawData &r):TObject(),
+ fVerbose(0),      
+ fIndex(-1) ,     
+ fEventNumber(0), 
+ fTimeCFD(new TArrayI(24)),    
+ fADC1( new TArrayI(24)),     
+ fTimeLED( new TArrayI(24)), 
+ fADC0( new TArrayI(24)),     
+ fFile(0x0),   
+ fDataHeaderPos(0),
+ fDRMDataHeaderPos(0),
+ fTRMDataHeaderPos(0),
+ fDigits(0)  
+
 {
   //
   // AliT0rawData copy constructor
@@ -130,64 +148,67 @@ void AliT0RawData::GetDigits(AliT0digit *fDigits)
 
   //  Int_t error=0;
   Int_t time,  positionOfTRMHeader;
-
-    // Get the digits array
-
-  fDigits->GetTime(*fTimeCFD);
-  fDigits->GetADC(*fADC1);
-  fDigits->GetTimeAmp(*fTimeLED);
-  fDigits->GetADCAmp(*fADC0);
+  
+  // Get the digits array
+  
+  fDigits->GetTimeCFD(*fTimeCFD);
+  fDigits->GetQT0(*fADC1);
+  fDigits->GetTimeLED(*fTimeLED);
+  fDigits->GetQT1(*fADC0);
   Int_t meantime = fDigits->MeanTime(); 
   Int_t timediff = fDigits->TimeDiff(); 
   Int_t mult0=fDigits->SumMult();
   Int_t mult1=fDigits->SumMult();
-  Int_t timeA = fDigits->BestTimeLeft();
-  Int_t timeC = fDigits->BestTimeRight();
-
-
-  TArrayI  *allData = new TArrayI(107);
+  Int_t timeA = fDigits->BestTimeC();
+  Int_t timeC = fDigits->BestTimeA();
+  
+  
+  TArrayI  *allData = new TArrayI(110);
   Int_t i=0;
-  for (i=0; i<24; i++) {
-    allData->AddAt(fTimeLED->At(i),i);
-    allData->AddAt(fTimeCFD->At(i),i+24);
-    allData->AddAt(fADC0->At(i),i+54);
-    allData->AddAt(fADC1->At(i),i+78);
+  allData->AddAt(0,0);
+  for (i=1; i<25; i++) {
+    allData->AddAt(fTimeLED->At(i-1),i);
+    allData->AddAt(fTimeCFD->At(i-1),i+24);
+    allData->AddAt(fADC0->At(i-1),i+54);
+    allData->AddAt(fADC1->At(i-1),i+78);
+
   }
-    allData->AddAt(meantime,48);
-    allData->AddAt(timediff,49);
-    allData->AddAt(timediff,102); //trigger vertex
-    allData->AddAt(timeA,50);
-    allData->AddAt(timeA,103); //trigger T0A
-    allData->AddAt(timeC,51);
-    allData->AddAt(timeC,104); //trigger T0C
-    allData->AddAt(mult0,52);
-    allData->AddAt(mult1,105); //trigger central
-    allData->AddAt(mult1,53);
-    allData->AddAt(mult1,106); //trigger semi-central
+  allData->AddAt(meantime,49);
+  allData->AddAt(timediff,50);
+  allData->AddAt(timediff,103); //trigger vertex
+  allData->AddAt(timeA,51);
+  allData->AddAt(timeA,104); //trigger T0A
+  allData->AddAt(timeC,52);
+  allData->AddAt(timeC,105); //trigger T0C
+  allData->AddAt(mult0,53);
+  allData->AddAt(mult1,106); //trigger central
+  allData->AddAt(mult1,54);
+  allData->AddAt(mult1,107); //trigger semi-central
+
+  // cout.setf( ios_base::hex, ios_base::basefield );
+  
   //space for DRM header
-  fIndex += 4;
+  fIndex += 6;
 
+  Int_t startTRM=fIndex;
   //space for 1st TRM header
   fIndex ++;
   positionOfTRMHeader= fIndex;
 
   //space for chain  header
   fIndex ++;
-
+  WriteChainDataHeader(0, 0); // 
   // Loop through all PMT
   Int_t chain=0; 
   Int_t iTDC = 0;
   Int_t channel=0;
   Int_t trm1words=0;
-  Int_t fWordsIn1stTRM=0;
+
   //LED
-  for (Int_t det = 0; det < 54; det++) {
+  for (Int_t det = 0; det < 55; det++) {
     time = allData->At(det);
-
-    if (time >0) { 
+    if (time >0)  
       FillTime(channel,  iTDC,  time); 
-      trm1words++;   
-     }
     if (channel < 6) channel +=2;
     else {
       channel = 0; 
@@ -196,44 +217,56 @@ void AliT0RawData::GetDigits(AliT0digit *fDigits)
     }
   }
   
-  WriteTrailer(0,0,fEventNumber,1); // 1st chain trailer
+
+  WriteChainDataTrailer(1); // 1st chain trailer
+  fIndex++;
+  WriteChainDataHeader(2, 1); // 
+  WriteChainDataTrailer(3); // 2st chain trailer
   WriteTrailer(15,0,fEventNumber,5); // 1st TRM trailer
-  fWordsIn1stTRM = trm1words + 4;
-  WriteTRMDataHeader(3, trm1words , positionOfTRMHeader);
+  trm1words = fIndex - startTRM;
+  WriteTRMDataHeader(0, trm1words , positionOfTRMHeader);
 
 
   //space for 2st TRM header
+  startTRM=fIndex;
   fIndex ++;
   positionOfTRMHeader= fIndex;
-
-  //space for chain  header
+  // chain  header
   fIndex ++;
-
-
+  WriteChainDataHeader(0, 0); // 
   chain=0; 
   iTDC = 0;
   channel=0;
-  Int_t trm2words=0;
-  for (Int_t det = 54; det < 107; det++) {
-    time = allData->At(det);
 
-    if (time >0) { 
+  for (Int_t det = 55; det < 108; det++) {
+    time = allData->At(det);
+    
+    if (time >0)  
       FillTime(channel,  iTDC,  time); 
-      trm2words++;}
+     
     if (channel < 6) channel +=2;
     else {
       channel = 0; 
       iTDC++;
       if (iTDC>15) { chain++; iTDC=0;}
     }
+    
+    
   }
+    WriteChainDataTrailer(1); // 1st chain trailer
+    fIndex++;
+    WriteChainDataHeader(2, 1); // 
+    WriteChainDataTrailer(3); // 2st chain trailer
+    WriteTrailer(15,0,fEventNumber,5); // 1st TRM trailer
+    trm1words = fIndex - startTRM;
+    WriteTRMDataHeader(1, trm1words , positionOfTRMHeader);
+    //DRM trailer
+    WriteTrailer(1,0,fEventNumber,5); // 1st TRM trailer
+    
+    WriteDRMDataHeader();
 
-  WriteTrailer(0,0,fEventNumber,1); // 1st chain trailer
-  WriteTrailer(15,0,fEventNumber,5); // 1st TRM trailer
-  WriteTRMDataHeader(5,trm2words,positionOfTRMHeader);
-
-  WriteTrailer(1,fEventNumber,0,5); //DRM trailer
-  WriteDRMDataHeader();
+    delete allData;
 
 }
 //------------------------------------------------------------------------------
@@ -277,6 +310,7 @@ void  AliT0RawData::WriteDRMDataHeader()
   PackWord(baseWord,word,28,31); // 0100 marks header
   fBuffer[0]=  baseWord;
 
+
   //DRM status header 1
   word = 1;
   PackWord(baseWord,word,0, 3); // 0001 
@@ -290,8 +324,9 @@ void  AliT0RawData::WriteDRMDataHeader()
   PackWord(baseWord,word,28,31); // 0100 marks header
    fBuffer[1] = baseWord;
 
-  word=0;
-  baseWord=0;
+
+   word=0;
+   baseWord=0;
 
     //DRM status header 2
     word = 1;
@@ -305,6 +340,7 @@ void  AliT0RawData::WriteDRMDataHeader()
     word=4;
     PackWord(baseWord,word,28,31); // 0100 marks header
     fBuffer[2]=  baseWord;
 
     
     word=0;
@@ -318,7 +354,10 @@ void  AliT0RawData::WriteDRMDataHeader()
     PackWord(baseWord,word,28,31); // 0100 marks header
     fBuffer[3]=  baseWord;
 
-
+    // new DRM format
+    fBuffer[4]=  baseWord;
+    fBuffer[5]=  baseWord;
+    
     word=0;
     baseWord=0;
     
@@ -351,7 +390,7 @@ void  AliT0RawData::WriteTRMDataHeader(UInt_t slotID, Int_t nWordsInTRM,
   word=4;
   PackWord(baseWord,word,28,31); // 0100 marks header
   fBuffer[positionOfTRMHeader] =  baseWord;
-   
+
   word=0; 
   baseWord=0;
      
@@ -380,7 +419,31 @@ void  AliT0RawData::WriteChainDataHeader(UInt_t chainNumber,UInt_t slotID)
   PackWord(baseWord,word,27,27); //  TS
   word=chainNumber;
   PackWord(baseWord,word,28,31); // 0100 marks header
-  fBuffer[4] =  baseWord;
+  fBuffer[fIndex] =  baseWord;
+
+  word=0;
+  baseWord=0;     
+  
+}
+//_____________________________________________________________________________
+
+void  AliT0RawData::WriteChainDataTrailer(UInt_t chainNumber )
+{
+//Write a (dummy or real) DDL Chain  data trailer 
+//set the compression bit if compressed
+//  chainNumber 00 or 10
+  UInt_t word;
+  UInt_t baseWord=0;
+  word = 0; // ask Tatiana 7 or 9 
+  PackWord(baseWord,word,0, 3); // status
+  word = 0;
+  PackWord(baseWord,word,4, 15); // MBZ
+  word=fEventNumber;
+  PackWord(baseWord,word,16,27); // event counter
+  word=chainNumber;
+  PackWord(baseWord,word,28,31); // chain number
+  fIndex++;
+  fBuffer[fIndex] =  baseWord;
 
   word=0;
   baseWord=0;     
@@ -429,7 +492,7 @@ void  AliT0RawData::WriteTrailer(UInt_t slot, Int_t word1, UInt_t word2, UInt_t
   PackWord(baseWord,word,28,31); //  marks trailer
   fIndex++;
   fBuffer[fIndex] =  baseWord;
-  
+
   word=0;
   baseWord=0;
 
@@ -478,11 +541,11 @@ Int_t AliT0RawData::RawDataT0(AliT0digit *fDigits)
   fIndex=-1;
  
   AliRawDataHeaderSim header;
-  //loop over TOF DDL files
-    //write Dummy DATA HEADER
    WriteDataHeader(kTRUE, kFALSE);
   GetDigits(fDigits);
   //write packing digits
+  
+  
   fFile->WriteBuffer((char*) fBuffer,((fIndex+1)*sizeof(UInt_t)));
   //write real data header on its place
    WriteDataHeader(kFALSE, kFALSE);