// $Id$
#include "AliMUONPreprocessor.h"
-#include "TObjArray.h"
+
+#include "AliCDBEntry.h"
+#include "AliLog.h"
+#include "AliMUONGMSSubprocessor.h"
+#include "AliMUONHVSubprocessor.h"
#include "AliMUONPedestalSubprocessor.h"
+#include "AliMpCDB.h"
+#include "AliMpDDLStore.h"
+#include "AliMpDataMap.h"
+#include "AliMpDataStreams.h"
+#include "AliMpSegmentation.h"
+#include "AliShuttleInterface.h"
#include "Riostream.h"
+#include "TObjArray.h"
+//-----------------------------------------------------------------------------
/// \class AliMUONPreprocessor
///
/// Shuttle preprocessor for MUON subsystems (TRK and TRG)
/// (of type AliMUONVSubprocessor).
///
/// \author Laurent Aphecetche
+//-----------------------------------------------------------------------------
/// \cond CLASSIMP
ClassImp(AliMUONPreprocessor)
/// \endcond
//_____________________________________________________________________________
-AliMUONPreprocessor::AliMUONPreprocessor(const char* detector,
- AliShuttleInterface* shuttle)
-: AliPreprocessor(detector,shuttle), fSubprocessors(new TObjArray[kLast])
+AliMUONPreprocessor::AliMUONPreprocessor(const char* detName, AliShuttleInterface* shuttle)
+: AliPreprocessor(detName, shuttle),
+ fIsValid(kFALSE),
+ fIsApplicable(kTRUE),
+ fSubprocessors(new TObjArray()),
+ fProcessDCS(kFALSE)
{
- /// ctor. Builds the list of subtasks
- ///
- /// \todo FIXME: should test detector wrt to tracker or trigger to
- /// instantiate the correct list of subtasks, which should be :
- /// Tracker :
- /// pedestals
- /// gains
- /// deadchannels
- /// gms
- ///
- /// Trigger :
- /// masks
- /// lut
- ///
- fSubprocessors->AddAt(new AliMUONPedestalSubprocessor(this),kPedestal);
+ /// ctor
}
//_____________________________________________________________________________
delete fSubprocessors;
}
+//_____________________________________________________________________________
+void
+AliMUONPreprocessor::ClearSubprocessors()
+{
+ /// Empty our subprocessor list
+ fSubprocessors->Clear();
+ fProcessDCS = kFALSE;
+ fIsValid = kFALSE;
+ fIsApplicable = kTRUE;
+}
+
+//_____________________________________________________________________________
+void
+AliMUONPreprocessor::Add(AliMUONVSubprocessor* sub, Bool_t processDCS)
+{
+ /// Add a subprocessor to our list of workers
+ fSubprocessors->Add(sub);
+ if ( processDCS == kTRUE ) fProcessDCS = processDCS;
+}
+
//_____________________________________________________________________________
void
AliMUONPreprocessor::Initialize(Int_t run, UInt_t startTime, UInt_t endTime)
{
- /// loop over subtasks and initialize them
- for ( Int_t i = 0; i <= fSubprocessors->GetLast(); ++i )
+ /// Load mapping and initialize subtasks
+
+ // Delete previous mapping
+ AliMpCDB::UnloadAll();
+
+ if ( ! IsApplicable() ) {
+ Log(Form("WARNING-RunType=%s is not one I should handle.",GetRunType()));
+ return;
+ }
+
+ // Load mapping from CDB for this run
+ AliCDBEntry* cdbEntry = GetFromOCDB("Calib", "MappingData");
+ if (!cdbEntry)
+ {
+ Log("Could not get MappingData from OCDB !");
+ fIsValid = kFALSE;
+ }
+ else
+ {
+ AliMpDataMap* dataMap = dynamic_cast<AliMpDataMap*>(cdbEntry->GetObject());
+ if (!dataMap)
+ {
+ Log("DataMap is not of the expected type. That is bad...");
+ fIsValid = kFALSE;
+ }
+ else
+ {
+ AliMpDataStreams dataStreams(dataMap);
+ AliMpDDLStore::ReadData(dataStreams);
+ }
+ }
+
+ Int_t nok(0);
+
+ if (IsValid())
{
- Subprocessor(i)->Initialize(run,startTime,endTime);
+ // loop over subtasks and initialize them
+ for ( Int_t i = 0; i <= fSubprocessors->GetLast(); ++i )
+ {
+ Bool_t ok = Subprocessor(i)->Initialize(run,startTime,endTime);
+ if (ok) ++nok;
+ }
+ if (nok != fSubprocessors->GetLast()+1) fIsValid = kFALSE;
}
+ Log(Form("Initialize was %s",( IsValid() ? "fine" : "NOT OK")));
}
//_____________________________________________________________________________
AliMUONPreprocessor::Process(TMap* dcsAliasMap)
{
/// loop over subtasks to make them work
+
+ if (!IsValid())
+ {
+ Log("Will not run as not properly initialized");
+ return 99;
+ }
+
+ if (!IsApplicable())
+ {
+ Log("Nothing to do for me");
+ return 0;
+ }
+
UInt_t rv(0);
for ( Int_t i = 0; i <= fSubprocessors->GetLast(); ++i )
{
rv += Subprocessor(i)->Process(dcsAliasMap);
}
+
return rv;
}