示例#1
0
 def setUp(self):
     with ConfigRegistry.register_config("bb") as c:
         c.length = 10
         c.width = 20
         c.muShield = AttrDict(z=10)
     with ConfigRegistry.register_config("cc", base="bb") as c:
         c.height = 30
         c.volume = c.length * c.height * c.width
def retrieveGitTags(o):
    # record some basic information about version of software:
    tmp = os.environ['FAIRSHIP']+'/.git/refs/remotes/origin/master'
    if os.path.isfile(tmp):
      x = subprocess.check_output(['more',tmp]).replace('\n','')
      o.FairShip = AttrDict(origin=x)
    tmp = os.environ['FAIRSHIP']+'/.git/refs/heads/master'
    if os.path.isfile(tmp): 
      x = subprocess.check_output(['more',tmp]).replace('\n','')
      o.FairShip = AttrDict(local=x)
    tmp = os.environ['SIMPATH']+'/../FairSoft/.git/refs/heads/master'
    if os.path.isfile(tmp): 
      x = subprocess.check_output(['more',tmp]).replace('\n','')
      o.FairSoft = AttrDict(master=x)
    tmp = os.environ['SIMPATH']+'/../FairSoft/.git/refs/heads/dev'
    if os.path.isfile(tmp):
      x = subprocess.check_output(['more',tmp]).replace('\n','')
      o.FairSoft = AttrDict(dev=x)
    tmp = os.environ['FAIRROOTPATH']+'/../FairRoot/.git/refs/heads/dev'
    if os.path.isfile(tmp):
      x = subprocess.check_output(['more',tmp]).replace('\n','')
      o.FairRoot = AttrDict(dev=x)
    tmp = os.environ['FAIRROOTPATH']+'/../FairRoot/.git/refs/heads/master'
    if os.path.isfile(tmp):
      x = subprocess.check_output(['more',tmp]).replace('\n','')
      o.FairRoot = AttrDict(master=x)
    return o 
示例#3
0
def execute(f,o):
    # record some basic information about version of software:
    tmp = os.environ['FAIRSHIP']+'/.git/refs/remotes/origin/master'
    if os.path.isfile(tmp):
      x = subprocess.check_output(['more',tmp]).replace('\n','')
      o.FairShip = AttrDict(origin=x)
    tmp = os.environ['FAIRSHIP']+'/.git/refs/heads/master'
    if os.path.isfile(tmp): 
      x = subprocess.check_output(['more',tmp]).replace('\n','')
      o.FairShip = AttrDict(local=x)
    tmp = os.environ['SIMPATH']+'/../FairSoft/.git/refs/heads/master'
    if os.path.isfile(tmp): 
      x = subprocess.check_output(['more',tmp]).replace('\n','')
      o.FairSoft = AttrDict(master=x)
    tmp = os.environ['SIMPATH']+'/../FairSoft/.git/refs/heads/dev'
    if os.path.isfile(tmp):
      x = subprocess.check_output(['more',tmp]).replace('\n','')
      o.FairSoft = AttrDict(dev=x)
    tmp = os.environ['FAIRROOTPATH']+'/../FairRoot/.git/refs/heads/dev'
    if os.path.isfile(tmp):
      x = subprocess.check_output(['more',tmp]).replace('\n','')
      o.FairRoot = AttrDict(dev=x)
    tmp = os.environ['FAIRROOTPATH']+'/../FairRoot/.git/refs/heads/master'
    if os.path.isfile(tmp):
      x = subprocess.check_output(['more',tmp]).replace('\n','')
      o.FairRoot = AttrDict(master=x)
    fg = ROOT.TFile.Open(f,'update')
    pkl=Pickler(fg)
    pkl.dump(o,'ShipGeo')
    fg.Close()
import shipunit as u
from ShipGeoConfig import AttrDict, ConfigRegistry
# the following params should be passed through 'ConfigRegistry.loadpy' method
# none for the moment
with ConfigRegistry.register_config("basic") as c:

    c.MufluxSpectrometer = AttrDict(z=0 * u.cm)
    # False = charm cross-section; True = muon flux measurement
    c.MufluxSpectrometer.muflux = False

    if "targetOpt" not in globals():
        targetOpt = 18  # add extra 20cm of tungsten as per 13/06/2017

    c.target = AttrDict(z0=0 * u.cm)

    c.Bfield = AttrDict(z=0 * u.cm)
    c.Bfield.max = 10. * u.kilogauss  # 1.4361*u.kilogauss for SHiP
    c.Bfield.y = 1.8 * u.m  # dummy value
    c.Bfield.x = 5.0 * u.m  # dummy value
    c.Bfield.z = 3.571 * u.m
    #BOX (Brick!)
    c.Box = AttrDict(z=0 * u.cm)
    c.Box.BX = 13 * u.cm
    c.Box.BY = 11 * u.cm
    c.Box.BZ = 20 * u.cm
    c.Box.zBox = 0 * u.cm
    c.Box.EmTh = 0.0045 * u.cm
    c.Box.EmX = 10 * u.cm  #for the moment, replace the previous values for normal simulations
    c.Box.EmY = 10 * u.cm
    c.Box.PBTh = 0.0205 * u.cm
    c.Box.MolybdenumTh = 0.3 * u.cm
示例#5
0
def configure(run, ship_geo):
    # ---- for backward compatibility ----
    if not hasattr(ship_geo, "tankDesign"): ship_geo.tankDesign = 5
    if not hasattr(ship_geo, "muShieldGeo"): ship_geo.muShieldGeo = None
    if not hasattr(ship_geo.hcal, "File"): ship_geo.hcal.File = "hcal.geo"
    if not hasattr(ship_geo.Bfield, 'x'): ship_geo.Bfield.x = 3. * u.m
    if not hasattr(ship_geo, 'cave'):
        ship_geo.cave = AttrDict(z=0 * u.cm)
        ship_geo.cave.floorHeightMuonShield = 5 * u.m
        ship_geo.cave.floorHeightTankA = 4.5 * u.m
        ship_geo.cave.floorHeightTankB = 2. * u.m
    if not hasattr(ship_geo, 'NuTauTT'):
        ship_geo.NuTauTT = AttrDict(z=0 * u.cm)
    if not hasattr(ship_geo.NuTauTT, 'design'): ship_geo.NuTauTT.design = 0
    if not hasattr(ship_geo, 'EcalOption'): ship_geo.EcalOption = 1
    latestShipGeo = ConfigRegistry.loadpy(
        "$FAIRSHIP/geometry/geometry_config.py",
        Yheight=ship_geo.Yheight / u.m,
        tankDesign=ship_geo.tankDesign,
        muShieldDesign=ship_geo.muShieldDesign,
        nuTauTargetDesign=ship_geo.nuTauTargetDesign,
        muShieldGeo=ship_geo.muShieldGeo)
    # -----Create media-------------------------------------------------
    run.SetMaterials("media.geo")  # Materials
    # ------------------------------------------------------------------------

    # -----Create geometry----------------------------------------------
    cave = ROOT.ShipCave("CAVE")
    if ship_geo.tankDesign < 5: cave.SetGeometryFileName("cave.geo")
    else: cave.SetGeometryFileName("caveWithAir.geo")
    detectorList.append(cave)

    if ship_geo.muShieldDesign in [
            6, 7, 8, 9
    ]:  # magnetized hadron absorber defined in ShipMuonShield
        TargetStation = ROOT.ShipTargetStation("TargetStation",
                                               ship_geo.target.length,
                                               ship_geo.target.z,
                                               ship_geo.targetOpt,
                                               ship_geo.target.sl)
    else:
        TargetStation = ROOT.ShipTargetStation(
            "TargetStation", ship_geo.target.length,
            ship_geo.hadronAbsorber.length, ship_geo.target.z,
            ship_geo.hadronAbsorber.z, ship_geo.targetOpt, ship_geo.target.sl)

    if ship_geo.targetOpt > 10:
        slices_length = ROOT.std.vector('float')()
        slices_material = ROOT.std.vector('std::string')()
        for i in range(1, ship_geo.targetOpt + 1):
            slices_length.push_back(eval("ship_geo.target.L" + str(i)))
            slices_material.push_back(eval("ship_geo.target.M" + str(i)))
        TargetStation.SetLayerPosMat(ship_geo.target.xy, slices_length,
                                     slices_material)
    detectorList.append(TargetStation)

    if ship_geo.muShieldDesign == 1:
        MuonShield = ROOT.ShipMuonShield("MuonShield",ship_geo.muShieldDesign,"ShipMuonShield",ship_geo.muShield.z,ship_geo.muShield.dZ0,ship_geo.muShield.length,\
                                         ship_geo.muShield.LE)
    elif ship_geo.muShieldDesign == 2:
        MuonShield = ROOT.ShipMuonShield("MuonShield",ship_geo.muShieldDesign,"ShipMuonShield",ship_geo.muShield.z,ship_geo.muShield.dZ0,ship_geo.muShield.dZ1,\
                     ship_geo.muShield.dZ2,ship_geo.muShield.dZ3,ship_geo.muShield.dZ4,ship_geo.muShield.dZ5,ship_geo.muShield.dZ6,ship_geo.muShield.LE)
    elif ship_geo.muShieldDesign in [3, 4, 5, 6, 7, 9]:
        if not hasattr(ship_geo.muShield, "Field"):
            MuonShield = ROOT.ShipMuonShield(
                "MuonShield", ship_geo.muShieldDesign, "ShipMuonShield",
                ship_geo.muShield.z, ship_geo.muShield.dZ0,
                ship_geo.muShield.dZ1, ship_geo.muShield.dZ2,
                ship_geo.muShield.dZ3, ship_geo.muShield.dZ4,
                ship_geo.muShield.dZ5, ship_geo.muShield.dZ6,
                ship_geo.muShield.dZ7, ship_geo.muShield.dZ8,
                ship_geo.muShield.dXgap, ship_geo.muShield.LE,
                ship_geo.Yheight * 4. / 10.,
                ship_geo.cave.floorHeightMuonShield)
        else:
            MuonShield = ROOT.ShipMuonShield(
                "MuonShield", ship_geo.muShieldDesign, "ShipMuonShield",
                ship_geo.muShield.z, ship_geo.muShield.dZ0,
                ship_geo.muShield.dZ1, ship_geo.muShield.dZ2,
                ship_geo.muShield.dZ3, ship_geo.muShield.dZ4,
                ship_geo.muShield.dZ5, ship_geo.muShield.dZ6,
                ship_geo.muShield.dZ7, ship_geo.muShield.dZ8,
                ship_geo.muShield.dXgap, ship_geo.muShield.LE,
                ship_geo.Yheight * 4. / 10.,
                ship_geo.cave.floorHeightMuonShield, ship_geo.muShield.Field)
    elif ship_geo.muShieldDesign == 8:
        MuonShield = ROOT.ShipMuonShield(ship_geo.muShieldGeo)

    detectorList.append(MuonShield)

    if not hasattr(ship_geo, "magnetDesign"):
        # backward compatibility
        magnet_design = 2
        if ship_geo.tankDesign == 5: magnet_design = 3
        if ship_geo.tankDesign == 6: magnet_design = 4
        ship_geo.magnetDesign = magnet_design
        ship_geo.Bfield.YokeWidth = 200. * u.cm
        ship_geo.Bfield.YokeDepth = 200. * u.cm
        ship_geo.Bfield.CoilThick = 25. * u.cm
