93 {
95
96 int ord;
98 TF1* fxtDr =
new TF1(
"fxtDr",
xtFitFun, 0, 300, 6 );
99 TF1* fxtEd =
new TF1(
"fxtEd",
xtFitEdge, 150, 500, 1 );
100 if ( 1 ==
gfixXtC0 ) fxtDr->FixParameter( 0, 0 );
101
102 for (
int lay = 0; lay <
NLAYER; lay++ )
103 {
104 for (
int iEntr = 0; iEntr <
NENTRXT; iEntr++ )
105 {
106 for (
int lr = 0; lr <
NLR; lr++ )
107 {
108 m_fgFit[lay][iEntr][lr] = false;
110
111 if ( m_nhitIn[lay][iEntr][lr] > 1000 )
112 {
114
115 m_grxt[lay][iEntr][lr]->Fit(
"fxtDr",
"Q+",
"", 0,
Tmax );
116 for ( ord = 0; ord < 6; ord++ )
117 { xtpar[lay][iEntr][lr][ord] = fxtDr->GetParameter( ord ); }
118 xtpar[lay][iEntr][lr][6] =
Tmax;
119
121 for ( ord = 0; ord < 6; ord++ )
122 Dmax += xtpar[lay][iEntr][lr][ord] * pow(
Tmax, ord );
123
124 if ( m_nhitEd[lay][iEntr][lr] > 300 )
125 {
126 m_grxt[lay][iEntr][lr]->Fit(
"fxtEd",
"Q+",
"",
Tmax,
Tmax + 300 );
127 xtpar[lay][iEntr][lr][7] = fxtEd->GetParameter( 0 );
128 if ( xtpar[lay][iEntr][lr][7] < 0.0 ) xtpar[lay][iEntr][lr][7] = 0.0;
129 }
130 else { xtpar[lay][iEntr][lr][7] = 0.0; }
131
132 m_fgFit[lay][iEntr][lr] = true;
133 }
134
135 }
136 }
137 }
138
140 for (
int lay = 0; lay <
NLAYER; lay++ )
141 {
142 for (
int iEntr = 0; iEntr <
NENTRXT; iEntr++ )
143 {
144 for (
int lr = 0; lr <
NLR; lr++ )
145 {
146 fxtlog << setw( 3 ) << lay << setw( 3 ) << iEntr << setw( 3 ) << lr;
147
148 int fgUpdate = -1;
149 if ( m_fgFit[lay][iEntr][lr] )
150 {
151 fgUpdate = 1;
152 for ( ord = 0; ord < 8; ord++ )
153 calconst->
resetXtpar( lay, iEntr, lr, ord, xtpar[lay][iEntr][lr][ord] );
154 }
155 else
156 {
157 int iEntrNew = findXtEntr( lay, iEntr, lr );
158 if ( -1 != iEntrNew )
159 {
160 fgUpdate = 2;
161 for ( ord = 0; ord < 8; ord++ )
162 { calconst->
resetXtpar( lay, iEntr, lr, ord, xtpar[lay][iEntrNew][lr][ord] ); }
163 }
164 }
165 fxtlog << setw( 3 ) << fgUpdate;
166 for ( ord = 0; ord < 8; ord++ )
167 {
168 double par = calconst->
getXtpar( lay, iEntr, lr, ord );
169 if ( 6 == ord ) fxtlog << setw( 9 ) << par;
170 else fxtlog << setw( 14 ) << par;
171 }
172 fxtlog << endl;
173 }
174 }
175 }
176 fxtlog.close();
177
178 cout << "Xt update finished. File xtlog was written." << endl;
179
180 renameHist();
181 delete fxtDr;
182 delete fxtEd;
183}
Double_t xtFitEdge(Double_t *x, Double_t par[])
Double_t xtFitFun(Double_t *x, Double_t par[])
virtual void calib(MdcCalibConst *calconst, TObjArray *newXtList, TObjArray *r2tList)=0
void resetXtpar(int lay, int entr, int lr, int order, double val)
double getXtpar(int lay, int entr, int lr, int order)