The data are saved as binary ntuples packaged as .rz files. So, to begin I tested opening them in PAW (Physics Analysis Workstation).
To load, simply run paw, take the default workstation type and enter:
hi/file 1 mc96_2.rz
jonathan@jonathan-Inspiron-5759:~/Development/Physics$ paw ****************************************************** * * * W E L C O M E to P A W * * * * Version 2.14/04 12 January 2004 * * * ****************************************************** Workstation type (?=HELP) <CR>=1 : Version 1.29/04 of HIGZ started PAW > hi/file 1 mc96_2.rz 4096 PAW >The arguments are:
- '1' is the 'logical unit' of the file
- The filename, 'mc96_2.rz'
- Record length in words (I saved the data back in the day with 4096) It's important this is included or a segmentation error is returned:
PAW > hi/file 1 mc96_2.rz *** Break *** Segmentation violation Traceq lun = 0, level = 99 TRACEQ. In-line trace-back still not available. Longjump PAW >
The structure of the ntuple currently loaded in memory can be seen with nt/print 10
(10 is the ntuple identifier. Again, I originally saved it with this value)
PAW > nt/print 10 ****************************************************************** * Ntuple ID = 10 Entries = 5882 ntuple ****************************************************************** * Var numb * Type * Packing * Range * Block * Name * ****************************************************************** * 1 * R*4 * * * FLT * TrigDat(15) * 1 * I*4 * * * TLT * TLT(15) * 1 * R*4 * * * TRK * VCT_XVC * 2 * R*4 * * * TRK * VCT_YVC * 3 * R*4 * * * TRK * VCT_ZVC * 4 * I*4 * * * TRK * NVTRKC * 5 * I*4 * * * TRK * NTRKC * 6 * R*4 * * * TRK * CHVCC
...
****************************************************************** * Block * Entries * Unpacked * Packed * Packing Factor * ****************************************************************** * FLT * 5882 * 60 * 60 * 1.000 * * TLT * 5882 * 60 * 60 * 1.000 * * TRK * 5882 * 40 * 40 * 1.000 * * CAL * 5882 * 60 * 60 * 1.000 * * ELEC * 5882 * 144 * 144 * 1.000 * * ZUFOS1 * 5882 * 16 * 16 * 1.000 * * ZUFOS2 * 5882 * 4 * 4 * 1.000 * * ZUFOS3 * 5882 * 12 * 12 * 1.000 * * ZUFOS4 * 5882 * 96 * 96 * 1.000 * * ZUFOS5 * 5882 * 16 * 16 * 1.000 * * TEMP * 5882 * 8 * 8 * 1.000 * * TAG1 * 5882 * 4 * 4 * 1.000 * * TAG2 * 5882 * 4 * 4 * 1.000 * * LUMI1 * 5882 * 12 * 12 * 1.000 * * LUMI2 * 5882 * 12 * 12 * 1.000 * * GEN * 5882 * 32 * 29 * 1.103 * * MCTRUE * 5882 * 88 * 88 * 1.000 * * BGDTUP * 5882 * 28 * 28 * 1.000 * * Total * --- * 696 * 693 * 1.004 * ****************************************************************** * Blocks = 18 Variables = 126 Columns = 174 * ******************************************************************
And to page through the data use nt/scan 10
PAW > nt/scan 10 /NTUPLE/SCAN: Only showing first 30 of expressions +-------+--------------+-------------+--------------+--------------+--------------+-------------+-------------+--------------+----- | Event | TrigDat | TLT | VCT_XVC | VCT_YVC | VCT_ZVC | NVTRKC | NTRKC | CHVCC | FC +-------+--------------+-------------+--------------+--------------+--------------+-------------+-------------+--------------+----- | 1 | | | -1.43087 | 1.24444 | 18.4673 | 2 | 3 | 3.27624 | 0. | * 1 | 0. | 0 | | | | | | | | * 2 | 0. | 0 | | | | | | | | * 3 | 0. | 0 | | | | | | |
I've got 174 columns in this particular ntuple. To restrict the selection use:
nt/scan 10 varlis=[Comma separated list of columns]
PAW > nt/scan 10 varlis=ENE44M:ZufoPz +-------+-------------+--------------+--------------+--------------+ | Event | ENE44M | TEMPLUME | TEMPLUMG | ZufoPz | +-------+-------------+--------------+--------------+--------------+ | 1 | 1000 | -500. | -500. | 2.55895 | | 2 | 1000 | -500. | -500. | 11.4667 | | 3 | 1000 | -500. | -500. | -1.63046 | | 4 | 1000 | -500. | -500. | 1.37581 | | 5 | 1000 | -500. | -500. | -2.54238 | | 6 | 1000 | -500. | -500. | -1.91473 | | 7 | 1000 | -500. | -500. | 1.51911 | | 8 | 1000 | -500. | -500. | 0. | | 9 | 1000 | -500. | -500. | 12.3712 | | 10 | 1000 | -500. | -500. | -4.4222 | | 11 | 1000 | -500. | -500. | 0.0533053 | | 12 | 1000 | -500. | -500. | -0.0746093 | | 13 | 1000 | -500. | -500. | 33.6832 | | 14 | 1000 | -500. | -500. | 0.223857 | | 15 | 1000 | -500. | -500. | 8.72115 | | 16 | 1000 | -500. | -500. | 10.5479 | | 17 | 1000 | -500. | -500. | 2.4528 | | 18 | 1000 | -500. | -500. | -1.17858 | | 19 | 1000 | -500. | -500. | 1.03199 | +-------+-------------+--------------+--------------+--------------+
After this, I knew I could load the data but I really wanted to run the files through my old analysis code in FORTRAN.
Rather than try to compile the old project, I created a simple FORTRAN program to try and load the ntuple:
jonathan@jonathan-Inspiron-5759:~/Development/Physics/New Stuff/Development$ more Zeus1.f program main print *, "Test loading ntuple files" call hlimit(2000000) call hropen(80,'ntuple','nommc_1033.rz','',4096,istat) if (istat.ne.0) then print *, "Failed to open input file" stop endif print *, "Loaded nommc_1033.rz" end program main
(I'll talk about these commands in the next blog)
Compilation is easy with the official repository, we just need to link against packlib:
gfotrtran Zeus1.f -lpacklib
And with no problems it created the default executable a.out (that takes me back!)
So with huge anticipation I ran it and, oh...
jonathan@jonathan-Inspiron-5759:~/Development/Physics/New Stuff/Development$ ./a.out Test loading ntuple files !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! LOCB/LOCF: address 0x7f57832df7a0 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 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
The reason was to be found in the readme file in the same location as the libraries:
/usr/share/doc/libpacklib1-dev/README.64-bit
CERNLIB was never designed to run on machines where the size of a pointer is 64 bits. The code implicitly assumes that sizeof(void *) == sizeof(int) == 4 in many different places. The biggest culprits are the ZEBRA and COMIS sets of routines in the packlib and pawlib libraries, respectively. This would be difficult to fix without rewriting megabytes of FORTRAN source code.
My old 2002 laptop was of course 32bit so this wasn't a problem before. My next blog will describe how I got this working.
No comments:
Post a Comment