# sanity check, 2018 layout ship_geo.tankDesign == 6 has to be together with ship_geo.nuTauTargetDesign == 3
    if (ship_geo.tankDesign == 6 and ship_geo.nuTauTargetDesign != 3) or (
            ship_geo.tankDesign != 6 and ship_geo.nuTauTargetDesign == 3):
        print "version of tankDesign and nuTauTargetDesign are not compatible, should be 6 and 3, it is ", ship_geo.tankDesign, ship_geo.nuTauTargetDesign
        exit()
    if ship_geo.strawDesign > 1:
        if ship_geo.magnetDesign > 3:
            B = ship_geo.Bfield
            magnet = ROOT.ShipMagnet("Magnet", "SHiP Magnet", B.z,
                                     ship_geo.magnetDesign, B.x, B.y,
                                     ship_geo.cave.floorHeightTankB,
                                     B.YokeWidth, B.YokeDepth, B.CoilThick)
#                                                               xaperture,  yaperture
        else:
            magnet = ROOT.ShipMagnet("Magnet", "SHiP Magnet",
                                     ship_geo.Bfield.z, ship_geo.magnetDesign,
                                     ship_geo.Bfield.x, ship_geo.Bfield.y,
                                     ship_geo.cave.floorHeightTankB)
    else:
        magnet = ROOT.ShipMagnet("Magnet", "SHiP Magnet", ship_geo.Bfield.z)
    detectorList.append(magnet)

    Veto = ROOT.veto("Veto", ROOT.kTRUE)  # vacuum tank
    Veto.SetLiquidVeto(1)  # liquid scintillator
    Veto.SetPlasticVeto(1)  # plastic scintillator

    Veto.SetZpositions(ship_geo.vetoStation.z, ship_geo.TrackStation1.z, ship_geo.TrackStation2.z, \
                       ship_geo.TrackStation3.z, ship_geo.TrackStation4.z,ship_geo.tankDesign)
    Veto.SetTubZpositions(ship_geo.Chamber1.z, ship_geo.Chamber2.z,
                          ship_geo.Chamber3.z, ship_geo.Chamber4.z,
                          ship_geo.Chamber5.z, ship_geo.Chamber6.z)
    Veto.SetTublengths(ship_geo.chambers.Tub1length,ship_geo.chambers.Tub2length,ship_geo.chambers.Tub3length, \
                       ship_geo.chambers.Tub4length,ship_geo.chambers.Tub5length,ship_geo.chambers.Tub6length)
    Veto.SetB(ship_geo.Yheight / 2.)
    Veto.SetFloorHeight(ship_geo.cave.floorHeightTankA,
                        ship_geo.cave.floorHeightTankB)
    if ship_geo.tankDesign > 4:
        dzX = ship_geo.zFocusX + ship_geo.target.z0
        x1 = ship_geo.xMax / (ship_geo.Chamber1.z -
                              ship_geo.chambers.Tub1length -
                              dzX) * (ship_geo.TrackStation4.z - dzX)
        dzY = ship_geo.zFocusY + ship_geo.target.z0
        y1 = ship_geo.Yheight / (ship_geo.Chamber1.z -
                                 ship_geo.chambers.Tub1length -
                                 dzY) * (ship_geo.TrackStation4.z - dzY)
        Veto.SetXYstart(x1, dzX, y1, dzY)
        Veto.SetVesselStructure(ship_geo.Veto.innerSupport,ship_geo.Veto.sensitiveThickness,ship_geo.Veto.outerSupport,\
                                ship_geo.Veto.innerSupportMed,ship_geo.Veto.lidThickness,ship_geo.Veto.sensitiveMed,\
                                ship_geo.Veto.outerSupportMed,ship_geo.Veto.decayMed,\
                                ship_geo.Veto.rib,ship_geo.Veto.ribMed)

    detectorList.append(Veto)
    if hasattr(ship_geo, 'tauMudet'):  # don't support old designs

        if ship_geo.muShieldDesign not in [2, 3, 4] and hasattr(
                ship_geo.tauMudet, 'Xtot'):
            taumuondetector = ROOT.NuTauMudet("NuTauMudet",
                                              ship_geo.tauMudet.zMudetC,
                                              ROOT.kTRUE)
            taumuondetector.SetDesign(ship_geo.nuTauTargetDesign)
            taumuondetector.SetTotDimensions(ship_geo.tauMudet.Xtot,
                                             ship_geo.tauMudet.Ytot,
                                             ship_geo.tauMudet.Ztot)
            taumuondetector.SetFeDimensions(ship_geo.tauMudet.XFe,
                                            ship_geo.tauMudet.YFe,
                                            ship_geo.tauMudet.ZFe)
            taumuondetector.SetRpcDimensions(ship_geo.tauMudet.XRpc,
                                             ship_geo.tauMudet.YRpc,
                                             ship_geo.tauMudet.ZRpc)
            taumuondetector.SetRpcGasDimensions(ship_geo.tauMudet.XGas,
                                                ship_geo.tauMudet.YGas,
                                                ship_geo.tauMudet.ZGas)
            taumuondetector.SetRpcStripDimensions(ship_geo.tauMudet.XStrip,
                                                  ship_geo.tauMudet.YStrip,
                                                  ship_geo.tauMudet.ZStrip)
            taumuondetector.SetRpcElectrodeDimensions(ship_geo.tauMudet.XEle,
                                                      ship_geo.tauMudet.YEle,
                                                      ship_geo.tauMudet.ZEle)
            taumuondetector.SetRpcPETDimensions(ship_geo.tauMudet.XPet,
                                                ship_geo.tauMudet.YPet,
                                                ship_geo.tauMudet.ZPet)
            taumuondetector.SetNFeInArm(ship_geo.tauMudet.NFe)
            taumuondetector.SetNRpcInArm(ship_geo.tauMudet.NRpc)
            taumuondetector.SetPillarDimensions(ship_geo.tauMudet.PillarX,
                                                ship_geo.tauMudet.PillarY,
                                                ship_geo.tauMudet.PillarZ)
            detectorList.append(taumuondetector)
            if ship_geo.nuTauTargetDesign == 3:
                taumuondetector.SetRpcDimDifferences(ship_geo.tauMudet.deltax,
                                                     ship_geo.tauMudet.deltay)
            if ship_geo.nuTauTargetDesign < 3:
                taumuondetector.SetReturnYokeDimensions(
                    ship_geo.tauMudet.XRyoke, ship_geo.tauMudet.YRyoke,
                    ship_geo.tauMudet.ZRyoke)
                taumuondetector.SetSmallerYokeDimensions(
                    ship_geo.tauMudet.XRyoke_s, ship_geo.tauMudet.YRyoke_s,
                    ship_geo.tauMudet.ZRyoke_s)
                taumuondetector.SetZDimensionArm(ship_geo.tauMudet.ZArm)
                taumuondetector.SetGapDownstream(ship_geo.tauMudet.GapD)
                taumuondetector.SetGapMiddle(ship_geo.tauMudet.GapM)
                taumuondetector.SetMagneticField(ship_geo.tauMudet.B)
                taumuondetector.SetCoilParameters(ship_geo.tauMudet.CoilH,
                                                  ship_geo.tauMudet.CoilW,
                                                  ship_geo.tauMudet.N,
                                                  ship_geo.tauMudet.CoilG)

            if ship_geo.nuTauTargetDesign == 0 or ship_geo.nuTauTargetDesign == 1 or ship_geo.nuTauTargetDesign == 3:
                EmuMagnet = ROOT.EmulsionMagnet("EmuMagnet",
                                                ship_geo.EmuMagnet.zC,
                                                "EmulsionMagnet")
                EmuMagnet.SetDesign(ship_geo.EmuMagnet.Design)
                EmuMagnet.SetGaps(ship_geo.EmuMagnet.GapUp,
                                  ship_geo.EmuMagnet.GapDown)
                EmuMagnet.SetMagneticField(ship_geo.EmuMagnet.B)
                EmuMagnet.SetMagnetSizes(ship_geo.EmuMagnet.X,
                                         ship_geo.EmuMagnet.Y,
                                         ship_geo.EmuMagnet.Z)
                if ship_geo.nuTauTargetDesign == 0 or ship_geo.nuTauTargetDesign == 1:
                    EmuMagnet.SetCoilParameters(ship_geo.EmuMagnet.Radius,
                                                ship_geo.EmuMagnet.Height1,
                                                ship_geo.EmuMagnet.Height2,
                                                ship_geo.EmuMagnet.Distance)
                if ship_geo.nuTauTargetDesign == 3:
                    EmuMagnet.SetCoilParameters(ship_geo.EmuMagnet.CoilX,
                                                ship_geo.EmuMagnet.CoilY,
                                                ship_geo.EmuMagnet.Height1,
                                                ship_geo.EmuMagnet.Height2,
                                                ship_geo.EmuMagnet.Thickness)
                    EmuMagnet.SetCutDimensions(ship_geo.EmuMagnet.CutLength,
                                               ship_geo.EmuMagnet.CutHeight)
                EmuMagnet.SetMagnetColumn(ship_geo.EmuMagnet.ColX,
                                          ship_geo.EmuMagnet.ColY,
                                          ship_geo.EmuMagnet.ColZ)
                EmuMagnet.SetBaseDim(ship_geo.EmuMagnet.BaseX,
                                     ship_geo.EmuMagnet.BaseY,
                                     ship_geo.EmuMagnet.BaseZ)
                EmuMagnet.SetPillarDimensions(ship_geo.EmuMagnet.PillarX,
                                              ship_geo.EmuMagnet.PillarY,
                                              ship_geo.EmuMagnet.PillarZ)
                detectorList.append(EmuMagnet)
            if ship_geo.nuTauTargetDesign == 2:
                EmuMagnet = ROOT.EmulsionMagnet()

            NuTauTarget = ROOT.Target("NuTauTarget",
                                      ship_geo.NuTauTarget.Ydist, ROOT.kTRUE)
            NuTauTarget.MakeNuTargetPassive(
                ship_geo.NuTauTarget.nuTargetPassive)
            NuTauTarget.MergeTopBot(ship_geo.NuTauTarget.SingleEmFilm)
            NuTauTarget.SetDetectorDesign(ship_geo.NuTauTarget.Design)
            if ship_geo.nuTauTargetDesign != 3:
                NuTauTarget.SetCenterZ(ship_geo.NuTauTarget.zC)
            if ship_geo.nuTauTargetDesign == 3:
                NuTauTarget.SetCenterZ(
                    ship_geo.EmuMagnet.zC
                )  #now the centers of emumagnet and nutautarget are different (target does not include HPT)
                NuTauTarget.SetNumberTargets(ship_geo.NuTauTarget.target)
                NuTauTarget.SetHpTParam(ship_geo.tauHPT.nHPT,
                                        ship_geo.tauHPT.distHPT,
                                        ship_geo.tauHPT.DZ)
            NuTauTarget.SetNumberBricks(ship_geo.NuTauTarget.col,
                                        ship_geo.NuTauTarget.row,
                                        ship_geo.NuTauTarget.wall)
            NuTauTarget.SetDetectorDimension(ship_geo.NuTauTarget.xdim,
                                             ship_geo.NuTauTarget.ydim,
                                             ship_geo.NuTauTarget.zdim)
            NuTauTarget.SetEmulsionParam(
                ship_geo.NuTauTarget.EmTh, ship_geo.NuTauTarget.EmX,
                ship_geo.NuTauTarget.EmY, ship_geo.NuTauTarget.PBTh,
                ship_geo.NuTauTarget.EPlW, ship_geo.NuTauTarget.LeadTh,
                ship_geo.NuTauTarget.AllPW)
            NuTauTarget.SetBrickParam(ship_geo.NuTauTarget.BrX,
                                      ship_geo.NuTauTarget.BrY,
                                      ship_geo.NuTauTarget.BrZ,
                                      ship_geo.NuTauTarget.BrPackX,
                                      ship_geo.NuTauTarget.BrPackY,
                                      ship_geo.NuTauTarget.BrPackZ)
            NuTauTarget.SetCESParam(ship_geo.NuTauTarget.RohG,
                                    ship_geo.NuTauTarget.LayerCESW,
                                    ship_geo.NuTauTarget.CESW,
                                    ship_geo.NuTauTarget.CESPack)
            NuTauTarget.SetCellParam(ship_geo.NuTauTarget.CellW)
            if ship_geo.nuTauTargetDesign == 0 or ship_geo.nuTauTargetDesign == 1:
                NuTauTarget.SetMagnetHeight(ship_geo.EmuMagnet.Y)
                NuTauTarget.SetColumnHeight(ship_geo.EmuMagnet.ColY)
                NuTauTarget.SetBaseHeight(ship_geo.EmuMagnet.BaseY)
                NuTauTarget.SetCoilUpHeight(ship_geo.EmuMagnet.Height1)
                NuTauTarget.SetCoilDownHeight(ship_geo.EmuMagnet.Height2)
            if ship_geo.nuTauTargetDesign != 2:
                NuTauTarget.SetMagneticField(ship_geo.EmuMagnet.B)
            if ship_geo.nuTauTargetDesign == 2:
                NuTauTarget.SetPillarDimension(ship_geo.NuTauTarget.PillarX,
                                               ship_geo.NuTauTarget.PillarY,
                                               ship_geo.NuTauTarget.PillarZ)
                NuTauTarget.SetBaseDimension(ship_geo.NuTauTarget.BaseX,
                                             ship_geo.NuTauTarget.BaseY,
                                             ship_geo.NuTauTarget.BaseZ)

            NuTauTT = ROOT.TargetTracker("TargetTrackers", ROOT.kTRUE)
            NuTauTT.SetDesign(ship_geo.NuTauTT.design)
            NuTauTT.SetTargetTrackerParam(ship_geo.NuTauTT.TTX,
                                          ship_geo.NuTauTT.TTY,
                                          ship_geo.NuTauTT.TTZ)
            NuTauTT.SetBrickParam(ship_geo.NuTauTarget.CellW)
            NuTauTT.SetTotZDimension(ship_geo.NuTauTarget.zdim)
            NuTauTT.SetNumberTT(ship_geo.NuTauTT.n)

            #method of nutau target that must be called after TT parameter definition
            NuTauTarget.SetTTzdimension(ship_geo.NuTauTT.TTZ)

            detectorList.append(NuTauTarget)
            detectorList.append(NuTauTT)

            tauHpt = ROOT.Hpt("HighPrecisionTrackers", ship_geo.tauHPT.DX,
                              ship_geo.tauHPT.DY, ship_geo.tauHPT.DZ,
                              ROOT.kTRUE)
            tauHpt.SetZsize(ship_geo.tauMudet.Ztot)
            tauHpt.SetDesign(ship_geo.NuTauTarget.Design)
            if ship_geo.nuTauTargetDesign < 3:
                tauHpt.SetConcreteBaseDim(ship_geo.tauHPT.ConcreteX,
                                          ship_geo.tauHPT.ConcreteY,
                                          ship_geo.tauHPT.ConcreteZ)
            if ship_geo.nuTauTargetDesign == 3:
                tauHpt.SetHPTNumber(ship_geo.tauHPT.nHPT)
                tauHpt.SetDistanceHPTs(ship_geo.tauHPT.distHPT)
                tauHpt.SetSurroundingDetHeight(ship_geo.tauHPT.SRDY)
                tauHpt.GetMagnetGeometry(ship_geo.EmuMagnet.zC,
                                         ship_geo.EmuMagnet.Y)
                tauHpt.GetNumberofTargets(ship_geo.NuTauTarget.target)
            detectorList.append(tauHpt)

    # for backward compatibility
    if not hasattr(ship_geo.strawtubes, "YPlaneOffset"):
        ship_geo.strawtubes.YLayerOffset = ship_geo.strawtubes.StrawPitch / 2.
        ship_geo.strawtubes.YPlaneOffset = ship_geo.strawtubes.StrawPitch / 4.
    if ship_geo.strawDesign > 1:
        # for backward compatibility
        if ship_geo.strawDesign == 10 and not hasattr(ship_geo.strawtubes,
                                                      "DeltazFrame"):
            ship_geo.strawtubes.DeltazFrame = 2.5 * u.cm
            ship_geo.strawtubes.FrameLateralWidth = 1.2 * u.m
            ship_geo.strawtubes.FrameMaterial = "steel"
        elif not hasattr(ship_geo.strawtubes, "DeltazFrame"):
            ship_geo.strawtubes.DeltazFrame = 10. * u.cm
            ship_geo.strawtubes.FrameLateralWidth = 1. * u.cm
            ship_geo.strawtubes.FrameMaterial = "aluminium"

        Strawtubes = ROOT.strawtubes("Strawtubes", ROOT.kTRUE)
        Strawtubes.SetZpositions(ship_geo.vetoStation.z,
                                 ship_geo.TrackStation1.z,
                                 ship_geo.TrackStation2.z,
                                 ship_geo.TrackStation3.z,
                                 ship_geo.TrackStation4.z)
        Strawtubes.SetDeltazFrame(ship_geo.strawtubes.DeltazFrame)
        Strawtubes.SetFrameLateralWidth(ship_geo.strawtubes.FrameLateralWidth)
        Strawtubes.SetFrameMaterial(ship_geo.strawtubes.FrameMaterial)
        Strawtubes.SetDeltazView(ship_geo.strawtubes.DeltazView)
        Strawtubes.SetInnerStrawDiameter(
            ship_geo.strawtubes.InnerStrawDiameter)
        Strawtubes.SetOuterStrawDiameter(
            ship_geo.strawtubes.OuterStrawDiameter)
        Strawtubes.SetStrawPitch(ship_geo.strawtubes.StrawPitch,
                                 ship_geo.strawtubes.YLayerOffset,
                                 ship_geo.strawtubes.YPlaneOffset)
        Strawtubes.SetDeltazLayer(ship_geo.strawtubes.DeltazLayer)
        Strawtubes.SetDeltazPlane(ship_geo.strawtubes.DeltazPlane)
        Strawtubes.SetStrawsPerLayer(ship_geo.strawtubes.StrawsPerLayer)
        Strawtubes.SetStereoAngle(ship_geo.strawtubes.ViewAngle)
        Strawtubes.SetWireThickness(ship_geo.strawtubes.WireThickness)
        Strawtubes.SetVacBox_x(ship_geo.strawtubes.VacBox_x)
        Strawtubes.SetVacBox_y(ship_geo.strawtubes.VacBox_y)
        Strawtubes.SetStrawLength(ship_geo.strawtubes.StrawLength)

        if hasattr(ship_geo.strawtubes, "StrawLengthVeto"):
            Strawtubes.SetStrawLengthVeto(ship_geo.strawtubes.StrawLengthVeto)
            Strawtubes.SetStrawLength12(ship_geo.strawtubes.StrawLength12)
            Strawtubes.SetVetoYDim(ship_geo.strawtubes.vetoydim)
            Strawtubes.SetTr12YDim(ship_geo.strawtubes.tr12ydim)
            Strawtubes.SetTr34YDim(ship_geo.strawtubes.tr34ydim)
        else:
            Strawtubes.SetStrawLengthVeto(ship_geo.strawtubes.StrawLength)
            Strawtubes.SetStrawLength12(ship_geo.strawtubes.StrawLength)
            Strawtubes.SetVetoYDim(ship_geo.Yheight / 2.)
            Strawtubes.SetTr12YDim(ship_geo.Yheight / 2.)
            Strawtubes.SetTr34YDim(ship_geo.Yheight / 2.)
        # for the digitizing step
        Strawtubes.SetStrawResolution(
            getParameter("strawtubes.v_drift", ship_geo, latestShipGeo),
            getParameter("strawtubes.sigma_spatial", ship_geo, latestShipGeo))
        detectorList.append(Strawtubes)

    if ship_geo.EcalOption == 1:  # shashlik design TP
        if ship_geo.preshowerOption > 0:
            Preshower = ROOT.preshower("Preshower", ROOT.kTRUE)
            Preshower.SetZStationPosition2(ship_geo.PreshowerStation0.z,
                                           ship_geo.PreshowerStation1.z)
            Preshower.SetZFilterPosition2(ship_geo.PreshowerFilter0.z,
                                          ship_geo.PreshowerFilter1.z)
            Preshower.SetXMax(ship_geo.Preshower.XMax)
            Preshower.SetYMax(ship_geo.Preshower.YMax)
            Preshower.SetActiveThickness(ship_geo.Preshower.ActiveThickness)
            Preshower.SetFilterThickness2(ship_geo.Preshower.FilterThickness0,
                                          ship_geo.Preshower.FilterThickness1)
            detectorList.append(Preshower)

        ecal, EcalZSize = posEcal(ship_geo.ecal.z, ship_geo.ecal.File)
        detectorList.append(ecal)

    if ship_geo.EcalOption == 2:  # splitCal with pointing information
        SplitCal = ROOT.splitcal("SplitCal", ROOT.kTRUE)
        x = ship_geo.SplitCal
        SplitCal.SetThickness(x.ActiveECALThickness, x.ActiveHCALThickness,
                              x.FilterECALThickness,
                              x.FilterECALThickness_first,
                              x.FilterHCALThickness,
                              x.ActiveECAL_gas_Thickness)
        SplitCal.SetMaterial(x.ActiveECALMaterial, x.ActiveHCALMaterial,
                             x.FilterECALMaterial, x.FilterHCALMaterial)
        SplitCal.SetNSamplings(x.nECALSamplings, x.nHCALSamplings,
                               x.ActiveHCAL)
        SplitCal.SetZStart(x.ZStart)
        SplitCal.SetXMax(x.XMax)
        SplitCal.SetYMax(x.YMax)
        SplitCal.SetEmpty(x.Empty, x.BigGap, x.ActiveECAL_gas_gap,
                          x.first_precision_layer, x.second_precision_layer,
                          x.third_precision_layer, x.num_precision_layers)
        SplitCal.SetNModules(x.NModulesInX, x.NModulesInY)
        SplitCal.SetNStrips(x.NStripsPerModule)
        SplitCal.SetStripSize(x.StripHalfWidth, x.StripHalfLength)
        detectorList.append(SplitCal)

    if not ship_geo.HcalOption < 0:
        hcal, HcalZSize = posHcal(ship_geo.hcal.z, ship_geo.hcal.File,
                                  ship_geo.HcalOption)
        if ship_geo.HcalOption != 2 and abs(ship_geo.hcal.hcalSpace -
                                            HcalZSize) > 10 * u.cm:
            print 'mismatch between hcalsize in geo file and python configuration'
            print ship_geo.hcal.hcalSpace - HcalZSize, ship_geo.hcal.hcalSpace, HcalZSize
        detectorList.append(hcal)
    Muon = ROOT.muon("Muon", ROOT.kTRUE)
    Muon.SetZStationPositions(ship_geo.MuonStation0.z, ship_geo.MuonStation1.z,
                              ship_geo.MuonStation2.z, ship_geo.MuonStation3.z)
    Muon.SetZFilterPositions(ship_geo.MuonFilter0.z, ship_geo.MuonFilter1.z,
                             ship_geo.MuonFilter2.z)
    Muon.SetXMax(ship_geo.Muon.XMax)
    Muon.SetYMax(ship_geo.Muon.YMax)
    Muon.SetActiveThickness(ship_geo.Muon.ActiveThickness)
    Muon.SetFilterThickness(ship_geo.Muon.FilterThickness)
    detectorList.append(Muon)

    timeDet = ROOT.TimeDet("TimeDet", ROOT.kTRUE)
    timeDet.SetZposition(ship_geo.TimeDet.z)
    timeDet.SetBarZspacing(ship_geo.TimeDet.dzBarRow,
                           ship_geo.TimeDet.dzBarCol)
    timeDet.SetBarZ(ship_geo.TimeDet.zBar)
    timeDet.SetSizeX(2 * ship_geo.TimeDet.DX)
    timeDet.SetSizeY(2 * ship_geo.TimeDet.DY)
    detectorList.append(timeDet)

    #-----   Magnetic field   -------------------------------------------
    if not hasattr(ship_geo.Bfield, "fieldMap"):
        if ship_geo.strawDesign == 4 or ship_geo.strawDesign == 10:
            fMagField = ROOT.ShipBellField("wilfried", ship_geo.Bfield.max,
                                           ship_geo.Bfield.z, 2,
                                           ship_geo.Yheight / 2. * u.m)
        else:
            fMagField = ROOT.ShipBellField("wilfried", ship_geo.Bfield.max,
                                           ship_geo.Bfield.z, 1,
                                           ship_geo.Yheight / 2. * u.m)
        if ship_geo.muShieldDesign == 6:
            fMagField.IncludeTarget(ship_geo.target.xy, ship_geo.target.z0,
                                    ship_geo.target.length)
        run.SetField(fMagField)
