//______________________________________________________________________________
AliMDC::AliMDC(Int_t compress, Bool_t deleteFiles, EFilterMode filterMode,
- Double_t maxSizeTagDB, const char* fileNameTagDB) :
+ Double_t maxSizeTagDB, const char* fileNameTagDB,
+ const char *guidFileFolder) :
fEvent(new AliRawEvent),
fESD(NULL),
fStats(NULL),
fStop(kFALSE),
fIsTagDBCreated(kFALSE),
fMaxSizeTagDB(maxSizeTagDB),
- fFileNameTagDB(fileNameTagDB)
+ fFileNameTagDB(fileNameTagDB),
+ fGuidFileFolder(guidFileFolder)
{
// Create MDC processor object.
// compress is the file compression mode.
// tag DB and then fileNameTagDB is the directory name for the tag DB.
// Otherwise fileNameTagDB is the file name of the tag DB. If it is NULL
// no tag DB will be created.
+ // Optional 'guidFileFolder' specifies the folder in which *.guid files
+ // will be stored. In case this option is not given, the *.guid files
+ // will be written to the same folder as the raw-data files.
if (fFilterMode != kFilterOff) {
// }
// }
+ // Create the guid files folder if it does not exist
+ if (fGuidFileFolder) {
+ gSystem->ResetErrno();
+ gSystem->MakeDirectory(fGuidFileFolder);
+ if (gSystem->GetErrno() && gSystem->GetErrno() != EEXIST) {
+ SysError("AliMDC", "mkdir %s", fGuidFileFolder);
+ }
+ }
+
// install SIGUSR1 handler to allow clean interrupts
gSystem->AddSignalHandler(new AliMDCInterruptHandler(this));
fRawDB->Create();
}
+ if (fGuidFileFolder) fRawDB->SetGuidFileFolder(fGuidFileFolder);
+
if (fRawDB->IsZombie()) {
delete fRawDB;
fRawDB = NULL;
AliMDC(Int_t compress, Bool_t deleteFiles,
EFilterMode filterMode = kFilterTransparent,
- Double_t maxSizeTagDB = -1, const char* fileNameTagDB = NULL);
+ Double_t maxSizeTagDB = -1, const char* fileNameTagDB = NULL,
+ const char* guidFileFolder = NULL);
virtual ~AliMDC();
Int_t Open(EWriteMode mode, const char* fileName,
Bool_t fIsTagDBCreated; // is tag db already created
Double_t fMaxSizeTagDB;// max size of the tag DB
const char* fFileNameTagDB;// tag DB file name
+ const char* fGuidFileFolder; // guid files folder
// Filter names
enum {kNFilters = 1};
#include <TSystem.h>
#include <TKey.h>
+#include <TObjString.h>
+
#include "AliESD.h"
#include "AliRawEvent.h"
#include "AliRawEventHeaderBase.h"
fFS1(""),
fFS2(""),
fDeleteFiles(kFALSE),
- fStop(kFALSE)
+ fStop(kFALSE),
+ fGuidFileFolder(NULL)
{
// Create a new raw DB
}
// Write a text file with file GUID
- TString guidFileName = fRawDB->GetName();
- guidFileName += ".guid";
- ofstream fguid(guidFileName.Data());
- TString guid = fRawDB->GetUUID().AsString();
- fguid << "guid: \t" << guid.Data();
- fguid.close();
+ // in the specified folder
+ WriteGuidFile();
delete fRawDB;
fRawDB = 0;
return version.Data();
}
+
+//______________________________________________________________________________
+void AliRawDB::WriteGuidFile()
+{
+ // Write the guid file
+ // in the specified folder
+
+ TString guidFileName;
+ if (fGuidFileFolder) {
+ guidFileName = fGuidFileFolder;
+
+ TString pathStr = fRawDB->GetName();
+ TObjArray *pathArr = pathStr.Tokenize('/');
+ guidFileName.Append("/");
+ guidFileName.Append(((TObjString *)pathArr->Last())->String());
+ pathArr->Delete();
+ delete pathArr;
+ }
+ else
+ guidFileName = fRawDB->GetName();
+
+ guidFileName += ".guid";
+
+ ofstream fguid(guidFileName.Data());
+ TString guid = fRawDB->GetUUID().AsString();
+ fguid << "guid: \t" << guid.Data();
+ fguid.close();
+}
void SetMaxSize(Double_t maxSize) { fMaxSize = maxSize; }
void SetFS(const char* fs1, const char* fs2 = NULL);
void SetDeleteFiles(Bool_t deleteFiles = kTRUE) { fDeleteFiles = deleteFiles; }
+ void SetGuidFileFolder(const char* guidFileFolder)
+ { fGuidFileFolder = guidFileFolder; }
Bool_t NextFile(const char* fileName = NULL);
TString fFS2; // second raw DB file system location
Bool_t fDeleteFiles; // flag for deletion of files
Bool_t fStop; // stop execution (triggered by SIGUSR1)
-
+ const char *fGuidFileFolder; // folder which contains guid files
static const char *fgkAliRootTag; // string with the aliroot tag id
virtual const char *GetFileName() const;
virtual Bool_t FSHasSpace(const char *fs) const;
virtual void MakeTree();
+ void WriteGuidFile();
+
private:
AliRawDB(const AliRawDB& rawDB);
AliRawDB& operator = (const AliRawDB& rawDB);
#include "AliLog.h"
void* alimdcCreate(int compress, int filterMode,
- double maxSizeTagDB, const char* fileNameTagDB)
+ double maxSizeTagDB, const char* fileNameTagDB,
+ const char* guidFileFolder)
{
// create an AliMDC object
return new AliMDC(compress, kFALSE, AliMDC::EFilterMode(filterMode),
- maxSizeTagDB, fileNameTagDB);
+ maxSizeTagDB, fileNameTagDB,
+ guidFileFolder);
}
#endif
void* alimdcCreate(int compress, int filterMode,
- double maxSizeTagDB, const char* fileNameTagDB);
+ double maxSizeTagDB, const char* fileNameTagDB,
+ const char* guidFileFolder);
int alimdcOpen(void* alimdc, int mode, const char* fileName);
int alimdcProcessEvent(void* alimdc, void* event, int isIovecArray);
int alimdcGetTotalFileSize(void* alimdc);