Put 0.1 as minimal value of the gas gain (Raphaelle)
[u/mrichter/AliRoot.git] / T0 / AliT0RawReader.cxx
index dd89bff..3aefb2d 100644 (file)
@@ -1,3 +1,25 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/* $Id:  */
+
+//____________________________________________________________________
+//                                                                          
+// T0 
+// Class for reading T0 RAW data in TOF data format
+//
 #include "AliT0RawReader.h"
 #include "AliT0Parameters.h"
 #include "AliBitPacking.h"
  
 ClassImp(AliT0RawReader)
   
-  AliT0RawReader::AliT0RawReader (AliRawReader *rawReader)
+  AliT0RawReader::AliT0RawReader (AliRawReader *rawReader, Bool_t isOnline)
     :  TTask("T0RawReader","read raw T0 data"),
        fRawReader(rawReader),
        fData(NULL),
        fPosition(0),
        fParam(NULL),
-       fIsOnline(kFALSE)
+       fIsOnline(isOnline),
+       fBunchID(0),
+       fPrintout(kFALSE)
+
 {
   //
 // create an object to read T0raw digits
@@ -25,15 +50,12 @@ ClassImp(AliT0RawReader)
  
   fRawReader->Reset();
   fRawReader->Select("T0");
- // AliT0Parameters* fParam = AliT0Parameters::Instance();  
- // fIsOnline = isOnline; 
-  // fIsOnline=kTRUE;
- /* if (fIsOnline)
+  fParam = AliT0Parameters::Instance();  
+  if (fIsOnline)
     fParam->InitIfOnline();
   else 
     fParam->Init();
- */
 }
  AliT0RawReader::~AliT0RawReader ()
 {
@@ -78,148 +100,159 @@ Bool_t  AliT0RawReader::Next()
 //  allData[48]  mean (T0) signal  
 // allData[49]   time difference (vertex)
 
   UInt_t word;
   Int_t time=0,  itdc=0, ichannel=0, uu; 
   Int_t numberOfWordsInTRM=0, iTRM=0;
   Int_t tdcTime, koef,hit=0;
   Int_t koefhits[110];
-  //  Int_t fDRM_GLOBAL_HEADER = 0x40000001;
-  //  Int_t fDRM_GLOBAL_TRAILER  = 0x50000001;
-  
-  //  Int_t  TRM_GLOBAL_HEADER  = 0x40000000;
-    Int_t  TRM_CHAIN_0_HEADER =  0x00000000;
-    //  Int_t  TRM_CHAIN_1_HEADER =  0x20000000;
-  Int_t  TRM_CHAIN_0_TRAILER =  0x10000000;
-  //  Int_t  TRM_CHAIN_1_TRAILER =  0x30000000;
-  //  Int_t  TRM_GLOBAL_TRAILER =  0x5000000f;
+  Int_t trm_chain_header =  0x00000000;
+  Int_t  trm_chain_trailer =  0x10000000;
   
-  Int_t  FILLER =  0x70000000;
+  UInt_t  filler =  0x70000000;
   Bool_t correct=kTRUE;
   Int_t header;
-  
-    AliT0Parameters* fParam = AliT0Parameters::Instance();   
-   if (fIsOnline)
-   fParam->InitIfOnline();
-       else
-   fParam->Init();
-
-   Int_t fNTRM = fParam->GetNumberOfTRMs();
 
-   for ( Int_t k=0; k<110; k++) {
+  Int_t fNTRM = fParam->GetNumberOfTRMs();
+  for ( Int_t k=0; k<110; k++) {
     koefhits[k]=0;
     for ( Int_t jj=0; jj<5; jj++) {
       fAllData[k][jj]=0;
-     }
-   }
-    do {
-      if (!fRawReader->ReadNextData(fData)) return kFALSE;
-    } while (fRawReader->GetDataSize() == 0);
-    
-    //  fPosition = GetPosition();
-    fPosition = 0;
-    cout.setf( ios_base::hex, ios_base::basefield );
-    
-    //DRM header
+    }
+  }
+  do {
+    if (!fRawReader->ReadNextData(fData)) return kFALSE;
+  } while (fRawReader->GetDataSize() == 0);
+  
+  fPosition = 0;
+  //  cout.setf( ios_base::hex, ios_base::basefield );
+  if(fPrintout)
+    cout<<" CDH :: BC ID "<< (fRawReader->GetBCID())<<
+      " Event size"<<fRawReader->GetDataSize()<<
+      " orbit ID "<<fRawReader->GetOrbitID()<< 
+      " event index "<<fRawReader->GetEventIndex()<<
+      " event type " <<fRawReader->GetType()<<endl;
+  //DRM header
     for (Int_t i=0; i<6; i++) {
       word = GetNextWord();
-      //      cout<<" DRM header "<<i<<" "<<word<<endl;
+      if(fPrintout && i==0) cout<<" DRM header:: event words "<<AliBitPacking::UnpackWord(word,4, 20);
+      //  cout<<i<<" DRM header "<<word<<endl;
+      if (fPrintout && i==4 ) cout<<" L0BC ID "<< AliBitPacking::UnpackWord(word,4, 15)<<endl;
       header = AliBitPacking::UnpackWord(word,28,31);
-      if( header !=4 )
-       //      uu = word&fDRM_GLOBAL_HEADER;
-       //      if(uu != fDRM_GLOBAL_HEADER ) 
+      if( header !=4 ) 
        {
-         AliError(Form(" !!!! wrong  DRM header  %x!!!!", word));
+         AliWarning(Form(" !!!! wrong  DRM header  %x!!!!", word));
+         fRawReader->AddFatalErrorLog(kWrongDRMHeader,Form("w=%x",word));
          break;
        }
     }
