Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:59:24

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 //
0027 //
0028 // 
0029 
0030 // Class Description:
0031 //
0032 // The GEANT4 Visualization Manager - John Allison 02/Jan/1996.
0033 //
0034 // G4VisManager is a "Singleton", i.e., only one instance of it or any
0035 // derived class may exist.  A G4Exception is thrown if an attempt is
0036 // made to instantiate more than one.
0037 //
0038 // It is also an abstract class, so the user must derive his/her own
0039 // class from G4VisManager, implement the pure virtual function
0040 // RegisterGraphicsSystems, and instantiate an object of the derived
0041 // class - for an example see
0042 // visualization/include/G4VisExecutive.hh/icc.
0043 //
0044 // The recommended way for users to obtain a pointer to the vis
0045 // manager is with G4VVisManager::GetConcreteInstance (), being always
0046 // careful to test for non-zero.  This pointer is non-zero only when
0047 // (a) an object of the derived class exists and (b) when there is a
0048 // valid viewer available.
0049 //
0050 // Graphics system registration is normally done through the protected
0051 // pure virtual function RegisterGraphicsSystems called from
0052 // Initialise ().  You can also use the public function
0053 // RegisterGraphicsSystem (new MyGraphicsSystem) if you have your own
0054 // graphics system. A graphics system is, in effect, a factory for
0055 // scene handlers and viewers.
0056 //
0057 // The VisManager creates and manages graphics systems, scenes, scene
0058 // handlers, viewers and some models and model makers.  You can have
0059 // any number.  It has the concept of a "current viewer", and the
0060 // "current scene handler", the "current scene" and the "current
0061 // graphics system" which go with it.  You can select the current
0062 // viewer.  Most of the the operations of the VisManager take place
0063 // with the current viewer, in particular, the Draw operations.
0064 //
0065 // Each scene comprises drawable objects such as detector components
0066 // and trajectories, hits and digis when appropriate.  A scene handler
0067 // translates a scene into graphics-system-specific function calls
0068 // and, possibly, a graphics-system-dependent database - display
0069 // lists, scene graphs, etc.  Each viewer has its "view parameters"
0070 // (see class description of G4ViewParameters for available parameters
0071 // and also for a description of the concept of a "standard view" and
0072 // all that).
0073 //
0074 // A friend class G4VisStateDependent is "state dependent", i.e., it
0075 // is notified on change of state (G4ApplicationState).  This is used
0076 // to message the G4VisManager to draw hits, digis and trajectories in
0077 // the current scene at the end of event, as required.
0078 
0079 #ifndef G4VISMANAGER_HH
0080 #define G4VISMANAGER_HH
0081 
0082 // Temporary definition until Xeon Phi can handle full C++11.
0083 #ifndef __MIC__
0084 #define G4VIS_USE_STD11
0085 #endif
0086 
0087 #include "G4VVisManager.hh"
0088 
0089 #include "globals.hh"
0090 #include "G4GraphicsSystemList.hh"
0091 #include "G4ModelingParameters.hh"
0092 #include "G4NullModel.hh"
0093 #include "G4SceneHandlerList.hh"
0094 #include "G4SceneList.hh"
0095 #include "G4TrajectoriesModel.hh"
0096 #include "G4Transform3D.hh"
0097 #include "G4UImessenger.hh"
0098 
0099 #include <iostream>
0100 #include <vector>
0101 #include <map>
0102 
0103 #include "G4Threading.hh"
0104 
0105 class G4Scene;
0106 class G4UIcommand;
0107 class G4UImessenger;
0108 class G4VisStateDependent;
0109 class G4VTrajectoryModel;
0110 class G4VUserVisAction;
0111 template <typename> class G4VFilter;
0112 template <typename> class G4VisFilterManager;
0113 template <typename> class G4VisModelManager;
0114 template <typename> class G4VModelFactory;
0115 class G4Event;
0116 
0117 // Useful typedef's
0118 typedef G4VModelFactory<G4VTrajectoryModel> G4TrajDrawModelFactory;
0119 typedef G4VModelFactory<G4VFilter<G4VTrajectory> > G4TrajFilterFactory;
0120 typedef G4VModelFactory<G4VFilter<G4VHit> > G4HitFilterFactory;
0121 typedef G4VModelFactory<G4VFilter<G4VDigi> > G4DigiFilterFactory;
0122 
0123 class G4VisManager: public G4VVisManager {
0124 
0125   // Management friends...
0126   friend class G4VSceneHandler;
0127   friend class G4VViewer;
0128   friend class G4VisStateDependent;
0129   friend class G4VisCommandList;
0130 
0131   // operator << friends...
0132   friend std::ostream& operator << (std::ostream&, const G4VGraphicsSystem&);
0133   friend std::ostream& operator << (std::ostream&, const G4VSceneHandler&);
0134 
0135 public: // With description
0136 
0137   enum Verbosity {
0138     quiet,         // Nothing is printed.
0139     startup,       // Startup and endup messages are printed...
0140     errors,        // ...and errors...
0141     warnings,      // ...and warnings...
0142     confirmations, // ...and confirming messages...
0143     parameters,    // ...and parameters of scenes and views...
0144     all            // ...and everything available.
0145   };
0146   // Simple graded message scheme.
0147 
0148 protected: // With description
0149 
0150   G4VisManager (const G4String& verbosityString = "warnings");
0151   // The constructor is protected so that an object of the derived
0152   // class may be constructed.
0153 
0154 public: // With description
0155 
0156   virtual ~G4VisManager ();
0157 
0158 private:
0159 
0160   // Private copy constructor and assigment operator - copying and
0161   // assignment not allowed.  Keeps CodeWizard happy.
0162   G4VisManager (const G4VisManager&);
0163   G4VisManager& operator = (const G4VisManager&);
0164 
0165 public:
0166   static G4VisManager* GetInstance ();
0167   // Returns pointer to itself.  Throws a G4Exception if called before
0168   // instantiation.  Intended only for use within the vis category; the
0169   // normal user should instead use G4VVisManager::GetConcreteInstance()
0170   // to get a "higher level" pointer for general use - but always test
0171   // for non-zero.
0172 
0173 public: // With description
0174 
0175   void Initialise ();
0176   void Initialize ();  // Alias Initialise ()
0177 
0178   // Optional registration of user vis actions.  Added to scene with
0179   // /vis/scene/add/userAction.
0180   void RegisterRunDurationUserVisAction
0181   (const G4String& name, G4VUserVisAction*,
0182    const G4VisExtent& = G4VisExtent());
0183   void RegisterEndOfEventUserVisAction
0184   (const G4String& name, G4VUserVisAction*,
0185    const G4VisExtent& = G4VisExtent());
0186   void RegisterEndOfRunUserVisAction
0187   (const G4String& name, G4VUserVisAction*,
0188    const G4VisExtent& = G4VisExtent());
0189 
0190   G4bool RegisterGraphicsSystem (G4VGraphicsSystem*);
0191   // Register an individual graphics system.  Normally this is done in
0192   // a sub-class implementation of the protected virtual function,
0193   // RegisterGraphicsSystems.  See, e.g., G4VisExecutive.icc.
0194 
0195   void RegisterModelFactory(G4TrajDrawModelFactory* factory);
0196   // Register trajectory draw model factory. Assumes ownership of factory.
0197 
0198   void RegisterModel(G4VTrajectoryModel* model);
0199   // Register trajectory model. Assumes ownership of model.
0200 
0201   void RegisterModelFactory(G4TrajFilterFactory* factory);
0202   // Register trajectory filter model factory. Assumes ownership of factory.
0203 
0204   void RegisterModel(G4VFilter<G4VTrajectory>* filter);
0205   // Register trajectory filter model. Assumes ownership of model.
0206 
0207   void RegisterModelFactory(G4HitFilterFactory* factory);
0208   // Register trajectory hit model factory. Assumes ownership of factory.
0209 
0210   void RegisterModel(G4VFilter<G4VHit>* filter);
0211   // Register trajectory hit model. Assumes ownership of model.
0212 
0213   void RegisterModelFactory(G4DigiFilterFactory* factory);
0214   // Register trajectory digi model factory. Assumes ownership of factory.
0215 
0216   void RegisterModel(G4VFilter<G4VDigi>* filter);
0217   // Register trajectory digi model. Assumes ownership of model.
0218 
0219   void SelectTrajectoryModel(const G4String& model);
0220   // Set default trajectory model. Useful for use in compiled code
0221 
0222   void RegisterMessenger(G4UImessenger* messenger);
0223   // Register messenger. Assumes ownership of messenger.
0224 
0225   /////////////////////////////////////////////////////////////////
0226   // Now functions that implement the pure virtual functions of
0227   // G4VVisManager for drawing various visualization primitives, useful
0228   // for representing hits, digis, etc.
0229 
0230   void Draw (const G4Circle&,
0231     const G4Transform3D& objectTransformation = G4Transform3D());
0232 
0233   void Draw (const G4Polyhedron&,
0234     const G4Transform3D& objectTransformation = G4Transform3D());
0235 
0236   void Draw (const G4Polyline&,
0237     const G4Transform3D& objectTransformation = G4Transform3D());
0238 
0239   void Draw (const G4Polymarker&,
0240     const G4Transform3D& objectTransformation = G4Transform3D());
0241 
0242   void Draw (const G4Square&,
0243     const G4Transform3D& objectTransformation = G4Transform3D());
0244 
0245   void Draw (const G4Text&,
0246     const G4Transform3D& objectTransformation = G4Transform3D());
0247 
0248   void Draw2D (const G4Circle&,
0249     const G4Transform3D& objectTransformation = G4Transform3D());
0250 
0251   void Draw2D (const G4Polyhedron&,
0252     const G4Transform3D& objectTransformation = G4Transform3D());
0253 
0254   void Draw2D (const G4Polyline&,
0255     const G4Transform3D& objectTransformation = G4Transform3D());
0256 
0257   void Draw2D (const G4Polymarker&,
0258     const G4Transform3D& objectTransformation = G4Transform3D());
0259 
0260   void Draw2D (const G4Square&,
0261     const G4Transform3D& objectTransformation = G4Transform3D());
0262 
0263   void Draw2D (const G4Text&,
0264     const G4Transform3D& objectTransformation = G4Transform3D());
0265 
0266   ////////////////////////////////////////////////////////////////////
0267   // Now functions that implement the pure virtual functions of
0268   // G4VVisManager for drawing a GEANT4 object.  Note that the
0269   // visualization attributes needed in some cases override any
0270   // visualization attributes that are associated with the object
0271   // itself - thus you can, for example, change the colour of a
0272   // physical volume.
0273 
0274   void Draw (const G4VTrajectory&);
0275 
0276   void Draw (const G4VHit&);
0277 
0278   void Draw (const G4VDigi&);
0279 
0280   void Draw (const G4LogicalVolume&, const G4VisAttributes&,
0281     const G4Transform3D& objectTransformation = G4Transform3D());
0282 
0283   void Draw (const G4VPhysicalVolume&, const G4VisAttributes&,
0284     const G4Transform3D& objectTransformation = G4Transform3D());
0285 
0286   void Draw (const G4VSolid&, const G4VisAttributes&,
0287     const G4Transform3D& objectTransformation = G4Transform3D());
0288 
0289   void DrawGeometry
0290   (G4VPhysicalVolume*, const G4Transform3D& t = G4Transform3D());
0291   // Draws a geometry tree starting at the specified physical volume.
0292 
0293   //////////////////////////////////////////////////////////////////////
0294   // Optional methods that you may use to bracket a series of Draw
0295   // messages that have identical objectTransformation to improve
0296   // drawing speed.  Use Begin/EndDraw for a series of Draw messages,
0297   // Begin/EndDraw2D for a series of Draw2D messages.  Do not mix Draw
0298   // and Draw2D messages.
0299 
0300   void BeginDraw
0301   (const G4Transform3D& objectTransformation = G4Transform3D());
0302 
0303   void EndDraw ();
0304 
0305   void BeginDraw2D
0306   (const G4Transform3D& objectTransformation = G4Transform3D());
0307 
0308   void EndDraw2D ();
0309 
0310   ////////////////////////////////////////////////////////////////////////
0311   // Now other pure virtual functions of G4VVisManager...
0312 
0313   void GeometryHasChanged ();
0314   // Used by run manager to notify change.
0315 
0316   void IgnoreStateChanges(G4bool);
0317   // This method shoud be invoked by a class that has its own event loop,
0318   // such as the RayTracer, material scanner, etc. If the argument is true,
0319   // the following state changes among Idle, GeomClosed and EventProc are
0320   // caused by such a class, and thus not by the ordinary event simulation.
0321   // The same method with false should be invoked once such an event loop
0322   // is over.
0323 
0324   void NotifyHandlers();
0325   // Notify scene handlers (G4VGraphicsScene objects) that the scene
0326   // has changed so that they may rebuild their graphics database, if
0327   // any, and redraw all views.
0328 
0329   void DispatchToModel(const G4VTrajectory&);
0330   // Draw the trajectory.
0331 
0332   G4bool FilterTrajectory(const G4VTrajectory&);
0333   G4bool FilterHit(const G4VHit&);
0334   G4bool FilterDigi(const G4VDigi&);
0335 
0336 #ifdef G4MULTITHREADED
0337 
0338   virtual void SetUpForAThread();
0339   // This method is invoked by G4WorkerRunManager
0340 
0341   static G4ThreadFunReturnType G4VisSubThread(G4ThreadFunArgType);
0342   // Vis sub-thread function.
0343 
0344 #endif
0345 
0346   ////////////////////////////////////////////////////////////////////////
0347   // Administration routines.
0348 
0349   void CreateSceneHandler (const G4String& name = "");
0350   // Creates scene handler for the current system.
0351 
0352   void CreateViewer (const G4String& name = "", const G4String& XGeometry = "");
0353   // Creates viewer for the current scene handler.
0354 
0355 private:
0356 
0357   void BeginOfRun ();
0358 
0359   void BeginOfEvent ();
0360 
0361   void EndOfEvent ();
0362   // This is called on change of state (G4ApplicationState).  It is
0363   // used to draw hits, digis and trajectories if included in the
0364   // current scene at the end of event, as required.
0365 
0366   void EndOfRun ();
0367 
0368 public: // With description
0369 
0370   /////////////////////////////////////////////////////////////////////
0371   // Access functions.
0372 
0373   void Enable();
0374   void Disable();
0375   G4bool IsEnabled() const;
0376   // Global enable/disable functions.
0377 
0378   const G4VTrajectoryModel* CurrentTrajDrawModel() const;
0379 
0380   struct UserVisAction {
0381     UserVisAction(const G4String& name, G4VUserVisAction* pUserVisAction)
0382       :fName(name), fpUserVisAction(pUserVisAction) {}
0383     G4String fName;
0384     G4VUserVisAction* fpUserVisAction;
0385   };
0386   const std::vector<UserVisAction>& GetRunDurationUserVisActions () const;
0387   const std::vector<UserVisAction>& GetEndOfEventUserVisActions  () const;
0388   const std::vector<UserVisAction>& GetEndOfRunUserVisActions    () const;
0389   const std::map<G4VUserVisAction*,G4VisExtent>& GetUserVisActionExtents () const;
0390   G4VGraphicsSystem*           GetCurrentGraphicsSystem    () const;
0391   G4Scene*                     GetCurrentScene             () const;
0392   G4VSceneHandler*             GetCurrentSceneHandler      () const;
0393   G4VViewer*                   GetCurrentViewer            () const;
0394   const G4GraphicsSystemList&  GetAvailableGraphicsSystems ();
0395   // The above is non-const because it checks and updates the List by
0396   // calling RegisterGraphicsSystems() if no graphics systems are
0397   // already registered.
0398   const G4SceneHandlerList&    GetAvailableSceneHandlers   () const;
0399   const G4SceneList&           GetSceneList                () const;
0400   static Verbosity             GetVerbosity                ();
0401   G4bool                       GetTransientsDrawnThisRun   () const;
0402   G4bool                       GetTransientsDrawnThisEvent () const;
0403   G4bool                       GetDrawEventOnlyIfToBeKept  () const;
0404   const G4Event*               GetRequestedEvent           () const;
0405   G4int                        GetNKeepRequests            () const;
0406   G4bool                       GetReviewingKeptEvents      () const;
0407   G4bool                       GetAbortReviewKeptEvents    () const;
0408   G4bool                       GetReviewingPlots           () const;
0409   G4bool                       GetAbortReviewPlots         () const;
0410   const G4ViewParameters&      GetDefaultViewParameters    () const;
0411 #ifdef G4MULTITHREADED
0412   G4int                        GetMaxEventQueueSize        () const;
0413   G4bool                       GetWaitOnEventQueueFull     () const;
0414 #endif
0415   const G4String&              GetDefaultGraphicsSystemName() const;
0416   const G4String&              GetDefaultXGeometryString   () const;
0417   const G4String&              GetDefaultGraphicsSystemBasis() const;
0418   const G4String&              GetDefaultXGeometryStringBasis() const;
0419 
0420   void              SetCurrentGraphicsSystem    (G4VGraphicsSystem*);
0421   void              SetCurrentScene             (G4Scene*);
0422   void              SetCurrentSceneHandler      (G4VSceneHandler*);
0423   void              SetCurrentViewer            (G4VViewer*);
0424   G4SceneHandlerList& SetAvailableSceneHandlers ();  // Returns lvalue.
0425   G4SceneList&      SetSceneList                ();  // Returns lvalue.
0426   void              SetVerboseLevel             (G4int);
0427   void              SetVerboseLevel             (const G4String&);
0428   void              SetVerboseLevel             (Verbosity);
0429   void              SetEventRefreshing          (G4bool);
0430   void              ResetTransientsDrawnFlags   ();
0431   void              SetTransientsDrawnThisRun   (G4bool);
0432   void              SetTransientsDrawnThisEvent (G4bool);
0433   void              SetDrawEventOnlyIfToBeKept  (G4bool);
0434   // If non-zero, requested event is used in G4VSceneHandler::ProcessScene.
0435   void              SetRequestedEvent           (const G4Event*);
0436   void              SetReviewingKeptEvents      (G4bool);
0437   void              SetAbortReviewKeptEvents    (G4bool);
0438   void              SetReviewingPlots           (G4bool);
0439   void              SetAbortReviewPlots         (G4bool);
0440   void              SetDefaultViewParameters    (const G4ViewParameters&);
0441 #ifdef G4MULTITHREADED
0442   void              SetMaxEventQueueSize        (G4int);
0443   void              SetWaitOnEventQueueFull     (G4bool);
0444 #endif
0445   void              SetDefaultGraphicsSystemName(const G4String&);
0446   void              SetDefaultXGeometryString   (const G4String&);
0447   void              SetDefaultGraphicsSystemBasis(const G4String&);
0448   void              SetDefaultXGeometryStringBasis(const G4String&);
0449 
0450   /////////////////////////////////////////////////////////////////////
0451   // Utility functions.
0452 
0453   G4String ViewerShortName (const G4String& viewerName) const;
0454   // Returns shortened version of viewer name, i.e., up to first space,
0455   // if any.
0456 
0457   G4VViewer* GetViewer (const G4String& viewerName) const;
0458   // Returns zero if not found.  Can use long or short name, but find
0459   // is done on short name.
0460 
0461   static Verbosity GetVerbosityValue(const G4String&);
0462   // Returns verbosity given a string.  (Uses first character only.)
0463 
0464   static Verbosity GetVerbosityValue(G4int);
0465   // Returns verbosity given an integer.  If integer is out of range,
0466   // selects verbosity at extreme of range.
0467 
0468   static G4String VerbosityString(Verbosity);
0469   // Converts the verbosity into a string for suitable for printing.
0470   
0471   static std::vector<G4String> VerbosityGuidanceStrings;
0472   // Guidance on the use of visualization verbosity.
0473 
0474   void PrintAvailableGraphicsSystems (Verbosity, std::ostream& = G4cout) const;
0475 
0476 protected:
0477 
0478   virtual void RegisterGraphicsSystems () = 0;
0479   // The sub-class must implement and make successive calls to
0480   // RegisterGraphicsSystem.
0481 
0482   virtual void RegisterModelFactories();
0483   // Sub-class must register desired models
0484 
0485   void RegisterMessengers              ();   // Command messengers.
0486 
0487   const G4int           fVerbose;
0488   // No longer used. Use fVerbosity and access functions instead.
0489   // fVerbose is kept for backwards compatibility for some user
0490   // examples.  (It is used in the derived user vis managers to print
0491   // available graphics systems.)  It is initialised to 1 in the
0492   // constructor and cannot be changed.
0493 
0494   static Verbosity      fVerbosity;
0495 
0496   G4String              fDefaultGraphicsSystemName;
0497   G4String              fDefaultXGeometryString;
0498   G4String              fDefaultGraphicsSystemBasis;
0499   G4String              fDefaultXGeometryStringBasis;
0500 
0501 private:
0502 
0503   // Function templates to implement the Draw methods (to avoid source
0504   // code duplication).
0505   template <class T> void DrawT
0506   (const T& graphics_primitive, const G4Transform3D& objectTransform);
0507   template <class T> void DrawT2D
0508   (const T& graphics_primitive, const G4Transform3D& objectTransform);
0509 
0510   void PrintAvailableModels            (Verbosity) const;
0511   void InitialiseG4ColourMap           () const;
0512   void PrintAvailableColours           (Verbosity) const;
0513   void PrintAvailableUserVisActions    (Verbosity) const;
0514   void PrintInvalidPointers            () const;
0515   G4bool IsValidView ();
0516   // True if view is valid.  Prints messages and sanitises various data.
0517   void ClearTransientStoreIfMarked();
0518   // Clears transient store of current scene handler if it is marked
0519   // for clearing.  Assumes view is valid.
0520 
0521   static G4VisManager*  fpInstance;         // Pointer to single instance. 
0522   G4bool                fInitialised;
0523   std::vector<UserVisAction> fRunDurationUserVisActions;
0524   std::vector<UserVisAction> fEndOfEventUserVisActions;
0525   std::vector<UserVisAction> fEndOfRunUserVisActions;
0526   std::map<G4VUserVisAction*,G4VisExtent> fUserVisActionExtents;
0527   G4VGraphicsSystem*    fpGraphicsSystem;   // Current graphics system.
0528   G4Scene*              fpScene;            // Current scene.
0529   G4VSceneHandler*      fpSceneHandler;     // Current scene handler.
0530   G4VViewer*            fpViewer;           // Current viewer.
0531   G4GraphicsSystemList  fAvailableGraphicsSystems;
0532   G4SceneList           fSceneList;
0533   G4SceneHandlerList    fAvailableSceneHandlers;
0534   std::vector<G4UImessenger*> fMessengerList;
0535   std::vector<G4UIcommand*>   fDirectoryList;
0536   G4VisStateDependent*  fpStateDependent;   // Friend state dependent class.
0537   G4bool                fEventRefreshing;
0538   G4bool                fTransientsDrawnThisRun;
0539   G4bool                fTransientsDrawnThisEvent;
0540   G4int                 fNoOfEventsDrawnThisRun;
0541   G4int                 fNKeepRequests;
0542   G4bool                fEventKeepingSuspended;
0543   G4bool                fDrawEventOnlyIfToBeKept;
0544   const G4Event*        fpRequestedEvent; // If non-zero, scene handler uses.
0545   G4bool                fReviewingKeptEvents;
0546   G4bool                fAbortReviewKeptEvents;
0547   G4bool                fReviewingPlots;
0548   G4bool                fAbortReviewPlots;
0549   G4ViewParameters      fDefaultViewParameters;
0550   G4bool                fIsDrawGroup;
0551   G4int                 fDrawGroupNestingDepth;
0552   G4bool                fIgnoreStateChanges;
0553 #ifdef G4MULTITHREADED
0554   G4int                 fMaxEventQueueSize;
0555   G4bool                fWaitOnEventQueueFull;
0556 #endif
0557 
0558   // Trajectory draw model manager
0559   G4VisModelManager<G4VTrajectoryModel>* fpTrajDrawModelMgr;
0560   
0561   // Trajectory filter model manager
0562   G4VisFilterManager<G4VTrajectory>* fpTrajFilterMgr;
0563 
0564   // Hit filter model manager
0565   G4VisFilterManager<G4VHit>* fpHitFilterMgr;
0566 
0567   // Digi filter model manager
0568   G4VisFilterManager<G4VDigi>* fpDigiFilterMgr;
0569 };
0570 
0571 #include "G4VisManager.icc"
0572 
0573 #endif