00001
00002
00003 #ifndef musrDetectorConstruction_h
00004 #define musrDetectorConstruction_h 1
00005
00006 #include "globals.hh"
00007 #include "G4VUserDetectorConstruction.hh"
00008
00009
00010 class G4Tubs;
00011 class G4Box;
00012 class G4Cons;
00013 class G4Trd;
00014 class G4LogicalVolume;
00015 class G4VPhysicalVolume;
00016 class G4Material;
00017 class musrDetectorMessenger;
00018 class musrTrackerSD;
00019 class musrShieldSD;
00020 class musrIForwardSD;
00021 class musrIBackwardSD;
00022
00023
00024
00025
00026
00027 class musrDetectorConstruction : public G4VUserDetectorConstruction
00028 {
00029 public:
00030
00031 musrDetectorConstruction();
00032 ~musrDetectorConstruction();
00033
00034 public:
00035
00036 G4VPhysicalVolume* Construct();
00037
00038 void SetTargetPos(G4double);
00039 void SetDetSep(G4double);
00040 void UpdateGeometry();
00041 void SetRadialNumber(G4int);
00042 void SetLengthNumber(G4int);
00043 void SetLargeRadius(G4double);
00044 void SetSmallRadius(G4double);
00045 void SetArrayLength(G4double);
00046 void SetDetectorThickness(G4double);
00047 void SetTargetMaterial (G4String);
00048 void SetBeampipeClearance(G4double);
00049 void SetCollimatorRadius(G4double);
00050 void SetTargetThickness(G4double);
00051
00052 const
00053 G4double GetTargetFullLength() {return fTargetLength;};
00054 G4double GetWorldFullLength() {return fWorldLength;};
00055
00056 void SetMagField(G4double);
00057 void SetUniformMagField(G4double);
00058
00059 private:
00060
00061 G4Box* solidWorld;
00062 G4LogicalVolume* logicWorld;
00063 G4VPhysicalVolume* physiWorld;
00064
00065 G4Tubs* solidBeampipe;
00066 G4LogicalVolume* logicBeampipe;
00067 G4VPhysicalVolume* physiBeampipe;
00068
00069 G4Tubs* solidBeampipeShell;
00070 G4LogicalVolume* logicBeampipeShell;
00071 G4VPhysicalVolume* physiBeampipeShell;
00072
00073
00074
00075 G4Tubs* solidCollimator;
00076 G4LogicalVolume* logicCollimator;
00077 G4VPhysicalVolume* physiCollimator;
00078
00079
00080
00081 G4Tubs* solidTarget;
00082 G4LogicalVolume* logicTarget;
00083 G4VPhysicalVolume* physiTarget;
00084
00085 G4Tubs* solidTargetSpace;
00086 G4LogicalVolume* logicTargetSpace;
00087 G4VPhysicalVolume* physiTargetSpace;
00088
00089
00090 G4Tubs* solidFDetector;
00091 G4LogicalVolume* logicForward;
00092 G4VPhysicalVolume* physiForward;
00093
00094 G4Tubs* solidBDetector;
00095 G4LogicalVolume* logicBackward;
00096 G4VPhysicalVolume* physiBackward;
00097
00098 G4Trd* solidFPixel;
00099 G4LogicalVolume* logicFPixel;
00100 G4Trd* solidBPixel;
00101 G4LogicalVolume* logicBPixel;
00102 G4VPhysicalVolume* physiBPixel;
00103 G4VPhysicalVolume* physiFPixel;
00104
00105
00106
00107
00108 G4Tubs* solidShield;
00109 G4LogicalVolume* logicShield;
00110 G4VPhysicalVolume* physiShield;
00111
00112 G4Tubs* solidShield2;
00113 G4LogicalVolume* logicShield2;
00114 G4VPhysicalVolume* physiShield2;
00115
00116 G4Tubs* solidShield3;
00117 G4LogicalVolume* logicShield3;
00118 G4VPhysicalVolume* physiShield3;
00119
00120 G4Material* TargetMater;
00121 G4Material* VacMater;
00122 G4Material* DetMater;
00123 G4Material* PipeMater;
00124 G4Material* CollimatorMater;
00125 G4Material* AirMater;
00126
00127
00128 musrTrackerSD* aTrackerSD;
00129 musrShieldSD* aShieldSD;
00130 musrIForwardSD* aIForwardSD;
00131 musrIBackwardSD* aIBackwardSD;
00132
00133
00134 musrDetectorMessenger* detectorMessenger;
00135
00136
00137 G4double fWorldLength;
00138 G4double fTargetLength;
00139 G4double TargetPos;
00140 G4int NbOfRadialPixels;
00141 G4int NbOfLengthPixels;
00142 G4double ArrayLength;
00143 G4double LRadius;
00144 G4double SRadius;
00145 G4double fDetectorSeparation;
00146 G4double fDetectorThickness;
00147 G4double fBeampipeLength;
00148 G4double fCollimatorLength;
00149 G4double CollimatorRadius;
00150 G4double BeampipeClearance;
00151 G4double OuterBeampipeRadius;
00152 G4double ShieldClearance;
00153
00154 private:
00155 void DefineMaterials();
00156 G4VPhysicalVolume* ConstructCalorimeter();
00157
00158
00159 };
00160
00161
00162
00163 #endif