BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
calib_barrel_q0.cxx
Go to the documentation of this file.
1#include "calib_barrel_q0.h"
2#include "TF1.h"
3
4using namespace CLHEP;
5
7
8 nKind = 1;
10
13
16 nHistogram = NBarrel * nKind * nBinPerCounter; // NO directory
17 nCanvas = 2;
18 CanvasName.push_back(
19 static_cast<string>( "Most Probable Value of Q0 vs TOF counter Number (Barrel part)" ) );
20 CanvasName.push_back(
21 static_cast<string>( "Sigma of Q0 vs TOF Counter Number (Barrel part)" ) );
22 nGraphPerCanvas.push_back( 1 );
23 nGraphPerCanvas.push_back( 1 );
24
25 m_name = string( "calib_barrel_q0" );
26
27 int numGraphs = 0;
28 std::vector<unsigned int>::iterator iter = nGraphPerCanvas.begin();
29 for ( ; iter != nGraphPerCanvas.end(); iter++ ) { numGraphs = numGraphs + ( *iter ); }
30 if ( numGraphs != nGraphTotalQ0 )
31 {
32 cout << "tofcalgsec::calib_barrel_q0: the number of Graphs is NOT reasonable!!!" << endl;
33 exit( 0 );
34 }
35
36 const int qbin = 100;
37 const double qbegin = 0.0;
38 const double qend = 5000.0;
39
40 // histograms
41 char hname[256];
42 for ( unsigned int i = 0; i < NBarrel; i++ )
43 {
44 m_result.push_back( HepVector( nBarrelQ0, 0 ) );
45
46 sprintf( hname, "Q0-tofid-%i", i );
47 m_histograms.push_back( new TH1F( hname, hname, qbin, qbegin, qend ) );
48
49 m_fitresult.push_back( HepVector( nParQ0, 0 ) );
50 }
51
52 itofid.resize( NBarrel );
53 itofiderr.resize( NBarrel );
54 itofidstep = 1.0;
55 for ( unsigned int i = 0; i < NBarrel; i++ )
56 {
57 itofid[i] = i * 1.0;
58 itofiderr[i] = 0.5;
59 }
60}
61
63 m_fitresult.clear();
64 itofid.clear();
65 itofiderr.clear();
66}
67
68void calib_barrel_q0::calculate( RecordSet*& data, unsigned int icounter ) {
69
70 std::cout << setiosflags( ios::left ) << setw( 10 ) << icounter << setw( 8 ) << data->size()
71 << setw( 30 ) << name() << std::endl;
72
73 if ( data->size() > 0 )
74 {
75 std::vector<Record*>::iterator iter = data->begin();
76 for ( ; iter != data->end(); iter++ ) { fillRecord( ( *iter ), icounter ); }
77 }
78 fitHistogram( icounter );
79
80 if ( icounter == ( NBarrel - 1 ) )
81 {
82 fillGraph();
83 fitGraph();
84 }
85
86 return;
87}
88
89void calib_barrel_q0::fillRecord( const Record* r, unsigned int icounter ) {
90 std::vector<TH1F*>::iterator iter = m_histograms.begin() + icounter;
91 ( *iter )->Fill( r->q0() );
92 return;
93}
94
95void calib_barrel_q0::fitHistogram( unsigned int icounter ) {
96 TF1* ld = new TF1( "ld", "landau" );
97 ld->SetLineColor( 2 );
98 ld->SetLineWidth( 1 );
99
100 std::vector<TH1F*>::iterator iter1 = m_histograms.begin() + icounter;
101 std::vector<HepVector>::iterator iter2 = m_fitresult.begin() + icounter;
102 ( *iter1 )->Fit( ld, "Q" );
103 ( *iter2 )[0] = ld->GetParameter( 1 );
104 ( *iter2 )[1] = ld->GetParError( 1 );
105 ( *iter2 )[2] = ld->GetParameter( 2 );
106 ( *iter2 )[3] = ld->GetParError( 2 );
107
108 return;
109}
110
111void calib_barrel_q0::fillGraph() {
112
113 std::vector<double> qmean, qmeanerr;
114 std::vector<double> qsig, qsigerr;
115 qmean.resize( NBarrel );
116 qmeanerr.resize( NBarrel );
117 qsig.resize( NBarrel );
118 qsigerr.resize( NBarrel );
119
120 TH1F* graph1 =
121 new TH1F( CanvasName[0].c_str(), CanvasName[0].c_str(), NBarrel, -0.5, NBarrel - 0.5 );
122 graph1->SetMarkerSize( 1.5 );
123 graph1->SetMarkerStyle( 20 );
124 graph1->SetMarkerColor( 2 );
125
126 TH1F* graph2 =
127 new TH1F( CanvasName[1].c_str(), CanvasName[1].c_str(), NBarrel, -0.5, NBarrel - 0.5 );
128 graph2->SetMarkerSize( 1.5 );
129 graph2->SetMarkerStyle( 20 );
130 graph2->SetMarkerColor( 4 );
131
132 std::vector<HepVector>::iterator iter = m_fitresult.begin();
133 for ( unsigned int i = 0; i < NBarrel; i++, iter++ )
134 {
135 qmean[i] = ( *iter )[0];
136 qmeanerr[i] = ( *iter )[1];
137 qsig[i] = ( *iter )[2];
138 qsigerr[i] = ( *iter )[3];
139 graph1->SetBinContent( i + 1, qmean[i] );
140 graph1->SetBinError( i + 1, qmeanerr[i] );
141 graph2->SetBinContent( i + 1, qsig[i] );
142 graph2->SetBinError( i + 1, qsigerr[i] );
143 }
144
145 m_graphs.push_back( graph1 );
146 m_graphs.push_back( graph2 );
147
148 return;
149}
150
151void calib_barrel_q0::fitGraph() {
152 unsigned int number = 0;
153 std::vector<HepVector>::iterator iter1 = m_result.begin();
154 std::vector<HepVector>::iterator iter2 = m_fitresult.begin();
155 for ( ; iter1 != m_result.end(); iter1++, number++ )
156 {
157 ( *iter1 )[0] = ( *( iter2 + number ) )[0] / ( *iter2 )[0];
158 ( *iter1 )[1] = ( *( iter2 + number ) )[0];
159 ( *iter1 )[2] = ( *( iter2 + number ) )[2];
160 }
161
162 return;
163}
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)
TTree * data
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)
std::vector< Record * > RecordSet
Definition TofDataSet.h:97
const unsigned int NBarrel
Definition TofDataSet.h:12
const int nBarrelQ0
const int nParQ0
const int nGraphTotalQ0
double q0() const
Definition TofDataSet.h:69
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
unsigned int nKind
Definition TofCalibFit.h:40
unsigned int nCanvasPerCounter
Definition TofCalibFit.h:44
unsigned int nHistPerCounter
Definition TofCalibFit.h:43
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 calculate(RecordSet *&data, unsigned int icounter)
char * c_str(Index i)