Geant4  10.02.p03
LXeMainVolume Class Reference

#include <LXeMainVolume.hh>

Inheritance diagram for LXeMainVolume:
Collaboration diagram for LXeMainVolume:

Public Member Functions

 LXeMainVolume (G4RotationMatrix *pRot, const G4ThreeVector &tlate, G4LogicalVolume *pMotherLogical, G4bool pMany, G4int pCopyNo, LXeDetectorConstruction *c)
 
G4LogicalVolume * GetLogPhotoCath ()
 
G4LogicalVolume * GetLogScint ()
 
std::vector< G4ThreeVector > GetPmtPositions ()
 
- Public Member Functions inherited from G4PVPlacement
 G4PVPlacement (G4RotationMatrix *pRot, const G4ThreeVector &tlate, G4LogicalVolume *pCurrentLogical, const G4String &pName, G4LogicalVolume *pMotherLogical, G4bool pMany, G4int pCopyNo, G4bool pSurfChk=false)
 
 G4PVPlacement (const G4Transform3D &Transform3D, G4LogicalVolume *pCurrentLogical, const G4String &pName, G4LogicalVolume *pMotherLogical, G4bool pMany, G4int pCopyNo, G4bool pSurfChk=false)
 
 G4PVPlacement (G4RotationMatrix *pRot, const G4ThreeVector &tlate, const G4String &pName, G4LogicalVolume *pLogical, G4VPhysicalVolume *pMother, G4bool pMany, G4int pCopyNo, G4bool pSurfChk=false)
 
 G4PVPlacement (const G4Transform3D &Transform3D, const G4String &pName, G4LogicalVolume *pLogical, G4VPhysicalVolume *pMother, G4bool pMany, G4int pCopyNo, G4bool pSurfChk=false)
 
virtual ~G4PVPlacement ()
 
G4int GetCopyNo () const
 
void SetCopyNo (G4int CopyNo)
 
G4bool CheckOverlaps (G4int res=1000, G4double tol=0., G4bool verbose=true, G4int maxErr=1)
 
 G4PVPlacement (__void__ &)
 
G4bool IsMany () const
 
G4bool IsReplicated () const
 
G4bool IsParameterised () const
 
G4VPVParameterisation * GetParameterisation () const
 
void GetReplicationData (EAxis &axis, G4int &nReplicas, G4double &width, G4double &offset, G4bool &consuming) const
 
G4bool IsRegularStructure () const
 
G4int GetRegularStructureId () const
 
- Public Member Functions inherited from G4VPhysicalVolume
 G4VPhysicalVolume (G4RotationMatrix *pRot, const G4ThreeVector &tlate, const G4String &pName, G4LogicalVolume *pLogical, G4VPhysicalVolume *pMother)
 
virtual ~G4VPhysicalVolume ()
 
G4bool operator== (const G4VPhysicalVolume &p) const
 
G4RotationMatrix * GetObjectRotation () const
 
G4RotationMatrix GetObjectRotationValue () const
 
G4ThreeVector GetObjectTranslation () const
 
const G4RotationMatrix * GetFrameRotation () const
 
G4ThreeVector GetFrameTranslation () const
 
const G4ThreeVector & GetTranslation () const
 
const G4RotationMatrix * GetRotation () const
 
void SetTranslation (const G4ThreeVector &v)
 
G4RotationMatrix * GetRotation ()
 
void SetRotation (G4RotationMatrix *)
 
G4LogicalVolume * GetLogicalVolume () const
 
void SetLogicalVolume (G4LogicalVolume *pLogical)
 
G4LogicalVolume * GetMotherLogical () const
 
void SetMotherLogical (G4LogicalVolume *pMother)
 
const G4String & GetName () const
 
void SetName (const G4String &pName)
 
EVolume VolumeType () const
 
virtual G4int GetMultiplicity () const
 
 G4VPhysicalVolume (__void__ &)
 
G4int GetInstanceID () const
 

Private Member Functions

void VisAttributes ()
 
void SurfaceProperties ()
 
