StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
binH2rootH.c
1 /* to compile:
2 g++ -m32 -Wall -g -O -I `root-config --incdir` -c binH2rootH.c -o binH2rootH.o
3 g++ -m32 -Wall -g -O -I `root-config --incdir` -c L2Histo.cxx -o L2Histo.o
4 g++ -m32 -o binH2rootH-exe binH2rootH.o L2Histo.o -l m `root-config --libs`
5 
6 */
7 
8 #include <stdio.h>
9 #include <assert.h>
10 #include <stdlib.h>
11 #include <string.h>
12 /*********************************************************************
13  * $Id: binH2rootH.c,v 1.2 2011/01/30 03:02:52 balewski Exp $
14  * \author Jan Balewski, IUCF, 2006
15  *********************************************************************
16  * Descripion:
17  * Converts binary histos produced by L2 to root histos
18  *********************************************************************
19  */
20 
21 #include "L2Histo.h"
22 
23 #include "TH1F.h"
24 #include "TH2F.h"
25 #include "TFile.h"
26 #include "TString.h"
27 
28 //=================================
29 void create1D( L2Histo & h, char *hname) {
30  TString name="h";name+=h.getId();
31  if(hname[0]) name=hname;
32  TString title=h.getTitle();
33  int nbin=h.getNbin();
34  int sum=h.getNunder()+h.getNover();
35 
36  TH1F *hout=new TH1F(name,title,nbin,0,nbin);
37  float * y=hout->GetArray();
38  const int *data=h.getData();
39  for ( int ii=0;ii<nbin;ii++ ){
40  y[ii+1]= data[ii];
41  sum+= data[ii];
42  }
43  y[0]=h.getNunder();
44  y[nbin+1]=h.getNover();
45  hout->SetEntries(sum);
46  hout->SetLineColor(kBlue);
47  hout->Write();
48 }
49 
50 //=================================
51 void create2D( L2Histo & h) {
52  TString name="h";name+=h.getId();
53  TString title=h.getTitle();
54  int nbin=h.getNbin();
55  int nbinX=h.getNbinX();
56  int nbinY=h.getNbin()/nbinX;
57  int sum=h.getNunder()+h.getNover();
58 
59  TH2F *hout=new TH2F(name,title,nbinX,0,nbinX,nbinY,0,nbinY);
60 
61  const int *data=h.getData();
62  for ( int i =0;i <nbin;i ++ ){
63  int ix=i%nbinX;
64  int iy=i/nbinX;
65  // printf("ix=%d iy=%d val=%d\n", ix,iy,data[i]);
66  hout->SetBinContent(ix+1,iy+1,data[i]); // why root is counting bins from 1 ?
67  sum+=data[i];
68  }
69  // y[0]=h.getNunder(); // not implemented yet
70  // y[nbin+1]=h.getNover(); // not implemented yet
71  hout->SetEntries(sum);
72 
73  hout->Write();
74 }
75 
76 
77 //===================================
78 int main(int argc, char ** argv ) {
79  printf("Converting L2-bin-histos to root histos START...");
80 
81  if(argc!=3) {
82  printf("\nERROR: must specify an input and output file, e.g.:\n %s inp.hist.bin out.hist.root\n STOP\n",argv[0]);
83  exit(1);
84  }
85 
86  char *histFname=argv[1];
87  //char *histFname="janH.hist.bin";
88 
89  FILE *histFd=fopen(histFname,"r");
90  assert(histFd);
91 
92  TString ofilename=argv[2];
93  printf("outfile=%s\n",ofilename.Data());
94 
95  TFile *ofile=new TFile(ofilename,"recreate");
96 
97  int nh=0;
98  while(1) {
99  L2Histo h;
100  int ret=h.read(histFd);
101  if(ret) break;
102  nh++;
103  int iMax=-3, iFWHM=-4;
104  h.findMax( &iMax, &iFWHM);
105  if(h.getId()<1000) printf("h%d, '%s' binMax=%d \n",h.getId(),h.getTitle(),iMax);
106 
107  char hname[100];
108  hname[0]=0;
109 
110  // assume for high ID are tower histos
111  if(h.getId()>9999) {
112  // h.print(0);
113  hname[0]='a';
114  strncpy(hname+1,h.getTitle()+5,6);
115  hname[7]=0;
116  // printf("=%s=\n",hname);
117  }
118 
119  if(h.is1D()) create1D(h,hname);
120  else create2D(h);
121 
122  // if(h.getId()==10) h.print(1); break;
123  //if(nh>10) break;
124  }
125 
126  ofile->Close();
127  delete ofile;
128 
129 }
130 
131 /**********************************************************************
132  $Log: binH2rootH.c,v $
133  Revision 1.2 2011/01/30 03:02:52 balewski
134  fixed instruction how to compile it
135 
136  Revision 1.1 2007/10/11 00:33:29 balewski
137  L2algo added
138 
139  Revision 1.2 2006/03/11 17:11:34 balewski
140  now CVS comments should work
141 
142 */
143