59 Gaudi::svcLocator() -> service(
"MessageSvc",
msgSvc);
60 MsgStream log(
msgSvc,
"MilleAlign");
61 log << MSG::INFO <<
"MilleAlign::initialize()" << endreq;
65 StatusCode sc = Gaudi::svcLocator() -> service (
"MdcUtilitySvc",imdcUtilitySvc);
66 m_mdcUtilitySvc=
dynamic_cast<MdcUtilitySvc*
> (imdcUtilitySvc);
67 if ( sc.isFailure() ){
68 log << MSG::FATAL <<
"Could not load MdcUtilitySvc!" << endreq;
72 m_mdcGeomSvc = mdcGeomSvc;
73 m_mdcFunSvc = mdcFunSvc;
76 m_hresAll =
new TH1F(
"HResAllInc",
"", 200, -1.0, 1.0);
77 m_hlist->Add(m_hresAll);
79 m_hresInn =
new TH1F(
"HResInnInc",
"", 200, -1.0, 1.0);
80 m_hlist->Add(m_hresInn);
82 m_hresStp =
new TH1F(
"HResStpInc",
"", 200, -1.0, 1.0);
83 m_hlist->Add(m_hresStp);
85 m_hresOut =
new TH1F(
"HResOutInc",
"", 200, -1.0, 1.0);
86 m_hlist->Add(m_hresOut);
90 sprintf(hname,
"Res_Layer%02d", lay);
91 m_hresLay[lay] =
new TH1F(hname,
"", 200, -1.0, 1.0);
92 m_hlist->Add(m_hresLay[lay]);
95 m_hresAllRec =
new TH1F(
"HResAllRecInc",
"", 200, -1.0, 1.0);
96 m_hlist->Add(m_hresAllRec);
98 sprintf(hname,
"Res_LayerRec%02d", lay);
99 m_hresLayRec[lay] =
new TH1F(hname,
"", 200, -1.0, 1.0);
100 m_hlist->Add(m_hresLayRec[lay]);
104 m_hddoca =
new TH1F(
"delt_doca",
"", 200, -1.0, 1.0);
105 m_hlist->Add(m_hddoca);
108 sprintf(hname,
"delt_docaLay%02d", lay);
109 m_hddocaLay[lay] =
new TH1F(hname,
"", 200, -1.0, 1.0);
110 m_hlist->Add(m_hddocaLay[lay]);
126 m_pMilleAlign -> InitMille(&m_dofs[0], &m_sigm[0], m_nglo, m_nloc,
129 m_derGB.resize(m_npar);
130 m_derNonLin.resize(m_npar);
131 m_par.resize(m_npar);
132 m_error.resize(m_npar);
133 m_pull.resize(m_npar);
135 m_derLC.resize(m_nloc);
138 std::vector<double> constTX;
139 std::vector<double> constTY;
140 std::vector<double> constRZ;
142 std::vector<double> constTXE;
143 std::vector<double> constTXW;
144 std::vector<double> constTYE;
145 std::vector<double> constTYW;
146 std::vector<double> constRZE;
147 std::vector<double> constRZW;
149 constTX.resize(m_npar);
150 constTY.resize(m_npar);
151 constRZ.resize(m_npar);
153 constTXE.resize(m_npar);
154 constTXW.resize(m_npar);
155 constTYE.resize(m_npar);
156 constTYW.resize(m_npar);
157 constRZE.resize(m_npar);
158 constRZW.resize(m_npar);
160 for(i=0; i<m_npar; i++){
190 m_pMilleAlign -> ConstF(&constTXE[0], 0.0);
191 m_pMilleAlign -> ConstF(&constTXW[0], 0.0);
192 m_pMilleAlign -> ConstF(&constTYE[0], 0.0);
193 m_pMilleAlign -> ConstF(&constTYW[0], 0.0);
194 m_pMilleAlign -> ConstF(&constRZE[0], 0.0);
195 m_pMilleAlign -> ConstF(&constRZW[0], 0.0);
200 Gaudi::svcLocator() -> service(
"MessageSvc",
msgSvc);
201 MsgStream log(
msgSvc,
"MilleAlign");
202 log << MSG::DEBUG <<
"MilleAlign::fillTree()" << endreq;
232 int ntrk =
event -> getNTrk();
233 if( (ntrk<m_param.
nTrkCut[0]) || (ntrk>m_param.
nTrkCut[1]))
return false;
235 for(itrk=0; itrk<ntrk; itrk++){
236 rectrk =
event->getRecTrk(itrk);
239 trkpar[0] = rectrk -> getDr();
240 trkpar[1] = rectrk -> getPhi0();
241 trkpar[2] = rectrk -> getKappa();
242 trkpar[3] = rectrk -> getDz();
243 trkpar[4] = rectrk -> getTanLamda();
245 int nHit = rectrk -> getNHits();
246 if(nHit < m_param.
nHitCut)
continue;
247 if(fabs(trkpar[0]) > m_param.
drCut)
continue;
248 if(fabs(trkpar[3]) > m_param.
dzCut)
continue;
250 HepVector rechelix = rectrk->
getHelix();
251 HepVector helix = rectrk->
getHelix();
255 for(ihit=0; ihit<nHit; ihit++){
256 rechit = rectrk -> getRecHit(ihit);
257 lr = rechit->
getLR();
258 lay = rechit -> getLayid();
259 cel = rechit -> getCellid();
260 pWire = m_mdcGeomSvc -> Wire(lay, cel);
261 dmeas = rechit -> getDmeas();
262 zhit = rechit -> getZhit();
263 hitSigm = rechit -> getErrDmeas();
265 wpos[0] = pWire -> Backward().x();
266 wpos[1] = pWire -> Backward().y();
267 wpos[2] = pWire -> Backward().z();
268 wpos[3] = pWire -> Forward().x();
269 wpos[4] = pWire -> Forward().y();
270 wpos[5] = pWire -> Forward().z();
271 wpos[6] = pWire -> Tension();
274 double doca = (m_mdcUtilitySvc->
doca(lay, cel, helix, helixErr))*10.0;
276 resi = -1.0*dmeas - doca;
277 if ((fabs(doca) < m_docaCut[lay][0]) || (fabs(doca) > m_docaCut[lay][1]) ||
278 (fabs(resi) > m_resiCut[lay]))
continue;
281 resiRec = rechit -> getResiIncLR();
283 double dd = fabs(doca) - fabs(rechit->
getDocaInc());
284 m_hddoca -> Fill(dd);
285 m_hddocaLay[lay] -> Fill(dd);
288 m_hresAll->Fill(resi);
289 if(lay < 8) m_hresInn->Fill(resi);
290 else if(lay < 20) m_hresStp->Fill(resi);
291 else m_hresOut->Fill(resi);
292 m_hresLay[lay]->Fill(resi);
294 m_hresAllRec->Fill(resiRec);
295 m_hresLayRec[lay]->Fill(resiRec);
298 m_pMilleAlign -> ZerLoc(&m_derGB[0], &m_derLC[0], &m_derNonLin[0]);
301 for(ipar=0; ipar<m_nloc; ipar++){
302 if( ! getDeriLoc(ipar, lay, cel ,rechelix, helixErr, deri) ){
303 cout <<
"getDeriLoc == false!" << setw(12) << itrk << setw(12) << ipar << endl;
306 m_derLC[ipar] = deri;
311 for(ipar=0; ipar<m_nGloHit; ipar++){
312 iparGB = getAlignParId(lay, ipar);
313 if( ! getDeriGlo(ipar, iparGB, lay, cel, helix, helixErr, wpos, deri) )
315 cout <<
"getDeriGlo == false!" << setw(12) << itrk << setw(12) << ipar << endl;
318 m_derGB[iparGB] = deri;
320 m_pMilleAlign -> EquLoc(&m_derGB[0], &m_derLC[0], &m_derNonLin[0], resi, hitSigm);
324 bool sc = m_pMilleAlign -> FitLoc(m_pMilleAlign->
GetTrackNumber(), trkparms, 0);
325 if(sc) m_pMilleAlign -> SetTrackNumber( m_pMilleAlign->
GetTrackNumber()+1 );