408def ConstructGeom():
409 print("* Constructing geometry...")
410
411 vac = G4Material.GetMaterial("G4_Galactic")
412 g4py.ezgeom.SetWorldMaterial(vac)
413 g4py.ezgeom.ResizeWorld(world_r/2., world_r/2., world_r)
414
415 global snoopy,snoopyPhys,scoreLog
416 snoopy = G4EzVolume("Snoopy")
417 snoopy.CreateTubeVolume(vac, 0., 20*m, world_r/2.)
418 snoopyPhys = snoopy.PlaceIt(G4ThreeVector(0.,0.,0.*m))
419 snoopyLog = snoopyPhys.GetLogicalVolume()
420 snoopy.SetVisibility(False)
421
422 global target,targetPhys
423 iron = G4Material.GetMaterial("G4_Fe")
424 air = G4Material.GetMaterial("G4_AIR")
425 water = G4Material.GetMaterial("G4_WATER")
426 tungsten = G4Material.GetMaterial("G4_W")
427 lead = G4Material.GetMaterial("G4_Pb")
428 alum = G4Material.GetMaterial("G4_Al")
429 elementMo = G4Element("Molybdenum","Mo",42., 95.94*g/mole)
430 molybdenum = G4Material("molybdenum", 10.22*g/cm3, 1)
431 molybdenum.AddElement(elementMo, 1.00)
432
433 if fullTungsten:
434 target = G4EzVolume("Target")
435 slit = G4EzVolume("Slit")
436 slitDZ = 0.5*cm
437 targetDZ = 5.*cm
438
439 target.CreateTubeVolume(tungsten, 0., 25.*cm,targetDZ)
440 target.SetColor(G4Color(0.0,0.5,0.5,1.0))
441 target.SetVisibility(True)
442
443
444
445
446
447 slit.CreateTubeVolume(water, 0., 25.*cm, slitDZ)
448 slit.SetVisibility(False)
449 targetPhys = []
450 slitPhys = []
451 targetL = 0*cm
452 z0Pos = -50.*m
453 for i in range(4):
454 targetPhys.append(target.PlaceIt(G4ThreeVector(0.,0.,z0Pos + targetL + targetDZ) ,1,snoopy))
455 slitPhys.append(slit.PlaceIt(G4ThreeVector(0.,0., z0Pos + targetL + 2*targetDZ + slitDZ),1,snoopy))
456 targetL+= 2*(slitDZ+targetDZ)
457 targetPhys.append(target.PlaceIt(G4ThreeVector(0.,0., z0Pos + targetL + targetDZ),1,snoopy))
458 targetL+= 2*(targetDZ)
459
460 moreShielding = G4EzVolume("moreShielding")
461 moreShielding.CreateTubeVolume(iron, 30.*cm, 400.*cm, targetL/2.)
462 moreShieldingPhys = moreShielding.PlaceIt(G4ThreeVector(0.,0.,z0Pos + targetL/2.),1,snoopy)
463
464 else:
465 slitDZ = 0.5*cm
466 diameter = 30.*cm
467 spaceTopBot = 10.*cm
468 spaceSide = 5.*cm
469 slit = G4EzVolume("Slit")
470 slit.CreateBoxVolume(water, diameter,diameter,slitDZ)
471 slit.SetVisibility(False)
472 targetPhys = []
473 targetVol = []
474 slitPhys = []
475 targetL = 0*cm
476 z0Pos = -50.*m
477
478 layout = {1:[molybdenum,8.*cm],\
479 2:[molybdenum,2.5*cm],3:[molybdenum,2.5*cm],4:[molybdenum,2.5*cm],5:[molybdenum,2.5*cm],\
480 6:[molybdenum,2.5*cm],7:[molybdenum,2.5*cm],8:[molybdenum,2.5*cm],\
481 9:[molybdenum,5.0*cm],10:[molybdenum,5.0*cm],\
482 11:[molybdenum,6.5*cm],\
483 12:[molybdenum,8.0*cm],13:[molybdenum,8.0*cm],\
484 14:[tungsten,5.*cm],15:[tungsten,8.*cm],16:[tungsten,10.*cm],17:[tungsten,35.*cm] }
485 for i in range(1,18):
486 targetVol.append(G4EzVolume("Target_Layer_"+str(i)))
487 targetVol[i-1].CreateBoxVolume(layout[i][0], diameter,diameter,layout[i][1])
488 if layout[i][0]==tungsten: targetVol[i-1].SetColor(G4Color(0.0,0.5,0.5,1.0))
489 else: targetVol[i-1].SetColor(G4Color(0.3,0.2,0.5,1.0))
490 targetVol[i-1].SetVisibility(True)
491 targetPhys.append(targetVol[i-1].PlaceIt(G4ThreeVector(0.,0.,z0Pos + targetL + layout[i][1]/2.),1,snoopy))
492 if i<17:
493 slitPhys.append(slit.PlaceIt( G4ThreeVector(0.,0.,z0Pos + targetL + layout[i][1] + slitDZ/2.),1,snoopy))
494 targetL+= slitDZ+layout[i][1]
495 else: targetL+= layout[i][1]
496
497 xTot = 400.*cm
498 yTot = 400.*cm
499 moreShieldingTopBot = G4EzVolume("moreShieldingTopBot")
500 moreShieldingTopBot.CreateBoxVolume(iron, xTot, yTot/2., targetL)
501 moreShieldingTopPhys = moreShieldingTopBot.PlaceIt(G4ThreeVector(0.,diameter/2. +spaceTopBot+yTot/4.,z0Pos + targetL/2.),1,snoopy)
502 moreShieldingBotPhys = moreShieldingTopBot.PlaceIt(G4ThreeVector(0.,-diameter/2.-spaceTopBot-yTot/4.,z0Pos + targetL/2.),1,snoopy)
503 moreShieldingSide = G4EzVolume("moreShieldingSide")
504 moreShieldingSide.CreateBoxVolume(iron, xTot/2., diameter+1.9*spaceTopBot, targetL)
505 moreShieldingLeftPhys = moreShieldingSide.PlaceIt(G4ThreeVector(diameter/2. +spaceSide+xTot/4.,0.,z0Pos + targetL/2.),1,snoopy)
506 moreShieldingRightPhys = moreShieldingSide.PlaceIt(G4ThreeVector(-diameter/2.-spaceSide-xTot/4.,0.,z0Pos + targetL/2.),1,snoopy)
507
508
509 absorberL = 2*150.*cm
510 absorber = G4EzVolume("Absorber")
511
512 absorber.CreateTubeVolume(iron, 0., 400.*cm, absorberL/2.)
513 absorberPhys = absorber.PlaceIt(G4ThreeVector(0.,0.,z0Pos+targetL+absorberL/2.+5.*cm),1,snoopy)
514 absorber.SetColor(G4Color(0.898,0.902,0.91,1.0))
515 absorber.SetVisibility(True)
516 xx = G4VisAttributes()
517 xx.SetForceWireframe(True)
518 absorberlog = absorberPhys.GetLogicalVolume()
519 absorberlog.SetVisAttributes(xx)
520
521 afterHadronZ = z0Pos+targetL+absorberL+5.1*cm
522 scorez = afterHadronZ
523 score = G4EzVolume("Score")
524 score.CreateTubeVolume(vac, 0., 20.*m, 1.*mm)
525 scorePhys = score.PlaceIt(G4ThreeVector(0.,0.,scorez),1,snoopy)
526 scoreLog = scorePhys.GetLogicalVolume()
527 g4py.ezgeom.Construct()
528