-    
     for (Int_t ntrm=0; ntrm< fNTRM; ntrm++)
       {
        //TRMheader  
        word = GetNextWord();
-       //      cout<<" TRM header "<<word<<" "<<AliBitPacking::UnpackWord(word,28,31)<<endl;
-      header = AliBitPacking::UnpackWord(word,28,31);
-       
-      //       uu = word&TRM_GLOBAL_HEADER;
-       //      if(uu != TRM_GLOBAL_HEADER &&
-         if ( header != 4 )
-       {
-         AliError(Form(" !!!! wrong TRM header  %x!!!!", word));
-         break;
-       }
+       //      cout<<" TRM "<<word<<endl;
+       header = AliBitPacking::UnpackWord(word,28,31);
+       if ( header != 4 )
+         {
+           AliWarning(Form(" !!!! wrong TRM header  %x!!!!", word));
+           fRawReader->AddMajorErrorLog(kWrongTRMHeader,Form("w=%x",word));
+           break;
+         }
        numberOfWordsInTRM=AliBitPacking::UnpackWord(word,4,16);
+       if(fPrintout) {
+         cout<<" TRM header :: event words "<<numberOfWordsInTRM;
+         cout<<" ACQ bits "<<AliBitPacking::UnpackWord(word,17,18);
+         cout<<" L bit "<<AliBitPacking::UnpackWord(word,19,19)<<endl;
+       }
        iTRM=AliBitPacking::UnpackWord(word,0,3);
-       //      cout<<" iTRM "<<iTRM<<" Nworrds in TRM "<< numberOfWordsInTRM  <<endl;   
-
        for( Int_t ichain=0; ichain<2; ichain++)
          {
            //chain header
            word = GetNextWord();
-           uu = word & TRM_CHAIN_0_HEADER;
-           if(uu != TRM_CHAIN_0_HEADER) 
+           // cout<<" chain header "<<word<<endl;
+           uu = word & trm_chain_header;
+           if(uu != trm_chain_header) 
              {
-               AliError(Form(" !!!! wrong CHAIN  0  header %x!!!!", word));
+               AliWarning(Form(" !!!! wrong CHAIN  0  header %x!!!!", word));
+               fRawReader->AddMajorErrorLog(kWrongChain0Header,Form("w=%x",word));
                break;
              }
+           fBunchID=AliBitPacking::UnpackWord(word,4,15);
+           if(fPrintout)
+             cout<<" chain "<< ichain<<" header:: BunchID  "<<fBunchID;
            word = GetNextWord();
-           //      cout<<" ???data?? "<<word<<endl;
+           //   cout<<" next word "<<word<<endl;
            tdcTime =  AliBitPacking::UnpackWord(word,31,31);   
-           for (; tdcTime==1; tdcTime) 
+           //      for (; tdcTime==1; tdcTime) 
+           while(tdcTime==1)
              {
+               correct = kTRUE;
                itdc=AliBitPacking::UnpackWord(word,24,27);
                ichannel=AliBitPacking::UnpackWord(word,21,23);
                time=AliBitPacking::UnpackWord(word,0,20);
                
                koef = fParam->GetChannel(iTRM,itdc,ichain,ichannel);
-               //              cout<<"koef "<<koef<<" iTRM "<<iTRM<<" itdc "<<itdc<<" iChain "<<ichain<<" ichannel  "<<ichannel<<" "<<time<<endl;
+               if (koef != 0 ) 
+                 //                              cout<<"RawReader>> "<<"koef "<<koef<<" trm "<<iTRM<<
+                 //                                " tdc "<<itdc<<" chain "<<ichain<<
+                 //                        " channel "<<ichannel<<" time "<<time<<endl;
                if (koef ==-1 ){
-                 AliError(Form("Incorrect lookup table ! ")); 
+                 AliWarning(Form("Incorrect lookup table ! "));
+                 fRawReader->AddMajorErrorLog(kIncorrectLUT);
                  correct=kFALSE;
                }
                if(correct){
                  hit=koefhits[koef];
-                 //if(fAllData[koef][hit] == 0)  
+                 if(hit>5) {  
+                   AliDebug(10,Form("Too many hits for %i channel - %i ! ",koef,koefhits[koef] )); 
+                   hit=5;
+                 }
                  fAllData[koef][hit]=time; 
                  koefhits[koef]++;
                }
-                 word = GetNextWord();
-                 //            cout<<" next word "<<word<<endl;
-                 tdcTime =  AliBitPacking::UnpackWord(word,31,31);   
+               word = GetNextWord();
+
+               tdcTime =  AliBitPacking::UnpackWord(word,31,31);   
                
-           }
+             }
            
-
-           uu = word&TRM_CHAIN_0_TRAILER;
-           if(uu != TRM_CHAIN_0_TRAILER )
+           //   cout<<" trailer :: "<<word<<endl;
+           uu = word&trm_chain_trailer;
+           if(uu != trm_chain_trailer )
              {
-               AliError(Form(" !!!! wrong CHAIN 0 trailer %x !!!!", word));
+               AliWarning(Form(" !!!! wrong CHAIN 0 trailer %x !!!!", word));
+               fRawReader->AddMajorErrorLog(kWrongChain0Trailer,Form("w=%x",word));
                break;
              }
+           if(fPrintout)
+             cout<<" trailer:: event counter "<< AliBitPacking::UnpackWord(word,16,27)<<endl;
          }
             
        word = GetNextWord(); //TRM trailer