#
    exclusionList = []
    #exclusionList = ["Muon","Ecal","Hcal","Strawtubes","TargetTrackers","NuTauTarget","HighPrecisionTrackers",\
    #                 "Veto","Magnet","MuonShield","TargetStation","NuTauMudet","EmuMagnet", "TimeDet"]
    for x in detectorList:
        if x.GetName() in exclusionList: continue
        run.AddModule(x)


# return list of detector elements
    detElements = {}
    for x in run.GetListOfModules():
        detElements[x.GetName()] = x
    return detElements
示例#6
0
    c.Yheight = Yheight * u.m
    # decision by the SP
    totalLength = 2.5 * c.Yheight + 35 * u.m
    extraVesselLength = totalLength - 50 * u.m
    windowBulge = 1 * u.m
    if tankDesign > 5: windowBulge = 25 * u.cm
    #
    magnet_design = 2
    if tankDesign == 5: magnet_design = 3
    if tankDesign == 6: magnet_design = 4
    #
    c.strawDesign = strawDesign
    c.tankDesign = tankDesign
    c.magnetDesign = magnet_design
    # cave parameters
    c.cave = AttrDict(z=0 * u.cm)
    c.cave.floorHeightMuonShield = 5 * u.m
    c.cave.floorHeightTankA = 4.2 * u.m
    if strawDesign == 10:
        c.cave.floorHeightMuonShield = c.cave.floorHeightTankA  # avoid the gap, for 2018 geometry
    c.cave.floorHeightTankB = 2 * u.m
    #
    #neutrino detector
    c.nuTauTargetDesign = nuTauTargetDesign

    c.chambers = AttrDict(z=0 * u.cm)
    magnetIncrease = 100. * u.cm
    # make z coordinates for the decay volume and tracking stations relative to T4z
    # eventually, the only parameter which needs to be changed when the active shielding lenght changes.
    z4 = 2438. * u.cm + magnetIncrease + extraVesselLength
    if strawDesign != 4 and strawDesign != 10:
