Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/visualization/modeling/src/G4PhysicalVolumeMassScene.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/modeling/src/G4PhysicalVolumeMassScene.cc (Version 11.3.0) and /visualization/modeling/src/G4PhysicalVolumeMassScene.cc (Version 10.6.p3)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 //                                                 26 //
 27 //                                                 27 //
 28 //                                                 28 // 
 29 // John Allison  10th August 1998.                 29 // John Allison  10th August 1998.
 30 // An artificial scene to find physical volume     30 // An artificial scene to find physical volumes.
 31                                                    31 
 32 #include "G4PhysicalVolumeMassScene.hh"            32 #include "G4PhysicalVolumeMassScene.hh"
 33                                                    33 
 34 #include "G4VSolid.hh"                             34 #include "G4VSolid.hh"
 35 #include "G4Vector3D.hh"                           35 #include "G4Vector3D.hh"
 36 #include "G4PhysicalVolumeModel.hh"                36 #include "G4PhysicalVolumeModel.hh"
 37 #include "G4LogicalVolume.hh"                      37 #include "G4LogicalVolume.hh"
 38 #include "G4Polyhedron.hh"                         38 #include "G4Polyhedron.hh"
 39 #include "G4Material.hh"                           39 #include "G4Material.hh"
 40 #include "G4VPVParameterisation.hh"                40 #include "G4VPVParameterisation.hh"
 41 #include "G4UnitsTable.hh"                         41 #include "G4UnitsTable.hh"
 42                                                    42 
 43 #define G4warn G4cout                          << 
 44                                                << 
 45 G4PhysicalVolumeMassScene::G4PhysicalVolumeMas     43 G4PhysicalVolumeMassScene::G4PhysicalVolumeMassScene
 46 (G4PhysicalVolumeModel* pPVModel):                 44 (G4PhysicalVolumeModel* pPVModel):
 47   fpPVModel (pPVModel),                            45   fpPVModel (pPVModel),
 48   fVolume (0.),                                    46   fVolume (0.),
 49   fMass (0.),                                      47   fMass (0.),
 50   fpLastPV (0),                                    48   fpLastPV (0),
 51   fPVPCount (0),                                   49   fPVPCount (0),
 52   fLastDepth (0),                                  50   fLastDepth (0),
 53   fLastDensity (0.)                                51   fLastDensity (0.)
 54 {}                                                 52 {}
 55                                                    53 
 56 G4PhysicalVolumeMassScene::~G4PhysicalVolumeMa     54 G4PhysicalVolumeMassScene::~G4PhysicalVolumeMassScene () {}
 57                                                    55 
 58 void G4PhysicalVolumeMassScene::Reset ()           56 void G4PhysicalVolumeMassScene::Reset ()
 59 {                                                  57 {
 60   fVolume = 0.;                                    58   fVolume = 0.;
 61   fMass = 0.;                                      59   fMass = 0.;
 62   fpLastPV = 0;                                    60   fpLastPV = 0;
 63   fPVPCount = 0;                                   61   fPVPCount = 0;
 64   fLastDepth = 0;                                  62   fLastDepth = 0;
 65   fLastDensity = 0.;                               63   fLastDensity = 0.;
 66   fDensityStack.clear();                           64   fDensityStack.clear();
 67 }                                                  65 }
 68                                                    66 
 69 void G4PhysicalVolumeMassScene::ProcessVolume      67 void G4PhysicalVolumeMassScene::ProcessVolume (const G4VSolid& solid)
 70 {                                                  68 {
 71   G4int currentDepth = fpPVModel->GetCurrentDe     69   G4int currentDepth = fpPVModel->GetCurrentDepth();
 72   G4VPhysicalVolume* pCurrentPV = fpPVModel->G     70   G4VPhysicalVolume* pCurrentPV = fpPVModel->GetCurrentPV();
 73   //G4LogicalVolume* pCurrentLV = fpPVModel->G     71   //G4LogicalVolume* pCurrentLV = fpPVModel->GetCurrentLV();
 74   G4Material* pCurrentMaterial = fpPVModel->Ge     72   G4Material* pCurrentMaterial = fpPVModel->GetCurrentMaterial();
 75                                                    73 
 76   if (pCurrentPV != fpLastPV) {                    74   if (pCurrentPV != fpLastPV) {
 77     fpLastPV = pCurrentPV;                         75     fpLastPV = pCurrentPV;
 78     fPVPCount = 0;                                 76     fPVPCount = 0;
 79   }                                                77   }
 80                                                    78 
 81   G4double currentVolume = ((G4VSolid&)solid).     79   G4double currentVolume = ((G4VSolid&)solid).GetCubicVolume();
 82   G4double currentDensity = pCurrentMaterial?      80   G4double currentDensity = pCurrentMaterial? pCurrentMaterial->GetDensity() : 0.;
 83   /* Using G4Polyhedron... (gives slightly dif     81   /* Using G4Polyhedron... (gives slightly different answers on Tubs, e.g.).
 84   G4Polyhedron* pPolyhedron = solid.GetPolyhed     82   G4Polyhedron* pPolyhedron = solid.GetPolyhedron();
 85   if (!pPolyhedron) {                              83   if (!pPolyhedron) {
 86     G4cout <<                                      84     G4cout << 
 87       "G4PhysicalVolumeMassScene::AccrueMass:      85       "G4PhysicalVolumeMassScene::AccrueMass: WARNING:"
 88       "\n  No G4Polyhedron for" << solid.GetEn     86       "\n  No G4Polyhedron for" << solid.GetEntityType() <<
 89       ".  \"" << solid.GetName() << "\" will n     87       ".  \"" << solid.GetName() << "\" will not be accounted."
 90       "\n  It will be as though not there, i.e     88       "\n  It will be as though not there, i.e., the density as its mother."
 91       "\n  Its daughters will still be found a     89       "\n  Its daughters will still be found and accounted."
 92      << G4endl;                                    90      << G4endl;
 93     currentVolume = 0.;                            91     currentVolume = 0.;
 94     currentDensity = 0.;                           92     currentDensity = 0.;
 95   }                                                93   }
 96   */                                               94   */
 97                                                    95 
 98   if (currentDepth == 0) fVolume = currentVolu     96   if (currentDepth == 0) fVolume = currentVolume;
 99                                                    97 
100   if (currentDepth > fLastDepth) {                 98   if (currentDepth > fLastDepth) {
101     fDensityStack.push_back (fLastDensity);        99     fDensityStack.push_back (fLastDensity);
102   } else if (currentDepth < fLastDepth) {         100   } else if (currentDepth < fLastDepth) {
103     fDensityStack.pop_back();                     101     fDensityStack.pop_back();
104   }                                               102   }
105   fLastDepth = currentDepth;                      103   fLastDepth = currentDepth;
106   fLastDensity = currentDensity;                  104   fLastDensity = currentDensity;
107   G4double motherDensity = 0.;                    105   G4double motherDensity = 0.;
108   if (currentDepth > 0) motherDensity = fDensi    106   if (currentDepth > 0) motherDensity = fDensityStack.back();
109                                                   107 
110   G4double subtractedMass = currentVolume * mo    108   G4double subtractedMass = currentVolume * motherDensity;
111   G4double addedMass = currentVolume * current    109   G4double addedMass = currentVolume * currentDensity;
112   fMass -= subtractedMass;                        110   fMass -= subtractedMass;
113   fMass += addedMass;                             111   fMass += addedMass;
114   /* Debug                                        112   /* Debug
115   G4cout << "current vol = "                      113   G4cout << "current vol = "
116    << G4BestUnit (currentVolume,"Volume")         114    << G4BestUnit (currentVolume,"Volume")
117    << ", current density = "                      115    << ", current density = "
118    << G4BestUnit (currentDensity, "Volumic Mas    116    << G4BestUnit (currentDensity, "Volumic Mass")
119    << ", mother density = "                       117    << ", mother density = "
120    << G4BestUnit (motherDensity, "Volumic Mass    118    << G4BestUnit (motherDensity, "Volumic Mass")
121    << G4endl;                                     119    << G4endl;
122   G4cout << "Subtracted mass = " << G4BestUnit    120   G4cout << "Subtracted mass = " << G4BestUnit (subtractedMass, "Mass")
123    << ", added mass = " << G4BestUnit (addedMa    121    << ", added mass = " << G4BestUnit (addedMass, "Mass")
124    << ", new mass = " << G4BestUnit (fMass, "M    122    << ", new mass = " << G4BestUnit (fMass, "Mass")
125    << G4endl;                                     123    << G4endl;
126   */                                              124   */
127   if (fMass < 0.) {                               125   if (fMass < 0.) {
128     G4warn <<                                  << 126     G4cout <<
129       "G4PhysicalVolumeMassScene::AccrueMass:     127       "G4PhysicalVolumeMassScene::AccrueMass: WARNING:"
130       "\n  Mass going negative for \""            128       "\n  Mass going negative for \""
131      << pCurrentPV->GetName() <<                  129      << pCurrentPV->GetName() <<
132       "\", copy "                                 130       "\", copy "
133      << pCurrentPV->GetCopyNo() <<                131      << pCurrentPV->GetCopyNo() <<
134       ".  Larger than mother?"                    132       ".  Larger than mother?"
135      << G4endl;                                   133      << G4endl;
136   }                                               134   }
137 }                                                 135 }
138                                                   136