LISTSERV mailing list manager LISTSERV 16.5

Help for LCDET-SVN Archives


LCDET-SVN Archives

LCDET-SVN Archives


LCDET-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

LCDET-SVN Home

LCDET-SVN Home

LCDET-SVN  October 2015

LCDET-SVN October 2015

Subject:

r3684 - /projects/slic/trunk/src/MCParticleManager.cc

From:

[log in to unmask]

Reply-To:

Notification of commits to the lcdet svn repository <[log in to unmask]>

Date:

Tue, 13 Oct 2015 21:16:51 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (216 lines)

Author: [log in to unmask]
Date: Tue Oct 13 14:16:49 2015
New Revision: 3684

Log:
[SLIC-252] Make sure particles with gen status 0 are correctly handled; add additional sanity checks; minor change to debug output.

Modified:
    projects/slic/trunk/src/MCParticleManager.cc

Modified: projects/slic/trunk/src/MCParticleManager.cc
 =============================================================================
--- projects/slic/trunk/src/MCParticleManager.cc	(original)
+++ projects/slic/trunk/src/MCParticleManager.cc	Tue Oct 13 14:16:49 2015
@@ -13,7 +13,7 @@
 void MCParticleManager::generateEvent(LCCollectionVec* particles, G4Event* event) {
 
 #if SLIC_LOG
-    log() << LOG::head << LOG::debug << "generating event " << event->GetEventID() << " from " << particles->size() << " MCParticles" << LOG::done;
+    log() << LOG::debug << LOG::head << "generating event " << event->GetEventID() << " from " << particles->size() << " particles" << LOG::endl << LOG::done;
 #endif
 
     // Apply Z smearing to input particles.
@@ -38,25 +38,23 @@
 
         // Debug print information about the particle.
 #ifdef SLIC_LOG
-        log() <<  LOG::debug << "processing MCParticle " << i << LOG::done;
-        log() << LOG::debug
-                << "PDG: " << mcp->getPDG() << LOG::endl
-                << "gen status: " << mcp->getGeneratorStatus() << LOG::endl
-                << "sim status: " << mcp->getSimulatorStatus() << LOG::endl
-                << "energy: " << mcp->getEnergy() << LOG::endl
-                << "time: " << mcp->getTime() << LOG::endl
-                << "daughters: " << mcp->getDaughters().size() << LOG::endl
-                << "vertex: ( " << mcp->getVertex()[0] << " " << mcp->getVertex()[1] << " " << mcp->getVertex()[2] << " )" << LOG::endl
-                << "p: ( " << mcp->getMomentum()[0] << ", " << mcp->getMomentum()[1] << ", " << mcp->getMomentum()[2] << " )" << LOG::endl
-                << "charge: " << mcp->getCharge() << LOG::endl
-                << "mass: " << mcp->getMass() << LOG::endl
-                << "daughters: " << mcp->getDaughters().size() << LOG::endl
-                << "parents: " << mcp->getParents().size()
+        log() <<  LOG::debug << "processing particle " << i << LOG::endl
+                << "  PDG: " << mcp->getPDG() << LOG::endl
+                << "  gen status: " << mcp->getGeneratorStatus() << LOG::endl
+                << "  sim status: " << mcp->getSimulatorStatus() << LOG::endl
+                << "  energy: " << mcp->getEnergy() << LOG::endl
+                << "  time: " << mcp->getTime() << LOG::endl
+                << "  daughters: " << mcp->getDaughters().size() << LOG::endl
+                << "  vertex: ( " << mcp->getVertex()[0] << " " << mcp->getVertex()[1] << " " << mcp->getVertex()[2] << " )" << LOG::endl
+                << "  p: ( " << mcp->getMomentum()[0] << ", " << mcp->getMomentum()[1] << ", " << mcp->getMomentum()[2] << " )" << LOG::endl
+                << "  charge: " << mcp->getCharge() << LOG::endl
+                << "  mass: " << mcp->getMass() << LOG::endl
+                << "  daughters: " << mcp->getDaughters().size() << LOG::endl
+                << "  parents: " << mcp->getParents().size() << LOG::endl
                 << LOG::done;
-        log() << LOG::endl;
-#endif
-
-        // Only make vertices for particles without parents.
+#endif
+
+        // Only process particles without parents; daughters will be handled recursively.
         if (mcp->getParents().size() == 0) {
 
 #ifdef SLIC_LOG
@@ -64,41 +62,65 @@
 #endif
 
             // Create a new primary vertex.
-            G4PrimaryVertex* vertex = 0;
-
-            if (mcp->getGeneratorStatus() == 1 || mcp->getGeneratorStatus() == 2) {
-                vertex = createVertex(mcp);
+            G4PrimaryVertex* vertex = createVertex(mcp);
+
+            if (vertex == 0) {
+#ifdef SLIC_LOG
+                log() << LOG::debug << "no vertex created for particle " << i << LOG::done;
+#endif
             }
 
 #ifdef SLIC_LOG
             log() << LOG::debug << "creating primary for MCParticle " << i << LOG::done;
 #endif
 
-            // Create a primary particle and recursively create its daughters.
+            // Create a primary particle and recursively create primaries for its daughters.
             const std::set<G4PrimaryParticle*> primaries = createPrimary(0, mcp);
 
-            // Loop over returned set of primary particles.
-            for (std::set<G4PrimaryParticle*>::const_iterator it = primaries.begin(); it != primaries.end(); it++) {
-
-                // Is this a top-level particle with no daughters?
-                if (!MCParticleManager::isDaughter((*it), primaries)) {
-
-                    // Create a new vertex if necessary.
-                    if (vertex == 0) {
-                        // Create vertex by looking up MCParticle from the primary.
-                        vertex = createVertex(_mcpMap[(*it)]);
+            // Were any primaries created?
+            if (primaries.size() > 0) {
+
+                // Loop over returned set of primary particles.
+                for (std::set<G4PrimaryParticle*>::const_iterator it = primaries.begin(); it != primaries.end(); it++) {
+
+                    // Is this a top-level particle with no daughters?
+                    if (!MCParticleManager::isDaughter((*it), primaries)) {
+
+                        // Create a new vertex if necessary.
+                        if (vertex == 0) {
+#ifdef SLIC_LOG
+                            log() << "creating vertex from primary " << *it << LOG::done;
+#endif
+                            // Create vertex by looking up MCParticle from the primary.
+                            vertex = createVertex(_mcpMap[(*it)]);
+                        }
+
+                        // Add the primary particle to the vertex.
+#ifdef SLIC_LOG
+                        log() << "adding primary daughter particle " << *it << " to vertex" << LOG::done;
+#endif
+                        vertex->SetPrimary(*it);
                     }
-
-                    // Add the primary particle to the vertex.
-                    vertex->SetPrimary(*it);
+                }
+
+                // Add the vertex to the event.
+                event->AddPrimaryVertex(vertex);
+
+            } else {
+#ifdef SLIC_LOG
+                log() << LOG::warning << "skipping particle " << i << " with no primaries" << LOG::done;
+#endif
+                // No primaries created so this record and its daughters are skipped!
+                if (vertex != 0) {
+#ifdef SLIC_LOG
+                    log() << LOG::debug << "deleting empty vertex for particle " << i << LOG::done;
+#endif
+                    delete vertex;
                 }
             }
-
-            // Add the vertex to the event.
-            event->AddPrimaryVertex(vertex);
-        }
-#ifdef SLIC_LOG
-        log() << "-------------------------------------------------" << LOG::endl;
+        }
+#ifdef SLIC_LOG
+        log() << LOG::debug << LOG::endl << "-------------------------------------------------" << LOG::endl << LOG::done;
 #endif
     }
 
@@ -141,7 +163,7 @@
 
         // Map primary to MCParticle.
 #ifdef SLIC_LOG
-            log() << LOG::debug << "mapping MCParticle " << mcp << " to primary " << primary << LOG::done;
+            log() << LOG::debug << "mapping particle " << mcp << " to primary " << primary << LOG::done;
 #endif
         _primaryMap[mcp] = primary;
 
@@ -160,7 +182,7 @@
 
     for (int i = 0; i < mcp->getDaughters().size(); i++) {
 #ifdef SLIC_LOG
-        log() << LOG::debug << "creating primary for dau particle " << i << LOG::done;
+        log() << LOG::debug << "creating primary for daughter " << i << LOG::done;
 #endif
         std::set<G4PrimaryParticle*> daughters = createPrimary(primary, mcp->getDaughters()[i]);
 #ifdef SLIC_LOG
@@ -177,18 +199,23 @@
 
 G4PrimaryVertex* MCParticleManager::createVertex(MCParticle* mcp) {
 
-    // Get the particle's origin.
-    const double* particleVertex = mcp->getVertex();
-    G4ThreeVector particlePosition(particleVertex[0], particleVertex[1], particleVertex[2]);
-
-    // Get the particle's time.
-    G4double particleTime = mcp->getTime();
-
-    // Create a new vertex for this particle.
-#ifdef SLIC_LOG
-    log() << LOG::debug << "creating vertex at position " << particlePosition << " with time " << particleTime << LOG::done;
-#endif
-    G4PrimaryVertex* vertex = new G4PrimaryVertex(particlePosition, particleTime);
+    G4PrimaryVertex* vertex = 0;
+
+    if (mcp->getGeneratorStatus() == 1 || mcp->getGeneratorStatus() == 2) {
+
+        // Get the particle's origin.
+        const double* particleVertex = mcp->getVertex();
+        G4ThreeVector particlePosition(particleVertex[0], particleVertex[1], particleVertex[2]);
+
+        // Get the particle's time.
+        G4double particleTime = mcp->getTime();
+
+        // Create a new vertex for this particle.
+#ifdef SLIC_LOG
+        log() << LOG::debug << "creating vertex at position " << particlePosition << " with time " << particleTime << LOG::done;
+#endif
+        vertex = new G4PrimaryVertex(particlePosition, particleTime);
+    }
 
     return vertex;
 }

########################################################################
Use REPLY-ALL to reply to list

To unsubscribe from the LCDET-SVN list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCDET-SVN&A=1

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use