]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MONITOR/deroot.cxx
Using large-file extension version of fopen.
[u/mrichter/AliRoot.git] / MONITOR / deroot.cxx
index 6b2fbb436c4ad6661275018d5d3a7901da712e4b..1772b46316951996803d86b6880c6b4536c5e6a6 100644 (file)
@@ -5,37 +5,66 @@
 ******************************************************************************/
 
 #include <TError.h>
+#include <TSystem.h>
 #include <TSysEvtHandler.h>
-#ifdef ALI_DATE
+#include <TGrid.h>
 #include "deroot.h"
 
-int deroot(const char *rootFileName, const char *dateFileName);
+int deroot(const char *rootFileName, const char *dateFileName, const char *ddlFilesFolder);
 
-int deroot(const char *rootFileName, const char *dateFileName) {
+int deroot(const char *rootFileName, const char *dateFileName, const char *ddlFilesFolder) {
 
- unsigned char *dateEvent=new unsigned char [100000000];
+ TString str = rootFileName;
+ if (str.BeginsWith("alien://"))
+   TGrid::Connect("alien://");
 
- FILE *dateFile;
- size_t gdcCounter, gdcSize;
- TFile rootFile(rootFileName);
- TTree *t=(TTree *)rootFile.Get("RAW");
+ TFile *rootFile = TFile::Open(rootFileName,"READ");
+ if (!rootFile) {
+   cerr << "Raw data file can not be opened" << endl;
+   return(1);
+ }
+
+ TTree *t=(TTree *)rootFile->Get("RAW");
  if(!t) {
   cerr << "Error getting RAW tree" << endl;
   return(1);
  }
- AliRawEvent *rootEvent=NULL;
+ AliRawVEvent *rootEvent=NULL;
  
  t->SetBranchAddress("rawevent", &rootEvent);
 
- if(!(dateFile=fopen(dateFileName, "wb"))) {
+ FILE *dateFile;
+ if(!(dateFile=fopen64(dateFileName, "wb"))) {
   cerr << "Error opening DATE file" << endl;
   return(1);
  }
  
- for(gdcCounter=0; gdcCounter<t->GetEntries(); gdcCounter++) {
-  rootEvent=new AliRawEvent;
+ UInt_t eventSize = 10000000; // 10MB by default
+ unsigned char *dateEvent = new unsigned char[eventSize];
+ for(Long_t gdcCounter=0; gdcCounter<t->GetEntries(); gdcCounter++) {
+  rootEvent=NULL;
   t->GetEntry(gdcCounter);
-  gdcSize=Root2Date(rootEvent, dateEvent);
+  if (rootEvent->GetHeader()->GetEventSize() > eventSize) {
+    delete [] dateEvent;
+    eventSize = (UInt_t)(1.05*rootEvent->GetHeader()->GetEventSize());
+    dateEvent = new unsigned char[eventSize];
+  }
+
+  size_t gdcSize;
+  if (ddlFilesFolder) {
+    char command[256];
+    sprintf(command, "rm -rf %s/raw%ld", ddlFilesFolder, gdcCounter);
+    gSystem->Exec(command);
+    sprintf(command, "%s/raw%ld", ddlFilesFolder, gdcCounter);
+    if (gSystem->MakeDirectory(command) < 0) {
+      cerr << "Can not create directory " << command << endl;
+      return(1);
+    }
+    gdcSize=Root2Date(rootEvent, dateEvent, command);
+  }
+  else
+    gdcSize=Root2Date(rootEvent, dateEvent, NULL);
+
   delete rootEvent;
   cerr << "\r     \r" << setprecision(3) << 100*(float)(gdcCounter+1)/t->GetEntries() << "% ";
   fwrite(dateEvent, gdcSize, 1, dateFile);
@@ -46,7 +75,7 @@ int deroot(const char *rootFileName, const char *dateFileName) {
  cerr << "\r     \r";
  cerr.flush();
  delete t;
- rootFile.Close();
+ rootFile->Close();
  fclose(dateFile);
  delete [] dateEvent;
  
@@ -56,22 +85,17 @@ int deroot(const char *rootFileName, const char *dateFileName) {
 
 int main(int argc, char **argv) {
 
-  if (argc != 3) {
-    cerr << "Usage: deroot <input_root_file> <output_date_file>" << endl;
+  if (argc != 3 && argc != 4) {
+    cerr << "Usage: deroot <input_root_file> <output_date_file> [<optional_folder_for_ddl_files>]" << endl;
     return 1;
   }
 
- deroot(argv[1], argv[2]);
+  if (argc ==3)
+    deroot(argv[1], argv[2], NULL);
+  else
+    deroot(argv[1], argv[2], argv[3]);
 
  return(0);
 
 }
 
-#else
-int main(int /*argc*/, char** /*argv*/)
-{
-  ::Error("main", "this program was compiled without DATE");
-
-  return 1;
-}
-#endif