161 {
162 MsgStream log(
msgSvc(), name() );
163 log << MSG::INFO << "DedxCalibWireGain::WriteHists()" << endmsg;
164
169 for (
int i = 0; i <
wireNo; i++ )
170 {
171 entryNo[i] = m_wiregain[i]->Integral();
172 mean[i] = m_wiregain[i]->GetMean();
173 sigma[i] = m_wiregain[i]->GetRMS();
174 proper[i] = m_wiregain[i]->GetBinCenter( m_wiregain[i]->GetMaximumBin() );
175 if ( entryNo[i] < 10 ) continue;
176
178 {
179 fitmean[i] = m_wiregain[i]->GetFunction( "mylan" )->GetParameter( 1 );
180 fitmeanerr[i] = m_wiregain[i]->GetFunction( "mylan" )->GetParError( 1 );
181 fitsigma[i] = m_wiregain[i]->GetFunction( "mylan" )->GetParameter( 2 );
182 chisq[i] = ( m_wiregain[i]->GetFunction( "mylan" )->GetChisquare() ) /
183 ( m_wiregain[i]->GetFunction( "mylan" )->GetNDF() );
184 }
186 {
187 fitmean[i] = m_wiregain[i]->GetFunction( "landaun" )->GetParameter( 1 );
188 fitmeanerr[i] = m_wiregain[i]->GetFunction( "landaun" )->GetParError( 1 );
189 fitsigma[i] = m_wiregain[i]->GetFunction( "landaun" )->GetParameter( 2 );
190 chisq[i] = ( m_wiregain[i]->GetFunction( "landaun" )->GetChisquare() ) /
191 ( m_wiregain[i]->GetFunction( "landaun" )->GetNDF() );
192 }
194 {
195 fitmean[i] = m_wiregain[i]->GetFunction( "Landau" )->GetParameter( 1 );
196 fitmeanerr[i] = m_wiregain[i]->GetFunction( "Landau" )->GetParError( 1 );
197 fitsigma[i] = m_wiregain[i]->GetFunction( "Landau" )->GetParameter( 2 );
198 chisq[i] = ( m_wiregain[i]->GetFunction( "Landau" )->GetChisquare() ) /
199 ( m_wiregain[i]->GetFunction( "Landau" )->GetNDF() );
200 }
202 {
203 fitmean[i] = m_wiregain[i]->GetFunction( "Vavilov" )->GetParameter( 1 );
204 fitmeanerr[i] = m_wiregain[i]->GetFunction( "Vavilov" )->GetParError( 1 );
205 fitsigma[i] = m_wiregain[i]->GetFunction( "Vavilov" )->GetParameter( 2 );
206 chisq[i] = ( m_wiregain[i]->GetFunction( "Vavilov" )->GetChisquare() ) /
207 ( m_wiregain[i]->GetFunction( "Vavilov" )->GetNDF() );
208 }
210 {
211 fitmean[i] = m_wiregain[i]->GetFunction( "AsymGauss" )->GetParameter( 1 );
212 fitmeanerr[i] = m_wiregain[i]->GetFunction( "AsymGauss" )->GetParError( 1 );
213 fitsigma[i] = m_wiregain[i]->GetFunction( "AsymGauss" )->GetParameter( 2 );
214 chisq[i] = ( m_wiregain[i]->GetFunction( "AsymGauss" )->GetChisquare() ) /
215 ( m_wiregain[i]->GetFunction( "AsymGauss" )->GetNDF() );
216 }
217
218
219 }
220
221 double Norm = 0,
count = 0;
222 for (
int i = 188; i <
wireNo; i++ )
223 {
224 if ( fitmean[i] > 0 && fitmeanerr[i] > 0 && fitmeanerr[i] < 10 && fitsigma[i] > 0 &&
225 fitsigma[i] < 200 && entryNo[i] > 1500 )
226 {
227 Norm += fitmean[i];
229 }
230 }
232 cout <<
"count= " <<
count <<
" average value of good wire: " << Norm << endl;
233
234
235
236 for (
int i = 0; i <
wireNo; i++ )
237 {
238 wireg[i] = fitmean[i] / Norm;
239 wire[i] = i;
240 }
241
242 log << MSG::INFO << "begin generating root file!!! " << endmsg;
243 TFile*
f =
new TFile(
m_rootfile.c_str(),
"recreate" );
244 for (
int i = 0; i <
wireNo; i++ ) m_wiregain[i]->Write();
245
246 TTree* wiregcalib = new TTree( "wiregcalib", "wiregcalib" );
247 wiregcalib->Branch( "wireg", wireg, "wireg[6796]/D" );
248 wiregcalib->Branch( "wire", wire, "wire[6796]/D" );
249 wiregcalib->Branch( "entryNo", entryNo, "entryNo[6796]/D" );
250 wiregcalib->Branch( "proper", proper, "proper[6796]/D" );
251 wiregcalib->Branch( "mean", mean, "mean[6796]/D" );
252 wiregcalib->Branch( "sigma", sigma, "sigma[6796]/D" );
253 wiregcalib->Branch( "fitmean", fitmean, "fitmean[6796]/D" );
254 wiregcalib->Branch( "fitmeanerr", fitmeanerr, "fitmeanerr[6796]/D" );
255 wiregcalib->Branch( "fitsigma", fitsigma, "fitsigma[6796]/D" );
256 wiregcalib->Branch( "chisq", chisq, "chisq[6796]/D" );
257 wiregcalib->Fill();
258 wiregcalib->Write();
259
261
262 TCanvas c1( "c1", "canvas", 500, 400 );
264 for (
int i = 0; i <
wireNo; i++ )
265 {
266 m_wiregain[i]->Draw();
268 }
270
271 for (
int i = 0; i <
wireNo; i++ )
delete m_wiregain[i];
272}
DOUBLE_PRECISION count[3]