200def _build_parser() -> argparse.ArgumentParser:
201 p = argparse.ArgumentParser(description="Run GENIE neutrino simulation")
202 sub = p.add_subparsers(dest="cmd", required=True)
203
204
205 ap = sub.add_parser("sim", help="Make GENIE simulation file(s)")
206 ap.add_argument("-s", "--seed", type=int, default=65539, help="RNG seed (default: GENIE 65539)")
207 ap.add_argument(
208 "-o",
209 "--output",
210 dest="work_dir",
211 type=Path,
212 default=Path("./work"),
213 help="Output directory",
214 )
215 ap.add_argument(
216 "-f",
217 "--filedir",
218 dest="filedir",
219 type=Path,
220 default=DEFAULT_FILE_DIR,
221 help="Flux dir",
222 )
223 ap.add_argument(
224 "-c",
225 "--crosssectiondir",
226 dest="splinedir",
227 type=Path,
228 default=DEFAULT_SPLINE_DIR,
229 help="Spline dir",
230 )
231 ap.add_argument(
232 "--xsec-file",
233 type=str,
234 default=DEFAULT_XSEC_FILE,
235 help=f"Spline XML (default: {DEFAULT_XSEC_FILE})",
236 )
237 ap.add_argument(
238 "--flux-file",
239 type=str,
240 default=DEFAULT_FLUX_FILE,
241 help=f"Flux ROOT (default: {DEFAULT_FLUX_FILE})",
242 )
243 ap.add_argument(
244 "-t",
245 "--target",
246 type=str,
247 default="iron",
248 choices=sorted(TARGET_CODE),
249 help="Target material",
250 )
251 ap.add_argument("-n", "--nevents", type=int, default=100, help="Events per neutrino species")
252 ap.add_argument("--emin", type=float, default=0.5, help="Min Eν [GeV]")
253 ap.add_argument("--emax", type=float, default=350.0, help="Max Eν [GeV]")
254 ap.add_argument(
255 "-e",
256 "--event-generator-list",
257 dest="evtype",
258 type=str,
259 default=None,
260 help="GENIE generator list (e.g. CC, CCDIS, CCQE, CharmCCDIS, RES, CCRES, ...)",
261 )
262 ap.add_argument("--gxmlpath", type=Path, default=None, help="Override GXMLPATH")
263 ap.add_argument(
264 "-p",
265 "--particles",
266 nargs="+",
267 type=int,
268 default=NUPDGLIST,
269 help="PDGs (e.g. 16 -16 14 -14 12 -12). Default: all flavors",
270 )
271 ap.add_argument("-r", "--run", type=int, default=1, help="GENIE run number")
272 ap.add_argument(
273 "-v",
274 "--verbose",
275 action="count",
276 default=0,
277 help="Increase verbosity (-v or -vv)",
278 )
279
280
281 ap1 = sub.add_parser("spline", help="Make a new cross-section spline (xsec_splines.xml)")
282 ap1.add_argument("-t", "--target", type=str, default="iron", choices=sorted(TARGET_CODE))
283 ap1.add_argument("-o", "--output", dest="work_dir", type=Path, default=Path("./work"))
284 ap1.add_argument("-n", "--nknots", type=int, default=500)
285 ap1.add_argument("--emax", type=float, default=400.0)
286
287 return p
288
289