BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
TofCalibFit.cxx
Go to the documentation of this file.
1//**************************************************************************
2// several value:
3// npar m_npar: the parameter numbers of result
4// nCounter: counter number of TOF, 176 for barrel, 96 for endcap
5// nKind: number of values, barrel_q0 1, barrel_sigma 4, endcap_q 1
6// nBinPerCounter: number of bins divide one counter ( z(r) bins number)
7// total: nCounter*nKind*nBinPerCounter
8//**************************************************************************
9#include "TofCalibFit.h"
10#include "TDirectory.h"
11#include "TFile.h"
12#include "TStyle.h"
13#include <fstream>
14#include <ios>
15#include <iostream>
16
17TofCalibFit::TofCalibFit( bool isbarrel, const int npar ) {
18 if ( isbarrel ) { nCounter = NBarrel; }
19 else { nCounter = NEndcap; }
20
21 nKind = 0;
23
26 nHistogram = 0;
27 nCanvas = 0;
28
29 m_npar = npar;
30 X = HepVector( m_npar, 0 );
31 m_name = string( "calibfit" );
32
33 m_tcorrelation = HepVector( nBarrelCommon, 0 );
34}
35
37 std::vector<TH1F*>::iterator iter1 = m_histograms.begin();
38 for ( ; iter1 != m_histograms.end(); iter1++ ) { delete ( *iter1 ); }
39 m_histograms.clear();
40 std::vector<TH1F*>::iterator iter2 = m_graphs.begin();
41 for ( ; iter2 != m_graphs.end(); iter2++ ) { delete ( *iter2 ); }
42 m_graphs.clear();
43 m_result.clear();
44}
45
46void TofCalibFit::fillTxt( const char* file ) {
47 std::ofstream out( file, ios::out );
48 if ( out )
49 {
50 std::vector<HepVector>::iterator it;
51 for ( it = m_result.begin(); it != m_result.end(); it++ )
52 {
53 for ( int i = 0; i < ( *it ).num_row(); i++ ) { out << ( *it )[i] << " "; }
54 out << std::endl;
55 }
56 out.close();
57 }
58 else
59 {
60 cerr << "error when open file " << file << " for write in " << name() << "::fillTxt()"
61 << std::endl;
62 cout << "print all parameters to srceen: in total " << m_result.size() << " items"
63 << std::endl;
64 std::vector<HepVector>::iterator it;
65 for ( it = m_result.begin(); it != m_result.end(); it++ )
66 {
67 for ( int i = 0; i < ( *it ).num_row(); i++ ) { cout << ( *it )[i] << " "; }
68 cout << std::endl;
69 }
70 }
71
72 return;
73}
74
75void TofCalibFit::fillRoot( const char* file ) {
76
77 unsigned int nhist = m_histograms.size();
78 if ( nhist != ( nCounter * nHistPerCounter + nHistogram ) )
79 {
80 std::cout << " tofcalgsec::TofCalibFit:" << m_name
81 << ": the number of histograms is NOT same as the number of histograms saved!"
82 << " nhist=" << nhist
83 << " calculated=" << ( nCounter * nHistPerCounter + nHistogram )
84 << " nCounter=" << nCounter << " nHistPerCounter=" << nHistPerCounter
85 << " nHistogram=" << nHistogram << std::endl;
86 exit( 0 );
87 }
88
89 unsigned int numgraph1 = 0;
90 unsigned int numgraph2 = 0;
91 if ( nCanvasPerCounter != 0 )
92 {
93 std::vector<unsigned int>::iterator iter = nGraphPerCanvasPerCounter.begin();
94 for ( ; iter != nGraphPerCanvasPerCounter.end(); iter++ )
95 { numgraph1 = numgraph1 + ( *iter ); }
96 }
97 if ( nCanvas != 0 )
98 {
99 std::vector<unsigned int>::iterator iter = nGraphPerCanvas.begin();
100 for ( ; iter != nGraphPerCanvas.end(); iter++ ) { numgraph2 = numgraph2 + ( *iter ); }
101 }
102 unsigned int ngraph = m_graphs.size();
103 if ( ngraph != ( nCounter * numgraph1 + numgraph2 ) )
104 {
105 std::cout << " tofcalgsec::TofCalibFit:" << m_name
106 << ": the number of graphs is NOT same as the number of graphs saved!"
107 << " ngraph=" << ngraph << " nCounter=" << nCounter
108 << " numgraph1=" << numgraph1 << " numgraph2=" << numgraph2 << std::endl;
109 exit( 0 );
110 }
111
112 TFile f( file, "RECREATE" );
113
114 gStyle->SetOptStat( 2211 );
115 gStyle->SetOptFit( 1111 );
116 gStyle->SetLabelSize( 0.03, "x" );
117 gStyle->SetLabelSize( 0.03, "y" );
118
119 char dirname[256];
120 char canvasname[256];
121 if ( nHistPerCounter > 0 || nCanvasPerCounter > 0 )
122 {
123 std::vector<TH1F*>::iterator iter1 = m_histograms.begin();
124 std::vector<TH1F*>::iterator iter2 = m_graphs.begin();
125 for ( unsigned int i = 0; i < nCounter; i++ )
126 {
127 sprintf( dirname, "tofid%i", i );
128 TDirectory* cdresult = f.mkdir( dirname );
129 cdresult->cd();
130
131 for ( unsigned int j = 0; j < nHistPerCounter; j++ ) { ( *( iter1 + j ) )->Write(); }
132 iter1 = iter1 + nHistPerCounter;
133
134 for ( unsigned int j = 0; j < nCanvasPerCounter; j++ )
135 {
136 std::vector<string>::iterator it1 = CanvasPerCounterName.begin() + j;
137 std::vector<unsigned int>::iterator it2 = nGraphPerCanvasPerCounter.begin() + j;
138 sprintf( canvasname, "%s-tofid-%i", ( *it1 ).c_str(), i );
139 TCanvas* c1 = new TCanvas( canvasname, canvasname, 1 );
140 c1->SetFillColor( 10 );
141 for ( unsigned int k = 0; k < ( *it2 ); k++ )
142 {
143 if ( k == 0 ) { ( *( iter2 + k ) )->Draw( "E" ); }
144 else { ( *( iter2 + k ) )->Draw( "Esame" ); }
145 }
146 iter2 = iter2 + ( *it2 );
147 c1->Write();
148 }
149 }
150 }
151
152 if ( nHistogram > 0 || nCanvas > 0 )
153 {
154 sprintf( dirname, "summary" );
155 TDirectory* cdresult = f.mkdir( dirname );
156 cdresult->cd();
157
158 std::vector<TH1F*>::iterator iter1 = m_histograms.begin() + nCounter * nHistPerCounter;
159 std::vector<TH1F*>::iterator iter2 = m_graphs.begin() + nCounter * numgraph1;
160 for ( ; iter1 != m_histograms.end(); iter1++ ) { ( *iter1 )->Write(); }
161
162 for ( unsigned int j = 0; j < nCanvas; j++ )
163 {
164 std::vector<string>::iterator it1 = CanvasName.begin() + j;
165 std::vector<unsigned int>::iterator it2 = nGraphPerCanvas.begin() + j;
166 sprintf( canvasname, ( *it1 ).c_str() );
167 TCanvas* c1 = new TCanvas( canvasname, canvasname, 1 );
168 c1->SetFillColor( 10 );
169 for ( unsigned int k = 0; k < ( *it2 ); k++ )
170 {
171 if ( k == 0 ) { ( *( iter2 + k ) )->Draw( "E" ); }
172 else { ( *( iter2 + k ) )->Draw( "Esame" ); }
173 }
174 iter2 = iter2 + ( *it2 );
175 c1->Write();
176 }
177 }
178
179 f.Close();
180
181 return;
182}
legend Draw()
sprintf(cut, "kal_costheta0_em>-0.93&&kal_costheta0_em<0.93&&kal_pxy0_em>=0.05+%d*0.1&&kal_" "pxy0_em<0.15+%d*0.1&&NGch>=2", j, j)
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
char * file
Definition DQA_TO_DB.cxx:16
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
const int nBarrelCommon
Definition TofCalibFit.h:19
const unsigned int NBarrel
Definition TofDataSet.h:12
const unsigned int NEndcap
Definition TofDataSet.h:13
string m_name
Definition TofCalibFit.h:50
std::vector< HepVector > m_result
Definition TofCalibFit.h:55
unsigned int nCanvas
Definition TofCalibFit.h:47
const std::string & name() const
Definition TofCalibFit.h:27
std::vector< TH1F * > m_histograms
Definition TofCalibFit.h:53
unsigned int nBinPerCounter
Definition TofCalibFit.h:41
HepVector m_tcorrelation
Definition TofCalibFit.h:60
unsigned int nKind
Definition TofCalibFit.h:40
void fillRoot(const char *file)
std::vector< unsigned int > nGraphPerCanvasPerCounter
Definition TofCalibFit.h:45
unsigned int nCanvasPerCounter
Definition TofCalibFit.h:44
unsigned int nHistPerCounter
Definition TofCalibFit.h:43
HepVector X
Definition TofCalibFit.h:51
std::vector< unsigned int > nGraphPerCanvas
Definition TofCalibFit.h:48
std::vector< string > CanvasName
Definition TofCalibFit.h:58
unsigned int nHistogram
Definition TofCalibFit.h:46
std::vector< TH1F * > m_graphs
Definition TofCalibFit.h:54
TofCalibFit(bool isbarrel, const int npar)
void fillTxt(const char *file)
std::vector< string > CanvasPerCounterName
Definition TofCalibFit.h:57