void PlacePMTs (G4LogicalVolume *pmt_Log, G4RotationMatrix *rot, G4double &a, G4double &b, G4double da, G4double db, G4double amin, G4double bmin, G4int na, G4int nb, G4double &x, G4double &y, G4double &z, G4int &k)
 
void CopyValues ()
 

Private Attributes

LXeDetectorConstruction * fConstructor
 
G4double fScint_x
 
G4double fScint_y
 
G4double fScint_z
 
G4double fD_mtl
 
G4int fNx
 
G4int fNy
 
G4int fNz
 
G4double fOuterRadius_pmt
 
G4bool fSphereOn
 
G4double fRefl
 
G4Box * fScint_box
 
G4Box * fHousing_box
 
G4Tubs * fPmt
 
G4Tubs * fPhotocath
 
G4Sphere * fSphere
 
G4LogicalVolume * fScint_log
 
G4LogicalVolume * fHousing_log
 
G4LogicalVolume * fPmt_log
 
G4LogicalVolume * fPhotocath_log
 
G4LogicalVolume * fSphere_log
 
std::vector< G4ThreeVector > fPmtPositions
 

Additional Inherited Members

- Static Public Member Functions inherited from G4VPhysicalVolume
static const G4PVManager & GetSubInstanceManager ()
 
- Protected Member Functions inherited from G4VPhysicalVolume
void InitialiseWorker (G4VPhysicalVolume *pMasterObject, G4RotationMatrix *pRot, const G4ThreeVector &tlate)
 
void TerminateWorker (G4VPhysicalVolume *pMasterObject)
 
- Protected Attributes inherited from G4VPhysicalVolume
G4int instanceID
 
- Static Protected Attributes inherited from G4VPhysicalVolume
static G4GEOM_DLL G4PVManager subInstanceManager
 

Detailed Description

Definition at line 44 of file LXeMainVolume.hh.

Constructor & Destructor Documentation

◆ LXeMainVolume()

LXeMainVolume::LXeMainVolume ( G4RotationMatrix *  pRot,
const G4ThreeVector &  tlate,
G4LogicalVolume *  pMotherLogical,
G4bool  pMany,
G4int  pCopyNo,
LXeDetectorConstruction *  c 
)

Definition at line 43 of file LXeMainVolume.cc.

