Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/visualization/management/src/G4Scene.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /visualization/management/src/G4Scene.cc (Version 11.3.0) and /visualization/management/src/G4Scene.cc (Version 10.4.p1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //                                                 26 //
                                                   >>  27 // $Id: G4Scene.cc 101958 2016-12-12 08:04:35Z gcosmo $
 27 //                                                 28 //
 28 //                                                 29 // 
 29 // Scene data  John Allison  19th July 1996.       30 // Scene data  John Allison  19th July 1996.
 30                                                    31 
 31 #include "G4Scene.hh"                              32 #include "G4Scene.hh"
 32                                                    33 
 33 #include "G4Vector3D.hh"                           34 #include "G4Vector3D.hh"
 34 #include "G4BoundingExtentScene.hh"            <<  35 #include "G4BoundingSphereScene.hh"
 35 #include "G4VisAttributes.hh"                      36 #include "G4VisAttributes.hh"
 36 #include "G4PhysicalVolumeModel.hh"                37 #include "G4PhysicalVolumeModel.hh"
 37 #include "G4TransportationManager.hh"              38 #include "G4TransportationManager.hh"
 38                                                    39 
 39 #include <set>                                     40 #include <set>
 40                                                    41 
 41 #define G4warn G4cout                          << 
 42                                                << 
 43 G4Scene::G4Scene (const G4String& name):           42 G4Scene::G4Scene (const G4String& name):
 44   fName (name),                                    43   fName (name),
 45   fRefreshAtEndOfEvent(true),                      44   fRefreshAtEndOfEvent(true),
 46   fRefreshAtEndOfRun(true),                        45   fRefreshAtEndOfRun(true),
 47   fMaxNumberOfKeptEvents(100)                      46   fMaxNumberOfKeptEvents(100)
 48 {} // Note all other data members have default     47 {} // Note all other data members have default initial values.
 49                                                    48 
 50 G4Scene::~G4Scene () {}                            49 G4Scene::~G4Scene () {}
 51                                                    50 
 52 namespace {                                    <<  51 G4bool G4Scene::AddRunDurationModel (G4VModel* pModel, G4bool warn)
 53   void PrintInvalidModel(const G4VModel* model <<  52 {
 54   {                                            <<  53   std::vector<Model>::const_iterator i;
 55     G4ExceptionDescription ed;                 <<  54   for (i = fRunDurationModelList.begin ();
 56     ed << "Invalid model \"" << model->GetGlob <<  55        i != fRunDurationModelList.end (); ++i) {
 57     << "\".\n  Not included in extent calculat <<  56     if (pModel -> GetGlobalDescription () ==
 58     G4Exception                                <<  57   i->fpModel->GetGlobalDescription ()) break;
 59     ("G4Scene::CalculateExtent",               << 
 60      "visman0201", JustWarning, ed);           << 
 61   }                                                58   }
                                                   >>  59   if (i != fRunDurationModelList.end ()) {
                                                   >>  60     if (warn) {
                                                   >>  61       G4cout << "G4Scene::AddRunDurationModel: model \""
                                                   >>  62        << pModel -> GetGlobalDescription ()
                                                   >>  63        << "\"\n  is already in the run-duration list of scene \""
                                                   >>  64        << fName
                                                   >>  65        << "\"."
                                                   >>  66        << G4endl;
                                                   >>  67     }
                                                   >>  68     return false;
                                                   >>  69   }
                                                   >>  70 
                                                   >>  71   for (i = fRunDurationModelList.begin ();
                                                   >>  72        i != fRunDurationModelList.end (); ++i) {
                                                   >>  73     if (pModel -> GetGlobalTag () ==
                                                   >>  74         i->fpModel->GetGlobalTag ()) break;
                                                   >>  75   }
                                                   >>  76   if (i != fRunDurationModelList.end ()) {
                                                   >>  77     if (warn) {
                                                   >>  78       G4cout
                                                   >>  79       << "G4Scene::AddRunDurationModel: The tag \""
                                                   >>  80       << pModel->GetGlobalTag()
                                                   >>  81       << "\"\n  duplicates one already in scene \""
                                                   >>  82       << fName
                                                   >>  83       <<
                                                   >>  84   "\".\n  This may be intended but if not, you may inspect the scene with"
                                                   >>  85   "\n  \"/vis/scene/list\" and deactivate unwanted models with"
                                                   >>  86   "\n  \"/vis/scene/activateModel\". Or create a new scene."
                                                   >>  87       << G4endl;
                                                   >>  88     }
                                                   >>  89   }
                                                   >>  90 
                                                   >>  91   fRunDurationModelList.push_back (Model(pModel));
                                                   >>  92 
                                                   >>  93   CalculateExtent ();
                                                   >>  94 
                                                   >>  95   return true;
 62 }                                                  96 }
 63                                                    97 
 64 void G4Scene::CalculateExtent ()                   98 void G4Scene::CalculateExtent ()
 65 {                                                  99 {
 66   G4BoundingExtentScene boundingExtentScene;   << 100   G4BoundingSphereScene boundingSphereScene;
 67                                                   101 
 68   for (size_t i = 0; i < fRunDurationModelList    102   for (size_t i = 0; i < fRunDurationModelList.size(); i++) {
 69     if (fRunDurationModelList[i].fActive) {       103     if (fRunDurationModelList[i].fActive) {
 70       G4VModel* model = fRunDurationModelList[    104       G4VModel* model = fRunDurationModelList[i].fpModel;
 71       if (model -> Validate()) {               << 105       if (model -> Validate()) {  // Validates and also recomputes extent.
 72         const G4VisExtent& thisExtent = model  << 106   const G4VisExtent& thisExtent = model -> GetExtent ();
 73         if (thisExtent != G4VisExtent::GetNull << 107   G4double thisRadius = thisExtent.GetExtentRadius ();
 74           boundingExtentScene.AccrueBoundingEx << 108   if (thisRadius > 0.) {
 75         }                                      << 109     G4Point3D thisCentre = thisExtent.GetExtentCentre ();
                                                   >> 110     thisCentre.transform (model -> GetTransformation ());
                                                   >> 111     boundingSphereScene.AccrueBoundingSphere (thisCentre, thisRadius);
                                                   >> 112   }
 76       } else {                                    113       } else {
 77         PrintInvalidModel(model);              << 114   G4ExceptionDescription ed;
                                                   >> 115   ed << "Invalid model \"" << model->GetGlobalDescription()
                                                   >> 116      << "\".\n  Not included in extent calculation.";
                                                   >> 117   G4Exception
                                                   >> 118     ("G4Scene::CalculateExtent",
                                                   >> 119      "visman0201", JustWarning, ed);
 78       }                                           120       }
 79     }                                             121     }
 80   }                                               122   }
 81                                                   123 
 82   for (size_t i = 0; i < fEndOfEventModelList.    124   for (size_t i = 0; i < fEndOfEventModelList.size(); i++) {
 83     if (fEndOfEventModelList[i].fActive) {        125     if (fEndOfEventModelList[i].fActive) {
 84       G4VModel* model = fEndOfEventModelList[i    126       G4VModel* model = fEndOfEventModelList[i].fpModel;
 85       if (model -> Validate()) {               << 127       if (model -> Validate()) {  // Validates and also recomputes extent.
 86         const G4VisExtent& thisExtent = model  << 128   const G4VisExtent& thisExtent = model -> GetExtent ();
 87         if (thisExtent != G4VisExtent::GetNull << 129   G4double thisRadius = thisExtent.GetExtentRadius ();
 88           boundingExtentScene.AccrueBoundingEx << 130   if (thisRadius > 0.) {
 89         }                                      << 131     G4Point3D thisCentre = thisExtent.GetExtentCentre ();
                                                   >> 132     thisCentre.transform (model -> GetTransformation ());
                                                   >> 133     boundingSphereScene.AccrueBoundingSphere (thisCentre, thisRadius);
                                                   >> 134   }
 90       } else {                                    135       } else {
 91         PrintInvalidModel(model);              << 136   G4ExceptionDescription ed;
                                                   >> 137   ed << "Invalid model \"" << model->GetGlobalDescription()
                                                   >> 138      << "\".\n  Not included in extent calculation.";
                                                   >> 139   G4Exception
                                                   >> 140     ("G4Scene::CalculateExtent",
                                                   >> 141      "visman0201", JustWarning, ed);
 92       }                                           142       }
 93     }                                             143     }
 94   }                                               144   }
 95                                                   145 
 96   for (size_t i = 0; i < fEndOfRunModelList.si    146   for (size_t i = 0; i < fEndOfRunModelList.size(); i++) {
 97     if (fEndOfRunModelList[i].fActive) {          147     if (fEndOfRunModelList[i].fActive) {
 98       G4VModel* model = fEndOfRunModelList[i].    148       G4VModel* model = fEndOfRunModelList[i].fpModel;
 99       if (model -> Validate()) {               << 149       if (model -> Validate()) {  // Validates and also recomputes extent.
100         const G4VisExtent& thisExtent = model  << 150   const G4VisExtent& thisExtent = model -> GetExtent ();
101         if (thisExtent != G4VisExtent::GetNull << 151   G4double thisRadius = thisExtent.GetExtentRadius ();
102           boundingExtentScene.AccrueBoundingEx << 152   if (thisRadius > 0.) {
103         }                                      << 153     G4Point3D thisCentre = thisExtent.GetExtentCentre ();
                                                   >> 154     thisCentre.transform (model -> GetTransformation ());
                                                   >> 155     boundingSphereScene.AccrueBoundingSphere (thisCentre, thisRadius);
                                                   >> 156   }
104       } else {                                    157       } else {
105         PrintInvalidModel(model);              << 158   G4ExceptionDescription ed;
                                                   >> 159   ed << "Invalid model \"" << model->GetGlobalDescription()
                                                   >> 160      << "\".\n  Not included in extent calculation.";
                                                   >> 161   G4Exception
                                                   >> 162     ("G4Scene::CalculateExtent",
                                                   >> 163      "visman0201", JustWarning, ed);
106       }                                           164       }
107     }                                             165     }
108   }                                               166   }
109                                                   167 
110   fExtent = boundingExtentScene.GetBoundingExt << 168   fExtent = boundingSphereScene.GetBoundingSphereExtent ();
111   fStandardTargetPoint = fExtent.GetExtentCent    169   fStandardTargetPoint = fExtent.GetExtentCentre ();
112   if (fExtent.GetExtentRadius() <= 0.) {          170   if (fExtent.GetExtentRadius() <= 0.) {
113   G4Exception                                     171   G4Exception
114     ("G4Scene::CalculateExtent",                  172     ("G4Scene::CalculateExtent",
115      "visman0202", JustWarning,                   173      "visman0202", JustWarning,
116      "Scene has no extent.  Please activate or    174      "Scene has no extent.  Please activate or add something."
117      "\nThe camera needs to have something to     175      "\nThe camera needs to have something to point at!"
118            "\nAdd a volume. (You may need \"/r    176            "\nAdd a volume. (You may need \"/run/initialize\".)"
119            "\nOr use \"/vis/scene/add/extent\"    177            "\nOr use \"/vis/scene/add/extent\"."
120      "\n\"/vis/scene/list\" to see list of mod    178      "\n\"/vis/scene/list\" to see list of models.");
121   }                                               179   }
122 }                                                 180 }
123                                                   181 
124 G4bool G4Scene::AddWorldIfEmpty (G4bool warn)     182 G4bool G4Scene::AddWorldIfEmpty (G4bool warn) {
125   G4bool successful = true;                       183   G4bool successful = true;
126   if (IsEmpty ()) {                               184   if (IsEmpty ()) {
127     successful = false;                           185     successful = false;
128     G4VPhysicalVolume* pWorld =                   186     G4VPhysicalVolume* pWorld =
129       G4TransportationManager::GetTransportati    187       G4TransportationManager::GetTransportationManager ()
130       -> GetNavigatorForTracking () -> GetWorl    188       -> GetNavigatorForTracking () -> GetWorldVolume ();
131     if (pWorld) {                                 189     if (pWorld) {
132       const G4VisAttributes* pVisAttribs =        190       const G4VisAttributes* pVisAttribs =
133   pWorld -> GetLogicalVolume () -> GetVisAttri    191   pWorld -> GetLogicalVolume () -> GetVisAttributes ();
134       if (!pVisAttribs || pVisAttribs -> IsVis    192       if (!pVisAttribs || pVisAttribs -> IsVisible ()) {
135   if (warn) {                                     193   if (warn) {
136     G4warn <<                                  << 194     G4cout << 
137       "Your \"world\" has no vis attributes or    195       "Your \"world\" has no vis attributes or is marked as visible."
138       "\n  For a better view of the contents,     196       "\n  For a better view of the contents, mark the world as"
139       " invisible, e.g.,"                         197       " invisible, e.g.,"
140       "\n  myWorldLogicalVol ->"                  198       "\n  myWorldLogicalVol ->"
141     " SetVisAttributes (G4VisAttributes::GetIn    199     " SetVisAttributes (G4VisAttributes::GetInvisible());"
142      << G4endl;                                   200      << G4endl;
143   }                                               201   }
144       }                                           202       }
145       successful = AddRunDurationModel (new G4    203       successful = AddRunDurationModel (new G4PhysicalVolumeModel (pWorld));
146       // Note: default depth and no modeling p    204       // Note: default depth and no modeling parameters.
147       if (successful) {                           205       if (successful) {
148   if (warn) {                                     206   if (warn) {
149     G4warn <<                                  << 207     G4cout <<
150     "G4Scene::AddWorldIfEmpty: The scene had n << 208     "G4Scene::AddWorldIfEmpty: The scene was empty of run-duration models."
151     "\n  \"world\" has been added.";              209     "\n  \"world\" has been added.";
152     G4warn << G4endl;                          << 210     G4cout << G4endl;
153   }                                               211   }
154       }                                           212       }
155     }                                             213     }
156   }                                               214   }
157   return successful;                              215   return successful;
158 }                                                 216 }
159                                                   217 
160 G4bool G4Scene::AddRunDurationModel (G4VModel* << 
161 {                                              << 
162   std::vector<Model>::const_iterator i;        << 
163   for (i = fRunDurationModelList.begin ();     << 
164        i != fRunDurationModelList.end (); ++i) << 
165     if (pModel -> GetGlobalDescription () ==   << 
166   i->fpModel->GetGlobalDescription ()) break;  << 
167   }                                            << 
168   if (i != fRunDurationModelList.end ()) {     << 
169     if (warn) {                                << 
170       G4warn << "G4Scene::AddRunDurationModel: << 
171       << pModel -> GetGlobalDescription ()     << 
172       << "\"\n  is already in the run-duration << 
173       << fName                                 << 
174       << "\"."                                 << 
175       << G4endl;                               << 
176     }                                          << 
177     return false;                              << 
178   }                                            << 
179   fRunDurationModelList.push_back (Model(pMode << 
180   CalculateExtent ();                          << 
181   return true;                                 << 
182 }                                              << 
183                                                << 
184 G4bool G4Scene::AddEndOfEventModel (G4VModel*     218 G4bool G4Scene::AddEndOfEventModel (G4VModel* pModel, G4bool warn) {
185   std::size_t i, nModels = fEndOfEventModelLis << 219   G4int i, nModels = fEndOfEventModelList.size ();
186   for (i = 0; i < nModels; ++i) {              << 220   for (i = 0; i < nModels; i++) {
187     if (pModel -> GetGlobalDescription () ==      221     if (pModel -> GetGlobalDescription () ==
188   fEndOfEventModelList[i].fpModel -> GetGlobal    222   fEndOfEventModelList[i].fpModel -> GetGlobalDescription ()) break;
189   }                                               223   }
190   if (i < nModels) {                              224   if (i < nModels) {
191     if (warn) {                                   225     if (warn) {
192       G4warn << "G4Scene::AddEndOfEventModel:  << 226       G4cout << "G4Scene::AddEndOfEventModel: a model \""
193        << pModel -> GetGlobalDescription ()       227        << pModel -> GetGlobalDescription ()
194        << "\"\n  is already in the end-of-even    228        << "\"\n  is already in the end-of-event list of scene \""
195        << fName << "\"."                          229        << fName << "\"."
196        << G4endl;                                 230        << G4endl;
197     }                                             231     }
198     return false;                                 232     return false;
199   }                                               233   }
200   fEndOfEventModelList.push_back (Model(pModel    234   fEndOfEventModelList.push_back (Model(pModel));
201   CalculateExtent ();                          << 
202   return true;                                    235   return true;
203 }                                                 236 }
204                                                   237 
205 G4bool G4Scene::AddEndOfRunModel (G4VModel* pM    238 G4bool G4Scene::AddEndOfRunModel (G4VModel* pModel, G4bool warn) {
206   std::size_t i, nModels = fEndOfRunModelList. << 239   G4int i, nModels = fEndOfRunModelList.size ();
207   for (i = 0; i < nModels; ++i) {              << 240   for (i = 0; i < nModels; i++) {
208     if (pModel -> GetGlobalDescription () ==      241     if (pModel -> GetGlobalDescription () ==
209   fEndOfRunModelList[i].fpModel -> GetGlobalDe    242   fEndOfRunModelList[i].fpModel -> GetGlobalDescription ()) break;
210   }                                               243   }
211   if (i < nModels) {                              244   if (i < nModels) {
212     if (warn) {                                   245     if (warn) {
213       G4warn << "G4Scene::AddEndOfRunModel: a  << 246       G4cout << "G4Scene::AddEndOfRunModel: a model \""
214        << pModel -> GetGlobalDescription ()       247        << pModel -> GetGlobalDescription ()
215        << "\"\n  is already in the end-of-run     248        << "\"\n  is already in the end-of-run list of scene \""
216        << fName << "\"."                          249        << fName << "\"."
217        << G4endl;                                 250        << G4endl;
218     }                                             251     }
219     return false;                                 252     return false;
220   }                                               253   }
221   fEndOfRunModelList.push_back (pModel);          254   fEndOfRunModelList.push_back (pModel);
222   CalculateExtent ();                          << 
223   return true;                                    255   return true;
224 }                                                 256 }
225                                                   257 
226 std::ostream& operator << (std::ostream& os, c    258 std::ostream& operator << (std::ostream& os, const G4Scene& scene) {
227                                                   259 
228   size_t i;                                       260   size_t i;
229                                                   261 
230   os << "Scene data:";                            262   os << "Scene data:";
231                                                   263 
232   os << "\n  Run-duration model list:";           264   os << "\n  Run-duration model list:";
233   if (scene.fRunDurationModelList.size () == 0 << 
234     os << " none";                             << 
235   }                                            << 
236   for (i = 0; i < scene.fRunDurationModelList.    265   for (i = 0; i < scene.fRunDurationModelList.size (); i++) {
237     if (scene.fRunDurationModelList[i].fActive    266     if (scene.fRunDurationModelList[i].fActive) os << "\n  Active:   ";
238     else os << "\n  Inactive: ";                  267     else os << "\n  Inactive: ";
239     os << *(scene.fRunDurationModelList[i].fpM    268     os << *(scene.fRunDurationModelList[i].fpModel);
240   }                                               269   }
241                                                   270 
242   os << "\n  End-of-event model list:";           271   os << "\n  End-of-event model list:";
243   if (scene.fEndOfEventModelList.size () == 0) << 
244     os << " none";                             << 
245   }                                            << 
246   for (i = 0; i < scene.fEndOfEventModelList.s    272   for (i = 0; i < scene.fEndOfEventModelList.size (); i++) {
247     if (scene.fEndOfEventModelList[i].fActive)    273     if (scene.fEndOfEventModelList[i].fActive) os << "\n  Active:   ";
248     else os << "\n  Inactive: ";                  274     else os << "\n  Inactive: ";
249     os << *(scene.fEndOfEventModelList[i].fpMo    275     os << *(scene.fEndOfEventModelList[i].fpModel);
250   }                                               276   }
251                                                   277 
252   os << "\n  End-of-run model list:";             278   os << "\n  End-of-run model list:";
253   if (scene.fEndOfRunModelList.size () == 0) { << 
254     os << " none";                             << 
255   }                                            << 
256   for (i = 0; i < scene.fEndOfRunModelList.siz    279   for (i = 0; i < scene.fEndOfRunModelList.size (); i++) {
257     if (scene.fEndOfRunModelList[i].fActive) o    280     if (scene.fEndOfRunModelList[i].fActive) os << "\n  Active:   ";
258     else os << "\n  Inactive: ";                  281     else os << "\n  Inactive: ";
259     os << *(scene.fEndOfRunModelList[i].fpMode    282     os << *(scene.fEndOfRunModelList[i].fpModel);
260   }                                               283   }
261                                                   284 
262   os << "\n  Overall extent or bounding box: " << 285   os << "\n  Extent or bounding box: " << scene.fExtent;
263                                                   286 
264   os << "\n  Standard target point:  " << scen    287   os << "\n  Standard target point:  " << scene.fStandardTargetPoint;
265                                                   288 
266   os << "\n  End of event action set to \"";      289   os << "\n  End of event action set to \"";
267   if (scene.fRefreshAtEndOfEvent) os << "refre    290   if (scene.fRefreshAtEndOfEvent) os << "refresh\"";
268   else {                                          291   else {
269     os << "accumulate (maximum number of kept     292     os << "accumulate (maximum number of kept events: ";
270     if (scene.fMaxNumberOfKeptEvents >= 0) os     293     if (scene.fMaxNumberOfKeptEvents >= 0) os << scene.fMaxNumberOfKeptEvents;
271     else os << "unlimited";                       294     else os << "unlimited";
272     os << ")";                                    295     os << ")";
273   }                                               296   }
274                                                   297 
275   os << "\n  End of run action set to \"";        298   os << "\n  End of run action set to \"";
276   if (scene.fRefreshAtEndOfRun) os << "refresh    299   if (scene.fRefreshAtEndOfRun) os << "refresh";
277   else os << "accumulate";                        300   else os << "accumulate";
278   os << "\"";                                     301   os << "\"";
279                                                   302 
280   return os;                                      303   return os;
281 }                                                 304 }
282                                                   305 
283 G4bool G4Scene::operator != (const G4Scene& sc    306 G4bool G4Scene::operator != (const G4Scene& scene) const {
284   if (                                            307   if (
285       (fRunDurationModelList.size () !=           308       (fRunDurationModelList.size () !=
286        scene.fRunDurationModelList.size ())       309        scene.fRunDurationModelList.size ())                 ||
287       (fEndOfEventModelList.size () !=            310       (fEndOfEventModelList.size () !=
288        scene.fEndOfEventModelList.size ())        311        scene.fEndOfEventModelList.size ())                  ||
289       (fEndOfRunModelList.size () !=              312       (fEndOfRunModelList.size () !=
290        scene.fEndOfRunModelList.size ())          313        scene.fEndOfRunModelList.size ())                    ||
291       (fExtent               != scene.fExtent)    314       (fExtent               != scene.fExtent)              ||
292       !(fStandardTargetPoint == scene.fStandar    315       !(fStandardTargetPoint == scene.fStandardTargetPoint) ||
293       fRefreshAtEndOfEvent   != scene.fRefresh    316       fRefreshAtEndOfEvent   != scene.fRefreshAtEndOfEvent  ||
294       fRefreshAtEndOfRun     != scene.fRefresh    317       fRefreshAtEndOfRun     != scene.fRefreshAtEndOfRun    ||
295       fMaxNumberOfKeptEvents != scene.fMaxNumb    318       fMaxNumberOfKeptEvents != scene.fMaxNumberOfKeptEvents
296       ) return true;                              319       ) return true;
297                                                   320 
298   /* A complete comparison should, perhaps, in    321   /* A complete comparison should, perhaps, include a comparison of
299      individual models, but it is not easy to     322      individual models, but it is not easy to implement operator!= for
300      all models.  Also, it would be unfeasible    323      all models.  Also, it would be unfeasible to ask users to
301      implement opeerator!= if we ever get roun    324      implement opeerator!= if we ever get round to allowing
302      user-defined models.  Moreover, there is     325      user-defined models.  Moreover, there is no editing of G4Scene
303      objects, apart from changing fRefreshAtEn    326      objects, apart from changing fRefreshAtEndOfEvent, etc; as far as
304      models are concerned, all you can ever do    327      models are concerned, all you can ever do is add them, so a test
305      on size (above) is enough.                   328      on size (above) is enough.
306                                                   329 
307   for (size_t i = 0; i < fRunDurationModelList    330   for (size_t i = 0; i < fRunDurationModelList.size (); i++) {
308     if (fRunDurationModelList[i] != scene.fRun    331     if (fRunDurationModelList[i] != scene.fRunDurationModelList[i])
309       return true;                                332       return true;
310   }                                               333   }
311                                                   334 
312   for (size_t i = 0; i < fEndOfEventModelList.    335   for (size_t i = 0; i < fEndOfEventModelList.size (); i++) {
313     if (fEndOfEventModelList[i] != scene.fEndO    336     if (fEndOfEventModelList[i] != scene.fEndOfEventModelList[i])
314       return true;                                337       return true;
315   }                                               338   }
316                                                   339 
317   for (size_t i = 0; i < fEndOfRunModelList.si    340   for (size_t i = 0; i < fEndOfRunModelList.size (); i++) {
318     if (fEndOfRunModelList[i] != scene.fEndOfR    341     if (fEndOfRunModelList[i] != scene.fEndOfRunModelList[i])
319       return true;                                342       return true;
320   }                                               343   }
321   */                                              344   */
322                                                   345 
323   return false;                                   346   return false;
324 }                                                 347 }
325                                                   348