]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MONITOR/deroot.cxx
Protection against index out of range
[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>
36470d8d 10#include "deroot.h"
11
8e8e0e3e 12int deroot(const char *rootFileName, const char *dateFileName, const char *ddlFilesFolder);
36470d8d 13
8e8e0e3e 14int deroot(const char *rootFileName, const char *dateFileName, const char *ddlFilesFolder) {
36470d8d 15
36470d8d 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
8e8e0e3e 26 FILE *dateFile;
36470d8d 27 if(!(dateFile=fopen(dateFileName, "wb"))) {
28 cerr << "Error opening DATE file" << endl;
29 return(1);
30 }
31
8e8e0e3e 32 UInt_t eventSize = 10000000; // 10MB by default
33 unsigned char *dateEvent = new unsigned char[eventSize];
34 for(size_t gdcCounter=0; gdcCounter<t->GetEntries(); gdcCounter++) {
36470d8d 35 rootEvent=new AliRawEvent;
36 t->GetEntry(gdcCounter);
8e8e0e3e 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 -r %s/raw%d", ddlFilesFolder, gdcCounter);
47 gSystem->Exec(command);
48 sprintf(command, "%s/raw%d", 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
36470d8d 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
76int main(int argc, char **argv) {
77
8e8e0e3e 78 if (argc != 3 && argc != 4) {
79 cerr << "Usage: deroot <input_root_file> <output_date_file> [<optional_folder_for_ddl_files>]" << endl;
36470d8d 80 return 1;
81 }
82
8e8e0e3e 83 if (argc ==3)
84 deroot(argv[1], argv[2], NULL);
85 else
86 deroot(argv[1], argv[2], argv[3]);
36470d8d 87
88 return(0);
89
90}
91