示例#7
0
def configure(run, ship_geo):
    # ---- for backward compatibility ----
    if not hasattr(ship_geo, "tankDesign"): ship_geo.tankDesign = 4
    if not hasattr(ship_geo.hcal, "File"): ship_geo.hcal.File = "hcal.geo"
    if not hasattr(ship_geo.Bfield, 'x'): ship_geo.Bfield.x = 3. * u.m
    if not hasattr(ship_geo, 'cave'):
        ship_geo.cave = AttrDict(z=0 * u.cm)
        ship_geo.cave.floorHeightMuonShield = 5 * u.m
        ship_geo.cave.floorHeightTankA = 4.5 * u.m
        ship_geo.cave.floorHeightTankB = 2. * u.m
    latestShipGeo = ConfigRegistry.loadpy(
        "$FAIRSHIP/geometry/geometry_config.py",
        Yheight=ship_geo.Yheight / u.m,
        tankDesign=ship_geo.tankDesign,
        muShieldDesign=ship_geo.muShieldDesign,
        nuTauTargetDesign=ship_geo.nuTauTargetDesign)
    # -----Create media-------------------------------------------------
    run.SetMaterials("media.geo")  # Materials
    # ------------------------------------------------------------------------

    # -----Create geometry----------------------------------------------
    cave = ROOT.ShipCave("CAVE")
    if ship_geo.tankDesign < 5: cave.SetGeometryFileName("cave.geo")
    else: cave.SetGeometryFileName("caveWithAir.geo")
    detectorList.append(cave)

    if ship_geo.muShieldDesign == 6 or ship_geo.muShieldDesign == 7:  # magnetized hadron absorber defined in ShipMuonShield
        TargetStation = ROOT.ShipTargetStation("TargetStation",
                                               ship_geo.target.length,
                                               ship_geo.target.z,
                                               ship_geo.targetOpt,
                                               ship_geo.target.sl)
    else:
        TargetStation = ROOT.ShipTargetStation(
            "TargetStation", ship_geo.target.length,
            ship_geo.hadronAbsorber.length, ship_geo.target.z,
            ship_geo.hadronAbsorber.z, ship_geo.targetOpt, ship_geo.target.sl)

    if ship_geo.targetOpt > 10:
        slices_length = ROOT.std.vector('float')()
        slices_material = ROOT.std.vector('std::string')()
        for i in range(1, ship_geo.targetOpt + 1):
            slices_length.push_back(eval("ship_geo.target.L" + str(i)))
            slices_material.push_back(eval("ship_geo.target.M" + str(i)))
        TargetStation.SetLayerPosMat(ship_geo.target.xy, slices_length,
                                     slices_material)
    detectorList.append(TargetStation)

    if ship_geo.muShieldDesign == 1:
        MuonShield = ROOT.ShipMuonShield("MuonShield",ship_geo.muShieldDesign,"ShipMuonShield",ship_geo.muShield.z,ship_geo.muShield.dZ0,ship_geo.muShield.length,\
                                         ship_geo.muShield.LE)
    elif ship_geo.muShieldDesign == 2:
        MuonShield = ROOT.ShipMuonShield("MuonShield",ship_geo.muShieldDesign,"ShipMuonShield",ship_geo.muShield.z,ship_geo.muShield.dZ0,ship_geo.muShield.dZ1,\
                     ship_geo.muShield.dZ2,ship_geo.muShield.dZ3,ship_geo.muShield.dZ4,ship_geo.muShield.dZ5,ship_geo.muShield.dZ6,ship_geo.muShield.LE)
    elif ship_geo.muShieldDesign == 3 or ship_geo.muShieldDesign == 4 or ship_geo.muShieldDesign == 5 or ship_geo.muShieldDesign == 6 or ship_geo.muShieldDesign == 7:
        if not hasattr(ship_geo.muShield, "Field"):
            MuonShield = ROOT.ShipMuonShield("MuonShield",ship_geo.muShieldDesign,"ShipMuonShield",ship_geo.muShield.z,ship_geo.muShield.dZ0,ship_geo.muShield.dZ1,\
                        ship_geo.muShield.dZ2,ship_geo.muShield.dZ3,ship_geo.muShield.dZ4,ship_geo.muShield.dZ5,ship_geo.muShield.dZ6,\
                        ship_geo.muShield.dZ7,ship_geo.muShield.dZ8,ship_geo.muShield.dXgap,ship_geo.muShield.LE,ship_geo.Yheight*4./10., ship_geo.cave.floorHeightMuonShield)
        else:
            MuonShield = ROOT.ShipMuonShield("MuonShield",ship_geo.muShieldDesign,"ShipMuonShield",ship_geo.muShield.z,ship_geo.muShield.dZ0,ship_geo.muShield.dZ1,\
                        ship_geo.muShield.dZ2,ship_geo.muShield.dZ3,ship_geo.muShield.dZ4,ship_geo.muShield.dZ5,ship_geo.muShield.dZ6,\
                        ship_geo.muShield.dZ7,ship_geo.muShield.dZ8,ship_geo.muShield.dXgap,ship_geo.muShield.LE,ship_geo.Yheight*4./10.,\
                        ship_geo.cave.floorHeightMuonShield,ship_geo.muShield.Field)

    detectorList.append(MuonShield)

    magnet_design = 2
    if ship_geo.tankDesign == 5: magnet_design = 3
    if ship_geo.strawDesign > 1:
        magnet = ROOT.ShipMagnet("Magnet", "SHiP Magnet", ship_geo.Bfield.z,
                                 magnet_design, ship_geo.Bfield.x,
                                 ship_geo.Bfield.y,
                                 ship_geo.cave.floorHeightTankB)
    else:
        magnet = ROOT.ShipMagnet("Magnet", "SHiP Magnet", ship_geo.Bfield.z)
    detectorList.append(magnet)

    Veto = ROOT.veto("Veto", ROOT.kTRUE)  # vacuum tank
    Veto.SetLiquidVeto(1)  # liquid scintillator
    Veto.SetPlasticVeto(1)  # plastic scintillator

    Veto.SetZpositions(ship_geo.vetoStation.z, ship_geo.TrackStation1.z, ship_geo.TrackStation2.z, \
                       ship_geo.TrackStation3.z, ship_geo.TrackStation4.z,ship_geo.tankDesign)
    Veto.SetTubZpositions(ship_geo.Chamber1.z, ship_geo.Chamber2.z,
                          ship_geo.Chamber3.z, ship_geo.Chamber4.z,
                          ship_geo.Chamber5.z, ship_geo.Chamber6.z)
    Veto.SetTublengths(ship_geo.chambers.Tub1length,ship_geo.chambers.Tub2length,ship_geo.chambers.Tub3length, \
                       ship_geo.chambers.Tub4length,ship_geo.chambers.Tub5length,ship_geo.chambers.Tub6length)
    Veto.SetB(ship_geo.Yheight / 2.)
    Veto.SetFloorHeight(ship_geo.cave.floorHeightTankA,
                        ship_geo.cave.floorHeightTankB)
    if ship_geo.tankDesign == 5:
        dzX = ship_geo.zFocusX + ship_geo.target.z0
        x1 = ship_geo.xMax / (ship_geo.Chamber1.z -
                              ship_geo.chambers.Tub1length -
                              dzX) * (ship_geo.TrackStation4.z - dzX)
        dzY = ship_geo.zFocusY + ship_geo.target.z0
        y1 = ship_geo.Yheight / (ship_geo.Chamber1.z -
                                 ship_geo.chambers.Tub1length -
                                 dzY) * (ship_geo.TrackStation4.z - dzY)
        Veto.SetXYstart(x1, dzX, y1, dzY)
        Veto.SetVesselStructure(ship_geo.Veto.innerSupport,ship_geo.Veto.sensitiveThickness,ship_geo.Veto.outerSupport,\
                                ship_geo.Veto.innerSupportMed,ship_geo.Veto.lidThickness,ship_geo.Veto.sensitiveMed,\
                                ship_geo.Veto.outerSupportMed,ship_geo.Veto.decayMed,\
                                ship_geo.Veto.rib,ship_geo.Veto.ribMed)

    detectorList.append(Veto)

    if ship_geo.muShieldDesign not in [2, 3, 4] and hasattr(
            ship_geo.tauMS, 'Xtot'):
        taumagneticspectrometer = ROOT.MagneticSpectrometer(
            "MagneticSpectrometer", ship_geo.tauMS.zMSC, ROOT.kTRUE)
        taumagneticspectrometer.SetTotDimensions(ship_geo.tauMS.Xtot,
                                                 ship_geo.tauMS.Ytot,
                                                 ship_geo.tauMS.Ztot)
        taumagneticspectrometer.SetFeDimensions(ship_geo.tauMS.XFe,
                                                ship_geo.tauMS.YFe,
                                                ship_geo.tauMS.ZFe)
        taumagneticspectrometer.SetRpcDimensions(ship_geo.tauMS.XRpc,
                                                 ship_geo.tauMS.YRpc,
                                                 ship_geo.tauMS.ZRpc)
        taumagneticspectrometer.SetRpcGasDimensions(ship_geo.tauMS.XGas,
                                                    ship_geo.tauMS.YGas,
                                                    ship_geo.tauMS.ZGas)
        taumagneticspectrometer.SetRpcStripDimensions(ship_geo.tauMS.XStrip,
                                                      ship_geo.tauMS.YStrip,
                                                      ship_geo.tauMS.ZStrip)
        taumagneticspectrometer.SetRpcElectrodeDimensions(
            ship_geo.tauMS.XEle, ship_geo.tauMS.YEle, ship_geo.tauMS.ZEle)
        taumagneticspectrometer.SetRpcPETDimensions(ship_geo.tauMS.XPet,
                                                    ship_geo.tauMS.YPet,
                                                    ship_geo.tauMS.ZPet)
        taumagneticspectrometer.SetReturnYokeDimensions(
            ship_geo.tauMS.XRyoke, ship_geo.tauMS.YRyoke,
            ship_geo.tauMS.ZRyoke)
        taumagneticspectrometer.SetSmallerYokeDimensions(
            ship_geo.tauMS.XRyoke_s, ship_geo.tauMS.YRyoke_s,
            ship_geo.tauMS.ZRyoke_s)
        taumagneticspectrometer.SetZDimensionArm(ship_geo.tauMS.ZArm)
        taumagneticspectrometer.SetGapDownstream(ship_geo.tauMS.GapD)
        taumagneticspectrometer.SetGapMiddle(ship_geo.tauMS.GapM)
        taumagneticspectrometer.SetNFeInArm(ship_geo.tauMS.NFe)
        taumagneticspectrometer.SetNRpcInArm(ship_geo.tauMS.NRpc)
        taumagneticspectrometer.SetMagneticField(ship_geo.tauMS.B)
        taumagneticspectrometer.SetCoilParameters(ship_geo.tauMS.CoilH,
                                                  ship_geo.tauMS.CoilW,
                                                  ship_geo.tauMS.N,
                                                  ship_geo.tauMS.CoilG)
        taumagneticspectrometer.SetPillarDimensions(ship_geo.tauMS.PillarX,
                                                    ship_geo.tauMS.PillarY,
                                                    ship_geo.tauMS.PillarZ)
        detectorList.append(taumagneticspectrometer)

        tauHpt = ROOT.Hpt("HighPrecisionTrackers", ship_geo.tauHPT.DX,
                          ship_geo.tauHPT.DY, ship_geo.tauHPT.DZ, ROOT.kTRUE)
        tauHpt.SetZsize(ship_geo.tauMS.Ztot)
        tauHpt.SetConcreteBaseDim(ship_geo.tauHPT.ConcreteX,
                                  ship_geo.tauHPT.ConcreteY,
                                  ship_geo.tauHPT.ConcreteZ)
        detectorList.append(tauHpt)

        if ship_geo.nuTauTargetDesign == 0 or ship_geo.nuTauTargetDesign == 1:
            EmuMagnet = ROOT.EmulsionMagnet("EmuMagnet", ship_geo.EmuMagnet.zC,
                                            "EmulsionMagnet")
            EmuMagnet.SetDesign(ship_geo.EmuMagnet.Design)
            EmuMagnet.SetGaps(ship_geo.EmuMagnet.GapUp,
                              ship_geo.EmuMagnet.GapDown)
            EmuMagnet.SetMagneticField(ship_geo.EmuMagnet.B)
            EmuMagnet.SetMagnetSizes(ship_geo.EmuMagnet.X,
                                     ship_geo.EmuMagnet.Y,
                                     ship_geo.EmuMagnet.Z)
            EmuMagnet.SetCoilParameters(ship_geo.EmuMagnet.Radius,
                                        ship_geo.EmuMagnet.Height1,
                                        ship_geo.EmuMagnet.Height2,
                                        ship_geo.EmuMagnet.Distance)
            EmuMagnet.SetMagnetColumn(ship_geo.EmuMagnet.ColX,
                                      ship_geo.EmuMagnet.ColY,
                                      ship_geo.EmuMagnet.ColZ)
            EmuMagnet.SetBaseDim(ship_geo.EmuMagnet.BaseX,
                                 ship_geo.EmuMagnet.BaseY,
                                 ship_geo.EmuMagnet.BaseZ)
            EmuMagnet.SetPillarDimensions(ship_geo.EmuMagnet.PillarX,
                                          ship_geo.EmuMagnet.PillarY,
                                          ship_geo.EmuMagnet.PillarZ)
            detectorList.append(EmuMagnet)
        if ship_geo.nuTauTargetDesign == 2:
            EmuMagnet = ROOT.EmulsionMagnet()

        NuTauTarget = ROOT.Target("NuTauTarget", ship_geo.NuTauTarget.Ydist,
                                  ROOT.kTRUE)
        NuTauTarget.MakeNuTargetPassive(ship_geo.NuTauTarget.nuTargetPassive)
        NuTauTarget.SetDetectorDesign(ship_geo.NuTauTarget.Design)
        NuTauTarget.SetCenterZ(ship_geo.NuTauTarget.zC)
        NuTauTarget.SetNumberBricks(ship_geo.NuTauTarget.col,
                                    ship_geo.NuTauTarget.row,
                                    ship_geo.NuTauTarget.wall)
        NuTauTarget.SetDetectorDimension(ship_geo.NuTauTarget.xdim,
                                         ship_geo.NuTauTarget.ydim,
                                         ship_geo.NuTauTarget.zdim)
        NuTauTarget.SetEmulsionParam(
            ship_geo.NuTauTarget.EmTh, ship_geo.NuTauTarget.EmX,
            ship_geo.NuTauTarget.EmY, ship_geo.NuTauTarget.PBTh,
            ship_geo.NuTauTarget.EPlW, ship_geo.NuTauTarget.LeadTh,
            ship_geo.NuTauTarget.AllPW)

        NuTauTarget.SetBrickParam(ship_geo.NuTauTarget.BrX,
                                  ship_geo.NuTauTarget.BrY,
                                  ship_geo.NuTauTarget.BrZ,
                                  ship_geo.NuTauTarget.BrPackX,
                                  ship_geo.NuTauTarget.BrPackY,
                                  ship_geo.NuTauTarget.BrPackZ)
        NuTauTarget.SetCESParam(ship_geo.NuTauTarget.RohG,
                                ship_geo.NuTauTarget.LayerCESW,
                                ship_geo.NuTauTarget.CESW,
                                ship_geo.NuTauTarget.CESPack)
        NuTauTarget.SetCellParam(ship_geo.NuTauTarget.CellW)
        if ship_geo.nuTauTargetDesign == 0 or ship_geo.nuTauTargetDesign == 1:
            NuTauTarget.SetMagneticField(ship_geo.EmuMagnet.B)
            NuTauTarget.SetMagnetHeight(ship_geo.EmuMagnet.Y)
            NuTauTarget.SetColumnHeight(ship_geo.EmuMagnet.ColY)
            NuTauTarget.SetBaseHeight(ship_geo.EmuMagnet.BaseY)
            NuTauTarget.SetCoilUpHeight(ship_geo.EmuMagnet.Height1)
            NuTauTarget.SetCoilDownHeight(ship_geo.EmuMagnet.Height2)
        if ship_geo.nuTauTargetDesign == 2:
            NuTauTarget.SetPillarDimension(ship_geo.NuTauTarget.PillarX,
                                           ship_geo.NuTauTarget.PillarY,
                                           ship_geo.NuTauTarget.PillarZ)
            NuTauTarget.SetBaseDimension(ship_geo.NuTauTarget.BaseX,
                                         ship_geo.NuTauTarget.BaseY,
                                         ship_geo.NuTauTarget.BaseZ)

        NuTauTT = ROOT.TargetTracker("TargetTrackers", ROOT.kTRUE)
        NuTauTT.SetNumberTT(ship_geo.NuTauTT.n)
        NuTauTT.SetTargetTrackerParam(ship_geo.NuTauTT.TTX,
                                      ship_geo.NuTauTT.TTY,
                                      ship_geo.NuTauTT.TTZ)
        NuTauTT.SetBrickParam(ship_geo.NuTauTarget.CellW)
        NuTauTT.SetTotZDimension(ship_geo.NuTauTarget.zdim)

        #method of nutau target that must be called after TT parameter definition
        NuTauTarget.SetTTzdimension(ship_geo.NuTauTT.TTZ)

        detectorList.append(NuTauTarget)
        detectorList.append(NuTauTT)

    if ship_geo.strawDesign > 1:
        Strawtubes = ROOT.strawtubes("Strawtubes", ROOT.kTRUE)
        Strawtubes.SetZpositions(ship_geo.vetoStation.z,
                                 ship_geo.TrackStation1.z,
                                 ship_geo.TrackStation2.z,
                                 ship_geo.TrackStation3.z,
                                 ship_geo.TrackStation4.z)
        Strawtubes.SetDeltazView(ship_geo.strawtubes.DeltazView)
        Strawtubes.SetInnerStrawDiameter(
            ship_geo.strawtubes.InnerStrawDiameter)
        Strawtubes.SetOuterStrawDiameter(
            ship_geo.strawtubes.OuterStrawDiameter)
        Strawtubes.SetStrawPitch(ship_geo.strawtubes.StrawPitch)
        Strawtubes.SetDeltazLayer(ship_geo.strawtubes.DeltazLayer)
        Strawtubes.SetDeltazPlane(ship_geo.strawtubes.DeltazPlane)
        Strawtubes.SetStrawsPerLayer(ship_geo.strawtubes.StrawsPerLayer)
        Strawtubes.SetStereoAngle(ship_geo.strawtubes.ViewAngle)
        Strawtubes.SetWireThickness(ship_geo.strawtubes.WireThickness)
        Strawtubes.SetVacBox_x(ship_geo.strawtubes.VacBox_x)
        Strawtubes.SetVacBox_y(ship_geo.strawtubes.VacBox_y)
        Strawtubes.SetStrawLength(ship_geo.strawtubes.StrawLength)

        if hasattr(ship_geo.strawtubes, "StrawLengthVeto"):
            Strawtubes.SetStrawLengthVeto(ship_geo.strawtubes.StrawLengthVeto)
            Strawtubes.SetStrawLength12(ship_geo.strawtubes.StrawLength12)
            Strawtubes.SetVetoYDim(ship_geo.strawtubes.vetoydim)
            Strawtubes.SetTr12YDim(ship_geo.strawtubes.tr12ydim)
            Strawtubes.SetTr34YDim(ship_geo.strawtubes.tr34ydim)
        else:
            Strawtubes.SetStrawLengthVeto(ship_geo.strawtubes.StrawLength)
            Strawtubes.SetStrawLength12(ship_geo.strawtubes.StrawLength)
            Strawtubes.SetVetoYDim(ship_geo.Yheight / 2.)
            Strawtubes.SetTr12YDim(ship_geo.Yheight / 2.)
            Strawtubes.SetTr34YDim(ship_geo.Yheight / 2.)
        # for the digitizing step
        Strawtubes.SetStrawResolution(
            getParameter("strawtubes.v_drift", ship_geo, latestShipGeo),
            getParameter("strawtubes.sigma_spatial", ship_geo, latestShipGeo))
        detectorList.append(Strawtubes)

    if ship_geo.preshowerOption > 0:
        Preshower = ROOT.preshower("Preshower", ROOT.kTRUE)
        Preshower.SetZStationPosition2(ship_geo.PreshowerStation0.z,
                                       ship_geo.PreshowerStation1.z)
        Preshower.SetZFilterPosition2(ship_geo.PreshowerFilter0.z,
                                      ship_geo.PreshowerFilter1.z)
        Preshower.SetXMax(ship_geo.Preshower.XMax)
        Preshower.SetYMax(ship_geo.Preshower.YMax)
        Preshower.SetActiveThickness(ship_geo.Preshower.ActiveThickness)
        Preshower.SetFilterThickness2(ship_geo.Preshower.FilterThickness0,
                                      ship_geo.Preshower.FilterThickness1)
        detectorList.append(Preshower)

    ecal, EcalZSize = posEcal(ship_geo.ecal.z, ship_geo.ecal.File)
    detectorList.append(ecal)

    if not ship_geo.HcalOption < 0:
        hcal, HcalZSize = posHcal(ship_geo.hcal.z, ship_geo.hcal.File)
        if abs(ship_geo.hcal.hcalSpace - HcalZSize) > 10 * u.cm:
            print 'mismatch between hcalsize in geo file and python configuration'
            print ship_geo.hcal.hcalSpace - HcalZSize, ship_geo.hcal.hcalSpace, HcalZSize
        detectorList.append(hcal)
    Muon = ROOT.muon("Muon", ROOT.kTRUE)
    Muon.SetZStationPositions(ship_geo.MuonStation0.z, ship_geo.MuonStation1.z,
                              ship_geo.MuonStation2.z, ship_geo.MuonStation3.z)
    Muon.SetZFilterPositions(ship_geo.MuonFilter0.z, ship_geo.MuonFilter1.z,
                             ship_geo.MuonFilter2.z)
    Muon.SetXMax(ship_geo.Muon.XMax)
    Muon.SetYMax(ship_geo.Muon.YMax)
    Muon.SetActiveThickness(ship_geo.Muon.ActiveThickness)
    Muon.SetFilterThickness(ship_geo.Muon.FilterThickness)
    detectorList.append(Muon)

    #-----   Magnetic field   -------------------------------------------
    if ship_geo.strawDesign == 4:
        fMagField = ROOT.ShipBellField("wilfried", ship_geo.Bfield.max,
                                       ship_geo.Bfield.z, 2,
                                       ship_geo.Yheight / 2. * u.m)
    else:
        fMagField = ROOT.ShipBellField("wilfried", ship_geo.Bfield.max,
                                       ship_geo.Bfield.z, 1,
                                       ship_geo.Yheight / 2. * u.m)
    if ship_geo.muShieldDesign == 6:
        fMagField.IncludeTarget(ship_geo.target.xy, ship_geo.target.z0,
                                ship_geo.target.length)
    run.SetField(fMagField)
    #
    exclusionList = []
    #exclusionList = ["Muon","Ecal","Hcal","Strawtubes","TargetTrackers","NuTauTarget","HighPrecisionTrackers",\
    #                 "Veto","Magnet","MuonShield","TargetStation","MagneticSpectrometer","EmuMagnet"]
    for x in detectorList:
        if x.GetName() in exclusionList: continue
        run.AddModule(x)


