Import Geant4 0.0.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-01 15:25:35 +02:00
parent 54d6b71f95
commit b97f8d0df7
3237 changed files with 807095 additions and 0 deletions
@@ -0,0 +1,366 @@
// This code implementation is the intellectual property of
// the RD44 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: G4ProcessTableMessenger.cc,v 2.3 1998/08/17 03:35:44 kurasige Exp $
// GEANT4 tag $Name: geant4-00 $
//
//
//---------------------------------------------------------------
//
// G4ProcessTableMessenger.cc
//
// Description:
// This is a messenger class to interface to exchange information
// between ProcessTable and UI.
//
//
// History:
// 15 Aug. 1998, H. Kurashige
//---------------------------------------------------------------
#include "G4ProcessTableMessenger.hh"
#include "G4UImanager.hh"
#include "G4UIdirectory.hh"
#include "G4UIcmdWithoutParameter.hh"
#include "G4UIcmdWithAnInteger.hh"
#include "G4UIcmdWithAString.hh"
#include "G4VProcess.hh"
#include "G4ProcessManager.hh"
#include "G4ProcessTable.hh"
#include "G4ParticleTable.hh"
#include "G4ios.hh"
#include <iomanip.h>
#include <rw/ctoken.h>
#include <rw/rstream.h>
#ifdef WIN32
# include <Strstrea.h>
#else
# include <strstream.h>
#endif
/////////////////////////////////////////
G4int G4ProcessTableMessenger::NumberOfProcessType = 10;
//////////////////////////
G4ProcessTableMessenger::G4ProcessTableMessenger(G4ProcessTable* pTable)
:theProcessTable(pTable)
{
currentProcessTypeName = "all";
currentProcessName = "all";
currentParticleName = "all";
//Commnad /particle/process
thisDirectory = new G4UIdirectory("/process/");
thisDirectory->SetGuidance("Process Table control commands.");
//Commnad /particle/process/list
listCmd = new G4UIcmdWithAString("/process/list",this);
listCmd->SetGuidance("List up process names");
listCmd->SetGuidance(" list [type] ");
listCmd->SetGuidance(" type: process type [all:for all proceeses]");
listCmd->SetParameterName("type", true);
listCmd->SetDefaultValue("all");
SetNumberOfProcessType();
G4String candidates = "all";
for (G4int idx = 0; idx < NumberOfProcessType ; idx ++ ) {
candidates += " " +
G4VProcess::GetProcessTypeName(G4ProcessType(idx));
}
listCmd->SetCandidates(candidates);
//Commnad /particle/process/Verbose
verboseCmd = new G4UIcmdWithAnInteger("/process/verbose",this);
verboseCmd->SetGuidance("Set Verbose Level for Process Table");
verboseCmd->SetGuidance(" verbose [level]");
verboseCmd->SetGuidance(" level: verbose level");
verboseCmd->SetParameterName("verbose", true);
verboseCmd->SetDefaultValue(1);
verboseCmd->SetRange("verbose >=0");
//Commnad /particle/process/dump
dumpCmd = new G4UIcommand("/process/dump",this);
dumpCmd->SetGuidance("Dump process information");
dumpCmd->SetGuidance(" dump name [particle]");
dumpCmd->SetGuidance(" name: process name or type name");
dumpCmd->SetGuidance(" particle: particle name [all: for all particles]");
G4UIparameter* param = new G4UIparameter("procName",'s',false);
dumpCmd->SetParameter(param);
param = new G4UIparameter("particle",'s',true);
param->SetDefaultValue("all");
dumpCmd->SetParameter(param);
//Commnad /particle/process/activate
activateCmd = new G4UIcommand("/process/activate",this);
activateCmd->SetGuidance("Activate processes ");
activateCmd->SetGuidance(" Activate name [particle]");
activateCmd->SetGuidance(" name: process name or type name");
activateCmd->SetGuidance(" particle: particle name [all: for all particles]");
param = new G4UIparameter("procName",'s',false);
activateCmd->SetParameter(param);
param = new G4UIparameter("particle",'s',true);
param->SetDefaultValue("all");
activateCmd->SetParameter(param);
//Commnad /particle/process/inactivate
inactivateCmd = new G4UIcommand("/process/inactivate",this);
inactivateCmd->SetGuidance("Inactivate process ");
inactivateCmd->SetGuidance("Inactivate processes ");
inactivateCmd->SetGuidance(" Inactivate name [particle]");
inactivateCmd->SetGuidance(" name: process name or type name");
inactivateCmd->SetGuidance(" particle: particle name [all: for all particles]");
param = new G4UIparameter("procName",'s',false);
inactivateCmd->SetParameter(param);
param = new G4UIparameter("particle",'s',true);
param->SetDefaultValue("all");
inactivateCmd->SetParameter(param);
}
//////////////////
G4ProcessTableMessenger::~G4ProcessTableMessenger()
{
delete activateCmd;
delete inactivateCmd;
delete verboseCmd;
delete dumpCmd;
delete listCmd;
delete thisDirectory;
}
///////////////
void G4ProcessTableMessenger::SetNewValue(G4UIcommand * command,G4String newValue)
{
G4ProcessTable::G4ProcNameVector* procNameVector
= theProcessTable->GetNameList();
G4ProcessTable::G4ProcTableVector* pTblVector
= theProcessTable->GetProcTableVector();
G4int idx;
G4ProcessVector* tmpVector;
G4int type = -1;
if( command == listCmd ){
//Commnad /process/list
type = -1;
if (newValue == "all") {
currentProcessTypeName = newValue;
} else {
type = GetProcessType(newValue);
if (type <0) {
G4cout << " illegal type !!! " << endl;
} else {
currentProcessTypeName = newValue;
}
}
G4int counter = 0;
for (idx = 0; idx < procNameVector->length(); idx++) {
G4String name = (*procNameVector)(idx);
tmpVector = theProcessTable->FindProcesses(name);
if ( (type <0) || ( ((*tmpVector)(0)->GetProcessType()) == type) ) {
if ( counter%4 != 0) G4cout << ",";
G4cout << setw(19) << name;
if ((counter++)%4 == 3) {
G4cout << endl;
}
}
}
G4cout << endl;
delete tmpVector;
//Commnad /process/list
} else if( command==verboseCmd ) {
//Commnad /process/verbose
theProcessTable->SetVerboseLevel(verboseCmd->GetNewIntValue(newValue));
//Commnad /process/verbose
} else {
RWCTokenizer next( newValue );
// check 1st argument
currentProcessName = next();
G4bool isNameFound = false;
G4bool isProcName = false;
if ( procNameVector->contains(currentProcessName) ){
isNameFound = true;
isProcName = true;
} else {
type = GetProcessType(currentProcessName);
if (type >=0) {
isNameFound = true;
} else {
// no processes with specifed name
G4cout << " illegal process (or type) name " << endl;
currentProcessName = "";
return;
}
}
// check 2nd argument
currentParticleName = next();
G4bool isParticleFound = false;
G4ParticleDefinition* currentParticle = NULL;
if ( currentParticleName == "all" ) {
isParticleFound = true;
} else {
isParticleFound = G4ParticleTable::GetParticleTable()->contains(currentParticleName);
if (isParticleFound) {
currentParticle = G4ParticleTable::GetParticleTable()->FindParticle(currentParticleName);
}
}
if ( !isParticleFound ) {
// no particle with specifed name
G4cout << " illegal particle name " << endl;
currentParticleName = "";
return;
}
if( command==dumpCmd ) {
// process/dump
if (isProcName) {
tmpVector = theProcessTable->FindProcesses(currentProcessName);
} else {
tmpVector = theProcessTable->FindProcesses(G4ProcessType(type));
}
for (G4int i=0; i<tmpVector->length(); i++) {
theProcessTable->DumpInfo( (*tmpVector)(i), currentParticle );
}
delete tmpVector;
// process/dump
} else if ( (command==activateCmd) || (command==inactivateCmd)) {
// process/activate , inactivate
G4bool fActive = (command==activateCmd);
if (isProcName) {
if ( currentParticle == NULL ) {
theProcessTable->SetProcessActivation(currentProcessName,
fActive);
} else {
theProcessTable->SetProcessActivation(currentProcessName,
currentParticle,
fActive);
}
} else {
if ( currentParticle == NULL ) {
theProcessTable->SetProcessActivation(G4ProcessType(type),
fActive);
} else {
theProcessTable->SetProcessActivation(G4ProcessType(type),
currentParticle,
fActive);
}
}
// process/activate , inactivate
}
}
}
//////////////////
G4String G4ProcessTableMessenger::GetCurrentValue(G4UIcommand * command)
{
G4ProcessTable::G4ProcNameVector* procNameVector
= theProcessTable->GetNameList();
G4String candidates;
G4String returnValue('\0');
char line[255];
ostrstream os(line,255);
G4UIparameter * param;
G4int idx;
if( command==verboseCmd ){
//Commnad /process/verbose
os << theProcessTable->GetVerboseLevel() << '\0';
returnValue = G4String(line);
} else if ( command==listCmd ){
//Commnad /process/list
candidates = "all";
for (idx = 0; idx < NumberOfProcessType ; idx ++ ) {
candidates += " " +
G4VProcess::GetProcessTypeName(G4ProcessType(idx));
}
listCmd->SetCandidates(candidates);
returnValue = currentProcessTypeName;
} else {
//Commnad /process/dump, activate, inactivate
// process name
param = command->GetParameter(0);
candidates = "";
for (idx = 0; idx < procNameVector->length() ; idx ++ ) {
candidates += " " + (*procNameVector)(idx);
}
param->SetParameterCandidates(candidates);
// particle name
param = command->GetParameter(1);
candidates = "all";
G4ParticleTable::G4PTblDicIterator *piter
= G4ParticleTable::GetParticleTable()->GetIterator();
piter -> reset();
while( (*piter)() ){
G4ParticleDefinition *particle = piter->value();
candidates += " " + particle->GetParticleName();
}
param->SetParameterCandidates(candidates);
returnValue = currentProcessName + " " + currentParticleName;
}
return returnValue;
}
/////////////////
G4String G4ProcessTableMessenger::GetProcessTypeName(G4ProcessType aType) const
{
return G4VProcess::GetProcessTypeName(aType);
}
/////////////////
G4int G4ProcessTableMessenger::GetProcessType(const G4String& aTypeName) const
{
G4int type = -1;
for (G4int idx = 0; idx < NumberOfProcessType ; idx ++ ) {
if (aTypeName == G4VProcess::GetProcessTypeName(G4ProcessType(idx)) ) {
type = idx;
break;
}
}
return type;
}
/////////////////
void G4ProcessTableMessenger::SetNumberOfProcessType()
{
G4bool isFoundEndMark = false;
G4int idx;
for (idx = 0; idx < 1000 ; idx ++ ) {
G4String typeName = G4VProcess::GetProcessTypeName(G4ProcessType(idx));
if ( isFoundEndMark = typeName.contains("---")) break;
}
if ( isFoundEndMark ) {
NumberOfProcessType = idx;
} else {
G4Exception("G4ProcessTableMessenger::SetNumberOfProcessType(): No End Mark for G4VProcess::GetProcessTypeName() ");
}
}