2from __future__
import print_function
3from __future__
import division
5from subprocess
import call
21xsec =
"gxspl-FNAL-nuSHiP-minimal.xml"
22hfile =
"pythia8_Geant4_1.0_withCharm_nu.root"
27defaultsplinedir =
'/eos/experiment/ship/user/aiuliano/GENIE_FNAL_nu_splines'
28defaultfiledir =
'/eos/experiment/ship/data/Mbias/background-prod-2018'
37 parser = argparse.ArgumentParser(
38 description=
'Run GENIE neutrino" simulation')
39 subparsers = parser.add_subparsers()
40 ap = subparsers.add_parser(
'sim',help=
"make genie simulation file")
42 ap.add_argument(
'-s',
'--seed', type=int, dest=
'seed', default=65539)
43 ap.add_argument(
'-o',
'--output' , type=str, help=
"output directory", dest=
'work_dir', default=
None)
44 ap.add_argument(
'-f',
'--filedir', type=str, help=
"directory with neutrino fluxes", dest=
'filedir', default=defaultfiledir)
45 ap.add_argument(
'-c',
'--crosssectiondir', type=str, help=
"directory with neutrino splines crosssection", dest=
'splinedir', default=defaultsplinedir)
46 ap.add_argument(
'-t',
'--target', type=str, help=
"target material", dest=
'target', default=
'iron')
47 ap.add_argument(
'-n',
'--nevents', type=int, help=
"number of events", dest=
'nevents', default=100)
48 ap.add_argument(
'-e',
'--event-generator-list', type=str, help=
"event generator list", dest=
'evtype', default=
None)
49 ap.add_argument(
"--nudet", dest=
"nudet", help=
"option for neutrino detector", required=
False, action=
"store_true")
51 ap1 = subparsers.add_parser(
'spline',help=
"make a new cross section spline file")
52 ap1.add_argument(
'-t',
'--target', type=str, help=
"target material", dest=
'target', default=
'iron')
53 ap1.add_argument(
'-o',
'--output' , type=str, help=
"output directory", dest=
'work_dir', default=
None)
54 args = parser.parse_args()
59print(
'Target type: ', args.target)
61if args.target ==
'iron':
62 targetcode =
'1000260560'
63elif args.target ==
'lead':
64 targetcode =
'1000822040[0.014],1000822060[0.241],1000822070[0.221],1000822080[0.524]'
65elif args.target ==
'tungsten':
66 targetcode =
'1000741840'
68 print(
'only iron, lead and tunsgten target options available')
71if os.path.exists(args.work_dir):
72 print(
'output directory already exists.')
74 os.makedirs(args.work_dir)
76os.chdir(args.work_dir)
79 '''first step, make cross section splines if not exist'''
80 nupdglist = [16,-16,14,-14,12,-12]
86 if p<0: print(
"scale number of "+sDict[p]+
" events with %5.2F"%(1./nuOverNubar[abs(p)]))
87 if not sDict[p]
in os.listdir(
'.'): call(
'mkdir '+sDict[p],shell =
True)
88 os.chdir(
'./'+sDict[p])
92 if p<0: N = int(nevents / nuOverNubar[abs(p)])
94 inputflux = neutrinos, spline = splines, seed = args.seed, process = args.evtype, irun = run)
99 os.chdir(
'./'+sDict[p])
106 os.chdir(
'./'+sDict[p])
110if (
"splinedir" not in args):
116 if 'GXMLPATH' not in os.environ:
117 logging.warn(
'GXMLPATH is not set: Genie will decay charm and tau particles, which is usually not the desired behaviour')
118 else: logging.debug(
'GXMLPATH is set: Genie will not decay charm and tau particles')
120 splines = args.splinedir+
'/'+xsec
121 neutrinos = args.filedir+
'/'+hfile
123 print(
'Seed used in this generation: ', args.seed)
124 print(
'Splines file used', xsec)
126 pdg = ROOT.TDatabasePDG()
130 f = ROOT.TFile(neutrinos)
132 for x
in [16, 14,12]:
133 sDict[x] = pdg.GetParticle(x).GetName()
134 sDict[-x] = pdg.GetParticle(-x).GetName()
135 pDict[x] =
"10"+str(x)
136 pDict[-x] =
"20"+str(x)
137 nuOverNubar[x] = f.Get(pDict[x]).GetSumOfWeights()/f.Get(pDict[-x]).GetSumOfWeights()
make_ntuples(inputfile, outputfile)
make_splines(nupdglist, targetcode, emax, nknots, outputfile)
generate_genie_events(nevents, nupdg, emin, emax, targetcode, inputflux, spline, process=None, seed=None, irun=None)
add_hists(inputflux, simfile, nupdg)
configure(darkphoton=None)