correct calibration of short runs
[u/mrichter/AliRoot.git] / T0 / AliT0RawData.cxx
index 3a796df..f1281d5 100644 (file)
@@ -21,8 +21,8 @@
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
-#include <Riostream.h>
-#include <TTree.h>
+//#include <Riostream.h>
+//#include <TTree.h>
 #include <TMap.h>
 #include "AliT0.h"
 #include "AliT0RawData.h"
@@ -35,6 +35,7 @@
 #include "AliRunLoader.h"
 #include "AliDAQ.h"
 #include "AliT0LookUpValue.h"
+#include "AliT0LookUpKey.h"
 
 ClassImp(AliT0RawData)
 
@@ -51,7 +52,6 @@ ClassImp(AliT0RawData)
                               fDataHeaderPos(0),
                               fDRMDataHeaderPos(0),
                               fTRMDataHeaderPos(0),
-                              fDigits(0),
                               fParam(0),
                               fLookUp(0)
   
@@ -76,13 +76,14 @@ uncertances
   */
 
   //open the output file
-  char fileName[15];
-  strcpy(fileName,AliDAQ::DdlFileName("T0",0)); //The name of the output file
-  fFile = new AliFstream(fileName);
+  // char fileName[15];
+  // strcpy(fileName,AliDAQ::DdlFileName("T0",0)); //The name of the output file
+  TString fileName = Form("%s",AliDAQ::DdlFileName("T0",0));
+  fFile = new AliFstream(fileName.Data());
   memset(fBuffer,0,512*sizeof(UInt_t));
 
   //get event number 
-  AliRunLoader *runloader = AliRunLoader::GetRunLoader();
+  AliRunLoader *runloader = AliRunLoader::Instance();
   if (runloader) {
     fEventNumber = runloader->GetEventNumber();
   }
@@ -91,8 +92,8 @@ uncertances
 
   fParam = AliT0Parameters::Instance();
   fParam->Init();
-  AliT0LookUpKey* lookkey= new AliT0LookUpKey();
-  AliT0LookUpValue*  lookvalue= new AliT0LookUpValue();
+  AliT0LookUpKey* lookkey;//= new AliT0LookUpKey();
+  AliT0LookUpValue*  lookvalue;//= new AliT0LookUpValue();
   TMap *lookup = fParam->GetMapLookup();
   TMapIter iter(lookup);
 
@@ -101,8 +102,8 @@ uncertances
       lookvalue = ( AliT0LookUpValue*) iter.Next();
       lookkey = (AliT0LookUpKey*) lookup->GetValue(lookvalue);
       fLookUp.Add(lookkey, lookvalue);
-      lookkey= new AliT0LookUpKey();
-      lookvalue= new AliT0LookUpValue();
+      //lookkey= new AliT0LookUpKey();
+      //lookvalue= new AliT0LookUpValue();
     }
     
 }
@@ -121,7 +122,6 @@ AliT0RawData::AliT0RawData(const AliT0RawData &r):TObject(),
                                                  fDataHeaderPos(0),
                                                  fDRMDataHeaderPos(0),
                                                  fTRMDataHeaderPos(0),
-                                                 fDigits(0)  ,
                                                  fParam(0),
                                                  fLookUp(0)
 
@@ -140,14 +140,11 @@ AliT0RawData::~AliT0RawData()
   //
   // Destructor
   //
-  if (fDigits) {
-    delete fDigits;
-    fDigits = NULL;
-  }
   delete fTimeCFD;
   delete fADC1;
   delete fTimeLED;
   delete fADC0;
+  delete fFile;
 }
 
 //_____________________________________________________________________________
@@ -164,6 +161,7 @@ AliT0RawData &AliT0RawData::operator=(const AliT0RawData &r)
 
 //_____________________________________________________________________________
 void AliT0RawData::GetDigits(AliT0digit *fDigits)
