Files
geant4/examples/advanced/hadrontherapy/include/PassiveCarbonBeamLine.hh
2021-06-25 16:12:29 +02:00

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