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


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