40 {
41
42
43 MsgStream log(
msgSvc(),
"MdcKalTrackCnv" );
44 log << MSG::DEBUG << "MdcKalTrackCnv::TObjectToDataObject" << endmsg;
45 StatusCode sc = StatusCode::SUCCESS;
46
47
49 refpObject = mdcKalTrackTdsCol;
50
51
52 if ( !m_mdcKalTrackCol ) return sc;
53 TIter mdcKalTrackIter( m_mdcKalTrackCol );
54 TMdcKalTrack* mdcKalTrackRoot = 0;
55 while ( ( mdcKalTrackRoot = (TMdcKalTrack*)mdcKalTrackIter.Next() ) )
56 {
57 std::vector<HepVector> zhelixs;
58 std::vector<HepSymMatrix> zerrors;
59 std::vector<HepPoint3D> pocas;
60 std::vector<HepVector> fhelixs;
61 std::vector<HepSymMatrix> ferrors;
62
63 HepVector zhelix( 5 );
64 HepSymMatrix zerror( 5 );
66
67 HepVector zhelix_e( 5 );
68 HepSymMatrix zerror_e( 5 );
70
71 HepVector zhelix_mu( 5 );
72 HepSymMatrix zerror_mu( 5 );
74
75 HepVector zhelix_k( 5 );
76 HepSymMatrix zerror_k( 5 );
78
79 HepVector zhelix_p( 5 );
80 HepSymMatrix zerror_p( 5 );
82
83 HepVector fhelix( 5 );
84 HepSymMatrix ferror( 5 );
85
86 HepVector fhelix_e( 5 );
87 HepSymMatrix ferror_e( 5 );
88
89 HepVector fhelix_mu( 5 );
90 HepSymMatrix ferror_mu( 5 );
91
92 HepVector fhelix_k( 5 );
93 HepSymMatrix ferror_k( 5 );
94
95 HepVector fhelix_p( 5 );
96 HepSymMatrix ferror_p( 5 );
97
98 DstMdcKalTrack* mdcKalTrackTds = new DstMdcKalTrack();
99 m_common.m_rootMdcKalTrackMap[mdcKalTrackRoot] = mdcKalTrackTds;
100
101
102
103
104
105
106
107
108
109
110
111 log << MSG::DEBUG << "T to DST, poca: " << poca << endmsg;
112
113 for ( int i = 0; i < 5; i++ )
114 {
115 zhelix[i] = mdcKalTrackRoot->
getZHelix( i );
116 zhelix_e[i] = mdcKalTrackRoot->
getZHelixE( i );
118 zhelix_k[i] = mdcKalTrackRoot->
getZHelixK( i );
119 zhelix_p[i] = mdcKalTrackRoot->
getZHelixP( i );
120
121 fhelix[i] = mdcKalTrackRoot->
getFHelix( i );
122 fhelix_e[i] = mdcKalTrackRoot->
getFHelixE( i );
124 fhelix_k[i] = mdcKalTrackRoot->
getFHelixK( i );
125 fhelix_p[i] = mdcKalTrackRoot->
getFHelixP( i );
126
127 for ( int j = 0; j <= i; j++ )
128 {
129 zerror[i][j] = mdcKalTrackRoot->
getZError( i, j );
130 zerror_e[i][j] = mdcKalTrackRoot->
getZErrorE( i, j );
131 zerror_mu[i][j] = mdcKalTrackRoot->
getZErrorMu( i, j );
132 zerror_k[i][j] = mdcKalTrackRoot->
getZErrorK( i, j );
133 zerror_p[i][j] = mdcKalTrackRoot->
getZErrorP( i, j );
134
135 zerror[j][i] = zerror[i][j];
136 zerror_e[j][i] = zerror_e[i][j];
137 zerror_mu[j][i] = zerror_mu[i][j];
138 zerror_k[j][i] = zerror_k[i][j];
139 zerror_p[j][i] = zerror_p[i][j];
140
141 ferror[i][j] = mdcKalTrackRoot->
getFError( i, j );
142 ferror_e[i][j] = mdcKalTrackRoot->
getFErrorE( i, j );
143 ferror_mu[i][j] = mdcKalTrackRoot->
getFErrorMu( i, j );
144 ferror_k[i][j] = mdcKalTrackRoot->
getFErrorK( i, j );
145 ferror_p[i][j] = mdcKalTrackRoot->
getFErrorP( i, j );
146
147 ferror[j][i] = ferror[i][j];
148 ferror_e[j][i] = ferror_e[i][j];
149 ferror_mu[j][i] = ferror_mu[i][j];
150 ferror_k[j][i] = ferror_k[i][j];
151 ferror_p[j][i] = ferror_p[i][j];
152 }
153 }
154
155 double dr = zhelix[0];
156 double phi0 = zhelix[1];
157 double kappa = zhelix[2];
158 double dz = zhelix[3];
159 double tanl = zhelix[4];
160 poca[0] = dr *
cos( phi0 );
161 poca[1] = dr *
sin( phi0 );
162 poca[2] = dz;
163
164 dr = zhelix_e[0];
165 phi0 = zhelix_e[1];
166 kappa = zhelix_e[2];
167 dz = zhelix_e[3];
168 tanl = zhelix_e[4];
169 poca_e[0] = dr *
cos( phi0 );
170 poca_e[1] = dr *
sin( phi0 );
171 poca_e[2] = dz;
172
173 dr = zhelix_mu[0];
174 phi0 = zhelix_mu[1];
175 kappa = zhelix_mu[2];
176 dz = zhelix_mu[3];
177 tanl = zhelix_mu[4];
178 poca_mu[0] = dr *
cos( phi0 );
179 poca_mu[1] = dr *
sin( phi0 );
180 poca_mu[2] = dz;
181
182 dr = zhelix_k[0];
183 phi0 = zhelix_k[1];
184 kappa = zhelix_k[2];
185 dz = zhelix_k[3];
186 tanl = zhelix_k[4];
187 poca_k[0] = dr *
cos( phi0 );
188 poca_k[1] = dr *
sin( phi0 );
189 poca_k[2] = dz;
190
191 dr = zhelix_p[0];
192 phi0 = zhelix_p[1];
193 kappa = zhelix_p[2];
194 dz = zhelix_p[3];
195 tanl = zhelix_p[4];
196 poca_p[0] = dr *
cos( phi0 );
197 poca_p[1] = dr *
sin( phi0 );
198 poca_p[2] = dz;
199
200 log << MSG::DEBUG << "T to DST, zhelix: " << zhelix << endmsg;
201 log << MSG::DEBUG << "T to DST, zerror: " << zerror << endmsg;
202
203 zhelixs.push_back( zhelix_e );
204 zhelixs.push_back( zhelix_mu );
205 zhelixs.push_back( zhelix );
206 zhelixs.push_back( zhelix_k );
207 zhelixs.push_back( zhelix_p );
208 zerrors.push_back( zerror_e );
209 zerrors.push_back( zerror_mu );
210 zerrors.push_back( zerror );
211 zerrors.push_back( zerror_k );
212 zerrors.push_back( zerror_p );
213
214 fhelixs.push_back( fhelix_e );
215 fhelixs.push_back( fhelix_mu );
216 fhelixs.push_back( fhelix );
217 fhelixs.push_back( fhelix_k );
218 fhelixs.push_back( fhelix_p );
219 ferrors.push_back( ferror_e );
220 ferrors.push_back( ferror_mu );
221 ferrors.push_back( ferror );
222 ferrors.push_back( ferror_k );
223 ferrors.push_back( ferror_p );
224
225 pocas.push_back( poca_e );
226 pocas.push_back( poca_mu );
227 pocas.push_back( poca );
228 pocas.push_back( poca_k );
229 pocas.push_back( poca_p );
230
231 for ( int m = 0; m < 5; m++ )
232 {
233 int charge;
234 double pxy( 0. ), px( 0. ), py( 0. ), pz( 0. ), ptot( 0. ), dr( 0. ), phi0( 0. ),
235 kappa( 0. ), dz( 0. ), tanl( 0. ),
x( 0. ), y( 0. ), z( 0. ), vx0( 0. ), vy0( 0. ),
236 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
247 x = dr *
cos( phi0 );
248 y = dr *
sin( phi0 );
249 z = dz;
250
251
252
253 if ( kappa > 0.0000000001 ) charge = 1;
254 else if ( kappa < -0.0000000001 ) charge = -1;
255 else charge = 0;
256
257 if ( kappa != 0 ) pxy = 1.0 / fabs( kappa );
258 else pxy = 0;
259
260 px = pxy * ( -
sin( phi0 ) );
261 py = pxy *
cos( phi0 );
262 pz = pxy * tanl;
263 ptot = sqrt( px * px + py * py + pz * pz );
264
266 mdcKalTrackTds->
setPxy( pxy, m );
267 mdcKalTrackTds->
setPx( px, m );
268 mdcKalTrackTds->
setPy( py, m );
269 mdcKalTrackTds->
setPz( pz, m );
270 mdcKalTrackTds->
setP( ptot, m );
271 mdcKalTrackTds->
setTheta( acos( pz / ptot ), m );
272 mdcKalTrackTds->
setPhi( atan2( py, px ), m );
273 mdcKalTrackTds->
setX(
x, m );
274 mdcKalTrackTds->
setY( y, m );
275 mdcKalTrackTds->
setZ( z, m );
276 mdcKalTrackTds->
setR( sqrt(
x *
x + y * y ), m );
277
281 mdcKalTrackTds->
setNdf( mdcKalTrackRoot->
getNdf( m ), 0, m );
283 }
284
286
287 for ( int jj = 0; jj < 5; jj++ )
288 {
289 mdcKalTrackTds->
setZHelix( zhelixs[jj], jj );
290 mdcKalTrackTds->
setZError( zerrors[jj], jj );
291 mdcKalTrackTds->
setFHelix( fhelixs[jj], jj );
292 mdcKalTrackTds->
setFError( ferrors[jj], jj );
293 mdcKalTrackTds->
setPoca( pocas[jj], jj );
294 }
295
296 mdcKalTrackTdsCol->push_back( mdcKalTrackTds );
297 }
298
299 delete m_mdcKalTrackCol;
300 m_mdcKalTrackCol = 0;
301 return StatusCode::SUCCESS;
302}
HepGeom::Point3D< double > HepPoint3D
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