// $Id$
-#include <sstream>
-
-#include <Riostream.h>
-#include <TList.h>
-#include <TObjString.h>
-#include <TSystem.h>
+#include "AliMUONPedestalSubprocessor.h"
#include "AliCDBMetaData.h"
#include "AliLog.h"
#include "AliMUON2DMap.h"
-#include "AliMUONCalibParam2F.h"
-#include "AliMUONConstants.h"
-#include "AliMUONObjectPair.h"
-#include "AliMUONPedestalSubprocessor.h"
+#include "AliMUON2DStoreValidator.h"
+#include "AliMUONCalibParamNF.h"
#include "AliMUONPreprocessor.h"
-#include "AliMUONVDataIterator.h"
+#include "AliMpConstants.h"
#include "AliMpDDLStore.h"
+#include "TObjString.h"
+#include <Riostream.h>
+#include <TList.h>
+#include <TObjString.h>
+#include <TSystem.h>
+#include <sstream>
-///
+//-----------------------------------------------------------------------------
/// \class AliMUONPedestalSubprocessor
///
/// Implementation of AliMUONVSubprocessor class to deal with MUON TRK pedestals.
///---------------------------------------------------------------------------\n
///
/// \author L. Aphecetche
-///
+//-----------------------------------------------------------------------------
/// \cond CLASSIMP
ClassImp(AliMUONPedestalSubprocessor)
"Upload MUON Tracker pedestals to OCDB"),
fPedestals(0x0)
{
- // default ctor
+ /// default ctor
}
//_____________________________________________________________________________
AliMUONPedestalSubprocessor::~AliMUONPedestalSubprocessor()
{
- // dtor
+ /// dtor
delete fPedestals;
}
UInt_t
AliMUONPedestalSubprocessor::Process(TMap* /*dcsAliasMap*/)
{
- // Store the pedestals into the CDB
+ /// Store the pedestals into the CDB
- if (!fPedestals) return 0;
+ if (!fPedestals)
+ {
+ // this is the only reason to fail for the moment : getting no pedestal
+ // at all.
+ return 1;
+ }
+ AliMUON2DStoreValidator validator;
+
+ Master()->Log("Validating");
+
+ TObjArray* chambers = validator.Validate(*fPedestals);
+
+ if (chambers)
+ {
+ // we hereby report what's missing, but this is not a reason to fail ;-)
+ // the only reason to fail would be if we got no pedestal at all
+ TList lines;
+ lines.SetOwner(kTRUE);
+
+ validator.Report(lines,*chambers);
+
+ TIter next(&lines);
+ TObjString* line;
+
+ while ( ( line = static_cast<TObjString*>(next()) ) )
+ {
+ Master()->Log(line->String().Data());
+ }
+ }
+
Master()->Log("Storing pedestals");
AliCDBMetaData metaData;
metaData.SetComment("Computed by AliMUONPedestalSubprocessor $Id$");
Bool_t validToInfinity = kTRUE;
- UInt_t result = Master()->Store("Calib", "Pedestals", fPedestals, &metaData, 0, validToInfinity);
+ Bool_t result = Master()->Store("Calib", "Pedestals", fPedestals, &metaData, 0, validToInfinity);
- return result;
+ return ( result != kTRUE ); // return 0 if everything is ok.
}
//_____________________________________________________________________________
Int_t
AliMUONPedestalSubprocessor::ReadFile(const char* filename)
{
- // Read the pedestals from an ASCII file.
- // Format of that file is one line per channel :
- //---------------------------------------------------------------------------
- // BUS_PATCH MANU_ADDR CHANNEL MEAN SIGMA
- //---------------------------------------------------------------------------
- //
- // Return kFALSE if reading was not successfull.
- //
+ /// Read the pedestals from an ASCII file. \n
+ /// Format of that file is one line per channel : \n
+ ///-------------------------------------------------------------------------\n
+ /// BUS_PATCH MANU_ADDR CHANNEL MEAN SIGMA \n
+ ///-------------------------------------------------------------------------\n
+ /// \n
+ /// Return kFALSE if reading was not successfull. \n
+ ///
TString sFilename(gSystem->ExpandPathName(filename));
char line[80];
Int_t busPatchID, manuID, manuChannel;
Float_t pedMean, pedSigma;
- static const Int_t kNchannels(64);
- static Bool_t replace(kFALSE);
+ static const Int_t kNchannels(AliMpConstants::ManuNofChannels());
Int_t n(0);
while ( in.getline(line,80) )
busPatchID,detElemID,manuID,manuChannel,pedMean,pedSigma));
AliMUONVCalibParam* ped =
- static_cast<AliMUONVCalibParam*>(fPedestals->Get(detElemID,manuID));
+ static_cast<AliMUONVCalibParam*>(fPedestals->FindObject(detElemID,manuID));
if (!ped)
{
- ped = new AliMUONCalibParam2F(kNchannels,AliMUONCalibParam2F::InvalidFloatValue());
- fPedestals->Set(detElemID,manuID,ped,replace);
+ ped = new AliMUONCalibParamNF(2,kNchannels,
+ detElemID,manuID,
+ AliMUONVCalibParam::InvalidFloatValue());
+ fPedestals->Add(ped);
}
ped->SetValueAsFloat(manuChannel,0,pedMean);
ped->SetValueAsFloat(manuChannel,1,pedSigma);
AliMUONPedestalSubprocessor::Print(Option_t* opt) const
{
/// ouput to screen
- AliMUONVDataIterator* it = fPedestals->Iterator();
- AliMUONObjectPair* p;
-
- while ( ( p = static_cast<AliMUONObjectPair*>(it->Next() ) ) )
- {
- AliMUONVCalibParam* value = static_cast<AliMUONVCalibParam*>(p->Value());
- value->Print(opt);
- }
+ if (fPedestals) fPedestals->Print("",opt);
}