# return list of detector elements
    detElements = {}
    for x in run.GetListOfModules():
        detElements[x.GetName()] = x
    return detElements
示例#8
0
        HcalGeoFile = "hcal.geo"
if "emdesign" not in globals():
    emdesign = 0

with ConfigRegistry.register_config("basic") as c:
    # global muShieldDesign, targetOpt, strawDesign, Yheight
    c.Yheight = Yheight*u.m
    # decision by the SP 
    totalLength       = 2.5*c.Yheight + 35*u.m
    extraVesselLength = totalLength - 50*u.m
    windowBulge = 1*u.m
    if tankDesign > 5: windowBulge = 25*u.cm
    c.strawDesign = strawDesign
    c.tankDesign = tankDesign
# cave parameters
    c.cave = AttrDict(z=0*u.cm)
    c.cave.floorHeightMuonShield = 5*u.m
    c.cave.floorHeightTankA = 4.5*u.m
    c.cave.floorHeightTankB = 2*u.m
#
    #neutrino detector
    c.nuTauTargetDesign=nuTauTargetDesign

    c.chambers = AttrDict(z=0*u.cm)
    magnetIncrease    = 100.*u.cm
    # make z coordinates for the decay volume and tracking stations relative to T4z
    # eventually, the only parameter which needs to be changed when the active shielding lenght changes.
    z4=2438.*u.cm+magnetIncrease+extraVesselLength
    if strawDesign != 4 and strawDesign != 10 :
     print "this design ",strawDesign," is not supported, use strawDesign = 4 or 10"
     1/0 
