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
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)
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)
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)
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)