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