Main Page | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages

GLG4PrimaryGeneratorAction.hh

00001 // This file is part of the GenericLAND software library.
00002 // $Id: GLG4PrimaryGeneratorAction.hh,v 1.2 2004/12/22 12:42:57 GLG4sim Exp $
00003 //
00004 // new GLG4PrimaryGeneratorAction.hh by Glenn Horton-Smith, August 3-17, 2001
00005 
00006 #ifndef __GLG4PrimaryGeneratorAction_hh__
00007 #define __GLG4PrimaryGeneratorAction_hh__ 1
00008 ////////////////////////////////////////////////////////////////
00009 // GLG4PrimaryGeneratorAction
00010 ////////////////////////////////////////////////////////////////
00011 
00012 #include "G4VUserPrimaryGeneratorAction.hh"  // for user primary vertex gen.
00013 
00014 class GLG4PrimaryGeneratorMessenger;
00015 class GLG4DetectorConstruction;
00016 class G4Event;
00017 class G4Track;
00018 class G4String;
00019 class GLG4VPosGen;
00020 class GLG4VVertexGen;
00021 
00022 class GLG4PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction
00023 {
00024 public:
00025   GLG4PrimaryGeneratorAction(GLG4DetectorConstruction *argDC); 
00026   ~GLG4PrimaryGeneratorAction();
00027 
00028   void GeneratePrimaries(G4Event * argEvent); // generate primary particles
00029 
00030   void DeferTrackToLaterEvent(const G4Track * track); // postpone to later
00031 
00032   void NotifyTimeToNextStackedEvent( double t ); // note time to stacked evt
00033   
00034   double GetUniversalTime() { return myUniversalTime; }
00035   
00036   double GetUniversalTimeSincePriorEvent()
00037   { return myUniversalTimeSincePriorEvent; }
00038   
00039   int GetTypeOfCurrentEvent()
00040   { return myTypeOfCurrentEvent; }
00041   
00042   double GetEventRate(int i) { return myEventRate[i]; }
00043   void SetEventRate(int i, double r);
00044 
00045   int GetEventTriggerCondition(int iev) { return myEventTriggerCondition[iev];}
00046   void SetEventTriggerCondition(int iev, int itc);
00047 
00048   double GetEventWindow() { return myEventWindow; }
00049   void SetEventWindow(double argEventWindow);
00050   
00051   double GetChainClip() { return myChainClip; }
00052   void SetChainClip(double argChainClip);
00053   
00054   static G4String GetEventTypeName(int argEventType);
00055   
00056   static const char * GetPositionCodeName(int argPosCode)
00057    { return thePositionCodeNames[argPosCode]; }
00058   static const char * GetVertexCodeName(int argVertexCode)
00059    { return theVertexCodeNames[argVertexCode]; }  
00060   static int GetPositionCodeForEventType(int argEventType)
00061    { return theEventGeneratorCodes[argEventType].poscode; }
00062   static int GetVertexCodeForEventType(int argEventType)
00063    { return theEventGeneratorCodes[argEventType].vertexcode; }
00064   
00065   static GLG4VVertexGen * GetVertexGenerator(int i)
00066    { return theVertexGenerators[i]; }
00067   static GLG4VPosGen    * GetPositionGenerator(int i)
00068    { return thePositionGenerators[i]; }
00069 
00070   static GLG4PrimaryGeneratorAction* GetTheGLG4PrimaryGeneratorAction()
00071    { return theGLG4PrimaryGeneratorAction; }
00072 
00073   enum { kGunEvtIndex=3, kGunPosIndex=9, kGunVtxIndex=17,
00074          kDelayEvtIndex=51, kDelayPosIndex=12, kDelayVtxIndex=19 };
00075   enum { theNumEventTypes = 52,
00076          theNumPosGenCodes = 13,
00077          theNumVertexGenCodes= 20 };
00078   enum { kGeneratorTriggerNormal=0, kGeneratorTriggerPileupOnly=1,
00079          kGeneratorTriggerDelay=2 };
00080 
00081 private:
00082   GLG4DetectorConstruction *myDetector;
00083   GLG4PrimaryGeneratorMessenger *myMessenger;
00084   
00085   double myUniversalTime;
00086   double myUniversalTimeSincePriorEvent;
00087   int    myTypeOfCurrentEvent;
00088   double myEventWindow;
00089   double myChainClip;
00090   double myEventRate[theNumEventTypes];
00091   int    myEventTriggerCondition[theNumEventTypes];
00092   double myTimeToNextEvent[theNumEventTypes];
00093 
00094   static GLG4VVertexGen * theVertexGenerators[theNumVertexGenCodes];
00095   static GLG4VPosGen    * thePositionGenerators[theNumPosGenCodes];
00096   static const char * theVertexCodeNames[theNumVertexGenCodes];
00097   static const char * thePositionCodeNames[theNumPosGenCodes];
00098   typedef struct codepair_s { int poscode, vertexcode; } codepair_t;
00099   static codepair_t theEventGeneratorCodes[theNumEventTypes];
00100   static GLG4PrimaryGeneratorAction* theGLG4PrimaryGeneratorAction;
00101 };
00102 
00103 #endif

Generated on Fri Jul 6 13:31:46 2007 for GLG4sim by  doxygen 1.3.9.1