示例#9
0
if "strawDesign" not in globals():
    strawDesign = 4
if "HcalOption" not in globals():
    HcalOption = 1
if "Yheight" not in globals():
    Yheight = 10.

with ConfigRegistry.register_config("basic") as c:
    # global muShieldDesign, targetOpt, strawDesign, Yheight
    c.Yheight = Yheight * u.m
    # decision by the SP
    totalLength = 2.5 * c.Yheight + 35 * u.m
    extraVesselLength = totalLength - 50 * u.m
    windowBulge = 1 * u.m
    c.strawDesign = strawDesign
    c.chambers = AttrDict(z=0 * u.cm)
    if strawDesign != 4:
        print "this design is not supported, use strawDesign = 4"
        1 / 0
    else:
        c.chambers.Length = totalLength
        magnetIncrease = 100. * u.cm
        c.chambers.Tub1length = 2.5 * u.m
        c.chambers.Tub2length = 17.68 * u.m + extraVesselLength / 2.
        c.chambers.Tub3length = 0.8 * u.m
        c.chambers.Tub4length = 2. * u.m + magnetIncrease / 2.
        c.chambers.Tub5length = 0.8 * u.m
        c.chambers.Tub6length = 0.1 * u.m + windowBulge / 2.
        c.chambers.Rmin = 245. * u.cm
        c.chambers.Rmax = 250. * u.cm
        # positions and lenghts of vacuum tube segments
