Test loading ntuple files !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! LOCB/LOCF: address 0x562cca6e2c80 exceeds the 32 bit address space or is not in the data segments This may result in program crash or incorrect results Therefore we will stop here !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Unfortunately, the recommendation in /usr/share/doc/libpacklib1-dev/README.64-bit to statically link didn't work for me:
Static linking is the default behavior if you use the "cernlib" script when linking, like this: # Should work everywhere: gfortran -o myprogram myprogram.F `cernlib -G Motif pawlib`
Fortunately, Linux Mint still provides a 32-bit version of the latest OS. So, at this point rather than trying to fix it in 64-bit I thought the best approach would be to setup a Virtual Machine.
For the VM host, I decided to use VirtualBox. This is easy to install on Ubuntu from the Software Center.
After downloading the 32-bit Linux Mint ISO I setup a new VM with 4MB of Memory and Dynamically Allocated Storage with 70GB Virtual Size.
After installing Mint, I reinstalled the CERNLIB packages from the Mint Software Manager and loaded up the ntuple in PAW as per my last post
Now, given this was working I could try and load the file using my FORTRAN program:
program main
implicit none
integer istat, NEvents, idnt
real hmem
common/pawc/hmem(2000000)
print *, "Test loading ntuple files"
call hlimit(2000000)
call hropen(80,'ntuple','mc97_1.rz','',4096,istat)
if (istat.ne.0) then
print *, "Failed to open input file"
stop
endif
print *, "Loaded mc96_1.rz"
call hrin(10, 9999999, 0)
call hnoent(10,NEvents)
print *, NEvents
c print *, idnt
call hrend('ntuple')
close(80)
end program main
And this time, success!
Test loading ntuple files
Loaded mc96_1.rz
51781
There's a few points to bear in mind:
- common/pawc/hmem(2000000) is required to reserve locations to a common /PAWC/, for the HBOOK working space (an array)
- call hlimit(2000000) informs HBOOK of the storage limit
- call hropen opens the direct access rz file
- call hrin(10, 9999999, 0) reads a histogram from the current directory of the direct access file into the current directory in memory. The 9999999 to to read the highest cycle
- call hnoent Gets the number of events in the in-memory identifier
No comments:
Post a Comment