77 if not hasattr(ship_geo,
"tankDesign"): ship_geo.tankDesign = 5
 
   78 if not hasattr(ship_geo,
"muShieldGeo"): ship_geo.muShieldGeo = 
None 
   79 if not hasattr(ship_geo.hcal,
"File"):  ship_geo.hcal.File = 
"hcal.geo" 
   80 if not hasattr(ship_geo.Bfield,
'x') :  ship_geo.Bfield.x   = 3.*u.m
 
   81 if not hasattr(ship_geo,
'cave') :       
 
   83   ship_geo.cave.floorHeightMuonShield = 5*u.m
 
   84   ship_geo.cave.floorHeightTankA   = 4.5*u.m
 
   85   ship_geo.cave.floorHeightTankB   = 2.*u.m
 
   86 if not hasattr(ship_geo,
'NuTauTT') : ship_geo.NuTauTT= 
AttrDict(z=0*u.cm)
 
   87 if not hasattr(ship_geo.NuTauTT,
'design') : ship_geo.NuTauTT.design = 0
 
   88 if not hasattr(ship_geo,
'EcalOption'):     ship_geo.EcalOption = 1      
 
   89 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)
 
   91 run.SetMaterials(
"media.geo")  
 
   95 cave= ROOT.ShipCave(
"CAVE")
 
   96 if ship_geo.tankDesign < 5: cave.SetGeometryFileName(
"cave.geo")
 
   97 else: cave.SetGeometryFileName(
"caveWithAir.geo")
 
   98 detectorList.append(cave)
 
  100 if ship_geo.muShieldDesign 
in [6, 7, 8, 9,10]:  
 
  101  TargetStation = ROOT.ShipTargetStation(
"TargetStation",ship_geo.target.length,
 
  102                                                        ship_geo.target.z,ship_geo.targetOpt,ship_geo.target.sl)
 
  104  TargetStation = ROOT.ShipTargetStation(
"TargetStation",ship_geo.target.length,ship_geo.hadronAbsorber.length,
 
  105                                                        ship_geo.target.z,ship_geo.hadronAbsorber.z,ship_geo.targetOpt,ship_geo.target.sl)
 
  107 if ship_geo.targetOpt>10:
 
  108  slices_length   = ROOT.std.vector(
'float')()
 
  109  slices_material = ROOT.std.vector(
'std::string')()
 
  110  for i 
in range(1,ship_geo.targetOpt+1):
 
  111   slices_length.push_back(  eval(
"ship_geo.target.L"+str(i)))
 
  112   slices_material.push_back(eval(
"ship_geo.target.M"+str(i)))
 
  113  TargetStation.SetLayerPosMat(ship_geo.target.xy,slices_length,slices_material)
 
  114 detectorList.append(TargetStation)
 
  116 if ship_geo.muShieldDesign==1:
 
  117  MuonShield = ROOT.ShipMuonShield(
"MuonShield",ship_geo.muShieldDesign,
"ShipMuonShield",ship_geo.muShield.z,ship_geo.muShield.dZ0,ship_geo.muShield.length,\
 
  118                                   ship_geo.muShield.LE) 
 
  119 elif ship_geo.muShieldDesign==2:
 
  120  MuonShield = ROOT.ShipMuonShield(
"MuonShield",ship_geo.muShieldDesign,
"ShipMuonShield",ship_geo.muShield.z,ship_geo.muShield.dZ0,ship_geo.muShield.dZ1,\
 
  121               ship_geo.muShield.dZ2,ship_geo.muShield.dZ3,ship_geo.muShield.dZ4,ship_geo.muShield.dZ5,ship_geo.muShield.dZ6,ship_geo.muShield.LE) 
 
  122 elif ship_geo.muShieldDesign 
