Implementation of new data members to cope with the latest
[u/mrichter/AliRoot.git] / MONITOR / deroot.cxx
1 // Author: Filimon Roukoutakis 02/08/2006
2
3 /******************************************************************************
4   MOOD - Monitor Of On-line Data and Detector Debugger for ALICE Experiment
5 ******************************************************************************/
6
7 #include <TError.h>
8 #include <TSystem.h>
9 #include <TSysEvtHandler.h>
10 #include "deroot.h"
11
12 int deroot(const char *rootFileName, const char *dateFileName, const char *ddlFilesFolder);
13
14 int deroot(const char *rootFileName, const char *dateFileName, const char *ddlFilesFolder) {
15
16  TFile rootFile(rootFileName);
17  TTree *t=(TTree *)rootFile.Get("RAW");
18  if(!t) {
19   cerr << "Error getting RAW tree" << endl;
20   return(1);
21  }
22  AliRawEvent *rootEvent=NULL;
23  
24  t->SetBranchAddress("rawevent", &rootEvent);
25
26  FILE *dateFile;
27  if(!(dateFile=fopen(dateFileName, "wb"))) {
28   cerr << "Error opening DATE file" << endl;
29   return(1);
30  }
31  
32  UInt_t eventSize = 10000000; // 10MB by default
33  unsigned char *dateEvent = new unsigned char[eventSize];
34  for(Long_t gdcCounter=0; gdcCounter<t->GetEntries(); gdcCounter++) {
35   rootEvent=new AliRawEvent;
36   t->GetEntry(gdcCounter);
37   if (rootEvent->GetHeader()->GetEventSize() > eventSize) {
38     delete [] dateEvent;
39     eventSize = (UInt_t)(1.05*rootEvent->GetHeader()->GetEventSize());
40     dateEvent = new unsigned char[eventSize];
41   }
42
43   size_t gdcSize;
44   if (ddlFilesFolder) {
45     char command[256];
46     sprintf(command, "rm -rf %s/raw%ld", ddlFilesFolder, gdcCounter);
47     gSystem->Exec(command);
48     sprintf(command, "%s/raw%ld", ddlFilesFolder, gdcCounter);
49     if (gSystem->MakeDirectory(command) < 0) {
50       cerr << "Can not create directory " << command << endl;
51       return(1);
52     }
53     gdcSize=Root2Date(rootEvent, dateEvent, command);
54   }
55   else
56     gdcSize=Root2Date(rootEvent, dateEvent, NULL);
57
58   delete rootEvent;
59   cerr << "\r     \r" << setprecision(3) << 100*(float)(gdcCounter+1)/t->GetEntries() << "% ";
60   fwrite(dateEvent, gdcSize, 1, dateFile);
61  }
62
63  // Cleanup resources
64  
65  cerr << "\r     \r";
66  cerr.flush();
67  delete t;
68  rootFile.Close();
69  fclose(dateFile);
70  delete [] dateEvent;
71  
72  return(0);
73
74 }
75
76 int main(int argc, char **argv) {
77
78   if (argc != 3 && argc != 4) {
79     cerr << "Usage: deroot <input_root_file> <output_date_file> [<optional_folder_for_ddl_files>]" << endl;
80     return 1;
81   }
82
83   if (argc ==3)
84     deroot(argv[1], argv[2], NULL);
85   else
86     deroot(argv[1], argv[2], argv[3]);
87
88  return(0);
89
90 }
91