#include "AliMUONCalibParamND.h"
#include "AliMUONCalibrationData.h"
#include "AliMUONDigitCalibrator.h"
+#include "AliMUONLogger.h"
#include "AliMUONRawStreamTrackerHP.h"
#include "AliMUONTrackerData.h"
#include "AliMpDDLStore.h"
#include "AliRawReader.h"
#include "Riostream.h"
+using std::endl;
+using std::cout;
/// \cond CLASSIMP
ClassImp(AliMUONTrackerDataMaker)
/// \endcond
AliMUONVTrackerDataMaker(),
fRawReader(0x0),
fAccumulatedData(0x0),
+fIsOwnerOfAccumulatedData(kTRUE),
fOneEventData(0x0),
fDigitCalibrator(0x0),
fCalibrationData(0x0),
fRunNumber(0),
fIsRunning(kFALSE),
fIsOwnerOfRawReader(kFALSE),
-fIsEventByEvent(kFALSE)
+fIsEventByEvent(kFALSE),
+fLogger(0x0),
+fLastEventWasEmpty(kFALSE),
+fNumberOfPhysicsEvents(0),
+fNumberOfGoodPhysicsEvents(0),
+fTryRecover(kFALSE),
+fFirstEvent(-1),
+fLastEvent(-1)
{
/// Root IO ctor
}
AliMUONVTrackerDataMaker(),
fRawReader(rawReader),
fAccumulatedData(0x0),
+fIsOwnerOfAccumulatedData(kTRUE),
fOneEventData(new AliMUON2DMap(true)),
fDigitCalibrator(0x0),
fCalibrationData(0x0),
fRunNumber(runNumber),
fIsRunning(kFALSE),
fIsOwnerOfRawReader(kFALSE),
-fIsEventByEvent(kFALSE)
+fIsEventByEvent(kFALSE),
+fLogger(0x0),
+fLastEventWasEmpty(kFALSE),
+fNumberOfPhysicsEvents(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.
AliMUONVTrackerDataMaker(),
fRawReader(rawReader),
fAccumulatedData(0x0),
+fIsOwnerOfAccumulatedData(kTRUE),
fOneEventData(new AliMUON2DMap(true)),
fDigitCalibrator(0x0),
fCalibrationData(0x0),
fRunNumber(0),
fIsRunning(kFALSE),
fIsOwnerOfRawReader(kTRUE),
-fIsEventByEvent(kFALSE)
+fIsEventByEvent(kFALSE),
+fLogger(0x0),
+fLastEventWasEmpty(kFALSE),
+fNumberOfPhysicsEvents(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();
}
AliMUONVTrackerDataMaker(),
fRawReader(rawReader),
fAccumulatedData(0x0),
+fIsOwnerOfAccumulatedData(kTRUE),
fOneEventData(new AliMUON2DMap(true)),
fDigitCalibrator(0x0),
fCalibrationData(0x0),
fRunNumber(0),
fIsRunning(kFALSE),
fIsOwnerOfRawReader(kTRUE),
-fIsEventByEvent(kFALSE)
+fIsEventByEvent(kFALSE),
+fLogger(0x0),
+fLastEventWasEmpty(kFALSE),
+fNumberOfPhysicsEvents(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();
}
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 ?
}
}
/// dtor
delete fOneEventData;
- delete fAccumulatedData;
+ if ( fIsOwnerOfAccumulatedData ) delete fAccumulatedData;
if ( fIsOwnerOfRawReader ) delete fRawReader;
delete fCalibrationData;
delete fDigitCalibrator;
fSource += other.fSource;
fNumberOfEvents += other.fNumberOfEvents;
-
+ fNumberOfPhysicsEvents += other.fNumberOfPhysicsEvents;
+ fNumberOfGoodPhysicsEvents += other.fNumberOfGoodPhysicsEvents;
+
TList list;
list.Add(other.fAccumulatedData);
AliCodeTimerAuto("",0);
- static Int_t nphysics(0);
- static Int_t ngood(0);
-
if ( !IsRunning() ) return kTRUE;
- Bool_t ok = fRawReader->NextEvent();
+ Bool_t ok(kTRUE);
- if (!ok)
+ if ( fLastEvent >= fFirstEvent && fLastEvent > 0 ) // do we have an event range to consider ?
{
- return kFALSE;
+ // 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;
+ }
}
-
- Int_t eventType = fRawReader->GetType();
-
- ++fNumberOfEvents;
-
- if (eventType != AliRawEventHeaderBase::kPhysicsEvent )
+ else
{
- return kTRUE; // for the moment
+ // no event range, just proceed...
+ ok = fRawReader->NextEvent();
}
- ++nphysics;
+ if (!ok)
+ {
+ return kFALSE;
+ }
- Bool_t pok = ProcessEvent();
-
- if ( pok ) ++ngood;
-
- AliDebug(1,Form("n %10d nphysics %10d ngood %10d",fNumberOfEvents,nphysics,ngood));
+ ProcessEvent();
return kTRUE;
}
/// duplicate this critical piece of calibration code !
///
+ ++fNumberOfEvents;
+
+ Int_t eventType = fRawReader->GetType();
+
+ if (eventType != AliRawEventHeaderBase::kPhysicsEvent )
+ {
+ return kTRUE; // for the moment
+ }
+
+ ++fNumberOfPhysicsEvents;
+
+ fLastEventWasEmpty = kFALSE;
+
AliCodeTimerAuto("",0);
AliMUONRawStreamTrackerHP stream(fRawReader);
-
+
stream.DisableWarnings();
-// stream.EnabbleErrorLogger();
+ stream.DisableRawReaderErrorLogger();
+ stream.DisableMUONErrorLogger();
+
+ if ( fTryRecover )
+ {
+ stream.TryRecover(kTRUE);
+ }
+ else
+ {
+ stream.TryRecover(kFALSE);
+ }
+
+ if (fLogger)
+ {
+ stream.EnableMUONErrorLogger();
+ stream.SetMUONErrorLogger(fLogger);
+ stream.SetLoggingDetailLevel(AliMUONRawStreamTrackerHP::kMediumErrorDetail);
+ }
const Int_t nddls = AliDAQ::NumberOfDdls("MUONTRK");
TArrayI nevents(nddls);
if (!badEvent)
{
- fAccumulatedData->Add(*fOneEventData,&nevents);
+ fAccumulatedData->Add(*fOneEventData,&nevents);
+ if ( fOneEventData->GetSize() == 0 ) fLastEventWasEmpty = kTRUE;
+ ++fNumberOfGoodPhysicsEvents;
}
-
+
+ AliDebug(1,Form("n %10d nphysics %10d ngood %10d",fNumberOfEvents,fNumberOfPhysicsEvents,fNumberOfGoodPhysicsEvents));
+
return !badEvent;
}
{
fRawReader->RewindEvents();
fNumberOfEvents=0;
+ fNumberOfPhysicsEvents=0;
+ fNumberOfGoodPhysicsEvents=0;
}
else
{
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()));