in [3, 4, 5, 6, 7, 9]:
 
  123  MuonShield = ROOT.ShipMuonShield(
 
  124      "MuonShield", ship_geo.muShieldDesign, 
"ShipMuonShield",
 
  125      ship_geo.muShield.z, ship_geo.muShield.dZ0, ship_geo.muShield.dZ1,
 
  126      ship_geo.muShield.dZ2, ship_geo.muShield.dZ3,
 
  127      ship_geo.muShield.dZ4, ship_geo.muShield.dZ5,
 
  128      ship_geo.muShield.dZ6, ship_geo.muShield.dZ7,
 
  129      ship_geo.muShield.dZ8, ship_geo.muShield.dXgap,
 
  130      ship_geo.muShield.LE, ship_geo.Yheight * 4. / 10.,
 
  131      ship_geo.cave.floorHeightMuonShield,ship_geo.muShield.Field,
 
  132      ship_geo.muShieldWithCobaltMagnet, ship_geo.muShieldStepGeo,
 
  133      ship_geo.hadronAbsorber.WithConstField, ship_geo.muShield.WithConstField)
 
  134 elif ship_geo.muShieldDesign == 8:
 
  135  MuonShield = ROOT.ShipMuonShield(ship_geo.muShieldGeo,
 
  136                                   ship_geo.muShieldWithCobaltMagnet,
 
  137                                   ship_geo.muShieldStepGeo,
 
  138                                   ship_geo.hadronAbsorber.WithConstField,
 
  139                                   ship_geo.muShield.WithConstField)
 
  141 detectorList.append(MuonShield)
 
  143 if not hasattr(ship_geo,
"magnetDesign"):
 
  146  if ship_geo.tankDesign == 5: magnet_design = 3
 
  147  if ship_geo.tankDesign == 6: magnet_design = 4
 
  148  ship_geo.magnetDesign = magnet_design
 
  149  ship_geo.Bfield.YokeWidth = 200.*u.cm 
 
  150  ship_geo.Bfield.YokeDepth = 200.*u.cm
 
  151  ship_geo.Bfield.CoilThick = 25.*u.cm
 
  153 if (ship_geo.tankDesign == 6 
and ship_geo.nuTauTargetDesign != 3) 
or (ship_geo.tankDesign != 6 
and ship_geo.nuTauTargetDesign == 3):
 
  154   print(
"version of tankDesign and nuTauTargetDesign are not compatible, should be 6 and 3, it is ",ship_geo.tankDesign, ship_geo.nuTauTargetDesign) 
 
  156 if ship_geo.strawDesign > 1 : 
 
  157  if ship_geo.magnetDesign>3:
 
  159   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)
 
  162   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)
 
  163 else: magnet = ROOT.ShipMagnet(
"Magnet",
"SHiP Magnet",ship_geo.Bfield.z)
 
  164 detectorList.append(magnet)
 
  166 Veto = ROOT.veto(
"Veto", ROOT.kTRUE)   
 
  167 Veto.SetLiquidVeto(1)  
 
  168 Veto.SetPlasticVeto(1) 
 
  170 Veto.SetZpositions(ship_geo.vetoStation.z, ship_geo.TrackStation1.z, ship_geo.TrackStation2.z, \
 
  171                    ship_geo.TrackStation3.z, ship_geo.TrackStation4.z,ship_geo.tankDesign)
 
  172 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)
 
  173 Veto.SetTublengths(ship_geo.chambers.Tub1length,ship_geo.chambers.Tub2length,ship_geo.chambers.Tub3length, \
 
  174                    ship_geo.chambers.Tub6length)
 
  175 Veto.SetB(ship_geo.Yheight/2.)
 
  176 Veto.SetFloorHeight(ship_geo.cave.floorHeightTankA,ship_geo.cave.floorHeightTankB)
 
  177 if ship_geo.tankDesign > 4: 
 
  178    dzX = ship_geo.zFocusX+ship_geo.target.z0    
 
  179    x1  = ship_geo.xMax/(ship_geo.Chamber1.z -ship_geo.chambers.Tub1length-dzX)*(ship_geo.TrackStation4.z-dzX)
 
  180    dzY = ship_geo.zFocusY+ship_geo.target.z0    
 
  181    y1  = ship_geo.Yheight/(ship_geo.Chamber1.z -ship_geo.chambers.Tub1length-dzY)*(ship_geo.TrackStation4.z-dzY)
 
  182    Veto.SetXYstart(x1,dzX,y1,dzY)
 
  183    Veto.SetVesselStructure(ship_geo.Veto.innerSupport,ship_geo.Veto.sensitiveThickness,ship_geo.Veto.outerSupport,\
 
  184                            ship_geo.Veto.innerSupportMed,ship_geo.Veto.lidThickness,ship_geo.Veto.sensitiveMed,\
 
  185                            ship_geo.Veto.outerSupportMed,ship_geo.Veto.decayMed,\
 
  188 detectorList.append(Veto)
 
  189 if hasattr(ship_geo,
'tauMudet'): 
 
  191  if ship_geo.muShieldDesign 
not in [2,3,4] 
and hasattr(ship_geo.tauMudet,
'Xtot'):
 
  192   taumuondetector = ROOT.NuTauMudet(
"NuTauMudet", ship_geo.tauMudet.zMudetC,  ROOT.kTRUE)
 
  193   taumuondetector.SetDesign(ship_geo.nuTauTargetDesign)
 
  194   taumuondetector.SetTotDimensions(ship_geo.tauMudet.Xtot,ship_geo.tauMudet.Ytot, ship_geo.tauMudet.Ztot )
 
  195   if hasattr(ship_geo.tauMudet,
'ZFethin'):
 
  196      taumuondetector.SetFeDimensions(ship_geo.tauMudet.XFe,ship_geo.tauMudet.YFe, ship_geo.tauMudet.ZFethick,ship_geo.tauMudet.ZFethin)
 
  197      taumuondetector.SetNFeInArm(ship_geo.tauMudet.NFethick, ship_geo.tauMudet.NFethin)
 
  198      taumuondetector.SetLateralCutSize(ship_geo.tauMudet.CutHeight, ship_geo.tauMudet.CutLength)
 
  199      taumuondetector.SetSupportTransverseDimensions(ship_geo.tauMudet.UpperSupportX,ship_geo.tauMudet.UpperSupportY, \
 
  200                                                     ship_geo.tauMudet.LowerSupportX, ship_geo.tauMudet.LowerSupportY, \
 
  201                                                     ship_geo.tauMudet.LateralSupportX, ship_geo.tauMudet.LateralSupportY, ship_geo.tauMudet.YSpacing)
 
  203      taumuondetector.SetFeDimensions(ship_geo.tauMudet.XFe,ship_geo.tauMudet.YFe, ship_geo.tauMudet.ZFe)
 
  204      taumuondetector.SetNFeInArm(ship_geo.tauMudet.NFe)
 
  205   taumuondetector.SetRpcDimensions(ship_geo.tauMudet.XRpc,ship_geo.tauMudet.YRpc, ship_geo.tauMudet.ZRpc)
 
  206   taumuondetector.SetRpcGasDimensions(ship_geo.tauMudet.XGas,ship_geo.tauMudet.YGas, ship_geo.tauMudet.ZGas)
 
  207   taumuondetector.SetRpcStripDimensions(ship_geo.tauMudet.XStrip,ship_geo.tauMudet.YStrip, ship_geo.tauMudet.ZStrip)
 
  208   taumuondetector.SetRpcElectrodeDimensions(ship_geo.tauMudet.XEle,ship_geo.tauMudet.YEle, ship_geo.tauMudet.ZEle)
 
  209   taumuondetector.SetRpcPETDimensions(ship_geo.tauMudet.XPet,ship_geo.tauMudet.YPet, ship_geo.tauMudet.ZPet)
 
  210   taumuondetector.SetNRpcInArm(ship_geo.tauMudet.NRpc)
 
  211   taumuondetector.SetUpperCoverDimensions(ship_geo.tauMudet.XCov, ship_geo.tauMudet.YCov, ship_geo.tauMudet.ZCov)
 
  212   taumuondetector.SetLateralCoverDimensions(ship_geo.tauMudet.XLateral, ship_geo.tauMudet.YLateral, ship_geo.tauMudet.ZLateral)
 
  213   taumuondetector.SetCrossDimensions(ship_geo.tauMudet.XCross, ship_geo.tauMudet.YCross, ship_geo.tauMudet.ZCross, ship_geo.tauMudet.WidthArm)
 
  214   taumuondetector.SetRpcOuterDimensions(ship_geo.tauMudet.XRpc_outer, ship_geo.tauMudet.YRpc_outer, ship_geo.tauMudet.ZRpc_outer)
 
  215   taumuondetector.SetRpcInnerDimensions(ship_geo.tauMudet.XRpc_inner, ship_geo.tauMudet.YRpc_inner, ship_geo.tauMudet.ZRpc_inner)
 
  216   taumuondetector.SetRpcGapDimensions(ship_geo.tauMudet.XRpcGap, ship_geo.tauMudet.YRpcGap, ship_geo.tauMudet.ZRpcGap)
 
  217   taumuondetector.SetPillarDimensions(ship_geo.tauMudet.PillarX,ship_geo.tauMudet.PillarY, ship_geo.tauMudet.PillarZ)
 
  218   detectorList.append(taumuondetector)
 
  219   if ship_geo.nuTauTargetDesign==3:
 
  220    if hasattr(ship_geo.tauMudet, 
"deltax"): 
 
  221     taumuondetector.SetRpcDimDifferences(ship_geo.tauMudet.deltax, ship_geo.tauMudet.deltay)
 
  222   if ship_geo.nuTauTargetDesign<3:
 
  223    taumuondetector.SetReturnYokeDimensions(ship_geo.tauMudet.XRyoke,ship_geo.tauMudet.YRyoke, ship_geo.tauMudet.ZRyoke)
 
  224    taumuondetector.SetSmallerYokeDimensions(ship_geo.tauMudet.XRyoke_s,ship_geo.tauMudet.YRyoke_s, ship_geo.tauMudet.ZRyoke_s)
 
  225    taumuondetector.SetZDimensionArm(ship_geo.tauMudet.ZArm)
 
  226    taumuondetector.SetGapDownstream(ship_geo.tauMudet.GapD)
 
  227    taumuondetector.SetGapMiddle(ship_geo.tauMudet.GapM)
 
  228    taumuondetector.SetMagneticField(ship_geo.tauMudet.B)
 
  229    taumuondetector.SetCoilParameters(ship_geo.tauMudet.CoilH, ship_geo.tauMudet.CoilW, ship_geo.tauMudet.N, ship_geo.tauMudet.CoilG)
 
  231   if ship_geo.nuTauTargetDesign==0 
or ship_geo.nuTauTargetDesign==1 
or ship_geo.nuTauTargetDesign==3:
 
  232    EmuMagnet = ROOT.EmulsionMagnet(
"EmuMagnet",ship_geo.EmuMagnet.zC,
"EmulsionMagnet")
 
  233    EmuMagnet.SetDesign(ship_geo.EmuMagnet.Design)
 
  234    EmuMagnet.SetGaps(ship_geo.EmuMagnet.GapUp, ship_geo.EmuMagnet.GapDown)
 
  235    EmuMagnet.SetMagneticField(ship_geo.EmuMagnet.B)
 
  236    EmuMagnet.SetConstantField(ship_geo.EmuMagnet.WithConstField)
 
  237    EmuMagnet.SetMagnetSizes(ship_geo.EmuMagnet.X, ship_geo.EmuMagnet.Y, ship_geo.EmuMagnet.Z)
 
  238    if ship_geo.nuTauTargetDesign==0 
or ship_geo.nuTauTargetDesign==1:
 
  239      EmuMagnet.SetCoilParameters(ship_geo.EmuMagnet.Radius, ship_geo.EmuMagnet.Height1, ship_geo.EmuMagnet.Height2, ship_geo.EmuMagnet.Distance)
 
  240    if ship_geo.nuTauTargetDesign==3:
 
  241      EmuMagnet.SetCoilParameters(ship_geo.EmuMagnet.CoilX,ship_geo.EmuMagnet.CoilY,ship_geo.EmuMagnet.Height1, ship_geo.EmuMagnet.Height2, ship_geo.EmuMagnet.Thickness) 
 
  242      EmuMagnet.SetCutDimensions(ship_geo.EmuMagnet.CutLength, ship_geo.EmuMagnet.CutHeight)
 
  243    EmuMagnet.SetMagnetColumn(ship_geo.EmuMagnet.ColX, ship_geo.EmuMagnet.ColY, ship_geo.EmuMagnet.ColZ)
 
  244    EmuMagnet.SetBaseDim(ship_geo.EmuMagnet.BaseX, ship_geo.EmuMagnet.BaseY, ship_geo.EmuMagnet.BaseZ)
 
  245    EmuMagnet.SetPillarDimensions(ship_geo.EmuMagnet.PillarX, ship_geo.EmuMagnet.PillarY, ship_geo.EmuMagnet.PillarZ)
 
  246    detectorList.append(EmuMagnet)
 
  247   if ship_geo.nuTauTargetDesign==2:
 
  248     EmuMagnet = ROOT.EmulsionMagnet()
 
  250   NuTauTarget = ROOT.Target(
"NuTauTarget",ship_geo.NuTauTarget.Ydist,ROOT.kTRUE)
 
  251   NuTauTarget.MakeNuTargetPassive(ship_geo.NuTauTarget.nuTargetPassive)
 
  252   if hasattr(ship_geo.NuTauTarget,
"SingleEmFilm"): 
 
  253    NuTauTarget.MergeTopBot(ship_geo.NuTauTarget.SingleEmFilm)
 
  254   NuTauTarget.SetDetectorDesign(ship_geo.NuTauTarget.Design)
 
  255   if ship_geo.nuTauTargetDesign!=3:
 
  256    NuTauTarget.SetCenterZ(ship_geo.NuTauTarget.zC)
 
  257   if ship_geo.nuTauTargetDesign==3:
 
  258    NuTauTarget.SetCenterZ(ship_geo.EmuMagnet.zC) 
 
  259    NuTauTarget.SetNumberTargets(ship_geo.NuTauTarget.target)
 
  260    NuTauTarget.SetHpTParam(ship_geo.tauHPT.nHPT, ship_geo.tauHPT.distHPT, ship_geo.tauHPT.DZ) 
 
  261   NuTauTarget.SetNumberBricks(ship_geo.NuTauTarget.col,ship_geo.NuTauTarget.row,ship_geo.NuTauTarget.wall)
 
  262   NuTauTarget.SetDetectorDimension(ship_geo.NuTauTarget.xdim, ship_geo.NuTauTarget.ydim, ship_geo.NuTauTarget.zdim)
 
  263   if hasattr(ship_geo.NuTauTarget,
"WallXDim") 
and hasattr(ship_geo.NuTauTarget,
"WallYDim") 
and hasattr(ship_geo.NuTauTarget,
"WallZDim"):
 
  264    NuTauTarget.SetTargetWallDimension(ship_geo.NuTauTarget.WallXDim, ship_geo.NuTauTarget.WallYDim, ship_geo.NuTauTarget.WallZDim)
 
  265   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)