+//void AliT0RawData::GetDigits(fDigits)
 {
  
   //This method packs the T0 digits in a proper 32 bits structure
@@ -188,26 +186,37 @@ void AliT0RawData::GetDigits(AliT0digit *fDigits)
   Int_t timeC = fDigits->BestTimeA();
   
   
-  TArrayI  *allData = new TArrayI(110);
-  Int_t i=0;
-  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+56);
-    allData->AddAt(fADC1->At(i-1),i+80);
-
+  //  TArrayI  *allData = new TArrayI(110);
+  Int_t allData[110][1];
+  for (Int_t i=0; i<110; i++) allData[i][0] = 0;
+
+  allData[0][0]=0;
+  for (Int_t i=1; i<13; i++) {
+    allData[i][0]    = fTimeCFD->At(i-1);
+    allData[i+12][0] = fTimeLED->At(i-1);
+    allData[i+56][0] = fTimeCFD->At(i-1+12);
+    allData[i+68][0] = fTimeLED->At(i-1+12);
+  }
+  
+  for (Int_t iii=0; iii<12; iii++) {
+    allData[2*iii+25][0] = fADC1->At(iii);
+    allData[2*iii+26][0] = fADC0->At(iii);
+  }
+  for (Int_t ii=12; ii<24; ii++) {
+    allData[2*ii+57][0] = fADC1->At(ii);
+    allData[2*ii+58][0] = fADC0->At(ii);
   }
-  allData->AddAt(meantime,49);
-  allData->AddAt(timediff,50);
-  allData->AddAt(timeA,51);
-  allData->AddAt(timeC,52);
-  allData->AddAt(mult0,53);
-  allData->AddAt(mult1,54);
-  allData->AddAt(mult0,55);
-  allData->AddAt(mult1,56);
-
-  //   cout.setf( ios_base::hex, ios_base::basefield );
+  
+  allData[49][0] = meantime;
+  allData[50][0] = timediff;
+  allData[51][0] = timeA;
+  allData[52][0] = timeC;
+  allData[53][0] = mult0;
+  allData[54][0] = mult1;
+  allData[55][0] = mult0;
+  allData[56][0] = mult1;
+
+  //    cout.setf( ios_base::hex, ios_base::basefield );
   //space for DRM header
   fIndex += 6;
 
@@ -218,44 +227,40 @@ void AliT0RawData::GetDigits(AliT0digit *fDigits)
   positionOfTRMHeader= fIndex;
   //space for chain  header
   fIndex ++;
-  WriteChainDataHeader(0, 0); // 
+  WriteChainDataHeader(1, 1); // 
+
+  //  fIndex++;
   // Loop through all PMT
   Int_t chain=0; 
   Int_t iTDC = 0;
   Int_t channel=0;
   Int_t trm1words=0;
