Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/visualization/gMocren/src/G4GMocrenFileSceneHandler.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/gMocren/src/G4GMocrenFileSceneHandler.cc (Version 11.3.0) and /visualization/gMocren/src/G4GMocrenFileSceneHandler.cc (Version 10.2.p1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //                                                 26 //
                                                   >>  27 // $Id: G4GMocrenFileSceneHandler.cc 88772 2015-03-09 12:42:03Z gcosmo $
 27 //                                                 28 //
 28 //                                                 29 //
 29 // Created:  Mar. 31, 2009  Akinori Kimura         30 // Created:  Mar. 31, 2009  Akinori Kimura  
 30 //           Sep. 22, 2009  Akinori Kimura : m     31 //           Sep. 22, 2009  Akinori Kimura : modify and fix code to support 
 31 //                                          Pr     32 //                                          PrimitiveScorers and clean up
 32 //                                                 33 //
 33 // GMocrenFile scene handler                       34 // GMocrenFile scene handler
 34                                                    35 
 35                                                    36 
 36 //----- header files                               37 //----- header files
 37 #include <fstream>                                 38 #include <fstream>
 38 #include <cstdlib>                                 39 #include <cstdlib>
 39 #include <cstring>                                 40 #include <cstring>
 40 #include <sstream>                                 41 #include <sstream>
 41 #include <sstream>                             << 
 42 #include <iomanip>                             << 
 43                                                    42 
 44 #include "globals.hh"                              43 #include "globals.hh"
                                                   >>  44 #include "G4PhysicalConstants.hh"
                                                   >>  45 #include "G4SystemOfUnits.hh"
 45 #include "G4VisManager.hh"                         46 #include "G4VisManager.hh"
 46                                                    47 
 47 #include "G4GMocrenFile.hh"                        48 #include "G4GMocrenFile.hh"
 48 #include "G4GMocrenFileSceneHandler.hh"            49 #include "G4GMocrenFileSceneHandler.hh"
 49 #include "G4GMocrenFileViewer.hh"                  50 #include "G4GMocrenFileViewer.hh"
 50 #include "G4Point3D.hh"                            51 #include "G4Point3D.hh"
 51 #include "G4VisAttributes.hh"                      52 #include "G4VisAttributes.hh"
 52 #include "G4Scene.hh"                              53 #include "G4Scene.hh"
 53 #include "G4Transform3D.hh"                        54 #include "G4Transform3D.hh"
 54 #include "G4Polyhedron.hh"                         55 #include "G4Polyhedron.hh"
 55 #include "G4Box.hh"                                56 #include "G4Box.hh"
 56 #include "G4Cons.hh"                               57 #include "G4Cons.hh"
 57 #include "G4Polyline.hh"                           58 #include "G4Polyline.hh"
 58 #include "G4Trd.hh"                                59 #include "G4Trd.hh"
 59 #include "G4Tubs.hh"                               60 #include "G4Tubs.hh"
 60 #include "G4Trap.hh"                               61 #include "G4Trap.hh"
 61 #include "G4Torus.hh"                              62 #include "G4Torus.hh"
 62 #include "G4Sphere.hh"                             63 #include "G4Sphere.hh"
 63 #include "G4Para.hh"                               64 #include "G4Para.hh"
 64 #include "G4Text.hh"                               65 #include "G4Text.hh"
 65 #include "G4Circle.hh"                             66 #include "G4Circle.hh"
 66 #include "G4Square.hh"                             67 #include "G4Square.hh"
 67 #include "G4VPhysicalVolume.hh"                    68 #include "G4VPhysicalVolume.hh"
 68 #include "G4PhysicalVolumeModel.hh"                69 #include "G4PhysicalVolumeModel.hh"
 69 #include "G4LogicalVolume.hh"                      70 #include "G4LogicalVolume.hh"
 70 #include "G4Material.hh"                           71 #include "G4Material.hh"
 71                                                    72 
 72 #include "G4VPVParameterisation.hh"                73 #include "G4VPVParameterisation.hh"
 73 #include "G4VVolumeMaterialScanner.hh"             74 #include "G4VVolumeMaterialScanner.hh"
 74 #include "G4VisTrajContext.hh"                     75 #include "G4VisTrajContext.hh"
 75 #include "G4TrajectoriesModel.hh"                  76 #include "G4TrajectoriesModel.hh"
 76 #include "G4VTrajectoryModel.hh"                   77 #include "G4VTrajectoryModel.hh"
 77 #include "G4TrajectoryDrawByCharge.hh"             78 #include "G4TrajectoryDrawByCharge.hh"
 78 #include "G4HitsModel.hh"                          79 #include "G4HitsModel.hh"
 79 #include "G4GMocrenMessenger.hh"                   80 #include "G4GMocrenMessenger.hh"
 80 //#include "G4PSHitsModel.hh"                      81 //#include "G4PSHitsModel.hh"
 81 #include "G4GMocrenIO.hh"                          82 #include "G4GMocrenIO.hh"
 82 #include "G4VNestedParameterisation.hh"            83 #include "G4VNestedParameterisation.hh"
 83 #include "G4GMocrenTouchable.hh"                   84 #include "G4GMocrenTouchable.hh"
 84 #include "G4GMocrenFileCTtoDensityMap.hh"          85 #include "G4GMocrenFileCTtoDensityMap.hh"
 85 #include "G4PhantomParameterisation.hh"            86 #include "G4PhantomParameterisation.hh"
 86                                                    87 
 87 #include "G4ScoringManager.hh"                     88 #include "G4ScoringManager.hh"
 88 #include "G4ScoringBox.hh"                         89 #include "G4ScoringBox.hh"
 89                                                    90 
 90 #include "G4PhysicalConstants.hh"              << 
 91 #include "G4SystemOfUnits.hh"                  << 
 92                                                << 
 93 #include <utility>                             << 
 94                                                << 
 95 //----- constants                                  91 //----- constants
 96 const char  GDD_FILE_HEADER      [] = "g4_";       92 const char  GDD_FILE_HEADER      [] = "g4_";
 97 const char  DEFAULT_GDD_FILE_NAME[] = "g4_00.g     93 const char  DEFAULT_GDD_FILE_NAME[] = "g4_00.gdd";
 98                                                    94 
 99 const G4int FR_MAX_FILE_NUM = 100 ;                95 const G4int FR_MAX_FILE_NUM = 100 ;
100 const G4int MAX_NUM_TRAJECTORIES = 100000;         96 const G4int MAX_NUM_TRAJECTORIES = 100000;
101                                                    97 
102 //-- for a debugging                               98 //-- for a debugging
103 const G4bool GFDEBUG = false;                      99 const G4bool GFDEBUG = false;
104 const G4bool GFDEBUG_TRK = false;//true;          100 const G4bool GFDEBUG_TRK = false;//true;
105 const G4bool GFDEBUG_HIT = false;//true;          101 const G4bool GFDEBUG_HIT = false;//true;
106 const G4bool GFDEBUG_DIGI = false;//true;         102 const G4bool GFDEBUG_DIGI = false;//true;
107 const G4int GFDEBUG_DET = 0; // 0: false          103 const G4int GFDEBUG_DET = 0; // 0: false 
108                                                   104 
109 //////////////////////                            105 //////////////////////
110 // static variables //                            106 // static variables //
111 //////////////////////                            107 //////////////////////
112                                                   108 
113 //----- static variables                          109 //----- static variables
114 G4int G4GMocrenFileSceneHandler::kSceneIdCount    110 G4int G4GMocrenFileSceneHandler::kSceneIdCount = 0; 
115                                                   111 
116 ///////////////////////////                       112 ///////////////////////////
117 // Driver-dependent part //                       113 // Driver-dependent part //
118 ///////////////////////////                       114 ///////////////////////////
119                                                   115 
120                                                   116 
121 //----- G4GMocrenFileSceneHandler, constructor    117 //----- G4GMocrenFileSceneHandler, constructor
122 G4GMocrenFileSceneHandler::G4GMocrenFileSceneH    118 G4GMocrenFileSceneHandler::G4GMocrenFileSceneHandler(G4GMocrenFile& system,
123                  G4GMocrenMessenger & messenge    119                  G4GMocrenMessenger & messenger,
124                  const G4String& name)            120                  const G4String& name)
125   : G4VSceneHandler(system, kSceneIdCount++, n    121   : G4VSceneHandler(system, kSceneIdCount++, name),
126     kSystem(system),                              122     kSystem(system),
127     kMessenger(messenger),                        123     kMessenger(messenger),
128     kgMocrenIO(new G4GMocrenIO()),                124     kgMocrenIO(new G4GMocrenIO()),
129     kbSetModalityVoxelSize(false),                125     kbSetModalityVoxelSize(false),
130     kbModelingTrajectory(false),                  126     kbModelingTrajectory(false),
131 //    kGddDest(0),                                127 //    kGddDest(0),
132     kFlagInModeling(false),                       128     kFlagInModeling(false),
133     kFlagSaving_g4_gdd(false),                    129     kFlagSaving_g4_gdd(false),
134     kFlagParameterization(0),                     130     kFlagParameterization(0),
135     kFlagProcessedInteractiveScorer(false) {      131     kFlagProcessedInteractiveScorer(false) {
136                                                   132 
137   // g4.gdd filename and its directory            133   // g4.gdd filename and its directory
138   if(std::getenv("G4GMocrenFile_DEST_DIR") ==     134   if(std::getenv("G4GMocrenFile_DEST_DIR") == NULL) {
139     kGddDestDir[0] = '\0';                        135     kGddDestDir[0] = '\0';
140     //std::strcpy(kGddDestDir , "");              136     //std::strcpy(kGddDestDir , "");                    // output dir
141     //std::strcpy(kGddFileName, DEFAULT_GDD_FI    137     //std::strcpy(kGddFileName, DEFAULT_GDD_FILE_NAME); // filename
142     std::strncpy(kGddFileName, DEFAULT_GDD_FIL    138     std::strncpy(kGddFileName, DEFAULT_GDD_FILE_NAME,
143      std::strlen(DEFAULT_GDD_FILE_NAME)+1);       139      std::strlen(DEFAULT_GDD_FILE_NAME)+1);   // filename
144   } else {                                        140   } else {
145     const char * env = std::getenv("G4GMocrenF    141     const char * env = std::getenv("G4GMocrenFile_DEST_DIR");
146     G4int len = (G4int)std::strlen(env);       << 142     int len = std::strlen(env);
147     if(len > 256) {                               143     if(len > 256) {
148       G4Exception("G4GMocrenFileSceneHandler::    144       G4Exception("G4GMocrenFileSceneHandler::G4GMocrenFileSceneHandler(*)",
149                   "gMocren1000", FatalExceptio    145                   "gMocren1000", FatalException,
150                   "Invalid length of string se    146                   "Invalid length of string set in G4GMocrenFile_DEST_DIR");
151     }                                             147     }
152     std::strncpy(kGddDestDir, env, len+1);  //    148     std::strncpy(kGddDestDir, env, len+1);  // output dir
153     std::strncpy(kGddFileName, DEFAULT_GDD_FIL    149     std::strncpy(kGddFileName, DEFAULT_GDD_FILE_NAME,
154                  std::strlen(DEFAULT_GDD_FILE_    150                  std::strlen(DEFAULT_GDD_FILE_NAME)+1);  // filename
155   }                                               151   }
156                                                   152     
157   // maximum number of g4.gdd files in the des    153   // maximum number of g4.gdd files in the dest directory
158   kMaxFileNum = FR_MAX_FILE_NUM ; // initializ    154   kMaxFileNum = FR_MAX_FILE_NUM ; // initialization
159   if ( std::getenv( "G4GMocrenFile_MAX_FILE_NU    155   if ( std::getenv( "G4GMocrenFile_MAX_FILE_NUM" ) != NULL ) {  
160     char * pcFileNum = std::getenv("G4GMocrenF << 156     char * pcFileNum = getenv("G4GMocrenFile_MAX_FILE_NUM");
161     char c10FileNum[10];                          157     char c10FileNum[10];
162     std::strncpy(c10FileNum, pcFileNum, 9);    << 158     std::strncpy(c10FileNum, pcFileNum, 10);
163     c10FileNum[9] = '\0';                      << 
164     kMaxFileNum = std::atoi(c10FileNum);          159     kMaxFileNum = std::atoi(c10FileNum);
165                                                   160 
166   } else {                                        161   } else {
167     kMaxFileNum = FR_MAX_FILE_NUM ;               162     kMaxFileNum = FR_MAX_FILE_NUM ;
168   }                                               163   }
169   if( kMaxFileNum < 1 ) { kMaxFileNum = 1 ; }     164   if( kMaxFileNum < 1 ) { kMaxFileNum = 1 ; }
170                                                   165 
171   InitializeParameters();                         166   InitializeParameters();
172                                                   167 
173 }                                                 168 } 
174                                                   169 
175                                                   170 
176 //----- G4GMocrenFileSceneHandler, destructor     171 //----- G4GMocrenFileSceneHandler, destructor
177 G4GMocrenFileSceneHandler::~G4GMocrenFileScene    172 G4GMocrenFileSceneHandler::~G4GMocrenFileSceneHandler () 
178 {                                                 173 {
179   if(GFDEBUG || G4VisManager::GetVerbosity() >    174   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
180       G4cout << "***** ~G4GMocrenFileSceneHand    175       G4cout << "***** ~G4GMocrenFileSceneHandler" << G4endl;
181                                                   176 
182   if(kGddDest) {                                  177   if(kGddDest) {
183     //----- End of modeling                       178     //----- End of modeling
184     // close g4.gdd                               179     // close g4.gdd
185     GFEndModeling();                              180     GFEndModeling();
186   }                                               181   }
187   if(kgMocrenIO != NULL) delete kgMocrenIO;       182   if(kgMocrenIO != NULL) delete kgMocrenIO;
188                                                   183 
189 }                                                 184 }
190                                                   185 
191 //----- initialize all parameters                 186 //----- initialize all parameters
192 void G4GMocrenFileSceneHandler::InitializePara    187 void G4GMocrenFileSceneHandler::InitializeParameters() {
193                                                   188 
194   kbSetModalityVoxelSize = false;                 189   kbSetModalityVoxelSize = false;
195                                                   190 
196   for(G4int i = 0; i < 3; i++) {                  191   for(G4int i = 0; i < 3; i++) {
197     kModalitySize[i] = 0;                         192     kModalitySize[i] = 0;
198     kNestedVolumeDimension[i] = 0;                193     kNestedVolumeDimension[i] = 0;
199     kNestedVolumeDirAxis[i] = -1;                 194     kNestedVolumeDirAxis[i] = -1;
200   }                                               195   }
201                                                   196 
202   // delete kgMocrenIO;                           197   // delete kgMocrenIO;
203                                                   198 
204 }                                                 199 }
205                                                   200 
206 //-----                                           201 //-----
207 void G4GMocrenFileSceneHandler::SetGddFileName    202 void G4GMocrenFileSceneHandler::SetGddFileName() 
208 {                                                 203 {
209   // g4_00.gdd, g4_01.gdd, ..., g4_MAX_FILE_IN    204   // g4_00.gdd, g4_01.gdd, ..., g4_MAX_FILE_INDEX.gdd
210   const G4int MAX_FILE_INDEX = kMaxFileNum - 1    205   const G4int MAX_FILE_INDEX = kMaxFileNum - 1 ;
211                                                   206 
212   // dest directory (null if no environmental     207   // dest directory (null if no environmental variables is set)
213   std::strncpy(kGddFileName, kGddDestDir, size << 208   std::strncpy(kGddFileName, kGddDestDir, std::strlen(kGddDestDir)+1);
214   kGddFileName[sizeof(kGddFileName)-1] = '\0'; << 
215                                                   209 
216   // create full path name (default)              210   // create full path name (default)
217   std::strncat ( kGddFileName, DEFAULT_GDD_FIL << 211   std::strncat ( kGddFileName, DEFAULT_GDD_FILE_NAME, std::strlen(DEFAULT_GDD_FILE_NAME));
218                 sizeof(kGddFileName) - std::st << 
219                                                   212 
220   // Automatic updation of file names             213   // Automatic updation of file names
221   static G4int currentNumber = 0;                 214   static G4int currentNumber = 0;
222   for( G4int i = currentNumber ; i < kMaxFileN    215   for( G4int i = currentNumber ; i < kMaxFileNum ; i++) { 
223                                                   216 
224     // Message in the final execution             217     // Message in the final execution
225     if( i == MAX_FILE_INDEX )                     218     if( i == MAX_FILE_INDEX ) 
226       {                                           219       {
227   if (G4VisManager::GetVerbosity() >= G4VisMan    220   if (G4VisManager::GetVerbosity() >= G4VisManager::warnings) {
228     G4cout << "===============================    221     G4cout << "==========================================="   << G4endl; 
229     G4cout << "WARNING MESSAGE from GMocrenFil    222     G4cout << "WARNING MESSAGE from GMocrenFile driver:   "   << G4endl;
230     G4cout << "  This file name is the final o    223     G4cout << "  This file name is the final one in the   "   << G4endl;
231     G4cout << "  automatic updation of the out    224     G4cout << "  automatic updation of the output file name." << G4endl; 
232     G4cout << "  You may overwrite existing fi    225     G4cout << "  You may overwrite existing files, i.e.   "   << G4endl; 
233     G4cout << "  g4_XX.gdd."   << G4endl;         226     G4cout << "  g4_XX.gdd."   << G4endl;
234     G4cout << "===============================    227     G4cout << "==========================================="   << G4endl; 
235   }                                               228   }
236       }                                           229       }
237                                                   230 
238     // re-determine file name as G4GMocrenFile    231     // re-determine file name as G4GMocrenFile_DEST_DIR/g4_XX.gdd 
239     std::ostringstream filename;               << 232     if( i >=  0 && i <= 9 ) { 
240     filename                                   << 233       std::sprintf( kGddFileName, "%s%s%s%d.gdd" , kGddDestDir,  GDD_FILE_HEADER, "0", i );
241     << kGddDestDir << GDD_FILE_HEADER          << 234     } else {
242     << std::setw(2) << std::setfill('0') << i  << 235       std::sprintf( kGddFileName, "%s%s%d.gdd" , kGddDestDir,  GDD_FILE_HEADER, i );
243     strncpy(kGddFileName,filename.str().c_str( << 236     }
244     kGddFileName[sizeof(kGddFileName)-1] = '\0 << 
245                                                   237 
246     // check validity of the file name            238     // check validity of the file name
247     std::ifstream fin(kGddFileName);              239     std::ifstream fin(kGddFileName); 
248     if(GFDEBUG)                                   240     if(GFDEBUG)
249       G4cout << "FILEOPEN: " << i << " : " <<     241       G4cout << "FILEOPEN: " << i << " : " << kGddFileName << fin.fail()
250        << G4endl;                                 242        << G4endl;
251     if(!fin) {                                    243     if(!fin) { 
252       // new file                                 244       // new file 
253       fin.close();                                245       fin.close();
254       currentNumber = i+1;                        246       currentNumber = i+1;
255       break;                                      247       break; 
256     } else {                                      248     } else { 
257       // already exists (try next)                249       // already exists (try next) 
258       fin.close();                                250       fin.close(); 
259     }                                             251     } 
260                                                   252 
261   } // for                                        253   } // for 
262                                                   254 
263   G4cout << "=================================    255   G4cout << "======================================================================" << G4endl; 
264   G4cout << "Output file: " << kGddFileName       256   G4cout << "Output file: " << kGddFileName                          << G4endl; 
265   G4cout << "Destination directory (current di    257   G4cout << "Destination directory (current dir if NULL): " << kGddDestDir << G4endl; 
266   G4cout << "Maximum number of files in the de    258   G4cout << "Maximum number of files in the destination directory: " << kMaxFileNum << G4endl; 
267   G4cout << "Note:" << G4endl;                    259   G4cout << "Note:" << G4endl; 
268   G4cout << "  * The maximum number is customi    260   G4cout << "  * The maximum number is customizable as:           " << G4endl;
269   G4cout << "      % setenv  G4GMocrenFile_MAX    261   G4cout << "      % setenv  G4GMocrenFile_MAX_FILE_NUM  number " << G4endl;        
270   G4cout << "  * The destination directory is     262   G4cout << "  * The destination directory is customizable as:" << G4endl;
271   G4cout << "      % setenv  G4GMocrenFile_DES    263   G4cout << "      % setenv  G4GMocrenFile_DEST_DIR  dir_name/  " << G4endl;        
272   G4cout << "     ** Do not forget \"/\" at th    264   G4cout << "     ** Do not forget \"/\" at the end of the dir_name, e.g. \"./tmp/\"." << G4endl;              
273   //G4cout << "        dir_name, e.g. \"./tmp/    265   //G4cout << "        dir_name, e.g. \"./tmp/\"."                 << G4endl;              
274   G4cout << G4endl;                               266   G4cout << G4endl;
275   G4cout << "Maximum number of trajectories is    267   G4cout << "Maximum number of trajectories is set to " << MAX_NUM_TRAJECTORIES << "."<< G4endl;
276   G4cout << "=================================    268   G4cout << "======================================================================" << G4endl; 
277                                                   269 
278 } // G4GMocrenFileSceneHandler::SetGddFileName    270 } // G4GMocrenFileSceneHandler::SetGddFileName()
279                                                   271 
280                                                   272 
281 //-----                                           273 //-----
282 void  G4GMocrenFileSceneHandler::BeginSavingGd    274 void  G4GMocrenFileSceneHandler::BeginSavingGdd( void )
283 {                                                 275 {
284   if(GFDEBUG || G4VisManager::GetVerbosity() >    276   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
285       G4cout << "***** BeginSavingGdd (called)    277       G4cout << "***** BeginSavingGdd (called)" << G4endl;
286                                                   278 
287   if( !IsSavingGdd() ) {                          279   if( !IsSavingGdd() ) {
288                                                   280 
289     if(GFDEBUG || G4VisManager::GetVerbosity()    281     if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations) {
290       G4cout << "*****                   (star    282       G4cout << "*****                   (started) " ;
291       G4cout << "(open g4.gdd, ##)"  << G4endl    283       G4cout << "(open g4.gdd, ##)"  << G4endl;
292     }                                             284     }
293                                                   285 
294     SetGddFileName() ; // result set to kGddFi    286     SetGddFileName() ; // result set to kGddFileName
295     kFlagSaving_g4_gdd = true;                    287     kFlagSaving_g4_gdd = true; 
296                                                   288 
297                                                   289 
298     G4GMocrenFileCTtoDensityMap ctdens;           290     G4GMocrenFileCTtoDensityMap ctdens;
299     short minmax[2];                              291     short minmax[2];
300     minmax[0] = ctdens.GetMinCT();                292     minmax[0] = ctdens.GetMinCT();
301     minmax[1] = ctdens.GetMaxCT();                293     minmax[1] = ctdens.GetMaxCT();
302     kgMocrenIO->setModalityImageMinMax(minmax)    294     kgMocrenIO->setModalityImageMinMax(minmax);
303     std::vector<G4float> map;                     295     std::vector<G4float> map;
304     G4float dens;                                 296     G4float dens;
305     for(G4int i = minmax[0]; i <= minmax[1]; i    297     for(G4int i = minmax[0]; i <= minmax[1]; i++) {
306       dens = ctdens.GetDensity(i);                298       dens = ctdens.GetDensity(i);
307       map.push_back(dens);                        299       map.push_back(dens);
308     }                                             300     }
309     kgMocrenIO->setModalityImageDensityMap(map    301     kgMocrenIO->setModalityImageDensityMap(map);
310                                                   302 
311     /*                                            303     /*
312     G4String fname = "modality-map.dat";          304     G4String fname = "modality-map.dat";
313     std::ifstream ifile(fname);                   305     std::ifstream ifile(fname);
314     if(ifile) {                                   306     if(ifile) {
315       short minmax[2];                            307       short minmax[2];
316       ifile >> minmax[0] >> minmax[1];            308       ifile >> minmax[0] >> minmax[1];
317       kgMocrenIO->setModalityImageMinMax(minma    309       kgMocrenIO->setModalityImageMinMax(minmax);
318       std::vector<G4float> map;                   310       std::vector<G4float> map;
319       G4float dens;                               311       G4float dens;
320       for(G4int i = minmax[0]; i <= minmax[1];    312       for(G4int i = minmax[0]; i <= minmax[1]; i++) {
321   ifile >> dens;                                  313   ifile >> dens;
322   map.push_back(dens);                            314   map.push_back(dens);
323       }                                           315       }
324       kgMocrenIO->setModalityImageDensityMap(m    316       kgMocrenIO->setModalityImageDensityMap(map);
325                                                   317       
326     } else {                                      318     } else {
327       G4cout << "cann't open the file : " << f    319       G4cout << "cann't open the file : " << fname << G4endl;
328     }                                             320     }
329     */                                            321     */
330                                                   322 
331     // mesh size                                  323     // mesh size
332     //kMessenger.getNoVoxels(kModalitySize[0],    324     //kMessenger.getNoVoxels(kModalitySize[0], kModalitySize[1], kModalitySize[2]);
333     //kgMocrenIO->setModalityImageSize(kModali    325     //kgMocrenIO->setModalityImageSize(kModalitySize);
334                                                   326     
335     // initializations                            327     // initializations
336     //kgMocrenIO->clearModalityImage();           328     //kgMocrenIO->clearModalityImage();
337     kgMocrenIO->clearDoseDistAll();               329     kgMocrenIO->clearDoseDistAll();
338     kgMocrenIO->clearROIAll();                    330     kgMocrenIO->clearROIAll();
339     kgMocrenIO->clearTracks();                    331     kgMocrenIO->clearTracks();
340     kgMocrenIO->clearDetector();                  332     kgMocrenIO->clearDetector();
341     std::vector<Detector>::iterator itr = kDet    333     std::vector<Detector>::iterator itr = kDetectors.begin();
342     for(; itr != kDetectors.end(); itr++) {       334     for(; itr != kDetectors.end(); itr++) {
343       itr->clear();                               335       itr->clear();
344     }                                             336     }
345     kDetectors.clear();                           337     kDetectors.clear();
346                                                   338     
347     kNestedHitsList.clear();                      339     kNestedHitsList.clear();
348     kNestedVolumeNames.clear();                   340     kNestedVolumeNames.clear();
349                                                   341       
350   }                                               342   }
351 }                                                 343 }
352                                                   344 
353 void  G4GMocrenFileSceneHandler::EndSavingGdd     345 void  G4GMocrenFileSceneHandler::EndSavingGdd  ( void ) 
354 {                                                 346 {
355   if(GFDEBUG || G4VisManager::GetVerbosity() >    347   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
356     G4cout << "***** EndSavingGdd (called)" <<    348     G4cout << "***** EndSavingGdd (called)" << G4endl;
357                                                   349 
358   if(IsSavingGdd()) {                             350   if(IsSavingGdd()) {
359     if(GFDEBUG || G4VisManager::GetVerbosity()    351     if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
360       G4cout << "*****                 (starte    352       G4cout << "*****                 (started) (close "
361        << kGddFileName << ")" << G4endl;          353        << kGddFileName << ")" << G4endl;
362                                                   354 
363     if(kGddDest) kGddDest.close();                355     if(kGddDest) kGddDest.close();
364     kFlagSaving_g4_gdd = false;                   356     kFlagSaving_g4_gdd = false; 
365                                                   357 
366     std::map<Index3D, G4float>::iterator itr =    358     std::map<Index3D, G4float>::iterator itr = kNestedModality.begin();
367     G4int xmax=0, ymax=0, zmax=0;                 359     G4int xmax=0, ymax=0, zmax=0;
368     for(; itr != kNestedModality.end(); itr++)    360     for(; itr != kNestedModality.end(); itr++) {
369       if(itr->first.x > xmax) xmax = itr->firs    361       if(itr->first.x > xmax) xmax = itr->first.x;
370       if(itr->first.y > ymax) ymax = itr->firs    362       if(itr->first.y > ymax) ymax = itr->first.y;
371       if(itr->first.z > zmax) zmax = itr->firs    363       if(itr->first.z > zmax) zmax = itr->first.z;
372     }                                             364     }
373     // mesh size                                  365     // mesh size
374     kModalitySize[0] = xmax+1;                    366     kModalitySize[0] = xmax+1;
375     kModalitySize[1] = ymax+1;                    367     kModalitySize[1] = ymax+1;
376     kModalitySize[2] = zmax+1;                    368     kModalitySize[2] = zmax+1;
377     kgMocrenIO->setModalityImageSize(kModality    369     kgMocrenIO->setModalityImageSize(kModalitySize);
378     if(GFDEBUG) G4cout << "gMocren-file driver    370     if(GFDEBUG) G4cout << "gMocren-file driver : modality size : "
379            << kModalitySize[0] << " x "           371            << kModalitySize[0] << " x "
380            << kModalitySize[1] << " x "           372            << kModalitySize[1] << " x "
381            << kModalitySize[2] << G4endl;         373            << kModalitySize[2] << G4endl;
382                                                   374 
383     G4int nxy = kModalitySize[0]*kModalitySize    375     G4int nxy = kModalitySize[0]*kModalitySize[1];
384     //std::map<G4int, G4float>::iterator itr;     376     //std::map<G4int, G4float>::iterator itr;
385     for(G4int z = 0; z < kModalitySize[2]; z++    377     for(G4int z = 0; z < kModalitySize[2]; z++) {
386       short * modality = new short[nxy];          378       short * modality = new short[nxy];
387       for(G4int y = 0; y < kModalitySize[1]; y    379       for(G4int y = 0; y < kModalitySize[1]; y++) {
388   for(G4int x = 0; x < kModalitySize[0]; x++)     380   for(G4int x = 0; x < kModalitySize[0]; x++) {
389     //for(G4int x = kModalitySize[0]-1; x >= 0    381     //for(G4int x = kModalitySize[0]-1; x >= 0 ; x--) {
390     //G4int ixy = x + (kModalitySize[1]-y-1)*k    382     //G4int ixy = x + (kModalitySize[1]-y-1)*kModalitySize[0];
391                                                   383 
392     G4int ixy = x + y*kModalitySize[0];           384     G4int ixy = x + y*kModalitySize[0];
393     Index3D idx(x,y,z);                           385     Index3D idx(x,y,z);
394     itr = kNestedModality.find(idx);              386     itr = kNestedModality.find(idx);
395     if(itr != kNestedModality.end()) {            387     if(itr != kNestedModality.end()) {
396                                                   388 
397       modality[ixy] = kgMocrenIO->convertDensi    389       modality[ixy] = kgMocrenIO->convertDensityToHU(itr->second);
398     } else {                                      390     } else {
399       modality[ixy] = -1024;                      391       modality[ixy] = -1024;
400     }                                             392     }
401                                                   393 
402   }                                               394   }
403       }                                           395       }
404       kgMocrenIO->setModalityImage(modality);     396       kgMocrenIO->setModalityImage(modality);
405     }                                             397     }
406                                                   398 
407     //-- dose                                     399     //-- dose
408     size_t nhits = kNestedHitsList.size();        400     size_t nhits = kNestedHitsList.size();
409     if(GFDEBUG) G4cout << "gMocren-file driver    401     if(GFDEBUG) G4cout << "gMocren-file driver : # hits = " << nhits << G4endl;
410                                                   402 
411     std::map<Index3D, G4double>::iterator hits    403     std::map<Index3D, G4double>::iterator hitsItr;
412     std::map<G4String, std::map<Index3D, G4dou    404     std::map<G4String, std::map<Index3D, G4double> >::iterator hitsListItr = kNestedHitsList.begin();
413                                                   405 
414     for(G4int n = 0; hitsListItr != kNestedHit    406     for(G4int n = 0; hitsListItr != kNestedHitsList.end(); hitsListItr++, n++) {
415                                                   407 
416       kgMocrenIO->newDoseDist();                  408       kgMocrenIO->newDoseDist();
417       kgMocrenIO->setDoseDistName(hitsListItr-    409       kgMocrenIO->setDoseDistName(hitsListItr->first, n);
418       kgMocrenIO->setDoseDistSize(kModalitySiz    410       kgMocrenIO->setDoseDistSize(kModalitySize, n);
419                                                   411 
420       G4double minmax[2] = {DBL_MAX, -DBL_MAX}    412       G4double minmax[2] = {DBL_MAX, -DBL_MAX};
421       for(G4int z = 0 ; z < kModalitySize[2];     413       for(G4int z = 0 ; z < kModalitySize[2]; z++) {
422   G4double * values = new G4double[nxy];          414   G4double * values = new G4double[nxy];
423   for(G4int y = 0; y < kModalitySize[1]; y++)     415   for(G4int y = 0; y < kModalitySize[1]; y++) {
424     for(G4int x = 0; x < kModalitySize[0]; x++    416     for(G4int x = 0; x < kModalitySize[0]; x++) {
425                                                   417 
426       G4int ixy = x + y*kModalitySize[0];         418       G4int ixy = x + y*kModalitySize[0];
427       Index3D idx(x,y,z);                         419       Index3D idx(x,y,z);
428       hitsItr = hitsListItr->second.find(idx);    420       hitsItr = hitsListItr->second.find(idx);
429       if(hitsItr != hitsListItr->second.end())    421       if(hitsItr != hitsListItr->second.end()) {
430                                                   422 
431         values[ixy] = hitsItr->second;            423         values[ixy] = hitsItr->second;
432       } else {                                    424       } else {
433         values[ixy] = 0.;                         425         values[ixy] = 0.;
434       }                                           426       }
435       if(values[ixy] < minmax[0]) minmax[0] =     427       if(values[ixy] < minmax[0]) minmax[0] = values[ixy];
436       if(values[ixy] > minmax[1]) minmax[1] =     428       if(values[ixy] > minmax[1]) minmax[1] = values[ixy];
437     }                                             429     }
438   }                                               430   }
439   kgMocrenIO->setDoseDist(values, n);             431   kgMocrenIO->setDoseDist(values, n);
440       }                                           432       }
441       kgMocrenIO->setDoseDistMinMax(minmax, n)    433       kgMocrenIO->setDoseDistMinMax(minmax, n);
442       G4double lower = 0.;                        434       G4double lower = 0.;
443       if(minmax[0] < 0)  lower = minmax[0];       435       if(minmax[0] < 0)  lower = minmax[0];
444       G4double scale = (minmax[1]-lower)/25000    436       G4double scale = (minmax[1]-lower)/25000.;
445       kgMocrenIO->setDoseDistScale(scale, n);     437       kgMocrenIO->setDoseDistScale(scale, n);
446       G4String sunit("unit?"); //temporarily      438       G4String sunit("unit?"); //temporarily
447       kgMocrenIO->setDoseDistUnit(sunit, n);      439       kgMocrenIO->setDoseDistUnit(sunit, n);
448     }                                             440     }
449                                                   441       
450                                                   442 
451     //-- draw axes                                443     //-- draw axes
452     if(false) {//true,false                       444     if(false) {//true,false
453       G4ThreeVector trans;                        445       G4ThreeVector trans;
454       G4RotationMatrix rot;                       446       G4RotationMatrix rot;
455       trans = kVolumeTrans3D.getTranslation();    447       trans = kVolumeTrans3D.getTranslation();
456       rot = kVolumeTrans3D.getRotation().inver    448       rot = kVolumeTrans3D.getRotation().inverse();
457       // x                                        449       // x
458       std::vector<G4float *> tracks;              450       std::vector<G4float *> tracks;
459       unsigned char colors[3];                    451       unsigned char colors[3];
460       G4float * trk = new G4float[6];             452       G4float * trk = new G4float[6];
461       tracks.push_back(trk);                      453       tracks.push_back(trk);
462                                                   454 
463       G4ThreeVector orig(0.,0.,0), xa(2000.,0.    455       G4ThreeVector orig(0.,0.,0), xa(2000.,0.,0.), ya(0.,2000.,0.), za(0.,0.,2000.);
464       orig -= trans;                              456       orig -= trans;
465       orig.transform(rot);                        457       orig.transform(rot);
466       xa -= trans;                                458       xa -= trans;
467       xa.transform(rot);                          459       xa.transform(rot);
468       ya -= trans;                                460       ya -= trans;
469       ya.transform(rot);                          461       ya.transform(rot);
470       za -= trans;                                462       za -= trans;
471       za.transform(rot);                          463       za.transform(rot);
472       for(G4int i = 0; i < 3; i++) trk[i] = or    464       for(G4int i = 0; i < 3; i++) trk[i] = orig[i];
473       for(G4int i = 0; i < 3; i++) trk[i+3] =     465       for(G4int i = 0; i < 3; i++) trk[i+3] = xa[i];
474       colors[0] = 255; colors[1] = 0; colors[2    466       colors[0] = 255; colors[1] = 0; colors[2] = 0;
475       kgMocrenIO->addTrack(tracks, colors);       467       kgMocrenIO->addTrack(tracks, colors);
476       // y                                        468       // y
477       for(G4int i = 0; i < 3; i++) trk[i+3] =     469       for(G4int i = 0; i < 3; i++) trk[i+3] = ya[i];
478       colors[0] = 0; colors[1] = 255; colors[2    470       colors[0] = 0; colors[1] = 255; colors[2] = 0;
479       kgMocrenIO->addTrack(tracks, colors);       471       kgMocrenIO->addTrack(tracks, colors);
480       // z                                        472       // z
481       for(G4int i = 0; i < 3; i++) trk[i+3] =     473       for(G4int i = 0; i < 3; i++) trk[i+3] = za[i];
482       colors[0] = 0; colors[1] = 0; colors[2]     474       colors[0] = 0; colors[1] = 0; colors[2] = 255;
483       kgMocrenIO->addTrack(tracks, colors);       475       kgMocrenIO->addTrack(tracks, colors);
484     }                                             476     }
485                                                   477 
486     //-- detector                                 478     //-- detector
487     ExtractDetector();                            479     ExtractDetector();
488                                                   480 
489                                                   481 
490     if(GFDEBUG_DET) G4cout << ">>>>>>>>>>>>>>>    482     if(GFDEBUG_DET) G4cout << ">>>>>>>>>>>>>>>>>>>>>>   (";
491     std::vector<G4float> transformObjects;        483     std::vector<G4float> transformObjects;
492     for(G4int i = 0; i < 3; i++) {                484     for(G4int i = 0; i < 3; i++) {
493       // need to check!!                          485       // need to check!!
494       transformObjects.push_back((kVolumeSize[    486       transformObjects.push_back((kVolumeSize[i]/2. - kVoxelDimension[i]/2.));
495       if(GFDEBUG_DET) G4cout << transformObjec    487       if(GFDEBUG_DET) G4cout << transformObjects[i] << ", ";
496     }                                             488     }
497     if(GFDEBUG_DET) G4cout << ")" << G4endl;      489     if(GFDEBUG_DET) G4cout << ")" << G4endl;
498                                                   490 
499                                                   491 
500     kgMocrenIO->translateTracks(transformObjec    492     kgMocrenIO->translateTracks(transformObjects);
501     kgMocrenIO->translateDetector(transformObj    493     kgMocrenIO->translateDetector(transformObjects);
502                                                   494 
503     // store                                      495     // store
504     kgMocrenIO->storeData(kGddFileName);          496     kgMocrenIO->storeData(kGddFileName);
505   }                                               497   } 
506                                                   498 
507 }                                                 499 }
508                                                   500 
509                                                   501 
510 //-----                                           502 //----- 
511 void G4GMocrenFileSceneHandler::GFBeginModelin    503 void G4GMocrenFileSceneHandler::GFBeginModeling( void )
512 {                                                 504 {
513   G4VSceneHandler::BeginModeling();               505   G4VSceneHandler::BeginModeling();
514                                                   506 
515   if( !GFIsInModeling() ) {                       507   if( !GFIsInModeling() ) {
516                                                   508 
                                                   >> 509 
517     if(GFDEBUG || G4VisManager::GetVerbosity()    510     if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
518       G4cout << "***** G4GMocrenFileSceneHandl    511       G4cout << "***** G4GMocrenFileSceneHandler::GFBeginModeling (called & started)" << G4endl;
519                                                   512 
520     //----- Send saving command and heading co << 513       //----- Send saving command and heading comment
521     BeginSavingGdd();                          << 514       BeginSavingGdd();
522                                                << 515       
523     kFlagInModeling = true ;                   << 516       kFlagInModeling = true ;
524                                                   517 
525     // These models are entrusted to user comm << 518       // These models are entrusted to user commands /vis/scene/add/psHits or hits
526     //GetScene()->AddEndOfEventModel(new G4PSH << 519       //GetScene()->AddEndOfEventModel(new G4PSHitsModel()); 
527     //GetScene()->AddEndOfRunModel(new G4PSHit << 520       //GetScene()->AddEndOfRunModel(new G4PSHitsModel()); 
528     //scene->AddEndOfEventModel(new G4HitsMode << 521       //scene->AddEndOfEventModel(new G4HitsModel());
529     if(GFDEBUG_HIT) {                          << 522       if(GFDEBUG_HIT) {
530       G4Scene * scene = GetScene();            << 523         G4Scene * scene = GetScene();
531       std::vector<G4Scene::Model> vmodel = sce << 524   std::vector<G4Scene::Model> vmodel = scene->GetEndOfEventModelList();
532       std::vector<G4Scene::Model>::iterator it << 525   std::vector<G4Scene::Model>::iterator itr = vmodel.begin();
533       for(; itr != vmodel.end(); itr++) {      << 526   for(; itr != vmodel.end(); itr++) {
534         G4cout << " IIIIII model name: " << it << 527     G4cout << " IIIIII model name: " << itr->fpModel->GetGlobalTag() << G4endl;
                                                   >> 528   }
535       }                                           529       }
536     }                                          << 530 
537   }                                            << 531     } // if
538 }                                              << 532 } 
539                                                   533 
540                                                   534 
541 //========== AddPrimitive() functions ========    535 //========== AddPrimitive() functions ==========//
542                                                   536 
543 //----- Add polyline                              537 //----- Add polyline 
544 void G4GMocrenFileSceneHandler::AddPrimitive (    538 void G4GMocrenFileSceneHandler::AddPrimitive (const G4Polyline& polyline) 
545 {                                                 539 {
546   if(GFDEBUG || G4VisManager::GetVerbosity() >    540   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
547     G4cout << "***** AddPrimitive" << G4endl;     541     G4cout << "***** AddPrimitive" << G4endl;
548                                                   542 
549   if (fProcessing2D) {                            543   if (fProcessing2D) {
550     static G4bool warned = false;                 544     static G4bool warned = false;
551     if (!warned) {                                545     if (!warned) {
552       warned = true;                              546       warned = true;
553       G4Exception                                 547       G4Exception
554   ("G4GMocrenFileSceneHandler::AddPrimitive (c    548   ("G4GMocrenFileSceneHandler::AddPrimitive (const G4Polyline&)",
555    "gMocren1001", JustWarning,                    549    "gMocren1001", JustWarning,
556    "2D polylines not implemented.  Ignored.");    550    "2D polylines not implemented.  Ignored.");
557     }                                             551     }
558     return;                                       552     return;
559   }                                               553   }
560                                                   554 
561   //----- Initialize if necessary                 555   //----- Initialize if necessary
562   GFBeginModeling();                              556   GFBeginModeling();
563                                                   557 
564   static G4int numTrajectories = 0;               558   static G4int numTrajectories = 0;
565   if(numTrajectories >= MAX_NUM_TRAJECTORIES)     559   if(numTrajectories >= MAX_NUM_TRAJECTORIES) return;
566                                                   560 
567   // draw trajectories                            561   // draw trajectories
568   if(kbModelingTrajectory) {                      562   if(kbModelingTrajectory) {
569                                                   563     
570     G4TrajectoriesModel * pTrModel = dynamic_c    564     G4TrajectoriesModel * pTrModel = dynamic_cast<G4TrajectoriesModel*>(fpModel);
571     if (!pTrModel) {                              565     if (!pTrModel) { 
572       G4Exception                                 566       G4Exception 
573   ("G4VSceneHandler::AddCompound(const G4Polyl    567   ("G4VSceneHandler::AddCompound(const G4Polyline&)",
574    "gMocren0002", FatalException, "Not a G4Tra    568    "gMocren0002", FatalException, "Not a G4TrajectoriesModel.");
575     }                                             569     }
576                                                   570 
577     G4ThreeVector trans;                          571     G4ThreeVector trans;
578     G4RotationMatrix rot;                         572     G4RotationMatrix rot;
579     trans = kVolumeTrans3D.getTranslation();      573     trans = kVolumeTrans3D.getTranslation();
580     rot = kVolumeTrans3D.getRotation().inverse    574     rot = kVolumeTrans3D.getRotation().inverse();
581                                                   575 
582     if(GFDEBUG_TRK) G4cout << "   trajectory p    576     if(GFDEBUG_TRK) G4cout << "   trajectory points : " << G4endl;
583     std::vector<G4float *> trajectory;            577     std::vector<G4float *> trajectory;
584     if(polyline.size() < 2) return;               578     if(polyline.size() < 2) return;
585     G4Polyline::const_iterator preitr = polyli    579     G4Polyline::const_iterator preitr = polyline.begin();
586     G4Polyline::const_iterator postitr = preit    580     G4Polyline::const_iterator postitr = preitr; postitr++;
587     for(; postitr != polyline.end(); preitr++,    581     for(; postitr != polyline.end(); preitr++, postitr++) {
588       G4ThreeVector prePts(preitr->x(), preitr    582       G4ThreeVector prePts(preitr->x(), preitr->y(), preitr->z());
589       prePts -= trans;                            583       prePts -= trans;
590       prePts.transform(rot);                      584       prePts.transform(rot);
591       G4ThreeVector postPts(postitr->x(), post    585       G4ThreeVector postPts(postitr->x(), postitr->y(), postitr->z());
592       postPts -= trans;                           586       postPts -= trans;
593       postPts.transform(rot);                     587       postPts.transform(rot);
594       G4float * stepPts = new G4float[6];         588       G4float * stepPts = new G4float[6];
595       stepPts[0] = prePts.x();                    589       stepPts[0] = prePts.x();
596       stepPts[1] = prePts.y();                    590       stepPts[1] = prePts.y();
597       stepPts[2] = prePts.z();                    591       stepPts[2] = prePts.z();
598       stepPts[3] = postPts.x();                   592       stepPts[3] = postPts.x();
599       stepPts[4] = postPts.y();                   593       stepPts[4] = postPts.y();
600       stepPts[5] = postPts.z();                   594       stepPts[5] = postPts.z();
601       trajectory.push_back(stepPts);              595       trajectory.push_back(stepPts);
602                                                   596 
603       if(GFDEBUG_TRK) {                           597       if(GFDEBUG_TRK) {
604   G4cout << "                       ("            598   G4cout << "                       ("
605          << stepPts[0] << ", "                    599          << stepPts[0] << ", "
606          << stepPts[1] << ", "                    600          << stepPts[1] << ", "
607          << stepPts[2] << ") - ("                 601          << stepPts[2] << ") - (" 
608          << stepPts[3] << ", "                    602          << stepPts[3] << ", "
609          << stepPts[4] << ", "                    603          << stepPts[4] << ", "
610          << stepPts[5] << ")" << G4endl;          604          << stepPts[5] << ")" << G4endl;
611       }                                           605       }
612     }                                             606     }
613                                                   607 
614     const G4VisAttributes * att = polyline.Get    608     const G4VisAttributes * att = polyline.GetVisAttributes();
615     G4Color color = att->GetColor();              609     G4Color color = att->GetColor();
616     unsigned char trkcolor[3];                    610     unsigned char trkcolor[3];
617     trkcolor[0] = (unsigned char)(color.GetRed    611     trkcolor[0] = (unsigned char)(color.GetRed()*255);
618     trkcolor[1] = (unsigned char)(color.GetGre    612     trkcolor[1] = (unsigned char)(color.GetGreen()*255);
619     trkcolor[2] = (unsigned char)(color.GetBlu    613     trkcolor[2] = (unsigned char)(color.GetBlue()*255);
620     if(GFDEBUG_TRK) {                             614     if(GFDEBUG_TRK) {
621       G4cout << "              color  : ["        615       G4cout << "              color  : ["
622        << color.GetRed() << ", "                  616        << color.GetRed() << ", "
623        << color.GetGreen() << ", "                617        << color.GetGreen() << ", "
624        << color.GetBlue() << "]" << G4endl;       618        << color.GetBlue() << "]" << G4endl;
625     }                                             619     }
626                                                   620 
627     kgMocrenIO->addTrack(trajectory, trkcolor)    621     kgMocrenIO->addTrack(trajectory, trkcolor);
628                                                   622 
629     numTrajectories++;                            623     numTrajectories++;
630   }                                               624   }
631                                                   625 
632 } // G4GMocrenFileSceneHandler::AddPrimitive (    626 } // G4GMocrenFileSceneHandler::AddPrimitive (polyline)
633                                                   627 
634                                                   628 
635 //----- Add text                                  629 //----- Add text
636 void G4GMocrenFileSceneHandler::AddPrimitive (    630 void G4GMocrenFileSceneHandler::AddPrimitive ( const G4Text& text )
637 {                                                 631 {
638   if (fProcessing2D) {                            632   if (fProcessing2D) {
639     static G4bool warned = false;                 633     static G4bool warned = false;
640     if (!warned) {                                634     if (!warned) {
641       warned = true;                              635       warned = true;
642       G4Exception                                 636       G4Exception
643   ("G4GMocrenFileSceneHandler::AddPrimitive (c    637   ("G4GMocrenFileSceneHandler::AddPrimitive (const G4Text&)",
644    "gMocren1002", JustWarning,                    638    "gMocren1002", JustWarning,
645    "2D text not implemented.  Ignored.");         639    "2D text not implemented.  Ignored.");
646     }                                             640     }
647     return;                                       641     return;
648   }                                               642   }
649                                                   643 
650   // to avoid a warning in the compile process    644   // to avoid a warning in the compile process
651   G4Text dummytext = text;                        645   G4Text dummytext = text;
652                                                   646 
653   //-----                                         647   //----- 
654   if(GFDEBUG || G4VisManager::GetVerbosity() >    648   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
655     G4cout << "***** AddPrimitive( G4Text )" <    649     G4cout << "***** AddPrimitive( G4Text )" << G4endl;
656                                                   650 
657   //----- Initialize IF NECESSARY                 651   //----- Initialize IF NECESSARY
658   GFBeginModeling();                              652   GFBeginModeling();
659                                                   653 
660 } // G4GMocrenFileSceneHandler::AddPrimitive (    654 } // G4GMocrenFileSceneHandler::AddPrimitive ( text )
661                                                   655 
662                                                   656 
663 //----- Add circle                                657 //----- Add circle
664 void G4GMocrenFileSceneHandler::AddPrimitive (    658 void G4GMocrenFileSceneHandler::AddPrimitive ( const G4Circle& mark_circle )
665 {                                                 659 {
666   // to avoid a warning in the compile process    660   // to avoid a warning in the compile process
667   G4Circle dummycircle = mark_circle;             661   G4Circle dummycircle = mark_circle;
668                                                   662 
669   if (fProcessing2D) {                            663   if (fProcessing2D) {
670     static G4bool warned = false;                 664     static G4bool warned = false;
671     if (!warned) {                                665     if (!warned) {
672       warned = true;                              666       warned = true;
673       G4Exception                                 667       G4Exception
674   ("G4GMocrenFileSceneHandler::AddPrimitive (c    668   ("G4GMocrenFileSceneHandler::AddPrimitive (const G4Circle&)",
675    "gMocren1003", JustWarning,                    669    "gMocren1003", JustWarning,
676    "2D circles not implemented.  Ignored.");      670    "2D circles not implemented.  Ignored.");
677     }                                             671     }
678     return;                                       672     return;
679   }                                               673   }
680                                                   674 
681   //-----                                         675   //----- 
682   if(GFDEBUG || G4VisManager::GetVerbosity() >    676   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
683     G4cout << "***** AddPrimitive( G4Circle )"    677     G4cout << "***** AddPrimitive( G4Circle )" << G4endl;
684                                                   678 
685   //----- Initialize IF NECESSARY                 679   //----- Initialize IF NECESSARY
686   GFBeginModeling();                              680   GFBeginModeling();
687                                                   681 
688                                                   682 
689 } // G4GMocrenFileSceneHandler::AddPrimitive (    683 } // G4GMocrenFileSceneHandler::AddPrimitive ( mark_circle )
690                                                   684 
691                                                   685 
692 //----- Add square                                686 //----- Add square
693 void G4GMocrenFileSceneHandler::AddPrimitive (    687 void G4GMocrenFileSceneHandler::AddPrimitive (const G4Square& mark_square )
694 {                                                 688 {
695   // to avoid a warning in the compile process    689   // to avoid a warning in the compile process
696   G4Square dummysquare = mark_square;             690   G4Square dummysquare = mark_square;
697                                                   691 
698   if (fProcessing2D) {                            692   if (fProcessing2D) {
699     static G4bool warned = false;                 693     static G4bool warned = false;
700     if (!warned) {                                694     if (!warned) {
701       warned = true;                              695       warned = true;
702       G4Exception                                 696       G4Exception
703   ("G4GMocrenFileSceneHandler::AddPrimitive (c    697   ("G4GMocrenFileSceneHandler::AddPrimitive (const G4Square&)",
704    "gMocren1004", JustWarning,                    698    "gMocren1004", JustWarning,
705    "2D squares not implemented.  Ignored.");      699    "2D squares not implemented.  Ignored.");
706     }                                             700     }
707     return;                                       701     return;
708   }                                               702   }
709                                                   703 
710   //-----                                         704   //----- 
711   if(GFDEBUG || G4VisManager::GetVerbosity() >    705   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
712     G4cout << "***** AddPrimitive( G4Square )"    706     G4cout << "***** AddPrimitive( G4Square )" << G4endl;
713                                                   707 
714   //----- Initialize if necessary                 708   //----- Initialize if necessary
715   GFBeginModeling();                              709   GFBeginModeling();
716                                                   710 
717 } // G4GMocrenFileSceneHandler::AddPrimitive (    711 } // G4GMocrenFileSceneHandler::AddPrimitive ( mark_square )
718                                                   712 
719                                                   713 
720 //----- Add polyhedron                            714 //----- Add polyhedron
721 void G4GMocrenFileSceneHandler::AddPrimitive (    715 void G4GMocrenFileSceneHandler::AddPrimitive ( const G4Polyhedron& polyhedron ) 
722 {                                                 716 {
723   //-----                                         717   //----- 
724   if(GFDEBUG || G4VisManager::GetVerbosity() >    718   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
725     G4cout << "***** AddPrimitive( G4Polyhedro    719     G4cout << "***** AddPrimitive( G4Polyhedron )" << G4endl;
726                                                   720 
727                                                   721 
728   if (polyhedron.GetNoFacets() == 0) return;      722   if (polyhedron.GetNoFacets() == 0) return;
729                                                   723 
730   if (fProcessing2D) {                            724   if (fProcessing2D) {
731     static G4bool warned = false;                 725     static G4bool warned = false;
732     if (!warned) {                                726     if (!warned) {
733       warned = true;                              727       warned = true;
734       G4Exception                                 728       G4Exception
735   ("G4GMocrenFileSceneHandler::AddPrimitive (c    729   ("G4GMocrenFileSceneHandler::AddPrimitive (const G4Polyhedron&)",
736    "gMocren1005", JustWarning,                    730    "gMocren1005", JustWarning,
737    "2D polyhedra not implemented.  Ignored.");    731    "2D polyhedra not implemented.  Ignored.");
738     }                                             732     }
739     return;                                       733     return;
740   }                                               734   }
741                                                   735 
742   //----- Initialize if necessary                 736   //----- Initialize if necessary
743   GFBeginModeling();                              737   GFBeginModeling();
744                                                   738 
745   //---------- (3) Facet block                    739   //---------- (3) Facet block
746   for (G4int f = polyhedron.GetNoFacets(); f;     740   for (G4int f = polyhedron.GetNoFacets(); f; f--){
747     G4bool notLastEdge = true;                    741     G4bool notLastEdge = true;
748     G4int index = -1; // initialization           742     G4int index = -1; // initialization
749     G4int edgeFlag = 1;                           743     G4int edgeFlag = 1;
750     //G4int preedgeFlag = 1;                      744     //G4int preedgeFlag = 1;
751     //G4int work[4], i = 0;                       745     //G4int work[4], i = 0;
752     G4int i = 0;                                  746     G4int i = 0;
753     do {                                          747     do {
754       //preedgeFlag = edgeFlag;                   748       //preedgeFlag = edgeFlag;
755       notLastEdge = polyhedron.GetNextVertexIn    749       notLastEdge = polyhedron.GetNextVertexIndex(index, edgeFlag);
756       //work[i++] = index;                        750       //work[i++] = index;
757       i++;                                        751       i++;
758     }while (notLastEdge);                         752     }while (notLastEdge);
759     switch (i){                                   753     switch (i){
760     case 3:                                       754     case 3:
761       //SendStrInt3(FR_FACET, work[0], work[1]    755       //SendStrInt3(FR_FACET, work[0], work[1], work[2] );
762       break;                                      756       break;
763     case 4:                                       757     case 4:
764       //SendStrInt4(FR_FACET, work[0], work[1]    758       //SendStrInt4(FR_FACET, work[0], work[1], work[2], work[3] );
765       break;                                      759       break;
766     default:                                      760     default:
767       if(GFDEBUG || G4VisManager::GetVerbosity    761       if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
768   G4cout <<                                       762   G4cout <<
769     "ERROR G4GMocrenFileSceneHandler::AddPrimi    763     "ERROR G4GMocrenFileSceneHandler::AddPrimitive(G4Polyhedron)" << G4endl;
770       G4PhysicalVolumeModel* pPVModel =           764       G4PhysicalVolumeModel* pPVModel =
771         dynamic_cast<G4PhysicalVolumeModel*>(f    765         dynamic_cast<G4PhysicalVolumeModel*>(fpModel);
772       if (pPVModel)                               766       if (pPVModel)   
773   if(G4VisManager::GetVerbosity() >= G4VisMana    767   if(G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
774     G4cout << "Volume " << pPVModel->GetCurren    768     G4cout << "Volume " << pPVModel->GetCurrentPV()->GetName() <<
775       ", Solid " << pPVModel->GetCurrentLV()->    769       ", Solid " << pPVModel->GetCurrentLV()->GetSolid()->GetName() <<
776       " (" << pPVModel->GetCurrentLV()->GetSol    770       " (" << pPVModel->GetCurrentLV()->GetSolid()->GetEntityType();
777                                                   771 
778       if(G4VisManager::GetVerbosity() >= G4Vis    772       if(G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
779   G4cout <<                                       773   G4cout <<
780     "\nG4Polyhedron facet with " << i << " edg    774     "\nG4Polyhedron facet with " << i << " edges" << G4endl;  
781     }                                             775     }
782   }                                               776   }
783                                                   777 
784 } // G4GMocrenFileSceneHandler::AddPrimitive (    778 } // G4GMocrenFileSceneHandler::AddPrimitive (polyhedron) 
785                                                   779 
786                                                   780 
787 //-----                                           781 //----- 
788 void G4GMocrenFileSceneHandler::GFEndModeling     782 void G4GMocrenFileSceneHandler::GFEndModeling ()
789 {                                                 783 {
790   G4VSceneHandler::EndModeling();                 784   G4VSceneHandler::EndModeling();
791                                                   785 
792   //-----                                         786   //-----     
793   if(GFDEBUG || G4VisManager::GetVerbosity() >    787   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
794     G4cout << "***** GFEndModeling (called)" <    788     G4cout << "***** GFEndModeling (called)" << G4endl;
795                                                   789 
796   if( GFIsInModeling() ) {                        790   if( GFIsInModeling() ) {
797                                                   791 
798     if(GFDEBUG || G4VisManager::GetVerbosity()    792     if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations) {
799       G4cout << "***** GFEndModeling (started)    793       G4cout << "***** GFEndModeling (started) " ; 
800       G4cout << "(/EndModeling, /DrawAll, /Clo    794       G4cout << "(/EndModeling, /DrawAll, /CloseDevice)" << G4endl;
801     }                                             795     }
802                                                   796 
803     //----- End saving data to g4.gdd             797     //----- End saving data to g4.gdd
804     EndSavingGdd() ;                              798     EndSavingGdd() ;
805                                                   799 
806     //------ Reset flag                           800     //------ Reset flag 
807     kFlagInModeling = false ;                     801     kFlagInModeling = false ;
808                                                   802 
809   }                                               803   }
810                                                   804 
811 }                                                 805 }
812                                                   806 
813                                                   807 
814 //-----                                           808 //----- 
815 void G4GMocrenFileSceneHandler::BeginPrimitive    809 void G4GMocrenFileSceneHandler::BeginPrimitives (const G4Transform3D& objectTransformation)
816 {                                                 810 {
817   if(GFDEBUG || G4VisManager::GetVerbosity() >    811   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
818     G4cout << "***** BeginPrimitives " << G4en    812     G4cout << "***** BeginPrimitives " << G4endl;
819                                                   813 
820   GFBeginModeling();                              814   GFBeginModeling();
821                                                   815 
822   G4VSceneHandler::BeginPrimitives (objectTran    816   G4VSceneHandler::BeginPrimitives (objectTransformation);
823                                                   817 
824 }                                                 818 }
825                                                   819 
826                                                   820 
827 //-----                                           821 //----- 
828 void G4GMocrenFileSceneHandler::EndPrimitives     822 void G4GMocrenFileSceneHandler::EndPrimitives ()
829 {                                                 823 {
830   if(GFDEBUG || G4VisManager::GetVerbosity() >    824   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
831     G4cout << "***** EndPrimitives " << G4endl    825     G4cout << "***** EndPrimitives " << G4endl;
832                                                   826 
833   G4VSceneHandler::EndPrimitives ();              827   G4VSceneHandler::EndPrimitives ();
834 }                                                 828 }
835                                                   829 
836                                                   830 
837 //========== AddSolid() functions ==========//    831 //========== AddSolid() functions ==========//
838                                                   832 
839 //----- Add box                                   833 //----- Add box
840 void G4GMocrenFileSceneHandler::AddSolid( cons    834 void G4GMocrenFileSceneHandler::AddSolid( const G4Box& box )
841 {                                                 835 {
842   if(GFDEBUG || G4VisManager::GetVerbosity() >    836   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
843     G4cout << "***** AddSolid ( box )" << G4en    837     G4cout << "***** AddSolid ( box )" << G4endl;
844                                                << 838 
845   if(GFDEBUG_DET > 0)                             839   if(GFDEBUG_DET > 0)
846     G4cout << "G4GMocrenFileSceneHandler::AddS    840     G4cout << "G4GMocrenFileSceneHandler::AddSolid(const G4Box&)  : "
847      << box.GetName() << G4endl;                  841      << box.GetName() << G4endl;
848                                                << 842 
849   //----- skip drawing invisible primitive        843   //----- skip drawing invisible primitive
850   if( !IsVisible() ) { return ; }                 844   if( !IsVisible() ) { return ; }
851                                                << 845 
852   //----- Initialize if necessary                 846   //----- Initialize if necessary
853   GFBeginModeling();                              847   GFBeginModeling();
854                                                << 848 
855                                                << 849 
856   //--                                            850   //--
857   if(GFDEBUG_DET > 1) {                           851   if(GFDEBUG_DET > 1) {
858     G4cout << "-------" << G4endl;                852     G4cout << "-------" << G4endl;
859     G4cout << "    " << box.GetName() << G4end    853     G4cout << "    " << box.GetName() << G4endl;
860     G4Polyhedron * poly = box.CreatePolyhedron    854     G4Polyhedron * poly = box.CreatePolyhedron();
861     poly->Transform(fObjectTransformation);       855     poly->Transform(fObjectTransformation);
862     //G4int nv = poly->GetNoVertices();           856     //G4int nv = poly->GetNoVertices();
863     G4Point3D v1, v2;                             857     G4Point3D v1, v2;
864     G4int next;                                   858     G4int next;
865     //while(1) { // next flag isn't functional    859     //while(1) { // next flag isn't functional.
866     for(G4int i = 0; i < 12; i++) { // # of ed    860     for(G4int i = 0; i < 12; i++) { // # of edges is 12.
867       poly->GetNextEdge(v1, v2, next);            861       poly->GetNextEdge(v1, v2, next);
868       if(next == 0) break;                        862       if(next == 0) break;
869       G4cout << "    (" << v1.x() << ", "         863       G4cout << "    (" << v1.x() << ", "
870        << v1.y() << ", "                          864        << v1.y() << ", "
871        << v1.z() << ") - ("                       865        << v1.z() << ") - ("
872        << v2.x() << ", "                          866        << v2.x() << ", "
873        << v2.y() << ", "                          867        << v2.y() << ", "
874        << v2.z() << ") [" << next << "]"          868        << v2.z() << ") [" << next << "]"
875        << G4endl;                                 869        << G4endl;
876     }                                             870     }
877     delete poly;                                  871     delete poly;
878   }                                               872   }
879                                                << 873 
880                                                << 874 
881   // the volume name set by /vis/gMocren/setVo    875   // the volume name set by /vis/gMocren/setVolumeName
882   G4String volName = kMessenger.getVolumeName(    876   G4String volName = kMessenger.getVolumeName();
883                                                << 877 
884                                                << 
885   if(kFlagParameterization != 2) {                878   if(kFlagParameterization != 2) {
886     G4ScoringManager * pScrMan = G4ScoringMana    879     G4ScoringManager * pScrMan = G4ScoringManager::GetScoringManager();
887     if(pScrMan) {                                 880     if(pScrMan) {
888       G4ScoringBox * pScBox = dynamic_cast<G4S    881       G4ScoringBox * pScBox = dynamic_cast<G4ScoringBox*>(pScrMan->FindMesh(volName));
889       G4bool bMesh = false;                       882       G4bool bMesh = false;
890       if(pScBox != NULL) bMesh = true;            883       if(pScBox != NULL) bMesh = true;
891       if(bMesh) kFlagParameterization = 2;        884       if(bMesh) kFlagParameterization = 2;
892       if(GFDEBUG_DET > 0) G4cout << "   G4Scor    885       if(GFDEBUG_DET > 0) G4cout << "   G4ScoringManager::FindMesh() : "
893         << volName << " - " << bMesh << G4endl << 886          << volName << " - " << bMesh << G4endl;
894     }                                             887     }
895   }                                               888   }
896                                                << 889 
897   const G4VModel* pv_model  = GetModel();         890   const G4VModel* pv_model  = GetModel();
898   if (!pv_model) { return ; }                  << 891   if (!pv_model) { return ; } 
899   G4PhysicalVolumeModel* pPVModel =               892   G4PhysicalVolumeModel* pPVModel =
900   dynamic_cast<G4PhysicalVolumeModel*>(fpModel << 893     dynamic_cast<G4PhysicalVolumeModel*>(fpModel);
901   if (!pPVModel) { return ; }                     894   if (!pPVModel) { return ; }
902                                                   895 
903                                                << 896 
904   //-- debug information                          897   //-- debug information
905   if(GFDEBUG_DET > 0) {                           898   if(GFDEBUG_DET > 0) {
906     G4Material * mat = pPVModel->GetCurrentMat    899     G4Material * mat = pPVModel->GetCurrentMaterial();
907     G4String name = mat->GetName();               900     G4String name = mat->GetName();
908     G4double dens = mat->GetDensity()/(g/cm3);    901     G4double dens = mat->GetDensity()/(g/cm3);
909     G4int copyNo = pPVModel->GetCurrentPV()->G    902     G4int copyNo = pPVModel->GetCurrentPV()->GetCopyNo();
910     G4int depth = pPVModel->GetCurrentDepth();    903     G4int depth = pPVModel->GetCurrentDepth();
911     G4cout << "    copy no.: " << copyNo << G4    904     G4cout << "    copy no.: " << copyNo << G4endl;
912     G4cout << "    depth   : " << depth << G4e    905     G4cout << "    depth   : " << depth << G4endl;
913     G4cout << "    density : " << dens << " [g    906     G4cout << "    density : " << dens << " [g/cm3]" << G4endl;
914     G4cout << "    location: " << pPVModel->Ge    907     G4cout << "    location: " << pPVModel->GetCurrentPV()->GetObjectTranslation() << G4endl;
915     G4cout << "    Multiplicity        : " <<     908     G4cout << "    Multiplicity        : " << pPVModel->GetCurrentPV()->GetMultiplicity() << G4endl;
916     G4cout << "    Is replicated?      : " <<     909     G4cout << "    Is replicated?      : " << pPVModel->GetCurrentPV()->IsReplicated() << G4endl;
917     G4cout << "    Is parameterised?   : " <<     910     G4cout << "    Is parameterised?   : " << pPVModel->GetCurrentPV()->IsParameterised() << G4endl;
918     G4cout << "    top phys. vol. name : " <<     911     G4cout << "    top phys. vol. name : " << pPVModel->GetTopPhysicalVolume()->GetName() << G4endl;
919   }                                               912   }
920                                                << 913 
921   //-- check the parameterised volume             914   //-- check the parameterised volume
922   if(box.GetName() == volName) {                  915   if(box.GetName() == volName) {
923                                                   916     
924     kVolumeTrans3D = fObjectTransformation;       917     kVolumeTrans3D = fObjectTransformation;
925     // coordination system correction for gMoc    918     // coordination system correction for gMocren
926     G4ThreeVector raxis(1., 0., 0.), dummy(0., << 919     G4ThreeVector raxis(1., 0., 0.), dummy(0.,0.,0.); 
927     G4RotationMatrix rot(raxis, pi*rad);          920     G4RotationMatrix rot(raxis, pi*rad);
928     G4Transform3D trot(rot, dummy);               921     G4Transform3D trot(rot, dummy);
929     if(GFDEBUG_DET) {                             922     if(GFDEBUG_DET) {
930       G4ThreeVector trans1 = kVolumeTrans3D.ge    923       G4ThreeVector trans1 = kVolumeTrans3D.getTranslation();
931       G4RotationMatrix rot1 = kVolumeTrans3D.g    924       G4RotationMatrix rot1 = kVolumeTrans3D.getRotation().inverse();
932       G4cout << "kVolumeTrans3D: " << trans1 <    925       G4cout << "kVolumeTrans3D: " << trans1 << G4endl << rot1 << G4endl;
933     }                                             926     }
934     kVolumeTrans3D = kVolumeTrans3D*trot;         927     kVolumeTrans3D = kVolumeTrans3D*trot;
935     if(GFDEBUG_DET) G4cout << " Parameterised     928     if(GFDEBUG_DET) G4cout << " Parameterised volume : " << box.GetName() << G4endl;
936                                                << 929 
937                                                << 930 
938                                                << 931 
939     //                                            932     //
940     G4VPhysicalVolume * pv[3] = {0,0,0};          933     G4VPhysicalVolume * pv[3] = {0,0,0};
941     pv[0] = pPVModel->GetCurrentPV()->GetLogic    934     pv[0] = pPVModel->GetCurrentPV()->GetLogicalVolume()->GetDaughter(0);
942     if(!pv[0]) {                                  935     if(!pv[0]) {
943       G4Exception("G4GMocrenFileSceneHandler::    936       G4Exception("G4GMocrenFileSceneHandler::AddSolid( const G4Box& box )",
944                   "gMocren0003", FatalExceptio << 937       "gMocren0003", FatalException, "Unexpected volume.");
945     }                                             938     }
946     G4int dirAxis[3] = {-1,-1,-1};                939     G4int dirAxis[3] = {-1,-1,-1};
947     G4int nDaughters[3] = {0,0,0};                940     G4int nDaughters[3] = {0,0,0};
948                                                << 941 
949     EAxis axis; G4int nReplicas; G4double widt << 942     EAxis axis; G4int nReplicas; G4double width; G4double offset; G4bool consuming;  
950     pv[0]->GetReplicationData(axis, nReplicas,    943     pv[0]->GetReplicationData(axis, nReplicas, width, offset, consuming);
951     nDaughters[0] = nReplicas;                    944     nDaughters[0] = nReplicas;
952     switch(axis) {                                945     switch(axis) {
953       case kXAxis: dirAxis[0] = 0; break;      << 946     case kXAxis: dirAxis[0] = 0; break;
954       case kYAxis: dirAxis[0] = 1; break;      << 947     case kYAxis: dirAxis[0] = 1; break;
955       case kZAxis: dirAxis[0] = 2; break;      << 948     case kZAxis: dirAxis[0] = 2; break;
956       default:                                 << 949     default:
957         G4Exception("G4GMocrenFileSceneHandler << 950       G4Exception("G4GMocrenFileSceneHandler::AddSolid( const G4Box& box )",
958                     "gMocren0004", FatalExcept << 951       "gMocren0004", FatalException, "Error.");
959     }                                             952     }
960     kNestedVolumeNames.push_back(pv[0]->GetNam    953     kNestedVolumeNames.push_back(pv[0]->GetName());
961     if(GFDEBUG_DET)                            << 954     if(GFDEBUG_DET) 
962       G4cout << "        daughter name :  " <<    955       G4cout << "        daughter name :  " << pv[0]->GetName()
963        << "   # : " << nDaughters[0] << G4endl    956        << "   # : " << nDaughters[0] << G4endl;
964                                                << 957 
965     //                                            958     //
966     if(GFDEBUG_DET) {                             959     if(GFDEBUG_DET) {
967       if(pv[0]->GetLogicalVolume()->GetNoDaugh    960       if(pv[0]->GetLogicalVolume()->GetNoDaughters()) {
968         G4cout << "# of daughters : "          << 961   G4cout << "# of daughters : " 
969          << pv[0]->GetLogicalVolume()->GetNoDa    962          << pv[0]->GetLogicalVolume()->GetNoDaughters() << G4endl;
970       } else {                                    963       } else {
971         //G4Exception("G4GMocrenFileSceneHandl << 964   //G4Exception("G4GMocrenFileSceneHandler::AddSolid( const G4Box& box )",
972         //      "gMocren0005", FatalException, << 965   //      "gMocren0005", FatalException, "Error.");
973       }                                           966       }
974     }                                             967     }
975                                                << 968 
976     // check whether nested or regular paramet    969     // check whether nested or regular parameterization
977     if(GFDEBUG_DET) G4cout << "# of daughters  << 970     if(GFDEBUG_DET) G4cout << "# of daughters : " 
978          << pv[0]->GetLogicalVolume()->GetNoDa    971          << pv[0]->GetLogicalVolume()->GetNoDaughters() << G4endl;
979     if(pv[0]->GetLogicalVolume()->GetNoDaughte    972     if(pv[0]->GetLogicalVolume()->GetNoDaughters() == 0) {
980       kFlagParameterization = 1;                  973       kFlagParameterization = 1;
981       //G4Exception("G4GMocrenFileSceneHandler    974       //G4Exception("G4GMocrenFileSceneHandler::AddSolid( const G4Box& box )",
982       //      "gMocren0006", FatalException, "    975       //      "gMocren0006", FatalException, "Error.");
983     }                                             976     }
984                                                   977     
985     if(kFlagParameterization == 0) {              978     if(kFlagParameterization == 0) {
986                                                << 979 
987       pv[1] = pv[0]->GetLogicalVolume()->GetDa    980       pv[1] = pv[0]->GetLogicalVolume()->GetDaughter(0);
988       if(pv[1]) {                                 981       if(pv[1]) {
989         pv[1]->GetReplicationData(axis, nRepli << 982   pv[1]->GetReplicationData(axis, nReplicas, width, offset, consuming);
990         nDaughters[1] = nReplicas;             << 983   nDaughters[1] = nReplicas;
991         switch(axis) {                         << 984   switch(axis) {
992           case kXAxis: dirAxis[1] = 0; break;  << 985   case kXAxis: dirAxis[1] = 0; break;
993           case kYAxis: dirAxis[1] = 1; break;  << 986   case kYAxis: dirAxis[1] = 1; break;
994           case kZAxis: dirAxis[1] = 2; break;  << 987   case kZAxis: dirAxis[1] = 2; break;
995           default:                             << 988   default:
996             G4Exception("G4GMocrenFileSceneHan << 989     G4Exception("G4GMocrenFileSceneHandler::AddSolid( const G4Box& box )",
997                         "gMocren0007", FatalEx << 990           "gMocren0007", FatalException, "Error.");
998         }                                      << 991   }
999         kNestedVolumeNames.push_back(pv[1]->Ge << 992   kNestedVolumeNames.push_back(pv[1]->GetName());
1000         if(GFDEBUG_DET)                       << 993   if(GFDEBUG_DET) 
1001           G4cout << "        sub-daughter nam << 994     G4cout << "        sub-daughter name :  " << pv[1]->GetName()
1002           << "   # : " << nDaughters[1]<< G4e << 995      << "   # : " << nDaughters[1]<< G4endl;
1003                                               << 996 
1004         //                                    << 997   //
1005         pv[2] = pv[1]->GetLogicalVolume()->Ge << 998   pv[2] = pv[1]->GetLogicalVolume()->GetDaughter(0);
1006         if(pv[2]) {                           << 999   if(pv[2]) {
1007           nDaughters[2] = pv[2]->GetMultiplic << 1000     nDaughters[2] = pv[2]->GetMultiplicity();
1008           kNestedVolumeNames.push_back(pv[2]- << 1001     kNestedVolumeNames.push_back(pv[2]->GetName());
1009           if(GFDEBUG_DET)                     << 1002     if(GFDEBUG_DET) 
1010             G4cout << "        sub-sub-daught << 1003       G4cout << "        sub-sub-daughter name :  " << pv[2]->GetName()
1011             << "   # : " << nDaughters[2] <<  << 1004        << "   # : " << nDaughters[2] << G4endl;
1012                                               << 1005 
1013           if(nDaughters[2] > 1) {             << 1006     if(nDaughters[2] > 1) {
1014             G4VNestedParameterisation * nestP << 1007       G4VNestedParameterisation * nestPara
1015             = dynamic_cast<G4VNestedParameter << 1008         = dynamic_cast<G4VNestedParameterisation*>(pv[2]->GetParameterisation());
1016             if(nestPara == NULL)              << 1009       if(nestPara == NULL)
1017               G4Exception("G4GMocrenFileScene << 1010         G4Exception("G4GMocrenFileSceneHandler::AddSolid( const G4Box& box )",
1018                           "gMocren0008", Fata << 1011         "gMocren0008", FatalException, "Non-nested parameterisation");
1019                                               << 1012 
1020             nestPara->ComputeTransformation(0 << 1013       nestPara->ComputeTransformation(0, pv[2]);
1021             G4ThreeVector trans0 = pv[2]->Get << 1014       G4ThreeVector trans0 = pv[2]->GetObjectTranslation();
1022             nestPara->ComputeTransformation(1 << 1015       nestPara->ComputeTransformation(1, pv[2]);
1023             G4ThreeVector trans1 = pv[2]->Get << 1016       G4ThreeVector trans1 = pv[2]->GetObjectTranslation();
1024             G4ThreeVector diff(trans0 - trans << 1017       G4ThreeVector diff(trans0 - trans1);
1025             if(GFDEBUG_DET)                   << 1018       if(GFDEBUG_DET) 
1026               G4cout << trans0 << " - " << tr << 1019         G4cout << trans0 << " - " << trans1 << " - " << diff << G4endl;
1027                                               << 1020 
1028             if(diff.x() != 0.) dirAxis[2] = 0 << 1021       if(diff.x() != 0.) dirAxis[2] = 0;
1029             else if(diff.y() != 0.) dirAxis[2 << 1022       else if(diff.y() != 0.) dirAxis[2] = 1;
1030             else if(diff.z() != 0.) dirAxis[2 << 1023       else if(diff.z() != 0.) dirAxis[2] = 2;
1031             else                              << 1024       else
1032               G4Exception("G4GMocrenFileScene << 1025         G4Exception("G4GMocrenFileSceneHandler::AddSolid( const G4Box& box )",
1033                           "gMocren0009", Fata << 1026         "gMocren0009", FatalException, "Unexpected nested parameterisation");
1034           }                                   << 1027     }
1035         }                                     << 1028   }
1036       }                                          1029       }
1037                                                  1030       
1038       for(G4int i = 0; i < 3; i++) {             1031       for(G4int i = 0; i < 3; i++) {
1039         kNestedVolumeDimension[i] = nDaughter << 1032   kNestedVolumeDimension[i] = nDaughters[i];
1040         //kNestedVolumeDimension[i] = nDaught << 1033   //kNestedVolumeDimension[i] = nDaughters[dirAxis[i]];
1041         kNestedVolumeDirAxis[i] = dirAxis[i]; << 1034   kNestedVolumeDirAxis[i] = dirAxis[i];
1042       }                                          1035       }
1043       //G4cout << "@@@@@@@@@ "                   1036       //G4cout << "@@@@@@@@@ "
1044       //       << dirAxis[0] << ", " << dirAx    1037       //       << dirAxis[0] << ", " << dirAxis[1] << ", " << dirAxis[2] << G4endl;
1045                                               << 1038 
1046       // get densities                           1039       // get densities
1047       G4VNestedParameterisation * nestPara       1040       G4VNestedParameterisation * nestPara
1048       = dynamic_cast<G4VNestedParameterisatio << 1041   = dynamic_cast<G4VNestedParameterisation*>(pv[2]->GetParameterisation());
1049       if(nestPara != NULL) {                     1042       if(nestPara != NULL) {
1050         G4double prexyz[3] = {0.,0.,0.}, xyz[ << 1043   G4double prexyz[3] = {0.,0.,0.}, xyz[3] = {0.,0.,0.};
1051         for(G4int n0 = 0; n0 < nDaughters[0]; << 1044   for(G4int n0 = 0; n0 < nDaughters[0]; n0++) {
1052           for(G4int n1 = 0; n1 < nDaughters[1 << 1045     for(G4int n1 = 0; n1 < nDaughters[1]; n1++) {
1053             for(G4int n2 = 0; n2 < nDaughters << 1046       for(G4int n2 = 0; n2 < nDaughters[2]; n2++) {
1054                                               << 1047       
1055               G4GMocrenTouchable * touch = ne << 1048         G4GMocrenTouchable * touch = new G4GMocrenTouchable(n1, n0);
1056               if(GFDEBUG_DET)                 << 1049         if(GFDEBUG_DET) 
1057                 G4cout << "   retrieve volume << 1050     G4cout << "   retrieve volume : copy # : " << n0
1058                 << ", " << n1 << ", " << n2 < << 1051            << ", " << n1 << ", " << n2 << G4endl;
1059               G4Material * mat = nestPara->Co << 1052         G4Material * mat = nestPara->ComputeMaterial(pv[2], n2, touch);
1060               delete touch;                   << 1053         delete touch;
1061               G4double dens = mat->GetDensity << 1054         G4double dens = mat->GetDensity()/(g/cm3);
1062                                               << 1055  
1063               if(GFDEBUG_DET)                 << 1056         if(GFDEBUG_DET) 
1064                 G4cout << "           density << 1057     G4cout << "           density :" << dens << " [g/cm3]" << G4endl;
1065                                               << 1058 
1066               G4Box tbox(box);                << 1059         G4Box tbox(box);
1067               nestPara->ComputeDimensions(tbo << 1060         nestPara->ComputeDimensions(tbox, n2, pv[2]);
1068               xyz[0] = tbox.GetXHalfLength()/ << 1061         xyz[0] = tbox.GetXHalfLength()/mm;
1069               xyz[1] = tbox.GetYHalfLength()/ << 1062         xyz[1] = tbox.GetYHalfLength()/mm;
1070               xyz[2] = tbox.GetZHalfLength()/ << 1063         xyz[2] = tbox.GetZHalfLength()/mm;
1071               if(n0 != 0 || n1 != 0 || n2 !=  << 1064         if(n0 != 0 || n1 != 0 || n2 != 0) {
1072                 for(G4int i = 0; i < 3; i++)  << 1065     for(G4int i = 0; i < 3; i++) {
1073                   if(xyz[i] != prexyz[i])     << 1066       if(xyz[i] != prexyz[i])
1074                     G4Exception("G4GMocrenFil << 1067         G4Exception("G4GMocrenFileSceneHandler::AddSolid( const G4Box& box )",
1075                                 "gMocren0010" << 1068         "gMocren0010", FatalException, "Unsupported parameterisation");
1076                 }                             << 1069     }
1077               }                               << 1070         }
1078               if(GFDEBUG_DET)                 << 1071         if(GFDEBUG_DET) 
1079                 G4cout << "              size << 1072     G4cout << "              size : " << tbox.GetXHalfLength()/mm << " x "
1080                 << tbox.GetYHalfLength()/mm < << 1073            << tbox.GetYHalfLength()/mm << " x "
1081                 << tbox.GetZHalfLength()/mm < << 1074            << tbox.GetZHalfLength()/mm << " [mm3]" << G4endl;
1082                                               << 1075 
1083               G4int idx[3];                   << 1076         G4int idx[3];
1084               idx[dirAxis[0]] = n0;           << 1077         idx[dirAxis[0]] = n0;
1085               idx[dirAxis[1]] = n1;           << 1078         idx[dirAxis[1]] = n1;
1086               idx[dirAxis[2]] = n2;           << 1079         idx[dirAxis[2]] = n2;
1087               Index3D i3d(idx[0],idx[1],idx[2 << 1080         Index3D i3d(idx[0],idx[1],idx[2]);
1088               kNestedModality[i3d] = dens;    << 1081         kNestedModality[i3d] = dens;
1089               if(GFDEBUG_DET)                 << 1082         if(GFDEBUG_DET) 
1090                 G4cout << " index: " << idx[0 << 1083     G4cout << " index: " << idx[0] << ", " << idx[1] << ", " << idx[2]
1091                 << "  density: " << dens << G << 1084            << "  density: " << dens << G4endl;
1092                                               << 1085 
1093               for(G4int i = 0; i < 3; i++) pr << 1086         for(G4int i = 0; i < 3; i++) prexyz[i] = xyz[i];
1094             }                                 << 1087       }
1095           }                                   << 1088     }
1096         }                                     << 1089   }  
1097                                               << 1090 
1098         kVolumeSize.set(box.GetXHalfLength()* << 1091   kVolumeSize.set(box.GetXHalfLength()*2/mm,
1099                         box.GetYHalfLength()* << 1092       box.GetYHalfLength()*2/mm,
1100                         box.GetZHalfLength()* << 1093       box.GetZHalfLength()*2/mm);
1101         // mesh size                          << 1094   // mesh size
1102         if(!kbSetModalityVoxelSize) {         << 1095   if(!kbSetModalityVoxelSize) {
1103           G4float spacing[3] = {static_cast<G << 1096     G4float spacing[3] = {static_cast<G4float>(2*xyz[0]),
1104             static_cast<G4float>(2*xyz[1]),   << 1097                                 static_cast<G4float>(2*xyz[1]),
1105             static_cast<G4float>(2*xyz[2])};  << 1098                                 static_cast<G4float>(2*xyz[2])};
1106           kgMocrenIO->setVoxelSpacing(spacing << 1099     kgMocrenIO->setVoxelSpacing(spacing);
1107           kVoxelDimension.set(spacing[0], spa << 1100     kVoxelDimension.set(spacing[0], spacing[1], spacing[2]);
1108           kbSetModalityVoxelSize = true;      << 1101     kbSetModalityVoxelSize = true;
1109         }                                     << 1102   }
1110                                               << 1103 
1111       } else {                                   1104       } else {
1112         if(GFDEBUG_DET)                       << 1105   if(GFDEBUG_DET) 
1113           G4cout << pv[2]->GetName() << G4end << 1106     G4cout << pv[2]->GetName() << G4endl;
1114         G4Exception("G4GMocrenFileSceneHandle << 1107   G4Exception("G4GMocrenFileSceneHandler::AddSolid( const G4Box& box )",
1115                     "gMocren0011", FatalExcep << 1108         "gMocren0011", FatalException, "Non-nested parameterisation");
1116       }                                          1109       }
1117                                               << 1110 
1118                                               << 1111 
1119                                               << 1112 
1120       //-- debug                                 1113       //-- debug
1121       if(GFDEBUG_DET > 1) {                      1114       if(GFDEBUG_DET > 1) {
1122         if(pPVModel->GetCurrentPV()->IsParame << 1115   if(pPVModel->GetCurrentPV()->IsParameterised()) {
1123           G4VPVParameterisation * para = pPVM << 1116     G4VPVParameterisation * para = pPVModel->GetCurrentPV()->GetParameterisation();
1124           G4cout << " Is nested parameterisat << 1117     G4cout << " Is nested parameterisation? : " << para->IsNested() << G4endl;
1125                                               << 1118 
1126                                               << 1119 
1127           G4int npvp = pPVModel->GetDrawnPVPa << 1120     G4int npvp = pPVModel->GetDrawnPVPath().size();
1128           G4cout << "     physical volume nod << 1121     G4cout << "     physical volume node id : "
1129           << "size: " << npvp << ", PV name:  << 1122      << "size: " << npvp << ", PV name: ";
1130           for(G4int i = 0; i < npvp; i++) {   << 1123     for(G4int i = 0; i < npvp; i++) {
1131             G4cout << pPVModel->GetDrawnPVPat << 1124       G4cout << pPVModel->GetDrawnPVPath()[i].GetPhysicalVolume()->GetName()
1132             << " [param:"                     << 1125        << " [param:"
1133             << pPVModel->GetDrawnPVPath()[i]. << 1126        << pPVModel->GetDrawnPVPath()[i].GetPhysicalVolume()->IsParameterised()
1134             << ",rep:"                        << 1127        << ",rep:"
1135             << pPVModel->GetDrawnPVPath()[i]. << 1128        << pPVModel->GetDrawnPVPath()[i].GetPhysicalVolume()->IsReplicated();
1136             if(pPVModel->GetDrawnPVPath()[i]. << 1129       if(pPVModel->GetDrawnPVPath()[i].GetPhysicalVolume()->GetParameterisation()) {
1137               G4cout << ",nest:"              << 1130         G4cout << ",nest:"
1138               << pPVModel->GetDrawnPVPath()[i << 1131          << pPVModel->GetDrawnPVPath()[i].GetPhysicalVolume()->GetParameterisation()->IsNested();
1139             }                                 << 1132       }
1140             G4cout << ",copyno:"              << 1133       G4cout << ",copyno:"
1141             << pPVModel->GetDrawnPVPath()[i]. << 1134        << pPVModel->GetDrawnPVPath()[i].GetPhysicalVolume()->GetCopyNo();
1142             G4cout << "] - ";                 << 1135       G4cout << "] - ";
1143           }                                   << 1136     }
1144           G4cout << G4endl;                   << 1137     G4cout << G4endl;
1145                                               << 1138 
1146                                               << 1139 
1147           pPVModel->GetCurrentPV()->GetReplic << 1140     pPVModel->GetCurrentPV()->GetReplicationData(axis, nReplicas, width, offset, consuming);
1148           G4cout << "     # replicas : " << n << 1141     G4cout << "     # replicas : " << nReplicas << G4endl;
1149           G4double pareDims[3] = {0.,0.,0.};  << 1142     G4double pareDims[3] = {0.,0.,0.};
1150           G4Box * pbox = dynamic_cast<G4Box * << 1143     G4Box * pbox = dynamic_cast<G4Box *>(pPVModel->GetDrawnPVPath()[npvp-2].GetPhysicalVolume()->GetLogicalVolume()->GetSolid());
1151           if(pbox) {                          << 1144     if(pbox) {
1152             pareDims[0] = 2.*pbox->GetXHalfLe << 1145       pareDims[0] = 2.*pbox->GetXHalfLength()*mm;
1153             pareDims[1] = 2.*pbox->GetYHalfLe << 1146       pareDims[1] = 2.*pbox->GetYHalfLength()*mm;
1154             pareDims[2] = 2.*pbox->GetZHalfLe << 1147       pareDims[2] = 2.*pbox->GetZHalfLength()*mm;
1155             G4cout << "     mother size ["    << 1148       G4cout << "     mother size ["
1156             << pPVModel->GetDrawnPVPath()[npv << 1149        << pPVModel->GetDrawnPVPath()[npvp-2].GetPhysicalVolume()->GetName()
1157             << "] : "                         << 1150        << "] : "
1158             << pareDims[0] << " x "           << 1151        << pareDims[0] << " x "
1159             << pareDims[1] << " x "           << 1152        << pareDims[1] << " x "
1160             << pareDims[2] << " [mm3]"        << 1153        << pareDims[2] << " [mm3]"
1161             << G4endl;                        << 1154        << G4endl;
1162           }                                   << 1155     }
1163           G4double paraDims[3];               << 1156     G4double paraDims[3];
1164           G4Box * boxP = dynamic_cast<G4Box * << 1157     G4Box * boxP = dynamic_cast<G4Box *>(pPVModel->GetDrawnPVPath()[npvp-1].GetPhysicalVolume()->GetLogicalVolume()->GetSolid());
1165           if(boxP) {                          << 1158     if(boxP) {
1166             paraDims[0] = 2.*boxP->GetXHalfLe << 1159       paraDims[0] = 2.*boxP->GetXHalfLength()*mm;
1167             paraDims[1] = 2.*boxP->GetYHalfLe << 1160       paraDims[1] = 2.*boxP->GetYHalfLength()*mm;
1168             paraDims[2] = 2.*boxP->GetZHalfLe << 1161       paraDims[2] = 2.*boxP->GetZHalfLength()*mm;
1169             G4cout << "     parameterised vol << 1162       G4cout << "     parameterised volume? ["
1170             << pPVModel->GetDrawnPVPath()[npv << 1163        << pPVModel->GetDrawnPVPath()[npvp-1].GetPhysicalVolume()->GetName()
1171             << "] : "                         << 1164        << "] : "
1172             << paraDims[0] << " x "           << 1165        << paraDims[0] << " x "
1173             << paraDims[1] << " x "           << 1166        << paraDims[1] << " x "
1174             << paraDims[2] << " [mm3]  : "    << 1167        << paraDims[2] << " [mm3]  : "
1175             << G4int(pareDims[0]/paraDims[0]) << 1168        << G4int(pareDims[0]/paraDims[0]) << " x "
1176             << G4int(pareDims[1]/paraDims[1]) << 1169        << G4int(pareDims[1]/paraDims[1]) << " x "
1177             << G4int(pareDims[2]/paraDims[2]) << 1170        << G4int(pareDims[2]/paraDims[2]) << G4endl;
1178           } else {                            << 1171     } else {
1179             G4cout << pPVModel->GetDrawnPVPat << 1172       G4cout << pPVModel->GetDrawnPVPath()[npvp-2].GetPhysicalVolume()->GetName()
1180             << " isn't a G4Box." << G4endl;   << 1173        << " isn't a G4Box." << G4endl;
1181           }                                   << 1174     }
1182         }                                     << 1175   }
1183       }                                          1176       }
1184                                               << 1177 
1185                                               << 1178 
1186     } else if(kFlagParameterization == 1) { /    1179     } else if(kFlagParameterization == 1) { // G4PhantomParameterisation based geom. construnction
1187                                               << 1180 
1188       // get the dimension of the parameteriz    1181       // get the dimension of the parameterized patient geometry
1189       G4PhantomParameterisation * phantomPara    1182       G4PhantomParameterisation * phantomPara
1190       = dynamic_cast<G4PhantomParameterisatio << 1183   = dynamic_cast<G4PhantomParameterisation*>(pv[0]->GetParameterisation());
1191       if(phantomPara == NULL) {                  1184       if(phantomPara == NULL) {
1192         G4Exception("G4GMocrenFileSceneHandle << 1185   G4Exception("G4GMocrenFileSceneHandler::AddSolid( const G4Box& box )",
1193                     "gMocren0012", FatalExcep << 1186         "gMocren0012", FatalException, "no G4PhantomParameterisation");
1194       } else {                                   1187       } else {
1195         ;                                     << 1188   ;
1196       }                                          1189       }
1197                                               << 1190 
1198       kNestedVolumeDimension[0] = (G4int)phan << 1191       kNestedVolumeDimension[0] = phantomPara->GetNoVoxelX();
1199       kNestedVolumeDimension[1] = (G4int)phan << 1192       kNestedVolumeDimension[1] = phantomPara->GetNoVoxelY();
1200       kNestedVolumeDimension[2] = (G4int)phan << 1193       kNestedVolumeDimension[2] = phantomPara->GetNoVoxelZ();
1201       kNestedVolumeDirAxis[0] = 0;               1194       kNestedVolumeDirAxis[0] = 0;
1202       kNestedVolumeDirAxis[1] = 1;               1195       kNestedVolumeDirAxis[1] = 1;
1203       kNestedVolumeDirAxis[2] = 2;               1196       kNestedVolumeDirAxis[2] = 2;
1204                                               << 1197 
1205       // get densities of the parameterized p    1198       // get densities of the parameterized patient geometry
1206       G4int nX = kNestedVolumeDimension[0];      1199       G4int nX = kNestedVolumeDimension[0];
1207       G4int nXY = kNestedVolumeDimension[0]*k    1200       G4int nXY = kNestedVolumeDimension[0]*kNestedVolumeDimension[1];
1208                                               << 1201 
1209       for(G4int n0 = 0; n0 < kNestedVolumeDim    1202       for(G4int n0 = 0; n0 < kNestedVolumeDimension[0]; n0++) {
1210         for(G4int n1 = 0; n1 < kNestedVolumeD << 1203   for(G4int n1 = 0; n1 < kNestedVolumeDimension[1]; n1++) {
1211           for(G4int n2 = 0; n2 < kNestedVolum << 1204     for(G4int n2 = 0; n2 < kNestedVolumeDimension[2]; n2++) {
1212                                               << 1205 
1213             G4int repNo = n0 + n1*nX + n2*nXY << 1206       G4int repNo = n0 + n1*nX + n2*nXY;
1214             G4Material * mat = phantomPara->C << 1207       G4Material * mat = phantomPara->ComputeMaterial(repNo, pv[0]);
1215             G4double dens = mat->GetDensity() << 1208       G4double dens = mat->GetDensity()/(g/cm3);
1216                                               << 1209 
1217                                               << 1210 
1218             G4int idx[3];                     << 1211       G4int idx[3];
1219             idx[kNestedVolumeDirAxis[0]] = n0 << 1212       idx[kNestedVolumeDirAxis[0]] = n0;
1220             idx[kNestedVolumeDirAxis[1]] = n1 << 1213       idx[kNestedVolumeDirAxis[1]] = n1;
1221             idx[kNestedVolumeDirAxis[2]] = n2 << 1214       idx[kNestedVolumeDirAxis[2]] = n2;
1222             Index3D i3d(idx[0],idx[1],idx[2]) << 1215       Index3D i3d(idx[0],idx[1],idx[2]);
1223             kNestedModality[i3d] = dens;      << 1216       kNestedModality[i3d] = dens;
1224                                               << 1217 
1225             if(GFDEBUG_DET)                   << 1218       if(GFDEBUG_DET) 
1226               G4cout << " index: " << idx[0]  << 1219         G4cout << " index: " << idx[0] << ", " << idx[1] << ", " << idx[2]
1227               << "  density: " << dens << G4e << 1220          << "  density: " << dens << G4endl;
1228                                               << 1221 
1229           }                                   << 1222     }
1230         }                                     << 1223   }
1231       }                                          1224       }
1232                                               << 1225 
1233       kVolumeSize.set(box.GetXHalfLength()*2/    1226       kVolumeSize.set(box.GetXHalfLength()*2/mm,
1234                       box.GetYHalfLength()*2/ << 1227           box.GetYHalfLength()*2/mm,
1235                       box.GetZHalfLength()*2/ << 1228           box.GetZHalfLength()*2/mm);
1236                                               << 1229 
1237       // mesh size                               1230       // mesh size
1238       if(!kbSetModalityVoxelSize) {              1231       if(!kbSetModalityVoxelSize) {
1239         G4float spacing[3] = {static_cast<G4f << 1232   G4float spacing[3] = {static_cast<G4float>(2*phantomPara->GetVoxelHalfX()),
1240           static_cast<G4float>(2*phantomPara- << 1233             static_cast<G4float>(2*phantomPara->GetVoxelHalfY()),
1241           static_cast<G4float>(2*phantomPara- << 1234             static_cast<G4float>(2*phantomPara->GetVoxelHalfZ())};
1242         kgMocrenIO->setVoxelSpacing(spacing); << 1235   kgMocrenIO->setVoxelSpacing(spacing);
1243         kVoxelDimension.set(spacing[0], spaci << 1236   kVoxelDimension.set(spacing[0], spacing[1], spacing[2]);
1244         kbSetModalityVoxelSize = true;        << 1237   kbSetModalityVoxelSize = true;
1245       }                                          1238       }
1246     }                                            1239     }
1247                                               << 1240 
1248   } // if(box.GetName() == volName)           << 1241   } // if(box.GetName() == volName) 
1249                                               << 1242 
1250                                               << 1243 
1251   // processing geometry construction based o    1244   // processing geometry construction based on the interactive PS
1252   if(!kFlagProcessedInteractiveScorer) {         1245   if(!kFlagProcessedInteractiveScorer) {
1253                                               << 1246 
1254                                               << 1247 
1255     // get the dimension of the geometry defi    1248     // get the dimension of the geometry defined in G4VScoringMesh
1256     G4ScoringManager * pScrMan = G4ScoringMan    1249     G4ScoringManager * pScrMan = G4ScoringManager::GetScoringManager();
1257     //if(!pScrMan) return;                    << 1250     if(!pScrMan) return;
1258     if(pScrMan) {                             << 
1259     G4ScoringBox * scoringBox                    1251     G4ScoringBox * scoringBox
1260     = dynamic_cast<G4ScoringBox*>(pScrMan->Fi << 1252       = dynamic_cast<G4ScoringBox*>(pScrMan->FindMesh(volName));
1261     //if(scoringBox == NULL) return;          << 1253     if(scoringBox == NULL) return;
1262     if(scoringBox) {                          << 1254 
1263                                                  1255 
1264                                               << 
1265                                               << 
1266     G4int nVoxels[3];                            1256     G4int nVoxels[3];
1267     scoringBox->GetNumberOfSegments(nVoxels);    1257     scoringBox->GetNumberOfSegments(nVoxels);
1268     // this order depends on the G4ScoringBox    1258     // this order depends on the G4ScoringBox
1269     kNestedVolumeDimension[0] = nVoxels[2];      1259     kNestedVolumeDimension[0] = nVoxels[2];
1270     kNestedVolumeDimension[1] = nVoxels[1];      1260     kNestedVolumeDimension[1] = nVoxels[1];
1271     kNestedVolumeDimension[2] = nVoxels[0];      1261     kNestedVolumeDimension[2] = nVoxels[0];
1272     kNestedVolumeDirAxis[0] = 2;                 1262     kNestedVolumeDirAxis[0] = 2;
1273     kNestedVolumeDirAxis[1] = 1;                 1263     kNestedVolumeDirAxis[1] = 1;
1274     kNestedVolumeDirAxis[2] = 0;                 1264     kNestedVolumeDirAxis[2] = 0;
1275                                               << 1265 
1276     // get densities of the parameterized pat    1266     // get densities of the parameterized patient geometry
1277     for(G4int n0 = 0; n0 < kNestedVolumeDimen    1267     for(G4int n0 = 0; n0 < kNestedVolumeDimension[0]; n0++) {
1278       for(G4int n1 = 0; n1 < kNestedVolumeDim    1268       for(G4int n1 = 0; n1 < kNestedVolumeDimension[1]; n1++) {
1279         for(G4int n2 = 0; n2 < kNestedVolumeD << 1269   for(G4int n2 = 0; n2 < kNestedVolumeDimension[2]; n2++) {
1280                                               << 1270 
1281           G4double dens = 0.*(g/cm3);         << 1271     G4double dens = 0.*(g/cm3);
1282                                               << 1272 
1283           G4int idx[3];                       << 1273     G4int idx[3];
1284           idx[kNestedVolumeDirAxis[0]] = n0;  << 1274     idx[kNestedVolumeDirAxis[0]] = n0;
1285           idx[kNestedVolumeDirAxis[1]] = n1;  << 1275     idx[kNestedVolumeDirAxis[1]] = n1;
1286           idx[kNestedVolumeDirAxis[2]] = n2;  << 1276     idx[kNestedVolumeDirAxis[2]] = n2;
1287           Index3D i3d(idx[0],idx[1],idx[2]);  << 1277     Index3D i3d(idx[0],idx[1],idx[2]);
1288           kNestedModality[i3d] = dens;        << 1278     kNestedModality[i3d] = dens;
1289                                               << 1279 
1290         }                                     << 1280   }
1291       }                                          1281       }
1292     }                                            1282     }
1293                                               << 1283 
1294     G4ThreeVector boxSize = scoringBox->GetSi    1284     G4ThreeVector boxSize = scoringBox->GetSize();
1295     if(GFDEBUG_DET > 1) {                        1285     if(GFDEBUG_DET > 1) {
1296       G4cout << "Interactive Scorer : size -     1286       G4cout << "Interactive Scorer : size - "
1297        << boxSize.x()/cm << " x "             << 1287        << boxSize.x()/cm << " x " 
1298        << boxSize.y()/cm << " x "             << 1288        << boxSize.y()/cm << " x " 
1299        << boxSize.z()/cm << " [cm3]" << G4end    1289        << boxSize.z()/cm << " [cm3]" << G4endl;
1300       G4cout << "Interactive Scorer : # voxel    1290       G4cout << "Interactive Scorer : # voxels - "
1301        << nVoxels[0] << " x "                 << 1291        << nVoxels[0] << " x " 
1302        << nVoxels[1] << " x "                 << 1292        << nVoxels[1] << " x " 
1303        << nVoxels[2] << G4endl;                  1293        << nVoxels[2] << G4endl;
1304     }                                            1294     }
1305     kVolumeSize.set(boxSize.x()*2,               1295     kVolumeSize.set(boxSize.x()*2,
1306                     boxSize.y()*2,            << 1296         boxSize.y()*2,
1307                     boxSize.z()*2);           << 1297         boxSize.z()*2);
1308                                               << 1298 
1309     // mesh size                                 1299     // mesh size
1310     if(!kbSetModalityVoxelSize) {                1300     if(!kbSetModalityVoxelSize) {
1311       G4float spacing[3] = {static_cast<G4flo    1301       G4float spacing[3] = {static_cast<G4float>(boxSize.x()*2/nVoxels[0]),
1312         static_cast<G4float>(boxSize.y()*2/nV << 1302           static_cast<G4float>(boxSize.y()*2/nVoxels[1]),
1313         static_cast<G4float>(boxSize.z()*2/nV << 1303           static_cast<G4float>(boxSize.z()*2/nVoxels[2])};
1314                                               << 1304 
1315       kgMocrenIO->setVoxelSpacing(spacing);      1305       kgMocrenIO->setVoxelSpacing(spacing);
1316       kVoxelDimension.set(spacing[0], spacing    1306       kVoxelDimension.set(spacing[0], spacing[1], spacing[2]);
1317       kbSetModalityVoxelSize = true;             1307       kbSetModalityVoxelSize = true;
1318                                               << 1308 
1319     }                                            1309     }
1320                                               << 1310 
1321                                               << 1311 
1322     kVolumeTrans3D = fObjectTransformation;      1312     kVolumeTrans3D = fObjectTransformation;
1323                                               << 1313 
1324     // translation for the scoring mesh          1314     // translation for the scoring mesh
1325     G4ThreeVector sbth = scoringBox->GetTrans    1315     G4ThreeVector sbth = scoringBox->GetTranslation();
1326     G4Translate3D sbtranslate(sbth);             1316     G4Translate3D sbtranslate(sbth);
1327     kVolumeTrans3D = kVolumeTrans3D*sbtransla    1317     kVolumeTrans3D = kVolumeTrans3D*sbtranslate;
1328                                               << 1318 
1329     // rotation matrix for the scoring mesh      1319     // rotation matrix for the scoring mesh 
1330     G4RotationMatrix sbrm;                       1320     G4RotationMatrix sbrm;
1331     sbrm = scoringBox->GetRotationMatrix();      1321     sbrm = scoringBox->GetRotationMatrix();
1332     if(!sbrm.isIdentity()) {                     1322     if(!sbrm.isIdentity()) {
1333       G4ThreeVector sbdummy(0.,0.,0.);           1323       G4ThreeVector sbdummy(0.,0.,0.); 
1334       G4Transform3D sbrotate(sbrm.inverse(),     1324       G4Transform3D sbrotate(sbrm.inverse(), sbdummy);
1335       kVolumeTrans3D = kVolumeTrans3D*sbrotat    1325       kVolumeTrans3D = kVolumeTrans3D*sbrotate;
1336     }                                            1326     }
1337                                               << 1327 
1338                                               << 1328 
1339     // coordination system correction for gMo    1329     // coordination system correction for gMocren
1340     G4ThreeVector raxisY(0., 1., 0.), dummyY(    1330     G4ThreeVector raxisY(0., 1., 0.), dummyY(0.,0.,0.); 
1341     G4RotationMatrix rotY(raxisY, pi*rad);       1331     G4RotationMatrix rotY(raxisY, pi*rad);
1342     G4Transform3D trotY(rotY, dummyY);           1332     G4Transform3D trotY(rotY, dummyY);
1343     G4ThreeVector raxisZ(0., 0., 1.), dummyZ(    1333     G4ThreeVector raxisZ(0., 0., 1.), dummyZ(0.,0.,0.); 
1344     G4RotationMatrix rotZ(raxisZ, pi*rad);       1334     G4RotationMatrix rotZ(raxisZ, pi*rad);
1345     G4Transform3D trotZ(rotZ, dummyZ);           1335     G4Transform3D trotZ(rotZ, dummyZ);
1346                                               << 1336 
1347     kVolumeTrans3D = kVolumeTrans3D*trotY*tro    1337     kVolumeTrans3D = kVolumeTrans3D*trotY*trotZ;
1348                                               << 1338 
1349     }                                         << 1339 
1350     }                                         << 
1351     //                                           1340     //
1352     kFlagProcessedInteractiveScorer = true;      1341     kFlagProcessedInteractiveScorer = true;
1353   }                                           << 1342   }  
1354                                               << 1343 
1355                                               << 1344 
1356   static G4VPhysicalVolume * volPV = NULL;    << 1345 
1357   if(pPVModel->GetCurrentPV()->GetName() == v << 
1358     volPV = pPVModel->GetCurrentPV();         << 
1359   }                                           << 
1360                                               << 
1361   //-- add detectors                             1346   //-- add detectors
1362   G4bool bAddDet = true;                         1347   G4bool bAddDet = true;
1363   if(!kMessenger.getDrawVolumeGrid()) {          1348   if(!kMessenger.getDrawVolumeGrid()) {
1364                                                  1349 
1365     if(kFlagParameterization == 0) { // neste    1350     if(kFlagParameterization == 0) { // nested parameterisation
1366       /*                                      << 1351 
1367       G4String volDSolidName;                 << 
1368       if(volPV) {                             << 
1369         G4int nDaughter = volPV->GetLogicalVo << 
1370         G4VPhysicalVolume * volDPV = NULL;    << 
1371         if(nDaughter > 0) volDPV = volPV->Get << 
1372         if(volDPV) {                          << 
1373           nDaughter = volDPV->GetLogicalVolum << 
1374           if(nDaughter > 0)                   << 
1375             volDSolidName = volDPV->GetLogica << 
1376                            ->GetLogicalVolume << 
1377         }                                     << 
1378       }                                       << 
1379       */                                      << 
1380                                               << 
1381       //std::cout << "Parameterization volume << 
1382       //          << box.GetName() << std::en << 
1383                                               << 
1384       if(volName == box.GetName()) {             1352       if(volName == box.GetName()) {
1385         bAddDet = false;                      << 1353   bAddDet = false;
1386       }                                          1354       }
1387                                               << 1355 
1388       std::vector<G4String>::iterator itr = k    1356       std::vector<G4String>::iterator itr = kNestedVolumeNames.begin();
1389       for(; itr != kNestedVolumeNames.end();     1357       for(; itr != kNestedVolumeNames.end(); itr++) {
1390         if(*itr == box.GetName())  {          << 1358   if(*itr == box.GetName())  {
1391           bAddDet = false;                    << 1359     bAddDet = false;
1392           break;                              << 1360     break;
1393         }                                     << 1361   }
1394       }                                          1362       }
1395     } else if(kFlagParameterization == 1) { /    1363     } else if(kFlagParameterization == 1) { // phantom paramemterisation
1396                                               << 
1397       G4String volDSolidName;                 << 
1398       if(volPV) {                             << 
1399         volDSolidName = volPV->GetLogicalVolu << 
1400                         ->GetLogicalVolume()- << 
1401       }                                       << 
1402                                                  1364 
1403       //std::cout << "Phantom Parameterizatio << 1365       if(volName != box.GetName()) {
1404       //          << " - " << box.GetName() < << 1366   bAddDet = false;
1405                                               << 
1406       if(volDSolidName == box.GetName()) {    << 
1407         bAddDet = false;                      << 
1408       }                                          1367       }
1409                                               << 1368 
1410     } else if(kFlagParameterization == 2) { /    1369     } else if(kFlagParameterization == 2) { // interactive primitive scorer
1411       //std::cout << "Regular Parameterizatio << 1370       ;
1412     }                                            1371     }
1413                                               << 1372 
1414   }                                              1373   }
1415   if(bAddDet) AddDetector(box);                  1374   if(bAddDet) AddDetector(box);
1416                                               << 1375 
1417                                                  1376 
1418 } // void G4GMocrenFileSceneHandler::AddSolid    1377 } // void G4GMocrenFileSceneHandler::AddSolid( const G4Box& box )
1419                                                  1378 
1420                                                  1379 
1421 //----- Add tubes                                1380 //----- Add tubes
1422 void                                             1381 void 
1423 G4GMocrenFileSceneHandler::AddSolid( const G4    1382 G4GMocrenFileSceneHandler::AddSolid( const G4Tubs& tubes )
1424 {                                                1383 {
1425   if(GFDEBUG || G4VisManager::GetVerbosity()     1384   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
1426     G4cout << "***** AddSolid ( tubes )" << G    1385     G4cout << "***** AddSolid ( tubes )" << G4endl;
1427                                                  1386 
1428   //----- skip drawing invisible primitive       1387   //----- skip drawing invisible primitive
1429   if( !IsVisible() ) { return ; }                1388   if( !IsVisible() ) { return ; }
1430                                                  1389 
1431   //----- Initialize if necessary                1390   //----- Initialize if necessary
1432   GFBeginModeling();                             1391   GFBeginModeling();
1433                                                  1392 
1434   //                                             1393   //
1435   AddDetector(tubes);                            1394   AddDetector(tubes);
1436                                                  1395 
1437                                                  1396 
1438   // for a debug                                 1397   // for a debug
1439   if(GFDEBUG_DET > 0) {                          1398   if(GFDEBUG_DET > 0) {
1440     G4cout << "-------" << G4endl;               1399     G4cout << "-------" << G4endl;
1441     G4cout << "    " << tubes.GetName() << G4    1400     G4cout << "    " << tubes.GetName() << G4endl;
1442     G4Polyhedron * poly = tubes.CreatePolyhed    1401     G4Polyhedron * poly = tubes.CreatePolyhedron();
1443     G4int nv = poly->GetNoVertices();            1402     G4int nv = poly->GetNoVertices();
1444     for(G4int i = 0; i < nv; i++) {              1403     for(G4int i = 0; i < nv; i++) {
1445       G4cout << "    (" << poly->GetVertex(i)    1404       G4cout << "    (" << poly->GetVertex(i).x() << ", "
1446        << poly->GetVertex(i).y() << ", "         1405        << poly->GetVertex(i).y() << ", "
1447        << poly->GetVertex(i).z() << ")" << G4    1406        << poly->GetVertex(i).z() << ")" << G4endl;
1448     }                                            1407     }
1449     delete poly;                                 1408     delete poly;
1450   }                                              1409   }
1451                                                  1410 
1452   const G4VModel* pv_model  = GetModel();        1411   const G4VModel* pv_model  = GetModel();
1453   if (!pv_model) { return ; }                    1412   if (!pv_model) { return ; } 
1454   G4PhysicalVolumeModel* pPVModel =              1413   G4PhysicalVolumeModel* pPVModel =
1455     dynamic_cast<G4PhysicalVolumeModel*>(fpMo    1414     dynamic_cast<G4PhysicalVolumeModel*>(fpModel);
1456   if (!pPVModel) { return ; }                    1415   if (!pPVModel) { return ; }
1457   G4Material * mat = pPVModel->GetCurrentMate    1416   G4Material * mat = pPVModel->GetCurrentMaterial();
1458   G4String name = mat->GetName();                1417   G4String name = mat->GetName();
1459                                                  1418 
1460 } // void G4GMocrenFileSceneHandler::AddSolid    1419 } // void G4GMocrenFileSceneHandler::AddSolid( const G4Tubs& )
1461                                                  1420 
1462                                                  1421 
1463                                                  1422 
1464 //----- Add cons                                 1423 //----- Add cons
1465 void                                             1424 void 
1466 G4GMocrenFileSceneHandler::AddSolid( const G4    1425 G4GMocrenFileSceneHandler::AddSolid( const G4Cons& cons )
1467 {                                                1426 {
1468   if(GFDEBUG || G4VisManager::GetVerbosity()     1427   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
1469     G4cout << "***** AddSolid ( cons )" << G4    1428     G4cout << "***** AddSolid ( cons )" << G4endl;
1470                                                  1429 
1471   //----- skip drawing invisible primitive       1430   //----- skip drawing invisible primitive
1472   if( !IsVisible() ) { return ; }                1431   if( !IsVisible() ) { return ; }
1473                                                  1432 
1474   //----- Initialize if necessary                1433   //----- Initialize if necessary
1475   GFBeginModeling();                             1434   GFBeginModeling();
1476                                                  1435 
1477   //                                             1436   //
1478   AddDetector(cons);                             1437   AddDetector(cons);
1479                                                  1438 
1480 }// G4GMocrenFileSceneHandler::AddSolid( cons    1439 }// G4GMocrenFileSceneHandler::AddSolid( cons )
1481                                                  1440 
1482                                                  1441 
1483 //----- Add trd                                  1442 //----- Add trd
1484 void G4GMocrenFileSceneHandler::AddSolid ( co    1443 void G4GMocrenFileSceneHandler::AddSolid ( const G4Trd& trd )
1485 {                                                1444 {
1486   if(GFDEBUG || G4VisManager::GetVerbosity()     1445   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
1487     G4cout << "***** AddSolid ( trd )" << G4e    1446     G4cout << "***** AddSolid ( trd )" << G4endl;
1488                                                  1447 
1489                                                  1448 
1490   //----- skip drawing invisible primitive       1449   //----- skip drawing invisible primitive
1491   if( !IsVisible() ) { return ; }                1450   if( !IsVisible() ) { return ; }
1492                                                  1451 
1493   //----- Initialize if necessary                1452   //----- Initialize if necessary
1494   GFBeginModeling();                             1453   GFBeginModeling();
1495                                                  1454 
1496   //                                             1455   //
1497   AddDetector(trd);                              1456   AddDetector(trd);
1498                                                  1457 
1499 } // G4GMocrenFileSceneHandler::AddSolid ( tr    1458 } // G4GMocrenFileSceneHandler::AddSolid ( trd )
1500                                                  1459 
1501                                                  1460 
1502 //----- Add sphere                               1461 //----- Add sphere
1503 void G4GMocrenFileSceneHandler::AddSolid ( co    1462 void G4GMocrenFileSceneHandler::AddSolid ( const G4Sphere& sphere )
1504 {                                                1463 {
1505   if(GFDEBUG || G4VisManager::GetVerbosity()     1464   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
1506     G4cout << "***** AddSolid ( sphere )" <<     1465     G4cout << "***** AddSolid ( sphere )" << G4endl;
1507                                                  1466 
1508   //----- skip drawing invisible primitive       1467   //----- skip drawing invisible primitive
1509   if( !IsVisible() ) { return ; }                1468   if( !IsVisible() ) { return ; }
1510                                                  1469 
1511   //----- Initialize if necessary                1470   //----- Initialize if necessary
1512   GFBeginModeling();                             1471   GFBeginModeling();
1513                                                  1472 
1514   //                                             1473   //
1515   AddDetector(sphere);                           1474   AddDetector(sphere);
1516                                                  1475 
1517 } // G4GMocrenFileSceneHandler::AddSolid ( sp    1476 } // G4GMocrenFileSceneHandler::AddSolid ( sphere )
1518                                                  1477 
1519                                                  1478 
1520 //----- Add para                                 1479 //----- Add para
1521 void G4GMocrenFileSceneHandler::AddSolid (con    1480 void G4GMocrenFileSceneHandler::AddSolid (const G4Para& para)
1522 {                                                1481 {
1523   if(GFDEBUG || G4VisManager::GetVerbosity()     1482   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
1524     G4cout << "***** AddSolid ( para )" << G4    1483     G4cout << "***** AddSolid ( para )" << G4endl;
1525                                                  1484 
1526   //----- skip drawing invisible primitive       1485   //----- skip drawing invisible primitive
1527   if( !IsVisible() ) { return ; }                1486   if( !IsVisible() ) { return ; }
1528                                                  1487 
1529   //----- Initialize if necessary                1488   //----- Initialize if necessary
1530   GFBeginModeling();                             1489   GFBeginModeling();
1531                                                  1490 
1532   //                                             1491   //
1533   AddDetector(para);                             1492   AddDetector(para);
1534                                                  1493 
1535 } // G4GMocrenFileSceneHandler::AddSolid ( pa    1494 } // G4GMocrenFileSceneHandler::AddSolid ( para )
1536                                                  1495 
1537                                                  1496 
1538 //----- Add trap                                 1497 //----- Add trap
1539 void G4GMocrenFileSceneHandler::AddSolid (con    1498 void G4GMocrenFileSceneHandler::AddSolid (const G4Trap& trap)
1540 {                                                1499 {
1541   if(GFDEBUG || G4VisManager::GetVerbosity()     1500   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
1542     G4cout << "***** AddSolid ( trap )" << G4    1501     G4cout << "***** AddSolid ( trap )" << G4endl;
1543                                                  1502 
1544   //----- skip drawing invisible primitive       1503   //----- skip drawing invisible primitive
1545   if( !IsVisible() ) { return ; }                1504   if( !IsVisible() ) { return ; }
1546                                                  1505 
1547   //----- Initialize if necessary                1506   //----- Initialize if necessary
1548   GFBeginModeling();                             1507   GFBeginModeling();
1549                                                  1508 
1550   //                                             1509   //
1551   AddDetector(trap);                             1510   AddDetector(trap);
1552                                                  1511 
1553 } // G4GMocrenFileSceneHandler::AddSolid (con    1512 } // G4GMocrenFileSceneHandler::AddSolid (const G4Trap& trap)
1554                                                  1513 
1555                                                  1514 
1556 //----- Add torus                                1515 //----- Add torus
1557 void                                             1516 void 
1558 G4GMocrenFileSceneHandler::AddSolid( const G4    1517 G4GMocrenFileSceneHandler::AddSolid( const G4Torus& torus )
1559 {                                                1518 {
1560   if(GFDEBUG || G4VisManager::GetVerbosity()     1519   if(GFDEBUG || G4VisManager::GetVerbosity() >= G4VisManager::confirmations)
1561     G4cout << "***** AddSolid ( torus )" << G    1520     G4cout << "***** AddSolid ( torus )" << G4endl;
1562                                                  1521 
1563   //----- skip drawing invisible primitive       1522   //----- skip drawing invisible primitive
1564   if( !IsVisible() ) { return ; }                1523   if( !IsVisible() ) { return ; }
1565                                                  1524 
1566   //----- Initialize if necessary                1525   //----- Initialize if necessary
1567   GFBeginModeling();                             1526   GFBeginModeling();
1568                                                  1527 
1569   //                                             1528   //
1570   AddDetector(torus);                            1529   AddDetector(torus);
1571                                                  1530 
1572 } // void G4GMocrenFileSceneHandler::AddSolid    1531 } // void G4GMocrenFileSceneHandler::AddSolid( const G4Torus& )
1573                                                  1532 
1574                                                  1533 
1575                                                  1534 
1576 //----- Add a shape which is not treated abov    1535 //----- Add a shape which is not treated above
1577 void G4GMocrenFileSceneHandler::AddSolid ( co    1536 void G4GMocrenFileSceneHandler::AddSolid ( const G4VSolid& solid  )
1578 {                                                1537 {
1579   //----- skip drawing invisible primitive       1538   //----- skip drawing invisible primitive
1580   if( !IsVisible() ) { return ; }                1539   if( !IsVisible() ) { return ; }
1581                                                  1540 
1582   //----- Initialize if necessary                1541   //----- Initialize if necessary
1583   GFBeginModeling();                             1542   GFBeginModeling();
1584                                                  1543 
1585   //                                             1544   //
1586   AddDetector(solid);                            1545   AddDetector(solid);
1587                                                  1546 
1588   //----- Send a primitive                       1547   //----- Send a primitive
1589   G4VSceneHandler::AddSolid( solid ) ;           1548   G4VSceneHandler::AddSolid( solid ) ; 
1590                                                  1549 
1591 } //G4GMocrenFileSceneHandler::AddSolid ( con    1550 } //G4GMocrenFileSceneHandler::AddSolid ( const G4VSolid& ) 
1592                                                  1551 
1593 #include "G4TrajectoriesModel.hh"                1552 #include "G4TrajectoriesModel.hh"
1594 #include "G4VTrajectory.hh"                      1553 #include "G4VTrajectory.hh"
1595 #include "G4VTrajectoryPoint.hh"                 1554 #include "G4VTrajectoryPoint.hh"
1596                                                  1555 
1597 //----- Add a trajectory                         1556 //----- Add a trajectory
1598 void G4GMocrenFileSceneHandler::AddCompound(c    1557 void G4GMocrenFileSceneHandler::AddCompound(const G4VTrajectory & traj) {
1599                                                  1558 
1600   kbModelingTrajectory = true;                   1559   kbModelingTrajectory = true;
1601                                                  1560 
1602   G4VSceneHandler::AddCompound(traj);            1561   G4VSceneHandler::AddCompound(traj);
1603                                                  1562 
1604   if(GFDEBUG_TRK) {                              1563   if(GFDEBUG_TRK) {
1605     G4cout << " ::AddCompound(const G4VTrajec    1564     G4cout << " ::AddCompound(const G4VTrajectory&) >>>>>>>>> " << G4endl;
1606     G4TrajectoriesModel * pTrModel = dynamic_    1565     G4TrajectoriesModel * pTrModel = dynamic_cast<G4TrajectoriesModel*>(fpModel);
1607     if (!pTrModel) {                             1566     if (!pTrModel) { 
1608       G4Exception                                1567       G4Exception 
1609   ("G4VSceneHandler::AddCompound(const G4VTra    1568   ("G4VSceneHandler::AddCompound(const G4VTrajectory&)",
1610    "gMocren0013", FatalException, "Not a G4Tr    1569    "gMocren0013", FatalException, "Not a G4TrajectoriesModel.");
1611     } else {                                     1570     } else {
1612       traj.DrawTrajectory();                     1571       traj.DrawTrajectory();
1613                                                  1572 
1614       const G4VTrajectory * trj = pTrModel->G    1573       const G4VTrajectory * trj = pTrModel->GetCurrentTrajectory();
1615       G4cout << "------ track" << G4endl;        1574       G4cout << "------ track" << G4endl;
1616       G4cout << "    name:     " << trj->GetP    1575       G4cout << "    name:     " << trj->GetParticleName() << G4endl;
1617       G4cout << "    id:       " << trj->GetT    1576       G4cout << "    id:       " << trj->GetTrackID() << G4endl;
1618       G4cout << "    charge:   " << trj->GetC    1577       G4cout << "    charge:   " << trj->GetCharge() << G4endl;
1619       G4cout << "    momentum: " << trj->GetI    1578       G4cout << "    momentum: " << trj->GetInitialMomentum() << G4endl;
1620                                                  1579       
1621       G4int nPnt = trj->GetPointEntries();       1580       G4int nPnt = trj->GetPointEntries();
1622       G4cout << "    point:    ";                1581       G4cout << "    point:    ";
1623       for(G4int i = 0; i < nPnt; i++) {          1582       for(G4int i = 0; i < nPnt; i++) {
1624   G4cout << trj->GetPoint(i)->GetPosition() <    1583   G4cout << trj->GetPoint(i)->GetPosition() << ", ";
1625       }                                          1584       }
1626       G4cout << G4endl;                          1585       G4cout << G4endl;
1627     }                                            1586     }
1628     G4cout << G4endl;                            1587     G4cout << G4endl;
1629   }                                              1588   }
1630                                                  1589 
1631   kbModelingTrajectory = false;                  1590   kbModelingTrajectory = false;
1632 }                                                1591 }
1633                                                  1592 
1634 #include <vector>                                1593 #include <vector>
1635 #include "G4VHit.hh"                             1594 #include "G4VHit.hh"
1636 #include "G4AttValue.hh"                         1595 #include "G4AttValue.hh"
1637 //----- Add a hit                                1596 //----- Add a hit 
1638 void G4GMocrenFileSceneHandler::AddCompound(     1597 void G4GMocrenFileSceneHandler::AddCompound( const G4VHit & hit) {
1639   if(GFDEBUG_HIT) G4cout << " ::AddCompound(c    1598   if(GFDEBUG_HIT) G4cout << " ::AddCompound(const G4VHit&) >>>>>>>>> " << G4endl;
1640                                                  1599 
1641   G4VSceneHandler::AddCompound(hit);             1600   G4VSceneHandler::AddCompound(hit);
1642                                                  1601 
1643   /*                                             1602   /*
1644     const std::map<G4String, G4AttDef> * map     1603     const std::map<G4String, G4AttDef> * map = hit.GetAttDefs();
1645     if(!map) return;                             1604     if(!map) return;
1646     std::map<G4String, G4AttDef>::const_itera    1605     std::map<G4String, G4AttDef>::const_iterator itr = map->begin();
1647     for(; itr != map->end(); itr++) {            1606     for(; itr != map->end(); itr++) {
1648     G4cout << itr->first << " : " << itr->sec    1607     G4cout << itr->first << " : " << itr->second.GetName()
1649     << " , " << itr->second.GetDesc() << G4en    1608     << " , " << itr->second.GetDesc() << G4endl;
1650     }                                            1609     }
1651   */                                             1610   */
1652                                                  1611 
1653   std::vector<G4String> hitNames = kMessenger    1612   std::vector<G4String> hitNames = kMessenger.getHitNames();
1654   if(GFDEBUG_HIT) {                              1613   if(GFDEBUG_HIT) {
1655     std::vector<G4String>::iterator itr = hit    1614     std::vector<G4String>::iterator itr = hitNames.begin();
1656     for(; itr != hitNames.end(); itr++)          1615     for(; itr != hitNames.end(); itr++) 
1657       G4cout << "  hit name : " << *itr << G4    1616       G4cout << "  hit name : " << *itr << G4endl;
1658   }                                              1617   }
1659                                                  1618   
1660   std::vector<G4AttValue> * attval = hit.Crea    1619   std::vector<G4AttValue> * attval = hit.CreateAttValues();
1661   if(!attval) {G4cout << "0 empty " << G4endl << 1620   if(!attval) {G4cout << "0 empty " << (unsigned long)attval << G4endl;}
1662   else {                                         1621   else {
1663                                                  1622 
1664     G4bool bid[3] = {false, false, false};       1623     G4bool bid[3] = {false, false, false};
1665     Index3D id;                                  1624     Index3D id;
1666                                                  1625 
1667     std::vector<G4AttValue>::iterator itr;       1626     std::vector<G4AttValue>::iterator itr;
1668     // First, get IDs                            1627     // First, get IDs
1669     for(itr = attval->begin(); itr != attval-    1628     for(itr = attval->begin(); itr != attval->end(); itr++) {
1670       std::string stmp = itr->GetValue();        1629       std::string stmp = itr->GetValue();
1671       std::istringstream sval(stmp.c_str());     1630       std::istringstream sval(stmp.c_str());
1672                                                  1631 
1673       if(itr->GetName() == G4String("XID")) {    1632       if(itr->GetName() == G4String("XID")) {
1674   sval >> id.x;                                  1633   sval >> id.x;
1675   bid[0] = true;                                 1634   bid[0] = true;
1676   continue;                                      1635   continue;
1677       }                                          1636       }
1678       if(itr->GetName() == G4String("YID")) {    1637       if(itr->GetName() == G4String("YID")) {
1679   sval >> id.y;                                  1638   sval >> id.y;
1680   bid[1] = true;                                 1639   bid[1] = true;
1681   continue;                                      1640   continue;
1682       }                                          1641       }
1683       if(itr->GetName() == G4String("ZID")) {    1642       if(itr->GetName() == G4String("ZID")) {
1684   sval >> id.z;                                  1643   sval >> id.z;
1685   bid[2] = true;                                 1644   bid[2] = true;
1686   continue;                                      1645   continue;
1687       }                                          1646       }
1688     }                                            1647     }
1689                                                  1648 
1690     G4int nhitname = (G4int)hitNames.size();     1649     G4int nhitname = (G4int)hitNames.size();
1691                                                  1650 
1692     if(bid[0] && bid[1] && bid[2]) {             1651     if(bid[0] && bid[1] && bid[2]) {
1693                                                  1652 
1694       if(GFDEBUG_HIT)                            1653       if(GFDEBUG_HIT)
1695   G4cout << " Hit : index(" << id.x << ", " <    1654   G4cout << " Hit : index(" << id.x << ", " << id.y << ", "
1696          << id.z << ")" << G4endl;               1655          << id.z << ")" << G4endl;
1697                                                  1656 
1698       // Get attributes                          1657       // Get attributes
1699       for(itr = attval->begin(); itr != attva    1658       for(itr = attval->begin(); itr != attval->end(); itr++) {
1700   for(G4int i = 0; i < nhitname; i++) {          1659   for(G4int i = 0; i < nhitname; i++) {
1701     if(itr->GetName() == hitNames[i]) {          1660     if(itr->GetName() == hitNames[i]) {
1702                                                  1661 
1703       std::string stmp = itr->GetValue();        1662       std::string stmp = itr->GetValue();
1704       std::istringstream sval(stmp.c_str());     1663       std::istringstream sval(stmp.c_str());
1705       G4double value;                            1664       G4double value;
1706       G4String unit;                             1665       G4String unit;
1707       sval >> value >> unit;                     1666       sval >> value >> unit;
1708                                                  1667 
1709       std::map<G4String, std::map<Index3D, G4    1668       std::map<G4String, std::map<Index3D, G4double> >::iterator kNestedHitsListItr;
1710       kNestedHitsListItr = kNestedHitsList.fi    1669       kNestedHitsListItr = kNestedHitsList.find(hitNames[i]);
1711       if(kNestedHitsListItr != kNestedHitsLis    1670       if(kNestedHitsListItr != kNestedHitsList.end()) {
1712         //fTempNestedHits = &kNestedHitsListI    1671         //fTempNestedHits = &kNestedHitsListItr->second;
1713         //(*fTempNestedHits)[id] = value;        1672         //(*fTempNestedHits)[id] = value;
1714         kNestedHitsListItr->second[id] = valu    1673         kNestedHitsListItr->second[id] = value;
1715       } else {                                   1674       } else {
1716         std::map<Index3D, G4double> hits;        1675         std::map<Index3D, G4double> hits;
1717         hits.insert(std::map<Index3D, G4doubl    1676         hits.insert(std::map<Index3D, G4double>::value_type(id, value));
1718         kNestedHitsList[hitNames[i]] = std::m << 1677         kNestedHitsList[hitNames[i]] = hits;
1719       }                                          1678       }
1720                                                  1679 
1721                                                  1680       
1722       if(GFDEBUG_HIT)                            1681       if(GFDEBUG_HIT)
1723         G4cout << "     : " << hitNames[i] <<    1682         G4cout << "     : " << hitNames[i] << " -> " << value
1724          << " [" << unit << "]" << G4endl;       1683          << " [" << unit << "]" << G4endl;
1725     }                                            1684     }
1726   }                                              1685   }
1727       }                                          1686       }
1728     } else {                                     1687     } else {
1729       G4Exception("G4GMocrenFileSceneHandler:    1688       G4Exception("G4GMocrenFileSceneHandler::AddCompound(const G4VHit &)",
1730       "gMocren0014", FatalException, "Error")    1689       "gMocren0014", FatalException, "Error");
1731     }                                            1690     }
1732                                                  1691 
1733     delete attval;                               1692     delete attval;
1734   }                                              1693   }
1735                                                  1694 
1736 }                                                1695 }
1737                                                  1696 
1738 void G4GMocrenFileSceneHandler::AddCompound(     1697 void G4GMocrenFileSceneHandler::AddCompound( const G4VDigi & digi) {
1739   if(GFDEBUG_DIGI) G4cout << " ::AddCompound(    1698   if(GFDEBUG_DIGI) G4cout << " ::AddCompound(const G4VDigi&) >>>>>>>>> " << G4endl;
1740   G4VSceneHandler::AddCompound(digi);            1699   G4VSceneHandler::AddCompound(digi);
1741 }                                                1700 }
1742                                                  1701 
1743 void G4GMocrenFileSceneHandler::AddCompound(c    1702 void G4GMocrenFileSceneHandler::AddCompound(const G4THitsMap<G4double> & hits) {
1744   if(GFDEBUG_HIT)                                1703   if(GFDEBUG_HIT)
1745     G4cout << " ::AddCompound(const std::map<    1704     G4cout << " ::AddCompound(const std::map<G4int, G4double*> &) >>>>>>>>> " << G4endl;
1746                                                  1705 
1747                                                  1706 
1748   std::vector<G4String> hitScorerNames = kMes    1707   std::vector<G4String> hitScorerNames = kMessenger.getHitScorerNames();
1749   G4int nhitname = (G4int)hitScorerNames.size    1708   G4int nhitname = (G4int)hitScorerNames.size();
1750   G4String scorername = static_cast<G4VHitsCo    1709   G4String scorername = static_cast<G4VHitsCollection>(hits).GetName();
1751                                                  1710 
1752   //-- --//                                      1711   //-- --//
1753   /*                                             1712   /*
1754   std::vector<G4String> hitScorerNames = kMes    1713   std::vector<G4String> hitScorerNames = kMessenger.getHitScorerNames();
1755   if(GFDEBUG_HIT) {                              1714   if(GFDEBUG_HIT) {
1756     std::vector<G4String>::iterator itr = hit    1715     std::vector<G4String>::iterator itr = hitScorerNames.begin();
1757     for(; itr != hitScorerNames.end(); itr++)    1716     for(; itr != hitScorerNames.end(); itr++) 
1758       G4cout << "  PS name : " << *itr << G4e    1717       G4cout << "  PS name : " << *itr << G4endl;
1759   }                                              1718   }
1760   */                                             1719   */
1761                                                  1720   
1762   {  // Scope bracket to avoid compiler messa    1721   {  // Scope bracket to avoid compiler messages about shadowing (JA).
1763   //for(G4int i = 0; i < nhitname; i++) {        1722   //for(G4int i = 0; i < nhitname; i++) {       // this selection trusts
1764     //if(scorername == hitScorerNames[i]) {      1723     //if(scorername == hitScorerNames[i]) {   // thea command /vis/scene/add/psHits hit_name.
1765                                                  1724 
1766       G4int idx[3];                              1725       G4int idx[3];
1767       std::map<G4int, G4double*> * map = hits    1726       std::map<G4int, G4double*> * map = hits.GetMap();
1768       std::map<G4int, G4double*>::const_itera    1727       std::map<G4int, G4double*>::const_iterator itr = map->begin();
1769       for(; itr != map->end(); itr++) {          1728       for(; itr != map->end(); itr++) {
1770   GetNestedVolumeIndex(itr->first, idx);         1729   GetNestedVolumeIndex(itr->first, idx);
1771   Index3D id(idx[0], idx[1], idx[2]);            1730   Index3D id(idx[0], idx[1], idx[2]);
1772                                                  1731   
1773   std::map<G4String, std::map<Index3D, G4doub    1732   std::map<G4String, std::map<Index3D, G4double> >::iterator nestedHitsListItr;
1774   nestedHitsListItr = kNestedHitsList.find(sc    1733   nestedHitsListItr = kNestedHitsList.find(scorername);
1775   if(nestedHitsListItr != kNestedHitsList.end    1734   if(nestedHitsListItr != kNestedHitsList.end()) {
1776     nestedHitsListItr->second[id] = *(itr->se << 1735     nestedHitsListItr->second[id] = *itr->second;
1777   } else {                                       1736   } else {
1778     std::map<Index3D, G4double> hit;             1737     std::map<Index3D, G4double> hit;
1779     hit.insert(std::map<Index3D, G4double>::v << 1738     hit.insert(std::map<Index3D, G4double>::value_type(id, *itr->second));
1780     kNestedHitsList[scorername] = std::move(h << 1739     kNestedHitsList[scorername] = hit;
1781   }                                              1740   }
1782       }                                          1741       }
1783                                                  1742  
1784       //break;                                   1743       //break;
1785     //}                                          1744     //}
1786   //}                                            1745   //}
1787   }                                              1746   }
1788                                                  1747 
1789   if(GFDEBUG_HIT) {                              1748   if(GFDEBUG_HIT) {
1790     G4String meshname = static_cast<G4VHitsCo    1749     G4String meshname = static_cast<G4VHitsCollection>(hits).GetSDname();
1791     G4cout << "       >>>>> " << meshname <<     1750     G4cout << "       >>>>> " << meshname << " : " << scorername  << G4endl;
1792                                                  1751 
1793     for(G4int i = 0; i < nhitname; i++)          1752     for(G4int i = 0; i < nhitname; i++)
1794       if(scorername == hitScorerNames[i])        1753       if(scorername == hitScorerNames[i]) 
1795   G4cout << "       !!!! Hit scorer !!!! " <<    1754   G4cout << "       !!!! Hit scorer !!!! " << scorername << G4endl;
1796                                                  1755 
1797     G4cout << " dimension: "                     1756     G4cout << " dimension: "
1798      << kNestedVolumeDimension[0] << " x "       1757      << kNestedVolumeDimension[0] << " x "
1799      << kNestedVolumeDimension[1] << " x "       1758      << kNestedVolumeDimension[1] << " x "
1800      << kNestedVolumeDimension[2] << G4endl;     1759      << kNestedVolumeDimension[2] << G4endl;
1801                                                  1760 
1802     G4int id[3];                                 1761     G4int id[3];
1803     std::map<G4int, G4double*> * map = hits.G    1762     std::map<G4int, G4double*> * map = hits.GetMap();
1804     std::map<G4int, G4double*>::const_iterato    1763     std::map<G4int, G4double*>::const_iterator itr = map->begin();
1805     for(; itr != map->end(); itr++) {            1764     for(; itr != map->end(); itr++) {
1806       GetNestedVolumeIndex(itr->first, id);      1765       GetNestedVolumeIndex(itr->first, id);
1807       G4cout << "[" << itr->first << "] "        1766       G4cout << "[" << itr->first << "] "
1808        << "("<< id[0] << "," << id[1] << ","     1767        << "("<< id[0] << "," << id[1] << "," << id[2] << ")"
1809        << *(itr->second) << ", ";             << 1768        << *itr->second << ", ";
1810     }                                            1769     }
1811     G4cout << G4endl;                            1770     G4cout << G4endl;
1812   }                                              1771   }
1813 }                                             << 
1814                                                  1772 
1815 void G4GMocrenFileSceneHandler::AddCompound(c << 
1816   if(GFDEBUG_HIT)                             << 
1817     G4cout << " ::AddCompound(const std::map< << 
1818                                               << 
1819                                               << 
1820   std::vector<G4String> hitScorerNames = kMes << 
1821   G4int nhitname = (G4int)hitScorerNames.size << 
1822   G4String scorername = static_cast<G4VHitsCo << 
1823                                               << 
1824   //-- --//                                   << 
1825   /*                                          << 
1826   std::vector<G4String> hitScorerNames = kMes << 
1827   if(GFDEBUG_HIT) {                           << 
1828     std::vector<G4String>::iterator itr = hit << 
1829     for(; itr != hitScorerNames.end(); itr++) << 
1830       G4cout << "  PS name : " << *itr << G4e << 
1831   }                                           << 
1832   */                                          << 
1833                                               << 
1834   {  // Scope bracket to avoid compiler messa << 
1835   //for(G4int i = 0; i < nhitname; i++) {     << 
1836     //if(scorername == hitScorerNames[i]) {   << 
1837                                               << 
1838       G4int idx[3];                           << 
1839       std::map<G4int, G4StatDouble*> * map =  << 
1840       std::map<G4int, G4StatDouble*>::const_i << 
1841       for(; itr != map->end(); itr++) {       << 
1842   GetNestedVolumeIndex(itr->first, idx);      << 
1843   Index3D id(idx[0], idx[1], idx[2]);         << 
1844                                               << 
1845   std::map<G4String, std::map<Index3D, G4doub << 
1846   nestedHitsListItr = kNestedHitsList.find(sc << 
1847   if(nestedHitsListItr != kNestedHitsList.end << 
1848     nestedHitsListItr->second[id] = itr->seco << 
1849   } else {                                    << 
1850     std::map<Index3D, G4double> hit;          << 
1851     hit.insert(std::map<Index3D, G4double>::v << 
1852     kNestedHitsList[scorername] = std::move(h << 
1853   }                                           << 
1854       }                                       << 
1855                                               << 
1856       //break;                                << 
1857     //}                                       << 
1858   //}                                         << 
1859   }                                           << 
1860                                               << 
1861   if(GFDEBUG_HIT) {                           << 
1862     G4String meshname = static_cast<G4VHitsCo << 
1863     G4cout << "       >>>>> " << meshname <<  << 
1864                                               << 
1865     for(G4int i = 0; i < nhitname; i++)       << 
1866       if(scorername == hitScorerNames[i])     << 
1867   G4cout << "       !!!! Hit scorer !!!! " << << 
1868                                               << 
1869     G4cout << " dimension: "                  << 
1870      << kNestedVolumeDimension[0] << " x "    << 
1871      << kNestedVolumeDimension[1] << " x "    << 
1872      << kNestedVolumeDimension[2] << G4endl;  << 
1873                                               << 
1874     G4int id[3];                              << 
1875     std::map<G4int, G4StatDouble*> * map = hi << 
1876     std::map<G4int, G4StatDouble*>::const_ite << 
1877     for(; itr != map->end(); itr++) {         << 
1878       GetNestedVolumeIndex(itr->first, id);   << 
1879       G4cout << "[" << itr->first << "] "     << 
1880        << "("<< id[0] << "," << id[1] << ","  << 
1881        << itr->second->sum_wx() << ", ";      << 
1882     }                                         << 
1883     G4cout << G4endl;                         << 
1884   }                                           << 
1885 }                                                1773 }
1886                                                  1774 
1887 //-----                                          1775 //----- 
1888 G4bool G4GMocrenFileSceneHandler::IsVisible()    1776 G4bool G4GMocrenFileSceneHandler::IsVisible()
1889 {                                                1777 {
1890   //-----                                        1778   //----- 
1891   G4bool  visibility  = true ;                   1779   G4bool  visibility  = true ;
1892                                                  1780 
1893   const G4VisAttributes* pVisAttribs =           1781   const G4VisAttributes* pVisAttribs =
1894     fpViewer->GetApplicableVisAttributes( fpV    1782     fpViewer->GetApplicableVisAttributes( fpVisAttribs );
1895                                                  1783 
1896   if(pVisAttribs) {                              1784   if(pVisAttribs) {
1897     visibility = pVisAttribs->IsVisible();       1785     visibility = pVisAttribs->IsVisible();
1898   }                                              1786   } 
1899                                                  1787 
1900   return visibility ;                            1788   return visibility ;
1901                                                  1789 
1902 } // G4GMocrenFileSceneHandler::IsVisible()      1790 } // G4GMocrenFileSceneHandler::IsVisible()
1903                                                  1791 
1904                                                  1792 
1905 //-----                                          1793 //----- 
1906 void G4GMocrenFileSceneHandler::ClearTransien    1794 void G4GMocrenFileSceneHandler::ClearTransientStore() 
1907 {                                                1795 {
1908   // This is typically called after an update    1796   // This is typically called after an update and before drawing hits
1909   // of the next event.  To simulate the clea    1797   // of the next event.  To simulate the clearing of "transients"
1910   // (hits, etc.) the detector is redrawn...     1798   // (hits, etc.) the detector is redrawn...
1911   if (fpViewer) {                                1799   if (fpViewer) {
1912     fpViewer -> SetView ();                      1800     fpViewer -> SetView ();
1913     fpViewer -> ClearView ();                    1801     fpViewer -> ClearView ();
1914     fpViewer -> DrawView ();                     1802     fpViewer -> DrawView ();
1915   }                                              1803   }
1916 }                                                1804 }
1917                                                  1805 
1918 //-----                                          1806 //----- 
1919 void G4GMocrenFileSceneHandler::AddDetector(c    1807 void G4GMocrenFileSceneHandler::AddDetector(const G4VSolid & solid) {
1920                                                  1808 
1921   Detector detector;                             1809   Detector detector;
1922                                                  1810 
1923   // detector name                               1811   // detector name
1924   detector.name = solid.GetName();               1812   detector.name = solid.GetName();
1925   if(GFDEBUG_DET > 1)                            1813   if(GFDEBUG_DET > 1)
1926     G4cout << "0 Detector name : " << detecto    1814     G4cout << "0 Detector name : " << detector.name << G4endl;
1927                                                  1815  
1928   const G4VModel* pv_model  = GetModel();        1816   const G4VModel* pv_model  = GetModel();
1929   if (!pv_model) { return ; }                    1817   if (!pv_model) { return ; } 
1930   G4PhysicalVolumeModel* pPVModel =              1818   G4PhysicalVolumeModel* pPVModel =
1931     dynamic_cast<G4PhysicalVolumeModel*>(fpMo    1819     dynamic_cast<G4PhysicalVolumeModel*>(fpModel);
1932   if (!pPVModel) { return ; }                    1820   if (!pPVModel) { return ; }
1933                                                  1821 
1934   // edge points of the detector                 1822   // edge points of the detector
1935   std::vector<G4float *> dedges;                 1823   std::vector<G4float *> dedges;
1936   G4Polyhedron * poly = solid.CreatePolyhedro    1824   G4Polyhedron * poly = solid.CreatePolyhedron();
1937   detector.polyhedron = poly;                    1825   detector.polyhedron = poly;
1938   detector.transform3D = fObjectTransformatio    1826   detector.transform3D = fObjectTransformation;
1939                                                  1827 
1940   // retrieve color                              1828   // retrieve color
1941   unsigned char uccolor[3] = {30, 30, 30};       1829   unsigned char uccolor[3] = {30, 30, 30};
1942   if(pPVModel->GetCurrentLV()->GetVisAttribut    1830   if(pPVModel->GetCurrentLV()->GetVisAttributes()) {
1943     G4Color color = pPVModel->GetCurrentLV()-    1831     G4Color color = pPVModel->GetCurrentLV()->GetVisAttributes()->GetColor();
1944     uccolor[0] = (unsigned char)(color.GetRed    1832     uccolor[0] = (unsigned char)(color.GetRed()*255);
1945     uccolor[1] = (unsigned char)(color.GetGre    1833     uccolor[1] = (unsigned char)(color.GetGreen()*255);
1946     uccolor[2] = (unsigned char)(color.GetBlu    1834     uccolor[2] = (unsigned char)(color.GetBlue()*255);
1947     //if(uccolor[0] < 2 && uccolor[1] < 2 &&     1835     //if(uccolor[0] < 2 && uccolor[1] < 2 && uccolor[2] < 2)
1948     //uccolor[0] = uccolor[1] = uccolor[2] =     1836     //uccolor[0] = uccolor[1] = uccolor[2] = 30; // dark grey
1949   }                                              1837   }
1950   for(G4int i = 0; i < 3; i++) detector.color    1838   for(G4int i = 0; i < 3; i++) detector.color[i] = uccolor[i];
1951   //                                             1839   //
1952   kDetectors.push_back(detector);                1840   kDetectors.push_back(detector);
1953                                                  1841 
1954   if(GFDEBUG_DET > 1) {                          1842   if(GFDEBUG_DET > 1) {
1955     G4cout << "0     color:   (" << (G4int)uc    1843     G4cout << "0     color:   (" << (G4int)uccolor[0] << ", "
1956      << (G4int)uccolor[1] << ", " << (G4int)u    1844      << (G4int)uccolor[1] << ", " << (G4int)uccolor[2] << ")"
1957      << G4endl;                                  1845      << G4endl;
1958   }                                              1846   }
1959                                                  1847 
1960 }                                                1848 }
1961                                                  1849 
1962 //-----                                          1850 //----- 
1963 void G4GMocrenFileSceneHandler::ExtractDetect    1851 void G4GMocrenFileSceneHandler::ExtractDetector() {
1964                                                  1852 
1965   std::vector<Detector>::iterator itr = kDete    1853   std::vector<Detector>::iterator itr = kDetectors.begin();
1966                                                  1854 
1967   for(; itr != kDetectors.end(); itr++) {        1855   for(; itr != kDetectors.end(); itr++) {
1968                                                  1856 
1969     // detector name                             1857     // detector name
1970     G4String detname = itr->name;                1858     G4String detname = itr->name;
1971     if(GFDEBUG_DET > 1)                          1859     if(GFDEBUG_DET > 1)
1972       G4cout << "Detector name : " << detname    1860       G4cout << "Detector name : " << detname << G4endl;
1973                                                  1861 
1974     // edge points of the detector               1862     // edge points of the detector
1975     std::vector<G4float *> dedges;               1863     std::vector<G4float *> dedges;
1976     G4Polyhedron * poly = itr->polyhedron;       1864     G4Polyhedron * poly = itr->polyhedron;
1977     poly->Transform(itr->transform3D);           1865     poly->Transform(itr->transform3D);
1978     G4Transform3D invVolTrans = kVolumeTrans3    1866     G4Transform3D invVolTrans = kVolumeTrans3D.inverse();
1979     poly->Transform(invVolTrans);                1867     poly->Transform(invVolTrans);
1980                                                  1868 
1981     G4Point3D v1, v2;                            1869     G4Point3D v1, v2;
1982     G4bool bnext = true;                         1870     G4bool bnext = true;
1983     G4int next;                                  1871     G4int next;
1984     G4int nedges = 0;                            1872     G4int nedges = 0;
1985     //                                           1873     //
1986     while(bnext) {                               1874     while(bnext) {
1987       if(!(poly->GetNextEdge(v1, v2, next)))     1875       if(!(poly->GetNextEdge(v1, v2, next))) bnext =false;
1988       G4float * edge = new G4float[6];           1876       G4float * edge = new G4float[6];
1989       edge[0] = v1.x()/mm;                       1877       edge[0] = v1.x()/mm;
1990       edge[1] = v1.y()/mm;                       1878       edge[1] = v1.y()/mm;
1991       edge[2] = v1.z()/mm;                       1879       edge[2] = v1.z()/mm;
1992       edge[3] = v2.x()/mm;                       1880       edge[3] = v2.x()/mm;
1993       edge[4] = v2.y()/mm;                       1881       edge[4] = v2.y()/mm;
1994       edge[5] = v2.z()/mm;                       1882       edge[5] = v2.z()/mm;
1995       dedges.push_back(edge);                    1883       dedges.push_back(edge);
1996       nedges++;                                  1884       nedges++;
1997     }                                            1885     }
1998     //delete poly;                               1886     //delete poly;
1999     // detector color                            1887     // detector color
2000     unsigned char uccolor[3] = {itr->color[0]    1888     unsigned char uccolor[3] = {itr->color[0],
2001         itr->color[1],                           1889         itr->color[1],
2002         itr->color[2]};                          1890         itr->color[2]};
2003     //                                           1891     //
2004     kgMocrenIO->addDetector(detname, dedges,     1892     kgMocrenIO->addDetector(detname, dedges, uccolor);
2005     for(G4int i = 0; i < nedges; i++) { // #     1893     for(G4int i = 0; i < nedges; i++) { // # of edges is 12.
2006       delete [] dedges[i];                       1894       delete [] dedges[i];
2007     }                                            1895     }
2008     dedges.clear();                              1896     dedges.clear(); 
2009                                                  1897 
2010     if(GFDEBUG_DET > 1) {                        1898     if(GFDEBUG_DET > 1) {
2011       G4cout << "    color:   (" << (G4int)uc    1899       G4cout << "    color:   (" << (G4int)uccolor[0] << ", "
2012        << (G4int)uccolor[1] << ", " << (G4int    1900        << (G4int)uccolor[1] << ", " << (G4int)uccolor[2] << ")"
2013        << G4endl;                                1901        << G4endl;
2014     }                                            1902     }
2015   }                                              1903   }
2016 }                                                1904 }
2017                                                  1905 
2018 void G4GMocrenFileSceneHandler::GetNestedVolu    1906 void G4GMocrenFileSceneHandler::GetNestedVolumeIndex(G4int _idx, G4int _idx3d[3]) {
2019   if(kNestedVolumeDimension[0] == 0 ||           1907   if(kNestedVolumeDimension[0] == 0 ||
2020      kNestedVolumeDimension[1] == 0 ||           1908      kNestedVolumeDimension[1] == 0 ||
2021      kNestedVolumeDimension[2] == 0) {           1909      kNestedVolumeDimension[2] == 0) {
2022     for(G4int i = 0; i < 3; i++) _idx3d[i] =     1910     for(G4int i = 0; i < 3; i++) _idx3d[i] = 0;
2023     return;                                      1911     return;
2024   }                                              1912   }
2025                                                  1913 
2026                                                  1914 
2027   if(kFlagParameterization == 0) {               1915   if(kFlagParameterization == 0) {
2028                                                  1916 
2029     G4int plane = kNestedVolumeDimension[2]*k    1917     G4int plane = kNestedVolumeDimension[2]*kNestedVolumeDimension[1];
2030     G4int line = kNestedVolumeDimension[2];      1918     G4int line = kNestedVolumeDimension[2];
2031                                                  1919  
2032   /*                                             1920   /*
2033   G4int idx3d[3];                                1921   G4int idx3d[3];
2034   idx3d[0] = _idx/plane;                         1922   idx3d[0] = _idx/plane;
2035   idx3d[1] = (_idx%plane)/line;                  1923   idx3d[1] = (_idx%plane)/line;
2036   idx3d[2] = (_idx%plane)%line;                  1924   idx3d[2] = (_idx%plane)%line;
2037   _idx3d[0] = idx3d[kNestedVolumeDirAxis[0]];    1925   _idx3d[0] = idx3d[kNestedVolumeDirAxis[0]];
2038   _idx3d[1] = idx3d[kNestedVolumeDirAxis[1]];    1926   _idx3d[1] = idx3d[kNestedVolumeDirAxis[1]];
2039   _idx3d[2] = idx3d[kNestedVolumeDirAxis[2]];    1927   _idx3d[2] = idx3d[kNestedVolumeDirAxis[2]];
2040   */                                             1928   */
2041                                                  1929 
2042     _idx3d[kNestedVolumeDirAxis[0]] = _idx/pl    1930     _idx3d[kNestedVolumeDirAxis[0]] = _idx/plane;
2043     _idx3d[kNestedVolumeDirAxis[1]] = (_idx%p    1931     _idx3d[kNestedVolumeDirAxis[1]] = (_idx%plane)/line;
2044     _idx3d[kNestedVolumeDirAxis[2]] = (_idx%p    1932     _idx3d[kNestedVolumeDirAxis[2]] = (_idx%plane)%line;
2045                                                  1933 
2046                                                  1934 
2047                                                  1935 
2048   /*                                             1936   /*
2049                                                  1937 
2050   G4cout << "G4GMocrenFileSceneHandler::GetNe    1938   G4cout << "G4GMocrenFileSceneHandler::GetNestedVolumeIndex : " << G4endl;
2051   G4cout << "(depi, depj, depk) : "              1939   G4cout << "(depi, depj, depk) : "
2052    << kNestedVolumeDirAxis[0] << ", "            1940    << kNestedVolumeDirAxis[0] << ", "
2053    << kNestedVolumeDirAxis[1] << ", "            1941    << kNestedVolumeDirAxis[1] << ", "
2054    << kNestedVolumeDirAxis[2] << G4endl;         1942    << kNestedVolumeDirAxis[2] << G4endl;
2055   G4cout << "(ni, nj, nk) :"                     1943   G4cout << "(ni, nj, nk) :"
2056    << kNestedVolumeDimension[0] << ", "          1944    << kNestedVolumeDimension[0] << ", " 
2057    << kNestedVolumeDimension[1] << ", "          1945    << kNestedVolumeDimension[1] << ", "
2058    << kNestedVolumeDimension[2] << " - " << G    1946    << kNestedVolumeDimension[2] << " - " << G4endl;
2059                                                  1947 
2060   G4cout << " _idx = " << _idx << "  :  plane    1948   G4cout << " _idx = " << _idx << "  :  plane = "
2061    << plane << " ,   line = " << line << G4en    1949    << plane << " ,   line = " << line << G4endl;
2062   G4cout << "(idx,idy,idz) + " << _idx3d[0] <    1950   G4cout << "(idx,idy,idz) + " << _idx3d[0] << ", "
2063    << _idx3d[1] << ", " << _idx3d[2] << " + "    1951    << _idx3d[1] << ", " << _idx3d[2] << " + " << G4endl;
2064                                                  1952 
2065   */                                             1953   */
2066                                                  1954 
2067                                                  1955 
2068                                                  1956 
2069   } else {                                       1957   } else {
2070                                                  1958     
2071     G4int plane = kNestedVolumeDimension[0]*k    1959     G4int plane = kNestedVolumeDimension[0]*kNestedVolumeDimension[1];
2072     G4int line = kNestedVolumeDimension[0];      1960     G4int line = kNestedVolumeDimension[0];
2073     _idx3d[kNestedVolumeDirAxis[2]] = _idx/pl    1961     _idx3d[kNestedVolumeDirAxis[2]] = _idx/plane;
2074     _idx3d[kNestedVolumeDirAxis[1]] = (_idx%p    1962     _idx3d[kNestedVolumeDirAxis[1]] = (_idx%plane)/line;
2075     _idx3d[kNestedVolumeDirAxis[0]] = (_idx%p    1963     _idx3d[kNestedVolumeDirAxis[0]] = (_idx%plane)%line;
2076                                                  1964 
2077   }                                              1965   }
2078                                                  1966 
2079 }                                                1967 }
2080                                                  1968 
2081                                                  1969 
2082 //-- --//                                        1970 //-- --//
2083 G4GMocrenFileSceneHandler::Detector::Detector    1971 G4GMocrenFileSceneHandler::Detector::Detector()
2084   : polyhedron(0) {                              1972   : polyhedron(0) {
2085   color[0] = color[1] = color[2] = 255;          1973   color[0] = color[1] = color[2] = 255;
2086 }                                                1974 }
2087 G4GMocrenFileSceneHandler::Detector::~Detecto    1975 G4GMocrenFileSceneHandler::Detector::~Detector() {
2088   if(!polyhedron) delete polyhedron;             1976   if(!polyhedron) delete polyhedron;
2089 }                                                1977 }
2090 void G4GMocrenFileSceneHandler::Detector::cle    1978 void G4GMocrenFileSceneHandler::Detector::clear() {
2091   name.clear();                                  1979   name.clear();
2092   if(!polyhedron) delete polyhedron;             1980   if(!polyhedron) delete polyhedron;
2093   color[0] = color[1] = color[2] = 255;          1981   color[0] = color[1] = color[2] = 255;
2094   transform3D = G4Transform3D::Identity;         1982   transform3D = G4Transform3D::Identity;
2095 }                                                1983 }
2096                                                  1984 
2097 //-- --//                                        1985 //-- --//
2098 G4GMocrenFileSceneHandler::Index3D::Index3D()    1986 G4GMocrenFileSceneHandler::Index3D::Index3D()
2099   : x(0), y(0), z(0) {                           1987   : x(0), y(0), z(0) {
2100   ;                                              1988   ;
2101 }                                                1989 }
2102                                                  1990 
2103 G4GMocrenFileSceneHandler::Index3D::Index3D(c    1991 G4GMocrenFileSceneHandler::Index3D::Index3D(const Index3D & _index3D) 
2104   : x(_index3D.x), y(_index3D.y), z(_index3D.    1992   : x(_index3D.x), y(_index3D.y), z(_index3D.z) {
2105   //: x(_index3D.X()),                           1993   //: x(_index3D.X()),
2106   //y(_index3D.Y()),                             1994   //y(_index3D.Y()),
2107   //z(_index3D.Z()) {                            1995   //z(_index3D.Z()) {
2108   //  : x(static_cast<Index3D>(_index3D).x),     1996   //  : x(static_cast<Index3D>(_index3D).x),
2109   //    y(static_cast<Index3D>(_index3D).y),     1997   //    y(static_cast<Index3D>(_index3D).y),
2110   //    z(static_cast<Index3D>(_index3D).z) {    1998   //    z(static_cast<Index3D>(_index3D).z) {
2111   ;                                              1999   ;
2112 }                                                2000 }
2113                                                  2001 
2114 G4GMocrenFileSceneHandler::Index3D::Index3D(G    2002 G4GMocrenFileSceneHandler::Index3D::Index3D(G4int _x, G4int _y, G4int _z) 
2115   : x(_x), y(_y), z(_z) {                        2003   : x(_x), y(_y), z(_z) {
2116   ;                                              2004   ;
2117 }                                                2005 }
2118 G4bool G4GMocrenFileSceneHandler::Index3D::op    2006 G4bool G4GMocrenFileSceneHandler::Index3D::operator < (const Index3D & _right) const {
2119   if(z < static_cast<Index3D>(_right).z) {       2007   if(z < static_cast<Index3D>(_right).z) {
2120      return true;                                2008      return true;
2121   } else if(z == _right.z) {                     2009   } else if(z == _right.z) {
2122     if(y < static_cast<Index3D>(_right).y) re    2010     if(y < static_cast<Index3D>(_right).y) return true;
2123     else if(y == _right.y)                       2011     else if(y == _right.y) 
2124       if(x < static_cast<Index3D>(_right).x)     2012       if(x < static_cast<Index3D>(_right).x) return true;
2125   }                                              2013   } 
2126   return false;                                  2014   return false;
2127 }                                                2015 }
2128 G4bool G4GMocrenFileSceneHandler::Index3D::op    2016 G4bool G4GMocrenFileSceneHandler::Index3D::operator == (const Index3D & _right) const {
2129   if(z == _right.z && y == _right.y && x == _    2017   if(z == _right.z && y == _right.y && x == _right.x) return true;
2130   return false;                                  2018   return false;
2131 }                                                2019 }
2132                                                  2020