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)