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 11.1.2)


  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 //                                                 27 //
 28 //                                                 28 // 
 29 // Scene data  John Allison  19th July 1996.       29 // Scene data  John Allison  19th July 1996.
 30                                                    30 
 31 #include "G4Scene.hh"                              31 #include "G4Scene.hh"
 32                                                    32 
 33 #include "G4Vector3D.hh"                           33 #include "G4Vector3D.hh"
 34 #include "G4BoundingExtentScene.hh"                34 #include "G4BoundingExtentScene.hh"
 35 #include "G4VisAttributes.hh"                      35 #include "G4VisAttributes.hh"
 36 #include "G4PhysicalVolumeModel.hh"                36 #include "G4PhysicalVolumeModel.hh"
 37 #include "G4TransportationManager.hh"              37 #include "G4TransportationManager.hh"
 38                                                    38 
 39 #include <set>                                     39 #include <set>
 40                                                    40 
 41 #define G4warn G4cout                              41 #define G4warn G4cout
 42                                                    42 
 43 G4Scene::G4Scene (const G4String& name):           43 G4Scene::G4Scene (const G4String& name):
 44   fName (name),                                    44   fName (name),
 45   fRefreshAtEndOfEvent(true),                      45   fRefreshAtEndOfEvent(true),
 46   fRefreshAtEndOfRun(true),                        46   fRefreshAtEndOfRun(true),
 47   fMaxNumberOfKeptEvents(100)                      47   fMaxNumberOfKeptEvents(100)
 48 {} // Note all other data members have default     48 {} // Note all other data members have default initial values.
 49                                                    49 
 50 G4Scene::~G4Scene () {}                            50 G4Scene::~G4Scene () {}
 51                                                    51 
 52 namespace {                                        52 namespace {
 53   void PrintInvalidModel(const G4VModel* model     53   void PrintInvalidModel(const G4VModel* model)
 54   {                                                54   {
 55     G4ExceptionDescription ed;                     55     G4ExceptionDescription ed;
 56     ed << "Invalid model \"" << model->GetGlob     56     ed << "Invalid model \"" << model->GetGlobalDescription()
 57     << "\".\n  Not included in extent calculat     57     << "\".\n  Not included in extent calculation.";
 58     G4Exception                                    58     G4Exception
 59     ("G4Scene::CalculateExtent",                   59     ("G4Scene::CalculateExtent",
 60      "visman0201", JustWarning, ed);               60      "visman0201", JustWarning, ed);
 61   }                                                61   }
 62 }                                                  62 }
 63                                                    63 
 64 void G4Scene::CalculateExtent ()                   64 void G4Scene::CalculateExtent ()
 65 {                                                  65 {
 66   G4BoundingExtentScene boundingExtentScene;       66   G4BoundingExtentScene boundingExtentScene;
 67                                                    67 
 68   for (size_t i = 0; i < fRunDurationModelList     68   for (size_t i = 0; i < fRunDurationModelList.size(); i++) {
 69     if (fRunDurationModelList[i].fActive) {        69     if (fRunDurationModelList[i].fActive) {
 70       G4VModel* model = fRunDurationModelList[     70       G4VModel* model = fRunDurationModelList[i].fpModel;
 71       if (model -> Validate()) {                   71       if (model -> Validate()) {
 72         const G4VisExtent& thisExtent = model      72         const G4VisExtent& thisExtent = model -> GetExtent ();
 73         if (thisExtent != G4VisExtent::GetNull     73         if (thisExtent != G4VisExtent::GetNullExtent()) {
 74           boundingExtentScene.AccrueBoundingEx     74           boundingExtentScene.AccrueBoundingExtent(thisExtent);
 75         }                                          75         }
 76       } else {                                     76       } else {
 77         PrintInvalidModel(model);                  77         PrintInvalidModel(model);
 78       }                                            78       }
 79     }                                              79     }
 80   }                                                80   }
 81                                                    81 
 82   for (size_t i = 0; i < fEndOfEventModelList.     82   for (size_t i = 0; i < fEndOfEventModelList.size(); i++) {
 83     if (fEndOfEventModelList[i].fActive) {         83     if (fEndOfEventModelList[i].fActive) {
 84       G4VModel* model = fEndOfEventModelList[i     84       G4VModel* model = fEndOfEventModelList[i].fpModel;
 85       if (model -> Validate()) {                   85       if (model -> Validate()) {
 86         const G4VisExtent& thisExtent = model      86         const G4VisExtent& thisExtent = model -> GetExtent ();
 87         if (thisExtent != G4VisExtent::GetNull     87         if (thisExtent != G4VisExtent::GetNullExtent()) {
 88           boundingExtentScene.AccrueBoundingEx     88           boundingExtentScene.AccrueBoundingExtent(thisExtent);
 89         }                                          89         }
 90       } else {                                     90       } else {
 91         PrintInvalidModel(model);                  91         PrintInvalidModel(model);
 92       }                                            92       }
 93     }                                              93     }
 94   }                                                94   }
 95                                                    95 
 96   for (size_t i = 0; i < fEndOfRunModelList.si     96   for (size_t i = 0; i < fEndOfRunModelList.size(); i++) {
 97     if (fEndOfRunModelList[i].fActive) {           97     if (fEndOfRunModelList[i].fActive) {
 98       G4VModel* model = fEndOfRunModelList[i].     98       G4VModel* model = fEndOfRunModelList[i].fpModel;
 99       if (model -> Validate()) {                   99       if (model -> Validate()) {
100         const G4VisExtent& thisExtent = model     100         const G4VisExtent& thisExtent = model -> GetExtent ();
101         if (thisExtent != G4VisExtent::GetNull    101         if (thisExtent != G4VisExtent::GetNullExtent()) {
102           boundingExtentScene.AccrueBoundingEx    102           boundingExtentScene.AccrueBoundingExtent(thisExtent);
103         }                                         103         }
104       } else {                                    104       } else {
105         PrintInvalidModel(model);                 105         PrintInvalidModel(model);
106       }                                           106       }
107     }                                             107     }
108   }                                               108   }
109                                                   109 
110   fExtent = boundingExtentScene.GetBoundingExt    110   fExtent = boundingExtentScene.GetBoundingExtent ();
111   fStandardTargetPoint = fExtent.GetExtentCent    111   fStandardTargetPoint = fExtent.GetExtentCentre ();
112   if (fExtent.GetExtentRadius() <= 0.) {          112   if (fExtent.GetExtentRadius() <= 0.) {
113   G4Exception                                     113   G4Exception
114     ("G4Scene::CalculateExtent",                  114     ("G4Scene::CalculateExtent",
115      "visman0202", JustWarning,                   115      "visman0202", JustWarning,
116      "Scene has no extent.  Please activate or    116      "Scene has no extent.  Please activate or add something."
117      "\nThe camera needs to have something to     117      "\nThe camera needs to have something to point at!"
118            "\nAdd a volume. (You may need \"/r    118            "\nAdd a volume. (You may need \"/run/initialize\".)"
119            "\nOr use \"/vis/scene/add/extent\"    119            "\nOr use \"/vis/scene/add/extent\"."
120      "\n\"/vis/scene/list\" to see list of mod    120      "\n\"/vis/scene/list\" to see list of models.");
121   }                                               121   }
122 }                                                 122 }
123                                                   123 
124 G4bool G4Scene::AddWorldIfEmpty (G4bool warn)     124 G4bool G4Scene::AddWorldIfEmpty (G4bool warn) {
125   G4bool successful = true;                       125   G4bool successful = true;
126   if (IsEmpty ()) {                               126   if (IsEmpty ()) {
127     successful = false;                           127     successful = false;
128     G4VPhysicalVolume* pWorld =                   128     G4VPhysicalVolume* pWorld =
129       G4TransportationManager::GetTransportati    129       G4TransportationManager::GetTransportationManager ()
130       -> GetNavigatorForTracking () -> GetWorl    130       -> GetNavigatorForTracking () -> GetWorldVolume ();
131     if (pWorld) {                                 131     if (pWorld) {
132       const G4VisAttributes* pVisAttribs =        132       const G4VisAttributes* pVisAttribs =
133   pWorld -> GetLogicalVolume () -> GetVisAttri    133   pWorld -> GetLogicalVolume () -> GetVisAttributes ();
134       if (!pVisAttribs || pVisAttribs -> IsVis    134       if (!pVisAttribs || pVisAttribs -> IsVisible ()) {
135   if (warn) {                                     135   if (warn) {
136     G4warn <<                                     136     G4warn <<
137       "Your \"world\" has no vis attributes or    137       "Your \"world\" has no vis attributes or is marked as visible."
138       "\n  For a better view of the contents,     138       "\n  For a better view of the contents, mark the world as"
139       " invisible, e.g.,"                         139       " invisible, e.g.,"
140       "\n  myWorldLogicalVol ->"                  140       "\n  myWorldLogicalVol ->"
141     " SetVisAttributes (G4VisAttributes::GetIn    141     " SetVisAttributes (G4VisAttributes::GetInvisible());"
142      << G4endl;                                   142      << G4endl;
143   }                                               143   }
144       }                                           144       }
145       successful = AddRunDurationModel (new G4    145       successful = AddRunDurationModel (new G4PhysicalVolumeModel (pWorld));
146       // Note: default depth and no modeling p    146       // Note: default depth and no modeling parameters.
147       if (successful) {                           147       if (successful) {
148   if (warn) {                                     148   if (warn) {
149     G4warn <<                                     149     G4warn <<
150     "G4Scene::AddWorldIfEmpty: The scene had n    150     "G4Scene::AddWorldIfEmpty: The scene had no extent."
151     "\n  \"world\" has been added.";              151     "\n  \"world\" has been added.";
152     G4warn << G4endl;                             152     G4warn << G4endl;
153   }                                               153   }
154       }                                           154       }
155     }                                             155     }
156   }                                               156   }
157   return successful;                              157   return successful;
158 }                                                 158 }
159                                                   159 
160 G4bool G4Scene::AddRunDurationModel (G4VModel*    160 G4bool G4Scene::AddRunDurationModel (G4VModel* pModel, G4bool warn)
161 {                                                 161 {
162   std::vector<Model>::const_iterator i;           162   std::vector<Model>::const_iterator i;
163   for (i = fRunDurationModelList.begin ();        163   for (i = fRunDurationModelList.begin ();
164        i != fRunDurationModelList.end (); ++i)    164        i != fRunDurationModelList.end (); ++i) {
165     if (pModel -> GetGlobalDescription () ==      165     if (pModel -> GetGlobalDescription () ==
166   i->fpModel->GetGlobalDescription ()) break;     166   i->fpModel->GetGlobalDescription ()) break;
167   }                                               167   }
168   if (i != fRunDurationModelList.end ()) {        168   if (i != fRunDurationModelList.end ()) {
169     if (warn) {                                   169     if (warn) {
170       G4warn << "G4Scene::AddRunDurationModel:    170       G4warn << "G4Scene::AddRunDurationModel: model \""
171       << pModel -> GetGlobalDescription ()        171       << pModel -> GetGlobalDescription ()
172       << "\"\n  is already in the run-duration    172       << "\"\n  is already in the run-duration list of scene \""
173       << fName                                    173       << fName
174       << "\"."                                    174       << "\"."
175       << G4endl;                                  175       << G4endl;
176     }                                             176     }
177     return false;                                 177     return false;
178   }                                               178   }
179   fRunDurationModelList.push_back (Model(pMode    179   fRunDurationModelList.push_back (Model(pModel));
180   CalculateExtent ();                             180   CalculateExtent ();
181   return true;                                    181   return true;
182 }                                                 182 }
183                                                   183 
184 G4bool G4Scene::AddEndOfEventModel (G4VModel*     184 G4bool G4Scene::AddEndOfEventModel (G4VModel* pModel, G4bool warn) {
185   std::size_t i, nModels = fEndOfEventModelLis    185   std::size_t i, nModels = fEndOfEventModelList.size ();
186   for (i = 0; i < nModels; ++i) {                 186   for (i = 0; i < nModels; ++i) {
187     if (pModel -> GetGlobalDescription () ==      187     if (pModel -> GetGlobalDescription () ==
188   fEndOfEventModelList[i].fpModel -> GetGlobal    188   fEndOfEventModelList[i].fpModel -> GetGlobalDescription ()) break;
189   }                                               189   }
190   if (i < nModels) {                              190   if (i < nModels) {
191     if (warn) {                                   191     if (warn) {
192       G4warn << "G4Scene::AddEndOfEventModel:     192       G4warn << "G4Scene::AddEndOfEventModel: a model \""
193        << pModel -> GetGlobalDescription ()       193        << pModel -> GetGlobalDescription ()
194        << "\"\n  is already in the end-of-even    194        << "\"\n  is already in the end-of-event list of scene \""
195        << fName << "\"."                          195        << fName << "\"."
196        << G4endl;                                 196        << G4endl;
197     }                                             197     }
198     return false;                                 198     return false;
199   }                                               199   }
200   fEndOfEventModelList.push_back (Model(pModel    200   fEndOfEventModelList.push_back (Model(pModel));
201   CalculateExtent ();                             201   CalculateExtent ();
202   return true;                                    202   return true;
203 }                                                 203 }
204                                                   204 
205 G4bool G4Scene::AddEndOfRunModel (G4VModel* pM    205 G4bool G4Scene::AddEndOfRunModel (G4VModel* pModel, G4bool warn) {
206   std::size_t i, nModels = fEndOfRunModelList.    206   std::size_t i, nModels = fEndOfRunModelList.size ();
207   for (i = 0; i < nModels; ++i) {                 207   for (i = 0; i < nModels; ++i) {
208     if (pModel -> GetGlobalDescription () ==      208     if (pModel -> GetGlobalDescription () ==
209   fEndOfRunModelList[i].fpModel -> GetGlobalDe    209   fEndOfRunModelList[i].fpModel -> GetGlobalDescription ()) break;
210   }                                               210   }
211   if (i < nModels) {                              211   if (i < nModels) {
212     if (warn) {                                   212     if (warn) {
213       G4warn << "G4Scene::AddEndOfRunModel: a     213       G4warn << "G4Scene::AddEndOfRunModel: a model \""
214        << pModel -> GetGlobalDescription ()       214        << pModel -> GetGlobalDescription ()
215        << "\"\n  is already in the end-of-run     215        << "\"\n  is already in the end-of-run list of scene \""
216        << fName << "\"."                          216        << fName << "\"."
217        << G4endl;                                 217        << G4endl;
218     }                                             218     }
219     return false;                                 219     return false;
220   }                                               220   }
221   fEndOfRunModelList.push_back (pModel);          221   fEndOfRunModelList.push_back (pModel);
222   CalculateExtent ();                             222   CalculateExtent ();
223   return true;                                    223   return true;
224 }                                                 224 }
225                                                   225 
226 std::ostream& operator << (std::ostream& os, c    226 std::ostream& operator << (std::ostream& os, const G4Scene& scene) {
227                                                   227 
228   size_t i;                                       228   size_t i;
229                                                   229 
230   os << "Scene data:";                            230   os << "Scene data:";
231                                                   231 
232   os << "\n  Run-duration model list:";           232   os << "\n  Run-duration model list:";
233   if (scene.fRunDurationModelList.size () == 0    233   if (scene.fRunDurationModelList.size () == 0) {
234     os << " none";                                234     os << " none";
235   }                                               235   }
236   for (i = 0; i < scene.fRunDurationModelList.    236   for (i = 0; i < scene.fRunDurationModelList.size (); i++) {
237     if (scene.fRunDurationModelList[i].fActive    237     if (scene.fRunDurationModelList[i].fActive) os << "\n  Active:   ";
238     else os << "\n  Inactive: ";                  238     else os << "\n  Inactive: ";
239     os << *(scene.fRunDurationModelList[i].fpM    239     os << *(scene.fRunDurationModelList[i].fpModel);
240   }                                               240   }
241                                                   241 
242   os << "\n  End-of-event model list:";           242   os << "\n  End-of-event model list:";
243   if (scene.fEndOfEventModelList.size () == 0)    243   if (scene.fEndOfEventModelList.size () == 0) {
244     os << " none";                                244     os << " none";
245   }                                               245   }
246   for (i = 0; i < scene.fEndOfEventModelList.s    246   for (i = 0; i < scene.fEndOfEventModelList.size (); i++) {
247     if (scene.fEndOfEventModelList[i].fActive)    247     if (scene.fEndOfEventModelList[i].fActive) os << "\n  Active:   ";
248     else os << "\n  Inactive: ";                  248     else os << "\n  Inactive: ";
249     os << *(scene.fEndOfEventModelList[i].fpMo    249     os << *(scene.fEndOfEventModelList[i].fpModel);
250   }                                               250   }
251                                                   251 
252   os << "\n  End-of-run model list:";             252   os << "\n  End-of-run model list:";
253   if (scene.fEndOfRunModelList.size () == 0) {    253   if (scene.fEndOfRunModelList.size () == 0) {
254     os << " none";                                254     os << " none";
255   }                                               255   }
256   for (i = 0; i < scene.fEndOfRunModelList.siz    256   for (i = 0; i < scene.fEndOfRunModelList.size (); i++) {
257     if (scene.fEndOfRunModelList[i].fActive) o    257     if (scene.fEndOfRunModelList[i].fActive) os << "\n  Active:   ";
258     else os << "\n  Inactive: ";                  258     else os << "\n  Inactive: ";
259     os << *(scene.fEndOfRunModelList[i].fpMode    259     os << *(scene.fEndOfRunModelList[i].fpModel);
260   }                                               260   }
261                                                   261 
262   os << "\n  Overall extent or bounding box: "    262   os << "\n  Overall extent or bounding box: " << scene.fExtent;
263                                                   263 
264   os << "\n  Standard target point:  " << scen    264   os << "\n  Standard target point:  " << scene.fStandardTargetPoint;
265                                                   265 
266   os << "\n  End of event action set to \"";      266   os << "\n  End of event action set to \"";
267   if (scene.fRefreshAtEndOfEvent) os << "refre    267   if (scene.fRefreshAtEndOfEvent) os << "refresh\"";
268   else {                                          268   else {
269     os << "accumulate (maximum number of kept     269     os << "accumulate (maximum number of kept events: ";
270     if (scene.fMaxNumberOfKeptEvents >= 0) os     270     if (scene.fMaxNumberOfKeptEvents >= 0) os << scene.fMaxNumberOfKeptEvents;
271     else os << "unlimited";                       271     else os << "unlimited";
272     os << ")";                                    272     os << ")";
273   }                                               273   }
274                                                   274 
275   os << "\n  End of run action set to \"";        275   os << "\n  End of run action set to \"";
276   if (scene.fRefreshAtEndOfRun) os << "refresh    276   if (scene.fRefreshAtEndOfRun) os << "refresh";
277   else os << "accumulate";                        277   else os << "accumulate";
278   os << "\"";                                     278   os << "\"";
279                                                   279 
280   return os;                                      280   return os;
281 }                                                 281 }
282                                                   282 
283 G4bool G4Scene::operator != (const G4Scene& sc    283 G4bool G4Scene::operator != (const G4Scene& scene) const {
284   if (                                            284   if (
285       (fRunDurationModelList.size () !=           285       (fRunDurationModelList.size () !=
286        scene.fRunDurationModelList.size ())       286        scene.fRunDurationModelList.size ())                 ||
287       (fEndOfEventModelList.size () !=            287       (fEndOfEventModelList.size () !=
288        scene.fEndOfEventModelList.size ())        288        scene.fEndOfEventModelList.size ())                  ||
289       (fEndOfRunModelList.size () !=              289       (fEndOfRunModelList.size () !=
290        scene.fEndOfRunModelList.size ())          290        scene.fEndOfRunModelList.size ())                    ||
291       (fExtent               != scene.fExtent)    291       (fExtent               != scene.fExtent)              ||
292       !(fStandardTargetPoint == scene.fStandar    292       !(fStandardTargetPoint == scene.fStandardTargetPoint) ||
293       fRefreshAtEndOfEvent   != scene.fRefresh    293       fRefreshAtEndOfEvent   != scene.fRefreshAtEndOfEvent  ||
294       fRefreshAtEndOfRun     != scene.fRefresh    294       fRefreshAtEndOfRun     != scene.fRefreshAtEndOfRun    ||
295       fMaxNumberOfKeptEvents != scene.fMaxNumb    295       fMaxNumberOfKeptEvents != scene.fMaxNumberOfKeptEvents
296       ) return true;                              296       ) return true;
297                                                   297 
298   /* A complete comparison should, perhaps, in    298   /* A complete comparison should, perhaps, include a comparison of
299      individual models, but it is not easy to     299      individual models, but it is not easy to implement operator!= for
300      all models.  Also, it would be unfeasible    300      all models.  Also, it would be unfeasible to ask users to
301      implement opeerator!= if we ever get roun    301      implement opeerator!= if we ever get round to allowing
302      user-defined models.  Moreover, there is     302      user-defined models.  Moreover, there is no editing of G4Scene
303      objects, apart from changing fRefreshAtEn    303      objects, apart from changing fRefreshAtEndOfEvent, etc; as far as
304      models are concerned, all you can ever do    304      models are concerned, all you can ever do is add them, so a test
305      on size (above) is enough.                   305      on size (above) is enough.
306                                                   306 
307   for (size_t i = 0; i < fRunDurationModelList    307   for (size_t i = 0; i < fRunDurationModelList.size (); i++) {
308     if (fRunDurationModelList[i] != scene.fRun    308     if (fRunDurationModelList[i] != scene.fRunDurationModelList[i])
309       return true;                                309       return true;
310   }                                               310   }
311                                                   311 
312   for (size_t i = 0; i < fEndOfEventModelList.    312   for (size_t i = 0; i < fEndOfEventModelList.size (); i++) {
313     if (fEndOfEventModelList[i] != scene.fEndO    313     if (fEndOfEventModelList[i] != scene.fEndOfEventModelList[i])
314       return true;                                314       return true;
315   }                                               315   }
316                                                   316 
317   for (size_t i = 0; i < fEndOfRunModelList.si    317   for (size_t i = 0; i < fEndOfRunModelList.size (); i++) {
318     if (fEndOfRunModelList[i] != scene.fEndOfR    318     if (fEndOfRunModelList[i] != scene.fEndOfRunModelList[i])
319       return true;                                319       return true;
320   }                                               320   }
321   */                                              321   */
322                                                   322 
323   return false;                                   323   return false;
324 }                                                 324 }
325                                                   325