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