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


  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                              43 #define G4warn G4cout
 44                                                    44 
 45 G4PhysicalVolumeMassScene::G4PhysicalVolumeMas     45 G4PhysicalVolumeMassScene::G4PhysicalVolumeMassScene
 46 (G4PhysicalVolumeModel* pPVModel):                 46 (G4PhysicalVolumeModel* pPVModel):
 47   fpPVModel (pPVModel),                            47   fpPVModel (pPVModel),
 48   fVolume (0.),                                    48   fVolume (0.),
 49   fMass (0.),                                      49   fMass (0.),
 50   fpLastPV (0),                                    50   fpLastPV (0),
 51   fPVPCount (0),                                   51   fPVPCount (0),
 52   fLastDepth (0),                                  52   fLastDepth (0),
 53   fLastDensity (0.)                                53   fLastDensity (0.)
 54 {}                                                 54 {}
 55                                                    55 
 56 G4PhysicalVolumeMassScene::~G4PhysicalVolumeMa     56 G4PhysicalVolumeMassScene::~G4PhysicalVolumeMassScene () {}
 57                                                    57 
 58 void G4PhysicalVolumeMassScene::Reset ()           58 void G4PhysicalVolumeMassScene::Reset ()
 59 {                                                  59 {
 60   fVolume = 0.;                                    60   fVolume = 0.;
 61   fMass = 0.;                                      61   fMass = 0.;
 62   fpLastPV = 0;                                    62   fpLastPV = 0;
 63   fPVPCount = 0;                                   63   fPVPCount = 0;
 64   fLastDepth = 0;                                  64   fLastDepth = 0;
 65   fLastDensity = 0.;                               65   fLastDensity = 0.;
 66   fDensityStack.clear();                           66   fDensityStack.clear();
 67 }                                                  67 }
 68                                                    68 
 69 void G4PhysicalVolumeMassScene::ProcessVolume      69 void G4PhysicalVolumeMassScene::ProcessVolume (const G4VSolid& solid)
 70 {                                                  70 {
 71   G4int currentDepth = fpPVModel->GetCurrentDe     71   G4int currentDepth = fpPVModel->GetCurrentDepth();
 72   G4VPhysicalVolume* pCurrentPV = fpPVModel->G     72   G4VPhysicalVolume* pCurrentPV = fpPVModel->GetCurrentPV();
 73   //G4LogicalVolume* pCurrentLV = fpPVModel->G     73   //G4LogicalVolume* pCurrentLV = fpPVModel->GetCurrentLV();
 74   G4Material* pCurrentMaterial = fpPVModel->Ge     74   G4Material* pCurrentMaterial = fpPVModel->GetCurrentMaterial();
 75                                                    75 
 76   if (pCurrentPV != fpLastPV) {                    76   if (pCurrentPV != fpLastPV) {
 77     fpLastPV = pCurrentPV;                         77     fpLastPV = pCurrentPV;
 78     fPVPCount = 0;                                 78     fPVPCount = 0;
 79   }                                                79   }
 80                                                    80 
 81   G4double currentVolume = ((G4VSolid&)solid).     81   G4double currentVolume = ((G4VSolid&)solid).GetCubicVolume();
 82   G4double currentDensity = pCurrentMaterial?      82   G4double currentDensity = pCurrentMaterial? pCurrentMaterial->GetDensity() : 0.;
 83   /* Using G4Polyhedron... (gives slightly dif     83   /* Using G4Polyhedron... (gives slightly different answers on Tubs, e.g.).
 84   G4Polyhedron* pPolyhedron = solid.GetPolyhed     84   G4Polyhedron* pPolyhedron = solid.GetPolyhedron();
 85   if (!pPolyhedron) {                              85   if (!pPolyhedron) {
 86     G4cout <<                                      86     G4cout << 
 87       "G4PhysicalVolumeMassScene::AccrueMass:      87       "G4PhysicalVolumeMassScene::AccrueMass: WARNING:"
 88       "\n  No G4Polyhedron for" << solid.GetEn     88       "\n  No G4Polyhedron for" << solid.GetEntityType() <<
 89       ".  \"" << solid.GetName() << "\" will n     89       ".  \"" << solid.GetName() << "\" will not be accounted."
 90       "\n  It will be as though not there, i.e     90       "\n  It will be as though not there, i.e., the density as its mother."
 91       "\n  Its daughters will still be found a     91       "\n  Its daughters will still be found and accounted."
 92      << G4endl;                                    92      << G4endl;
 93     currentVolume = 0.;                            93     currentVolume = 0.;
 94     currentDensity = 0.;                           94     currentDensity = 0.;
 95   }                                                95   }
 96   */                                               96   */
 97                                                    97 
 98   if (currentDepth == 0) fVolume = currentVolu     98   if (currentDepth == 0) fVolume = currentVolume;
 99                                                    99 
100   if (currentDepth > fLastDepth) {                100   if (currentDepth > fLastDepth) {
101     fDensityStack.push_back (fLastDensity);       101     fDensityStack.push_back (fLastDensity);
102   } else if (currentDepth < fLastDepth) {         102   } else if (currentDepth < fLastDepth) {
103     fDensityStack.pop_back();                     103     fDensityStack.pop_back();
104   }                                               104   }
105   fLastDepth = currentDepth;                      105   fLastDepth = currentDepth;
106   fLastDensity = currentDensity;                  106   fLastDensity = currentDensity;
107   G4double motherDensity = 0.;                    107   G4double motherDensity = 0.;
108   if (currentDepth > 0) motherDensity = fDensi    108   if (currentDepth > 0) motherDensity = fDensityStack.back();
109                                                   109 
110   G4double subtractedMass = currentVolume * mo    110   G4double subtractedMass = currentVolume * motherDensity;
111   G4double addedMass = currentVolume * current    111   G4double addedMass = currentVolume * currentDensity;
112   fMass -= subtractedMass;                        112   fMass -= subtractedMass;
113   fMass += addedMass;                             113   fMass += addedMass;
114   /* Debug                                        114   /* Debug
115   G4cout << "current vol = "                      115   G4cout << "current vol = "
116    << G4BestUnit (currentVolume,"Volume")         116    << G4BestUnit (currentVolume,"Volume")
117    << ", current density = "                      117    << ", current density = "
118    << G4BestUnit (currentDensity, "Volumic Mas    118    << G4BestUnit (currentDensity, "Volumic Mass")
119    << ", mother density = "                       119    << ", mother density = "
120    << G4BestUnit (motherDensity, "Volumic Mass    120    << G4BestUnit (motherDensity, "Volumic Mass")
121    << G4endl;                                     121    << G4endl;
122   G4cout << "Subtracted mass = " << G4BestUnit    122   G4cout << "Subtracted mass = " << G4BestUnit (subtractedMass, "Mass")
123    << ", added mass = " << G4BestUnit (addedMa    123    << ", added mass = " << G4BestUnit (addedMass, "Mass")
124    << ", new mass = " << G4BestUnit (fMass, "M    124    << ", new mass = " << G4BestUnit (fMass, "Mass")
125    << G4endl;                                     125    << G4endl;
126   */                                              126   */
127   if (fMass < 0.) {                               127   if (fMass < 0.) {
128     G4warn <<                                     128     G4warn <<
129       "G4PhysicalVolumeMassScene::AccrueMass:     129       "G4PhysicalVolumeMassScene::AccrueMass: WARNING:"
130       "\n  Mass going negative for \""            130       "\n  Mass going negative for \""
131      << pCurrentPV->GetName() <<                  131      << pCurrentPV->GetName() <<
132       "\", copy "                                 132       "\", copy "
133      << pCurrentPV->GetCopyNo() <<                133      << pCurrentPV->GetCopyNo() <<
134       ".  Larger than mother?"                    134       ".  Larger than mother?"
135      << G4endl;                                   135      << G4endl;
136   }                                               136   }
137 }                                                 137 }
138                                                   138