51 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
52 MsgStream log(
msgSvc,
"WrMdcCalib" );
53 log << MSG::INFO <<
"WrMdcCalib::initialize()" << endmsg;
56 m_mdcGeomSvc = mdcGeomSvc;
57 m_mdcFunSvc = mdcFunSvc;
58 m_mdcUtilitySvc = mdcUtilitySvc;
68 m_fdWire =
new TFolder(
"WireCor",
"WireCor" );
69 m_hlist->Add( m_fdWire );
71 m_fdResiWire =
new TFolder(
"ResiWire",
"ResiWire" );
72 m_hlist->Add( m_fdResiWire );
74 nwire = m_mdcGeomSvc->getWireSize();
75 for ( i = 0; i < nwire; i++ )
77 lay = m_mdcGeomSvc->Wire( i )->Layer();
78 cel = m_mdcGeomSvc->Wire( i )->Cell();
80 sprintf( hname,
"h%04d_L%02d_%03d_Left", i, lay, cel );
81 m_hleft[i] =
new TH1F( hname, hname, 300, -1.5, 1.5 );
82 m_fdWire->Add( m_hleft[i] );
84 sprintf( hname,
"h%04d_L%02d_%03d_Right", i, lay, cel );
85 m_hright[i] =
new TH1F( hname, hname, 300, -1.5, 1.5 );
86 m_fdWire->Add( m_hright[i] );
89 m_hdwxtot =
new TH1F(
"dwXtot",
"", 100, -0.5, 0.5 );
90 m_fdResiWire->Add( m_hdwxtot );
92 m_hddwx =
new TH1F(
"ddwX",
"", 100, -0.5, 0.5 );
93 m_fdResiWire->Add( m_hddwx );
95 m_hdwytot =
new TH1F(
"dwYtot",
"", 100, -0.5, 0.5 );
96 m_fdResiWire->Add( m_hdwytot );
98 m_hddwy =
new TH1F(
"ddwY",
"", 100, -0.5, 0.5 );
99 m_fdResiWire->Add( m_hddwy );
101 m_hLrResiSum =
new TH1F(
"LrResiSum",
"", 200, -0.5, 0.5 );
102 m_fdResiWire->Add( m_hLrResiSum );
104 m_hLrResiSub =
new TH1F(
"LrResiSub",
"", 200, -0.5, 0.5 );
105 m_fdResiWire->Add( m_hLrResiSub );
110 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
111 MsgStream log(
msgSvc,
"WrMdcCalib" );
112 log << MSG::DEBUG <<
"WrMdcCalib::fillHist()" << endmsg;
117 bool esCutFg =
event->getEsCutFlag();
118 if ( !esCutFg )
return -1;
139 ntrk =
event->getNTrk();
140 log << MSG::DEBUG <<
"number of tracks: " << ntrk << endmsg;
142 for ( i = 0; i < ntrk; i++ )
144 rectrk =
event->getRecTrk( i );
148 double dr = rectrk->
getDr();
149 if ( fabs( dr ) > m_param.drCut )
continue;
152 double dz = rectrk->
getDz();
153 if ( fabs( dz ) > m_param.dzCut )
continue;
156 double p = rectrk->
getP();
157 if ( ( fabs( p ) < m_param.pCut[0] ) || ( fabs( p ) > m_param.pCut[1] ) )
continue;
159 for ( lay = 0; lay <
MdcCalNLayer; lay++ ) fgHitLay[lay] =
false;
160 for ( k = 0; k < nhit; k++ )
164 fgHitLay[lay] =
true;
169 if ( fgHitLay[lay] ) nhitlay++;
170 if ( nhitlay < m_param.nHitLayCut )
continue;
172 log << MSG::DEBUG <<
"number of hits: " << nhit << endmsg;
173 for ( k = 0; k < nhit; k++ )
178 wir = m_mdcGeomSvc->Wire( lay, cel )->Id();
179 lr = rechit->
getLR();
185 if ( 1 != stat )
continue;
187 if ( ( fabs( doca ) < m_docaMin[lay] ) || ( fabs( doca ) > m_docaMax[lay] ) ||
188 ( fabs( resi ) > m_param.resiCut[lay] ) )
193 if ( !fgHitLay[1] )
continue;
195 else if ( 42 == lay )
197 if ( !fgHitLay[41] )
continue;
201 if ( ( !fgHitLay[lay - 1] ) && ( !fgHitLay[lay + 1] ) )
continue;
204 if ( wir < ( m_mdcGeomSvc->getWireSize() ) )
206 if ( 0 == lr ) { m_hleft[wir]->Fill( resi ); }
207 else if ( 1 == lr ) { m_hright[wir]->Fill( resi ); }
209 else { std::cout <<
"wir: " << wir << std::endl; }
219 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
220 MsgStream log(
msgSvc,
"WrMdcCalib" );
221 log << MSG::INFO <<
"WrMdcCalib::updateConst()" << endmsg;
228 int nwire = m_mdcGeomSvc->getWireSize();
248 ifstream fwpinput( m_param.wpcFile.c_str() );
249 for ( i = 0; i < 7; i++ ) fwpinput >> strtmp;
250 for ( i = 0; i < nwire; i++ )
252 fwpinput >> strtmp >> dwinput[i][0] >> dwinput[i][1] >> dwinput[i][2] >> dwinput[i][3] >>
253 dwinput[i][4] >> dwinput[i][5];
257 std::cout <<
"totwire: " << nwire << std::endl;
258 for ( i = 0; i < nwire; i++ )
260 pWire = m_mdcGeomSvc->Wire( i );
261 lay = pWire->
Layer();
264 if ( 1 == m_param.fgCalib[lay] )
266 entry_l = m_hleft[i]->GetEntries();
267 mean_l = m_hleft[i]->GetMean();
269 entry_r = m_hright[i]->GetEntries();
270 mean_r = m_hright[i]->GetMean();
272 dwphi = 0.5 * ( mean_l - mean_r );
274 else { dwphi = 0.0; }
275 if ( 0 == m_param.fgWireCal[i] ) dwphi = 0.0;
277 resiLrSum = 0.5 * ( mean_l + mean_r );
278 m_hLrResiSum->Fill( resiLrSum );
279 m_hLrResiSub->Fill( dwphi );
283 wpos[3] = pWire->
Forward().x();
284 wpos[4] = pWire->
Forward().y();
286 xx = 0.5 * ( wpos[0] + wpos[3] );
287 yy = 0.5 * ( wpos[1] + wpos[4] );
288 rr = sqrt( ( xx * xx ) + ( yy * yy ) );
290 if ( yy >= 0 ) wphi = acos( xx / rr );
291 else wphi =
PI2 - acos( xx / rr );
293 dx = -1.0 * dwphi *
sin( wphi );
294 dy = dwphi *
cos( wphi );
304 ofstream fwpc(
"WirePosCalib_new.txt" );
305 fwpc << setw( 5 ) <<
"wireId" << setw( 15 ) <<
"dx_East(mm)" << setw( 15 ) <<
"dy_East(mm)"
306 << setw( 15 ) <<
"dz_East(mm)" << setw( 15 ) <<
"dx_West(mm)" << setw( 15 )
307 <<
"dy_West(mm)" << setw( 15 ) <<
"dz_West(mm)" << endl;
309 ofstream fdw(
"dw.txt" );
310 fdw << setw( 5 ) <<
"wireId" << setw( 15 ) <<
"ddx_East(mm)" << setw( 15 ) <<
"ddy_East(mm)"
311 << setw( 15 ) <<
"ddz_East(mm)" << setw( 15 ) <<
"ddx_West(mm)" << setw( 15 )
312 <<
"ddy_West(mm)" << setw( 15 ) <<
"ddz_West(mm)" << endl;
316 for ( i = 0; i < nwire; i++ )
318 for ( k = 0; k < 6; k++ ) dwtot[k] = dwinput[i][k] + ddw[i][k];
319 fwpc << setw( 5 ) << i;
320 for ( k = 0; k < 6; k++ ) fwpc << setw( 15 ) << dwtot[k];
323 fdw << setw( 5 ) << i;
324 for ( k = 0; k < 6; k++ ) fdw << setw( 15 ) << ddw[i][k];
326 m_hdwxtot->Fill( dwtot[0] );
327 m_hddwx->Fill( ddw[i][0] );
328 m_hdwytot->Fill( dwtot[1] );
329 m_hddwy->Fill( ddw[i][1] );
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)