00001 //<<<<<< INCLUDES >>>>>> 00002 00003 #include "VisExamples/VisG4ExN02/src/VisG4ExampleSetup.h" 00004 #include "VisExamples/VisG4ExN02/src/VisG4ExampleDetector.h" 00005 #include "VisExamples/VisG4ExN02/src/VisG4ExamplePhysics.h" 00006 #include "VisExamples/VisG4ExN02/src/VisG4ExampleGenerator.h" 00007 #include "VisExamples/VisG4ExN02/src/VisG4ExampleRunAction.h" 00008 #include "VisExamples/VisG4ExN02/src/VisG4ExampleEventAction.h" 00009 #include "VisGeant4/VisG4Core/interface/VisG4UIManager.h" 00010 #include "VisGeant4/VisG4Core/interface/VisG4VisManager.h" 00011 #include "VisGeant4/VisG4Volumes/interface/VisG4GeometryTwig.h" 00012 #include "VisGeant4/VisG4Volumes/interface/VisG4TwigOps.h" 00013 #include "VisGeant4/VisG4Transients/interface/VisG4TrajectoriesTwig.h" 00014 #include "VisGeant4/VisG4Transients/interface/VisG4TransientsTwig.h" 00015 #include "VisGeant4/VisG4Fields/interface/VisG4AnnotationsTwig.h" 00016 #include "VisGeant4/VisG4Fields/interface/VisG4MagFieldTwig.h" 00017 #include "Iguana/Studio/interface/IgTwigOps.h" 00018 #include "Iguana/Studio/interface/IgQtObjectMenuService.h" 00019 #include "Iguana/Studio/interface/IgQtObjectMenuMessage.h" 00020 #include "Iguana/Studio/interface/IgStudioDriver.h" 00021 #include "Iguana/Studio/interface/IgDocument.h" 00022 #include "Iguana/Studio/interface/IgDocumentData.h" 00023 #include "Iguana/Studio/interface/IgPage.h" 00024 #include "Iguana/Studio/interface/IgMDIView.h" 00025 #include "Iguana/Framework/interface/IgRepSet.h" 00026 #include <G4RunManager.hh> 00027 #include <qapplication.h> 00028 #undef emit 00029 #include <classlib/utils/DebugAids.h> 00030 #include <cstdlib> 00031 00032 //<<<<<< PRIVATE DEFINES >>>>>> 00033 //<<<<<< PRIVATE CONSTANTS >>>>>> 00034 //<<<<<< PRIVATE TYPES >>>>>> 00035 //<<<<<< PRIVATE VARIABLE DEFINITIONS >>>>>> 00036 //<<<<<< PUBLIC VARIABLE DEFINITIONS >>>>>> 00037 //<<<<<< CLASS STRUCTURE INITIALIZATION >>>>>> 00038 00039 IG_DEFINE_STATE_ELEMENT (VisG4ExampleSetup, "Services/Studio/Session Types/Vis Example--G4 N02"); 00040 00041 //<<<<<< PRIVATE FUNCTION DEFINITIONS >>>>>> 00042 //<<<<<< PUBLIC FUNCTION DEFINITIONS >>>>>> 00043 //<<<<<< MEMBER FUNCTION DEFINITIONS >>>>>> 00044 00045 VisG4ExampleSetup::VisG4ExampleSetup (IgState *state) 00046 : m_state (state), 00047 m_studio (0), 00048 m_document (0) 00049 { ASSERT (m_state); m_state->put (s_key, this); } 00050 00051 VisG4ExampleSetup::~VisG4ExampleSetup (void) 00052 { ASSERT (m_state); m_state->detach (s_key); /* delete m_document; */ } 00053 00054 bool 00055 VisG4ExampleSetup::setup (IgStudioDriver *into) 00056 { 00057 ASSERT (into); 00058 ASSERT (! m_studio); 00059 m_studio = into; 00060 00061 // Setup G4. 00062 QApplication::setOverrideCursor (Qt::waitCursor); 00063 00064 // Create document. 00065 ASSERT (! m_document); 00066 m_document = new IgDocument (m_studio); 00067 m_document->setName ("Geant4 N02 Visualisation Demo"); 00068 IgPage *page = new IgPage (m_document); 00069 new IgMDIView (page); 00070 00071 // Add data. 00072 G4RunManager *rm = new G4RunManager; 00073 VisG4UIManager *uim = new VisG4UIManager (m_state); 00074 VisG4VisManager *vm = new VisG4VisManager (m_state); 00075 00076 ASSERT (IgQtObjectMenuService::get (m_state)); 00077 IgQtObjectMenuService::get (m_state) 00078 ->add (lat::CreateCallback (new IgTwigOps, &IgTwigOps::menuAction)); 00079 IgQtObjectMenuService::get (m_state) 00080 ->add (lat::CreateCallback (new VisG4TwigOps, &VisG4TwigOps::menuAction)); 00081 00082 // Build and browse the twigs 00083 IgCompoundTwig *t; 00084 t = new VisG4GeometryTwig (vm, m_document->data ()->root ()); 00085 t = new VisG4TransientsTwig (m_document->data ()->root ()); 00086 new VisG4TrajectoriesTwig (t); 00087 t = new VisG4AnnotationsTwig (m_document->data ()->root ()); 00088 new VisG4MagFieldTwig (t, m_state); 00089 00090 IgRepSet::update (m_document->data ()->root (), IgTwig::STRUCTURE_MASK); 00091 00092 // Initialise G4 run configuration. 00093 VisG4ExampleDetector *det = new VisG4ExampleDetector; 00094 rm->SetUserInitialization (det); 00095 rm->SetUserInitialization (new VisG4ExamplePhysics); 00096 rm->SetUserAction (new VisG4ExampleGenerator (det)); 00097 rm->SetUserAction (new VisG4ExampleRunAction); 00098 rm->SetUserAction (new VisG4ExampleEventAction); 00099 rm->Initialize (); 00100 00101 // Start the G4 command line loop (Qt event loop is in studio). 00102 uim->start (); 00103 00104 QApplication::restoreOverrideCursor (); 00105 return true; 00106 }