File indexing completed on 2026-03-31 07:50:04
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #ifndef SAXSDetectorConstruction_h
0030 # define SAXSDetectorConstruction_h 1
0031 #endif
0032
0033 #include "SAXSDetectorConstructionMessenger.hh"
0034
0035 #include "G4Box.hh"
0036 #include "G4Element.hh"
0037 #include "G4ElementTable.hh"
0038 #include "G4ExtendedMaterial.hh"
0039 #include "G4LogicalVolume.hh"
0040 #include "G4Material.hh"
0041 #include "G4MaterialTable.hh"
0042 #include "G4NistManager.hh"
0043 #include "G4RunManager.hh"
0044 #include "G4Tubs.hh"
0045 #include "G4VPhysicalVolume.hh"
0046 #include "G4VUserDetectorConstruction.hh"
0047 #include "globals.hh"
0048
0049
0050
0051
0052
0053 class SAXSDetectorConstruction : public G4VUserDetectorConstruction
0054 {
0055 public:
0056 SAXSDetectorConstruction();
0057 ~SAXSDetectorConstruction();
0058
0059 void DefineMaterials();
0060 void SetGeometricalVariables();
0061
0062 virtual G4VPhysicalVolume* Construct();
0063
0064 G4LogicalVolume* GetSensitiveVolume() const { return fSensitiveVolume; }
0065 G4LogicalVolume* GetPhantom() const { return fPhantomLogic; }
0066
0067 protected:
0068 G4LogicalVolume* fSensitiveVolume;
0069
0070 private:
0071 virtual void ConstructSDandField();
0072
0073 SAXSDetectorConstructionMessenger* fMessenger;
0074
0075 G4bool fIWantSlits;
0076
0077
0078
0079 G4Box* fWorldSolid;
0080 G4LogicalVolume* fWorldLogic;
0081 G4VPhysicalVolume* fWorldPhysical;
0082
0083
0084 G4LogicalVolume* fPhantomLogic;
0085 G4VPhysicalVolume* fPhantomPhysical;
0086 G4Material* fPhantomMaterial;
0087 G4int fPhantomMaterialIndex;
0088
0089
0090 G4LogicalVolume* fSlit1Logic;
0091 G4LogicalVolume* fSlit2Logic;
0092 G4LogicalVolume* fSlit3Logic;
0093 G4LogicalVolume* fSlit4Logic;
0094 G4VPhysicalVolume* fSlit1Physical;
0095 G4VPhysicalVolume* fSlit2Physical;
0096 G4VPhysicalVolume* fSlit3Physical;
0097 G4VPhysicalVolume* fSlit4Physical;
0098
0099
0100 G4LogicalVolume* fDetectorLogic;
0101 G4VPhysicalVolume* fDetectorPhysical;
0102
0103
0104 G4LogicalVolume* fShieldingLogic;
0105 G4VPhysicalVolume* fShieldingPhysical;
0106 G4LogicalVolume* fShieldingBackLogic;
0107 G4VPhysicalVolume* fShieldingBackPhysical;
0108
0109
0110
0111 G4Material* fFat;
0112 G4Material* fWater;
0113 G4Material* fBoneMatrix;
0114 G4Material* fMineral;
0115 G4Material* fMedMat;
0116 G4Material* fPMMA;
0117 G4Material* fAdipose;
0118 G4Material* fGlandular;
0119 G4Material* fBreast5050;
0120 G4Material* fcarcinoma;
0121 G4Material* fLexan;
0122 G4Material* fKapton;
0123 G4Material* fNylon;
0124 G4Material* fPolyethylene;
0125 G4Material* fPolystyrene;
0126 G4Material* fGrayMatter;
0127 G4Material* fWhiteMatter;
0128 G4Material* fbeefBlood;
0129 G4Material* fFormaline;
0130 G4Material* fAcetone;
0131 G4Material* fHperoxide;
0132 G4Material* fCIRS3070;
0133 G4Material* fCIRS5050;
0134 G4Material* fCIRS7030;
0135 G4Material* fRMI454;
0136 G4Material* fBone;
0137 G4Material* ffatLowX;
0138 G4Material* fbonematrixLowX;
0139 G4Material* fdryBoneLowX;
0140 G4Material* fliver;
0141 G4Material* fkidney;
0142
0143
0144 G4ExtendedMaterial* fCustomMat;
0145 G4double fCustomMatDensity;
0146 G4double fCustomMatHmassfract;
0147 G4double fCustomMatCmassfract;
0148 G4double fCustomMatNmassfract;
0149 G4double fCustomMatOmassfract;
0150 G4double fCustomMatNamassfract;
0151 G4double fCustomMatPmassfract;
0152 G4double fCustomMatSmassfract;
0153 G4double fCustomMatClmassfract;
0154 G4double fCustomMatKmassfract;
0155 G4double fCustomMatCamassfract;
0156 G4String fCustomMatFF;
0157
0158
0159 G4double fComp0, fComp1, fComp2, fComp3;
0160
0161
0162 G4Material* fAir;
0163 G4Material* fTungsten;
0164 G4Material* fLead;
0165 G4Material* fGe;
0166
0167
0168
0169 G4double fWorldSize;
0170
0171
0172 G4double fPhantomDiameter;
0173 G4double fPhantomHeight;
0174 G4double fPhantomZ;
0175
0176
0177 G4double fthetaSetup;
0178
0179
0180 G4double fSlitSize;
0181 G4double fSlit1Thickness;
0182 G4double fSlit2Thickness;
0183 G4double fSlit3Thickness;
0184 G4double fSlit4Thickness;
0185 G4double fSlit1SampleDistance;
0186 G4double fSlit2SampleDistance;
0187 G4double fSlit3SampleDistance;
0188 G4double fSlit4SampleDistance;
0189 G4double fSlit1xAperture;
0190 G4double fSlit2xAperture;
0191 G4double fSlit3xAperture;
0192 G4double fSlit4xAperture;
0193 G4double fSlit1yAperture;
0194 G4double fSlit2yAperture;
0195 G4double fSlit3yAperture;
0196 G4double fSlit4yAperture;
0197
0198
0199 G4double fDetectorThickness;
0200 G4double fDetectorSize;
0201 G4double fDetectorSampleDistance;
0202
0203
0204 G4double fShieldingThickness;
0205
0206
0207 public:
0208 void SetCustomMatFF(const G4String& ffname) { fCustomMatFF = ffname; }
0209
0210 void SetCustomMatDensity(G4double csd) { fCustomMatDensity = csd; }
0211 void SetCustomMatHmassfract(G4double csHmf) { fCustomMatHmassfract = csHmf; }
0212 void SetCustomMatCmassfract(G4double csCmf) { fCustomMatCmassfract = csCmf; }
0213 void SetCustomMatNmassfract(G4double csNmf) { fCustomMatNmassfract = csNmf; }
0214 void SetCustomMatOmassfract(G4double csOmf) { fCustomMatOmassfract = csOmf; }
0215 void SetCustomMatNamassfract(G4double csNamf) { fCustomMatNamassfract = csNamf; }
0216 void SetCustomMatPmassfract(G4double csPmf) { fCustomMatPmassfract = csPmf; }
0217 void SetCustomMatSmassfract(G4double csSmf) { fCustomMatSmassfract = csSmf; }
0218 void SetCustomMatClmassfract(G4double csClmf) { fCustomMatClmassfract = csClmf; }
0219 void SetCustomMatKmassfract(G4double csKmf) { fCustomMatKmassfract = csKmf; }
0220 void SetCustomMatCamassfract(G4double csCamf) { fCustomMatCamassfract = csCamf; }
0221
0222 void SetPhantomMaterial(G4int mat) { fPhantomMaterialIndex = mat; }
0223
0224 void SetPhantomDiameter(G4double diam) { fPhantomDiameter = diam; }
0225 void SetPhantomHeight(G4double ht) { fPhantomHeight = ht; }
0226 void SetPhantomZ(G4double PhZ) { fPhantomZ = PhZ; }
0227
0228 void SetComp0(G4double c0) { fComp0 = c0; }
0229 void SetComp1(G4double c1) { fComp1 = c1; }
0230 void SetComp2(G4double c2) { fComp2 = c2; }
0231 void SetComp3(G4double c3) { fComp3 = c3; }
0232
0233 void SetThetaSetup(G4double theta) { fthetaSetup = theta; }
0234
0235 void SetSlits(G4bool bslits) { fIWantSlits = bslits; }
0236 void SetSlit1Thickness(G4double sl1th) { fSlit1Thickness = sl1th; }
0237 void SetSlit2Thickness(G4double sl2th) { fSlit2Thickness = sl2th; }
0238 void SetSlit3Thickness(G4double sl3th) { fSlit3Thickness = sl3th; }
0239 void SetSlit4Thickness(G4double sl4th) { fSlit4Thickness = sl4th; }
0240 void SetSlit1SampleDistance(G4double slSampleDist1) { fSlit1SampleDistance = slSampleDist1; }
0241 void SetSlit2SampleDistance(G4double slSampleDist2) { fSlit2SampleDistance = slSampleDist2; }
0242 void SetSlit3SampleDistance(G4double slSampleDist3) { fSlit3SampleDistance = slSampleDist3; }
0243 void SetSlit4SampleDistance(G4double slSampleDist4) { fSlit4SampleDistance = slSampleDist4; }
0244 void SetSlit1xAperture(G4double aperture1x) { fSlit1xAperture = aperture1x; }
0245 void SetSlit2xAperture(G4double aperture2x) { fSlit2xAperture = aperture2x; }
0246 void SetSlit3xAperture(G4double aperture3x) { fSlit3xAperture = aperture3x; }
0247 void SetSlit4xAperture(G4double aperture4x) { fSlit4xAperture = aperture4x; }
0248 void SetSlit1yAperture(G4double aperture1y) { fSlit1yAperture = aperture1y; }
0249 void SetSlit2yAperture(G4double aperture2y) { fSlit2yAperture = aperture2y; }
0250 void SetSlit3yAperture(G4double aperture3y) { fSlit3yAperture = aperture3y; }
0251 void SetSlit4yAperture(G4double aperture4y) { fSlit4yAperture = aperture4y; }
0252
0253 void SetDetectorSize(G4double detSize) { fDetectorSize = detSize; }
0254 void SetDetectorThickness(G4double detTh) { fDetectorThickness = detTh; }
0255 void SetDetectorSampleDistance(G4double detDist) { fDetectorSampleDistance = detDist; }
0256 };
0257