20 #include "TDirectory.h"
31 : TNamed(name,
"This is a Go4 export manager"),fiFilter(
GO4EX_ROOT)
82 if(myobject==0)
return;
83 if(myobject->InheritsFrom(TDirectory::Class()))
85 TDirectory* subdir=
dynamic_cast<TDirectory*
>(myobject);
88 else if (myobject->InheritsFrom(TFolder::Class()))
90 TFolder* subfold=
dynamic_cast<TFolder*
> (myobject);
93 else if (myobject->InheritsFrom(TCollection::Class()))
95 TCollection* col=
dynamic_cast<TCollection*
> (myobject);
98 else if(myobject->InheritsFrom(TH1::Class()))
100 TH1* histo=
dynamic_cast<TH1*
>(myobject);
103 else if (myobject->InheritsFrom(TGraph::Class()))
105 TGraph* graph=
dynamic_cast<TGraph*
>(myobject);
118 myobject->GetName(),myobject->ClassName());
126 TGo4Log::Message(0,
"ExportManager: Converting contents of folder %s",fold->GetName());
135 TString dirname=fold->GetName();
137 TString com=
"mkdir "+dirname;
139 gSystem->cd(dirname.Data());
141 TCollection* folderlist=fold->GetListOfFolders();
152 if(source==0)
return;
153 TGo4Log::Message(0,
"ExportManager: Converting contents of directory %s",source->GetName());
162 TString dirname=source->GetName();
163 if(!dirname.Contains(
".root"))
166 TString com=
"mkdir "+dirname;
168 gSystem->cd(dirname.Data());
175 TIter iter(source->GetListOfKeys());
176 while((mykey=(TKey*) iter())!=0)
178 myobject= mykey->ReadObj();
185 TGo4Log::Message(2,
"ExportManager: Could not read key %s", mykey->GetName());
188 if(!dirname.Contains(
".root"))
200 TGo4Log::Message(0,
"ExportManager: Converting contents of collection %s",col->GetName());
210 while((ob=iter())!=0)
268 TString objectname=histo->GetName();
269 TString outname=objectname;
270 outname.Append(
".hdat");
273 std::ofstream outfile(outname.Data());
276 TGo4Log::Message(3,
"ExportManager: Error opening outputfile %s",outname.Data());
280 TGo4Log::Message(0,
"ExportManager: Converting histogram %s to ASCII",histo->GetName());
282 Int_t maxbinX=histo->GetNbinsX();
283 Int_t maxbinY=histo->GetNbinsY();
284 Int_t maxbinZ=histo->GetNbinsZ();
287 outfile <<
"# Histogram "<<histo->ClassName() <<
": "<<histo->GetName()<< std::endl;
289 outfile <<
"# Xbin \tYbin \tZbin \tContent"<< std::endl;
291 outfile <<
"# X \tY \tZ \tContent"<< std::endl;
292 for(Int_t x=1; x<=maxbinX; ++x)
294 for(Int_t y=1; y<=maxbinY; ++y)
296 for(Int_t z=1; z<=maxbinZ; ++z)
298 globalbin=histo->GetBin(x,y,z);
299 cont=histo->GetBinContent(globalbin);
302 outfile <<x<<
" \t"<<y<<
" \t"<<z<<
" \t"<<cont<< std::endl;
307 TAxis* xax=histo->GetXaxis();
309 if(xax) xval=xax->GetBinLowEdge(x);
311 TAxis* yax=histo->GetYaxis();
313 if(yax) yval=yax->GetBinLowEdge(y);
315 TAxis* zax=histo->GetZaxis();
317 if(zax) zval=zax->GetBinLowEdge(z);
318 outfile <<xval<<
" \t"<<yval<<
" \t"<<zval<<
" \t"<<cont<< std::endl;
327 catch(std::exception& ex)
329 TGo4Log::Message(3,
"standard exception %s in TGo4ExportManager::ExportASCII(TH1*)",
334 TGo4Log::Message(3,
"!!! Unexpected exception in TGo4ExportManager::ExportASCII(TH1*)!!!");
345 TString objectname=graph->GetName();
346 TString outname=objectname;
347 outname.Append(
".gdat");
349 std::ofstream outfile(outname.Data());
351 TGo4Log::Message(3,
"ExportManager: Error opening outputfile %s",outname.Data());
354 TGo4Log::Message(0,
"ExportManager: Converting graph %s to ASCII",graph->GetName());
355 Int_t maxpoints=graph->GetN();
356 outfile <<
"# Graph "<<graph->ClassName() <<
": "<<graph->GetName()<< std::endl;
357 outfile <<
"# Point \tX \tY"<< std::endl;
358 for(Int_t point=0; point<maxpoints; ++point)
362 graph->GetPoint(point,xg,yg);
363 outfile <<point<<
" \t\t"<<xg<<
" \t"<<yg<< std::endl;
369 catch(std::exception& ex)
371 TGo4Log::Message(3,
"standard exception %s in TGo4ExportManager::ExportASCII(TGraph*)",
376 TGo4Log::Message(3,
"!!! Unexpected exception in TGo4ExportManager::ExportASCII(TGraph*)!!!");
391 if(histo->InheritsFrom(TH2::Class()))
393 TH2* map=
dynamic_cast<TH2*
>(histo);
396 else if (histo->InheritsFrom(TH3::Class()))
398 TGo4Log::Message(2,
"ExportManager: Converting 3d histogram %s to radware not supported yet!",histo->GetName());
404 TString objectname=histo->GetName();
405 TString outname=objectname;
406 outname.Append(
".spe");
407 TString hname = objectname;
409 Int_t maxbinX=histo->GetNbinsX();
410 Int_t l_chan=maxbinX;
419 std::ofstream outfile(outname.Data());
422 TGo4Log::Message(3,
"ExportManager: Error opening outputfile %s",outname.Data());
425 TGo4Log::Message(0,
"ExportManager: Converting 1d histogram %s to RADWARE",histo->GetName());
428 outfile.write((
char *) &first,
sizeof(Int_t));
430 outfile.write(hname.Data(), 8);
432 outfile.write((
char *) l_head, 6*
sizeof(Int_t));
435 for(Int_t xbin=0; xbin<maxbinX; ++xbin)
437 cont=(Float_t) histo->GetBinContent(xbin);
438 outfile.write( (
char *) &cont,
sizeof(Float_t) );
441 Int_t charnum=l_chan*
sizeof(Float_t);
442 outfile.write((
char *) &charnum,
sizeof(Int_t));
443 Int_t hislen = l_chan*4 + 40;
444 Int_t byteswritten=outfile.tellp();
448 if (byteswritten == hislen)
451 hname.Data(), byteswritten, hislen, outname.Data());
455 TGo4Log::Message(3,
"Histogram %s: Size mismatch: %d bytes written to %s, datalength is %d",
456 hname.Data(), byteswritten, outname.Data(), hislen);
463 catch(std::exception& ex)
465 TGo4Log::Message(3,
"standard exception %s in TGo4ExportManager::ExportRadware(TH1*)",
470 TGo4Log::Message(3,
"!!! Unexpected exception in TGo4ExportManager::ExportRadware(TH1*)!!!");
479 TGo4Log::Message(2,
"ExportManager: Converting 2d histo %s to radware not supported yet!",histo->GetName());
483 TGo4Log::Message(2,
"ExportManager: Converting graph %s to radware not supported yet!",graph->GetName());
489 TString fname=ob->GetName();
492 TFile* f = TFile::Open(fname.Data(),
"recreate");
497 TGo4Log::Message(0,
"ExportManager: Wrote object %s of class %s to root file %s",
498 ob->GetName(), ob->ClassName(),fname.Data() );
507 if(!fname.Contains(
".root")) fname.Append(
".root");
508 TFile* f = TFile::Open(fname.Data(),
"recreate");
510 f->SetTitle(ftitle.Data());
514 TGo4Log::Message(0,
"ExportManager: Wrote object %s of class %s to root file %s",
515 ob->GetName(), ob->ClassName(),fname.Data() );
void SetStartDir(const char *dir=0)
void ExportASCII(TH1 *histo, Bool_t channels=kTRUE)
void SetCurrentDir(const char *dir=0)
void ExportXML(TObject *ob)
void ExportRadware(TH1 *histo)
void ExportRoot(TObject *ob)
void SetFilter(Go4Export_t format)
static const char * Message(Int_t prio, const char *text,...)
void Export(TObject *ob, Go4Export_t format)
virtual ~TGo4ExportManager()