// $Id$
// Category: physics
//
+// Author: I. Hrivnacova
+//
+// Class TG4PhysicsManager
+// -----------------------
// Geant4 implementation of the MonteCarlo interface methods
-// for building Geant4 physics and access to it
+// for building Geant4 physics and access to it.
#ifndef TG4_PHYSICS_MANAGER_H
#define TG4_PHYSICS_MANAGER_H
#include "TG4Globals.h"
+#include "TG4ProcessControlMap.h"
+#include "TG4ProcessMCMap.h"
#include "TG4NameMap.h"
-#include "TG4IntMap.h"
-#include "TG3Cut.h"
-#include "TG3Flag.h"
-#include "TG3ParticleWSP.h"
+#include "TG4G3Cut.h"
+#include "TG4G3Control.h"
#include <Rtypes.h>
#include "AliMCProcess.h"
#include <globals.hh>
-
-class TG4CutVector;
-class TG4FlagVector;
-class TG4PhysicsList;
+class AliDecayer;
+class TG4ParticlesManager;
+class TG4G3PhysicsManager;
+class TG4G3ProcessMap;
class G4ParticleDefinition;
+class G4VProcess;
+class TG4ModularPhysicsList;
class TG4PhysicsManager
{
public:
- TG4PhysicsManager();
+ TG4PhysicsManager(TG4ModularPhysicsList* physicsList);
// --> protected
+ // TG4PhysicsManager();
// TG4PhysicsManager(const TG4PhysicsManager& right);
virtual ~TG4PhysicsManager();
static TG4PhysicsManager* Instance();
// methods
- void BuildPhysics();
+ void Gstpar(Int_t itmed, const char *param, Float_t parval);
// set methods
void SetCut(const char* cutName, Float_t cutValue);
- void SetProcess(const char* flagName, Int_t flagValue);
+ void SetProcess(const char* controlName, Int_t controlValue);
Float_t Xsec(char* reac, Float_t energy, Int_t part, Int_t mate);
-
+ void SetExternalDecayer(AliDecayer* decayer);
+
+ // get methods
+ AliDecayer* Decayer() const;
+
// particle table usage
Int_t IdFromPDG(Int_t pdgID) const;
Int_t PDGFromId(Int_t mcID) const;
// methods for Geant4 only
//
- void Lock();
+ void CreatePhysicsConstructors();
void SetProcessActivation();
- G4int GetPDGEncodingFast(G4ParticleDefinition* particle);
- AliMCProcess GetMCProcess(const G4String& g4ProcessName);
- G4bool CheckCutWithCutVector(
- G4String name, G4double value, TG3Cut& cut);
- G4bool CheckFlagWithFlagVector(
- G4String name, G4double value, TG3Flag& flag);
- G4bool CheckCutWithG3Defaults(
- G4String name, G4double value, TG3Cut& cut);
- G4bool CheckFlagWithG3Defaults(
- G4String name, G4double value, TG3Flag& flag);
+ AliMCProcess GetMCProcess(const G4VProcess* process);
// set methods
- void SetPhysicsList(TG4PhysicsList* physicsList);
- void SetG3DefaultCuts();
- void SetG3DefaultProcesses();
+ void SetPhysicsList(TG4ModularPhysicsList* physicsList);
+ void SetEMPhysics(G4bool value);
+ void SetOpticalPhysics(G4bool value);
+ void SetHadronPhysics(G4bool value);
+ void SetSpecialCutsPhysics(G4bool value);
+ void SetSpecialControlsPhysics(G4bool value);
// get methods
- G4bool IsLock() const;
- G4bool IsSpecialCuts() const;
- G4bool IsSpecialFlags() const;
- TG4CutVector* GetCutVector() const;
- TG4FlagVector* GetFlagVector() const;
- TG4boolVector* GetIsCutVector() const;
- TG4boolVector* GetIsFlagVector() const;
- TG3ParticleWSP GetG3ParticleWSP(G4ParticleDefinition* particle) const;
- void GetG3ParticleWSPName(G4int particleWSP, G4String& name) const;
-
+ TG4ModularPhysicsList* GetPhysicsList() const;
+
protected:
+ TG4PhysicsManager();
TG4PhysicsManager(const TG4PhysicsManager& right);
// operators
private:
// methods
- void LockException() const;
- void FillG3CutNameVector();
- void FillG3FlagNameVector();
void FillProcessMap();
- G4int GetPDGEncoding(G4ParticleDefinition* particle);
- G4int GetPDGEncoding(G4String particleName);
-
- // set methods
- void SetCut(TG3Cut cut, G4double cutValue);
- void SetProcess(TG3Flag flag, G4int flagValue);
- void SwitchIsCutVector(TG3Cut cut);
- void SwitchIsFlagVector(TG3Flag flag);
-
- // get methods
- TG3Cut GetG3Cut(G4String cutName);
- TG3Flag GetG3Flag(G4String flagName);
+ void GstparCut(G4int itmed, TG4G3Cut par, G4double parval);
+ void GstparControl(G4int itmed, TG4G3Control control,
+ TG4G3ControlValue parval);
// static data members
static TG4PhysicsManager* fgInstance; //this instance
// data members
- G4bool fLock; //if true: cut/flag vectors cannot be modified
- TG4PhysicsList* fPhysicsList; //physics list
- TG4CutVector* fCutVector; //TG4CutVector
- TG4FlagVector* fFlagVector; //TG4FlagVector
- TG4boolVector* fIsCutVector; //vector of booleans which cuts are set
- TG4boolVector* fIsFlagVector; //vector of booleans which flags are set
- TG4StringVector fG3CutNameVector; //vector of cut parameters names
- TG4StringVector fG3FlagNameVector; //vector of process control parameters
- //names
- TG4NameMap fParticleNameMap; //the mapping between G4 particle names
- //and TDatabasePDG names
- TG4IntMap fParticlePDGMap; //the mapping between G4 particle names
- //and TDatabasePDG codes
- TG4IntMap fProcessMap; //the mapping between G4 process names
- //and AliMCProcess codes
+ TG4ParticlesManager* fParticlesManager; //particles manager
+ TG4G3PhysicsManager* fG3PhysicsManager; //G3 physics manager
+ TG4ModularPhysicsList* fPhysicsList; //physics list
+ AliDecayer* fDecayer; //external decayer
+ TG4ProcessMCMap fProcessMCMap;//the mapping between G4 process names
+ //and AliMCProcess codes
+ TG4ProcessControlMap fProcessControlMap; //the mapping between G4 processes
+ //and G3 process controls
+ G4bool fSetEMPhysics; //electromagnetic physics control
+ G4bool fSetOpticalPhysics; //optical physics control
+ G4bool fSetHadronPhysics; //hadron physics control
+ G4bool fSetSpecialCutsPhysics; //special cuts process control
+ //(under development)
+ G4bool fSetSpecialControlsPhysics;//special controls process control
+ //(under development)
};
// inline methods
inline TG4PhysicsManager* TG4PhysicsManager::Instance()
{ return fgInstance; }
-inline void TG4PhysicsManager::Lock()
-{ fLock = true; }
+inline void TG4PhysicsManager::SetExternalDecayer(AliDecayer* decayer)
+{ fDecayer = decayer; }
+
+inline AliDecayer* TG4PhysicsManager::Decayer() const
+{ return fDecayer; }
-inline void TG4PhysicsManager::SetPhysicsList(TG4PhysicsList* physicsList)
+inline void TG4PhysicsManager::SetPhysicsList(TG4ModularPhysicsList* physicsList)
{ fPhysicsList = physicsList; }
-inline G4bool TG4PhysicsManager::IsLock() const
-{ return fLock; }
+inline void TG4PhysicsManager::SetEMPhysics(G4bool value)
+{ fSetEMPhysics = value; }
+
+inline void TG4PhysicsManager::SetOpticalPhysics(G4bool value)
+{ fSetOpticalPhysics = value; }
-inline TG4CutVector* TG4PhysicsManager::GetCutVector() const
-{ return fCutVector; }
+inline void TG4PhysicsManager::SetHadronPhysics(G4bool value)
+{ fSetHadronPhysics = value; }
-inline TG4FlagVector* TG4PhysicsManager::GetFlagVector() const
-{ return fFlagVector; }
+inline void TG4PhysicsManager::SetSpecialCutsPhysics(G4bool value)
+{ fSetSpecialCutsPhysics = value; }
-inline TG4boolVector* TG4PhysicsManager::GetIsCutVector() const
-{ return fIsCutVector; }
+inline void TG4PhysicsManager::SetSpecialControlsPhysics(G4bool value)
+{ fSetSpecialControlsPhysics = value; }
-inline TG4boolVector* TG4PhysicsManager::GetIsFlagVector() const
-{ return fIsFlagVector; }
+inline TG4ModularPhysicsList* TG4PhysicsManager::GetPhysicsList() const
+{ return fPhysicsList; }
#endif //TG4_PHYSICS_MANAGER_H