382 lines
12 KiB
C++
382 lines
12 KiB
C++
//
|
|
// ********************************************************************
|
|
// * License and Disclaimer *
|
|
// * *
|
|
// * The Geant4 software is copyright of the Copyright Holders of *
|
|
// * the Geant4 Collaboration. It is provided under the terms and *
|
|
// * conditions of the Geant4 Software License, included in the file *
|
|
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
|
// * include a list of copyright holders. *
|
|
// * *
|
|
// * Neither the authors of this software system, nor their employing *
|
|
// * institutes,nor the agencies providing financial support for this *
|
|
// * work make any representation or warranty, express or implied, *
|
|
// * regarding this software system or assume any liability for its *
|
|
// * use. Please see the license in the file LICENSE and URL above *
|
|
// * for the full disclaimer and the limitation of liability. *
|
|
// * *
|
|
// * This code implementation is the result of the scientific and *
|
|
// * technical work of the GEANT4 collaboration. *
|
|
// * By using, copying, modifying or distributing the software (or *
|
|
// * any work based on the software) you agree to acknowledge its *
|
|
// * use in resulting scientific publications, and indicate your *
|
|
// * acceptance of all terms of the Geant4 Software license. *
|
|
// ********************************************************************
|
|
//
|
|
// Hadrontherapy advanced example for Geant4
|
|
// See more at: https://twiki.cern.ch/twiki/bin/view/Geant4/AdvancedExamplesHadrontherapy
|
|
|
|
#ifndef PassiveCarbonBeamLine_H
|
|
#define PassiveCarbonBeamLine_H 1
|
|
|
|
#include "globals.hh"
|
|
#include "G4VUserDetectorConstruction.hh"
|
|
#include "G4Box.hh"
|
|
#include "G4Tubs.hh"
|
|
#include "G4VisAttributes.hh"
|
|
#include "G4LogicalVolume.hh"
|
|
#include "G4Trd.hh"
|
|
#include "PassiveCarbonBeamLineMessenger.hh"
|
|
|
|
class G4VPhysicalVolume;
|
|
class HadrontherapyDetectorConstruction;
|
|
class HadrontherapyDetectorROGeometry;
|
|
class PassiveCarbonBeamLineMessenger;
|
|
|
|
class PassiveCarbonBeamLine : public G4VUserDetectorConstruction
|
|
{
|
|
public:
|
|
|
|
PassiveCarbonBeamLine();
|
|
~PassiveCarbonBeamLine();
|
|
|
|
G4VPhysicalVolume* Construct();
|
|
|
|
void HadrontherapyBeamLineSupport();
|
|
// Definition of the beam line support
|
|
|
|
void VacuumToAirInterface();
|
|
|
|
void HadrontherapyBeamMonitoring();
|
|
// Definition of three monitor chambers
|
|
|
|
void HadrontherapyBeamNozzle();
|
|
// Definition of the beam noozle
|
|
|
|
void HadrontherapyBeamFinalCollimator();
|
|
// Definition of the final collimator
|
|
|
|
void HadrontherapyPMMACollimator();
|
|
// Definition of the PMMA collimator
|
|
|
|
void HadrontherapyRippleFilter();
|
|
// Definition of the ripple filter
|
|
|
|
void StopperCostruction();
|
|
void HadrontherapyRidgeFilter();
|
|
void SetInnerRadiusFinalCollimator(G4double);
|
|
// This method allows to change the size of the inner radius of the
|
|
// final collimator
|
|
|
|
void SetRippleFilterMaterial(G4String);
|
|
// This method allows to change the material
|
|
// of the ripple filter
|
|
|
|
void SetRippleFilterXPosition(G4double);
|
|
|
|
// The following methods allow to change parameters
|
|
// of some beam line components
|
|
|
|
G4Material* kapton;
|
|
G4VisAttributes* redWire;
|
|
G4VPhysicalVolume* mother;
|
|
private:
|
|
static PassiveCarbonBeamLine* instance;
|
|
//passive carbon line dimensions
|
|
void SetDefaultDimensions();
|
|
void ConstructPassiveCarbonBeamLine();
|
|
|
|
PassiveCarbonBeamLineMessenger* PassiveCarbonMessenger;
|
|
G4VPhysicalVolume* physicalTreatmentRoom;
|
|
HadrontherapyDetectorConstruction* hadrontherapyDetectorConstruction;
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Definitions of all volumes
|
|
// World (experimental hall)
|
|
G4Box* treatmentRoom;
|
|
G4LogicalVolume* logicTreatmentRoom;
|
|
|
|
|
|
// Beamline support
|
|
G4Box* beamLineSupport;
|
|
G4LogicalVolume* logicBeamLineSupport;
|
|
G4VPhysicalVolume* physiBeamLineSupport;
|
|
|
|
// Beamline covers
|
|
G4Box* beamLineCover;
|
|
G4LogicalVolume* logicBeamLineCover;
|
|
G4VPhysicalVolume* physiBeamLineCover;
|
|
G4VPhysicalVolume* physiBeamLineCover2;
|
|
|
|
// Vacuum pipe
|
|
G4Box* vacuumZone;
|
|
G4LogicalVolume* logicVacuumZone;
|
|
G4VPhysicalVolume* physiVacuumZone;
|
|
|
|
// Scattering foil
|
|
G4Box* firstScatteringFoil;
|
|
G4LogicalVolume* logicFirstScatteringFoil;
|
|
G4VPhysicalVolume* physiFirstScatteringFoil;
|
|
|
|
// Kapton window
|
|
G4Box* solidKaptonWindow;
|
|
G4LogicalVolume* logicKaptonWindow;
|
|
G4VPhysicalVolume* physiKaptonWindow;
|
|
|
|
//Ripple filter
|
|
G4Box* SolidRippleFilter;
|
|
G4LogicalVolume* LogicRippleFilter;
|
|
G4VPhysicalVolume* PhysiRippleFilter;
|
|
|
|
G4Box* SolidRippleFilterBase;
|
|
G4LogicalVolume* LogicRippleFilterBase;
|
|
G4VPhysicalVolume* PhysiRippleFilterBase;
|
|
|
|
G4Trd* SolidRippleFilterTrd;
|
|
G4LogicalVolume* LogicRippleFilterTrd;
|
|
G4VPhysicalVolume* PhysiRippleFilterTrd;
|
|
|
|
|
|
//
|
|
G4Box* supportFoil;
|
|
G4LogicalVolume* LogicSupportFoil;
|
|
G4VPhysicalVolume* PhysiSupportFoil;
|
|
//
|
|
G4Tubs* stopper;
|
|
G4LogicalVolume* LogicStopper;
|
|
G4VPhysicalVolume* PhysicStopper;
|
|
//Ridge filter
|
|
G4Box* SolidRidgeBase;
|
|
G4LogicalVolume* LogicRidgeBase;
|
|
G4VPhysicalVolume* PhysiRidgeFilterBase;
|
|
|
|
G4Box* SolidRidgeMother;
|
|
G4LogicalVolume* LogicRidgeMother;
|
|
// G4VPhysicalVolume* PhysiRidgeMother;
|
|
|
|
|
|
// PMMA Collimator
|
|
G4Box* solidPMMACollimatorSupport;
|
|
G4LogicalVolume* logicPMMACollimatorSupport;
|
|
G4VPhysicalVolume* physiPMMACollimatorSupport;
|
|
|
|
G4Tubs* solidPMMACollimator;
|
|
G4LogicalVolume* logicPMMACollimator;
|
|
G4VPhysicalVolume* physiPMMACollimator;
|
|
|
|
// Monitor chamber
|
|
G4Box* solidFirstMonitorLayer1;
|
|
G4LogicalVolume* logicFirstMonitorLayer1;
|
|
G4VPhysicalVolume* physiFirstMonitorLayer1;
|
|
|
|
G4Box* solidFirstMonitorLayer2;
|
|
G4LogicalVolume* logicFirstMonitorLayer2;
|
|
G4VPhysicalVolume* physiFirstMonitorLayer2;
|
|
|
|
G4Box* solidFirstMonitorLayer3;
|
|
G4LogicalVolume* logicFirstMonitorLayer3;
|
|
G4VPhysicalVolume* physiFirstMonitorLayer3;
|
|
|
|
G4Box* solidFirstMonitorLayer4;
|
|
G4LogicalVolume* logicFirstMonitorLayer4;
|
|
G4VPhysicalVolume* physiFirstMonitorLayer4;
|
|
|
|
// Final nozzle and collimator
|
|
G4Box* solidNozzleSupport;
|
|
G4LogicalVolume* logicNozzleSupport;
|
|
G4VPhysicalVolume* physiNozzleSupport;
|
|
|
|
G4Tubs* solidHoleNozzleSupport;
|
|
G4LogicalVolume* logicHoleNozzleSupport;
|
|
G4VPhysicalVolume* physiHoleNozzleSupport;
|
|
|
|
G4Tubs* solidBrassTube3;
|
|
G4LogicalVolume* logicBrassTube3;
|
|
G4VPhysicalVolume* physiBrassTube3;
|
|
|
|
G4Tubs* solidBrassTube2;
|
|
G4LogicalVolume* logicBrassTube2;
|
|
G4VPhysicalVolume* physiBrassTube2;
|
|
|
|
G4Tubs* solidBrassTube;
|
|
G4LogicalVolume* logicBrassTube;
|
|
G4VPhysicalVolume* physiBrassTube;
|
|
|
|
// Final collimator
|
|
G4Tubs* solidFinalCollimator;
|
|
G4VPhysicalVolume* physiFinalCollimator;
|
|
G4LogicalVolume* logicFinalCollimator;
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// Dimensions and positions of all volumes
|
|
// Beamline support
|
|
G4double beamLineSupportXSize;
|
|
G4double beamLineSupportYSize;
|
|
G4double beamLineSupportZSize;
|
|
G4double beamLineSupportXPosition;
|
|
G4double beamLineSupportYPosition;
|
|
G4double beamLineSupportZPosition;
|
|
|
|
// Beamline covers
|
|
G4double beamLineCoverXSize;
|
|
G4double beamLineCoverYSize;
|
|
G4double beamLineCoverZSize;
|
|
G4double beamLineCoverXPosition;
|
|
G4double beamLineCoverYPosition;
|
|
G4double beamLineCoverZPosition;
|
|
|
|
// vacuum pipe
|
|
G4double vacuumZoneXSize;
|
|
G4double vacuumZoneYSize;
|
|
G4double vacuumZoneZSize;
|
|
G4double vacuumPipeXPosition;
|
|
|
|
// Scattering foil
|
|
G4double firstScatteringFoilXSize;
|
|
G4double firstScatteringFoilYSize;
|
|
G4double firstScatteringFoilZSize;
|
|
G4double firstScatteringFoilXPosition;
|
|
|
|
// kapton Windows
|
|
G4double kaptonWindowXSize;
|
|
G4double kaptonWindowYSize;
|
|
G4double kaptonWindowZSize;
|
|
G4double kaptonWindowXPosition;
|
|
|
|
// PMMA Collimator
|
|
G4double PMMACollimatorSupportXSize;
|
|
G4double PMMACollimatorSupportYSize;
|
|
G4double PMMACollimatorSupportZSize;
|
|
G4double PMMACollimatorXPosition;
|
|
G4double innerRadiusPMMACollimator;
|
|
G4double outerRadiusPMMACollimator;
|
|
G4double hightPMMACollimator;
|
|
G4double startAnglePMMACollimator;
|
|
G4double spanningAnglePMMACollimator;
|
|
|
|
// Monitor chamber
|
|
G4double monitor1XSize;
|
|
G4double monitor2XSize;
|
|
G4double monitor3XSize;
|
|
G4double monitorYSize;
|
|
G4double monitorZSize;
|
|
G4double monitor1XPosition;
|
|
G4double monitor2XPosition;
|
|
G4double monitor4XPosition;
|
|
|
|
// Final nozzle and collimator
|
|
G4double nozzleSupportXSize;
|
|
G4double nozzleSupportYSize;
|
|
G4double nozzleSupportZSize;
|
|
G4double nozzleSupportXPosition;
|
|
|
|
G4double innerRadiusHoleNozzleSupport;
|
|
G4double outerRadiusHoleNozzleSupport;
|
|
G4double hightHoleNozzleSupport;
|
|
G4double startAngleHoleNozzleSupport;
|
|
G4double spanningAngleHoleNozzleSupport;
|
|
|
|
G4double innerRadiusBrassTube3;
|
|
G4double outerRadiusBrassTube3;
|
|
G4double hightBrassTube3;
|
|
G4double startAngleBrassTube3;
|
|
G4double spanningAngleBrassTube3;
|
|
G4double brassTube3XPosition;
|
|
|
|
G4double innerRadiusBrassTube2;
|
|
G4double outerRadiusBrassTube2;
|
|
G4double hightBrassTube2;
|
|
G4double startAngleBrassTube2;
|
|
G4double spanningAngleBrassTube2;
|
|
|
|
G4double innerRadiusBrassTube;
|
|
G4double outerRadiusBrassTube;
|
|
G4double hightBrassTube;
|
|
G4double startAngleBrassTube;
|
|
G4double spanningAngleBrassTube;
|
|
G4double brassTubeXPosition;
|
|
|
|
// Final collimator
|
|
G4double outerRadiusFinalCollimator;
|
|
G4double innerRadiusFinalCollimator;
|
|
G4double hightFinalCollimator;
|
|
G4double startAngleFinalCollimator;
|
|
G4double spanningAngleFinalCollimator;
|
|
G4double finalCollimatorXPosition;
|
|
|
|
// Colors
|
|
G4VisAttributes* blue;
|
|
G4VisAttributes* gray;
|
|
G4VisAttributes* white;
|
|
G4VisAttributes* red;
|
|
G4VisAttributes* yellow;
|
|
G4VisAttributes* green;
|
|
G4VisAttributes* darkGreen;
|
|
G4VisAttributes* darkOrange3;
|
|
G4VisAttributes* skyBlue;
|
|
G4VisAttributes* black;
|
|
|
|
// Elements, compounds and materials
|
|
G4Material *aluminumNist;
|
|
G4Material* copperNistMaterial;
|
|
G4Material* airNist;
|
|
G4Material* kaptonNist;
|
|
G4Material* galacticNist;
|
|
G4Material* PMMANist;
|
|
G4Material* tantalumNist;
|
|
G4Material* brass;
|
|
|
|
G4Material* beamLineSupportMaterial;
|
|
G4Material* vacuumZoneMaterial;
|
|
G4Material* kaptonWindowMaterial;
|
|
G4Material* firstScatteringFoilMaterial;
|
|
|
|
G4Material* layer1MonitorChamberMaterial;
|
|
G4Material* layer2MonitorChamberMaterial;
|
|
G4Material* layer3MonitorChamberMaterial;
|
|
G4Material* layer4MonitorChamberMaterial;
|
|
G4Material* nozzleSupportMaterial;
|
|
G4Material* holeNozzleSupportMaterial;
|
|
G4Material* seconHoleNozzleSupportMaterial;
|
|
G4Material* brassTubeMaterial;
|
|
G4Material* brassTube2Material;
|
|
G4Material* brassTube3Material;
|
|
G4Material* finalCollimatorMaterial;
|
|
G4Material* PMMACollimatorMaterial;
|
|
G4Material* rippleFilterMaterial;
|
|
G4Material* rippleFilterBoxMaterial;
|
|
|
|
HadrontherapyDetectorROGeometry* RO;
|
|
|
|
G4VPhysicalVolume* PhysiTrapp1;
|
|
G4VPhysicalVolume* PhysiTrapp2;
|
|
G4VPhysicalVolume* PhysiTrapp3;
|
|
G4VPhysicalVolume* PhysiTrapp4;
|
|
G4VPhysicalVolume* PhysiTrapp5;
|
|
G4VPhysicalVolume* PhysiTrapp6;
|
|
G4VPhysicalVolume* PhysiTrapp7;
|
|
G4VPhysicalVolume* PhysiTrapp8;
|
|
G4VPhysicalVolume* PhysiTrapp9;
|
|
G4VPhysicalVolume* PhysiTrapp10;
|
|
G4VPhysicalVolume* PhysiTrapp11;
|
|
G4VPhysicalVolume* PhysiTrapp12;
|
|
G4VPhysicalVolume* PhysiTrapp13;
|
|
G4VPhysicalVolume* PhysiTrapp14;
|
|
G4VPhysicalVolume* PhysiTrapp15;
|
|
G4VPhysicalVolume* PhysiTrapp16;
|
|
|
|
|
|
};
|
|
#endif
|
|
|