StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
ojtable.C
1 #ifndef __CINT__
2 #include <stdlib.h>
3 #include <stdio.h>
4 #include "TObject.h"
5 #include "TClass.h"
6 #include "TH1.h"
7 #include "TObjectTable.h"
8 #include "TMath.h"
9 #include "TRegexp.h"
10 #include "TClonesArray.h"
11 //#include "TDataSet.h"
12 #include "StMkDeb.h"
13 #include <typeinfo>
14 #endif // !__CINT__
15 
16 void ojtable(const char *className=0);
17 
18 #ifndef __CINT__
19 int SizeOfH(TObject *to);
20 
21 void ojtable(const char *className)
22 {
23  static int fTableOffset = 0;
24  if (!fTableOffset) fTableOffset = gObjectTable->IsA()->GetDataMemberOffset("fTable");
25 // gObjectTable->Print();
26  TClass *kl;
27  if (className && !*className) className=0;
28 
29  const char *qwe = ".*";
30  if (className) qwe = className;
31  TRegexp regexp(qwe); int regexpLen=0;
32 
33  int sz = gObjectTable->GetSize();
34  int *ptr = new int[sz];
35  int *idx = new int[sz];
36 
37  TObject **tab = *((TObject ***)((char*)gObjectTable+fTableOffset));
38  TObject *to;
39  printf ("tab %p[%d]\n",tab,sz);
40  int i,num=0;
41  double hSize=0;
42  int hNumb=0;
43  const char *info_name = 0;
44  for (i=0;i<sz;i++)
45  {
46  to = tab[i];
47  if (!to) continue;
48  if (!to->TestBit(TObject::kNotDeleted)) continue;
49  int hs = SizeOfH(to);
50  if (hs) {hSize+=hs; hNumb++;}
51  if (className && regexp.Index(to->ClassName(),&regexpLen)<0) continue;
52  const char *mk = StMkDeb::GetUser(to);
53  if(mk && *mk) printf("%s(%p) in %s\n",to->ClassName(),to,mk);
54  ptr[num++]=int(to);
55  }
56  printf("TH1 N=%d, Size = %g\n",hNumb,hSize);
57 
58  TMath::Sort(num,ptr,idx,0);
59  int last = 0;
60  printf("Selected %d objects\n",num);
61  for (i=0;i<num;i++) {
62  int ix = idx[i];
63  to = (TObject*)ptr[ix];
64  int dist = 0;
65  if (i) dist = ptr[ix]-last;
66  last = ptr[ix];
67 
68 // if ((int)to == 0xc94ff34) {
69 // printf("Skipped %p\n",to); continue; }
70 
71  info_name = "??";
72  info_name=typeid(*to).name();
73  kl = to->IsA();
74  printf ("%4d +%6d : obj = %p(%3d) %s::%s \tinfo=%s\n",i,dist,to,kl->Size(),kl->GetName(),to->GetName(),info_name);
75 
76  if (strcmp("TClonesArray",kl->GetName())) continue;
77  TClonesArray *tcl = ((TClonesArray*)to);
78  printf(" Sizes = %d %d\n",tcl->GetLast()+1,tcl->Capacity());
79  tcl->ls("");
80 
81 
82 
83 
84 }
85  delete [] ptr;
86  delete [] idx;
87 }
88 //______________________________________________________________________________
89 int SizeOfH(TObject *to)
90 {
91  TClass *kl = to->IsA();
92  if (!kl) return 0;
93  if (!kl->InheritsFrom(TH1::Class())) return 0;
94  int s0 = kl->Size();
95  TH1 *h = (TH1 *)to;
96  int nbins = h->GetNbinsX()*h->GetNbinsY()*h->GetNbinsZ();
97  int szw = 0;
98  if (kl->InheritsFrom("TArrayC")) szw=1;
99  else if (kl->InheritsFrom("TArrayS")) szw=2;
100  else if (kl->InheritsFrom("TArrayI")) szw=4;
101  else if (kl->InheritsFrom("TArrayF")) szw=4;
102  else if (kl->InheritsFrom("TArrayD")) szw=8;
103  return s0 + nbins*szw;
104 }
105 #endif //-__CINT__