In the following we will generate manually a 'single kaon' event, which can be fed into OSCAR and ORCA.
The HEPEVT ntuple structure
OSCAR expects its input in an HBOOK ntuple with the following fields:
Block HEPEVT:
integer NEVHEP = event number
integer NHEP = number of entries (particles, partons)
integer ISTHEP(NHEP) = status code
integer IDHEP(NHEP) = PDG identifier
integer JMOHEP(2,NHEP) = position of 1st and 2nd mother
integer JDAHEP(2,NHEP) = position of 1st and last daughter
real PHEP(5,NHEP) = 4-momentum and mass (single precision in ntuple file)
real VHEP(4,NHEP) = vertex xyz and production time (single precision in ntuple file), OSCAR do not care about this...
Block MC_PARAM:
integer IRNMCP = run number
integer IEVMCP = event number (must equal to NEVHEP)
real WGTMCP = event weight (1.0)
real XSECN = cross section equivalent (1.0)
integer IFILTER = filter pattern (0)
integer NVRMCP = number of additional variables
real VARMCP(NMXMCP) = list of additional variables
Packed ntuple trick:
jmohep(i)=mod(isthep(i),100)*4000*4000 + jmohep(1,i)*4000+jmohep(2,i)
jdahep(i)=mod(isthep(j)/100,100)*4000*4000+jdahep(1,i)*4000+jdahep(2,i)
Writing ntuples
Writing such an ntuple is straightforward in Fortran [TODO: C/C++ interface via cfortran.h], see the attached example program
writehbook.f.
- Define the data blocks as Fortran COMMON's.
- Create an ntuple with the
HROPEN
procedure (say test.ntpl), and define its structure with HBNAME
. Note: ntuple's ID must be 100 (unpacked) or 101 (packed; a bit tricky). Additonal note: Ntuple variable names have to be in capital letters. Don't ask why...
- Do a loop over the events, generate some particles, etc; at the end of the loop
call hfnt(ID)
- Close the ntuple.
Compile the program with
g77 -c writehbook.f
and link with
g77 -o writehbook.run writehbook.o `cernlib packlib,mathlib`
This requires a running
g77
system with
cernlib
properly installed (on debian:
apt-get install cernlib
)
Run the executable.
Now the file
test.ntpl should contain the particles. You can test it by opening with PAW:
h/file 0 test.ntpl 4096
n/print 101
n/plot 101.idhep
TODO: this example program does not call Pythia to decay instable particles, but who cares anyway? We want now to control everything manually.
Modify (extend) an existing ntuple
In the previous section, we created a brand new ntuple containing our particles (a more common example is when the ntuple is generated by some fancy CMKIN routine). We can further tailor it, add or remove particles, change their properties etc. With an appropriate Fortran program (see
extendhbook.f) read the original ntuple, do your modifications, and write out to an other ntuple.
TODO: there
has to be a more elegant solution than just write out to a
second ntuple. Maybe
hropen(... 'U' ...)
?
Feed into OSCAR
This note assumes that you have a properly installed OSCAR environment.
Copy or symlink
test.ntpl into the OSCAR working directory (in my case, it's
OSCAR_3_9_9/src/Workspace).
Edit
oscarrc:
...
OutputDataSet = /System/sim/test
EventNtplReader:NtplFileName = test.ntpl
EventNtplReader:NtplID = 101 # or 100 if you generated unpacked ntuple
...
Do the ritual
eval `scram run -sh`
(or
-csh
), and run
oscar -c oscarrc
This will produce a lot of
sim and
xml files (see
ProduceSimulatedEvents)
Further readings
CMKIN
HBOOK Reference
--
GergelyPatay - 30 May 2006