Print

Print


Commit in slic/src on MAIN
StdHepToLcioConvertor.cc+39-141.25 -> 1.26
Added trap for out of range ihep.

slic/src
StdHepToLcioConvertor.cc 1.25 -> 1.26
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
   }
 };
CVSspam 0.2.8