Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/digits_hits/utils/src/G4ScoringCylinder.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 /digits_hits/utils/src/G4ScoringCylinder.cc (Version 11.3.0) and /digits_hits/utils/src/G4ScoringCylinder.cc (Version 10.1.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 // G4ScoringCylinder                           <<  26 //
 27 // ------------------------------------------- <<  27 // $Id: G4ScoringCylinder.cc 89027 2015-03-18 08:37:30Z gcosmo $
                                                   >>  28 //
 28                                                    29 
 29 #include "G4ScoringCylinder.hh"                    30 #include "G4ScoringCylinder.hh"
 30                                                    31 
 31 #include "G4LogicalVolume.hh"                  << 
 32 #include "G4MultiFunctionalDetector.hh"        << 
 33 #include "G4PVDivision.hh"                     << 
 34 #include "G4PVPlacement.hh"                    << 
 35 #include "G4PVReplica.hh"                      << 
 36 #include "G4PhysicalConstants.hh"                  32 #include "G4PhysicalConstants.hh"
 37 #include "G4SDManager.hh"                      << 
 38 #include "G4ScoringManager.hh"                 << 
 39 #include "G4StatDouble.hh"                     << 
 40 #include "G4SystemOfUnits.hh"                      33 #include "G4SystemOfUnits.hh"
                                                   >>  34 #include "G4VPhysicalVolume.hh"
 41 #include "G4Tubs.hh"                               35 #include "G4Tubs.hh"
                                                   >>  36 #include "G4LogicalVolume.hh"
 42 #include "G4VPhysicalVolume.hh"                    37 #include "G4VPhysicalVolume.hh"
 43 #include "G4VPrimitiveScorer.hh"               <<  38 #include "G4PVPlacement.hh"
 44 #include "G4VScoreColorMap.hh"                 <<  39 #include "G4PVReplica.hh"
 45 #include "G4VVisManager.hh"                    <<  40 #include "G4PVDivision.hh"
 46 #include "G4VisAttributes.hh"                      41 #include "G4VisAttributes.hh"
                                                   >>  42 #include "G4VVisManager.hh"
                                                   >>  43 #include "G4VScoreColorMap.hh"
 47                                                    44 
 48 #include "G4LogicalVolumeStore.hh"             <<  45 #include "G4SDManager.hh"
 49 #include "G4Material.hh"                       <<  46 #include "G4MultiFunctionalDetector.hh"
 50 #include "G4PhysicalVolumeStore.hh"            <<  47 #include "G4SDParticleFilter.hh"
 51 #include "G4SolidStore.hh"                     <<  48 #include "G4VPrimitiveScorer.hh"
 52 #include "G4UnitsTable.hh"                     <<  49 #include "G4PSEnergyDeposit.hh"
 53 #include "G4VSensitiveDetector.hh"             <<  50 #include "G4PSTrackLength.hh"
 54 #include "G4VSolid.hh"                         <<  51 #include "G4PSNofStep.hh"
                                                   >>  52 #include "G4ScoringManager.hh"
 55                                                    53 
 56                                                    54 
 57 G4ScoringCylinder::G4ScoringCylinder(const G4S <<  55 G4ScoringCylinder::G4ScoringCylinder(G4String wName)
 58   : G4VScoringMesh(wName)                      <<  56   :G4VScoringMesh(wName)
 59 {                                                  57 {
 60   fShape = MeshShape::cylinder;                <<  58   fShape = cylinderMesh;
 61                                                    59 
 62   fDivisionAxisNames[0] = "Z";                     60   fDivisionAxisNames[0] = "Z";
 63   fDivisionAxisNames[1] = "PHI";                   61   fDivisionAxisNames[1] = "PHI";
 64   fDivisionAxisNames[2] = "R";                     62   fDivisionAxisNames[2] = "R";
 65 }                                                  63 }
 66                                                    64 
 67 void G4ScoringCylinder::SetupGeometry(G4VPhysi <<  65 G4ScoringCylinder::~G4ScoringCylinder()
 68 {                                              <<  66 {;}
 69   if(verboseLevel > 9)                         <<  67 
 70     G4cout << "G4ScoringCylinder::SetupGeometr <<  68 void G4ScoringCylinder::SetupGeometry(G4VPhysicalVolume * fWorldPhys) {
                                                   >>  69 
                                                   >>  70   if(verboseLevel > 9) G4cout << "G4ScoringCylinder::SetupGeometry() ..." << G4endl;
 71                                                    71 
 72   // World                                         72   // World
 73   G4VPhysicalVolume* scoringWorld = fWorldPhys <<  73   G4VPhysicalVolume * scoringWorld = fWorldPhys;
 74   G4LogicalVolume* worldLogical   = scoringWor <<  74   G4LogicalVolume * worldLogical = scoringWorld->GetLogicalVolume();
 75                                                    75 
 76   // Scoring Mesh                                  76   // Scoring Mesh
 77   if(verboseLevel > 9)                         <<  77   if(verboseLevel > 9) G4cout << fWorldName << G4endl;
 78     G4cout << fWorldName << G4endl;            <<  78   G4String tubsName = fWorldName+"_mesh";
 79   G4String tubsName = fWorldName + "_mesh";    << 
 80                                                    79 
 81   if(verboseLevel > 9)                         <<  80   if(verboseLevel > 9) G4cout << "R max., Dz =: " << fSize[0] << ", " << fSize[1] << G4endl;
 82   {                                            <<  81   G4VSolid * tubsSolid = new G4Tubs(tubsName+"0", // name
 83     G4cout << "R min, R max., Dz =: " << fSize <<  82             0.,           // R min
 84                                       << ", "  <<  83             fSize[0],     // R max
 85   }                                            <<  84             fSize[1],     // Dz
 86   G4VSolid* tubsSolid          = new G4Tubs(tu <<  85             0.,           // starting phi
 87                                    fSize[0],   <<  86                                     twopi*rad);   // segment phi
 88                                    fSize[1],   <<  87   G4LogicalVolume *  tubsLogical = new G4LogicalVolume(tubsSolid, 0, tubsName);
 89                                    fSize[2],   <<  88   new G4PVPlacement(fRotationMatrix, fCenterPosition,
 90                                    fAngle[0],  <<  89         tubsLogical, tubsName+"0", worldLogical, false, 0);
 91                                    fAngle[1]); <<  90 
 92   auto  tubsLogical = new G4LogicalVolume(tubs <<  91   if(verboseLevel > 9) G4cout << " # of segments : r, phi, z =: "
 93   new G4PVPlacement(fRotationMatrix, fCenterPo <<  92    << fNSegment[IR] << ", " << fNSegment[IPHI] << ", " << fNSegment[IZ] << G4endl;
 94                     tubsName + "0", worldLogic <<  93 
 95                                                <<  94   G4String layerName[2] = {tubsName + "1",  tubsName + "2"};
 96   if(verboseLevel > 9)                         <<  95   G4VSolid * layerSolid[2]; 
 97     G4cout << " # of segments : r, phi, z =: " <<  96   G4LogicalVolume * layerLogical[2];
 98            << fNSegment[IPHI] << ", " << fNSeg << 
 99                                                << 
100   G4String layerName[2] = { tubsName + "1", tu << 
101   G4VSolid* layerSolid[2];                     << 
102   G4LogicalVolume* layerLogical[2];            << 
103                                                    97 
104   //-- fisrt nested layer (replicated along z      98   //-- fisrt nested layer (replicated along z direction)
105   if(verboseLevel > 9)                         <<  99   if(verboseLevel > 9) G4cout << "layer 1 :" << G4endl;
106     G4cout << "layer 1 :" << G4endl;           << 100   layerSolid[0] = new G4Tubs(layerName[0],           // name
107   layerSolid[0]   = new G4Tubs(layerName[0],   << 101            0.,                     // inner radius
108                              fSize[0],         << 102            fSize[0],               // outer radius
109                              fSize[1],         << 103            fSize[1]/fNSegment[IZ], // half len. in z
110                              fSize[2] / fNSegm << 104            0.,                     // starting phi angle
111                              fAngle[0],        << 105            twopi*rad);             // delta angle of the segment
112                              fAngle[1]);  // d << 106   layerLogical[0] = new G4LogicalVolume(layerSolid[0], 0, layerName[0]);
113   layerLogical[0] = new G4LogicalVolume(layerS << 107   if(fNSegment[IZ] > 1) {
114   if(fNSegment[IZ] > 1)                        << 108     if(verboseLevel > 9) G4cout << "G4ScoringCylinder::Construct() : Replicate along z direction" << G4endl;
115   {                                            << 109     if(G4ScoringManager::GetReplicaLevel()>0) {
116     if(verboseLevel > 9)                       << 110       if(verboseLevel > 9) G4cout << "G4ScoringCylinder::Construct() : Replica" << G4endl;
117       G4cout << "G4ScoringCylinder::Construct( << 111       new G4PVReplica(layerName[0], layerLogical[0], tubsLogical, kZAxis, fNSegment[IZ], 2.*fSize[1]/fNSegment[IZ]);
118              << G4endl;                        << 112     } else {
119     if(G4ScoringManager::GetReplicaLevel() > 0 << 113       if(verboseLevel > 9) G4cout << "G4ScoringCylinder::Construct() : Division" << G4endl;
120     {                                          << 114       new G4PVDivision(layerName[0], layerLogical[0], tubsLogical, kZAxis, fNSegment[IZ], 0.);
121       if(verboseLevel > 9)                     << 115     }
122         G4cout << "G4ScoringCylinder::Construc << 116   } else if(fNSegment[IZ] == 1) {
123       new G4PVReplica(layerName[0], layerLogic << 117     if(verboseLevel > 9) G4cout << "G4ScoringCylinder::Construct() : Placement" << G4endl;
124                       fNSegment[IZ], 2. * fSiz << 118     new G4PVPlacement(0, G4ThreeVector(0.,0.,0.), layerLogical[0], layerName[0], tubsLogical, false, 0);
125     }                                          << 119   } else {
126     else                                       << 
127     {                                          << 
128       if(verboseLevel > 9)                     << 
129         G4cout << "G4ScoringCylinder::Construc << 
130       new G4PVDivision(layerName[0], layerLogi << 
131                        fNSegment[IZ], 0.);     << 
132     }                                          << 
133   }                                            << 
134   else if(fNSegment[IZ] == 1)                  << 
135   {                                            << 
136     if(verboseLevel > 9)                       << 
137       G4cout << "G4ScoringCylinder::Construct( << 
138     new G4PVPlacement(nullptr, G4ThreeVector(0 << 
139                       layerName[0], tubsLogica << 
140   }                                            << 
141   else                                         << 
142   {                                            << 
143     G4cerr << "G4ScoringCylinder::SetupGeometr    120     G4cerr << "G4ScoringCylinder::SetupGeometry() : invalid parameter ("
144            << fNSegment[IZ] << ") "            << 121      << fNSegment[IZ] << ") "
145            << "in placement of the first neste << 122      << "in placement of the first nested layer." << G4endl;
146   }                                               123   }
147                                                   124 
148   // second nested layer (replicated along phi    125   // second nested layer (replicated along phi direction)
149   if(verboseLevel > 9)                         << 126   if(verboseLevel > 9) G4cout << "layer 2 :" << G4endl;
150     G4cout << "layer 2 :" << G4endl;           << 127   layerSolid[1] = new G4Tubs(layerName[1],
151   layerSolid[1] =                              << 128            0.,
152     new G4Tubs(layerName[1], fSize[0], fSize[1 << 129            fSize[0],
153                fAngle[0], fAngle[1] / fNSegmen << 130            fSize[1]/fNSegment[IZ],
154   layerLogical[1] = new G4LogicalVolume(layerS << 131            0.,
155   if(fNSegment[IPHI] > 1)                      << 132                              twopi*rad/fNSegment[IPHI]);
156   {                                            << 133   layerLogical[1] = new G4LogicalVolume(layerSolid[1], 0, layerName[1]);
157     if(verboseLevel > 9)                       << 134   if(fNSegment[IPHI] > 1)  {
158       G4cout << "G4ScoringCylinder::Construct( << 135     if(verboseLevel > 9) G4cout << "G4ScoringCylinder::Construct() : Replicate along phi direction" << G4endl;
159              << G4endl;                        << 136     if(G4ScoringManager::GetReplicaLevel()>1) {
160     if(G4ScoringManager::GetReplicaLevel() > 1 << 137       if(verboseLevel > 9) G4cout << "G4ScoringCylinder::Construct() : Replica" << G4endl;
161     {                                          << 
162       if(verboseLevel > 9)                     << 
163         G4cout << "G4ScoringCylinder::Construc << 
164       new G4PVReplica(layerName[1], layerLogic    138       new G4PVReplica(layerName[1], layerLogical[1], layerLogical[0], kPhi,
165                       fNSegment[IPHI], fAngle[ << 139           fNSegment[IPHI], twopi*rad/fNSegment[IPHI]);
166     }                                          << 140     } else {
167     else                                       << 141       if(verboseLevel > 9) G4cout << "G4ScoringCylinder::Construct() : Division" << G4endl;
168     {                                          << 142       new G4PVDivision(layerName[1], layerLogical[1], layerLogical[0], kPhi, fNSegment[IPHI], 0.);
169       if(verboseLevel > 9)                     << 143     }
170         G4cout << "G4ScoringCylinder::Construc << 144   } else if(fNSegment[IPHI] == 1) {
171       new G4PVDivision(layerName[1], layerLogi << 145     if(verboseLevel > 9) G4cout << "G4ScoringCylinder::Construct() : Placement" << G4endl;
172                        fNSegment[IPHI], 0.);   << 146     new G4PVPlacement(0, G4ThreeVector(0.,0.,0.), layerLogical[1], layerName[1], layerLogical[0], false, 0);
173     }                                          << 147   } else
174   }                                            << 
175   else if(fNSegment[IPHI] == 1)                << 
176   {                                            << 
177     if(verboseLevel > 9)                       << 
178       G4cout << "G4ScoringCylinder::Construct( << 
179     new G4PVPlacement(nullptr, G4ThreeVector(0 << 
180                       layerName[1], layerLogic << 
181   }                                            << 
182   else                                         << 
183     G4cerr << "ERROR : G4ScoringCylinder::Setu    148     G4cerr << "ERROR : G4ScoringCylinder::SetupGeometry() : invalid parameter ("
184            << fNSegment[IPHI] << ") "          << 149      << fNSegment[IPHI] << ") "
185            << "in placement of the second nest << 150      << "in placement of the second nested layer." << G4endl;
186                                                   151 
187   // mesh elements                                152   // mesh elements
188   if(verboseLevel > 9)                         << 153   if(verboseLevel > 9) G4cout << "mesh elements :" << G4endl;
189     G4cout << "mesh elements :" << G4endl;     << 154   G4String elementName = tubsName +"3";
190   G4String elementName   = tubsName + "3";     << 155   G4VSolid * elementSolid = new G4Tubs(elementName,
191   G4VSolid* elementSolid = new G4Tubs(         << 156                0.,
192     elementName, fSize[0], (fSize[1] - fSize[0 << 157                fSize[0]/fNSegment[IR],
193     fSize[2] / fNSegment[IZ], fAngle[0], fAngl << 158                fSize[1]/fNSegment[IZ],
194   fMeshElementLogical = new G4LogicalVolume(el << 159                0.,
195   if(fNSegment[IR] >= 1)                       << 160                                        twopi*rad/fNSegment[IPHI]);
196   {                                            << 161   fMeshElementLogical = new G4LogicalVolume(elementSolid, 0, elementName);
197     if(verboseLevel > 9)                       << 162   if(fNSegment[IR] > 1) {
198       G4cout << "G4ScoringCylinder::Construct( << 163 
199              << G4endl;                        << 164     if(verboseLevel > 9) G4cout << "G4ScoringCylinder::Construct() : Replicate along r direction" << G4endl;
200                                                << 165 
201     if(G4ScoringManager::GetReplicaLevel() > 2 << 166     if(G4ScoringManager::GetReplicaLevel()>2) {
202     {                                          << 167       if(verboseLevel > 9) G4cout << "G4ScoringCylinder::Construct() : Replica" << G4endl;
203       if(verboseLevel > 9)                     << 
204         G4cout << "G4ScoringCylinder::Construc << 
205       new G4PVReplica(elementName, fMeshElemen    168       new G4PVReplica(elementName, fMeshElementLogical, layerLogical[1], kRho,
206                       fNSegment[IR], (fSize[1] << 169       fNSegment[IR], fSize[0]/fNSegment[IR]);
207                       fSize[0]);               << 170     } else {
208     }                                          << 171       if(verboseLevel > 9) G4cout << "G4ScoringCylinder::Construct() : Division" << G4endl;
209     else                                       << 172       new G4PVDivision(elementName, fMeshElementLogical, layerLogical[1], kRho, fNSegment[IR], 0.);
210     {                                          << 173     }
211       if(verboseLevel > 9)                     << 174   } else if(fNSegment[IR] == 1) {
212         G4cout << "G4ScoringCylinder::Construc << 175     if(verboseLevel > 9) G4cout << "G4ScoringCylinder::Construct() : Placement" << G4endl;
213       new G4PVDivision(elementName, fMeshEleme << 176     new G4PVPlacement(0, G4ThreeVector(0.,0.,0.), fMeshElementLogical, elementName, layerLogical[1], false, 0);
214                        fNSegment[IR], 0.);     << 177   } else {
215     }                                          << 
216   }                                            << 
217   else                                         << 
218   {                                            << 
219     G4cerr << "G4ScoringCylinder::SetupGeometr    178     G4cerr << "G4ScoringCylinder::SetupGeometry() : "
220            << "invalid parameter (" << fNSegme << 179      << "invalid parameter (" << fNSegment[IR] << ") "
221            << "in mesh element placement." <<  << 180      << "in mesh element placement." << G4endl;
222   }                                               181   }
223                                                   182 
224   // set the sensitive detector                   183   // set the sensitive detector
225   fMeshElementLogical->SetSensitiveDetector(fM    184   fMeshElementLogical->SetSensitiveDetector(fMFD);
                                                   >> 185   
226                                                   186 
227   // vis. attributes                              187   // vis. attributes
228   auto  visatt = new G4VisAttributes(G4Colour( << 188   G4VisAttributes * visatt = new G4VisAttributes(G4Colour(.5,.5,.5));
229   visatt->SetVisibility(true);                    189   visatt->SetVisibility(true);
230   layerLogical[0]->SetVisAttributes(visatt);      190   layerLogical[0]->SetVisAttributes(visatt);
231   layerLogical[1]->SetVisAttributes(visatt);      191   layerLogical[1]->SetVisAttributes(visatt);
232   visatt = new G4VisAttributes(G4Colour(.5, .5 << 192   visatt = new G4VisAttributes(G4Colour(.5,.5,.5,0.01));
233   // visatt->SetForceSolid(true);              << 193   //visatt->SetForceSolid(true);
234   fMeshElementLogical->SetVisAttributes(visatt    194   fMeshElementLogical->SetVisAttributes(visatt);
235                                                << 
236   if(verboseLevel > 9)                         << 
237     DumpVolumes();                             << 
238 }                                                 195 }
239                                                   196 
240 void G4ScoringCylinder::List() const           << 197 void G4ScoringCylinder::List() const {
241 {                                              << 198   G4cout << "G4ScoringCylinder : " << fWorldName << " --- Shape: Cylindrical mesh" << G4endl;
242   G4cout << "G4ScoringCylinder : " << fWorldNa << 
243          << " --- Shape: Cylindrical mesh" <<  << 
244                                                   199 
245   G4cout << " Size (Rmin, Rmax, Dz): (" << fSi << 200   G4cout << " Size (R, Dz): ("
246          << fSize[1] / cm << ", " << fSize[2]  << 201    << fSize[0]/cm << ", "
247   G4cout << " Angle (start, span): (" << fAngl << 202    << fSize[1]/cm << ") [cm]"
248          << fAngle[1] / deg << ") [deg]" << G4 << 203    << G4endl;
249                                                   204 
250   G4VScoringMesh::List();                         205   G4VScoringMesh::List();
251 }                                                 206 }
252                                                   207 
253 void G4ScoringCylinder::Draw(RunScore* map, G4 << 208 
254                              G4int axflg)      << 209 void G4ScoringCylinder::Draw(std::map<G4int, G4double*> * map,
255 {                                              << 210                              G4VScoreColorMap* colorMap, G4int axflg) {
256   G4VVisManager* pVisManager = G4VVisManager:: << 211 
257   if(pVisManager != nullptr)                   << 212   G4VVisManager * pVisManager = G4VVisManager::GetConcreteInstance();
258   {                                            << 213   if(pVisManager) {
                                                   >> 214     
259     // cell vectors                               215     // cell vectors
260     std::vector<G4double> ephi;                << 216     std::vector<double> ephi;
261     for(G4int phi = 0; phi < fNSegment[IPHI];  << 217     for(int phi = 0; phi < fNSegment[IPHI]; phi++) ephi.push_back(0.);
262       ephi.push_back(0.);                      << 
263     //-                                           218     //-
264     std::vector<std::vector<G4double>> zphicel << 219     std::vector<std::vector<double> > zphicell; // zphicell[Z][PHI]
265     for(G4int z = 0; z < fNSegment[IZ]; z++)   << 220     for(int z = 0; z < fNSegment[IZ]; z++) zphicell.push_back(ephi);
266       zphicell.push_back(ephi);                << 
267     //-                                           221     //-
268     std::vector<std::vector<G4double>> rphicel << 222     std::vector<std::vector<double> > rphicell; // rphicell[R][PHI]
269     for(G4int r = 0; r < fNSegment[IR]; r++)   << 223     for(int r = 0; r < fNSegment[IR]; r++) rphicell.push_back(ephi);
270       rphicell.push_back(ephi);                << 224     
271                                                << 
272     // projections                                225     // projections
273     G4int q[3];                                   226     G4int q[3];
274     auto itr = map->GetMap()->begin();         << 227     std::map<G4int, G4double*>::iterator itr = map->begin();
275     for(; itr != map->GetMap()->end(); itr++)  << 228     for(; itr != map->end(); itr++) {
276     {                                          << 229       if(itr->first < 0) {
277       if(itr->first < 0)                       << 
278       {                                        << 
279         G4cout << itr->first << G4endl;           230         G4cout << itr->first << G4endl;
280         continue;                                 231         continue;
281       }                                           232       }
282       GetRZPhi(itr->first, q);                    233       GetRZPhi(itr->first, q);
283                                                << 234       
284       zphicell[q[IZ]][q[IPHI]] += (itr->second << 235       zphicell[q[IZ]][q[IPHI]] += *(itr->second)/fDrawUnitValue;
285       rphicell[q[IR]][q[IPHI]] += (itr->second << 236       rphicell[q[IR]][q[IPHI]] += *(itr->second)/fDrawUnitValue;
286     }                                             237     }
287                                                << 238     
288     // search min./max. values                    239     // search min./max. values
289     G4double zphimin = DBL_MAX, rphimin = DBL_    240     G4double zphimin = DBL_MAX, rphimin = DBL_MAX;
290     G4double zphimax = 0., rphimax = 0.;          241     G4double zphimax = 0., rphimax = 0.;
291     for(G4int iphi = 0; iphi < fNSegment[IPHI] << 242     for(int iphi = 0; iphi < fNSegment[IPHI]; iphi++) {
292     {                                          << 243       for(int iz = 0; iz < fNSegment[IZ]; iz++) {
293       for(G4int iz = 0; iz < fNSegment[IZ]; iz << 244         if(zphimin > zphicell[iz][iphi]) zphimin = zphicell[iz][iphi];
294       {                                        << 245         if(zphimax < zphicell[iz][iphi]) zphimax = zphicell[iz][iphi];
295         if(zphimin > zphicell[iz][iphi])       << 246       }
296           zphimin = zphicell[iz][iphi];        << 247       for(int ir = 0; ir < fNSegment[IR]; ir++) {
297         if(zphimax < zphicell[iz][iphi])       << 248         if(rphimin > rphicell[ir][iphi]) rphimin = rphicell[ir][iphi];
298           zphimax = zphicell[iz][iphi];        << 249         if(rphimax < rphicell[ir][iphi]) rphimax = rphicell[ir][iphi];
299       }                                        << 
300       for(G4int ir = 0; ir < fNSegment[IR]; ir << 
301       {                                        << 
302         if(rphimin > rphicell[ir][iphi])       << 
303           rphimin = rphicell[ir][iphi];        << 
304         if(rphimax < rphicell[ir][iphi])       << 
305           rphimax = rphicell[ir][iphi];        << 
306       }                                           250       }
307     }                                             251     }
308                                                << 252     
309     G4VisAttributes att;                          253     G4VisAttributes att;
310     att.SetForceSolid(true);                      254     att.SetForceSolid(true);
311     att.SetForceAuxEdgeVisible(true);             255     att.SetForceAuxEdgeVisible(true);
312                                                << 256     
                                                   >> 257     
313     G4Scale3D scale;                              258     G4Scale3D scale;
314     if(axflg / 100 == 1)                       << 259     if(axflg/100==1) {
315     {                                          << 
316       // rz plane                                 260       // rz plane
317     }                                             261     }
318     axflg = axflg % 100;                       << 262     axflg = axflg%100;
319     if(axflg / 10 == 1)                        << 263     if(axflg/10==1) {
320     {                                          << 
321       pVisManager->BeginDraw();                   264       pVisManager->BeginDraw();
322                                                << 265       
323       // z-phi plane                              266       // z-phi plane
324       if(colorMap->IfFloatMinMax())            << 267       if(colorMap->IfFloatMinMax()) { colorMap->SetMinMax(zphimin, zphimax); }
325       {                                        << 268       
326         colorMap->SetMinMax(zphimin, zphimax); << 269       G4double zhalf = fSize[1]/fNSegment[IZ];
327       }                                        << 270       for(int phi = 0; phi < fNSegment[IPHI]; phi++) {
328                                                << 271         for(int z = 0; z < fNSegment[IZ]; z++) {
329       G4double zhalf = fSize[2] / fNSegment[IZ << 
330       for(G4int phi = 0; phi < fNSegment[IPHI] << 
331       {                                        << 
332         for(G4int z = 0; z < fNSegment[IZ]; z+ << 
333         {                                      << 
334           //-                                     272           //-
335           G4double angle = fAngle[0] + fAngle[ << 273           G4double angle = twopi/fNSegment[IPHI]*phi;
336           G4double dphi  = fAngle[1] / fNSegme << 274           G4double dphi = twopi/fNSegment[IPHI];
337           G4Tubs cylinder(                     << 275           G4Tubs cylinder("z-phi",                    // name
338             "z-phi",                    // nam << 276                           fSize[0]*0.99, fSize[0],  // inner radius, outer radius
339             fSize[1] * 0.99, fSize[1],  // inn << 277                           zhalf,                      // half length in z
340             zhalf,                      // hal << 278                           angle, dphi*0.99999);       // starting phi angle, delta angle
341             angle, dphi * 0.99999);     // sta << 
342           //-                                     279           //-
343           G4ThreeVector zpos(                  << 280           G4ThreeVector zpos(0., 0., -fSize[1] + fSize[1]/fNSegment[IZ]*(1 + 2.*z));
344             0., 0., -fSize[2] + fSize[2] / fNS << 
345           G4Transform3D trans;                    281           G4Transform3D trans;
346           if(fRotationMatrix != nullptr)       << 282           if(fRotationMatrix) {
347           {                                    << 283             trans = G4Rotate3D(*fRotationMatrix).inverse()*G4Translate3D(zpos);
348             trans =                            << 284             trans = G4Translate3D(fCenterPosition)*trans;
349               G4Rotate3D(*fRotationMatrix).inv << 285           } else {
350             trans = G4Translate3D(fCenterPosit << 286             trans = G4Translate3D(zpos)*G4Translate3D(fCenterPosition);
351           }                                    << 
352           else                                 << 
353           {                                    << 
354             trans = G4Translate3D(zpos) * G4Tr << 
355           }                                       287           }
356           G4double c[4];                          288           G4double c[4];
357           colorMap->GetMapColor(zphicell[z][ph    289           colorMap->GetMapColor(zphicell[z][phi], c);
358           att.SetColour(c[0], c[1], c[2]);  // << 290           att.SetColour(c[0], c[1], c[2]);//, c[3]);
359           //-                                     291           //-
360           G4Polyhedron* poly = cylinder.GetPol << 292           G4Polyhedron * poly = cylinder.GetPolyhedron();
361           poly->Transform(trans);                 293           poly->Transform(trans);
362           poly->SetVisAttributes(att);            294           poly->SetVisAttributes(att);
363           pVisManager->Draw(*poly);               295           pVisManager->Draw(*poly);
364         }                                         296         }
365       }                                           297       }
366       pVisManager->EndDraw();                     298       pVisManager->EndDraw();
367     }                                             299     }
368     axflg = axflg % 10;                        << 300     axflg = axflg%10;
369     if(axflg == 1)                             << 301     if(axflg==1) {
370     {                                          << 
371       pVisManager->BeginDraw();                   302       pVisManager->BeginDraw();
372                                                << 303       
373       // r-phi plane                              304       // r-phi plane
374       if(colorMap->IfFloatMinMax())            << 305       if(colorMap->IfFloatMinMax()) { colorMap->SetMinMax(rphimin, rphimax); }
375       {                                        << 306       
376         colorMap->SetMinMax(rphimin, rphimax); << 307       G4double rsize = fSize[0]/fNSegment[IR];
377       }                                        << 308       for(int phi = 0; phi < fNSegment[IPHI]; phi++) {
378                                                << 309         for(int r = 0; r < fNSegment[IR]; r++) {
379       G4double rsize = (fSize[1] - fSize[0]) / << 310           
380       for(G4int phi = 0; phi < fNSegment[IPHI] << 311           G4double rs[2] = {rsize*r, rsize*(r+1)};
381       {                                        << 312           G4double angle = twopi/fNSegment[IPHI]*phi;
382         for(G4int r = 0; r < fNSegment[IR]; r+ << 313           G4double dphi = twopi/fNSegment[IPHI];
383         {                                      << 314           G4Tubs cylindern("z-phi", rs[0], rs[1], 0.001,
384           G4double rs[2] = { fSize[0] + rsize  << 315                           angle, dphi*0.99999);
385           G4double angle = fAngle[0] + fAngle[ << 
386           G4double dphi  = fAngle[1] / fNSegme << 
387           G4Tubs cylindern("z-phi", rs[0], rs[ << 
388           G4Tubs cylinderp = cylindern;           316           G4Tubs cylinderp = cylindern;
389                                                << 317           
390           G4ThreeVector zposn(0., 0., -fSize[2 << 318           G4ThreeVector zposn(0., 0., -fSize[1]);
391           G4ThreeVector zposp(0., 0., fSize[2] << 319           G4ThreeVector zposp(0., 0.,  fSize[1]);
392           G4Transform3D transn, transp;           320           G4Transform3D transn, transp;
393           if(fRotationMatrix != nullptr)       << 321           if(fRotationMatrix) {
394           {                                    << 322             transn = G4Rotate3D(*fRotationMatrix).inverse()*G4Translate3D(zposn);
395             transn =                           << 323             transn = G4Translate3D(fCenterPosition)*transn;
396               G4Rotate3D(*fRotationMatrix).inv << 324             transp = G4Rotate3D(*fRotationMatrix).inverse()*G4Translate3D(zposp);
397             transn = G4Translate3D(fCenterPosi << 325             transp = G4Translate3D(fCenterPosition)*transp;
398             transp =                           << 326           } else {
399               G4Rotate3D(*fRotationMatrix).inv << 327             transn = G4Translate3D(zposn)*G4Translate3D(fCenterPosition);
400             transp = G4Translate3D(fCenterPosi << 328             transp = G4Translate3D(zposp)*G4Translate3D(fCenterPosition);
401           }                                    << 
402           else                                 << 
403           {                                    << 
404             transn = G4Translate3D(zposn) * G4 << 
405             transp = G4Translate3D(zposp) * G4 << 
406           }                                       329           }
407           G4double c[4];                          330           G4double c[4];
408           colorMap->GetMapColor(rphicell[r][ph    331           colorMap->GetMapColor(rphicell[r][phi], c);
409           att.SetColour(c[0], c[1], c[2]);  // << 332           att.SetColour(c[0], c[1], c[2]);//, c[3]);
410                                                   333 
411           G4Polyhedron* polyn = cylindern.GetP << 334           G4Polyhedron * polyn = cylindern.GetPolyhedron();
412           polyn->Transform(transn);               335           polyn->Transform(transn);
413           polyn->SetVisAttributes(att);           336           polyn->SetVisAttributes(att);
414           pVisManager->Draw(*polyn);              337           pVisManager->Draw(*polyn);
415                                                   338 
416           G4Polyhedron* polyp = cylinderp.GetP << 339           G4Polyhedron * polyp = cylinderp.GetPolyhedron();
417           polyp->Transform(transp);               340           polyp->Transform(transp);
418           polyp->SetVisAttributes(att);           341           polyp->SetVisAttributes(att);
419           pVisManager->Draw(*polyp);              342           pVisManager->Draw(*polyp);
420         }                                         343         }
421       }                                           344       }
422                                                << 345       
423       pVisManager->EndDraw();                     346       pVisManager->EndDraw();
424     }                                             347     }
425                                                << 348     
426     colorMap->SetPSUnit(fDrawUnit);               349     colorMap->SetPSUnit(fDrawUnit);
427     colorMap->SetPSName(fDrawPSName);             350     colorMap->SetPSName(fDrawPSName);
428     colorMap->DrawColorChart();                   351     colorMap->DrawColorChart();
                                                   >> 352     
429   }                                               353   }
430 }                                                 354 }
431                                                   355 
432 void G4ScoringCylinder::DrawColumn(RunScore* m << 356 void G4ScoringCylinder::DrawColumn(std::map<G4int, G4double*> * map, G4VScoreColorMap* colorMap, 
433                                    G4int idxPr << 357            G4int idxProj, G4int idxColumn) 
434 {                                                 358 {
435   G4int projAxis = 0;                             359   G4int projAxis = 0;
436   switch(idxProj)                              << 360   switch(idxProj) {
437   {                                            << 
438     case 0:                                       361     case 0:
439       projAxis = IR;                              362       projAxis = IR;
440       break;                                      363       break;
441     case 1:                                       364     case 1:
442       projAxis = IZ;                              365       projAxis = IZ;
443       break;                                      366       break;
444     case 2:                                       367     case 2:
445       projAxis = IPHI;                            368       projAxis = IPHI;
446       break;                                      369       break;
447   }                                               370   }
448                                                << 371   
449   if(idxColumn < 0 || idxColumn >= fNSegment[p << 372   if(idxColumn<0 || idxColumn>=fNSegment[projAxis])
450   {                                               373   {
451     G4cerr << "Warning : Column number " << id << 374     G4cerr << "Warning : Column number " << idxColumn << " is out of scoring mesh [0," << fNSegment[projAxis]-1 <<
452            << " is out of scoring mesh [0," << << 375     "]. Method ignored." << G4endl;
453            << "]. Method ignored." << G4endl;  << 
454     return;                                       376     return;
455   }                                               377   }
456   G4VVisManager* pVisManager = G4VVisManager:: << 378   G4VVisManager * pVisManager = G4VVisManager::GetConcreteInstance();
457   if(pVisManager != nullptr)                   << 379   if(pVisManager) {
458   {                                            << 380     
459     // cell vectors                               381     // cell vectors
460     std::vector<std::vector<std::vector<G4doub << 382     std::vector<std::vector<std::vector<double> > > cell; // cell[R][Z][PHI]
461     std::vector<G4double> ephi;                << 383     std::vector<double> ephi;
462     for(G4int phi = 0; phi < fNSegment[IPHI];  << 384     for(int phi = 0; phi < fNSegment[IPHI]; phi++) ephi.push_back(0.);
463       ephi.push_back(0.);                      << 385     std::vector<std::vector<double> > ezphi;
464     std::vector<std::vector<G4double>> ezphi;  << 386     for(int z = 0; z < fNSegment[IZ]; z++) ezphi.push_back(ephi);
465     for(G4int z = 0; z < fNSegment[IZ]; z++)   << 387     for(int r = 0; r < fNSegment[IR]; r++) cell.push_back(ezphi);
466       ezphi.push_back(ephi);                   << 388     
467     for(G4int r = 0; r < fNSegment[IR]; r++)   << 389     std::vector<std::vector<double> > rzcell; // rzcell[R][Z]
468       cell.push_back(ezphi);                   << 390     std::vector<double> ez;
469                                                << 391     for(int z = 0; z < fNSegment[IZ]; z++) ez.push_back(0.);
470     std::vector<std::vector<G4double>> rzcell; << 392     for(int r = 0; r < fNSegment[IR]; r++) rzcell.push_back(ez);
471     std::vector<G4double> ez;                  << 393     
472     for(G4int z = 0; z < fNSegment[IZ]; z++)   << 394     std::vector<std::vector<double> > zphicell; // zphicell[Z][PHI]
473       ez.push_back(0.);                        << 395     for(int z = 0; z < fNSegment[IZ]; z++) zphicell.push_back(ephi);
474     for(G4int r = 0; r < fNSegment[IR]; r++)   << 396     
475       rzcell.push_back(ez);                    << 397     std::vector<std::vector<double> > rphicell; // rphicell[R][PHI]
476                                                << 398     for(int r = 0; r < fNSegment[IR]; r++) rphicell.push_back(ephi);
477     std::vector<std::vector<G4double>> zphicel << 399     
478     for(G4int z = 0; z < fNSegment[IZ]; z++)   << 
479       zphicell.push_back(ephi);                << 
480                                                << 
481     std::vector<std::vector<G4double>> rphicel << 
482     for(G4int r = 0; r < fNSegment[IR]; r++)   << 
483       rphicell.push_back(ephi);                << 
484                                                << 
485     // projections                                400     // projections
486     G4int q[3];                                   401     G4int q[3];
487     auto itr = map->GetMap()->begin();         << 402     std::map<G4int, G4double*>::iterator itr = map->begin();
488     for(; itr != map->GetMap()->end(); itr++)  << 403     for(; itr != map->end(); itr++) {
489     {                                          << 404       if(itr->first < 0) {
490       if(itr->first < 0)                       << 
491       {                                        << 
492         G4cout << itr->first << G4endl;           405         G4cout << itr->first << G4endl;
493         continue;                                 406         continue;
494       }                                           407       }
495       GetRZPhi(itr->first, q);                    408       GetRZPhi(itr->first, q);
496                                                << 409       
497       if(projAxis == IR && q[IR] == idxColumn) << 410       if(projAxis == IR && q[IR] == idxColumn) { // zphi plane
498       {  // zphi plane                         << 411         zphicell[q[IZ]][q[IPHI]] += *(itr->second)/fDrawUnitValue;
499         zphicell[q[IZ]][q[IPHI]] += (itr->seco << 412       }
500       }                                        << 413       if(projAxis == IZ && q[IZ] == idxColumn) { // rphi plane
501       if(projAxis == IZ && q[IZ] == idxColumn) << 414         rphicell[q[IR]][q[IPHI]] += *(itr->second)/fDrawUnitValue;
502       {  // rphi plane                         << 415       }
503         rphicell[q[IR]][q[IPHI]] += (itr->seco << 416       if(projAxis == IPHI && q[IPHI] == idxColumn) { // rz plane
504       }                                        << 417         rzcell[q[IR]][q[IZ]] += *(itr->second)/fDrawUnitValue;
505       if(projAxis == IPHI && q[IPHI] == idxCol << 
506       {  // rz plane                           << 
507         rzcell[q[IR]][q[IZ]] += (itr->second-> << 
508       }                                           418       }
509     }                                             419     }
510                                                << 420     
511     // search min./max. values                    421     // search min./max. values
512     G4double rzmin = DBL_MAX, zphimin = DBL_MA    422     G4double rzmin = DBL_MAX, zphimin = DBL_MAX, rphimin = DBL_MAX;
513     G4double rzmax = 0., zphimax = 0., rphimax    423     G4double rzmax = 0., zphimax = 0., rphimax = 0.;
514     for(G4int r = 0; r < fNSegment[IR]; r++)   << 424     for(int r = 0; r < fNSegment[IR]; r++) {
515     {                                          << 425       for(int phi = 0; phi < fNSegment[IPHI]; phi++) {
516       for(G4int phi = 0; phi < fNSegment[IPHI] << 426         if(rphimin > rphicell[r][phi]) rphimin = rphicell[r][phi];
517       {                                        << 427         if(rphimax < rphicell[r][phi]) rphimax = rphicell[r][phi];
518         if(rphimin > rphicell[r][phi])         << 428       }
519           rphimin = rphicell[r][phi];          << 429       for(int z = 0; z < fNSegment[IZ]; z++) {
520         if(rphimax < rphicell[r][phi])         << 430         if(rzmin > rzcell[r][z]) rzmin = rzcell[r][z];
521           rphimax = rphicell[r][phi];          << 431         if(rzmax < rzcell[r][z]) rzmax = rzcell[r][z];
522       }                                        << 
523       for(G4int z = 0; z < fNSegment[IZ]; z++) << 
524       {                                        << 
525         if(rzmin > rzcell[r][z])               << 
526           rzmin = rzcell[r][z];                << 
527         if(rzmax < rzcell[r][z])               << 
528           rzmax = rzcell[r][z];                << 
529       }                                        << 
530     }                                          << 
531     for(G4int z = 0; z < fNSegment[IZ]; z++)   << 
532     {                                          << 
533       for(G4int phi = 0; phi < fNSegment[IPHI] << 
534       {                                        << 
535         if(zphimin > zphicell[z][phi])         << 
536           zphimin = zphicell[z][phi];          << 
537         if(zphimax < zphicell[z][phi])         << 
538           zphimax = zphicell[z][phi];          << 
539       }                                           432       }
540     }                                             433     }
541                                                << 434     for(int z = 0; z < fNSegment[IZ]; z++) {
                                                   >> 435       for(int phi = 0; phi < fNSegment[IPHI]; phi++) {
                                                   >> 436         if(zphimin > zphicell[z][phi]) zphimin = zphicell[z][phi];
                                                   >> 437         if(zphimax < zphicell[z][phi]) zphimax = zphicell[z][phi];
                                                   >> 438       }
                                                   >> 439     }
                                                   >> 440     
                                                   >> 441     
542     G4VisAttributes att;                          442     G4VisAttributes att;
543     att.SetForceSolid(true);                      443     att.SetForceSolid(true);
544     att.SetForceAuxEdgeVisible(true);             444     att.SetForceAuxEdgeVisible(true);
545                                                << 445     
546     pVisManager->BeginDraw();                     446     pVisManager->BeginDraw();
547                                                << 447     
548     G4Scale3D scale;                              448     G4Scale3D scale;
549     // z-phi plane                                449     // z-phi plane
550     if(projAxis == IR)                         << 450     if(projAxis == IR) {
551     {                                          << 451       
552       if(colorMap->IfFloatMinMax())            << 452       if(colorMap->IfFloatMinMax()) { colorMap->SetMinMax(zphimin,zphimax); }
553       {                                        << 453       
554         colorMap->SetMinMax(zphimin, zphimax); << 454       G4double zhalf = fSize[1]/fNSegment[IZ];
555       }                                        << 455       G4double rsize[2] = {fSize[0]/fNSegment[IR]*idxColumn,
556                                                << 456         fSize[0]/fNSegment[IR]*(idxColumn+1)};
557       G4double zhalf    = fSize[2] / fNSegment << 457       for(int phi = 0; phi < fNSegment[IPHI]; phi++) {
558       G4double rsize[2] = {                    << 458         for(int z = 0; z < fNSegment[IZ]; z++) {
559         fSize[0] + (fSize[1] - fSize[0]) / fNS << 459           
560         fSize[0] + (fSize[1] - fSize[0]) / fNS << 460           G4double angle = twopi/fNSegment[IPHI]*phi*radian;
561       };                                       << 461           G4double dphi = twopi/fNSegment[IPHI]*radian;
562       for(int phi = 0; phi < fNSegment[IPHI];  << 462           G4Tubs cylinder("z-phi", rsize[0], rsize[1], zhalf,
563       {                                        << 463                           angle, dphi*0.99999);
564         for(int z = 0; z < fNSegment[IZ]; z++) << 464           
565         {                                      << 465           G4ThreeVector zpos(0., 0., -fSize[1] + fSize[1]/fNSegment[IZ]*(1 + 2.*z));
566           G4double angle = fAngle[0] + fAngle[ << 
567           G4double dphi  = fAngle[1] / fNSegme << 
568           G4Tubs cylinder("z-phi", rsize[0], r << 
569                           dphi * 0.99999);     << 
570                                                << 
571           G4ThreeVector zpos(                  << 
572             0., 0., -fSize[2] + fSize[2] / fNS << 
573           G4Transform3D trans;                    466           G4Transform3D trans;
574           if(fRotationMatrix != nullptr)       << 467           if(fRotationMatrix) {
575           {                                    << 468             trans = G4Rotate3D(*fRotationMatrix).inverse()*G4Translate3D(zpos);
576             trans =                            << 469             trans = G4Translate3D(fCenterPosition)*trans;
577               G4Rotate3D(*fRotationMatrix).inv << 470           } else {
578             trans = G4Translate3D(fCenterPosit << 471             trans = G4Translate3D(zpos)*G4Translate3D(fCenterPosition);
579           }                                    << 
580           else                                 << 
581           {                                    << 
582             trans = G4Translate3D(zpos) * G4Tr << 
583           }                                       472           }
584           G4double c[4];                          473           G4double c[4];
585           colorMap->GetMapColor(zphicell[z][ph    474           colorMap->GetMapColor(zphicell[z][phi], c);
586           att.SetColour(c[0], c[1], c[2]);  // << 475           att.SetColour(c[0], c[1], c[2]);//, c[3]);
587                                                << 476           
588           G4Polyhedron* poly = cylinder.GetPol << 477           G4Polyhedron * poly = cylinder.GetPolyhedron();
589           poly->Transform(trans);                 478           poly->Transform(trans);
590           poly->SetVisAttributes(att);            479           poly->SetVisAttributes(att);
591           pVisManager->Draw(*poly);               480           pVisManager->Draw(*poly);
592         }                                         481         }
593       }                                           482       }
594                                                << 483       
595       // r-phi plane                              484       // r-phi plane
596     }                                          << 485     } else if(projAxis == IZ) {
597     else if(projAxis == IZ)                    << 486       if(colorMap->IfFloatMinMax()) { colorMap->SetMinMax(rphimin,rphimax); }
598     {                                          << 487       
599       if(colorMap->IfFloatMinMax())            << 488       G4double rsize = fSize[0]/fNSegment[IR];
600       {                                        << 489       for(int phi = 0; phi < fNSegment[IPHI]; phi++) {
601         colorMap->SetMinMax(rphimin, rphimax); << 490         for(int r = 0; r < fNSegment[IR]; r++) {
602       }                                        << 491           
603                                                << 492           G4double rs[2] = {rsize*r, rsize*(r+1)};
604       G4double rsize = (fSize[1] - fSize[0]) / << 493           G4double angle = twopi/fNSegment[IPHI]*phi*radian;
605       for(G4int phi = 0; phi < fNSegment[IPHI] << 494           G4double dz = fSize[1]/fNSegment[IZ];
606       {                                        << 495           G4double dphi = twopi/fNSegment[IPHI]*radian;
607         for(G4int r = 0; r < fNSegment[IR]; r+ << 496           G4Tubs cylinder("r-phi", rs[0], rs[1], dz,
608         {                                      << 497                           angle, dphi*0.99999);
609           G4double rs[2] = { fSize[0] + rsize  << 498           G4ThreeVector zpos(0., 0.,
610           G4double angle = fAngle[0] + fAngle[ << 499                              -fSize[1]+fSize[1]/fNSegment[IZ]*(idxColumn*2+1));
611           G4double dz    = fSize[2] / fNSegmen << 
612           G4double dphi  = fAngle[1] / fNSegme << 
613           G4Tubs cylinder("r-phi", rs[0], rs[1 << 
614           G4ThreeVector zpos(                  << 
615             0., 0., -fSize[2] + fSize[2] / fNS << 
616           G4Transform3D trans;                    500           G4Transform3D trans;
617           if(fRotationMatrix != nullptr)       << 501           if(fRotationMatrix) {
618           {                                    << 502             trans = G4Rotate3D(*fRotationMatrix).inverse()*G4Translate3D(zpos);
619             trans =                            << 503             trans = G4Translate3D(fCenterPosition)*trans;
620               G4Rotate3D(*fRotationMatrix).inv << 504           } else {
621             trans = G4Translate3D(fCenterPosit << 505             trans = G4Translate3D(zpos)*G4Translate3D(fCenterPosition);
622           }                                    << 
623           else                                 << 
624           {                                    << 
625             trans = G4Translate3D(zpos) * G4Tr << 
626           }                                       506           }
627           G4double c[4];                          507           G4double c[4];
628           colorMap->GetMapColor(rphicell[r][ph    508           colorMap->GetMapColor(rphicell[r][phi], c);
629           att.SetColour(c[0], c[1], c[2]);  // << 509           att.SetColour(c[0], c[1], c[2]);//, c[3]);
630                                                   510 
631           G4Polyhedron* poly = cylinder.GetPol << 511           G4Polyhedron * poly = cylinder.GetPolyhedron();
632           poly->Transform(trans);                 512           poly->Transform(trans);
633           poly->SetVisAttributes(att);            513           poly->SetVisAttributes(att);
634           pVisManager->Draw(*poly);               514           pVisManager->Draw(*poly);
635         }                                         515         }
636       }                                           516       }
637                                                << 517       
638       // r-z plane                                518       // r-z plane
639     }                                          << 519     } else if(projAxis == IPHI) {
640     else if(projAxis == IPHI)                  << 520       if(colorMap->IfFloatMinMax()) { colorMap->SetMinMax(rzmin,rzmax); }
641     {                                          << 521       
642       if(colorMap->IfFloatMinMax())            << 522       G4double rsize = fSize[0]/fNSegment[IR];
643       {                                        << 523       G4double zhalf = fSize[1]/fNSegment[IZ];
644         colorMap->SetMinMax(rzmin, rzmax);     << 524       G4double angle = twopi/fNSegment[IPHI]*idxColumn*radian;
645       }                                        << 525       G4double dphi = twopi/fNSegment[IPHI]*radian;
646                                                << 526       for(int z = 0; z < fNSegment[IZ]; z++) {
647       G4double rsize = (fSize[1] - fSize[0]) / << 527         for(int r = 0; r < fNSegment[IR]; r++) {
648       G4double zhalf = fSize[2] / fNSegment[IZ << 528           
649       G4double angle = fAngle[0] + fAngle[1] / << 529           G4double rs[2] = {rsize*r, rsize*(r+1)};
650       G4double dphi  = fAngle[1] / fNSegment[I << 530           G4Tubs cylinder("z-phi", rs[0], rs[1], zhalf,
651       for(G4int z = 0; z < fNSegment[IZ]; z++) << 531                           angle, dphi);
652       {                                        << 532           
653         for(G4int r = 0; r < fNSegment[IR]; r+ << 533           G4ThreeVector zpos(0., 0.,
654         {                                      << 534                              -fSize[1]+fSize[1]/fNSegment[IZ]*(2.*z+1));
655           G4double rs[2] = { fSize[0] + rsize  << 
656           G4Tubs cylinder("z-phi", rs[0], rs[1 << 
657                                                << 
658           G4ThreeVector zpos(                  << 
659             0., 0., -fSize[2] + fSize[2] / fNS << 
660           G4Transform3D trans;                    535           G4Transform3D trans;
661           if(fRotationMatrix != nullptr)       << 536           if(fRotationMatrix) {
662           {                                    << 537             trans = G4Rotate3D(*fRotationMatrix).inverse()*G4Translate3D(zpos);
663             trans =                            << 538             trans = G4Translate3D(fCenterPosition)*trans;
664               G4Rotate3D(*fRotationMatrix).inv << 539           } else {
665             trans = G4Translate3D(fCenterPosit << 540             trans = G4Translate3D(zpos)*G4Translate3D(fCenterPosition);
666           }                                    << 
667           else                                 << 
668           {                                    << 
669             trans = G4Translate3D(zpos) * G4Tr << 
670           }                                       541           }
671           G4double c[4];                          542           G4double c[4];
672           colorMap->GetMapColor(rzcell[r][z],     543           colorMap->GetMapColor(rzcell[r][z], c);
673           att.SetColour(c[0], c[1], c[2]);  // << 544           att.SetColour(c[0], c[1], c[2]);//, c[3]);
674                                                   545 
675           G4Polyhedron* poly = cylinder.GetPol << 546           G4Polyhedron * poly = cylinder.GetPolyhedron();
676           poly->Transform(trans);                 547           poly->Transform(trans);
677           poly->SetVisAttributes(att);            548           poly->SetVisAttributes(att);
678           pVisManager->Draw(*poly);               549           pVisManager->Draw(*poly);
679         }                                         550         }
680       }                                           551       }
681     }                                             552     }
682     pVisManager->EndDraw();                       553     pVisManager->EndDraw();
683   }                                               554   }
684                                                << 555   
685   colorMap->SetPSUnit(fDrawUnit);                 556   colorMap->SetPSUnit(fDrawUnit);
686   colorMap->SetPSName(fDrawPSName);               557   colorMap->SetPSName(fDrawPSName);
687   colorMap->DrawColorChart();                     558   colorMap->DrawColorChart();
                                                   >> 559   
688 }                                                 560 }
689                                                   561 
690 void G4ScoringCylinder::GetRZPhi(G4int index,  << 562 void G4ScoringCylinder::GetRZPhi(G4int index, G4int q[3]) const {
691 {                                              << 
692   // index = k + j * k-size + i * jk-plane-siz    563   // index = k + j * k-size + i * jk-plane-size
693                                                   564 
694   // nested : z -> phi -> r                       565   // nested : z -> phi -> r
695   G4int i  = IZ;                               << 566   G4int i = IZ;
696   G4int j  = IPHI;                             << 567   G4int j = IPHI;
697   G4int k  = IR;                               << 568   G4int k = IR;
698   G4int jk = fNSegment[j] * fNSegment[k];      << 569   G4int jk = fNSegment[j]*fNSegment[k];
699   q[i]     = index / jk;                       << 570   q[i] = index/jk;
700   q[j]     = (index - q[i] * jk) / fNSegment[k << 571   q[j] = (index - q[i]*jk)/fNSegment[k];
701   q[k]     = index - q[j] * fNSegment[k] - q[i << 572   q[k] = index - q[j]*fNSegment[k] - q[i]*jk;
702 }                                              << 
703                                                << 
704 void G4ScoringCylinder::DumpVolumes()          << 
705 {                                              << 
706   G4int lvl = 2;                               << 
707   DumpSolids(lvl);                             << 
708   DumpLogVols(lvl);                            << 
709   DumpPhysVols(lvl);                           << 
710 }                                              << 
711                                                << 
712 void G4ScoringCylinder::DumpSolids(G4int lvl)  << 
713 {                                              << 
714   G4cout << "*********** List of registered so << 
715   auto store = G4SolidStore::GetInstance();    << 
716   auto itr   = store->begin();                 << 
717   for(; itr != store->end(); itr++)            << 
718   {                                            << 
719     switch(lvl)                                << 
720     {                                          << 
721       case 0:                                  << 
722         G4cout << (*itr)->GetName() << G4endl; << 
723         break;                                 << 
724       case 1:                                  << 
725         G4cout << (*itr)->GetName() << "\t vol << 
726                << G4BestUnit((*itr)->GetCubicV << 
727                << "\t surface = "              << 
728                << G4BestUnit((*itr)->GetSurfac << 
729         break;                                 << 
730       default:                                 << 
731         (*itr)->DumpInfo();                    << 
732         break;                                 << 
733     }                                          << 
734   }                                            << 
735 }                                              << 
736                                                << 
737 void G4ScoringCylinder::DumpLogVols(G4int lvl) << 
738 {                                              << 
739   G4cout << "*********** List of registered lo << 
740          << G4endl;                            << 
741   auto store = G4LogicalVolumeStore::GetInstan << 
742   auto itr   = store->begin();                 << 
743   for(; itr != store->end(); itr++)            << 
744   {                                            << 
745     G4cout << (*itr)->GetName()                << 
746            << "\t Solid = " << (*itr)->GetSoli << 
747     if((*itr)->GetMaterial() != nullptr)       << 
748     {                                          << 
749       G4cout << "\t Material = " << (*itr)->Ge << 
750     }                                          << 
751     else                                       << 
752     {                                          << 
753       G4cout << "\t Material : not defined " < << 
754     }                                          << 
755     if(lvl < 1)                                << 
756       continue;                                << 
757     G4cout << "\t region = ";                  << 
758     if((*itr)->GetRegion() != nullptr)         << 
759     {                                          << 
760       G4cout << (*itr)->GetRegion()->GetName() << 
761     }                                          << 
762     else                                       << 
763     {                                          << 
764       G4cout << "not defined";                 << 
765     }                                          << 
766     G4cout << "\t sensitive detector = ";      << 
767     if((*itr)->GetSensitiveDetector() != nullp << 
768     {                                          << 
769       G4cout << (*itr)->GetSensitiveDetector() << 
770     }                                          << 
771     else                                       << 
772     {                                          << 
773       G4cout << "not defined";                 << 
774     }                                          << 
775     G4cout << G4endl;                          << 
776     G4cout << "\t daughters = " << (*itr)->Get << 
777     if((*itr)->GetNoDaughters() > 0)           << 
778     {                                          << 
779       switch((*itr)->CharacteriseDaughters())  << 
780       {                                        << 
781         case kNormal:                          << 
782           G4cout << " (placement)";            << 
783           break;                               << 
784         case kReplica:                         << 
785           G4cout << " (replica : " << (*itr)-> << 
786                  << ")";                       << 
787           break;                               << 
788         case kParameterised:                   << 
789           G4cout << " (parameterized : "       << 
790                  << (*itr)->GetDaughter(0)->Ge << 
791           break;                               << 
792         default:;                              << 
793       }                                        << 
794     }                                          << 
795     G4cout << G4endl;                          << 
796     if(lvl < 2)                                << 
797       continue;                                << 
798     if((*itr)->GetMaterial() != nullptr)       << 
799     {                                          << 
800       G4cout << "\t weight = " << G4BestUnit(( << 
801              << G4endl;                        << 
802     }                                          << 
803     else                                       << 
804     {                                          << 
805       G4cout << "\t weight : not available" << << 
806     }                                          << 
807   }                                            << 
808 }                                              << 
809                                                << 
810 void G4ScoringCylinder::DumpPhysVols(G4int lvl << 
811 {                                              << 
812   G4cout << "*********** List of registered ph << 
813          << G4endl;                            << 
814   auto store = G4PhysicalVolumeStore::GetInsta << 
815   auto itr   = store->begin();                 << 
816   for(; itr != store->end(); itr++)            << 
817   {                                            << 
818     switch(lvl)                                << 
819     {                                          << 
820       case 0:                                  << 
821         G4cout << (*itr)->GetName() << G4endl; << 
822         break;                                 << 
823       case 1:                                  << 
824         G4cout << (*itr)->GetName() << "\t log << 
825                << (*itr)->GetLogicalVolume()-> << 
826                << "\t mother logical = ";      << 
827         if((*itr)->GetMotherLogical() != nullp << 
828         {                                      << 
829           G4cout << (*itr)->GetMotherLogical() << 
830         }                                      << 
831         else                                   << 
832         {                                      << 
833           G4cout << "not defined";             << 
834         }                                      << 
835         G4cout << G4endl;                      << 
836         break;                                 << 
837       default:                                 << 
838         G4cout << (*itr)->GetName() << "\t log << 
839                << (*itr)->GetLogicalVolume()-> << 
840                << "\t mother logical = ";      << 
841         if((*itr)->GetMotherLogical() != nullp << 
842         {                                      << 
843           G4cout << (*itr)->GetMotherLogical() << 
844         }                                      << 
845         else                                   << 
846         {                                      << 
847           G4cout << "not defined";             << 
848         }                                      << 
849         G4cout << "\t type = ";                << 
850         switch((*itr)->VolumeType())           << 
851         {                                      << 
852           case kNormal:                        << 
853             G4cout << "placement";             << 
854             break;                             << 
855           case kReplica:                       << 
856             G4cout << "replica";               << 
857             break;                             << 
858           case kParameterised:                 << 
859             G4cout << "parameterized";         << 
860             break;                             << 
861           default:;                            << 
862         }                                      << 
863         G4cout << G4endl;                      << 
864     }                                          << 
865   }                                            << 
866 }                                                 573 }
867                                                   574