slic/src
diff -u -r1.25 -r1.26
--- StdHepToLcioConvertor.cc 7 Oct 2005 21:08:20 -0000 1.25
+++ StdHepToLcioConvertor.cc 12 Oct 2005 17:22:39 -0000 1.26
@@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/slic/src/StdHepToLcioConvertor.cc,v 1.25 2005/10/07 21:08:20 jeremy Exp $
+// $Header: /cvs/lcd/slic/src/StdHepToLcioConvertor.cc,v 1.26 2005/10/12 17:22:39 jeremy Exp $
#include "StdHepToLcioConvertor.hh"
// slic
@@ -88,6 +88,8 @@
}
#endif
+ // FIXME: First loop should not set parentage. Add additional loop to do this.
+
// second loop to set daughter links
for ( int ihep = 0;
ihep < ntracks;
@@ -123,11 +125,6 @@
}
#endif
- // setup reader if null
- if ( rdr == 0 ) {
- rdr = m_reader;
- }
-
// setup mcpColl if null
if ( mcpColl == 0 ) {
mcpColl = m_currentMcpColl;
@@ -136,9 +133,6 @@
// new MCP
MCParticleImpl* mcp = new MCParticleImpl();
- // must have reader
- assert( rdr );
-
// PDG
int pdgid = rdr->pid( ihep );
mcp->setPDG(pdgid);
@@ -218,6 +212,12 @@
// util functions
void StdHepToLcioConvertor::setupParents( int ihep, IMPL::MCParticleImpl* mcp, lStdHep* rdr, EVENT::LCCollection* mcpColl)
{
+#ifdef SLIC_VERBOSE
+ if ( verbose() > 3 ) {
+ std::cerr << "StdHepToLcioConverter::setupParents" << std::endl;
+ }
+#endif
+
// setup rdr ptr
if ( rdr == 0 ) {
rdr = m_reader;
@@ -411,10 +411,9 @@
i < numParents;
i++ ) {
- pMomMcp = dynamic_cast<MCParticleImpl*>
+ pMomMcp = static_cast<MCParticleImpl*>
( dauMcp->getParents()[i] );
-
if ( pMomMcp == parMcp ) {
bIsPar = true;
break;
@@ -433,7 +432,7 @@
if ( dauIdx > -1 ) {
MCParticleImpl* pDauMcp = 0;
- pDauMcp = dynamic_cast<MCParticleImpl*>
+ pDauMcp = static_cast<MCParticleImpl*>
( mcpColl->getElementAt( dauIdx ) );
assert( pDauMcp );
@@ -450,19 +449,45 @@
void StdHepToLcioConvertor::addMcpParent( int parIdx, IMPL::MCParticleImpl* mcp, EVENT::LCCollection* mcpColl)
{
+#ifdef SLIC_VERBOSE
+ if ( verbose() > 3 ) {
+ std::cout << "StdHepToLcioConverter::addMcpParent" << std::endl;
+ std::cout << "mcp: " << mcp << std::endl;
+ }
+#endif
assert( mcpColl );
assert( mcp );
if ( parIdx > -1 ) {
- MCParticleImpl* pParMcp = dynamic_cast<MCParticleImpl*>
+
+ /* If index is > size of collection, the particle's parent doesn't exist yet. We need to die! */
+ if ( parIdx > mcpColl->getNumberOfElements() ) {
+ std::cerr << "StdHepToLcioConverter::addMcpParent - Parent index is out of range <" << parIdx << ">" << std::endl;
+ G4Exception("ERROR: StdHep index (ihep) is out of range.");
+ }
+
+ MCParticleImpl* pParMcp = static_cast<MCParticleImpl*>
( mcpColl->getElementAt( parIdx ) );
+#ifdef SLIC_VERBOSE
+ if ( verbose() > 2 ) {
+ std::cout << "pParMcp: " << pParMcp << std::endl;
+ }
+#endif
+
if ( pParMcp ) {
mcp->addParent( pParMcp );
}
else {
- cerr << "WARNING: pParMcp or mcp is null!" << endl;
+ G4Exception("Failed to get parent particle from MCParticle collection.");
}
}
+#ifdef SLIC_VERBOSE
+ else {
+ if ( verbose() > 2 ) {
+ std::cout << "ignoring parIdx = -1 " << std::endl;
+ }
+ }
+#endif
}
};