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.0.p2)


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