CMS 3D CMS Logo

VisG4ExampleSetup.cc

Go to the documentation of this file.
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 }

Generated on Tue Jun 9 17:49:46 2009 for CMSSW by  doxygen 1.5.4