2#define ExtTrackCnv_CXX 1
4#include "GaudiKernel/DataObject.h"
5#include "GaudiKernel/MsgStream.h"
6#include "GaudiKernel/ObjectVector.h"
8#include "TClonesArray.h"
10#include "EventModel/EventModel.h"
12#include "DstEvent/DstEvent.h"
13#include "DstEvent/DstExtTrack.h"
15#include "RootEventData/TDstEvent.h"
16#include "RootEventData/TExtTrack.h"
18#include "RootCnvSvc/Dst/DstCnv.h"
19#include "RootCnvSvc/Dst/ExtTrackCnv.h"
20#include "RootCnvSvc/RootAddress.h"
22#include "CLHEP/Matrix/SymMatrix.h"
23#include "CLHEP/Matrix/Vector.h"
24#include "CLHEP/Vector/ThreeVector.h"
30using CLHEP::Hep3Vector;
31using CLHEP::HepSymMatrix;
40 MsgStream log(
msgSvc(),
"ExtTrackCnv" );
52 MsgStream log(
msgSvc(),
"ExtTrackCnv" );
53 log << MSG::DEBUG <<
"ExtTrackCnv::TObjectToDataObject" << endmsg;
54 StatusCode sc = StatusCode::SUCCESS;
58 refpObject = extTrackTdsCol;
61 if ( !m_extTrackCol )
return sc;
62 TIter extTrackIter( m_extTrackCol );
64 while ( ( extTrackRoot = (
TExtTrack*)extTrackIter.Next() ) )
75 Hep3Vector tof1p( p1x, p1y, p1z );
76 Hep3Vector tof1m( m1x, m1y, m1z );
81 double tof1 = extTrackRoot->
GetTof1();
87 HepSymMatrix e1m( 6 );
88 for (
int i = 0; i < 6; i++ )
98 Hep3Vector tof2p( p2x, p2y, p2z );
99 Hep3Vector tof2m( m2x, m2y, m2z );
103 double tof2 = extTrackRoot->
GetTof2();
109 HepSymMatrix e2m( 6 );
110 for (
int i = 0; i < 6; i++ )
120 Hep3Vector Ep( pEx, pEy, pEz );
121 Hep3Vector Em( mEx, mEy, mEz );
127 HepSymMatrix eEm( 6 );
128 for (
int i = 0; i < 6; i++ )
129 for (
int j = 0; j < 6; j++ ) eEm[i][j] = extTrackRoot->
GetEmcErrorMatrix( i, j );
130 double emcPath = extTrackRoot->
emcPath();
139 Hep3Vector Mp( pMx, pMy, pMz );
140 Hep3Vector Mm( mMx, mMy, mMz );
149 HepSymMatrix eMm( 6 );
150 for (
int i = 0; i < 6; i++ )
151 for (
int j = 0; j < 6; j++ ) eMm[i][j] = extTrackRoot->
GetMucErrorMatrix( i, j );
154 m_common.m_rootExtTrackMap[extTrackRoot] = extTrackTds;
195 extTrackTds->
SetTof1Data( tof1p, tof1m, v1s, v1n, tof1, tof1path, e1m, z1, t1, x1, y1 );
196 extTrackTds->
SetTof2Data( tof2p, tof2m, v2s, v2n, tof2, tof2path, e2m, z2, t2, x2, y2 );
197 extTrackTds->
SetEmcData( Ep, Em, vEs, vEn, theta, phi, eEm );
199 extTrackTds->
SetMucData( Mp, Mm, vMs, vMn, eMm, zM, tM, xM, yM );
201 extTrackTdsCol->push_back( extTrackTds );
207 delete m_extTrackCol;
209 return StatusCode::SUCCESS;
214 MsgStream log(
msgSvc(),
"ExtTrackCnv" );
215 log << MSG::DEBUG <<
"ExtTrackCnv::DataObjectToTObject" << endmsg;
216 StatusCode sc = StatusCode::SUCCESS;
219 if ( !extTrackColTds )
221 log << MSG::ERROR <<
"Could not downcast to DstExtTrackCol" << endmsg;
222 return StatusCode::FAILURE;
229 log << MSG::ERROR <<
"Could not get ReconEvent in TDS " << endmsg;
230 return StatusCode::FAILURE;
235 { log << MSG::ERROR <<
"ExtTrackCnv:Could not downcast to TDS Dst Event" << endmsg; }
236 IOpaqueAddress* addr;
238 m_cnvSvc->getDstCnv()->createRep( evt, addr );
243 if ( !m_extTrackCol )
return sc;
247 DstExtTrackCol::const_iterator extTrackTds;
249 for ( extTrackTds = extTrackColTds->begin(); extTrackTds != extTrackColTds->end();
253 Int_t trackId = ( *extTrackTds )->GetTrackId();
255 Double_t p1x = ( *extTrackTds )->tof1Position().x();
256 Double_t p1y = ( *extTrackTds )->tof1Position().y();
257 Double_t p1z = ( *extTrackTds )->tof1Position().z();
258 Double_t m1x = ( *extTrackTds )->tof1Momentum().x();
259 Double_t m1y = ( *extTrackTds )->tof1Momentum().y();
260 Double_t m1z = ( *extTrackTds )->tof1Momentum().z();
262 TString v1s = ( *extTrackTds )->tof1VolumeName();
263 Int_t v1n = ( *extTrackTds )->tof1VolumeNumber();
264 Double_t tof1 = ( *extTrackTds )->tof1();
265 Double_t tof1p = ( *extTrackTds )->tof1Path();
266 Double_t z1 = ( *extTrackTds )->tof1PosSigmaAlongZ();
267 Double_t t1 = ( *extTrackTds )->tof1PosSigmaAlongT();
268 Double_t x1 = ( *extTrackTds )->tof1PosSigmaAlongX();
269 Double_t y1 = ( *extTrackTds )->tof1PosSigmaAlongY();
271 HepSymMatrix e1mTds = ( *extTrackTds )->tof1ErrorMatrix();
272 for (
int i = 0; i < 6; i++ )
273 for (
int j = 0; j < 6; j++ ) e1m[i][j] = e1mTds[i][j];
276 Double_t p2x = ( *extTrackTds )->tof2Position().x();
277 Double_t p2y = ( *extTrackTds )->tof2Position().y();
278 Double_t p2z = ( *extTrackTds )->tof2Position().z();
279 Double_t m2x = ( *extTrackTds )->tof2Momentum().x();
280 Double_t m2y = ( *extTrackTds )->tof2Momentum().y();
281 Double_t m2z = ( *extTrackTds )->tof2Momentum().z();
283 TString v2s = ( *extTrackTds )->tof2VolumeName();
284 Int_t v2n = ( *extTrackTds )->tof2VolumeNumber();
285 Double_t tof2 = ( *extTrackTds )->tof2();
286 Double_t tof2p = ( *extTrackTds )->tof2Path();
287 Double_t z2 = ( *extTrackTds )->tof2PosSigmaAlongZ();
288 Double_t t2 = ( *extTrackTds )->tof2PosSigmaAlongT();
289 Double_t x2 = ( *extTrackTds )->tof2PosSigmaAlongX();
290 Double_t y2 = ( *extTrackTds )->tof2PosSigmaAlongY();
292 HepSymMatrix e2mTds = ( *extTrackTds )->tof2ErrorMatrix();
293 for (
int i = 0; i < 6; i++ )
294 for (
int j = 0; j < 6; j++ ) e2m[i][j] = e2mTds[i][j];
296 Double_t pEx = ( *extTrackTds )->emcPosition().x();
297 Double_t pEy = ( *extTrackTds )->emcPosition().y();
298 Double_t pEz = ( *extTrackTds )->emcPosition().z();
299 Double_t mEx = ( *extTrackTds )->emcMomentum().x();
300 Double_t mEy = ( *extTrackTds )->emcMomentum().y();
301 Double_t mEz = ( *extTrackTds )->emcMomentum().z();
303 TString vEs = ( *extTrackTds )->emcVolumeName();
304 Int_t vEn = ( *extTrackTds )->emcVolumeNumber();
306 Double_t theta = ( *extTrackTds )->emcPosSigmaAlongTheta();
307 Double_t phi = ( *extTrackTds )->emcPosSigmaAlongPhi();
310 HepSymMatrix eEmTds = ( *extTrackTds )->emcErrorMatrix();
311 for (
int i = 0; i < 6; i++ )
312 for (
int j = 0; j < 6; j++ ) eEm[i][j] = eEmTds[i][j];
313 Double_t emcPath = ( *extTrackTds )->emcPath();
316 Double_t pMx = ( *extTrackTds )->mucPosition().x();
317 Double_t pMy = ( *extTrackTds )->mucPosition().y();
318 Double_t pMz = ( *extTrackTds )->mucPosition().z();
319 Double_t mMx = ( *extTrackTds )->mucMomentum().x();
320 Double_t mMy = ( *extTrackTds )->mucMomentum().y();
321 Double_t mMz = ( *extTrackTds )->mucMomentum().z();
323 TString vMs = ( *extTrackTds )->mucVolumeName();
324 Int_t vMn = ( *extTrackTds )->mucVolumeNumber();
326 Double_t zM = ( *extTrackTds )->mucPosSigmaAlongZ();
327 Double_t tM = ( *extTrackTds )->mucPosSigmaAlongT();
328 Double_t xM = ( *extTrackTds )->mucPosSigmaAlongX();
329 Double_t yM = ( *extTrackTds )->mucPosSigmaAlongY();
332 HepSymMatrix eMmTds = ( *extTrackTds )->mucErrorMatrix();
333 for (
int i = 0; i < 6; i++ )
334 for (
int j = 0; j < 6; j++ ) eMm[i][j] = eMmTds[i][j];
447 return StatusCode::SUCCESS;
ObjectVector< DstExtTrack > DstExtTrackCol
void SetTof1Data(Hep3Vector aPosition, Hep3Vector aMomentum, string aVolumeName, int aVolumeNumber, double aTof, double aPath, HepSymMatrix aErrorMatrix, double aZSigma=0., double aTSigma=0., double aXSigma=0., double aYSigma=0.)
void SetTrackId(int trackId)
void SetEmcData(Hep3Vector aPosition, Hep3Vector aMomentum, string aVolumeName, int aVolumeNumber, double aThetaSigma, double aPhiSigma, HepSymMatrix aErrorMatrix)
void SetTof2Data(Hep3Vector aPosition, Hep3Vector aMomentum, string aVolumeName, int aVolumeNumber, double aTof, double aPath, HepSymMatrix aErrorMatrix, double aZSigma=0., double aTSigma=0., double aXSigma=0., double aYSigma=0.)
void SetMucData(Hep3Vector aPosition, Hep3Vector aMomentum, string aVolumeName, int aVolumeNumber, HepSymMatrix aErrorMatrix, double aZSigma=0., double aTSigma=0., double aXSigma=0., double aYSigma=0.)
void SetEmcPath(double path)
ExtTrackCnv(ISvcLocator *svc)
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
static const CLID & classID()
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
Definition of a Root address, derived from IOpaqueAddress.
IDataProviderSvc * m_eds
pointer to eventdataservice
std::vector< void * > m_adresses
each converter knows the corresponding adresses
std::string m_rootBranchname
root branchname (may be concatenated of severals)
RootEventBaseCnv(const CLID &clid, ISvcLocator *svc)
void addExtTrack(TExtTrack *Track)
Add a ExtTrack into the Ext Data collection.
void clearExtTrackCol()
clear the whole array
const TObjArray * getExtTrackCol() const
retrieve the whole TObjArray of Ext Data
Double_t GetTof1PosSigmaAlongZ() const
void SetTof2MomentumY(const Double_t Tof2MomentumY)
Double_t GetMucPositionX() const
Double_t GetMucPosSigmaAlongT() const
Double_t GetMucPositionY() const
void SetTof2(const Double_t Tof2)
Double_t GetTof1Path() const
Double_t GetTof1PosSigmaAlongY() const
void SetTof1PosSigmaAlongZ(const Double_t Tof1PosSigmaAlongZ)
void SetTof1PosSigmaAlongX(const Double_t Tof1PosSigmaAlongX)
Double_t GetEmcPositionX() const
void SetTof2MomentumX(const Double_t Tof2MomentumX)
Double_t GetEmcPositionZ() const
void SetEmcMomentumY(const Double_t EmcMomentumY)
Double_t GetMucPosSigmaAlongZ() const
void SetMucMomentumY(const Double_t MucMomentumY)
void SetMucVolumeName(const TString MucVolumeName)
void SetTof1MomentumX(const Double_t Tof1MomentumX)
Int_t GetTof1VolumeNumber() const
void SetEmcVolumeNumber(const Int_t EmcVolumeNumber)
Int_t GetMucVolumeNumber() const
void SetTof1VolumeNumber(const Int_t Tof1VolumeNumber)
void SetTof1PositionY(const Double_t Tof1PositionY)
Int_t GetEmcVolumeNumber() const
Double_t GetTof2PositionZ() const
Double_t GetEmcMomentumX() const
void SetTof1PosSigmaAlongY(const Double_t Tof1PosSigmaAlongY)
Double_t GetTof2MomentumY() const
Double_t GetTof2PosSigmaAlongT() const
Double_t GetMucMomentumZ() const
void SetEmcErrorMatrix(const Double_t EmcErrorMatrix[6][6])
Double_t GetTof2PosSigmaAlongZ() const
void SetEmcPositionX(const Double_t EmcPositionX)
void SetMucVolumeNumber(const Int_t MucVolumeNumber)
void SetMucErrorMatrix(const Double_t MucErrorMatrix[6][6])
void SetTof1PosSigmaAlongT(const Double_t Tof1PosSigmaAlongT)
void SetMucPosSigmaAlongX(const Double_t MucPosSigmaAlongX)
Int_t GetTof2VolumeNumber() const
void SetEmcMomentumZ(const Double_t EmcMomentumZ)
void SetTof1Path(const Double_t Tof1Path)
void SetEmcMomentumX(const Double_t EmcMomentumX)
Double_t GetTof1PositionY() const
void SetTof2VolumeName(const TString Tof2VolumeName)
void SetTof1(const Double_t Tof1)
void SetTof2PosSigmaAlongY(const Double_t Tof2PosSigmaAlongY)
void SetMucPosSigmaAlongY(const Double_t MucPosSigmaAlongY)
void SetTof2ErrorMatrix(const Double_t Tof2ErrorMatrix[6][6])
void SetMucPositionX(const Double_t MucPositionX)
Double_t GetEmcMomentumY() const
Double_t GetTof1MomentumX() const
Double_t GetTof2Path() const
Double_t GetEmcPositionY() const
Double_t GetEmcPosSigmaAlongPhi() const
TString GetTof1VolumeName() const
void SetTof2Path(const Double_t Tof2Path)
void SetTof2PosSigmaAlongZ(const Double_t Tof2PosSigmaAlongZ)
void SetMucPosSigmaAlongT(const Double_t MucPosSigmaAlongT)
void SetMucMomentumZ(const Double_t MucMomentumZ)
Double_t GetMucMomentumX() const
Double_t GetEmcErrorMatrix(Int_t i, Int_t j) const
Double_t GetTof1ErrorMatrix(Int_t i, Int_t j) const
Double_t GetTof2PosSigmaAlongX() const
void SetTof1PositionZ(const Double_t Tof1PositionZ)
void SetMucPosSigmaAlongZ(const Double_t MucPosSigmaAlongZ)
Double_t GetEmcMomentumZ() const
void SetTof2PosSigmaAlongX(const Double_t Tof2PosSigmaAlongX)
Double_t GetTof2MomentumX() const
void SetTrackId(const Int_t trackId)
Double_t GetEmcPosSigmaAlongTheta() const
Double_t GetTof2PositionY() const
TString GetTof2VolumeName() const
Double_t GetTof1PosSigmaAlongX() const
void SetEmcPositionZ(const Double_t EmcPositionZ)
Double_t GetMucPosSigmaAlongX() const
void SetTof2PositionZ(const Double_t Tof2PositionZ)
void SetTof1PositionX(const Double_t Tof1PositionX)
void SetTof2PosSigmaAlongT(const Double_t Tof2PosSigmaAlongT)
Double_t GetMucMomentumY() const
Double_t GetTof2MomentumZ() const
void SetTof2VolumeNumber(const Int_t Tof2VolumeNumber)
void SetEmcVolumeName(const TString EmcVolumeName)
TString GetEmcVolumeName() const
void SetTof1MomentumY(const Double_t Tof1MomentumY)
void SetTof2PositionY(const Double_t Tof2PositionY)
void SetMucMomentumX(const Double_t MucMomentumX)
void SetMucPositionZ(const Double_t MucPositionZ)
Double_t GetTof2ErrorMatrix(Int_t i, Int_t j) const
void SetEmcPath(Double_t path)
Double_t GetMucErrorMatrix(Int_t i, Int_t j) const
TString GetMucVolumeName() const
Double_t GetTof1MomentumZ() const
Double_t GetTof2PositionX() const
void SetTof1ErrorMatrix(const Double_t Tof1ErrorMatrix[6][6])
void SetTof2MomentumZ(const Double_t Tof2MomentumZ)
Double_t GetTof1PosSigmaAlongT() const
Double_t GetTof1MomentumY() const
void SetTof1MomentumZ(const Double_t Tof1MomentumZ)
Double_t GetMucPosSigmaAlongY() const
void SetEmcPosSigmaAlongTheta(const Double_t EmcPosSigmaAlongTheta)
void SetTof2PositionX(const Double_t Tof2PositionX)
void SetTof1VolumeName(const TString Tof1VolumeName)
Double_t GetTof1PositionX() const
Double_t GetTof1PositionZ() const
void SetEmcPositionY(const Double_t EmcPositionY)
void SetMucPositionY(const Double_t MucPositionY)
void SetEmcPosSigmaAlongPhi(const Double_t EmcPosSigmaAlongPhi)
Double_t GetTof2PosSigmaAlongY() const
Double_t GetMucPositionZ() const
_EXTERN_ std::string Event