Import Geant4 10.0.0 source tree
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * 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. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
/// \file F04ActionInitialization.cc
|
||||
/// \brief Implementation of the F04ActionInitialization class
|
||||
|
||||
#include "F04ActionInitialization.hh"
|
||||
#include "F04PrimaryGeneratorAction.hh"
|
||||
#include "F04RunAction.hh"
|
||||
#include "F04EventAction.hh"
|
||||
#include "F04TrackingAction.hh"
|
||||
#include "F04StackingAction.hh"
|
||||
#include "F04SteppingAction.hh"
|
||||
#include "F04SteppingVerbose.hh"
|
||||
|
||||
#include "F04DetectorConstruction.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
F04ActionInitialization::F04ActionInitialization
|
||||
(F04DetectorConstruction* detConstruction)
|
||||
: G4VUserActionInitialization(),
|
||||
fDetConstruction(detConstruction)
|
||||
{}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
F04ActionInitialization::~F04ActionInitialization()
|
||||
{}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void F04ActionInitialization::BuildForMaster() const
|
||||
{
|
||||
SetUserAction(new F04RunAction());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void F04ActionInitialization::Build() const
|
||||
{
|
||||
SetUserAction(new F04PrimaryGeneratorAction(fDetConstruction));
|
||||
|
||||
F04RunAction* runAction = new F04RunAction();
|
||||
SetUserAction(runAction);
|
||||
F04EventAction* eventAction = new F04EventAction(runAction);
|
||||
SetUserAction(eventAction);
|
||||
SetUserAction(new F04TrackingAction());
|
||||
SetUserAction(new F04StackingAction());
|
||||
SetUserAction(new F04SteppingAction());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
G4VSteppingVerbose* F04ActionInitialization::InitializeSteppingVerbose() const
|
||||
{
|
||||
return new F04SteppingVerbose();
|
||||
}
|
||||
@@ -23,18 +23,19 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04DetectorConstruction.cc 77884 2013-11-29 08:41:11Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04DetectorConstruction.cc
|
||||
/// \brief Implementation of the F04DetectorConstruction class
|
||||
//
|
||||
//
|
||||
#include "G4ios.hh"
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#include "globals.hh"
|
||||
|
||||
#include "F04DetectorConstruction.hh"
|
||||
#include "F04DetectorMessenger.hh"
|
||||
|
||||
#include "F04GlobalField.hh"
|
||||
|
||||
#include "G4Tubs.hh"
|
||||
#include "G4LogicalVolume.hh"
|
||||
#include "G4PVPlacement.hh"
|
||||
@@ -42,9 +43,7 @@
|
||||
#include "G4Material.hh"
|
||||
#include "G4NistManager.hh"
|
||||
|
||||
#include "G4FieldManager.hh"
|
||||
#include "G4UniformMagField.hh"
|
||||
#include "G4TransportationManager.hh"
|
||||
#include "F04GlobalField.hh"
|
||||
|
||||
#include "G4GeometryManager.hh"
|
||||
|
||||
@@ -58,8 +57,6 @@
|
||||
#include "G4PhysicalConstants.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
|
||||
#include "F04DetectorConstruction.hh"
|
||||
#include "F04DetectorMessenger.hh"
|
||||
#include "F04Materials.hh"
|
||||
|
||||
#include "G4RotationMatrix.hh"
|
||||
@@ -69,14 +66,17 @@
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
G4ThreadLocal F04GlobalField* F04DetectorConstruction::fField = 0;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
F04DetectorConstruction::F04DetectorConstruction()
|
||||
: fSolidWorld(0), fLogicWorld(0), fPhysiWorld(0),
|
||||
fSolidTarget(0), fLogicTarget(0), fPhysiTarget(0),
|
||||
fSolidDegrader(0), fLogicDegrader(0), fPhysiDegrader(0),
|
||||
fSolidCaptureMgnt(0), fLogicCaptureMgnt(0), fPhysiCaptureMgnt(0),
|
||||
fSolidTransferMgnt(0), fLogicTransferMgnt(0), fPhysiTransferMgnt(0),
|
||||
fWorldMaterial(0), fTargetMaterial(0), fDegraderMaterial(0),
|
||||
fFocusSolenoid(0), fSimpleSolenoid(0)
|
||||
fWorldMaterial(0), fTargetMaterial(0), fDegraderMaterial(0)
|
||||
{
|
||||
fWorldSizeZ = 50.*m;
|
||||
fWorldSizeR = 5.*m;
|
||||
@@ -102,9 +102,6 @@ F04DetectorConstruction::F04DetectorConstruction()
|
||||
|
||||
fDegraderPos = -fTransferMgntLength/2. + fDegraderThickness/2.;
|
||||
|
||||
// ensure the global field is initialized
|
||||
(void)F04GlobalField::GetObject();
|
||||
|
||||
fDetectorMessenger = new F04DetectorMessenger(this);
|
||||
}
|
||||
|
||||
@@ -112,6 +109,7 @@ F04DetectorConstruction::F04DetectorConstruction()
|
||||
|
||||
F04DetectorConstruction::~F04DetectorConstruction()
|
||||
{
|
||||
// delete fField;
|
||||
delete fDetectorMessenger;
|
||||
}
|
||||
|
||||
@@ -168,10 +166,10 @@ G4VPhysicalVolume* F04DetectorConstruction::ConstructDetector()
|
||||
fVacuum,
|
||||
"CaptureMgnt");
|
||||
|
||||
G4ThreeVector captureMgntCenter = G4ThreeVector();
|
||||
fCaptureMgntCenter = G4ThreeVector();
|
||||
|
||||
fPhysiCaptureMgnt = new G4PVPlacement(0,
|
||||
captureMgntCenter,
|
||||
fCaptureMgntCenter,
|
||||
"CaptureMgnt",
|
||||
fLogicCaptureMgnt,
|
||||
fPhysiWorld,
|
||||
@@ -192,7 +190,7 @@ G4VPhysicalVolume* F04DetectorConstruction::ConstructDetector()
|
||||
+ GetTransferMgntPos();
|
||||
G4double x = GetTransferMgntPos()/2.;
|
||||
|
||||
G4ThreeVector transferMgntCenter = G4ThreeVector(x,0.,z);
|
||||
fTransferMgntCenter = G4ThreeVector(x,0.,z);
|
||||
|
||||
G4RotationMatrix* g4rot = new G4RotationMatrix();
|
||||
*g4rot = StringToRotationMatrix("Y30,X10");
|
||||
@@ -200,7 +198,7 @@ G4VPhysicalVolume* F04DetectorConstruction::ConstructDetector()
|
||||
if (*g4rot == G4RotationMatrix()) g4rot = NULL;
|
||||
|
||||
fPhysiTransferMgnt = new G4PVPlacement(g4rot,
|
||||
transferMgntCenter,
|
||||
fTransferMgntCenter,
|
||||
"TransferMgnt",
|
||||
fLogicTransferMgnt,
|
||||
fPhysiWorld,
|
||||
@@ -288,27 +286,6 @@ G4VPhysicalVolume* F04DetectorConstruction::ConstructDetector()
|
||||
0);
|
||||
}
|
||||
|
||||
G4double l = 0.0;
|
||||
G4double B1 = GetCaptureMgntB1();
|
||||
G4double B2 = GetCaptureMgntB2();
|
||||
|
||||
if (fFocusSolenoid) delete fFocusSolenoid;
|
||||
fFocusSolenoid = new F04FocusSolenoid(B1, B2, l,
|
||||
fLogicCaptureMgnt,captureMgntCenter);
|
||||
fFocusSolenoid -> SetHalf(true);
|
||||
|
||||
l = 0.0;
|
||||
G4double B = GetTransferMgntB();
|
||||
|
||||
if (fSimpleSolenoid) delete fSimpleSolenoid;
|
||||
fSimpleSolenoid = new F04SimpleSolenoid(B, l,
|
||||
fLogicTransferMgnt,transferMgntCenter);
|
||||
|
||||
fSimpleSolenoid->SetColor("1,0,1");
|
||||
fSimpleSolenoid->SetColor("0,1,1");
|
||||
fSimpleSolenoid->SetMaxStep(1.5*mm);
|
||||
fSimpleSolenoid->SetMaxStep(2.5*mm);
|
||||
|
||||
return fPhysiWorld;
|
||||
}
|
||||
|
||||
@@ -485,6 +462,56 @@ void F04DetectorConstruction::SetDegraderPos(G4double val)
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void F04DetectorConstruction::ConstructSDandField()
|
||||
{
|
||||
// ensure the global field is initialized
|
||||
if (!fField)
|
||||
{
|
||||
fField = F04GlobalField::GetObject(this);
|
||||
|
||||
G4double l = 0.0;
|
||||
G4double B1 = GetCaptureMgntB1();
|
||||
G4double B2 = GetCaptureMgntB2();
|
||||
|
||||
F04FocusSolenoid* focusSolenoid =
|
||||
new F04FocusSolenoid(B1, B2, l, fLogicCaptureMgnt,fCaptureMgntCenter);
|
||||
focusSolenoid -> SetHalf(true);
|
||||
|
||||
G4double B = GetTransferMgntB();
|
||||
|
||||
F04SimpleSolenoid* simpleSolenoid =
|
||||
new F04SimpleSolenoid(B, l,fLogicTransferMgnt,fTransferMgntCenter);
|
||||
simpleSolenoid->SetColor("1,0,1");
|
||||
simpleSolenoid->SetColor("0,1,1");
|
||||
simpleSolenoid->SetMaxStep(1.5*mm);
|
||||
simpleSolenoid->SetMaxStep(2.5*mm);
|
||||
|
||||
FieldList* fields = fField->GetFields();
|
||||
|
||||
if (fields) {
|
||||
if (fields->size()>0) {
|
||||
FieldList::iterator i;
|
||||
for (i=fields->begin(); i!=fields->end(); ++i)
|
||||
{ (*i)->Construct(fPhysiWorld); }
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FieldList* fields = fField->GetFields();
|
||||
|
||||
if (fields) {
|
||||
if (fields->size()>0) {
|
||||
FieldList::iterator i;
|
||||
for (i=fields->begin(); i!=fields->end(); ++i)
|
||||
{ (*i)->UpdateWorld(fPhysiWorld); }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void F04DetectorConstruction::UpdateGeometry()
|
||||
{
|
||||
if (!fPhysiWorld) return;
|
||||
@@ -497,9 +524,8 @@ void F04DetectorConstruction::UpdateGeometry()
|
||||
G4SolidStore::GetInstance()->Clean();
|
||||
|
||||
//define new one
|
||||
G4RunManager::GetRunManager()->DefineWorldVolume(ConstructDetector());
|
||||
G4RunManager::GetRunManager()->ReinitializeGeometry();
|
||||
|
||||
G4RunManager::GetRunManager()->GeometryHasBeenModified();
|
||||
G4RunManager::GetRunManager()->PhysicsHasBeenModified();
|
||||
|
||||
G4RegionStore::GetInstance()->UpdateMaterialList(fPhysiWorld);
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04DetectorMessenger.cc 76690 2013-11-14 08:45:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04DetectorMessenger.cc
|
||||
/// \brief Implementation of the F04DetectorMessenger class
|
||||
//
|
||||
//
|
||||
|
||||
#include "F04DetectorMessenger.hh"
|
||||
|
||||
#include "G4UIdirectory.hh"
|
||||
@@ -77,20 +79,6 @@ F04DetectorMessenger::F04DetectorMessenger(F04DetectorConstruction* detector)
|
||||
fCaptureZCmd->SetRange("CSizeZ>0.");
|
||||
fCaptureZCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
||||
|
||||
fCaptureB1Cmd = new G4UIcmdWithADoubleAndUnit("/field04/SetCaptureB1",this);
|
||||
fCaptureB1Cmd->SetGuidance("Set B1 of the Capture Magnet");
|
||||
fCaptureB1Cmd->SetParameterName("CSizeB1",false,false);
|
||||
fCaptureB1Cmd->SetDefaultUnit("tesla");
|
||||
fCaptureB1Cmd->SetRange("CSizeB1>0.");
|
||||
fCaptureB1Cmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
||||
|
||||
fCaptureB2Cmd = new G4UIcmdWithADoubleAndUnit("/field04/SetCaptureB2",this);
|
||||
fCaptureB2Cmd->SetGuidance("Set B2 of the Capture Magnet");
|
||||
fCaptureB2Cmd->SetParameterName("CSizeB2",false,false);
|
||||
fCaptureB2Cmd->SetDefaultUnit("tesla");
|
||||
fCaptureB2Cmd->SetRange("CSizeB2>0.");
|
||||
fCaptureB2Cmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
||||
|
||||
fTransferRCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTransferR",this);
|
||||
fTransferRCmd->SetGuidance("Set Radius of the Transfer Magnet");
|
||||
fTransferRCmd->SetParameterName("TSizeR",false,false);
|
||||
@@ -105,13 +93,6 @@ F04DetectorMessenger::F04DetectorMessenger(F04DetectorConstruction* detector)
|
||||
fTransferZCmd->SetRange("TSizeZ>0.");
|
||||
fTransferZCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
||||
|
||||
fTransferBCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTransferB",this);
|
||||
fTransferBCmd->SetGuidance("Set B of the Transfer Magnet");
|
||||
fTransferBCmd->SetParameterName("TSizeB",false,false);
|
||||
fTransferBCmd->SetDefaultUnit("tesla");
|
||||
fTransferBCmd->SetRange("TSizeB>0.");
|
||||
fTransferBCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
||||
|
||||
fTransferPCmd = new G4UIcmdWithADoubleAndUnit("/field04/SetTransferP",this);
|
||||
fTransferPCmd->SetGuidance("Set Z pos of the T-Mgnt from end of C-Mgnt");
|
||||
fTransferPCmd->SetParameterName("TSizeP",false,false);
|
||||
@@ -195,12 +176,9 @@ F04DetectorMessenger::~F04DetectorMessenger()
|
||||
|
||||
delete fCaptureRCmd;
|
||||
delete fCaptureZCmd;
|
||||
delete fCaptureB1Cmd;
|
||||
delete fCaptureB2Cmd;
|
||||
|
||||
delete fTransferRCmd;
|
||||
delete fTransferZCmd;
|
||||
delete fTransferBCmd;
|
||||
delete fTransferPCmd;
|
||||
|
||||
delete fTgtMaterCmd;
|
||||
@@ -242,21 +220,12 @@ void F04DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
|
||||
if( command == fCaptureZCmd )
|
||||
fDetector->SetCaptureMgntLength(fCaptureZCmd->GetNewDoubleValue(newValue));
|
||||
|
||||
if( command == fCaptureB1Cmd )
|
||||
fDetector->SetCaptureMgntB1(fCaptureB1Cmd->GetNewDoubleValue(newValue));
|
||||
|
||||
if( command == fCaptureB2Cmd )
|
||||
fDetector->SetCaptureMgntB2(fCaptureB2Cmd->GetNewDoubleValue(newValue));
|
||||
|
||||
if( command == fTransferRCmd )
|
||||
fDetector->SetTransferMgntRadius(fTransferRCmd->GetNewDoubleValue(newValue));
|
||||
|
||||
if( command == fTransferZCmd )
|
||||
fDetector->SetTransferMgntLength(fTransferZCmd->GetNewDoubleValue(newValue));
|
||||
|
||||
if( command == fTransferBCmd )
|
||||
fDetector->SetTransferMgntB(fTransferBCmd->GetNewDoubleValue(newValue));
|
||||
|
||||
if( command == fTransferPCmd )
|
||||
fDetector->SetTransferMgntPos(fTransferPCmd->GetNewDoubleValue(newValue));
|
||||
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04ElementField.cc 77884 2013-11-29 08:41:11Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04ElementField.cc
|
||||
/// \brief Implementation of the F04ElementField class
|
||||
//
|
||||
//
|
||||
|
||||
#include "G4GeometryManager.hh"
|
||||
|
||||
#include "F04ElementField.hh"
|
||||
@@ -35,7 +37,7 @@
|
||||
|
||||
#include "G4SystemOfUnits.hh"
|
||||
|
||||
G4Navigator* F04ElementField::fNavigator;
|
||||
G4ThreadLocal G4Navigator* F04ElementField::fNavigator = 0;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -69,24 +71,17 @@ F04ElementField::F04ElementField(G4ThreeVector c, G4LogicalVolume* lv)
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void F04ElementField::Construct()
|
||||
void F04ElementField::Construct(G4VPhysicalVolume* currentWorld)
|
||||
{
|
||||
G4Navigator* theNavigator =
|
||||
G4TransportationManager::GetTransportationManager()->
|
||||
GetNavigatorForTracking();
|
||||
if (!fNavigator) { fNavigator = new G4Navigator(); }
|
||||
UpdateWorld(currentWorld);
|
||||
}
|
||||
|
||||
if (!fNavigator) {
|
||||
fNavigator = new G4Navigator();
|
||||
if ( theNavigator->GetWorldVolume() )
|
||||
fNavigator->SetWorldVolume(theNavigator->GetWorldVolume());
|
||||
}
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
G4GeometryManager* geomManager = G4GeometryManager::GetInstance();
|
||||
|
||||
if (!geomManager->IsGeometryClosed()) {
|
||||
geomManager->OpenGeometry();
|
||||
geomManager->CloseGeometry(true);
|
||||
}
|
||||
void F04ElementField::UpdateWorld(G4VPhysicalVolume* currentWorld)
|
||||
{
|
||||
fNavigator->SetWorldVolume(currentWorld);
|
||||
|
||||
fNavigator->LocateGlobalPointAndSetup(fCenter,0,false);
|
||||
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04EventAction.cc 78002 2013-12-02 08:25:49Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04EventAction.cc
|
||||
/// \brief Implementation of the F04EventAction class
|
||||
//
|
||||
//
|
||||
|
||||
#include "F04EventAction.hh"
|
||||
|
||||
#include "F04RunAction.hh"
|
||||
@@ -69,38 +71,41 @@ void F04EventAction::BeginOfEventAction(const G4Event* evt)
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
#include "G4Threading.hh"
|
||||
|
||||
void F04EventAction::EndOfEventAction(const G4Event* evt)
|
||||
{
|
||||
G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance();
|
||||
|
||||
if(pVVisManager)
|
||||
{
|
||||
G4TrajectoryContainer* trajectoryContainer = evt->GetTrajectoryContainer();
|
||||
|
||||
G4int n_trajectories = 0;
|
||||
|
||||
if (trajectoryContainer) n_trajectories = trajectoryContainer->entries();
|
||||
for(G4int i=0; i<n_trajectories; i++)
|
||||
{ G4Trajectory* trj =
|
||||
(G4Trajectory *)((*(evt->GetTrajectoryContainer()))[i]);
|
||||
if (fDrawFlag == "all") trj->DrawTrajectory(50);
|
||||
else if ((fDrawFlag == "charged")&&(trj->GetCharge() != 0.))
|
||||
trj->DrawTrajectory(50);
|
||||
}
|
||||
}
|
||||
// G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance();
|
||||
//
|
||||
// if(pVVisManager)
|
||||
// {
|
||||
// G4TrajectoryContainer* trajectoryContainer = evt->GetTrajectoryContainer();
|
||||
//
|
||||
// G4int n_trajectories = 0;
|
||||
//
|
||||
// if (trajectoryContainer) n_trajectories = trajectoryContainer->entries();
|
||||
// for(G4int i=0; i<n_trajectories; i++)
|
||||
// { G4Trajectory* trj =
|
||||
// (G4Trajectory *)((*(evt->GetTrajectoryContainer()))[i]);
|
||||
// if (fDrawFlag == "all") trj->DrawTrajectory();
|
||||
// else if ((fDrawFlag == "charged")&&(trj->GetCharge() != 0.))
|
||||
// trj->DrawTrajectory();
|
||||
// }
|
||||
// }
|
||||
|
||||
if (fVerboselevel>0)
|
||||
G4cout << "<<< Event " << evt->GetEventID() << " ended." << G4endl;
|
||||
|
||||
if (fRunaction->GetRndmFreq() == 2)
|
||||
{
|
||||
CLHEP::HepRandom::saveEngineStatus("endOfEvent.rndm");
|
||||
std::ostringstream os;
|
||||
os<<"endOfEvent_"<<G4Threading::G4GetThreadId()<<".rndm";
|
||||
G4Random::saveEngineStatus(os.str().c_str());
|
||||
G4int evtNb = evt->GetEventID();
|
||||
if (evtNb%fPrintModulo == 0)
|
||||
{
|
||||
G4cout << "\n---> End of Event: " << evtNb << G4endl;
|
||||
CLHEP::HepRandom::showEngineStatus();
|
||||
G4Random::showEngineStatus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04EventActionMessenger.cc 68021 2013-03-13 13:36:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04EventActionMessenger.cc
|
||||
/// \brief Implementation of the F04EventActionMessenger class
|
||||
//
|
||||
//
|
||||
|
||||
#include "globals.hh"
|
||||
|
||||
#include "G4UIcmdWithAString.hh"
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04ExtraPhysics.cc 68751 2013-04-05 10:21:24Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04ExtraPhysics.cc
|
||||
/// \brief Implementation of the F04ExtraPhysics class
|
||||
//
|
||||
//
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4ParticleTable.hh"
|
||||
@@ -57,10 +59,10 @@ void F04ExtraPhysics::ConstructProcess()
|
||||
G4cout << "F04ExtraPhysics:: Add Extra Physics Processes"
|
||||
<< G4endl;
|
||||
|
||||
theParticleIterator->reset();
|
||||
aParticleIterator->reset();
|
||||
|
||||
while ((*theParticleIterator)()) {
|
||||
G4ParticleDefinition* particle = theParticleIterator->value();
|
||||
while ((*aParticleIterator)()) {
|
||||
G4ParticleDefinition* particle = aParticleIterator->value();
|
||||
G4ProcessManager* pmanager = particle->GetProcessManager();
|
||||
G4String particleName = particle->GetParticleName();
|
||||
G4double charge = particle->GetPDGCharge();
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04FieldMessenger.cc 76690 2013-11-14 08:45:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04FieldMessenger.cc
|
||||
/// \brief Implementation of the F04FieldMessenger class
|
||||
//
|
||||
//
|
||||
|
||||
#include "F04FieldMessenger.hh"
|
||||
|
||||
#include "F04GlobalField.hh"
|
||||
@@ -36,14 +38,40 @@
|
||||
#include "G4UIcmdWithADoubleAndUnit.hh"
|
||||
#include "G4UIcmdWithoutParameter.hh"
|
||||
|
||||
#include "F04DetectorConstruction.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
F04FieldMessenger::F04FieldMessenger(F04GlobalField* pEMfield)
|
||||
F04FieldMessenger::F04FieldMessenger(F04GlobalField* pEMfield,
|
||||
F04DetectorConstruction* detector)
|
||||
: fGlobalField(pEMfield)
|
||||
{
|
||||
fDetector = detector;
|
||||
|
||||
fDetDir = new G4UIdirectory("/field/");
|
||||
fDetDir->SetGuidance(" Field tracking control ");
|
||||
|
||||
fCaptureB1Cmd = new G4UIcmdWithADoubleAndUnit("/field/SetCaptureB1",this);
|
||||
fCaptureB1Cmd->SetGuidance("Set B1 of the Capture Magnet");
|
||||
fCaptureB1Cmd->SetParameterName("CSizeB1",false,false);
|
||||
fCaptureB1Cmd->SetDefaultUnit("tesla");
|
||||
fCaptureB1Cmd->SetRange("CSizeB1>0.");
|
||||
fCaptureB1Cmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
||||
|
||||
fCaptureB2Cmd = new G4UIcmdWithADoubleAndUnit("/field/SetCaptureB2",this);
|
||||
fCaptureB2Cmd->SetGuidance("Set B2 of the Capture Magnet");
|
||||
fCaptureB2Cmd->SetParameterName("CSizeB2",false,false);
|
||||
fCaptureB2Cmd->SetDefaultUnit("tesla");
|
||||
fCaptureB2Cmd->SetRange("CSizeB2>0.");
|
||||
fCaptureB2Cmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
||||
|
||||
fTransferBCmd = new G4UIcmdWithADoubleAndUnit("/field/SetTransferB",this);
|
||||
fTransferBCmd->SetGuidance("Set B of the Transfer Magnet");
|
||||
fTransferBCmd->SetParameterName("TSizeB",false,false);
|
||||
fTransferBCmd->SetDefaultUnit("tesla");
|
||||
fTransferBCmd->SetRange("TSizeB>0.");
|
||||
fTransferBCmd->AvailableForStates(G4State_PreInit,G4State_Idle);
|
||||
|
||||
fStepperCMD = new G4UIcmdWithAnInteger("/field/setStepperType",this);
|
||||
fStepperCMD->SetGuidance("Select stepper type for field");
|
||||
fStepperCMD->SetParameterName("choice",true);
|
||||
@@ -101,6 +129,10 @@ F04FieldMessenger::~F04FieldMessenger()
|
||||
{
|
||||
delete fDetDir;
|
||||
|
||||
delete fCaptureB1Cmd;
|
||||
delete fCaptureB2Cmd;
|
||||
delete fTransferBCmd;
|
||||
|
||||
delete fStepperCMD;
|
||||
delete fMinStepCMD;
|
||||
delete fDeltaChordCMD;
|
||||
@@ -115,6 +147,16 @@ F04FieldMessenger::~F04FieldMessenger()
|
||||
|
||||
void F04FieldMessenger::SetNewValue( G4UIcommand* command, G4String newValue)
|
||||
{
|
||||
|
||||
if( command == fCaptureB1Cmd )
|
||||
fDetector->SetCaptureMgntB1(fCaptureB1Cmd->GetNewDoubleValue(newValue));
|
||||
|
||||
if( command == fCaptureB2Cmd )
|
||||
fDetector->SetCaptureMgntB2(fCaptureB2Cmd->GetNewDoubleValue(newValue));
|
||||
|
||||
if( command == fTransferBCmd )
|
||||
fDetector->SetTransferMgntB(fTransferBCmd->GetNewDoubleValue(newValue));
|
||||
|
||||
if( command == fStepperCMD )
|
||||
{
|
||||
fGlobalField->SetStepperType(fStepperCMD->GetNewIntValue(newValue));
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04FocusSolenoid.cc 68021 2013-03-13 13:36:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04FocusSolenoid.cc
|
||||
/// \brief Implementation of the F04FocusSolenoid class
|
||||
//
|
||||
//
|
||||
|
||||
#include "globals.hh"
|
||||
|
||||
#include "G4GeometryManager.hh"
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04GlobalField.cc 77884 2013-11-29 08:41:11Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04GlobalField.cc
|
||||
/// \brief Implementation of the F04GlobalField class
|
||||
//
|
||||
//
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#include "Randomize.hh"
|
||||
@@ -41,25 +43,33 @@
|
||||
#include "G4SystemOfUnits.hh"
|
||||
|
||||
#include "F04GlobalField.hh"
|
||||
|
||||
F04GlobalField* F04GlobalField::fObject = 0;
|
||||
#include "F04SimpleSolenoid.hh"
|
||||
#include "F04FocusSolenoid.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
F04GlobalField::F04GlobalField() : G4ElectroMagneticField(),
|
||||
fMinStep(0.01*mm), fDeltaChord(3.0*mm),
|
||||
fDeltaOneStep(0.01*mm), fDeltaIntersection(0.1*mm),
|
||||
fEpsMin(2.5e-7*mm), fEpsMax(0.05*mm),
|
||||
fEquation(0), fFieldManager(0),
|
||||
fFieldPropagator(0), fStepper(0), fChordFinder(0)
|
||||
//F04GlobalField::F04GlobalField() : G4MagneticField(),
|
||||
// fMinStep(0.01*mm), fDeltaChord(3.0*mm),
|
||||
// fDeltaOneStep(0.01*mm), fDeltaIntersection(0.1*mm),
|
||||
// fEpsMin(2.5e-7*mm), fEpsMax(0.05*mm),
|
||||
// fEquation(0), fFieldManager(0),
|
||||
// fFieldPropagator(0), fStepper(0), fChordFinder(0)
|
||||
G4ThreadLocal F04GlobalField* F04GlobalField::fObject = 0;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
F04GlobalField::F04GlobalField(F04DetectorConstruction* det)
|
||||
: G4ElectroMagneticField(),
|
||||
fMinStep(0.01*mm), fDeltaChord(3.0*mm),
|
||||
fDeltaOneStep(0.01*mm), fDeltaIntersection(0.1*mm),
|
||||
fEpsMin(2.5e-7*mm), fEpsMax(0.05*mm),
|
||||
fEquation(0), fFieldManager(0),
|
||||
fFieldPropagator(0), fStepper(0), fChordFinder(0),
|
||||
fDetectorConstruction(det)
|
||||
//F04GlobalField::F04GlobalField(F04DetectorConstruction* det)
|
||||
// : G4MagneticField(),
|
||||
// fMinStep(0.01*mm), fDeltaChord(3.0*mm),
|
||||
// fDeltaOneStep(0.01*mm), fDeltaIntersection(0.1*mm),
|
||||
// fEpsMin(2.5e-7*mm), fEpsMax(0.05*mm),
|
||||
// fEquation(0), fFieldManager(0),
|
||||
// fFieldPropagator(0), fStepper(0), fChordFinder(0),
|
||||
// fDetectorConstruction(det)
|
||||
{
|
||||
fFieldMessenger = new F04FieldMessenger(this);
|
||||
fFieldMessenger = new F04FieldMessenger(this,det);
|
||||
|
||||
fFields = new FieldList();
|
||||
|
||||
@@ -69,7 +79,7 @@ F04GlobalField::F04GlobalField() : G4ElectroMagneticField(),
|
||||
|
||||
fObject = this;
|
||||
|
||||
UpdateField();
|
||||
ConstructField();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
@@ -89,15 +99,13 @@ F04GlobalField::~F04GlobalField()
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void F04GlobalField::UpdateField()
|
||||
void F04GlobalField::ConstructField()
|
||||
{
|
||||
fFirst = true;
|
||||
|
||||
fNfp = 0;
|
||||
fFp = 0;
|
||||
|
||||
Clear();
|
||||
|
||||
// Construct equ. of motion of particles through B fields
|
||||
// fEquation = new G4Mag_EqRhs(this);
|
||||
// Construct equ. of motion of particles through e.m. fields
|
||||
@@ -154,10 +162,120 @@ void F04GlobalField::UpdateField()
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void F04GlobalField::UpdateField()
|
||||
{
|
||||
fFirst = true;
|
||||
|
||||
fNfp = 0;
|
||||
fFp = 0;
|
||||
|
||||
Clear();
|
||||
|
||||
G4double l = 0.0;
|
||||
G4double B1 = fDetectorConstruction->GetCaptureMgntB1();
|
||||
G4double B2 = fDetectorConstruction->GetCaptureMgntB2();
|
||||
|
||||
G4LogicalVolume* logicCaptureMgnt = fDetectorConstruction->GetCaptureMgnt();
|
||||
G4ThreeVector captureMgntCenter =
|
||||
fDetectorConstruction->GetCaptureMgntCenter();
|
||||
|
||||
F04FocusSolenoid* focusSolenoid =
|
||||
new F04FocusSolenoid(B1, B2, l, logicCaptureMgnt,captureMgntCenter);
|
||||
focusSolenoid -> SetHalf(true);
|
||||
|
||||
G4double B = fDetectorConstruction->GetTransferMgntB();
|
||||
|
||||
G4LogicalVolume* logicTransferMgnt =
|
||||
fDetectorConstruction->GetTransferMgnt();
|
||||
G4ThreeVector transferMgntCenter =
|
||||
fDetectorConstruction->GetTransferMgntCenter();
|
||||
|
||||
F04SimpleSolenoid* simpleSolenoid =
|
||||
new F04SimpleSolenoid(B, l, logicTransferMgnt,transferMgntCenter);
|
||||
|
||||
simpleSolenoid->SetColor("1,0,1");
|
||||
simpleSolenoid->SetColor("0,1,1");
|
||||
simpleSolenoid->SetMaxStep(1.5*mm);
|
||||
simpleSolenoid->SetMaxStep(2.5*mm);
|
||||
|
||||
if (fEquation) delete fEquation;
|
||||
|
||||
// Construct equ. of motion of particles through B fields
|
||||
// fEquation = new G4Mag_EqRhs(this);
|
||||
// Construct equ. of motion of particles through e.m. fields
|
||||
// fEquation = new G4EqMagElectricField(this);
|
||||
// Construct equ. of motion of particles including spin through B fields
|
||||
// fEquation = new G4Mag_SpinEqRhs(this);
|
||||
// Construct equ. of motion of particles including spin through e.m. fields
|
||||
fEquation = new G4EqEMFieldWithSpin(this);
|
||||
|
||||
// Get transportation, field, and propagator managers
|
||||
G4TransportationManager* transportManager =
|
||||
G4TransportationManager::GetTransportationManager();
|
||||
|
||||
fFieldManager = GetGlobalFieldManager();
|
||||
|
||||
fFieldPropagator = transportManager->GetPropagatorInField();
|
||||
|
||||
// Need to SetFieldChangesEnergy to account for a time varying electric
|
||||
// field (r.f. fields)
|
||||
fFieldManager->SetFieldChangesEnergy(true);
|
||||
|
||||
// Choose a stepper for integration of the equation of motion
|
||||
SetStepper();
|
||||
|
||||
if (fChordFinder) delete fChordFinder;
|
||||
|
||||
// Create a cord finder providing the (global field, min step length,
|
||||
// a pointer to the stepper)
|
||||
fChordFinder = new G4ChordFinder((G4MagneticField*)this,fMinStep,fStepper);
|
||||
|
||||
// Set accuracy parameters
|
||||
fChordFinder->SetDeltaChord( fDeltaChord );
|
||||
|
||||
fFieldManager->SetAccuraciesWithDeltaOneStep(fDeltaOneStep);
|
||||
|
||||
fFieldManager->SetDeltaIntersection(fDeltaIntersection);
|
||||
|
||||
fFieldPropagator->SetMinimumEpsilonStep(fEpsMin);
|
||||
fFieldPropagator->SetMaximumEpsilonStep(fEpsMax);
|
||||
|
||||
G4cout << "Accuracy Parameters:" <<
|
||||
" MinStep=" << fMinStep <<
|
||||
" DeltaChord=" << fDeltaChord <<
|
||||
" DeltaOneStep=" << fDeltaOneStep << G4endl;
|
||||
G4cout << " " <<
|
||||
" DeltaIntersection=" << fDeltaIntersection <<
|
||||
" EpsMin=" << fEpsMin <<
|
||||
" EpsMax=" << fEpsMax << G4endl;
|
||||
|
||||
fFieldManager->SetChordFinder(fChordFinder);
|
||||
|
||||
G4VPhysicalVolume* currentWorld = fDetectorConstruction->GetWorld();
|
||||
if (fFields) {
|
||||
if (fFields->size()>0) {
|
||||
FieldList::iterator i;
|
||||
for (i=fFields->begin(); i!=fFields->end(); ++i){
|
||||
(*i)->Construct(currentWorld);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
F04GlobalField* F04GlobalField::GetObject(F04DetectorConstruction* det)
|
||||
{
|
||||
if (!fObject) new F04GlobalField(det);
|
||||
return fObject;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
F04GlobalField* F04GlobalField::GetObject()
|
||||
{
|
||||
if (!fObject) new F04GlobalField();
|
||||
return fObject;
|
||||
if (fObject) return fObject;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04Materials.cc 68021 2013-03-13 13:36:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04Materials.cc
|
||||
/// \brief Implementation of the F04Materials class
|
||||
//
|
||||
//
|
||||
|
||||
#include "F04Materials.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04OpticalPhysics.cc 68751 2013-04-05 10:21:24Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04OpticalPhysics.cc
|
||||
/// \brief Implementation of the F04OpticalPhysics class
|
||||
//
|
||||
//
|
||||
|
||||
#include "globals.hh"
|
||||
|
||||
#include "G4Scintillation.hh"
|
||||
@@ -104,11 +106,11 @@ void F04OpticalPhysics::ConstructProcess()
|
||||
theScintProcess->SetScintillationExcitationRatio(0.0);
|
||||
theScintProcess->SetTrackSecondariesFirst(true);
|
||||
|
||||
theParticleIterator->reset();
|
||||
aParticleIterator->reset();
|
||||
|
||||
while( (*theParticleIterator)() ){
|
||||
while( (*aParticleIterator)() ){
|
||||
|
||||
G4ParticleDefinition* particle = theParticleIterator->value();
|
||||
G4ParticleDefinition* particle = aParticleIterator->value();
|
||||
G4String particleName = particle->GetParticleName();
|
||||
|
||||
pManager = particle->GetProcessManager();
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04PhysicsList.cc 78002 2013-12-02 08:25:49Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04PhysicsList.cc
|
||||
/// \brief Implementation of the F04PhysicsList class
|
||||
//
|
||||
//
|
||||
|
||||
#include "F04PhysicsList.hh"
|
||||
#include "F04PhysicsListMessenger.hh"
|
||||
|
||||
@@ -39,7 +41,9 @@
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4ParticleTable.hh"
|
||||
|
||||
#include "G4PhysListFactory.hh"
|
||||
//#include "G4PhysListFactory.hh"
|
||||
#include "FTFP_BERT.hh"
|
||||
#include "QGSP_BERT_HP.hh"
|
||||
|
||||
#include "G4Gamma.hh"
|
||||
#include "G4Electron.hh"
|
||||
@@ -73,14 +77,19 @@ F04PhysicsList::F04PhysicsList(G4String physName) : G4VModularPhysicsList()
|
||||
|
||||
SetVerboseLevel(1);
|
||||
|
||||
G4PhysListFactory factory;
|
||||
// G4PhysListFactory factory;
|
||||
G4VModularPhysicsList* phys = NULL;
|
||||
if (physName == "QGSP_BERT_HP") {
|
||||
phys = new QGSP_BERT_HP;
|
||||
} else {
|
||||
phys = new FTFP_BERT;
|
||||
}
|
||||
|
||||
if (factory.IsReferencePhysList(physName))
|
||||
phys =factory.GetReferencePhysList(physName);
|
||||
// if (factory.IsReferencePhysList(physName))
|
||||
// phys =factory.GetReferencePhysList(physName);
|
||||
|
||||
// Physics List is defined via environment variable PHYSLIST
|
||||
if (!phys) phys = factory.ReferencePhysList();
|
||||
// if (!phys) phys = factory.ReferencePhysList();
|
||||
|
||||
if (!phys) G4Exception("WLSPhysicsList::WLSPhysicsList","InvalidSetup",
|
||||
FatalException,"PhysicsList does not exist");
|
||||
@@ -115,6 +124,8 @@ void F04PhysicsList::ConstructParticle()
|
||||
{
|
||||
G4VModularPhysicsList::ConstructParticle();
|
||||
|
||||
G4GenericIon::GenericIonDefinition();
|
||||
|
||||
G4DecayTable* muonPlusDecayTable = new G4DecayTable();
|
||||
muonPlusDecayTable -> Insert(new
|
||||
G4MuonDecayChannelWithSpin("mu+",0.986));
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04PhysicsListMessenger.cc 68021 2013-03-13 13:36:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04PhysicsListMessenger.cc
|
||||
/// \brief Implementation of the F04PhysicsListMessenger class
|
||||
//
|
||||
//
|
||||
|
||||
#include "globals.hh"
|
||||
|
||||
#include "F04PhysicsListMessenger.hh"
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04PrimaryGeneratorAction.cc 78002 2013-12-02 08:25:49Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04PrimaryGeneratorAction.cc
|
||||
/// \brief Implementation of the F04PrimaryGeneratorAction class
|
||||
//
|
||||
//
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include "G4Event.hh"
|
||||
#include "G4ParticleGun.hh"
|
||||
@@ -44,13 +46,11 @@
|
||||
#include "F04DetectorConstruction.hh"
|
||||
#include "F04PrimaryGeneratorMessenger.hh"
|
||||
|
||||
G4bool F04PrimaryGeneratorAction::fFirst = false;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
F04PrimaryGeneratorAction::
|
||||
F04PrimaryGeneratorAction(F04DetectorConstruction* detectorConstruction)
|
||||
: fDetector(detectorConstruction), fRndmFlag("off"),
|
||||
: fDetector(detectorConstruction), fRndmFlag("off"), fFirst(false),
|
||||
fXvertex(0.), fYvertex(0.), fZvertex(0.),
|
||||
fVertexdefined(false)
|
||||
{
|
||||
@@ -88,34 +88,30 @@ void F04PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
|
||||
if (!fFirst) {
|
||||
|
||||
fFirst = true;
|
||||
G4ThreeVector direction(0.0,0.0,1.0);
|
||||
|
||||
G4Navigator* theNavigator =
|
||||
G4TransportationManager::GetTransportationManager()->
|
||||
GetNavigatorForTracking();
|
||||
G4Navigator* aNavigator = new G4Navigator();
|
||||
if ( theNavigator->GetWorldVolume() )
|
||||
aNavigator->SetWorldVolume(theNavigator->GetWorldVolume());
|
||||
{
|
||||
G4Navigator* aNavigator = new G4Navigator();
|
||||
aNavigator->SetWorldVolume(theNavigator->GetWorldVolume());
|
||||
|
||||
G4GeometryManager* geomManager = G4GeometryManager::GetInstance();
|
||||
G4ThreeVector center(0.,0.,0.);
|
||||
aNavigator->LocateGlobalPointAndSetup(center,0,false);
|
||||
|
||||
if (!geomManager->IsGeometryClosed()) {
|
||||
geomManager->OpenGeometry();
|
||||
geomManager->CloseGeometry(true);
|
||||
}
|
||||
|
||||
G4ThreeVector center(0.,0.,0.);
|
||||
aNavigator->LocateGlobalPointAndSetup(center,0,false);
|
||||
|
||||
G4TouchableHistoryHandle touchable = aNavigator->
|
||||
G4TouchableHistoryHandle touchable = aNavigator->
|
||||
CreateTouchableHistoryHandle();
|
||||
|
||||
// set Global2local transform
|
||||
fGlobal2local = touchable->GetHistory()->GetTopTransform();
|
||||
// set Global2local transform
|
||||
fGlobal2local = touchable->GetHistory()->GetTopTransform();
|
||||
|
||||
G4ThreeVector direction(0.0,0.0,1.0);
|
||||
direction = fGlobal2local.Inverse().TransformAxis(direction);
|
||||
direction = fGlobal2local.Inverse().TransformAxis(direction);
|
||||
delete aNavigator;
|
||||
}
|
||||
|
||||
fParticleGun->SetParticleMomentumDirection(direction);
|
||||
fParticleGun->SetParticleMomentumDirection(direction);
|
||||
}
|
||||
|
||||
G4double x0,y0,z0 ;
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04PrimaryGeneratorMessenger.cc 77884 2013-11-29 08:41:11Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04PrimaryGeneratorMessenger.cc
|
||||
/// \brief Implementation of the F04PrimaryGeneratorMessenger class
|
||||
//
|
||||
//
|
||||
|
||||
#include "G4UIcmdWithAString.hh"
|
||||
#include "G4UIcmdWithADoubleAndUnit.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
@@ -52,16 +54,19 @@ F04PrimaryGeneratorMessenger::
|
||||
fSetXvertexCmd->SetGuidance(" Set x coord. of the primary vertex.");
|
||||
fSetXvertexCmd->SetParameterName("xv",true);
|
||||
fSetXvertexCmd->SetDefaultValue(0.0*mm);
|
||||
fSetXvertexCmd->SetDefaultUnit("mm");
|
||||
|
||||
fSetYvertexCmd = new G4UIcmdWithADoubleAndUnit("/gun/yvertex",this);
|
||||
fSetYvertexCmd->SetGuidance(" Set y coord. of the primary vertex.");
|
||||
fSetYvertexCmd->SetParameterName("yv",true);
|
||||
fSetYvertexCmd->SetDefaultValue(0.0*mm);
|
||||
fSetYvertexCmd->SetDefaultUnit("mm");
|
||||
|
||||
fSetZvertexCmd = new G4UIcmdWithADoubleAndUnit("/gun/zvertex",this);
|
||||
fSetZvertexCmd->SetGuidance(" Set z coord. of the primary vertex.");
|
||||
fSetZvertexCmd->SetParameterName("zv",true);
|
||||
fSetZvertexCmd->SetDefaultValue(0.0*mm);
|
||||
fSetZvertexCmd->SetDefaultUnit("mm");
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04RunAction.cc 78002 2013-12-02 08:25:49Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04RunAction.cc
|
||||
/// \brief Implementation of the F04RunAction class
|
||||
//
|
||||
//
|
||||
|
||||
#include "F04RunAction.hh"
|
||||
#include "F04RunActionMessenger.hh"
|
||||
|
||||
@@ -35,8 +37,6 @@
|
||||
|
||||
#include "Randomize.hh"
|
||||
|
||||
#include "F04GlobalField.hh"
|
||||
|
||||
#include <ctime>
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
@@ -55,6 +55,7 @@ F04RunAction::~F04RunAction()
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
#include "G4Threading.hh"
|
||||
|
||||
void F04RunAction::BeginOfRunAction(const G4Run* aRun)
|
||||
{
|
||||
@@ -72,21 +73,17 @@ void F04RunAction::BeginOfRunAction(const G4Run* aRun)
|
||||
time_t systime = time(NULL);
|
||||
seeds[0] = (long) systime;
|
||||
seeds[1] = (long) (systime*G4UniformRand());
|
||||
CLHEP::HepRandom::setTheSeeds(seeds);
|
||||
CLHEP::HepRandom::showEngineStatus();
|
||||
G4Random::setTheSeeds(seeds);
|
||||
G4Random::showEngineStatus();
|
||||
} else {
|
||||
CLHEP::HepRandom::showEngineStatus();
|
||||
G4Random::showEngineStatus();
|
||||
}
|
||||
|
||||
if (fSaveRndm > 0) CLHEP::HepRandom::saveEngineStatus("BeginOfRun.rndm");
|
||||
|
||||
FieldList* fields = F04GlobalField::GetObject()->GetFields();
|
||||
|
||||
if (fields) {
|
||||
if (fields->size()>0) {
|
||||
FieldList::iterator i;
|
||||
for (i=fields->begin(); i!=fields->end(); ++i)(*i)->Construct();
|
||||
}
|
||||
if (fSaveRndm > 0)
|
||||
{
|
||||
std::ostringstream os;
|
||||
os<<"beginOfRun_"<<G4Threading::G4GetThreadId()<<".rndm";
|
||||
G4Random::saveEngineStatus(os.str().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,7 +92,11 @@ void F04RunAction::BeginOfRunAction(const G4Run* aRun)
|
||||
void F04RunAction::EndOfRunAction(const G4Run*)
|
||||
{
|
||||
if (fSaveRndm == 1) {
|
||||
CLHEP::HepRandom::showEngineStatus();
|
||||
CLHEP::HepRandom::saveEngineStatus("endOfRun.rndm");
|
||||
G4Random::showEngineStatus();
|
||||
std::ostringstream os;
|
||||
os<<"endOfRun_"<<G4Threading::G4GetThreadId()<<".rndm";
|
||||
G4Random::saveEngineStatus(os.str().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04RunActionMessenger.cc 76690 2013-11-14 08:45:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04RunActionMessenger.cc
|
||||
/// \brief Implementation of the F04RunActionMessenger class
|
||||
//
|
||||
//
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
|
||||
@@ -89,8 +91,8 @@ void F04RunActionMessenger::SetNewValue(G4UIcommand* command,G4String newValue)
|
||||
|
||||
if (command == fRndmReadCmd)
|
||||
{ G4cout << "\n---> rndm status restored from file: " << newValue << G4endl;
|
||||
CLHEP::HepRandom::restoreEngineStatus(newValue);
|
||||
CLHEP::HepRandom::showEngineStatus();
|
||||
G4Random::restoreEngineStatus(newValue);
|
||||
G4Random::showEngineStatus();
|
||||
}
|
||||
|
||||
if(command == fSetAutoSeedCmd)
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04SimpleSolenoid.cc 68021 2013-03-13 13:36:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04SimpleSolenoid.cc
|
||||
/// \brief Implementation of the F04SimpleSolenoid class
|
||||
//
|
||||
//
|
||||
|
||||
#include "globals.hh"
|
||||
|
||||
#include "G4GeometryManager.hh"
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04StackingAction.cc 68021 2013-03-13 13:36:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04StackingAction.cc
|
||||
/// \brief Implementation of the F04StackingAction class
|
||||
//
|
||||
//
|
||||
|
||||
#include "F04StackingAction.hh"
|
||||
|
||||
#include "G4RunManager.hh"
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04StepMax.cc 68021 2013-03-13 13:36:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04StepMax.cc
|
||||
/// \brief Implementation of the F04StepMax class
|
||||
//
|
||||
//
|
||||
|
||||
#include "G4Track.hh"
|
||||
#include "G4VParticleChange.hh"
|
||||
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04SteppingAction.cc 73014 2013-08-15 08:54:47Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04SteppingAction.cc
|
||||
/// \brief Implementation of the F04SteppingAction class
|
||||
//
|
||||
//
|
||||
|
||||
#include "G4Track.hh"
|
||||
|
||||
#include "F04SteppingAction.hh"
|
||||
@@ -46,7 +48,7 @@ F04SteppingAction::F04SteppingAction()
|
||||
fTargetVolume(0),
|
||||
fTestPlaneVolume(0)
|
||||
{
|
||||
fSteppingMessenger = new F04SteppingActionMessenger(this);
|
||||
fSteppingMessenger = new F04SteppingActionMessenger();
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -23,20 +23,20 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04SteppingActionMessenger.cc 73014 2013-08-15 08:54:47Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04SteppingActionMessenger.cc
|
||||
/// \brief Implementation of the F04SteppingActionMessenger class
|
||||
//
|
||||
//
|
||||
|
||||
#include "G4UIdirectory.hh"
|
||||
#include "F04SteppingAction.hh"
|
||||
|
||||
#include "F04SteppingActionMessenger.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
F04SteppingActionMessenger::
|
||||
F04SteppingActionMessenger(F04SteppingAction* steppingAction)
|
||||
: fSteppingAction (steppingAction)
|
||||
F04SteppingActionMessenger()
|
||||
{
|
||||
fSteppingDir = new G4UIdirectory("/stepping/");
|
||||
fSteppingDir->SetGuidance("stepping control");
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04SteppingVerbose.cc 68021 2013-03-13 13:36:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04SteppingVerbose.cc
|
||||
/// \brief Implementation of the F04SteppingVerbose class
|
||||
//
|
||||
//
|
||||
|
||||
#include "G4UnitsTable.hh"
|
||||
|
||||
#include "F04SteppingVerbose.hh"
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04TrackingAction.cc 68021 2013-03-13 13:36:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04TrackingAction.cc
|
||||
/// \brief Implementation of the F04TrackingAction class
|
||||
//
|
||||
//
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4RunManager.hh"
|
||||
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04Trajectory.cc 76690 2013-11-14 08:45:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04Trajectory.cc
|
||||
/// \brief Implementation of the F04Trajectory class
|
||||
//
|
||||
//
|
||||
|
||||
#include "G4AttDef.hh"
|
||||
#include "G4AttValue.hh"
|
||||
#include "G4AttDefStore.hh"
|
||||
@@ -43,7 +45,7 @@
|
||||
#include "G4AttCheck.hh"
|
||||
#endif
|
||||
|
||||
G4Allocator<F04Trajectory> myTrajectoryAllocator;
|
||||
G4ThreadLocal G4Allocator<F04Trajectory>* F04TrajectoryAllocator=0;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -119,15 +121,6 @@ void F04Trajectory::DrawTrajectory() const
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void F04Trajectory::DrawTrajectory(G4int i_mode) const
|
||||
{
|
||||
// Invoke the default implementation in G4VTrajectory...
|
||||
G4VTrajectory::DrawTrajectory(i_mode);
|
||||
// ... or override with your own code here.
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void F04Trajectory::AppendStep(const G4Step* aStep)
|
||||
{
|
||||
fpPointsContainer->push_back(new F04TrajectoryPoint(aStep));
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04TrajectoryPoint.cc 76690 2013-11-14 08:45:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04TrajectoryPoint.cc
|
||||
/// \brief Implementation of the F04TrajectoryPoint class
|
||||
//
|
||||
//
|
||||
|
||||
#include "F04TrajectoryPoint.hh"
|
||||
|
||||
#include "G4Step.hh"
|
||||
@@ -45,7 +47,7 @@
|
||||
#include "G4AttCheck.hh"
|
||||
#endif
|
||||
|
||||
G4Allocator<F04TrajectoryPoint> aTrajPointAllocator;
|
||||
G4ThreadLocal G4Allocator<F04TrajectoryPoint>* F04TrajPointAllocator=0;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: F04UserTrackInformation.cc 68021 2013-03-13 13:36:07Z gcosmo $
|
||||
//
|
||||
/// \file field/field04/src/F04UserTrackInformation.cc
|
||||
/// \brief Implementation of the F04UserTrackInformation class
|
||||
//
|
||||
//
|
||||
|
||||
#include "F04UserTrackInformation.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
Reference in New Issue
Block a user