50  :G4PVPlacement(pRot,tlate,
51  //Temp logical volume must be created here
52  new G4LogicalVolume(new G4Box("temp",1,1,1),
53  G4Material::GetMaterial("Vacuum"),
54  "temp",0,0,0),
55  "housing",pMotherLogical,pMany,pCopyNo),fConstructor(c)
56 {
57  CopyValues();
58 
59  G4double housing_x=fScint_x+2.*fD_mtl;
60  G4double housing_y=fScint_y+2.*fD_mtl;
61  G4double housing_z=fScint_z+2.*fD_mtl;
62 
63  //*************************** housing and scintillator
64  fScint_box = new G4Box("scint_box",fScint_x/2.,fScint_y/2.,fScint_z/2.);
65  fHousing_box = new G4Box("housing_box",housing_x/2.,housing_y/2.,
66  housing_z/2.);
67 
69  "scint_log",0,0,0);
72  "housing_log",0,0,0);
73 
74  new G4PVPlacement(0,G4ThreeVector(),fScint_log,"scintillator",
75  fHousing_log,false,0);
76 
77  //*************** Miscellaneous sphere to demonstrate skin surfaces
78  fSphere = new G4Sphere("sphere",0.*mm,2.*cm,0.*deg,360.*deg,0.*deg,360.*deg);
80  "sphere_log");
81  if(fSphereOn)
82  new G4PVPlacement(0,G4ThreeVector(5.*cm,5.*cm,5.*cm),
83  fSphere_log,"sphere",fScint_log,false,0);
84 
85  //****************** Build PMTs
86  G4double innerRadius_pmt = 0.*cm;
87  G4double height_pmt = fD_mtl/2.;
88  G4double startAngle_pmt = 0.*deg;
89  G4double spanningAngle_pmt = 360.*deg;
90 
91  fPmt = new G4Tubs("pmt_tube",innerRadius_pmt,fOuterRadius_pmt,
92  height_pmt,startAngle_pmt,spanningAngle_pmt);
93 
94  //the "photocathode" is a metal slab at the back of the glass that
95  //is only a very rough approximation of the real thing since it only
96  //absorbs or detects the photons based on the efficiency set below
97  fPhotocath = new G4Tubs("photocath_tube",innerRadius_pmt,fOuterRadius_pmt,
98  height_pmt/2,startAngle_pmt,spanningAngle_pmt);
99 
101  "pmt_log");
104  "photocath_log");
105 
106  new G4PVPlacement(0,G4ThreeVector(0,0,-height_pmt/2),
107  fPhotocath_log,"photocath",
108  fPmt_log,false,0);
109 
110  //***********Arrange pmts around the outside of housing**********
111 
112  G4double dx = fScint_x/fNx;
113  G4double dy = fScint_y/fNy;
114  G4double dz = fScint_z/fNz;
115 
116  G4double x,y,z;
117  G4double xmin = -fScint_x/2. - dx/2.;
118  G4double ymin = -fScint_y/2. - dy/2.;
119  G4double zmin = -fScint_z/2. - dz/2.;
120  G4int k=0;
121 
122  z = -fScint_z/2. - height_pmt; //front
123  PlacePMTs(fPmt_log,0,x,y,dx,dy,xmin,ymin,fNx,fNy,x,y,z,k);
124 
125  G4RotationMatrix* rm_z = new G4RotationMatrix();
126  rm_z->rotateY(180*deg);
127  z = fScint_z/2. + height_pmt; //back
128  PlacePMTs(fPmt_log,rm_z,x,y,dx,dy,xmin,ymin,fNx,fNy,x,y,z,k);
129 
130  G4RotationMatrix* rm_y1 = new G4RotationMatrix();
131  rm_y1->rotateY(-90*deg);
132  x = -fScint_x/2. - height_pmt; //left
133  PlacePMTs(fPmt_log,rm_y1,y,z,dy,dz,ymin,zmin,fNy,fNz,x,y,z,k);
134 
135  G4RotationMatrix* rm_y2 = new G4RotationMatrix();
136  rm_y2->rotateY(90*deg);
137  x = fScint_x/2. + height_pmt; //right
138  PlacePMTs(fPmt_log,rm_y2,y,z,dy,dz,ymin,zmin,fNy,fNz,x,y,z,k);
139 
140  G4RotationMatrix* rm_x1 = new G4RotationMatrix();
141  rm_x1->rotateX(90*deg);
142  y = -fScint_y/2. - height_pmt; //bottom
143  PlacePMTs(fPmt_log,rm_x1,x,z,dx,dz,xmin,zmin,fNx,fNz,x,y,z,k);
144 
145  G4RotationMatrix* rm_x2 = new G4RotationMatrix();
146  rm_x2->rotateX(-90*deg);
147  y = fScint_y/2. + height_pmt; //top
148  PlacePMTs(fPmt_log,rm_x2,x,z,dx,dz,xmin,zmin,fNx,fNz,x,y,z,k);
149 
150  VisAttributes();
152 
154 }
static const double cm
Definition: G4SIunits.hh:118
G4double fScint_y
G4Tubs * fPhotocath
G4Box * fScint_box
CLHEP::Hep3Vector G4ThreeVector
HepRotation & rotateX(double delta)
Definition: Rotation.cc:66
CLHEP::HepRotation G4RotationMatrix
G4LogicalVolume * fPmt_log
G4double fScint_z
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
Definition: G4Material.cc:604
G4LogicalVolume * fScint_log
Definition: G4Box.hh:64
Definition: G4Tubs.hh:85
HepRotation & rotateY(double delta)
Definition: Rotation.cc:79
void VisAttributes()
int G4int
Definition: G4Types.hh:78
G4double fD_mtl
G4double fOuterRadius_pmt
Double_t y
void SurfaceProperties()
G4Box * fHousing_box
static const double deg
Definition: G4SIunits.hh:151
G4PVPlacement(G4RotationMatrix *pRot, const G4ThreeVector &tlate, G4LogicalVolume *pCurrentLogical, const G4String &pName, G4LogicalVolume *pMotherLogical, G4bool pMany, G4int pCopyNo, G4bool pSurfChk=false)
G4double fScint_x
G4LogicalVolume * fHousing_log
G4Sphere * fSphere
G4LogicalVolume * fSphere_log
double G4double
Definition: G4Types.hh:76
void PlacePMTs(G4LogicalVolume *pmt_Log, G4RotationMatrix *rot, G4double &a, G4double &b, G4double da, G4double db, G4double amin, G4double bmin, G4int na, G4int nb, G4double &x, G4double &y, G4double &z, G4int &k)
static const double mm
Definition: G4SIunits.hh:114
G4LogicalVolume * fPhotocath_log
LXeDetectorConstruction * fConstructor
void SetLogicalVolume(G4LogicalVolume *pLogical)
Here is the call graph for this function:

