19 int ii,ic,it,jc,
index;
35 std::vector<std::vector< const Vect3DF*> > tf0t;
36 std::vector< const Vect3DF* > th0t;
37 std::vector< double > taa;
46 std::vector< const Vect3DF* > tmpVec;
51 tf0t.push_back( std::move(tmpVec) );
56 std::vector< std::vector<double> > denom;
58 for(
int ic=0; ic<totNC; ic++) denom.emplace_back( totNC, 0 );
63 std::unique_ptr< Vect3DF[] > al0(
new Vect3DF[ totNC ]);
64 for(ic=0;ic<totNC; ic++){ al0[ic].X=0.; al0[ic].Y=0.; al0[ic].Z=0.;}
65 std::vector<double> anum(totNC,0.);
66 for (ic=0; ic<totNC; ++ic) {
67 for (it = 0; it<NTRK; ++it) {
70 al0[ic].X += vk->
tmpArr[it]->wbci[0] * tf0t[ic][it]->X
71 + vk->
tmpArr[it]->wbci[3] * tf0t[ic][it]->Y
72 + vk->
tmpArr[it]->wbci[6] * tf0t[ic][it]->Z;
73 al0[ic].Y += vk->
tmpArr[it]->wbci[1] * tf0t[ic][it]->X
74 + vk->
tmpArr[it]->wbci[4] * tf0t[ic][it]->Y
75 + vk->
tmpArr[it]->wbci[7] * tf0t[ic][it]->Z;
76 al0[ic].Z += vk->
tmpArr[it]->wbci[2] * tf0t[ic][it]->X
77 + vk->
tmpArr[it]->wbci[5] * tf0t[ic][it]->Y
78 + vk->
tmpArr[it]->wbci[8] * tf0t[ic][it]->Z;
80 anum[ic] += vk->
tmpArr[it]->parf0[0] * tf0t[ic][it]->X
81 + vk->
tmpArr[it]->parf0[1] * tf0t[ic][it]->Y
82 + vk->
tmpArr[it]->parf0[2] * tf0t[ic][it]->Z;
85 al0[ic].X -= th0t[ic]->X;
86 al0[ic].Y -= th0t[ic]->Y;
87 al0[ic].Z -= th0t[ic]->Z;
88 anum[ic] = 2.*anum[ic] + dxyz[0] * 2. * th0t[ic]->X
89 + dxyz[1] * 2. * th0t[ic]->Y
90 + dxyz[2] * 2. * th0t[ic]->Z
102 for (ic=0; ic<totNC; ++ic) {
103 for (jc=0; jc<totNC; ++jc) {
104 denom[ic][jc] = al0[ic].X * vk->
fitVcov[0] * al0[jc].X
105 + al0[ic].Y * vk->
fitVcov[1] * al0[jc].X
106 + al0[ic].Z * vk->
fitVcov[3] * al0[jc].X
107 + al0[ic].X * vk->
fitVcov[1] * al0[jc].Y
108 + al0[ic].Y * vk->
fitVcov[2] * al0[jc].Y
109 + al0[ic].Z * vk->
fitVcov[4] * al0[jc].Y
110 + al0[ic].X * vk->
fitVcov[3] * al0[jc].Z
111 + al0[ic].Y * vk->
fitVcov[4] * al0[jc].Z
112 + al0[ic].Z * vk->
fitVcov[5] * al0[jc].Z
113 + al0[jc].X * vk->
fitVcov[0] * al0[ic].X
114 + al0[jc].Y * vk->
fitVcov[1] * al0[ic].X
115 + al0[jc].Z * vk->
fitVcov[3] * al0[ic].X
116 + al0[jc].X * vk->
fitVcov[1] * al0[ic].Y
117 + al0[jc].Y * vk->
fitVcov[2] * al0[ic].Y
118 + al0[jc].Z * vk->
fitVcov[4] * al0[ic].Y
119 + al0[jc].X * vk->
fitVcov[3] * al0[ic].Z
120 + al0[jc].Y * vk->
fitVcov[4] * al0[ic].Z
121 + al0[jc].Z * vk->
fitVcov[5] * al0[ic].Z;
123 for (it=0; it<NTRK; ++it) {
125 denom[ic][jc] += tf0t[ic][it]->X * t_trk->
wci[0] * tf0t[jc][it]->X
126 + tf0t[ic][it]->Y * t_trk->
wci[1] * tf0t[jc][it]->X
127 + tf0t[ic][it]->Z * t_trk->
wci[3] * tf0t[jc][it]->X
128 + tf0t[ic][it]->X * t_trk->
wci[1] * tf0t[jc][it]->Y
129 + tf0t[ic][it]->Y * t_trk->
wci[2] * tf0t[jc][it]->Y
130 + tf0t[ic][it]->Z * t_trk->
wci[4] * tf0t[jc][it]->Y
131 + tf0t[ic][it]->X * t_trk->
wci[3] * tf0t[jc][it]->Z
132 + tf0t[ic][it]->Y * t_trk->
wci[4] * tf0t[jc][it]->Z
133 + tf0t[ic][it]->Z * t_trk->
wci[5] * tf0t[jc][it]->Z
134 + tf0t[jc][it]->X * t_trk->
wci[0] * tf0t[ic][it]->X
135 + tf0t[jc][it]->Y * t_trk->
wci[1] * tf0t[ic][it]->X
136 + tf0t[jc][it]->Z * t_trk->
wci[3] * tf0t[ic][it]->X
137 + tf0t[jc][it]->X * t_trk->
wci[1] * tf0t[ic][it]->Y
138 + tf0t[jc][it]->Y * t_trk->
wci[2] * tf0t[ic][it]->Y
139 + tf0t[jc][it]->Z * t_trk->
wci[4] * tf0t[ic][it]->Y
140 + tf0t[jc][it]->X * t_trk->
wci[3] * tf0t[ic][it]->Z
141 + tf0t[jc][it]->Y * t_trk->
wci[4] * tf0t[ic][it]->Z
142 + tf0t[jc][it]->Z * t_trk->
wci[5] * tf0t[ic][it]->Z;
151 auto coef = std::unique_ptr<double[]>(
new double[totNC]);
153 if (denom[0][0] != 0.) {
154 coef[0] = anum[0] / denom[0][0];
160 std::unique_ptr<double[]> adenom(
new double[totNC*totNC] );
162 for (ic=0; ic<totNC; ic++) {
163 for (jc=0; jc<totNC; jc++) {
164 adenom[ic*totNC + jc] = denom[ic][jc];
168 dsinv(totNC, adenom.get(), totNC, &IERR);
172 for (ic=0; ic<totNC; ++ic) {
174 for (jc=0; jc<totNC; ++jc) {
175 index = ic*totNC + jc;
176 coef[ic] += adenom[
index] * anum[jc];
188 auto tmpVec = std::unique_ptr<Vect3DF[]>(
new Vect3DF[totNC]);
189 for (ic=0; ic<totNC; ++ic) {
190 tmpVec[ic].X = vk->
fitVcov[0] * al0[ic].X
193 tmpVec[ic].Y = vk->
fitVcov[1] * al0[ic].X
196 tmpVec[ic].Z = vk->
fitVcov[3] * al0[ic].X
199 dxyz[0] += coef[ic] * tmpVec[ic].X;
200 dxyz[1] += coef[ic] * tmpVec[ic].Y;
201 dxyz[2] += coef[ic] * tmpVec[ic].Z;
211 for (it=0; it<NTRK; ++it) {
216 for (ic=0; ic<totNC; ++ic) {
217 tmp[0] += coef[ic] * ( tf0t[ic][it]->X + t_trk->
wb[0]*tmpVec[ic].X
218 + t_trk->
wb[1]*tmpVec[ic].Y
219 + t_trk->
wb[2]*tmpVec[ic].Z);
220 tmp[1] += coef[ic] * ( tf0t[ic][it]->Y + t_trk->
wb[3]*tmpVec[ic].X
221 + t_trk->
wb[4]*tmpVec[ic].Y
222 + t_trk->
wb[5]*tmpVec[ic].Z);
223 tmp[2] += coef[ic] * ( tf0t[ic][it]->Z + t_trk->
wb[6]*tmpVec[ic].X
224 + t_trk->
wb[7]*tmpVec[ic].Y
225 + t_trk->
wb[8]*tmpVec[ic].Z);
230 trk->
fitP[0] -= t_trk->
wci[0]*tmp[0] + t_trk->
wci[1]*tmp[1] + t_trk->
wci[3]*tmp[2];
231 trk->
fitP[1] -= t_trk->
wci[1]*tmp[0] + t_trk->
wci[2]*tmp[1] + t_trk->
wci[4]*tmp[2];
232 double concor = t_trk->
wci[3]*tmp[0] + t_trk->
wci[4]*tmp[1] + t_trk->
wci[5]*tmp[2];
233 if( (trk->
fitP[2] - concor)*trk->
fitP[2] < 0) { concor=trk->
fitP[2]/4.; }
234 trk->
fitP[2] -= concor;