-       //      cout<<" TRM traier "<<word<<endl;
+       //      cout<<" TRM trailer "<<word<<endl;
        header = AliBitPacking::UnpackWord(word,28,31);
        if( header !=5 )
          {
-           AliError(Form(" !!!! wrong TRM GLOBAL trailer  %x!!!!", word));
+           AliWarning(Form(" !!!! wrong TRM GLOBAL trailer  %x!!!!", word));
+           fRawReader->AddMajorErrorLog(kWrongTRMTrailer,Form("w=%x",word));
            break;
          }
+       if(fPrintout)
+         cout<<"  TRM trailer :: event counter "<< AliBitPacking::UnpackWord(word,16,27)<<endl;
       } //TRM loop
     word = GetNextWord(); //
-       header = AliBitPacking::UnpackWord(word,28,31);
-    uu = word&FILLER;
-    if (word == FILLER )  word = GetNextWord(); 
-    //         cout<<" word after FILLER "<<word<<endl;
-    if( header !=5 )
-      {
-       AliError(Form(" !!!! wrong DRM GLOBAL trailer  %x!!!!", word));
-         //      break;
+    //  cout<<" after TRM trailer "<<word<<endl;
+    if (word == filler )  word = GetNextWord(); 
+     header = AliBitPacking::UnpackWord(word,28,31);
+     if( header !=5 )
+       {
+        AliWarning(Form(" !!!! wrong DRM GLOBAL trailer  %x!!!!", word));
+        fRawReader->AddFatalErrorLog(kWrongDRMTrailer,Form("w=%x",word));
       }
-    cout.setf( ios_base::dec, ios_base::basefield );
+     if(fPrintout)
+       cout<<" DRM trailer ::event counter "<< AliBitPacking::UnpackWord(word,4,15)<<endl;
+     cout.setf( ios_base::dec, ios_base::basefield );
     
-    return kTRUE;
+     return kTRUE;
 }
 //_____________________________________________________________________________
 Int_t AliT0RawReader::GetPosition()