**************************************************************************/
// $Id$
-//
+
+//-----------------------------------------------------------------------------
// Class AliMUONGMSSubprocessor
// -----------------------------
// The shuttle subprocessor for GMS data
// Author: Ivana Hrivnacova, IPN Orsay
// 16/09/2006
+//-----------------------------------------------------------------------------
#include "AliMUONGMSSubprocessor.h"
#include "AliMUONPreprocessor.h"
#include "AliCDBMetaData.h"
-#include "AliLog.h"
#include <TTimeStamp.h>
#include <TFile.h>
#include <TClonesArray.h>
+#include <TObjString.h>
#include <Riostream.h>
+/// \cond CLASSIMP
ClassImp(AliMUONGMSSubprocessor)
+/// \endcond
-const Int_t AliMUONGMSSubprocessor::fgkSystem = AliPreprocessor::kDAQ;
+const Int_t AliMUONGMSSubprocessor::fgkSystem = AliPreprocessor::kDCS;
const TString AliMUONGMSSubprocessor::fgkDataId = "GMS";
const TString AliMUONGMSSubprocessor::fgkMatrixArrayName = "GMSarray";
-//______________________________________________________________________________________________
+//______________________________________________________________________________
AliMUONGMSSubprocessor::AliMUONGMSSubprocessor(AliMUONPreprocessor* master)
: AliMUONVSubprocessor(master, "GMS", "Upload GMS matrices to OCDB"),
- fTransformer(true)
+ fTransformer(0)
{
/// Constructor
- fTransformer.ReadGeometryData("volpath.dat", "transform.dat");
}
-//______________________________________________________________________________________________
+//______________________________________________________________________________
AliMUONGMSSubprocessor::~AliMUONGMSSubprocessor()
{
/// Destructor
+
+ delete fTransformer;
}
-//______________________________________________________________________________________________
-UInt_t AliMUONGMSSubprocessor::Process(TMap* /*dcsAliasMap*/)
+
+//
+// private methods
+//
+
+
+//______________________________________________________________________________
+void AliMUONGMSSubprocessor::Initialize(Int_t /*run*/,
+ UInt_t /*startTime*/, UInt_t /*endTime*/)
{
-/// Convert TGeoHMatrix to AliAlignObjMatrix and fill them into AliTestDataDCS object
+/// Instantiate geometry transformer
- const char* fileName
- = Master()->GetFile(fgkSystem, fgkDataId, fgkDataId);
- if ( ! fileName) {
- AliErrorStream() << "File not found" << endl;
- return 1;
+ if ( ! fTransformer ) {
+ fTransformer = new AliMUONGeometryTransformer();
+ fTransformer->CreateModules();
}
+}
+
+//______________________________________________________________________________
+UInt_t AliMUONGMSSubprocessor::ProcessFile(const TString& fileName)
+{
+/// Convert TGeoHMatrix to AliAlignObjMatrix and fill them into AliTestDataDCS object
+
+ Master()->Log(Form("Processing GMS file %s", fileName.Data()));
// Open root file
- TFile f(fileName);
+ TFile f(fileName.Data());
+ if ( ! f.IsOpen() ) {
+ Master()->Log(Form("Cannot open file %s",fileName.Data()));
+ return 1;
+ }
// Get array with matrices
TClonesArray* array = (TClonesArray*)f.Get(fgkMatrixArrayName);
if ( ! array ) {
- AliErrorStream() << "TClonesArray with not found in file "
- << fileName << endl;
- return 1;
+ Master()->Log(Form("TClonesArray not found in file %s",fileName.Data()));
+ return 2;
}
// Convert matrices into Alice alignment objects
for (Int_t i=0; i<array->GetEntriesFast(); i++ ) {
TGeoHMatrix* matrix = (TGeoHMatrix*)array->At(i);
- fTransformer.AddMisAlignModule(matrix->GetUniqueID(), *matrix);
+ fTransformer->AddMisAlignModule(matrix->GetUniqueID(), *matrix);
}
- TObject* data = const_cast< TClonesArray*>(fTransformer.GetMisAlignmentData());
+ TObject* data = const_cast< TClonesArray*>(fTransformer->GetMisAlignmentData());
//Now we have to store the final CDB file
+ Master()->Log("Storing GMS");
AliCDBMetaData metaData;
metaData.SetBeamPeriod(0);
metaData.SetResponsible("");
metaData.SetComment("This preprocessor fills GMS alignment objects.");
- UInt_t result = Master()->Store("SHUTTLE", "GMS", data, &metaData, 0, 0);
+ Bool_t result = Master()->Store("SHUTTLE", "GMS", data, &metaData, 0, 0);
// Clear MisAlignArray in transformer
- fTransformer.ClearMisAlignmentData();
+ fTransformer->ClearMisAlignmentData();
+
+ return (result!=kTRUE);
+}
+
+//
+// public methods
+//
+
+
+//______________________________________________________________________________
+UInt_t AliMUONGMSSubprocessor::Process(TMap* /*dcsAliasMap*/)
+{
+/// Process GMS alignment files.
+/// Return failure (0) in case procession of some file has failed
+
+ UInt_t result = 1;
+ TList* sources = Master()->GetFileSources(fgkSystem, fgkDataId);
+ TIter next(sources);
+ TObjString* o(0x0);
+ while ( ( o = static_cast<TObjString*>(next()) ) ) {
+ TString fileName(Master()->GetFile(fgkSystem, fgkDataId, o->GetName()));
+ result *= ProcessFile(fileName);
+ }
+ delete sources;
return result;
}