Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-03-31 07:50:04

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 /// \file SAXSDetectorConstruction.hh
0027 /// \brief Definition of the SAXSDetectorConstruction class
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 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0050 
0051 /// Detector construction.
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     //-----------------definition of Volumes-------------------
0078     // World
0079     G4Box* fWorldSolid;
0080     G4LogicalVolume* fWorldLogic;
0081     G4VPhysicalVolume* fWorldPhysical;
0082 
0083     // Phantom
0084     G4LogicalVolume* fPhantomLogic;
0085     G4VPhysicalVolume* fPhantomPhysical;
0086     G4Material* fPhantomMaterial;
0087     G4int fPhantomMaterialIndex;
0088 
0089     // Slits
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     // Detector
0100     G4LogicalVolume* fDetectorLogic;
0101     G4VPhysicalVolume* fDetectorPhysical;
0102 
0103     // Shielding
0104     G4LogicalVolume* fShieldingLogic;
0105     G4VPhysicalVolume* fShieldingPhysical;
0106     G4LogicalVolume* fShieldingBackLogic;
0107     G4VPhysicalVolume* fShieldingBackPhysical;
0108 
0109     //--------------------definition of Materials--------------
0110     // materials for MIFF study
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     // custom material
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     // definitions of variables for MedMat composition
0159     G4double fComp0, fComp1, fComp2, fComp3;
0160 
0161     // other materials
0162     G4Material* fAir;
0163     G4Material* fTungsten;
0164     G4Material* fLead;
0165     G4Material* fGe;
0166 
0167     //-------------definition of Geometrical Variables---------
0168     // World
0169     G4double fWorldSize;
0170 
0171     // Phantom
0172     G4double fPhantomDiameter;
0173     G4double fPhantomHeight;
0174     G4double fPhantomZ;
0175 
0176     // setup angle (rad)
0177     G4double fthetaSetup;
0178 
0179     // Slits
0180     G4double fSlitSize;
0181     G4double fSlit1Thickness;
0182     G4double fSlit2Thickness;
0183     G4double fSlit3Thickness;
0184     G4double fSlit4Thickness;
0185     G4double fSlit1SampleDistance;  // center-center
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     // Detector
0199     G4double fDetectorThickness;
0200     G4double fDetectorSize;
0201     G4double fDetectorSampleDistance;  // center-center
0202 
0203     // Shielding
0204     G4double fShieldingThickness;
0205 
0206     //-------------set methods for the messenger---------------
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 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......