]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONTrackerDataMaker.cxx
Coverity
[u/mrichter/AliRoot.git] / MUON / AliMUONTrackerDataMaker.cxx
index fa78ec0e2ede600f8f1714b8ae2d3852a1e544aa..92193f2dc5b829137cd32e7431def76fa363c717 100644 (file)
@@ -67,7 +67,10 @@ fIsEventByEvent(kFALSE),
 fLogger(0x0),
 fLastEventWasEmpty(kFALSE),
 fNumberOfPhysicsEvents(0),
-fNumberOfGoodPhysicsEvents(0)
+fNumberOfGoodPhysicsEvents(0),
+fTryRecover(kFALSE),
+fFirstEvent(-1),
+fLastEvent(-1)
 {
 /// Root IO ctor
 }
@@ -99,7 +102,10 @@ fIsEventByEvent(kFALSE),
 fLogger(0x0),
 fLastEventWasEmpty(kFALSE),
 fNumberOfPhysicsEvents(0),
-fNumberOfGoodPhysicsEvents(0)
+fNumberOfGoodPhysicsEvents(0),
+fTryRecover(kFALSE),
+fFirstEvent(-1),
+fLastEvent(-1)
 {
   /// Ctor in which this object will NOT be the owner of the reader
   /// and can NOT apply rewind to it, nor use Next on it. 
@@ -133,14 +139,16 @@ fIsEventByEvent(kFALSE),
 fLogger(0x0),
 fLastEventWasEmpty(kFALSE),
 fNumberOfPhysicsEvents(0),
-fNumberOfGoodPhysicsEvents(0)
+fNumberOfGoodPhysicsEvents(0),
+fTryRecover(kFALSE),
+fFirstEvent(-1),
+fLastEvent(-1)
 {
   /// Ctor in which we take the ownership of the rawReader, so we can rewind
   /// and advance it as we wish
   
-  if (fRawReader
+  if ( fRawReader && fRawReader->NextEvent() 
   {
-    fRawReader->NextEvent(); // to be sure to get run number available
     fRunNumber = fRawReader->GetRunNumber();
     fRawReader->RewindEvents();
   }
@@ -168,12 +176,14 @@ fIsEventByEvent(kFALSE),
 fLogger(0x0),
 fLastEventWasEmpty(kFALSE),
 fNumberOfPhysicsEvents(0),
-fNumberOfGoodPhysicsEvents(0)
+fNumberOfGoodPhysicsEvents(0),
+fTryRecover(kFALSE),
+fFirstEvent(-1),
+fLastEvent(-1)
 {
   /// Ctor from raw data reader
-  if (fRawReader
+  if ( fRawReader && fRawReader->NextEvent() 
   {
-    fRawReader->NextEvent(); // to be sure to get run number available
     fRunNumber = fRawReader->GetRunNumber();
     fRawReader->RewindEvents();
   }
@@ -258,7 +268,7 @@ AliMUONTrackerDataMaker::Ctor(const AliMUONRecoParam* recoParam,
       AliCDBManager::Instance()->SetDefaultStorage(storage);
     }
     
-    fDigitCalibrator = new AliMUONDigitCalibrator(*fCalibrationData,recoParam,calibMode);
+    fDigitCalibrator = new AliMUONDigitCalibrator(*fCalibrationData,recoParam);
     //FIXME: get the reco param from GUI and/or from OCDB if not used from the QA code ?
   }
 }
@@ -322,7 +332,32 @@ AliMUONTrackerDataMaker::NextEvent()
   
   if ( !IsRunning() ) return kTRUE;
   
-  Bool_t ok = fRawReader->NextEvent();
+  Bool_t ok(kTRUE);
+  
+  if ( fLastEvent >= fFirstEvent && fLastEvent > 0 ) // do we have an event range to consider ?
+  {
+    // skip up to first event
+    
+    while ( (fNumberOfEvents-1) < fFirstEvent && ( ok = fRawReader->NextEvent() ) ) 
+    {
+      ++fNumberOfEvents; 
+    }
+    
+    if ( ok && (fNumberOfEvents-1) <= fLastEvent ) 
+    {
+      ok = fRawReader->NextEvent();
+    }
+    else
+    {
+      fNumberOfEvents=fLastEvent+1;
+      return kFALSE;
+    }
+  }
+  else
+  {
+    // no event range, just proceed...
+    ok = fRawReader->NextEvent();
+  }
   
   if (!ok) 
   {
@@ -367,6 +402,15 @@ Bool_t AliMUONTrackerDataMaker::ProcessEvent()
   stream.DisableWarnings();
   stream.DisableRawReaderErrorLogger();
   stream.DisableMUONErrorLogger();
+
+  if ( fTryRecover ) 
+  {
+    stream.TryRecover(kTRUE);
+  }
+  else
+  {
+    stream.TryRecover(kFALSE);
+  }
   
   if (fLogger)
   {
@@ -485,7 +529,7 @@ Long64_t AliMUONTrackerDataMaker::Merge(TCollection* list)
   while ( ( o = next() ) )
   {
     const AliMUONTrackerDataMaker* data = dynamic_cast<const AliMUONTrackerDataMaker*>(o);
-    if (!o)
+    if (!data)
     {
       AliError(Form("Object named %s is not an AliMUONTrackerDataMaker ! Skipping it",
                     o->GetName()));