musrsim/musrSim.cc
Kamil Sedlak d1b6c85605 19.5.2011 Kamil Sedlak
1) bug fix in musrAnalysis.cxx for rotation reference frame causing some memory leak
2) Implementing prompt peak variables and conditions (usefull only for investigations
   of the origin of the prompt peak).
3) Updating the documentation describing changes in point 2)
2011-05-19 15:08:01 +00:00

167 lines
5.4 KiB
C++

#include "musrDetectorConstruction.hh"
#include "musrPhysicsList.hh"
#include "musrPrimaryGeneratorAction.hh"
#include "musrRunAction.hh"
#include "musrEventAction.hh"
#include "musrStackingAction.hh"
#include "musrSteppingAction.hh"
#include "musrSteppingVerbose.hh"
#include "G4RunManager.hh"
#include "G4UImanager.hh"
#include "G4UIterminal.hh"
#include "G4UItcsh.hh"
//#include <TApplication.h>
//#include <TSystem.h>
// The following two lines are needed to cope with the problem of
// "Error in <TPluginManager::FindHandler>: Cannot find plugin handler for TVirtualStreamerInfo!
// Does $ROOTSYS/etc/plugins/TVirtualStreamerInfo exist?"
#include "TROOT.h"
#include "TPluginManager.h"
#include "Randomize.hh"
#include <X11/Xlib.h>
#ifdef G4VIS_USE
// #include "musrVisManager.hh"
#include "G4VisExecutive.hh"
#include "G4TrajectoryDrawByCharge.hh" // TS Trajectory drawing by ID or charge
#endif
#include "musrRootOutput.hh"
#include "musrParameters.hh"
#include "musrErrorMessage.hh"
//#include "F04GlobalField.hh"
int main(int argc,char** argv) {
XInitThreads();
G4cout<<"\n\n*************************************************************"<<G4endl;
G4cout<<" musrSim version 1.0.1 released on 19 May 2011"<<G4endl;
G4cout<<" WWW: http://lmu.web.psi.ch/simulation/index.html"<<G4endl;
// choose the Random engine
// CLHEP::HepRandom::setTheEngine(new CLHEP::RanecuEngine); // the /musr/run/randomOption 2 does not work with RanecuEngine
CLHEP::HepRandom::setTheEngine(new CLHEP::HepJamesRandom);
//my Verbose output class
G4VSteppingVerbose::SetInstance(new musrSteppingVerbose);
// Run manager
G4RunManager * runManager = new G4RunManager;
// Create class "myParameters", which is a collection of many different parameters
G4String steeringFileName=argv[1];
musrParameters* myParameters = new musrParameters(steeringFileName);
// Create class "musrErrorMessage"
musrErrorMessage* myErrorMessage = new musrErrorMessage();
// TApplication* myapp=new TApplication("myapp",0,0);
// Create Root class for storing the output of the Geant simulation
musrRootOutput* myRootOutput = new musrRootOutput();
// The following command is needed to cope with the problem of
// "Error in <TPluginManager::FindHandler>: Cannot find plugin handler for TVirtualStreamerInfo!
// Does $ROOTSYS/etc/plugins/TVirtualStreamerInfo exist?"
// /* magic line from Rene - for future reference! */
gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
"*",
"TStreamerInfo",
"RIO",
"TStreamerInfo()");
// UserInitialization classes (mandatory)
// musrDetectorConstruction* musrdetector = new musrDetectorConstruction;
if (argc>1) {
G4int myRunNr=atoi(argv[1]); // Get the run number from the name of the
// parameter file, if it starts with a number.
if (myRunNr>0) {runManager->SetRunIDCounter(myRunNr);}
// musrdetector->SetInputParameterFileName(argv[1]);
}
musrDetectorConstruction* musrdetector = new musrDetectorConstruction(steeringFileName);
runManager->SetUserInitialization(musrdetector);
runManager->SetUserInitialization(new musrPhysicsList);
#ifdef G4VIS_USE
// Visualization, if you choose to have it!
// G4VisManager* visManager = new musrVisManager;
G4VisManager* visManager = new G4VisExecutive; // TS Trajectory drawing by ID or charge
visManager->Initialize();
#endif
// UserAction classes
runManager->SetUserAction(new musrPrimaryGeneratorAction(musrdetector));
runManager->SetUserAction(new musrRunAction);
runManager->SetUserAction(new musrEventAction);
// Initiate musrStackingAction only if optical photons are required (otherwise not needed)
if (musrParameters::boolG4OpticalPhotons) runManager->SetUserAction(new musrStackingAction);
runManager->SetUserAction(new musrSteppingAction);
//Initialize G4 kernel
runManager->Initialize();
//get the pointer to the User Interface manager
G4UImanager * UI = G4UImanager::GetUIpointer();
if(argc==1)
// Define (G)UI terminal for interactive mode
{
// G4UIterminal is a (dumb) terminal.
G4UIsession * session = 0;
#ifdef G4UI_USE_TCSH
session = new G4UIterminal(new G4UItcsh);
#else
session = new G4UIterminal();
#endif
UI->ApplyCommand("/control/execute vis.mac");
session->SessionStart();
delete session;
}
else
// Batch mode
{
G4String command = "/control/execute ";
G4String fileName = argv[1];
UI->ApplyCommand(command+fileName);
if (argc>2) {
G4String SecondArgument = argv[2];
if (SecondArgument=="idle") {
G4UIsession * session = 0;
#ifdef G4UI_USE_TCSH
session = new G4UIterminal(new G4UItcsh);
#else
session = new G4UIterminal();
#endif
G4cout<<"Go to idle state now:"<<G4endl;
session->SessionStart();
delete session;
}
}
}
// myapp->Run(kTRUE);
#ifdef G4VIS_USE
delete visManager;
#endif
delete myRootOutput;
delete myErrorMessage;
delete myParameters;
// cks runManager->SetVerboseLevel(2); // This line can help debug crashes during the runManager delete
delete runManager;
// F04GlobalField* myGlobalField = F04GlobalField::getObject();
// if (myGlobalField!=NULL) {delete myGlobalField;}
return 0;
}