diff --git a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitE.cxx b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitE.cxx index f0f8e91a97500678bd0040b45a86f0aa5a2f7dbb..ddd32ef7e6c87c70ebc56da3f949de4461623afe 100755 --- a/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitE.cxx +++ b/Tracking/TrkVertexFitter/TrkVKalVrtCore/src/VtCFitE.cxx @@ -40,12 +40,40 @@ int getFullVrtCov(VKVertex * vk, double *ader, double *dcv, double verr[6][6]) long int NTRK = vk->TrackList.size(); long int IERR=0; long int NVar = (NTRK + 1) * 3; - if(vk->passNearVertex) { /* Fit is with "pass near" constraint and then */ + if(vk->passNearVertex && vk->ConstraintList.size()==0) { + /* Fit is with "pass near" constraint and then */ /* matrix is already present */ } else if ( vk->ConstraintList.size()>0 && useWeightScheme ) { /* Full matrix inversion i */ // FullMTXfill( vk, ader); + if ( vk->passNearVertex ) { + double drdpy[2][3]; + double dpipj[3][3]; + for (it = 1; it <= NTRK; ++it) { + drdpy[0][0] = vk->tmpArr[it-1]->drdp[0][0] * vk->FVC.ywgt[0] + vk->tmpArr[it-1]->drdp[1][0] * vk->FVC.ywgt[1]; + drdpy[1][0] = vk->tmpArr[it-1]->drdp[0][0] * vk->FVC.ywgt[1] + vk->tmpArr[it-1]->drdp[1][0] * vk->FVC.ywgt[2]; + drdpy[0][1] = vk->tmpArr[it-1]->drdp[0][1] * vk->FVC.ywgt[0] + vk->tmpArr[it-1]->drdp[1][1] * vk->FVC.ywgt[1]; + drdpy[1][1] = vk->tmpArr[it-1]->drdp[0][1] * vk->FVC.ywgt[1] + vk->tmpArr[it-1]->drdp[1][1] * vk->FVC.ywgt[2]; + drdpy[0][2] = vk->tmpArr[it-1]->drdp[0][2] * vk->FVC.ywgt[0] + vk->tmpArr[it-1]->drdp[1][2] * vk->FVC.ywgt[1]; + drdpy[1][2] = vk->tmpArr[it-1]->drdp[0][2] * vk->FVC.ywgt[1] + vk->tmpArr[it-1]->drdp[1][2] * vk->FVC.ywgt[2]; + for (jt = 1; jt <= NTRK; ++jt) { /* Matrix */ + for (int k = 0; k < 3; ++k) { + for (int l = 0; l < 3; ++l) { + dpipj[k][l] = 0.; + for (int j = 0; j < 2; ++j) { + dpipj[k][l] += vk->tmpArr[jt-1]->drdp[j][k] * drdpy[j][l]; + } + } + } + for (int k = 1; k <= 3; ++k) { + for (int l = 1; l <= 3; ++l) { + ader_ref(it * 3 + k, jt * 3 + l) += dpipj[l-1][k-1]; + } + } + } + } + } Vect3DF th0t,tf0t; for(ic1=0; ic1<(int)vk->ConstraintList.size();ic1++){ for(ic2=0; ic2<vk->ConstraintList[ic1]->NCDim; ic2++){