X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MONITOR%2Fderoot.cxx;h=99a8962f04a9b8c3a7abd35f863150f01e0011f4;hb=8809be5b5e578480560070566463e843d4d9f9b3;hp=e18a961bef40e49bef0d08632c06881a2a831c0e;hpb=36470d8d95f73e9b97b69cad28c982233f6eafee;p=u%2Fmrichter%2FAliRoot.git diff --git a/MONITOR/deroot.cxx b/MONITOR/deroot.cxx index e18a961bef4..99a8962f04a 100644 --- a/MONITOR/deroot.cxx +++ b/MONITOR/deroot.cxx @@ -5,20 +5,26 @@ ******************************************************************************/ #include +#include #include -#ifdef ALI_DATE +#include #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); @@ -27,15 +33,38 @@ int deroot(const char *rootFileName, const char *dateFileName) { t->SetBranchAddress("rawevent", &rootEvent); + FILE *dateFile; if(!(dateFile=fopen(dateFileName, "wb"))) { cerr << "Error opening DATE file" << endl; return(1); } - for(gdcCounter=0; gdcCounterGetEntries(); gdcCounter++) { + UInt_t eventSize = 10000000; // 10MB by default + unsigned char *dateEvent = new unsigned char[eventSize]; + for(Long_t gdcCounter=0; gdcCounterGetEntries(); gdcCounter++) { rootEvent=new AliRawEvent; 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 " << endl; + if (argc != 3 && argc != 4) { + cerr << "Usage: deroot []" << 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*/) -{ - ::Fatal("main", "this program was compiled without DATE"); - - return 1; -} -#endif