182 lines
6.3 KiB
C++
182 lines
6.3 KiB
C++
//
|
|
// ********************************************************************
|
|
// * DISCLAIMER *
|
|
// * *
|
|
// * The following disclaimer summarizes all the specific disclaimers *
|
|
// * of contributors to this software. The specific disclaimers,which *
|
|
// * govern, are listed with their locations in: *
|
|
// * http://cern.ch/geant4/license *
|
|
// * *
|
|
// * Neither the authors of this software system, nor their employing *
|
|
// * institutes,nor the agencies providing financial support for this *
|
|
// * work make any representation or warranty, express or implied, *
|
|
// * regarding this software system or assume any liability for its *
|
|
// * use. *
|
|
// * *
|
|
// * This code implementation is the intellectual property of the *
|
|
// * GEANT4 collaboration. *
|
|
// * By copying, distributing or modifying the Program (or any work *
|
|
// * based on the Program) you indicate your acceptance of this *
|
|
// * statement, and all its terms. *
|
|
// ********************************************************************
|
|
//
|
|
//
|
|
// $Id: G4GlobalFastSimulationManager.hh,v 1.9 2002/11/02 00:10:34 mverderi Exp $
|
|
// GEANT4 tag $Name: geant4-07-00-cand-01 $
|
|
//
|
|
//
|
|
//---------------------------------------------------------------
|
|
//
|
|
// G4GlobalFastSimulationManager.hh
|
|
//
|
|
// Description:
|
|
// A singleton class which manages the Fast Simulation managers
|
|
// attached to envelopes.
|
|
//
|
|
// History:
|
|
// June 98: Verderi && MoraDeFreitas - "G4ParallelWorld" becomes
|
|
// "G4FlavoredParallelWorld"; some method name changes;
|
|
// GetFlavoredWorldForThis now returns a
|
|
// G4FlavoredParallelWorld pointer.
|
|
// Feb 98: Verderi && MoraDeFreitas - First Implementation.
|
|
//
|
|
//---------------------------------------------------------------
|
|
|
|
#ifndef G4GlobalFastSimulationManager_hh
|
|
#define G4GlobalFastSimulationManager_hh
|
|
|
|
#include "globals.hh"
|
|
#include "G4FastSimulationVector.hh"
|
|
|
|
#include "G4VGlobalFastSimulationManager.hh"
|
|
#include "G4FastSimulationManager.hh"
|
|
#include "G4FastSimulationManagerProcess.hh"
|
|
#include "G4StateManager.hh"
|
|
#include "G4VStateDependent.hh"
|
|
#include "G4FlavoredParallelWorld.hh"
|
|
|
|
enum listType {
|
|
NAMES_ONLY,
|
|
MODELS,
|
|
ISAPPLICABLE
|
|
};
|
|
|
|
class G4FastSimulationMessenger;
|
|
|
|
// Class Description:
|
|
// This a singleton class which provides the management of the G4FastSimulationManager
|
|
// objects and some ghost facilities.
|
|
//
|
|
// You can get access to it by:
|
|
//
|
|
// #include "G4GlobalFastSimulationManager.hh"
|
|
// ...
|
|
// ...
|
|
// G4GlobalFastSimulationManager* globalFSM;
|
|
// globalFSM = G4GlobalFastSimulationManager::getGlobalFastSimulationManager();
|
|
// ...
|
|
// ...
|
|
//
|
|
// Presently, you will mainly need to use the GlobalFastSimulationManager if you use ghost
|
|
// geometries.
|
|
//
|
|
|
|
class G4GlobalFastSimulationManager : public G4VStateDependent,
|
|
public G4VGlobalFastSimulationManager
|
|
{
|
|
public: // With description
|
|
|
|
static G4GlobalFastSimulationManager* GetGlobalFastSimulationManager();
|
|
// Provides a global access to the GlobalFastSimulationManager
|
|
|
|
G4VFastSimulationModel* GetFastSimulationModel(const G4String& modelName,
|
|
const G4VFastSimulationModel* previousFound = 0) const;
|
|
// Fetch G4VFastSimulationModel by name:
|
|
//
|
|
// o returns the G4VFastSimulationModel* of model with name modelName;
|
|
// o returns 0 if no model found;
|
|
//
|
|
// - usage:
|
|
//
|
|
// myModel = gblManager->GetFastSimulationModel("MyModel");
|
|
//
|
|
// o note for the case of several models having the same name:
|
|
// - to get the first "MyModel" model:
|
|
//
|
|
// myModel1 = gblManager->GetFastSimulationModel("MyModel", 0);
|
|
//
|
|
// - to get the next one:
|
|
//
|
|
// myModel2 = gblManager->GetFastSimulationModel("MyModel", myModel1);
|
|
//
|
|
// - and so on.
|
|
//
|
|
// - When gblManager->GetFastSimulationModel("MyModel", myModel_n)
|
|
// returns a null pointer, no extra model with name "MyModel" exist.
|
|
|
|
|
|
public: // Without description
|
|
|
|
// Destructor
|
|
~G4GlobalFastSimulationManager();
|
|
|
|
// G4FastSimulationManager's management :
|
|
//
|
|
// Methods for a G4FastSimulationManager to register itself
|
|
//
|
|
void AddFastSimulationManager(G4FastSimulationManager*);
|
|
void RemoveFastSimulationManager(G4FastSimulationManager*);
|
|
|
|
|
|
// Flag that the Parameterisation must be closed.
|
|
void FastSimulationNeedsToBeClosed();
|
|
|
|
|
|
public: // With description
|
|
void CloseFastSimulation();
|
|
// Build the parallel worlds when you are using ghost volumes. In this case the Parameterisation
|
|
// MUST be closed BEFORE closing the geometry. It's enough to call this method just before
|
|
// closing the geometry.
|
|
//
|
|
|
|
public: // Without description
|
|
// print/control commands
|
|
void ListEnvelopes(const G4String& aName = "all",
|
|
listType aListType = NAMES_ONLY);
|
|
void ListEnvelopes(const G4ParticleDefinition*);
|
|
|
|
void ActivateFastSimulationModel(const G4String&);
|
|
void InActivateFastSimulationModel(const G4String&);
|
|
|
|
// G4FastSimulationProcess interface
|
|
G4VFlavoredParallelWorld* GetFlavoredWorldForThis(G4ParticleDefinition *);
|
|
|
|
// G4StateManager interface
|
|
G4bool Notify(G4ApplicationState requestedState);
|
|
|
|
private:
|
|
// Private construtor insures singleton class
|
|
G4GlobalFastSimulationManager();
|
|
|
|
// The single instance.
|
|
static G4GlobalFastSimulationManager* fGlobalFastSimulationManager;
|
|
|
|
// The G4FastSimulationMessenger
|
|
G4FastSimulationMessenger* fTheFastSimulationMessenger;
|
|
|
|
// List of G4FastSimulationManagers
|
|
G4FastSimulationVector <G4FastSimulationManager> ManagedManagers;
|
|
|
|
// fClosed flags if the NeededFlavoredWorlds List was Build.
|
|
G4bool fClosed;
|
|
|
|
// List of needed ParallelWorlds after close
|
|
G4FastSimulationVector <G4FlavoredParallelWorld> NeededFlavoredWorlds;
|
|
|
|
// Internal fonction to Build world volume clones.
|
|
G4VPhysicalVolume* GiveMeAWorldVolumeClone();
|
|
};
|
|
|
|
#endif
|
|
// end of #ifndef G4GlobalFastSimulationManager_hh
|