-  Int_t itrm=0, oldtrm=0;
+  Int_t itrm=7;
+  Int_t inside =0;
+  Int_t isData = 0;
   AliT0LookUpKey * lookkey  = new AliT0LookUpKey();
   AliT0LookUpValue * lookvalue ;//= new AliT0LookUpValue(trm,tdc,chain,channel);
   for (Int_t det = 0; det < 105; det++) {
-    time = allData->At(det);
-    if (time >0) {
+    time = allData[det][0];
+    if (time >0 && time !=99999) {
       lookkey->SetKey(det);
       lookvalue = (AliT0LookUpValue*) fLookUp.GetValue((TObject*)lookkey);     
       if (lookvalue ) 
        {
+         isData++;
          itrm= lookvalue->GetTRM();
-         if (itrm != oldtrm ) {
+         if (det >56 &&inside == 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(oldtrm, trm1words , positionOfTRMHeader);
-           //space for 2st TRM header
-           startTRM=fIndex;
-           fIndex ++;
-           positionOfTRMHeader= fIndex;
-           fIndex ++;
-           oldtrm=itrm;
+           WriteChainDataHeader(2, 1);
+           //      fIndex++;
+           inside++;
          }         
          chain = lookvalue->GetChain();
          iTDC = lookvalue->GetTDC();
          channel = lookvalue->GetChannel();
          FillTime(channel,  iTDC,  time);
+         AliDebug(1,Form("look %i  itrm %i ,  chain %i , iTDC %i, channel %i time %i", det,itrm,chain,iTDC,channel, time));
        }
       else
        {
@@ -265,10 +270,12 @@ void AliT0RawData::GetDigits(AliT0digit *fDigits)
     }
     
   }
-    
-  WriteChainDataTrailer(1); // 1st chain trailer
-  fIndex++;
-  WriteChainDataHeader(2, 1); // 
+  if (inside==0) {
+    WriteChainDataTrailer(1); // 1st chain trailer
+    fIndex++;
+    WriteChainDataHeader(2, 1);
+  }
+    //  WriteChainDataHeader(2, 1); // 
   WriteChainDataTrailer(3); // 2st chain trailer
   WriteTrailer(15,0,fEventNumber,5); // 1st TRM trailer
   
@@ -276,34 +283,14 @@ void AliT0RawData::GetDigits(AliT0digit *fDigits)
   trm1words = fIndex - startTRM;
   //space for 2st TRM header
   
-  WriteTRMDataHeader(1, trm1words , positionOfTRMHeader);
+  WriteTRMDataHeader(itrm, trm1words , positionOfTRMHeader);
   
   //DRM trailer
-  WriteTrailer(1,0,fEventNumber,5); // 1st TRM trailer
+  WriteTrailer(1,0,fEventNumber,5);
     
     WriteDRMDataHeader();
     
-    delete allData;
-    
 }
-//------------------------------------------------------------------------------
-void AliT0RawData::PackWord(UInt_t &BaseWord, UInt_t Word, Int_t StartBit, Int_t StopBit)
-{
-  
-  // Build mask
-  Int_t len=StopBit-StartBit+1;
-  UInt_t mask=0;
-  for(Int_t jb=0; jb<len; mask|=1<<jb++);
-  // Check consistency
-  if(Word > mask){
-    Error("PackWord", "Word to be filled is not within desired length\n"
-          "Word:%d Start bit:%d Stop Bit:%d",Word,StartBit,StopBit);
-    return;
-  }
-  BaseWord=(BaseWord&~(mask<<StartBit))|Word<<StartBit;
-
-}
-
 
 //_____________________________________________________________________________
 
@@ -317,64 +304,61 @@ void  AliT0RawData::WriteDRMDataHeader()
   //fill DRM headers
   //DRM Global Header
   word = 1;
-  PackWord(baseWord,word,0, 3); // 0001 
+  AliBitPacking::PackWord(word,baseWord,0, 3); // 0001 
   word = fIndex ;
 
-  PackWord(baseWord,word,4, 20); // event words 
+  AliBitPacking::PackWord(word,baseWord,4, 20); // event words 
   word=124;
-  PackWord(baseWord,word,21,27); // DRM ID for T0 - 124
+  AliBitPacking::PackWord(word,baseWord, 21, 27); // event words 
   word=4;
-  PackWord(baseWord,word,28,31); // 0100 marks header
+  AliBitPacking::PackWord(word,baseWord,28, 31);// 0100 marks header
   fBuffer[0]=  baseWord;
 
 
   //DRM status header 1
   word = 1;
-  PackWord(baseWord,word,0, 3); // 0001 
+  AliBitPacking::PackWord(word,baseWord,0, 3); // 0001 
   word = 1;
-  PackWord(baseWord,word,4, 14); // slotID now 0000000001
+  AliBitPacking::PackWord(word,baseWord,4, 14); // slotID now 0000000001
   word = 1;
-  PackWord(baseWord,word,15, 15); //if 1  LHC clock is coorectly recieved from CPDM 
+  AliBitPacking::PackWord(word,baseWord,15, 15); //if 1  LHC clock is coorectly recieved from CPDM 
   word=0;
-  PackWord(baseWord,word,16,27); // reserve for future use
+  AliBitPacking::PackWord(word,baseWord,16,27); // reserve for future use
   word=4;
-  PackWord(baseWord,word,28,31); // 0100 marks header
-   fBuffer[1] = baseWord;
-
-
+  AliBitPacking::PackWord(word,baseWord,28,31); // 0100 marks header
+  fBuffer[1] = baseWord;
+  
    word=0;
    baseWord=0;
-
-    //DRM status header 2
-    word = 1;
-    PackWord(baseWord,word, 0, 3); // 0001 
-    word = 3;
-    PackWord(baseWord,word, 4, 14); //enable slotID now 00000000011
-    word = 0;
-    PackWord(baseWord,word, 15, 15); // something
-    word=0;
-    PackWord(baseWord,word, 16, 27); // fault ID for simulation 0
-    word=4;
-    PackWord(baseWord,word,28,31); // 0100 marks header
-    fBuffer[2]=  baseWord;
-
-    
-    word=0;
-    baseWord=0;
-    //DRM status header 3
-    word = 1;
-    PackWord(baseWord,word,0, 3); // 0001 
+   
+   //DRM status header 2
+   word = 1;
+   AliBitPacking::PackWord(word,baseWord, 0, 3); // 0001 
+   word = 3;
+   AliBitPacking::PackWord(word,baseWord, 4, 14); //enable slotID now 00000000011
+   word = 0;
+   AliBitPacking::PackWord(word,baseWord, 15, 15); // something
+   word=0;
+   AliBitPacking::PackWord(word,baseWord, 16, 27); // fault ID for simulation 0
+   word=4;
+   AliBitPacking::PackWord(word,baseWord,28,31); // 0100 marks header
+   fBuffer[2]=  baseWord;
+        
+   word=0;
+   baseWord=0;
+   //DRM status header 3
+   word = 1;
+    AliBitPacking::PackWord(word,baseWord,0, 3); // 0001 
     word = 0;
-    PackWord(baseWord,word,4, 27); // TTC event counter
+    AliBitPacking::PackWord(word,baseWord,4, 27); // TTC event counter
     word=4;
-    PackWord(baseWord,word,28,31); // 0100 marks header
+    AliBitPacking::PackWord(word,baseWord,28,31); // 0100 marks header
     fBuffer[3]=  baseWord;
 
     // new DRM format
     fBuffer[4]=  baseWord;
     fBuffer[5]=  baseWord;
-    
+   
     word=0;
     baseWord=0;
     
@@ -393,19 +377,19 @@ void  AliT0RawData::WriteTRMDataHeader(UInt_t slotID, Int_t nWordsInTRM,
   //fill TRM headers
   //TRM Global Header
   word = slotID;
-  PackWord(baseWord,word,0, 3); // slotID
+  AliBitPacking::PackWord(word,baseWord,0, 3); // slotID
   word = nWordsInTRM;
  //+this word - DRM header 
 
-  PackWord(baseWord,word,4, 16); // event words 
+  AliBitPacking::PackWord(word,baseWord,4, 16); // event words 
   word=0;
-  PackWord(baseWord,word,17,18); // ACQ
+  AliBitPacking::PackWord(word,baseWord,17,18); // ACQ
   word=0;
-  PackWord(baseWord,word,19,19); //  L SEY inside LUT
+  AliBitPacking::PackWord(word,baseWord,19,19); //  L SEY inside LUT
   word=0;
-  PackWord(baseWord,word,20,27); //  MBZ
+  AliBitPacking::PackWord(word,baseWord,20,27); //  MBZ
   word=4;
-  PackWord(baseWord,word,28,31); // 0100 marks header
+  AliBitPacking::PackWord(word,baseWord,28,31); // 0100 marks header
   fBuffer[positionOfTRMHeader] =  baseWord;
 
   word=0; 
@@ -425,19 +409,19 @@ void  AliT0RawData::WriteChainDataHeader(UInt_t chainNumber,UInt_t slotID)
   //fill TRM headers
   //TRM Global Header
   word = slotID; // ask Tatiana 7 or 9 
-  PackWord(baseWord,word,0, 3); // slotID
+  AliBitPacking::PackWord(word,baseWord,0, 3); // slotID
   word = 0;
-  PackWord(baseWord,word,4, 15); // bunchID
+  AliBitPacking::PackWord(word,baseWord,4, 15); // bunchID
   word=0;
-  PackWord(baseWord,word,16,23); // PB24 temperature
+  AliBitPacking::PackWord(word,baseWord,16,23); // PB24 temperature
   word=0;
-  PackWord(baseWord,word,24,26); //  PB24 ID
+  AliBitPacking::PackWord(word,baseWord,24,26); //  PB24 ID
   word=0;
-  PackWord(baseWord,word,27,27); //  TS
+  AliBitPacking::PackWord(word,baseWord,27,27); //  TS
   word=chainNumber;
-  PackWord(baseWord,word,28,31); // 0100 marks header
+  AliBitPacking::PackWord(word,baseWord,28,31); // 0100 marks header
   fBuffer[fIndex] =  baseWord;
-
+  //cout<<" chain header "<<baseWord<<" number "<<chainNumber<<endl;
   word=0;
   baseWord=0;     
   
@@ -452,13 +436,13 @@ void  AliT0RawData::WriteChainDataTrailer(UInt_t chainNumber )
   UInt_t word;
   UInt_t baseWord=0;
   word = 0; // ask Tatiana 7 or 9 
-  PackWord(baseWord,word,0, 3); // status
+  AliBitPacking::PackWord(word,baseWord,0, 3); // status
   word = 0;
-  PackWord(baseWord,word,4, 15); // MBZ
+  AliBitPacking::PackWord(word,baseWord,4, 15); // MBZ
   word=fEventNumber;
-  PackWord(baseWord,word,16,27); // event counter
+  AliBitPacking::PackWord(word,baseWord,16,27); // event counter
   word=chainNumber;
-  PackWord(baseWord,word,28,31); // chain number
+  AliBitPacking::PackWord(word,baseWord,28,31); // chain number
   fIndex++;
   fBuffer[fIndex] =  baseWord;
 
@@ -496,19 +480,21 @@ void  AliT0RawData::WriteDataHeader(Bool_t dummy, Bool_t compressed)
 
 void  AliT0RawData::WriteTrailer(UInt_t slot, Int_t word1, UInt_t word2, UInt_t word3)
 {
+//Write a (dummy or real) DDL Chain  data trailer 
 
   UInt_t word;
   UInt_t baseWord=0;
   word = slot;
-  PackWord(baseWord,word,0, 3); // 0001 
+  AliBitPacking::PackWord(word,baseWord,0, 3); // 0001 
   word=word1;
-  PackWord(baseWord,word,4, 15); // CRC ?
+  AliBitPacking::PackWord(word,baseWord,4, 15); // CRC ?
   word = word2;
-  PackWord(baseWord,word,16,27); // event counter
+  AliBitPacking::PackWord(word,baseWord,16,27); // event counter
   word=word3;
-  PackWord(baseWord,word,28,31); //  marks trailer
+  AliBitPacking::PackWord(word,baseWord,28,31); //  marks trailer
   fIndex++;
   fBuffer[fIndex] =  baseWord;
+
   word=0;
   baseWord=0;
 
@@ -518,31 +504,35 @@ void  AliT0RawData::WriteTrailer(UInt_t slot, Int_t word1, UInt_t word2, UInt_t
 //---------------------------------------------------------------------------------------
 void  AliT0RawData::FillTime(Int_t ch, Int_t iTDC, Int_t time)
 {
+  //  put all time fields thother in 1 word
+
   UInt_t word;
   UInt_t baseWord=0;
 
   word=time;
-  PackWord(baseWord,word, 0, 20); // Time 
+  AliBitPacking::PackWord(word,baseWord, 0, 20); // Time 
 
   word=ch;
-  PackWord(baseWord,word, 21, 23); // number of channel 
+  AliBitPacking::PackWord(word,baseWord, 21, 23); // number of channel 
   word=iTDC;
-  PackWord(baseWord,word, 24, 27); // TDC ID
+  AliBitPacking::PackWord(word,baseWord, 24, 27); // TDC ID
 
   word=0;
-  PackWord(baseWord,word, 28, 28); // E = 0 in simulation
+  AliBitPacking::PackWord(word,baseWord, 28, 28); // E = 0 in simulation
   word=0;
-  PackWord(baseWord,word, 29, 30); // PS bit data 00
+  AliBitPacking::PackWord(word,baseWord, 29, 30); // PS bit data 00
   word=1;
-  PackWord(baseWord,word, 31, 31); // 1
+  AliBitPacking::PackWord(word,baseWord, 31, 31); // 1
   fIndex++;
   fBuffer[fIndex]=baseWord;
+
   word=0;
   baseWord=0;
 }
 //---------------------------------------------------------------------------------------
 
 Int_t AliT0RawData::RawDataT0(AliT0digit *fDigits)
+  //Int_t AliT0RawData::RawDataT0(*fDigits)
 {
    //This method creates the Raw data files for T0 detector