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


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