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)
 
G4LogicalVolumeGetLogPhotoCath ()
 
G4LogicalVolumeGetLogScint ()
 
std::vector< G4ThreeVectorGetPmtPositions ()
 
- 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
 
G4VPVParameterisationGetParameterisation () 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
 
G4RotationMatrixGetObjectRotation () const
 
G4RotationMatrix GetObjectRotationValue () const
 
G4ThreeVector GetObjectTranslation () const
 
const G4RotationMatrixGetFrameRotation () const
 
G4ThreeVector GetFrameTranslation () const
 
const G4ThreeVectorGetTranslation () const
 
const G4RotationMatrixGetRotation () const
 
void SetTranslation (const G4ThreeVector &v)
 
G4RotationMatrixGetRotation ()
 
void SetRotation (G4RotationMatrix *)
 
G4LogicalVolumeGetLogicalVolume () const
 
void SetLogicalVolume (G4LogicalVolume *pLogical)
 
G4LogicalVolumeGetMotherLogical () const
 
void SetMotherLogical (G4LogicalVolume *pMother)
 
const G4StringGetName () 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

LXeDetectorConstructionfConstructor
 
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
 
G4BoxfScint_box
 
G4BoxfHousing_box
 
G4TubsfPmt
 
G4TubsfPhotocath
 
G4SpherefSphere
 
G4LogicalVolumefScint_log
 
G4LogicalVolumefHousing_log
 
G4LogicalVolumefPmt_log
 
G4LogicalVolumefPhotocath_log
 
G4LogicalVolumefSphere_log
 
std::vector< G4ThreeVectorfPmtPositions
 

Additional Inherited Members

- Static Public Member Functions inherited from G4VPhysicalVolume
static const G4PVManagerGetSubInstanceManager ()
 
- 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: