137def addVMCFields(shipGeo, controlFile = '', verbose = False, withVirtualMC = True):
138 '''
139 Define VMC B fields, e.g. global field, field maps, local or local+global fields
140 '''
141 print('Calling addVMCFields')
142
143 fieldMaker = ROOT.ShipFieldMaker(verbose)
144
145
146
147 if controlFile != '':
148 fieldMaker.readInputFile(controlFile)
149
150
151 if hasattr(shipGeo, 'Bfield'):
152 fieldsList = []
153 fieldMaker.defineFieldMap('MainSpecMap', 'files/MainSpectrometerField.root',
154 ROOT.TVector3(0.0, 0.0, shipGeo.Bfield.z))
155 fieldsList.append('MainSpecMap')
156
157 withConstFieldNuTauDet = False
158 if hasattr(shipGeo.EmuMagnet,'WithConstField'): withConstFieldNuTauDet = shipGeo.EmuMagnet.WithConstField
159 if not withConstFieldNuTauDet:
160 fieldMaker.defineFieldMap('NuMap','files/nuTauDetField.root', ROOT.TVector3(0.0,0.0,shipGeo.EmuMagnet.zC))
161 fieldsList.append('NuMap')
162
163 if not shipGeo.hadronAbsorber.WithConstField:
164 fieldMaker.defineFieldMap('HadronAbsorberMap','files/FieldHadronStopper_raised_20190411.root', ROOT.TVector3(0.0,0.0,shipGeo.hadronAbsorber.z))
165 fieldsList.append('HadronAbsorberMap')
166
167 if not shipGeo.muShield.WithConstField:
169 fieldMaker.defineFieldMap('muonShieldField', 'files/MuonShieldField.root',
170 ROOT.TVector3(0.0, 0.0, field_center), ROOT.TVector3(0.0, 0.0, 0.0), True)
171 fieldsList.append('muonShieldField')
172
173 if len(fieldsList) > 1:
174 fieldMaker.defineComposite('TotalField', *fieldsList)
175 fieldMaker.defineGlobalField('TotalField')
176 else:
177 fieldMaker.defineGlobalField('MainSpecMap')
178 if withVirtualMC:
179
180
181 geom = ROOT.TG4GeometryManager.Instance()
182
183 geom.SetUserPostDetConstruction(fieldMaker)
184
185 geom.ConstructSDandField()
186
187
188
189 return fieldMaker
190
191
find_shield_center(ship_geo)