Using large-file extension version of fopen.
[u/mrichter/AliRoot.git] / MONITOR / deroot.cxx
CommitLineData
36470d8d 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>
8e8e0e3e 8#include <TSystem.h>
36470d8d 9#include <TSysEvtHandler.h>
a0d9ff9d 10#include <TGrid.h>
36470d8d 11#include "deroot.h"
12
8e8e0e3e 13int deroot(const char *rootFileName, const char *dateFileName, const char *ddlFilesFolder);
36470d8d 14
8e8e0e3e 15int deroot(const char *rootFileName, const char *dateFileName, const char *ddlFilesFolder) {
36470d8d 16
a0d9ff9d 17 TString str = rootFileName;
18 if (str.BeginsWith("alien://"))
19 TGrid::Connect("alien://");
20
21 TFile *rootFile = TFile::Open(rootFileName,"READ");
22 if (!rootFile) {
23 cerr << "Raw data file can not be opened" << endl;
24 return(1);
25 }
26
27 TTree *t=(TTree *)rootFile->Get("RAW");
36470d8d 28 if(!t) {
29 cerr << "Error getting RAW tree" << endl;
30 return(1);
31 }
33314186 32 AliRawVEvent *rootEvent=NULL;
36470d8d 33
34 t->SetBranchAddress("rawevent", &rootEvent);
35
8e8e0e3e 36 FILE *dateFile;
87862561 37 if(!(dateFile=fopen64(dateFileName, "wb"))) {
36470d8d 38 cerr << "Error opening DATE file" << endl;
39 return(1);
40 }
41
8e8e0e3e 42 UInt_t eventSize = 10000000; // 10MB by default
43 unsigned char *dateEvent = new unsigned char[eventSize];
f8e4a10a 44 for(Long_t gdcCounter=0; gdcCounter<t->GetEntries(); gdcCounter++) {
33314186 45 rootEvent=NULL;
36470d8d 46 t->GetEntry(gdcCounter);
8e8e0e3e 47 if (rootEvent->GetHeader()->GetEventSize() > eventSize) {
48 delete [] dateEvent;
49 eventSize = (UInt_t)(1.05*rootEvent->GetHeader()->GetEventSize());
50 dateEvent = new unsigned char[eventSize];
51 }
52
53 size_t gdcSize;
54 if (ddlFilesFolder) {
55 char command[256];
db001056 56 sprintf(command, "rm -rf %s/raw%ld", ddlFilesFolder, gdcCounter);
8e8e0e3e 57 gSystem->Exec(command);
e41f1e44 58 sprintf(command, "%s/raw%ld", ddlFilesFolder, gdcCounter);
8e8e0e3e 59 if (gSystem->MakeDirectory(command) < 0) {
60 cerr << "Can not create directory " << command << endl;
61 return(1);
62 }
63 gdcSize=Root2Date(rootEvent, dateEvent, command);
64 }
65 else
66 gdcSize=Root2Date(rootEvent, dateEvent, NULL);
67
36470d8d 68 delete rootEvent;
69 cerr << "\r \r" << setprecision(3) << 100*(float)(gdcCounter+1)/t->GetEntries() << "% ";
70 fwrite(dateEvent, gdcSize, 1, dateFile);
71 }
72
73 // Cleanup resources
74
75 cerr << "\r \r";
76 cerr.flush();
77 delete t;
a0d9ff9d 78 rootFile->Close();
36470d8d 79 fclose(dateFile);
80 delete [] dateEvent;
81
82 return(0);
83
84}
85
86int main(int argc, char **argv) {
87
8e8e0e3e 88 if (argc != 3 && argc != 4) {
89 cerr << "Usage: deroot <input_root_file> <output_date_file> [<optional_folder_for_ddl_files>]" << endl;
36470d8d 90 return 1;
91 }
92
8e8e0e3e 93 if (argc ==3)
94 deroot(argv[1], argv[2], NULL);
95 else
96 deroot(argv[1], argv[2], argv[3]);
36470d8d 97
98 return(0);
99
100}
101