Member Function Documentation

◆ CopyValues()

void LXeMainVolume::CopyValues ( )
private

Definition at line 158 of file LXeMainVolume.cc.

158  {
169 }
G4double fScint_y
G4double fScint_z
G4double fD_mtl
G4double fOuterRadius_pmt
G4double fScint_x
G4double fRefl
LXeDetectorConstruction * fConstructor
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLogPhotoCath()

G4LogicalVolume* LXeMainVolume::GetLogPhotoCath ( )
inline

Definition at line 55 of file LXeMainVolume.hh.

55 {return fPhotocath_log;}
G4LogicalVolume * fPhotocath_log
Here is the caller graph for this function:

◆ GetLogScint()

G4LogicalVolume* LXeMainVolume::GetLogScint ( )
inline

Definition at line 56 of file LXeMainVolume.hh.

56 {return fScint_log;}
G4LogicalVolume * fScint_log
Here is the caller graph for this function:

◆ GetPmtPositions()

std::vector<G4ThreeVector> LXeMainVolume::GetPmtPositions ( )
inline

Definition at line 58 of file LXeMainVolume.hh.

58 {return fPmtPositions;}
std::vector< G4ThreeVector > fPmtPositions
Here is the call graph for this function:
Here is the caller graph for this function:

◆ PlacePMTs()

void LXeMainVolume::PlacePMTs ( G4LogicalVolume *  pmt_Log,
G4RotationMatrix *  rot,
G4double &  a,
G4double &  b,
G4double  da,
G4double  db,
G4double  amin,
G4double  bmin,
G4int  na,
G4int  nb,
G4double &  x,
G4double &  y,
G4double &  z,
G4int &  k 
)
private

Definition at line 173 of file LXeMainVolume.cc.

179  {
180 /*PlacePMTs : a different way to parameterize placement that does not depend on
181  calculating the position from the copy number
182 
183  pmt_log = logical volume for pmts to be placed
184  rot = rotation matrix to apply
185  a,b = coordinates to vary(ie. if varying in the xy plane then pass x,y)
186  da,db = value to increment a,b by
187  amin,bmin = start values for a,b
188  na,nb = number of repitions in a and b
189  x,y,z = just pass x,y, and z by reference (the same ones passed for a,b)
190  k = copy number to start with
191  sd = sensitive detector for pmts
192 */
193  a=amin;
194  for(G4int j=1;j<=na;j++){
195  a+=da;
196  b=bmin;
197  for(G4int i=1;i<=nb;i++){
198  b+=db;
199  new G4PVPlacement(rot,G4ThreeVector(x,y,z),pmt_log,"pmt",
200  fHousing_log,false,k);
201  fPmtPositions.push_back(G4ThreeVector(x,y,z));
202  k++;
203  }
204  }
205 }
CLHEP::Hep3Vector G4ThreeVector
int G4int
Definition: G4Types.hh:78
Double_t y
G4PVPlacement(G4RotationMatrix *pRot, const G4ThreeVector &tlate, G4LogicalVolume *pCurrentLogical, const G4String &pName, G4LogicalVolume *pMotherLogical, G4bool pMany, G4int pCopyNo, G4bool pSurfChk=false)
G4LogicalVolume * fHousing_log
std::vector< G4ThreeVector > fPmtPositions
Here is the call graph for this function:
Here is the caller graph for this function:

