Version 15 (modified by 8 years ago) (diff) | ,
---|
How to generate events with NEUT and feed them to NUISANCE
This page aims to outline how to use NEUT to create a sample of interactions on your favourite target. We'll also outline how to feed this generated sample through the NUISANCE framework and get good results.
Contact: Clarence Wret (c.wret14@imperial.ac.uk
)
You can also try: Patrick Stowell (p.stowell@sheffield.ac.uk
), Callum Wilkinson (callum.wilkinson@lhep.unibe.ch
), Luke Pickering (luke.pickering08@imperial.ac.uk
) or Hayato-san (hayato@icrr.u-tokyo.ac.jp
)
Compiling NEUT and running neutroot2
This guide assumes you've got your hand on a copy of NEUT and CERNLIB. To request a copy, please kindly inquire to Hayato-san at hayato@icrr.u-tokyo.ac.jp
.
The main neutrino-nucleus interaction generator lives in $NEUT_ROOT/src/neutsmpl/neutroot2
. NEUT has two dependencies: ROOT and the lesser known CERNLIB. You need to have $ROOTSYS
, $CERN
and $CERN_LEVEL
environment variables set-up to compile NEUT. These should all be specified by the user in $NEUT_ROOT/src/neutsmpl/EnvMakeneutsmpl.csh
.
Compilation is done (somewhat inconveniently) by running ./Makeneutsmpl
in src/neutsmpl/
: this sources the above EnvMakeneutsmpl.csh
, runs through a host of makefiles, sets up symlinks and builds the project. If you have some time on your hands and want to fix this by e.g. CMake, please contact us or Hayato-san.
Running the main executable is done by ./neutroot2 NEUT_CARD_FILE.card OUTPUT_ROOT_FILE.root
, where NEUT_CARD_FILE.card
is a card file compliant with your chosen NEUT version, and OUTPUT_ROOT_FILE.root
is the ROOT output file where the events are to be saved, and is the input for NUISANCE analyses.
Examples of NEUT card files can be found in the $NEUT_ROOT/src/neutsmpl/Cards
directory, or have a look at what team NUISANCE used for 2016 analyses at
Winter2016 and https://imperialcollegelondon.app.box.com/files/0/f/13226969736/neut_cards
Hot tip: NEUT can be quite verbose and you might want to pipe the output to file (or /dev/null...) rather than dump it to screen. This can actually speed up NEUT considerably.
Structure of card files:
NEUT has a load of defaults set on run-time if the user does not supply them, which means you're running with "reference" NEUT.
Some things are good to specify though, and here's a list for generating all modes on T2K H2O. We can specify how many events we want, the input flux in TH1D format, the incoming neutrino type, the flux file, number of bound protons and neutrons and free protons, what interaction modes, and so on.
The "C" at the start of each line is just a comment and will not be parsed by NEUT.
The EVCT-MPV 3
says the flux is coming from a file, EVCT-FILENM
specifies the file location of the flux, EVCT-HISTNM
is the name of the TH1D inside EVCT-FILENM
, and EVCT-INMEV
specifies if the input histogram is in MeV or not.
C Number of events ; EVCT-NEVT EVCT-NEVT 100000 C C Particle Code ; EVCT-IDPT EVCT-IDPT 14 EVCT-MPOS 2 EVCT-RAD 100. EVCT-MDIR 1 EVCT-DIR 0. 0. 1. C EVCT-MPV 3 EVCT-FILENM 'nuisance_fluxes/t2kflux_2016_plus250kA.root' EVCT-HISTNM 'enu_nd280_numu' EVCT-INMEV 0 C C **** TARGET INFORMATION **** NEUT-NUMBNDN 8 NEUT-NUMBNDP 8 NEUT-NUMFREP 2 NEUT-NUMATOM 16 C C **** WHAT INTERACTION MODES DO WE WANT? (0 = ALL) **** NEUT-MODE 0 C **** WHAT CCQE MODEL ARE WE USING (2 = RFG WITH BBBA05) *** NEUT-MDLQE 2 C C **** RANDOM NUMBER AND IF WE WANT NEUT TO BE QUIET **** NEUT-RAND 1 NEUT-QUIET 2
NEUT inputs for NUISANCE
The output of neutroot2
, contains a neutvect
object which has all the information about the event in it. This is read in by NUISANCE to generate predictions. neutroot2
also saves the predicted flux and event rate predictions automatically into the output file so NUISANCE already has everything it needs.
To read NEUT inputs the NEUT type just needs to be specified in the NUISANCE input card file, e.g. for MiniBooNE CCQE:
sample MiniBooNE_CCQE_XSec_1DQ2_nu NEUT:/path/to/neut/input/file.root
Using NEUT ReWeight
Joint Flux Inputs
neutroot2
does not yet natively support combined beams or targets so if you want to use the measurement classes that require this (e.g. MINERvA CC0pi nue+nuebar) you will have to setup a JOINT input. See HowToJointInput? for more information on how to achieve this.