]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HMPID/AliHMPIDRawStream.cxx
New book-keeping class
[u/mrichter/AliRoot.git] / HMPID / AliHMPIDRawStream.cxx
index dbab61ae2e643b56ff95b5b0261e25844ab3a9ab..0a94526dc88a06d30c7a5fbdea38286e75e29593 100644 (file)
@@ -119,10 +119,11 @@ AliHMPIDRawStream::~AliHMPIDRawStream()
   fWord=0;
   fZeroSup=0;
   fTurbo=0;
-  for(Int_t i=0;i<kSumErr;i++) delete [] fNumOfErr[i]; 
+  for(Int_t i=0;i<kNDDL;i++) delete [] fNumOfErr[i]; 
   delete [] fNumOfErr; 
 
-  if(fnDDLInStream) { delete [] fnDDLInStream; fnDDLInStream = 0x0; }
+  delete [] fnDDLInStream;
+  delete [] fnDDLOutStream;
 }
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 void AliHMPIDRawStream::Reset()
@@ -146,7 +147,7 @@ Bool_t AliHMPIDRawStream::Turbo()
   fNPads=0;
 //  Int_t gw=0;
   for(Int_t i=1;i<cntGlob;i++) {
-    GetWord(1);
+    if(!GetWord(1)) return kFALSE;
     if (((fWord >> kbit27) & 1)) continue;
     UInt_t statusControlRow = 0x32a8; 
     UInt_t rowControlWord = fWord >> kbit0 & 0xfbff;
@@ -198,10 +199,10 @@ Bool_t AliHMPIDRawStream::Next()
   */
 
   fPosition = 0;
-  Bool_t status=kTRUE;
+  Bool_t status=kFALSE;
   Int_t  rawDataSize=0;        
+  fDDLNumber = fRawReader->GetDDLID();
   if(fRawReader->GetType() == 7 || fRawReader->GetType() == 8 )  {           //New: Select Physics events, Old: Raw data size is not 0 and not 47148 (pedestal)
-    fDDLNumber = fRawReader->GetDDLID();
     fnDDLInStream[fDDLNumber]=1; fnDDLOutStream[fDDLNumber]=0;
     
     fLDCNumber = fRawReader->GetLDCId();
@@ -377,6 +378,7 @@ Bool_t AliHMPIDRawStream::ReadDilogic(Int_t &cntDilogic)
     UInt_t pad = (fWord >> kbit12) & 0x3f;                                          //pad info in raw word is between bits: 12...17
     if(!CheckPad(pad)) continue;
     Int_t charge = fWord & 0xfff;
+    if(GetPad(fDDLNumber,row,dilogic,pad)<0) continue;
     fPad[fNPads] = GetPad(fDDLNumber,row,dilogic,pad);
     fCharge[fNPads] = charge; 
     fNPads++;
@@ -494,7 +496,7 @@ Bool_t AliHMPIDRawStream::CheckEoE(Int_t &nDil)
 //    fRawReader->AddMajorErrorLog(kEoEDILOGICErr,Form("eoe dil %d != %d",da,dilogic));
 //    AliDebug(1,Form("Wrong DILOGIC address found in end-of-event: %d, expected %d!",da,dilogic));
 //    fNumOfErr[kEoEDILOGICErr]++;
-//    return kFALSE;  AliQAChecker::Instance()->Run(AliQA::kHMPID, task, obj) ;  
+//    return kFALSE;  AliQAChecker::Instance()->Run(AliQAv1::kHMPID, task, obj) ;  
 
 //  }
 //  UInt_t ca = (eOfEvent >> 22) & 0x1f;
@@ -544,7 +546,11 @@ Bool_t AliHMPIDRawStream::GetWord(Int_t n,EDirection dir)
   // independent.
   
   fWord = 0;
-  if (!fData || fPosition < 0) AliFatal("Raw data payload buffer is not yet initialized !");
+  if (fPosition < 0) {
+    AliError("fPosition < 0 !!! Event skipped.");
+    fRawReader->AddMajorErrorLog(kRawDataSizeErr,"fPosition<0");
+    return kFALSE;
+  }
 
   if(dir==kBwd) n = -n; 
   fPosition+=4*n-4;
@@ -552,7 +558,7 @@ Bool_t AliHMPIDRawStream::GetWord(Int_t n,EDirection dir)
   if(fPosition==-4) return kTRUE;
   
   if(fPosition<0 || fPosition > fRawReader->GetDataSize()) {
-    AliDebug(1,Form("fPosition out of boundaries %i",fPosition));
+    AliWarning(Form("fPosition out of boundaries %i",fPosition));
     return kFALSE;
   }