◆ SurfaceProperties()

void LXeMainVolume::SurfaceProperties ( )
private

Definition at line 220 of file LXeMainVolume.cc.

220  {
221  G4double ephoton[] = {7.0*eV, 7.14*eV};
222  const G4int num = sizeof(ephoton)/sizeof(G4double);
223 
224  //**Scintillator housing properties
225  G4double reflectivity[] = {fRefl, fRefl};
226  assert(sizeof(reflectivity) == sizeof(ephoton));
227  G4double efficiency[] = {0.0, 0.0};
228  assert(sizeof(efficiency) == sizeof(ephoton));
230  scintHsngPT->AddProperty("REFLECTIVITY", ephoton, reflectivity, num);
231  scintHsngPT->AddProperty("EFFICIENCY", ephoton, efficiency, num);
232  G4OpticalSurface* OpScintHousingSurface =
233  new G4OpticalSurface("HousingSurface",unified,polished,dielectric_metal);
234  OpScintHousingSurface->SetMaterialPropertiesTable(scintHsngPT);
235 
236  //**Sphere surface properties
237  G4double sphereReflectivity[] = {1.0, 1.0};
238  assert(sizeof(sphereReflectivity) == sizeof(ephoton));
239  G4double sphereEfficiency[] = {0.0, 0.0};
240  assert(sizeof(sphereEfficiency) == sizeof(ephoton));
242  spherePT->AddProperty("REFLECTIVITY", ephoton, sphereReflectivity, num);
243  spherePT->AddProperty("EFFICIENCY", ephoton, sphereEfficiency, num);
244  G4OpticalSurface* OpSphereSurface =
245  new G4OpticalSurface("SphereSurface",unified,polished,dielectric_metal);
246  OpSphereSurface->SetMaterialPropertiesTable(spherePT);
247 
248  //**Photocathode surface properties
249  G4double photocath_EFF[]={1.,1.}; //Enables 'detection' of photons
250  assert(sizeof(photocath_EFF) == sizeof(ephoton));
251  G4double photocath_ReR[]={1.92,1.92};
252  assert(sizeof(photocath_ReR) == sizeof(ephoton));
253  G4double photocath_ImR[]={1.69,1.69};
254  assert(sizeof(photocath_ImR) == sizeof(ephoton));
256  photocath_mt->AddProperty("EFFICIENCY",ephoton,photocath_EFF,num);
257  photocath_mt->AddProperty("REALRINDEX",ephoton,photocath_ReR,num);
258  photocath_mt->AddProperty("IMAGINARYRINDEX",ephoton,photocath_ImR,num);
259  G4OpticalSurface* photocath_opsurf=
260  new G4OpticalSurface("photocath_opsurf",glisur,polished,
262  photocath_opsurf->SetMaterialPropertiesTable(photocath_mt);
263 
264  //**Create logical skin surfaces
265  new G4LogicalSkinSurface("photocath_surf",fHousing_log,
266  OpScintHousingSurface);
267  new G4LogicalSkinSurface("sphere_surface",fSphere_log,OpSphereSurface);
268  new G4LogicalSkinSurface("photocath_surf",fPhotocath_log,photocath_opsurf);
269 }
int G4int
Definition: G4Types.hh:78
G4MaterialPropertyVector * AddProperty(const char *key, G4double *PhotonEnergies, G4double *PropertyValues, G4int NumEntries)
G4LogicalVolume * fHousing_log
static const double eV
Definition: G4SIunits.hh:212
G4LogicalVolume * fSphere_log
G4double fRefl
double G4double
Definition: G4Types.hh:76
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
G4LogicalVolume * fPhotocath_log
Here is the call graph for this function:
Here is the caller graph for this function:

◆ VisAttributes()

void LXeMainVolume::VisAttributes ( )
private

Definition at line 209 of file LXeMainVolume.cc.

209  {
210  G4VisAttributes* housing_va = new G4VisAttributes(G4Colour(0.8,0.8,0.8));
211  fHousing_log->SetVisAttributes(housing_va);
212 
213  G4VisAttributes* sphere_va = new G4VisAttributes();
214  sphere_va->SetForceSolid(true);
215  fSphere_log->SetVisAttributes(sphere_va);
216 }
void SetForceSolid(G4bool)
G4LogicalVolume * fHousing_log
G4LogicalVolume * fSphere_log
void SetVisAttributes(const G4VisAttributes *pVA)
Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ fConstructor

LXeDetectorConstruction* LXeMainVolume::fConstructor
private

Definition at line 74 of file LXeMainVolume.hh.

◆ fD_mtl

G4double LXeMainVolume::fD_mtl
private

Definition at line 79 of file LXeMainVolume.hh.

◆ fHousing_box

G4Box* LXeMainVolume::fHousing_box
private

Definition at line 90 of file LXeMainVolume.hh.

◆ fHousing_log

G4LogicalVolume* LXeMainVolume::fHousing_log
private

Definition at line 98 of file LXeMainVolume.hh.

◆ fNx

G4int LXeMainVolume::fNx
private

Definition at line 80 of file LXeMainVolume.hh.

◆ fNy

G4int LXeMainVolume::fNy
private

Definition at line 81 of file LXeMainVolume.hh.

◆ fNz

G4int LXeMainVolume::fNz
private

Definition at line 82 of file LXeMainVolume.hh.

◆ fOuterRadius_pmt

G4double LXeMainVolume::fOuterRadius_pmt
private

Definition at line 83 of file LXeMainVolume.hh.

◆ fPhotocath

G4Tubs* LXeMainVolume::fPhotocath
private

Definition at line 92 of file LXeMainVolume.hh.

◆ fPhotocath_log

G4LogicalVolume* LXeMainVolume::fPhotocath_log
private

Definition at line 100 of file LXeMainVolume.hh.

◆ fPmt

G4Tubs* LXeMainVolume::fPmt
private

Definition at line 91 of file LXeMainVolume.hh.

◆ fPmt_log

G4LogicalVolume* LXeMainVolume::fPmt_log
private

Definition at line 99 of file LXeMainVolume.hh.

◆ fPmtPositions

std::vector<G4ThreeVector> LXeMainVolume::fPmtPositions
private

Definition at line 104 of file LXeMainVolume.hh.

◆ fRefl

G4double LXeMainVolume::fRefl
private

Definition at line 85 of file LXeMainVolume.hh.

◆ fScint_box

G4Box* LXeMainVolume::fScint_box
private

Definition at line 89 of file LXeMainVolume.hh.

◆ fScint_log

G4LogicalVolume* LXeMainVolume::fScint_log
private

Definition at line 97 of file LXeMainVolume.hh.

◆ fScint_x

G4double LXeMainVolume::fScint_x
private

Definition at line 76 of file LXeMainVolume.hh.

◆ fScint_y

G4double LXeMainVolume::fScint_y
private

Definition at line 77 of file LXeMainVolume.hh.

◆ fScint_z

G4double LXeMainVolume::fScint_z
private

Definition at line 78 of file LXeMainVolume.hh.

◆ fSphere

G4Sphere* LXeMainVolume::fSphere
private

Definition at line 93 of file LXeMainVolume.hh.

◆ fSphere_log

G4LogicalVolume* LXeMainVolume::fSphere_log
private

Definition at line 101 of file LXeMainVolume.hh.

◆ fSphereOn

G4bool LXeMainVolume::fSphereOn
private

Definition at line 84 of file LXeMainVolume.hh.


The documentation for this class was generated from the following files: