43 {
44
45
46 MsgStream log(
msgSvc(),
"MdcKalTrackCnv");
47 log << MSG::DEBUG << "MdcKalTrackCnv::TObjectToDataObject" << endreq;
48 StatusCode sc=StatusCode::SUCCESS;
49
50
52 refpObject=mdcKalTrackTdsCol;
53
54
55 if (!m_mdcKalTrackCol) return sc;
56 TIter mdcKalTrackIter(m_mdcKalTrackCol);
58 while ((mdcKalTrackRoot = (
TMdcKalTrack*)mdcKalTrackIter.Next())) {
59 std::vector<HepVector> zhelixs;
60 std::vector<HepSymMatrix> zerrors;
61 std::vector<HepPoint3D> pocas;
62 std::vector<HepVector> fhelixs;
63 std::vector<HepSymMatrix> ferrors;
64
65 HepVector zhelix(5);
66 HepSymMatrix zerror(5);
68
69 HepVector zhelix_e(5);
70 HepSymMatrix zerror_e(5);
72
73 HepVector zhelix_mu(5);
74 HepSymMatrix zerror_mu(5);
76
77 HepVector zhelix_k(5);
78 HepSymMatrix zerror_k(5);
80
81 HepVector zhelix_p(5);
82 HepSymMatrix zerror_p(5);
84
85 HepVector fhelix(5);
86 HepSymMatrix ferror(5);
87
88 HepVector fhelix_e(5);
89 HepSymMatrix ferror_e(5);
90
91 HepVector fhelix_mu(5);
92 HepSymMatrix ferror_mu(5);
93
94 HepVector fhelix_k(5);
95 HepSymMatrix ferror_k(5);
96
97 HepVector fhelix_p(5);
98 HepSymMatrix ferror_p(5);
99
100
103
104
105
106
107
108
109
110
111
112
113
114 log<<MSG::DEBUG<<"T to DST, poca: "<<poca<<endreq;
115
116 for (int i=0; i<5; i++){
117 zhelix[i] = mdcKalTrackRoot->
getZHelix(i);
122
123 fhelix[i] = mdcKalTrackRoot->
getFHelix(i);
128
129 for (int j=0; j<=i; j++){
130 zerror[i][j] = mdcKalTrackRoot->
getZError(i,j);
131 zerror_e[i][j] = mdcKalTrackRoot->
getZErrorE(i,j);
132 zerror_mu[i][j] = mdcKalTrackRoot->
getZErrorMu(i,j);
133 zerror_k[i][j] = mdcKalTrackRoot->
getZErrorK(i,j);
134 zerror_p[i][j] = mdcKalTrackRoot->
getZErrorP(i,j);
135
136 zerror[j][i] = zerror[i][j];
137 zerror_e[j][i] = zerror_e[i][j];
138 zerror_mu[j][i] = zerror_mu[i][j];
139 zerror_k[j][i] = zerror_k[i][j];
140 zerror_p[j][i] = zerror_p[i][j];
141
142 ferror[i][j] = mdcKalTrackRoot->
getFError(i,j);
143 ferror_e[i][j] = mdcKalTrackRoot->
getFErrorE(i,j);
144 ferror_mu[i][j] = mdcKalTrackRoot->
getFErrorMu(i,j);
145 ferror_k[i][j] = mdcKalTrackRoot->
getFErrorK(i,j);
146 ferror_p[i][j] = mdcKalTrackRoot->
getFErrorP(i,j);
147
148 ferror[j][i] = ferror[i][j];
149 ferror_e[j][i] = ferror_e[i][j];
150 ferror_mu[j][i] = ferror_mu[i][j];
151 ferror_k[j][i] = ferror_k[i][j];
152 ferror_p[j][i] = ferror_p[i][j];
153 }
154 }
155
156
157 double dr = zhelix[0];
158 double phi0 = zhelix[1];
159 double kappa = zhelix[2];
160 double dz = zhelix[3];
161 double tanl = zhelix[4];
162 poca[0]=dr*
cos(phi0);
163 poca[1]=dr*
sin(phi0);
164 poca[2]=dz;
165
166 dr = zhelix_e[0];
167 phi0 = zhelix_e[1];
168 kappa = zhelix_e[2];
169 dz = zhelix_e[3];
170 tanl = zhelix_e[4];
171 poca_e[0]=dr*
cos(phi0);
172 poca_e[1]=dr*
sin(phi0);
173 poca_e[2]=dz;
174
175 dr = zhelix_mu[0];
176 phi0 = zhelix_mu[1];
177 kappa = zhelix_mu[2];
178 dz = zhelix_mu[3];
179 tanl = zhelix_mu[4];
180 poca_mu[0]=dr*
cos(phi0);
181 poca_mu[1]=dr*
sin(phi0);
182 poca_mu[2]=dz;
183
184 dr = zhelix_k[0];
185 phi0 = zhelix_k[1];
186 kappa = zhelix_k[2];
187 dz = zhelix_k[3];
188 tanl = zhelix_k[4];
189 poca_k[0]=dr*
cos(phi0);
190 poca_k[1]=dr*
sin(phi0);
191 poca_k[2]=dz;
192
193 dr = zhelix_p[0];
194 phi0 = zhelix_p[1];
195 kappa = zhelix_p[2];
196 dz = zhelix_p[3];
197 tanl = zhelix_p[4];
198 poca_p[0]=dr*
cos(phi0);
199 poca_p[1]=dr*
sin(phi0);
200 poca_p[2]=dz;
201
202
203 log<<MSG::DEBUG<<"T to DST, zhelix: "<<zhelix<<endreq;
204 log<<MSG::DEBUG<<"T to DST, zerror: "<<zerror<<endreq;
205
206 zhelixs.push_back(zhelix_e);
207 zhelixs.push_back(zhelix_mu);
208 zhelixs.push_back(zhelix);
209 zhelixs.push_back(zhelix_k);
210 zhelixs.push_back(zhelix_p);
211 zerrors.push_back(zerror_e);
212 zerrors.push_back(zerror_mu);
213 zerrors.push_back(zerror);
214 zerrors.push_back(zerror_k);
215 zerrors.push_back(zerror_p);
216
217 fhelixs.push_back(fhelix_e);
218 fhelixs.push_back(fhelix_mu);
219 fhelixs.push_back(fhelix);
220 fhelixs.push_back(fhelix_k);
221 fhelixs.push_back(fhelix_p);
222 ferrors.push_back(ferror_e);
223 ferrors.push_back(ferror_mu);
224 ferrors.push_back(ferror);
225 ferrors.push_back(ferror_k);
226 ferrors.push_back(ferror_p);
227
228 pocas.push_back(poca_e);
229 pocas.push_back(poca_mu);
230 pocas.push_back(poca);
231 pocas.push_back(poca_k);
232 pocas.push_back(poca_p);
233
234 for(int m=0; m<5; m++){
235 int charge;
236 double pxy(0.),px(0.),py(0.),pz(0.),ptot(0.),dr(0.),phi0(0.),kappa(0.),dz(0.),tanl(0.),
x(0.),y(0.),z(0.),vx0(0.),vy0(0.),vz0(0.);
237 dr = zhelixs[m][0];
238 phi0 = zhelixs[m][1];
239 kappa = zhelixs[m][2];
240 dz = zhelixs[m][3];
241 tanl = zhelixs[m][4];
242
243
244
245
246
249 z = dz;
250
251
252
253 if (kappa > 0.0000000001)
254 charge = 1;
255 else if (kappa < -0.0000000001)
256 charge = -1;
257 else
258 charge = 0;
259
260 if(kappa!=0) pxy = 1.0/fabs(kappa);
261 else pxy = 0;
262
263 px = pxy * (-
sin(phi0));
264 py = pxy *
cos(phi0);
265 pz = pxy * tanl;
266 ptot = sqrt(px*px+py*py+pz*pz);
267
269 mdcKalTrackTds->
setPxy(pxy,m);
270 mdcKalTrackTds->
setPx(px,m);
271 mdcKalTrackTds->
setPy(py,m);
272 mdcKalTrackTds->
setPz(pz,m);
273 mdcKalTrackTds->
setP(ptot,m);
274 mdcKalTrackTds->
setTheta(acos(pz/ptot),m);
275 mdcKalTrackTds->
setPhi(atan2(py,px),m);
276 mdcKalTrackTds->
setX(x,m);
277 mdcKalTrackTds->
setY(y,m);
278 mdcKalTrackTds->
setZ(z,m);
279 mdcKalTrackTds->
setR(sqrt(x*x+y*y),m);
280
286 }
287
289
290 for(int jj=0; jj<5; jj++){
291 mdcKalTrackTds->
setZHelix(zhelixs[jj],jj);
292 mdcKalTrackTds->
setZError(zerrors[jj],jj);
293 mdcKalTrackTds->
setFHelix(fhelixs[jj],jj);
294 mdcKalTrackTds->
setFError(ferrors[jj],jj);
295 mdcKalTrackTds->
setPoca(pocas[jj],jj);
296 }
297
298 mdcKalTrackTdsCol->push_back(mdcKalTrackTds);
299 }
300
301 delete m_mdcKalTrackCol;
302 m_mdcKalTrackCol = 0;
303 return StatusCode::SUCCESS;
304}
double sin(const BesAngle a)
double cos(const BesAngle a)
void setFHelix(const HepVector &fhelix, const int pid)
void setPhi(const double phi, const int pid)
void setStat(int stat, int i, int pid)
void setY(const double y, const int pid)
void setPz(const double pz, const int pid)
void setChisq(double chisq, int i, int pid)
void setZError(const HepSymMatrix &error, const int pid)
void setX(const double x, const int pid)
void setP(const double p, const int pid)
void setPoca(const HepPoint3D &poca, const int pid)
void setPx(const double px, const int pid)
void setZ(const double z, const int pid)
void setTheta(const double theta, const int pid)
void setR(const double r, const int pid)
void setPxy(const double pxy, const int pid)
void setPy(const double py, const int pid)
void setFError(const HepSymMatrix &ferror, const int pid)
void setTrackId(int trackId)
void setZHelix(const HepVector &helix, const int pid)
void setCharge(const int charge, const int pid)
void setNdf(int ndf, int i, int pid)
void setNlayer(int nlayer, int pid)
Double_t getFErrorE(Int_t i, Int_t j) const
Double_t getFHelix(Int_t i) const
Double_t getZErrorP(Int_t i, Int_t j) const
Double_t getZHelix(Int_t i) const
Double_t getFHelixMu(Int_t i) const
Double_t getFHelixK(Int_t i) const
Double_t getZErrorE(Int_t i, Int_t j) const
Int_t getStat(const Int_t pid) const
Double_t getFErrorK(Int_t i, Int_t j) const
Int_t getNdf(const Int_t pid) const
Double_t getZError(Int_t i, Int_t j) const
Int_t getNlayer(const Int_t pid) const
Double_t getFErrorP(Int_t i, Int_t j) const
Double_t getChisq(const Int_t pid) const
Double_t getZHelixK(Int_t i) const
Double_t getFHelixP(Int_t i) const
Double_t getFHelixE(Int_t i) const
Double_t getZHelixMu(Int_t i) const
Double_t getZHelixE(Int_t i) const
Double_t getFError(Int_t i, Int_t j) const
Double_t getZHelixP(Int_t i) const
Int_t getStat2(const Int_t pid) const
Double_t getFErrorMu(Int_t i, Int_t j) const
Double_t getZErrorK(Int_t i, Int_t j) const
Double_t getZErrorMu(Int_t i, Int_t j) const
static std::map< const TObject *, const DstMdcKalTrack * > m_rootMdcKalTrackMap