]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/BASE/util/AliHLTFileWriter.cxx
New Component:
[u/mrichter/AliRoot.git] / HLT / BASE / util / AliHLTFileWriter.cxx
index 00349ebb76f52a907195100696b02cb51efc8b22..7ae1e13d69deb4036fcefccd0d6f87f0d7a75e2b 100644 (file)
@@ -100,12 +100,12 @@ int AliHLTFileWriter::DoInit( int argc, const char** argv )
       if (pTokens) {
        int iEntries=pTokens->GetEntries();
        if (iEntries>1) {
-         int i=0;
-         fBaseName=((TObjString*)pTokens->At(i++))->GetString();
-         while (i<iEntries-1) {
-           fBaseName+="." + ((TObjString*)pTokens->At(i++))->GetString();
+         int n=0;
+         fBaseName=((TObjString*)pTokens->At(n++))->GetString();
+         while (n<iEntries-1) {
+           fBaseName+="." + ((TObjString*)pTokens->At(n++))->GetString();
          }
-         fExtension=((TObjString*)pTokens->At(i))->GetString();
+         fExtension=((TObjString*)pTokens->At(n))->GetString();
        }
        delete pTokens;
       }
@@ -121,7 +121,7 @@ int AliHLTFileWriter::DoInit( int argc, const char** argv )
       if (argument.BeginsWith("=")) {
        fSubDirFormat=argument.Replace(0,1,"");
       } else {
-       fSubDirFormat="event%03d";
+       fSubDirFormat="event%03lu";
       }
       // no additional eventno in the filename unless set again
       // the sub dir contains the id
@@ -168,6 +168,19 @@ int AliHLTFileWriter::DoInit( int argc, const char** argv )
     } else if (argument.CompareTo("-concatenate-events")==0) {
       SetMode(kConcatenateEvents);
 
+      // -write-all-events
+    } else if (argument.CompareTo("-write-all-events")==0) {
+      SetMode(kWriteAllEvents);
+
+      // -write-all-blocks
+    } else if (argument.CompareTo("-write-all-blocks")==0) {
+      SetMode(kWriteAllBlocks);
+
+      // -write-all
+    } else if (argument.CompareTo("-write-all")==0) {
+      SetMode(kWriteAllEvents);
+      SetMode(kWriteAllBlocks);
+
     } else {
       if ((iResult=ScanArgument(argc-i, &argv[i]))==-EINVAL) {
        HLTError("unknown argument %s", argument.Data());
@@ -187,6 +200,9 @@ int AliHLTFileWriter::DoInit( int argc, const char** argv )
   }
   if (iResult>=0) {
     iResult=InitWriter();
+    if (!fDirectory.IsNull()) {
+      gSystem->mkdir(fDirectory);
+    }
   }
 
   return iResult;
@@ -242,6 +258,8 @@ int AliHLTFileWriter::DumpEvent( const AliHLTComponentEventData& evtData,
 {
   // see header file for class documentation
   int iResult=0;
+  if (!IsDataEvent() && !CheckMode(kWriteAllEvents)) return 0;
+
   if (CheckMode(kConcatenateEvents)==0) {
     // reset the current file name in order to open a new file
     // for the first block. If events are concatenated, the current
@@ -252,6 +270,8 @@ int AliHLTFileWriter::DumpEvent( const AliHLTComponentEventData& evtData,
 
   int blockno=0;
   for (pDesc=GetFirstInputBlock(); pDesc!=NULL; pDesc=GetNextInputBlock(), blockno++) {
+    if (pDesc->fDataType==(kAliHLTAnyDataType|kAliHLTDataOriginPrivate) && !CheckMode(kWriteAllBlocks))
+      continue;
     HLTDebug("block %d out of %d", blockno, evtData.fBlockCnt);
     TString filename;
     HLTDebug("dataspec 0x%x", pDesc->fSpecification);
@@ -288,6 +308,9 @@ int AliHLTFileWriter::BuildFileName(const AliHLTEventID_t eventID, const int blo
   int iResult=0;
   //HLTDebug("build file name for event %d block %d", eventID, blockID);
   filename="";
+
+  AliHLTUInt32_t eventType=gkAliEventTypeUnknown;
+
   if (!fDirectory.IsNull()) {
     filename+=fDirectory;
     if (!filename.EndsWith("/"))
@@ -301,6 +324,11 @@ int AliHLTFileWriter::BuildFileName(const AliHLTEventID_t eventID, const int blo
   if (filename.EndsWith("/")) {
     gSystem->mkdir(filename);
   }
+
+  IsDataEvent(&eventType);
+  if (eventType==gkAliEventTypeStartOfRun && CheckMode(kWriteAllEvents)) filename+="SOR_";
+  else if (eventType==gkAliEventTypeEndOfRun && CheckMode(kWriteAllEvents)) filename+="EOR_";
+
   if (!fBaseName.IsNull())
     filename+=fBaseName;
   else