37 MsgStream log(
msgSvc(),
"McParticleCnv" );
38 log << MSG::DEBUG <<
"McParticleCnv::TObjectToDataObject" << endmsg;
39 StatusCode sc = StatusCode::SUCCESS;
43 refpObject = mcParticleTdsCol;
46 if ( !m_mcParticleCol )
return sc;
47 TIter mcParticleIter( m_mcParticleCol );
53 while ( ( mcParticleRoot = (
TMcParticle*)mcParticleIter.Next() ) )
82 HepLorentzVector initialMomentum( xInitialMomentum, yInitialMomentum, zInitialMomentum,
84 HepLorentzVector initialPosition( xInitialPosition, yInitialPosition, zInitialPosition,
88 HepLorentzVector finalPosition( xFinalPosition, yFinalPosition, zFinalPosition,
94 mothers.push_back( mother );
98 m_common.m_rootMcParticleMap[mcParticleRoot] = mcParticleTds;
100 mcParticleTds->initialize( particleID, statusFlags, initialMomentum, initialPosition );
101 mcParticleTds->setTrackIndex( trackIndex );
102 mcParticleTds->addStatusFlag( statusFlags );
104 mcParticleTds->setVertexIndex0( vertexIndex0 );
105 mcParticleTds->setVertexIndex1( vertexIndex1 );
107 mcParticleTds->finalize( finalPosition );
109 mcParticleTdsCol->push_back( mcParticleTds );
113 McParticleCol::iterator
iter;
115 for (
iter = mcParticleTdsCol->begin();
iter != mcParticleTdsCol->end();
iter++, i++ )
118 if ( mothers[i] != -99 )
120 McParticleCol::iterator mcParticleTds;
121 for ( mcParticleTds = mcParticleTdsCol->begin();
122 mcParticleTds != mcParticleTdsCol->end(); mcParticleTds++ )
124 int trackIndex = ( *mcParticleTds )->trackIndex();
125 if ( trackIndex == mothers[i] )
127 ( *iter )->setMother( *mcParticleTds );
128 ( *mcParticleTds )->addDaughter( *
iter );
133 else { ( *iter )->setMother( *
iter ); }
136 delete m_mcParticleCol;
138 return StatusCode::SUCCESS;
143 MsgStream log(
msgSvc(),
"McParticleCnv" );
144 log << MSG::DEBUG <<
"McParticleCnv::DataObjectToTObject" << endmsg;
145 StatusCode sc = StatusCode::SUCCESS;
148 if ( !mcParticleCnvTds )
150 log << MSG::ERROR <<
"Could not downcast to McParticleCol" << endmsg;
151 return StatusCode::FAILURE;
158 log << MSG::ERROR <<
"Could not get McEvent in TDS " << endmsg;
159 return StatusCode::FAILURE;
163 { log << MSG::ERROR <<
"McParticleCnv:Could not downcast to TDS McEvent" << endmsg; }
164 IOpaqueAddress* addr;
166 m_cnvSvc->getMcCnv()->createRep( evt, addr );
170 if ( !m_mcParticleCol ) {
return sc; }
174 McParticleCol::const_iterator mcParticleTds;
176 for ( mcParticleTds = mcParticleCnvTds->begin(); mcParticleTds != mcParticleCnvTds->end();
179 Int_t particleID = ( *mcParticleTds )->particleProperty();
180 Int_t trackIndex = ( *mcParticleTds )->trackIndex();
182 Int_t vertexIndex0 = ( *mcParticleTds )->vertexIndex0();
183 Int_t vertexIndex1 = ( *mcParticleTds )->vertexIndex1();
184 Int_t statusFlags = ( *mcParticleTds )->statusFlags();
186 HepLorentzVector initialPosition = ( *mcParticleTds )->initialPosition();
187 HepLorentzVector finalPosition = ( *mcParticleTds )->finalPosition();
188 HepLorentzVector initialFourMomentum = ( *mcParticleTds )->initialFourMomentum();
195 if ( !( *mcParticleTds )->primaryParticle() )
196 mother = ( ( *mcParticleTds )->mother() ).trackIndex();
198 vector<Int_t> daughters;
199 SmartRefVector<McParticle> daughterList = ( *mcParticleTds )->daughterList();
201 for (
int iPar = 0; iPar < daughterList.size(); iPar++ )
204 daughters.push_back( daughterList[iPar]->trackIndex() );
256 return StatusCode::SUCCESS;
ObjectList< McParticle > McParticleCol
virtual StatusCode DataObjectToTObject(DataObject *obj, RootAddress *addr)
transformation to root
McParticleCnv(ISvcLocator *svc)
virtual StatusCode TObjectToDataObject(DataObject *&obj)
transformation from root
The Monte Carlo particle kinematics information.
void setInitialPositionT(Double_t positionT)
void setFinalPositionZ(Double_t positionZ)
void setStatusFlags(UInt_t statusFlags)
void setInitialPositionX(Double_t positionX)
void setFinalPositionY(Double_t positionY)
void setInitialPositionY(Double_t positionY)
void setInitialMomentumZ(Double_t momentumZ)
void setInitialPositionZ(Double_t positionZ)
void setVertexIndex1(Int_t vertexIndex1)
void setInitialMomentumX(Double_t momentumX)
vector< Int_t > getDaughters() const
void setFinalPositionT(Double_t positionT)
void setInitialMomentumE(Double_t momentumE)
void setVertexIndex0(Int_t vertexIndex0)
void setFinalPositionX(Double_t positionX)
void setInitialMomentumY(Double_t momentumY)
void setDaughters(vector< Int_t > &daughters)