43 {
44
45
46 MsgStream log(
msgSvc(),
"CgemKalTrackCnv");
47 log << MSG::DEBUG << "CgemKalTrackCnv::TObjectToDataObject" << endreq;
48 StatusCode sc=StatusCode::SUCCESS;
49
50
52 refpObject=cgemKalTrackTdsCol;
53
54
55 if (!m_cgemKalTrackCol) return sc;
56 TIter cgemKalTrackIter(m_cgemKalTrackCol);
58 while ((cgemKalTrackRoot = (
TCgemKalTrack*)cgemKalTrackIter.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] = cgemKalTrackRoot->
getZHelix(i);
118 zhelix_e[i] = cgemKalTrackRoot->
getZHelixE(i);
120 zhelix_k[i] = cgemKalTrackRoot->
getZHelixK(i);
121 zhelix_p[i] = cgemKalTrackRoot->
getZHelixP(i);
122
123 fhelix[i] = cgemKalTrackRoot->
getFHelix(i);
124 fhelix_e[i] = cgemKalTrackRoot->
getFHelixE(i);
126 fhelix_k[i] = cgemKalTrackRoot->
getFHelixK(i);
127 fhelix_p[i] = cgemKalTrackRoot->
getFHelixP(i);
128
129 for (int j=0; j<=i; j++){
130 zerror[i][j] = cgemKalTrackRoot->
getZError(i,j);
131 zerror_e[i][j] = cgemKalTrackRoot->
getZErrorE(i,j);
132 zerror_mu[i][j] = cgemKalTrackRoot->
getZErrorMu(i,j);
133 zerror_k[i][j] = cgemKalTrackRoot->
getZErrorK(i,j);
134 zerror_p[i][j] = cgemKalTrackRoot->
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] = cgemKalTrackRoot->
getFError(i,j);
143 ferror_e[i][j] = cgemKalTrackRoot->
getFErrorE(i,j);
144 ferror_mu[i][j] = cgemKalTrackRoot->
getFErrorMu(i,j);
145 ferror_k[i][j] = cgemKalTrackRoot->
getFErrorK(i,j);
146 ferror_p[i][j] = cgemKalTrackRoot->
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 cgemKalTrackTds->
setPxy(pxy,m);
270 cgemKalTrackTds->
setPx(px,m);
271 cgemKalTrackTds->
setPy(py,m);
272 cgemKalTrackTds->
setPz(pz,m);
273 cgemKalTrackTds->
setP(ptot,m);
274 cgemKalTrackTds->
setTheta(acos(pz/ptot),m);
275 cgemKalTrackTds->
setPhi(atan2(py,px),m);
276 cgemKalTrackTds->
setX(x,m);
277 cgemKalTrackTds->
setY(y,m);
278 cgemKalTrackTds->
setZ(z,m);
279 cgemKalTrackTds->
setR(sqrt(x*x+y*y),m);
280
284 cgemKalTrackTds->
setNdf(cgemKalTrackRoot->
getNdf(m),0,m);
285 }
286
288
289 for(int jj=0; jj<5; jj++){
290 cgemKalTrackTds->
setZHelix(zhelixs[jj],jj);
291 cgemKalTrackTds->
setZError(zerrors[jj],jj);
292 cgemKalTrackTds->
setFHelix(fhelixs[jj],jj);
293 cgemKalTrackTds->
setFError(ferrors[jj],jj);
294 cgemKalTrackTds->
setPoca(pocas[jj],jj);
295 }
296
297 cgemKalTrackTdsCol->push_back(cgemKalTrackTds);
298 }
299
300 delete m_cgemKalTrackCol;
301 m_cgemKalTrackCol = 0;
302 return StatusCode::SUCCESS;
303}
double sin(const BesAngle a)
double cos(const BesAngle a)
void setStat(int stat, int i, int pid)
void setCharge(const int charge, const int pid)
void setChisq(double chisq, int i, int pid)
void setZ(const double z, const int pid)
void setX(const double x, const int pid)
void setPy(const double py, const int pid)
void setR(const double r, const int pid)
void setPoca(const HepPoint3D &poca, const int pid)
void setP(const double p, const int pid)
void setTrackId(int trackId)
void setPz(const double pz, const int pid)
void setZHelix(const HepVector &helix, const int pid)
void setY(const double y, const int pid)
void setTheta(const double theta, const int pid)
void setPhi(const double phi, const int pid)
void setNdf(int ndf, int i, int pid)
void setZError(const HepSymMatrix &error, const int pid)
void setPxy(const double pxy, const int pid)
void setFError(const HepSymMatrix &ferror, const int pid)
void setPx(const double px, const int pid)
void setFHelix(const HepVector &fhelix, const int pid)
Double_t getZHelixE(Int_t i) const
Int_t getNdf(const Int_t pid) const
Double_t getZErrorMu(Int_t i, Int_t j) const
Double_t getZErrorP(Int_t i, Int_t j) const
Double_t getFHelixE(Int_t i) const
Double_t getZHelixMu(Int_t i) const
Double_t getFHelixMu(Int_t i) const
Double_t getFErrorE(Int_t i, Int_t j) const
Double_t getChisq(const Int_t pid) const
Double_t getZErrorK(Int_t i, Int_t j) const
Double_t getZHelixK(Int_t i) const
Double_t getFHelix(Int_t i) const
Int_t getStat2(const Int_t pid) const
Double_t getFErrorK(Int_t i, Int_t j) const
Double_t getFErrorMu(Int_t i, Int_t j) const
Int_t getStat(const Int_t pid) const
Double_t getFHelixK(Int_t i) const
Double_t getZHelixP(Int_t i) const
Double_t getZHelix(Int_t i) const
Double_t getZErrorE(Int_t i, Int_t j) const
Double_t getFErrorP(Int_t i, Int_t j) const
Double_t getZError(Int_t i, Int_t j) const
Double_t getFHelixP(Int_t i) const
Double_t getFError(Int_t i, Int_t j) const
static std::map< const TObject *, const DstCgemKalTrack * > m_rootCgemKalTrackMap