예제 #1
0
    def __init__(self, par_in, par_out):
        g4b.G4VUserPrimaryGeneratorAction.__init__(self)
        par_direction = [par_out[i] - par_in[i] for i in range(3)]
        particle_table = g4b.G4ParticleTable.GetParticleTable()
        electron = particle_table.FindParticle(
            "e-")  # define the beta electron
        beam = g4b.G4ParticleGun(1)
        beam.SetParticleEnergy(2.28 * g4b.MeV)
        # beam.SetParticleEnergy(0.546*g4b.MeV)
        beam.SetParticleMomentumDirection(
            g4b.G4ThreeVector(par_direction[0], par_direction[1],
                              par_direction[2]))
        beam.SetParticleDefinition(electron)
        beam.SetParticlePosition(
            g4b.G4ThreeVector(par_in[0] * g4b.um, par_in[1] * g4b.um,
                              par_in[2] * g4b.um))

        beam2 = g4b.G4ParticleGun(1)
        beam2.SetParticleEnergy(0.546 * g4b.MeV)
        beam2.SetParticleMomentumDirection(
            g4b.G4ThreeVector(par_direction[0], par_direction[1],
                              par_direction[2]))
        beam2.SetParticleDefinition(electron)
        beam2.SetParticlePosition(
            g4b.G4ThreeVector(par_in[0] * g4b.um, par_in[1] * g4b.um,
                              par_in[2] * g4b.um))
        self.particleGun = beam
        self.particleGun2 = beam2
예제 #2
0
    def create_pcb_board(self, **kwargs):
        name = kwargs['name']
        material_si = self.nist.FindOrBuildElement(kwargs['material_Si'],
                                                   False)
        material_O = self.nist.FindOrBuildElement(kwargs['material_O'], False)
        sic_density = 2.2 * g4b.g / g4b.cm3
        SiO2 = g4b.G4Material("SiO2", sic_density, 2)
        SiO2.AddElement(material_si, 1)
        SiO2.AddElement(material_O, 2)
        translation = g4b.G4ThreeVector(*kwargs['translation'])
        visual = g4b.G4VisAttributes(g4b.G4Color(*kwargs['colour']))
        mother = self.physical[kwargs['mother']]
        sidex = kwargs['sidex']
        sidey = kwargs['sidey']
        sidez = kwargs['sidez']
        tub_radius = kwargs['tub_radius']
        tub_depth = kwargs['tub_depth']

        self.solid[name + "box"] = g4b.G4Box(name + "box", sidex / 2.,
                                             sidey / 2., sidez / 2.)
        self.solid[name + "tub"] = g4b.G4Tubs(name + "tub", 0, tub_radius,
                                              tub_depth, 0, 360 * g4b.deg)
        self.solid[name] = g4b.G4SubtractionSolid(name,
                                                  self.solid[name + "box"],
                                                  self.solid[name + "tub"])
        self.logical[name] = g4b.G4LogicalVolume(self.solid[name], SiO2, name)
        self.physical[name] = g4b.G4PVPlacement(None, translation, name,
                                                self.logical[name], mother,
                                                False, 0, self.checkOverlaps)
        self.logical[name].SetVisAttributes(visual)
예제 #3
0
    def create_world(self, my_d):

        self.nist = g4b.G4NistManager.Instance()
        material = self.nist.FindOrBuildMaterial("G4_AIR")
        self.solid['world'] = g4b.G4Box("world", 25000 * g4b.um,
                                        25000 * g4b.um, 25000 * g4b.um)
        self.logical['world'] = g4b.G4LogicalVolume(self.solid['world'],
                                                    material, "world")
        self.physical['world'] = g4b.G4PVPlacement(None,
                                                   g4b.G4ThreeVector(0, 0, 0),
                                                   self.logical['world'],
                                                   "world", None, False, 0,
                                                   self.checkOverlaps)
        visual = g4b.G4VisAttributes()
        visual.SetVisibility(False)
        self.logical['world'].SetVisAttributes(visual)
예제 #4
0
    def create_AlorSi_box(self, **kwargs):
        name = kwargs['name']
        material_type = self.nist.FindOrBuildMaterial(kwargs['material_type'],
                                                      False)

        translation = g4b.G4ThreeVector(*kwargs['translation'])
        visual = g4b.G4VisAttributes(g4b.G4Color(*kwargs['colour']))
        mother = self.physical[kwargs['mother']]
        sidex = kwargs['sidex']
        sidey = kwargs['sidey']
        sidez = kwargs['sidez']

        self.solid[name] = g4b.G4Box(name, sidex / 2., sidey / 2., sidez / 2.)

        self.logical[name] = g4b.G4LogicalVolume(self.solid[name],
                                                 material_type, name)
        self.physical[name] = g4b.G4PVPlacement(None, translation, name,
                                                self.logical[name], mother,
                                                False, 0, self.checkOverlaps)
        self.logical[name].SetVisAttributes(visual)
예제 #5
0
    def create_sic_box(self, **kwargs):
        name = kwargs['name']
        material_si = self.nist.FindOrBuildElement(kwargs['material_Si'],
                                                   False)
        material_c = self.nist.FindOrBuildElement(kwargs['material_c'], False)
        sic_density = 3.2 * g4b.g / g4b.cm3
        SiC = g4b.G4Material("SiC", sic_density, 2)
        SiC.AddElement(material_si, 50 * g4b.perCent)
        SiC.AddElement(material_c, 50 * g4b.perCent)
        translation = g4b.G4ThreeVector(*kwargs['translation'])
        visual = g4b.G4VisAttributes(g4b.G4Color(*kwargs['colour']))
        mother = self.physical[kwargs['mother']]
        sidex = kwargs['sidex']
        sidey = kwargs['sidey']
        sidez = kwargs['sidez']

        self.solid[name] = g4b.G4Box(name, sidex / 2., sidey / 2., sidez / 2.)

        self.logical[name] = g4b.G4LogicalVolume(self.solid[name], SiC, name)
        self.physical[name] = g4b.G4PVPlacement(None, translation, name,
                                                self.logical[name], mother,
                                                False, 0, self.checkOverlaps)
        self.logical[name].SetVisAttributes(visual)