20 #include "TDirectory.h"
31 : TNamed(name,
"This is a Go4 export manager"),fiFilter(
GO4EX_ROOT)
84 if (myobject->InheritsFrom(TDirectory::Class())) {
85 TDirectory *subdir =
dynamic_cast<TDirectory*
>(myobject);
87 }
else if (myobject->InheritsFrom(TFolder::Class())) {
88 TFolder *subfold =
dynamic_cast<TFolder*
>(myobject);
90 }
else if (myobject->InheritsFrom(TCollection::Class())) {
91 TCollection *col =
dynamic_cast<TCollection*
>(myobject);
93 }
else if (myobject->InheritsFrom(TH1::Class())) {
94 TH1 *histo =
dynamic_cast<TH1*
>(myobject);
96 }
else if (myobject->InheritsFrom(TGraph::Class())) {
97 TGraph *graph =
dynamic_cast<TGraph*
>(myobject);
112 "ExportManager: NOT Converting object %s of class %s",
113 myobject->GetName(), myobject->ClassName());
132 TString dirname = fold->GetName();
134 TString com =
"mkdir " + dirname;
136 gSystem->cd(dirname.Data());
138 TCollection *folderlist = fold->GetListOfFolders();
148 if(source==0)
return;
149 TGo4Log::Message(0,
"ExportManager: Converting contents of directory %s",source->GetName());
158 TString dirname=source->GetName();
159 if(!dirname.Contains(
".root"))
162 TString com=
"mkdir "+dirname;
164 gSystem->cd(dirname.Data());
171 TIter iter(source->GetListOfKeys());
172 while((mykey=(TKey*) iter())!=0)
174 myobject= mykey->ReadObj();
181 TGo4Log::Message(2,
"ExportManager: Could not read key %s", mykey->GetName());
184 if(!dirname.Contains(
".root"))
196 TGo4Log::Message(0,
"ExportManager: Converting contents of collection %s",col->GetName());
206 while((ob=iter())!=0)
264 TString objectname=histo->GetName();
265 TString outname=objectname;
266 outname.Append(
".hdat");
269 std::ofstream outfile(outname.Data());
272 TGo4Log::Message(3,
"ExportManager: Error opening outputfile %s",outname.Data());
276 TGo4Log::Message(0,
"ExportManager: Converting histogram %s to ASCII",histo->GetName());
278 Int_t maxbinX=histo->GetNbinsX();
279 Int_t maxbinY=histo->GetNbinsY();
280 Int_t maxbinZ=histo->GetNbinsZ();
283 outfile <<
"# Histogram "<<histo->ClassName() <<
": "<<histo->GetName()<< std::endl;
285 outfile <<
"# Xbin \tYbin \tZbin \tContent"<< std::endl;
287 outfile <<
"# X \tY \tZ \tContent"<< std::endl;
288 for(Int_t x=1; x<=maxbinX; ++x)
290 for(Int_t y=1; y<=maxbinY; ++y)
292 for(Int_t z=1; z<=maxbinZ; ++z)
294 globalbin=histo->GetBin(x,y,z);
295 cont=histo->GetBinContent(globalbin);
298 outfile <<x<<
" \t"<<y<<
" \t"<<z<<
" \t"<<cont<< std::endl;
303 TAxis* xax=histo->GetXaxis();
305 if(xax) xval=xax->GetBinLowEdge(x);
307 TAxis* yax=histo->GetYaxis();
309 if(yax) yval=yax->GetBinLowEdge(y);
311 TAxis* zax=histo->GetZaxis();
313 if(zax) zval=zax->GetBinLowEdge(z);
314 outfile <<xval<<
" \t"<<yval<<
" \t"<<zval<<
" \t"<<cont<< std::endl;
323 catch(std::exception& ex)
325 TGo4Log::Message(3,
"standard exception %s in TGo4ExportManager::ExportASCII(TH1*)",
330 TGo4Log::Message(3,
"!!! Unexpected exception in TGo4ExportManager::ExportASCII(TH1*)!!!");
341 TString objectname=graph->GetName();
342 TString outname=objectname;
343 outname.Append(
".gdat");
345 std::ofstream outfile(outname.Data());
347 TGo4Log::Message(3,
"ExportManager: Error opening outputfile %s",outname.Data());
350 TGo4Log::Message(0,
"ExportManager: Converting graph %s to ASCII",graph->GetName());
351 Int_t maxpoints=graph->GetN();
352 outfile <<
"# Graph "<<graph->ClassName() <<
": "<<graph->GetName()<< std::endl;
353 outfile <<
"# Point \tX \tY"<< std::endl;
354 for(Int_t point=0; point<maxpoints; ++point)
358 graph->GetPoint(point,xg,yg);
359 outfile <<point<<
" \t\t"<<xg<<
" \t"<<yg<< std::endl;
365 catch(std::exception& ex)
367 TGo4Log::Message(3,
"standard exception %s in TGo4ExportManager::ExportASCII(TGraph*)",
372 TGo4Log::Message(3,
"!!! Unexpected exception in TGo4ExportManager::ExportASCII(TGraph*)!!!");
387 if(histo->InheritsFrom(TH2::Class()))
389 TH2* map=
dynamic_cast<TH2*
>(histo);
392 else if (histo->InheritsFrom(TH3::Class()))
394 TGo4Log::Message(2,
"ExportManager: Converting 3d histogram %s to radware not supported yet!",histo->GetName());
400 TString objectname=histo->GetName();
401 TString outname=objectname;
402 outname.Append(
".spe");
403 TString hname = objectname;
405 Int_t maxbinX=histo->GetNbinsX();
406 Int_t l_chan=maxbinX;
415 std::ofstream outfile(outname.Data());
418 TGo4Log::Message(3,
"ExportManager: Error opening outputfile %s",outname.Data());
421 TGo4Log::Message(0,
"ExportManager: Converting 1d histogram %s to RADWARE",histo->GetName());
424 outfile.write((
char *) &first,
sizeof(Int_t));
426 outfile.write(hname.Data(), 8);
428 outfile.write((
char *) l_head, 6*
sizeof(Int_t));
431 for(Int_t xbin=0; xbin<maxbinX; ++xbin)
433 cont=(Float_t) histo->GetBinContent(xbin);
434 outfile.write( (
char *) &cont,
sizeof(Float_t) );
437 Int_t charnum=l_chan*
sizeof(Float_t);
438 outfile.write((
char *) &charnum,
sizeof(Int_t));
439 Int_t hislen = l_chan*4 + 40;
440 Int_t byteswritten=outfile.tellp();
444 if (byteswritten == hislen)
447 hname.Data(), byteswritten, hislen, outname.Data());
451 TGo4Log::Message(3,
"Histogram %s: Size mismatch: %d bytes written to %s, datalength is %d",
452 hname.Data(), byteswritten, outname.Data(), hislen);
459 catch(std::exception& ex)
461 TGo4Log::Message(3,
"standard exception %s in TGo4ExportManager::ExportRadware(TH1*)",
466 TGo4Log::Message(3,
"!!! Unexpected exception in TGo4ExportManager::ExportRadware(TH1*)!!!");
475 TGo4Log::Message(2,
"ExportManager: Converting 2d histo %s to radware not supported yet!",histo->GetName());
479 TGo4Log::Message(2,
"ExportManager: Converting graph %s to radware not supported yet!",graph->GetName());
485 TString fname=ob->GetName();
488 TFile* f = TFile::Open(fname.Data(),
"recreate");
493 TGo4Log::Message(0,
"ExportManager: Wrote object %s of class %s to root file %s",
494 ob->GetName(), ob->ClassName(),fname.Data() );
503 if(!fname.Contains(
".root")) fname.Append(
".root");
504 TFile* f = TFile::Open(fname.Data(),
"recreate");
506 f->SetTitle(ftitle.Data());
510 TGo4Log::Message(0,
"ExportManager: Wrote object %s of class %s to root file %s",
511 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()