示例#10
0
import shipunit as u
from ShipGeoConfig import AttrDict, ConfigRegistry
# the following params should be passed through 'ConfigRegistry.loadpy' method
# none for the moment
with ConfigRegistry.register_config("basic") as c:

    c.MufluxSpectrometer = AttrDict(z=0 * u.cm)
    # False = charm cross-section; True = muon flux measurement

    if "targetOpt" not in globals():
        targetOpt = 18  # add extra 20cm of tungsten as per 13/06/2017

    if "Setup" not in globals():  #muon flux or charm xsec measurement
        Setup = 0

    if "cTarget" not in globals():
        cTarget = 3

    if Setup == 0:
        c.MufluxSpectrometer.muflux = True
    else:
        c.MufluxSpectrometer.muflux = False

    c.target = AttrDict(z0=0 * u.cm)

    c.MufluxTargetStation = AttrDict(z0=0 * u.cm)
    c.MufluxTargetStation.absorber_x = 120 * u.cm
    c.MufluxTargetStation.absorber_y = 97.5 * u.cm
    c.MufluxTargetStation.absorbercutout_x = 102 * u.cm
    c.MufluxTargetStation.absorbercutout_y = 27.5 * u.cm
    c.MufluxTargetStation.ironshield_x = 20. * u.cm
