StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
writeTextFile.cxx
1 #include "writeTextFile.h"
2 
3 const char* inrootfile="HIST/finish_central_cut1.hist.root";
4 const char* outdir="REAL";
5 
6 int main(int argc,char** argv)
7 {
8  char* argvZ[] = {"-b"}; // batch mode, no gui
9  Int_t argcZ = 1;
10  TApplication r00t("r00t", &argcZ, argvZ);
11 
12  extern char* optarg;
13  const char* options = "i:o:m:";
14  Int_t chr, i=0,o=0;
15  char inRootFile[300],outDir[300];
16  TString match;
17  while ((chr = getopt(argc, argv, options)) >= 0){
18  switch(chr){
19  case 'i': strcpy(inRootFile,optarg); i=1; break;
20  case 'o': strcpy(outDir,optarg); o=1; break;
21  case 'm': match=optarg; break;
22  }
23  }
24  if(!(i*o)){
25  cout << "-i infile -o outdir [-m <match>]" << endl;
26  exit(-1);
27  }
28 
29 
30  cout << "in root=" << inRootFile << endl
31  << "out dir=" << outDir << endl;
32  if(match!="") cout << "match=" << match << endl;
33 
34 
35  TFile inRoot(inRootFile);
36  if(!inRoot.IsOpen()){
37  cout << "Cannot open " << inRootFile << endl;
38  return -1;
39  }
40  TIterator* iterator = inRoot.GetListOfKeys()->MakeIterator();
41  TKey* key;
42 
43  TString outText = inRootFile;
44  outText.Replace(0,outText.Last('/')+1,"");
45  outText.ReplaceAll(".root",".txt");
46  outText.Prepend("/"); outText.Prepend(outDir);
47 
48  cout << "out txt file=" << outText.Data() << endl;
49 
50  ofstream os(outText.Data());
51  if(!os){cout << "huh?" << endl; return -1; }
52 
53  // char buf[500];
54  int count(0),nLimit(99999999);
55  while( (key=dynamic_cast<TKey*>(iterator->Next())) != 0){
56  // cout << key->GetName() << endl;
57  TObject* t = inRoot.Get(key->GetName());
58  if(!t) continue;
59  if(!(t->IsA()->InheritsFrom("TH1"))) continue;
60 
61  TH1* h=(TH1*)t;
62  // cout << h->GetName() << endl;
63  TString name=h->GetName();
64  if(match!="" && !strstr(name,match.Data())) continue;
65 
66  if(++count>nLimit) break;
67 
68  if(h->GetXaxis()->GetXbins()->GetSize()) continue;
69 
70  os << "name: " << h->GetName() << endl
71  << "title: " << h->GetTitle() << endl
72  << "dim: " << h->GetDimension() << endl
73  << "ary: " << (h->GetXaxis()->GetXbins()->GetSize()!=0) << endl;
74  for(int iDim=1; iDim<=h->GetDimension(); iDim++){
75  TAxis* axis = 0;
76  switch(iDim){
77  case 1: axis = h->GetXaxis(); break;
78  case 2: axis = h->GetYaxis(); break;
79  case 3: axis = h->GetZaxis(); break;
80  default: cout << "wrong dimension" << endl;exit(0);
81  }
82 
83  int nBin = axis->GetNbins();
84 
85  os << "bins: " << nBin << endl;
86 
87  TArrayD* ary=0;
88  if(axis->GetXbins()->GetSize()){
89  ary=axis->GetXbins();
90  for(int i=0; i<ary->GetSize();i++){
91  os << ary->At(i) << " ";
92  }
93  os << endl;
94 
95  } else{
96  os << "min: " << axis->GetBinLowEdge(1) << endl
97  << "max: " << axis->GetBinUpEdge(nBin) << endl;
98  }
99  }
100  // list the contents
101  for(int ix=0; ix<h->GetNbinsX()+2; ix++){
102  for(int iy=0; iy<h->GetNbinsY()+2; iy++){
103  for(int iz=0; iz<h->GetNbinsZ()+2; iz++){
104 
105  int bin = h->GetBin(ix,iy,iz);
106  os << "bin=" << bin << " " << h->GetBinContent(bin) << " "
107  << h->GetBinError(bin) << endl;
108  }
109  }
110  }
111 
112  }
113 
114  cout << "done" << endl;
115 
116  return 0;
117 }