Commit in slic on MAIN | |||
include/EventSourceManager.hh | +12 | -29 | 1.12 -> 1.13 |
/GeneratorMessenger.hh | +3 | -1 | 1.9 -> 1.10 |
/LcioMcpManager.hh | +4 | -4 | 1.54 -> 1.55 |
/PrimaryGeneratorAction.hh | +14 | -2 | 1.22 -> 1.23 |
src/EventAction.cc | +6 | -7 | 1.28 -> 1.29 |
/EventSourceManager.cc | +4 | -3 | 1.22 -> 1.23 |
/GeneratorMessenger.cc | +11 | -3 | 1.16 -> 1.17 |
/LcioManager.cc | +2 | -3 | 1.87 -> 1.88 |
/LcioMcpManager.cc | +8 | -8 | 1.70 -> 1.71 |
/PrimaryGeneratorAction.cc | +66 | -7 | 1.33 -> 1.34 |
/StdHepEventSource.cc | +6 | -8 | 1.7 -> 1.8 |
/StdHepToLcioConvertor.cc | +8 | -3 | 1.41 -> 1.42 |
+144 | -78 |
preliminary code for applying a Z spread to vertices and MCParticles; calculations based on code snippets from Mokka
diff -u -r1.12 -r1.13 --- EventSourceManager.hh 8 Dec 2009 01:04:52 -0000 1.12 +++ EventSourceManager.hh 4 Jul 2012 01:01:47 -0000 1.13 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/slic/include/EventSourceManager.hh,v 1.12 2009/12/08 01:04:52 jeremy Exp $
+// $Header: /cvs/lcd/slic/include/EventSourceManager.hh,v 1.13 2012/07/04 01:01:47 jeremy Exp $
#ifndef SLIC_EVENTSOURCEMANAGER_HH #define SLIC_EVENTSOURCEMANAGER_HH 1
@@ -26,9 +26,7 @@
*/ class EventSourceManager : public Module, public Singleton<EventSourceManager> {
-
public:
-
enum ESourceType { eUnknown = 0, eStdHep = 1,
@@ -36,75 +34,56 @@
eGPS, eParticleGun };
-
public:
-
virtual ~EventSourceManager();
-
EventSourceManager(); public:
-
void setSourceType(ESourceType est); void setSourceType(const std::string& s); ESourceType getCurrentSourceType(); ESourceType getSourceTypeFromFileExtension(const std::string& s);
-
const std::string& getCurrentSourceName(); const std::string& getSourceNameFromType( ESourceType egt ) const; ESourceType getSourceTypeFromName( const std::string& s ) const;
-
const std::string& getFilename(); void setFilename(const std::string& f);
-
void setupEventSource();
-
void resetCurrentEventSource();
-
void setSkipEvents(unsigned int s);
-
unsigned int getSkipEvents();
-
void dumpCurrentEvent();
-
void printNumEventsGenerated();
-
int getNumEventsGenerated();
-
void incrNumEventsGenerated();
-
void generate(G4Event* evt);
-
void setEventSource(EventSource* es);
-
void deleteCurrentEventSource();
-
EventSource* createEventSource(ESourceType st); EventSource* getCurrentSource();
-
void setupEventSource(ESourceType st); void setupEventSource(const std::string& s);
-
void beginEvent(const G4Event*); void endEvent(const G4Event*);
-
void beginRun(const G4Run*); void endRun(const G4Run*);
-
bool isEOF(); bool isNewSource(); bool isNewSource(ESourceType est); bool isNewFilename(); bool isFileSource();
-
EventSourceWithInputFile* getFileSource(); G4GeneralParticleSource* getGPS(); G4ParticleGun* getParticleGun();
-
double getLorentzTransformationAngle() { return m_lorentzTransformationAngle; }
-
void setLorentzTransformationAngle( const G4double lorentzTransformationAngle );
-
+ void setZSmearing(const G4double zSmearingParam) { + m_zSmearingParam = zSmearingParam; + G4cout << "Set m_zSmearingParam = " << m_zSmearingParam << G4endl; + } + G4double getZSmearing() { + return m_zSmearingParam; + }
public: virtual void GeneratePrimaryVertex(G4Event* evt);
@@ -143,7 +122,11 @@
// source type ESourceType m_sourceType;
+ // Lorentz transformation angle which will be applied to event.
G4double m_lorentzTransformationAngle;
+ + // Parameter which will be used to smear vertex Z position. + G4double m_zSmearingParam;
}; }
diff -u -r1.9 -r1.10 --- GeneratorMessenger.hh 10 Sep 2008 00:04:34 -0000 1.9 +++ GeneratorMessenger.hh 4 Jul 2012 01:01:47 -0000 1.10 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/slic/include/GeneratorMessenger.hh,v 1.9 2008/09/10 00:04:34 jeremy Exp $
+// $Header: /cvs/lcd/slic/include/GeneratorMessenger.hh,v 1.10 2012/07/04 01:01:47 jeremy Exp $
#ifndef SLIC_GENERATORMESSENGER_HH #define SLIC_GENERATORMESSENGER_HH 1
@@ -9,6 +9,7 @@
class G4UIcommand; class G4UIdirectory; class G4UIcmdWithAnInteger;
+class G4UIcmdWithADouble;
class G4UIcmdWithADoubleAndUnit; namespace slic
@@ -44,6 +45,7 @@
G4UIcommand* m_dumpCurrentEventCmd; G4UIcommand* m_printNumEventsGeneratedCmd; G4UIcmdWithADoubleAndUnit* m_setLorentzTransformationAngleCmd;
+ G4UIcmdWithADouble* m_setZSmearingParameterCmd;
}; }
diff -u -r1.54 -r1.55 --- LcioMcpManager.hh 26 Aug 2008 23:15:31 -0000 1.54 +++ LcioMcpManager.hh 4 Jul 2012 01:01:47 -0000 1.55 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/slic/include/LcioMcpManager.hh,v 1.54 2008/08/26 23:15:31 jeremy Exp $
+// $Header: /cvs/lcd/slic/include/LcioMcpManager.hh,v 1.55 2012/07/04 01:01:47 jeremy Exp $
#ifndef SLIC_LCIOMCPMANAGER_HH #define SLIC_LCIOMCPMANAGER_HH 1
@@ -118,14 +118,14 @@
int getMCParticleIndex( EVENT::LCCollection*, EVENT::MCParticle*);
+ // delete the initial collection + void deleteInitialMcpCollection(); +
private: // clear the maps void clearMaps();
- // delete the initial collection - void deleteInitialMcpCollection(); -
private: // current LCEvent
diff -u -r1.22 -r1.23 --- PrimaryGeneratorAction.hh 14 May 2008 03:24:11 -0000 1.22 +++ PrimaryGeneratorAction.hh 4 Jul 2012 01:01:47 -0000 1.23 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/slic/include/PrimaryGeneratorAction.hh,v 1.22 2008/05/14 03:24:11 jeremy Exp $
+// $Header: /cvs/lcd/slic/include/PrimaryGeneratorAction.hh,v 1.23 2012/07/04 01:01:47 jeremy Exp $
#ifndef SLIC_PRIMARYGENERATORACTION_HH #define SLIC_PRIMARYGENERATORACTION_HH 1
@@ -29,9 +29,21 @@
public: virtual void GeneratePrimaries(G4Event *anEvent);
- // from Mokka 06-06 PrimaryGeneratorAction
+ + /** + * Apply Lorentz transformation to event. The lorentz transformation + * is retrieved from the singleton EventSourceManager. + * @param[in] anEvent The current Geant4 event. + */
void applyLorentzTransformation(G4Event *anEvent);
+ /** + * Apply Z smearing to event. The Z spread parameter is retrieved + * from the singleton EventSourceManager. + * @param[in] anEvent The current Geant4 event. + */ + void zsmear(G4Event* anEvent); +
private: void printBeginEventMessage(G4Event* anEvent);
diff -u -r1.28 -r1.29 --- EventAction.cc 11 Feb 2011 23:32:24 -0000 1.28 +++ EventAction.cc 4 Jul 2012 01:01:48 -0000 1.29 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/slic/src/EventAction.cc,v 1.28 2011/02/11 23:32:24 jeremy Exp $
+// $Header: /cvs/lcd/slic/src/EventAction.cc,v 1.29 2012/07/04 01:01:48 jeremy Exp $
#include "EventAction.hh"
@@ -56,23 +56,22 @@
void EventAction::EndOfEventAction (const G4Event *anEvent) { // check aborted
- if (!SlicApplication::instance()->isAborting() ) { -
+ if (!SlicApplication::instance()->isAborting()) {
// LcioManager's action
- LcioManager::instance()->endEvent( anEvent );
+ LcioManager::instance()->endEvent(anEvent);
} // event source (generator) action
- EventSourceManager::instance()->endEvent( anEvent );
+ EventSourceManager::instance()->endEvent(anEvent);
// event timer stopEventTimer(); // debugger
- EventDebugger::instance()->endEvent( anEvent );
+ EventDebugger::instance()->endEvent(anEvent);
// end event mesg
- printEndEventMessage( anEvent );
+ printEndEventMessage(anEvent);
} void EventAction::printEndEventMessage(const G4Event *anEvent)
diff -u -r1.22 -r1.23 --- EventSourceManager.cc 31 Jan 2012 18:52:30 -0000 1.22 +++ EventSourceManager.cc 4 Jul 2012 01:01:48 -0000 1.23 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/slic/src/EventSourceManager.cc,v 1.22 2012/01/31 18:52:30 jeremy Exp $
+// $Header: /cvs/lcd/slic/src/EventSourceManager.cc,v 1.23 2012/07/04 01:01:48 jeremy Exp $
#include "EventSourceManager.hh" // slic
@@ -30,9 +30,10 @@
m_nskip(0), m_newSource(true), m_sourceType(eGPS),
- m_lorentzTransformationAngle(0.)
+ m_lorentzTransformationAngle(0.),
+ m_zSmearingParam(0.)
{
- // messenger
+ // messenger with generator command macro bindings
m_messenger = new GeneratorMessenger(); // Always create a ParticleGun generator.
diff -u -r1.16 -r1.17 --- GeneratorMessenger.cc 31 Jan 2012 18:52:30 -0000 1.16 +++ GeneratorMessenger.cc 4 Jul 2012 01:01:48 -0000 1.17 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/slic/src/GeneratorMessenger.cc,v 1.16 2012/01/31 18:52:30 jeremy Exp $
+// $Header: /cvs/lcd/slic/src/GeneratorMessenger.cc,v 1.17 2012/07/04 01:01:48 jeremy Exp $
#include "GeneratorMessenger.hh" // slic
@@ -12,6 +12,7 @@
#include "G4UIdirectory.hh" #include "G4UIcmdWithAnInteger.hh" #include "G4UIcmdWithADoubleAndUnit.hh"
+#include "G4UIcmdWithADouble.hh"
// clhep #include "CLHEP/Random/Random.h"
@@ -97,6 +98,9 @@
{ EventSourceManager::instance()->setLorentzTransformationAngle(G4UIcmdWithADoubleAndUnit::GetNewDoubleValue(newVals)); }
+ else if (cmd == m_setZSmearingParameterCmd) { + EventSourceManager::instance()->setZSmearing(G4UIcmdWithADouble::GetNewDoubleValue(newVals)); + }
else { G4Exception("", "", JustWarning, "Unknown command."); }
@@ -108,7 +112,7 @@
// generator dir m_generatorDir = new G4UIdirectory( "/generator/" );
- m_generatorDir->SetGuidance( "Event generation commands. [SLIC]" );
+ m_generatorDir->SetGuidance( "Event generation commands." );
// select m_selectCmd = new G4UIcommand( "/generator/select", this );
@@ -141,12 +145,16 @@
// random seed cmd m_randomSeedCmd = new G4UIcommand( "/random/seed", this );
- m_randomSeedCmd->SetGuidance( "Set random seed; no argument seeds with current time. [SLIC]" );
+ m_randomSeedCmd->SetGuidance( "Set random seed; no argument seeds with current time." );
p = new G4UIparameter( "seedValue", 'i', true ); m_randomSeedCmd->SetParameter( p ); // Lorentz transformation m_setLorentzTransformationAngleCmd = new G4UIcmdWithADoubleAndUnit("/generator/setLorentzTransformationAngle",this); m_setLorentzTransformationAngleCmd->SetGuidance( "Set the Lorentz transformation angle to boost generated events." );
+ + // Z smearing parameter. + m_setZSmearingParameterCmd = new G4UIcmdWithADouble("/generator/setZSmearingParameter", this); + m_setZSmearingParameterCmd->SetGuidance("Set the parameter for smearing vertex Z positions.");
} }
diff -u -r1.87 -r1.88 --- LcioManager.cc 31 Jan 2012 18:52:30 -0000 1.87 +++ LcioManager.cc 4 Jul 2012 01:01:48 -0000 1.88 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/slic/src/LcioManager.cc,v 1.87 2012/01/31 18:52:30 jeremy Exp $
+// $Header: /cvs/lcd/slic/src/LcioManager.cc,v 1.88 2012/07/04 01:01:48 jeremy Exp $
#include "LcioManager.hh" // slic
@@ -461,8 +461,7 @@
m_HCBuilder->createHCsFromG4Event( G4EventManager::GetEventManager()->GetNonconstCurrentEvent(), m_currentLCEvent ); }
- void LcioManager::reset() - {
+ void LcioManager::reset() {
// delete transient event container delete m_currentLCEvent; m_currentLCEvent = 0;
diff -u -r1.70 -r1.71 --- LcioMcpManager.cc 31 Jan 2012 18:52:30 -0000 1.70 +++ LcioMcpManager.cc 4 Jul 2012 01:01:48 -0000 1.71 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/slic/src/LcioMcpManager.cc,v 1.70 2012/01/31 18:52:30 jeremy Exp $
+// $Header: /cvs/lcd/slic/src/LcioMcpManager.cc,v 1.71 2012/07/04 01:01:48 jeremy Exp $
#include "LcioMcpManager.hh" // slic
@@ -183,16 +183,16 @@
{ LCCollection* mcpVec = getInitialMcpCollection();
- if ( 0 != mcpVec ) {
+ if (0 != mcpVec) {
delete mcpVec; } }
- void LcioMcpManager::reset() - { - // Initial MCParticle collection needs deletion if it wasn't added to the event. - if ( !writeInitialMCParticleCollection() ) { - deleteInitialMcpCollection();
+ void LcioMcpManager::reset() { + + // Initial MCParticle collection needs deletion if it wasn't added to the event. + if (!writeInitialMCParticleCollection()) { + deleteInitialMcpCollection();
} // Clear the map of MCParticle collections.
@@ -216,7 +216,7 @@
EVENT::LCCollection* LcioMcpManager::getInitialMcpCollection() {
- if ( !findMcpCollection("initial") ) {
+ if (!findMcpCollection("initial")) {
createMcpCollection("initial"); }
diff -u -r1.33 -r1.34 --- PrimaryGeneratorAction.cc 11 Feb 2011 23:32:24 -0000 1.33 +++ PrimaryGeneratorAction.cc 4 Jul 2012 01:01:48 -0000 1.34 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/slic/src/PrimaryGeneratorAction.cc,v 1.33 2011/02/11 23:32:24 jeremy Exp $
+// $Header: /cvs/lcd/slic/src/PrimaryGeneratorAction.cc,v 1.34 2012/07/04 01:01:48 jeremy Exp $
#include "PrimaryGeneratorAction.hh"
@@ -17,6 +17,7 @@
#include "EVENT/LCCollection.h" // geant4
+#include "G4Types.hh"
#include "G4StateManager.hh" namespace slic
@@ -32,18 +33,28 @@
{ EventSourceManager* mgr = EventSourceManager::instance();
- // print begin message - printBeginEventMessage( anEvent );
+ // Beginning of event message that prints the event number. + // This should show up as the first line in the log messages for this event. + printBeginEventMessage(anEvent); + + // State of MCP manager needs to be reset for new event. + // FIXME: This is also called in LcioManager::reset() but not working for some reason! + LcioMcpManager::instance()->reset();
- // needs to be called here for setup purposes rather than in EventAction
+ // Generator manager begin event hook.
mgr->beginEvent(anEvent);
- // delegate event generation to the manager
+ // Generate vertices using the manager.
mgr->GeneratePrimaryVertex(anEvent);
+ // Apply Lorentz transformation to event, used for non-zero beam crossing angle.
applyLorentzTransformation(anEvent);
- if ( mgr->isEOF() ) {
+ // Apply Z smearing to event vertices. + zsmear(anEvent); + + // If source has no more events then abort the run. + if (mgr->isEOF()) {
SlicApplication::instance()->setAborting(true); } }
@@ -95,7 +106,6 @@
// the position of the vertex is not transformed here }
- //FG: now we need to apply the same transformation to the MCParticles:
EVENT::LCCollection* col = LcioMcpManager::instance()->getInitialMcpCollection(); if( col !=0 )
@@ -126,4 +136,53 @@
} } }
+ + /** + * Apply a Z smear to the position of every G4PrimaryVertex in an event. + */ + void PrimaryGeneratorAction::zsmear(G4Event* anEvent) { + + //G4cout << "zsmear" << G4endl; + + G4double zParam = EventSourceManager::instance()->getZSmearing(); + + //G4cout << "got zParam = " << zParam << G4endl; + + if (zParam == 0) return; + + // Generate smeared Z position. + double zspread = (zParam == 0.0 ? 0.0 : G4RandGauss::shoot(0, zParam/mm)); + + //G4cout << "zspread = " << zspread << G4endl; + + // Apply Z smearing to Geant4 event. + int nVertices = anEvent->GetNumberOfPrimaryVertex(); + //G4cout << "nVertices = " << nVertices << G4endl; + for (int iVertex = 0; iVertex < nVertices; iVertex++) { + G4PrimaryVertex* vertex = anEvent->GetPrimaryVertex(iVertex); + //G4cout << "G4.preZSmear = " << vertex->GetZ0() << G4endl; + vertex->SetPosition(vertex->GetX0(), vertex->GetY0(), vertex->GetZ0() + zspread); + //G4cout << "G4.postZSmear = " << vertex->GetZ0() << G4endl; + } + + // Apply Z smearing to MCParticle collection. + EVENT::LCCollection* mcpColl = LcioMcpManager::instance()->getInitialMcpCollection(); + if (mcpColl != 0) { + int nMCP = mcpColl->getNumberOfElements(); + //G4cout << "nMCP = " << nMCP << G4endl; + for (int i=0; i<nMCP; ++i) { + IMPL::MCParticleImpl* mcp = dynamic_cast<IMPL::MCParticleImpl*>(mcpColl->getElementAt(i)); + if (zParam != 0) { + const double* v = mcp->getVertex(); + double vPrime[3]; + vPrime[0] = v[0]; + vPrime[1] = v[1]; + vPrime[2] = v[2] + zspread; + //G4cout << "MCP.preZSmear = " << mcp->getVertex()[2] << G4endl; + mcp->setVertex(vPrime); + //G4cout << "MCP.postZSmear = " << mcp->getVertex()[2] << G4endl; + } + } + } + }
}
diff -u -r1.7 -r1.8 --- StdHepEventSource.cc 29 Aug 2008 00:42:49 -0000 1.7 +++ StdHepEventSource.cc 4 Jul 2012 01:01:48 -0000 1.8 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/slic/src/StdHepEventSource.cc,v 1.7 2008/08/29 00:42:49 jeremy Exp $
+// $Header: /cvs/lcd/slic/src/StdHepEventSource.cc,v 1.8 2012/07/04 01:01:48 jeremy Exp $
#include "StdHepEventSource.hh" // slic
@@ -20,10 +20,8 @@
void StdHepEventSource::generate(G4Event* anEvent) {
- LcioManager::instance() - ->getGenerator() - ->generatePrimaryVertexFromMcpCollection( LcioMcpManager::instance()->getInitialMcpCollection(), - anEvent );
+ LcioManager::instance()->getGenerator()->generatePrimaryVertexFromMcpCollection( + LcioMcpManager::instance()->getInitialMcpCollection(), anEvent);
} // open the current file
@@ -45,7 +43,7 @@
{ m_loader->readNextEvent();
- if ( m_loader->isEndOfInput() ) {
+ if (m_loader->isEndOfInput()) {
m_eof = true; } }
@@ -82,10 +80,10 @@
EventSourceWithInputFile::beginEvent(anEvent); // not EOF?
- if ( !isEOF() ) {
+ if (!isEOF()) {
// set convertor's coll
- m_convertor->setCurrentMcpCollection( LcioMcpManager::instance()->getInitialMcpCollection() );
+ m_convertor->setCurrentMcpCollection(LcioMcpManager::instance()->getInitialMcpCollection());
// run convertor m_convertor->fillCurrentMcpCollectionFromStdHep();
diff -u -r1.41 -r1.42 --- StdHepToLcioConvertor.cc 31 Jan 2012 18:52:30 -0000 1.41 +++ StdHepToLcioConvertor.cc 4 Jul 2012 01:01:48 -0000 1.42 @@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/slic/src/StdHepToLcioConvertor.cc,v 1.41 2012/01/31 18:52:30 jeremy Exp $
+// $Header: /cvs/lcd/slic/src/StdHepToLcioConvertor.cc,v 1.42 2012/07/04 01:01:48 jeremy Exp $
#include "StdHepToLcioConvertor.hh" // slic
@@ -55,12 +55,16 @@
void StdHepToLcioConvertor::fillCurrentMcpCollectionFromStdHep() {
+ // Reset the MCParticle list. + //m_currentMcpColl->clear(); + //G4cout << "m_currentMcpColl.size =" << m_currentMcpColl->getNumberOfElements() << G4endl; +
#ifdef SLIC_LOG log() << LOG::debug << "********** Creating LCIO MCParticle Collection from StdHep **********" << LOG::done; #endif
- assert( m_reader ); - assert( m_currentMcpColl );
+ //assert( m_reader ); + //assert( m_currentMcpColl );
#ifdef SLIC_LOG log() << LOG::debug << "******** loop 1: create MCParticles ********" << LOG::done;
@@ -68,6 +72,7 @@
/* Loop #1 : Create MCParticles with no parentage or daughter links. */ int ntracks = m_reader->nTracks();
+ //G4cout << "StdHep.ntracks = " << ntracks << G4endl;
for ( int ihep = 0; ihep < ntracks; ihep++ ) {
Use REPLY-ALL to reply to list
To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1