示例#11
0
        HcalGeoFile = "hcal_rect.geo"
    else:
        HcalGeoFile = "hcal.geo"
if "preshowerOption" not in globals():
    preshowerOption = 0

with ConfigRegistry.register_config("basic") as c:
    # global muShieldDesign, targetOpt, strawDesign, Yheight
    c.Yheight = Yheight*u.m
    # decision by the SP 
    totalLength       = 2.5*c.Yheight + 35*u.m
    extraVesselLength = totalLength - 50*u.m
    windowBulge = 1*u.m
    c.strawDesign = strawDesign
    c.tankDesign = tankDesign
    c.chambers = AttrDict(z=0*u.cm)
    magnetIncrease    = 100.*u.cm
    # make z coordinates for the decay volume and tracking stations relative to T4z
    # eventually, the only parameter which needs to be changed when the active shielding lenght changes.
    z4=2438.*u.cm+magnetIncrease+extraVesselLength
    if strawDesign != 4:
     print "this design is not supported, use strawDesign = 4"
     1/0 
    else:
     c.chambers.Length = totalLength
     c.chambers.Tub1length = 2.5*u.m
     c.chambers.Tub2length = 17.68*u.m+extraVesselLength/2.
     c.chambers.Tub3length = 0.8*u.m
     c.chambers.Tub4length = 2.*u.m+magnetIncrease/2.
     c.chambers.Tub5length = 0.8*u.m
     c.chambers.Tub6length = 0.1*u.m+windowBulge/2.
import shipunit as u
from ShipGeoConfig import AttrDict, ConfigRegistry
# the following params should be passed through 'ConfigRegistry.loadpy' method
# none for the moment
with ConfigRegistry.register_config("basic") as c:
    c.target = AttrDict(z0=0*u.cm)
    c.Bfield = AttrDict(z=0*u.cm)
    c.Bfield.max = 0 # 1.4361*u.kilogauss for SHiP
    c.Bfield.y   = 1.*u.m # dummy value
    c.Bfield.x   = 3.*u.m # dummy value
    #BOX (Brick!)
    c.Box = AttrDict(z=0*u.cm)
    c.Box.BX = 13*u.cm
    c.Box.BY = 11*u.cm
    c.Box.BZ = 20*u.cm
    c.Box.zBox = 0 * u.cm
    c.Box.EmTh = 0.0045 * u.cm
    c.Box.EmX = 10 * u.cm #for the moment, replace the previous values for normal simulations
    c.Box.EmY = 10 * u.cm
    c.Box.PBTh = 0.0205 * u.cm
    c.Box.MolybdenumTh = 0.3 * u.cm
    c.Box.EPlW = 2* c.Box.EmTh + c.Box.PBTh
    c.Box.AllPW = c.Box.MolybdenumTh + c.Box.EPlW
    c.Box.BrX = 12.9 *u.cm
    c.Box.BrY = 10.5 *u.cm
    c.Box.BrPackZ = 0.1 * u.cm
    c.Box.BrPackX = c.Box.BrX - c.Box.EmX
    c.Box.BrPackY = c.Box.BrY - c.Box.EmY
    c.Box.BrZ = 54 * c.Box.AllPW + c.Box.EPlW +c.Box.BrPackZ
    c.Box.PX = 0*u.cm	
    c.Box.PY = 0*u.cm
示例#13
0
import shipunit as u
from ShipGeoConfig import AttrDict, ConfigRegistry

# the following params should be passed through 'ConfigRegistry.loadpy' method
# muShieldDesign = 2  # 1=passive 2=active
# targetOpt      = 5  # 0=solid   >0 sliced, 5 pieces of tungsten, 4 air slits

if "muShieldDesign" not in globals():
    muShieldDesign = 2
if "targetOpt" not in globals():
    targetOpt = 5

with ConfigRegistry.register_config("basic") as c:
    # global muShieldDesign, targetOpt
    c.vetoStation = AttrDict(z=-2390. * u.cm)
    c.TrackStation1 = AttrDict(z=1510. * u.cm)
    c.TrackStation2 = AttrDict(z=1710. * u.cm)
    c.TrackStation3 = AttrDict(z=2150. * u.cm)
    c.TrackStation4 = AttrDict(z=2370. * u.cm)

    c.z = c.TrackStation2.z + 0.5 * (c.TrackStation3.z - c.TrackStation2.z)

    c.Bfield = AttrDict(z=c.z)
    c.Bfield.max = 1.5 * u.kilogauss  # was 1.15 in EOI

    # target absorber muon shield setup
    c.decayVolume = AttrDict(z=0 * u.cm)
    c.decayVolume.length = 50 * u.m

    c.muShield = AttrDict(z=0 * u.cm)
    c.muShield.dZ1 = 2.5 * u.m
示例#14
0
    targetOpt = 5
if "strawDesign" not in globals():
    strawDesign = 4
if "HcalOption" not in globals():
    HcalOption = -1
if "Yheight" not in globals():
    Yheight = 10.

with ConfigRegistry.register_config("basic") as c:
    # global muShieldDesign, targetOpt, strawDesign, Yheight
    c.Yheight = Yheight * u.m
    # decision by the SP
    totalLength = 2.5 * c.Yheight + 35 * u.m
    extraVesselLength = totalLength - 50 * u.m
    c.strawDesign = strawDesign
    c.chambers = AttrDict(z=0 * u.cm)
    if strawDesign != 4:
        print "this design is not supported, use strawDesign = 4"
        1 / 0
    else:
        c.chambers.Length = totalLength
        c.chambers.Tub1length = 2.5 * u.m
        c.chambers.Tub2length = 17.68 * u.m + extraVesselLength / 2.
        c.chambers.Tub3length = 0.8 * u.m
        c.chambers.Tub4length = 2. * u.m
        c.chambers.Tub5length = 0.8 * u.m
        c.chambers.Tub6length = 0.1 * u.m
        c.chambers.Rmin = 245. * u.cm
        c.chambers.Rmax = 250. * u.cm
        # positions and lenghts of vacuum tube segments
        c.Chamber1 = AttrDict(z=-22.28 * u.m)
import ROOT as r
import shipunit as u
from ShipGeoConfig import AttrDict, ConfigRegistry

with ConfigRegistry.register_config("basic") as c:
    # cave parameters
    c.cave = AttrDict(z=0 * u.cm)

    # Antonia, 482000mm (FASER+2, P3) + 1017mm (DZ) + 245mm (centre emulsion),z=483262./10.*u.cm
    # centre emulsion now 326.2cm downstream from origin.
    c.EmulsionDet = AttrDict(z=326.2 * u.cm)
    c.EmulsionDet.PassiveOption = 1  #0 makes emulsion volumes active, 1 makes all emulsion volumes passive
    c.EmulsionDet.row = 2
    c.EmulsionDet.col = 2
    c.EmulsionDet.wall = 5
    c.EmulsionDet.target = 1  #number of neutrino target volumes
    c.EmulsionDet.n_plates = 59
    c.EmulsionDet.EmTh = 0.0070 * u.cm
    c.EmulsionDet.EmX = 19.2 * u.cm
    c.EmulsionDet.EmY = 19.2 * u.cm
    c.EmulsionDet.PBTh = 0.0175 * u.cm
    c.EmulsionDet.PassiveTh = 0.1 * u.cm
    c.EmulsionDet.EPlW = 2 * c.EmulsionDet.EmTh + c.EmulsionDet.PBTh
    c.EmulsionDet.AllPW = c.EmulsionDet.PassiveTh + c.EmulsionDet.EPlW

    c.EmulsionDet.BrPackZ = 0. * u.cm
    c.EmulsionDet.BrPackX = 2 * 0.05 * u.cm
    c.EmulsionDet.BrPackY = 2 * 0.05 * u.cm

    c.EmulsionDet.BrX = c.EmulsionDet.EmX + c.EmulsionDet.BrPackX
    c.EmulsionDet.BrY = c.EmulsionDet.EmY + c.EmulsionDet.BrPackY