/NTUPLE

Ntuple creation and related operations.


/NTUPLE/CREATE idn title nvar chrzpa nprime varlist

Create a Row_Wise_Ntuple. (See below how to create a Column_Wise_Ntuple). The Ntuple may be created either purely in memory or possibly using an automatic overflow to an RZ file. Memory allocation works in the following way. If CHRZPA = ' ', then a bank of NPRIME words is created. When the space in this bank is exhausted at filling time, a new linear structure of length NPRIME is created and this process will be repeated should the structure become exhausted. If CHRZPA contains the top directory name of an already existing RZ file (as declared with HISTO/FILE), then a bank of length NPRIME is also created, but at filling time, this bank is moved to the RZ file when full, and then it is overwritten by any new entries. The Ntuple can be filled by calling HFN from an interactively defined subroutine called by the command NTUPLE/LOOP or by NTUPLE/READ. The number of variables per data point is given in the parameter NVAR.

To create a Column_Wise_Ntuple, create a file, eg. newnt.f with:

Subroutine Newnt character*8 mother,in1,in2 common/ntupc/mother,in1,in2 common/ntupr/xover lin=41 lout=42 id=1 open(unit=lin,file='datafile.dat',status='old') call hropen(lout,'NTUPLE','New_Ntuple.hbook','N',1024,istat) call hbnt(id,'New Ntuple',' ') call hbname(id,'ntupr',xover,'XOVER') call hbnamc(id,'ntupc',mother,'MOTHER:c*8,in1:c*8,in2:c*8') 10 read(lin,1000,end=20,err=20)xover,mother,in1,in2

1000 format(e15.7,2x,a,7x,a,7x,a)

call hfnt(1) go to 10 20 call hrout(id,icycle,' ') call hrend('NTUPLE') close (lin) close (lout) end

and then call this routine via the CALL command:

PAW > call newnt.f

/NTUPLE/LIST

List all Ntuples in the Current Directory. Note that the command HISTO/LIST lists all histograms and Ntuples in the Current Directory.


/NTUPLE/PRINT idn

Print a summary about Ntuple IDN. Number of entries, variables names and limits are listed.


/NTUPLE/HMERGE outfile infiles

Merge HBOOK files containing histograms and/or ntuples. Ntuples are merged and histograms with the same ID are added. The INFILES are merged into a new file OUTFILE. If OUTFILE already exists, it is overwritten.

Note that if there is a histogram in PAW memory that has the same identifier as a histogram in one of the files to be merged, then the contents of the histogram in memory are added to those of the histogram in the file. This can be avoided by deleting the memory histogram (using H/DEL) before issuing the HMERGE command.


/NTUPLE/DUPLICATE id1 id2 [ newbuf title option ]

OPTION:

'' ''
'A'
Set the Addresses of variables in common /PAWCR4,etc/.
'M'
Create ID2 as a Memory resident Ntuple.
'' ''
Copy ID1 structure in ID2. Reset addresses of variables.

The structure of Ntuple ID1 is duplicated in a new ntuple ID2. This command is useful when one wants to create an ntuple with the same variables but only a subset of the events. NEWBUF is the buffer size for ID2. If NEWBUF<0 the buffer size of ID1 is taken. If NEWBUF=0 the current buffer size is taken (10000 words for RWNs). NEWBUF>0 will be the new buffer size. If TITLE=' ' ID2 has the same title as ID1. In case of a disk-resident ntuple (default), ID2 is created into the current working directory which must be open in WRITE mode.

Example with a Row Wise Ntuple:

Macro DUPRWN Close 0 Hi/File 1 source.hbook Hi/File 2 new.hbook ! N Nt/Dup //lun1/30 2 * Application Comis Quit Real Function Dup(dum) Include ? If (X.gt.0..Or.Y.gt.0.) call hfn(2,X) dup=1. end Quit * nt/loop //lun1/30 dup hrout 2

Note that the statement 'include ?' allows to create automatically the inlude file (comis.inc) corresponding to the ntuple structure. The command UWFUNC is not required in this case.

Example with a Column Wise Ntuple:

Macro DUPCWN * Close 0 | Close all the currently opened file H/file 1 source.hbook Uwfunc //lun1/1 source.inc | generate source.inc H/file 2 new.hbook ! N | Create a new hbook file Nt/Dup //lun1/1 2 | Duplicate the ntuple 1 in the ntuple 2 * * Comis routine which Loop on all events of Id1 and select some events * to be written in the new ntuple Id2. * Application COMIS quit Subroutine ntdup(Id1,Id2) Include 'source.inc' Call Hnoent(Id1,Noent) Do Ievent=1,Noent Call Hgnt(Id1,Ievent,Ierr) If (Ierr.ne.0) Goto 20 If (X.Gt.0..Or.Y.Gt.0.) Then Call Hfnt(Id2) Endif Enddo 20 Continue * End Quit * Call Ntdup(1,2) | Execute the routine Ntdup Hrout 2 | Write Id2 on disk

/NTUPLE/RECOVER idn

To recover Ntuple ID. If the job producing the Ntuple crashed or the header was not stored correctly in the file with HROUT, RECOVER will scan the Ntuple to rebuild the header table and recompute the number of entries. The file on which the Ntuple resides must be open in Update mode.


/NTUPLE/SCAN idn [ uwfunc nevent ifirst option varlis ]

OPTION:

'' ''
'' ''
Alphanumeric output of the Ntuple.
'S'
Graphical scan (spider plot).
'S2'
Graphical scan (segments plot).
'A'
Used with 'S' it displays the average spider.

Scan the entries of an Ntuple subject to user cuts. Scan the variables for NEVENT events starting at IFIRST, requiring that the events satisfy cut UWFUNC. In the case of Alphanumeric output Up to 10 variables may be scanned, the default is to scan the first 10 variables.

When the option S (Spider plot) is specified, each event is presented in a graphical form (R versus PHI plot) to give a multi dimensional view of the event. Each variable is represented on a separate axis with a scale ranging from the minimum to the maximum value of the variable. A line joins all the current points on every axis where each point corresponds to the current value of the variable. When the HCOL parameter is specified (eg SET HCOL 1002) a fill area is drawn. When the additional option A is specified, a spider plot of the average value for each variable is also drawn. When the option S2 (Segment plot) is specified, wedges are drawn along each axis instead of the line joining the points.

NB : a minimum of three variables in VARLIS is required for any graphical plot.

VARLIS may contain a list of the original variables, expressions of the original variables or/and ranges of variables. A range can be given in the following form:

: means all variables (default). var1:var2 means from variable var1 to variable var2 included. var1: means from variable var1 to the last. :var2 means from variable 1 to variable var2

For example, if IDN=30 has the 3 variables X,Y,Z,U,V,W one can do:

PAW > scan 30 PAW > scan 30 option=s each event is drawn as a spider plot. PAW > scan 30 option=sa each event is drawn as a spider plot and the average spider plot is also drawn. PAW > set 2BUF 1 PAW > scan 30 option=s2 More...? ( <CR>/N/G ) G answering 'G' with double buffer on, create a graphical animation of the ntuple content. PAW > scan 30 option=s X:Z W PAW > scan 30 varlis=X:Z W PAW > scan 30 z>10 PAW > scan 30 z>10 ! ! ! z abs(x) y+z x func.for where func.for is a COMIS function returning an expression of the original variables. This function func.for may be generated automatically by the PAW command: PAW > uwfunc 30 func.for

Note that IFIRST and NEVENT parameters are not meaningful in case of CHAINs.


/NTUPLE/LOOP idn uwfunc [ nevent ifirst ]

Invoke the selection function UWFUNC for each event starting at event IFIRST. In UWFUNC, the user can fill one or several histograms previously booked. The loop will be terminated if UWFUNC returns a negative value. For more information about UWFUNC, see command NTUPLE/PLOT.

The ntuple identifier IDN, is an integer in this command. It make no sense to have an expression like 10.x.

Note that IFIRST and NEVENT parameters are not meaningful in case of CHAINs.


/NTUPLE/GCUT cid idn [ uwfunc nevent ifirst nupd option idh wkid ]

OPTION:

'' ''
'C'
Draw a smooth curve.
'S'
Superimpose plot on top of existing picture.
'+'
Add contents of IDN to last plotted ntuple.
'B'
Bar chart format.
'L'
Connect channels contents by a line.
'P'
Draw the current polymarker at each channel or cell.
'*'
Draw a * at each channel.
'U'
Update channels modified since last call.
'E'
Compute (HBARX) and draw error bars with current marker.
'A'
Axis labels and tick marks are not drawn.
'' ''
Draw the ntuple as an histogram.
'PROF'
Fill a Profile histogram (mean option).
'PROFS'
Fill a Profile histogram (spread option).
'PROFI'
Fill a Profile histogram (integer spread option).

Define a graphical cut on a one or two dimensional plot. First Project and plot an Ntuple as a (1-Dim or 2-Dim) histogram with automatic binning (ID=1000000), possibly using a selection algorithm. See NTUPLE/PLOT for full details on what expressions can be plotted and which options can be given. Then the graphical cut is defined using the mouse.


/NTUPLE/PROJECT idh idn [ uwfunc nevent ifirst ]

Project an Ntuple onto a 1-Dim or 2-Dim histogram, possibly using a selection function or predefined cuts. IDN may be given as IDN or IDN.X , IDN.Y%X (Y%X means variable Y of Ntuple IDN versus variable X). For more information about UWFUNC, see command NTUPLE/PLOT. The histogram IDH is not reset before filling. This allows several PROJECTs from different Ntuples.

Note that IFIRST and NEVENT parameters are not meaningful in case of CHAINs.


/NTUPLE/READ idn fname [ format opt nevent match ]

Read Ntuple values from the alphanumeric file FNAME with the format specifications in FORMAT.

This command works for row wise Ntuple only.

Before executing this command, the Ntuple IDN must have been created with the command Ntuple/Create.

MATCH is used to specify a pattern string, restricting the Ntuple filling only to the records in the file which verify the pattern. The possible patterns are:

/string/ match a string (starting in column 1) -/string/ do not match a string (starting in column 1) /string/(n) match a string, starting in column n /string/(*) match a string, starting at any column

Example:

H/del * Appl Data ntmatch.dat 101. 201. 301. C 102. 202. 302. 103. 203. 303. C 104. 204. 304. C 105. 205. 305. 106. 206. 306. 107. 207. 307. 108. 208. 308. 109. 209. 309. ntmatch.dat Nt/Create 4 'Test of Match' 3 ! ! Xmatch Ymatch Zmatch Nt/Read 4 ntmatch.dat ! ! ! -/C/(*) Nt/SCAN 4

In this macro all the lines with a C at the end are not read.


/NTUPLE/PLOT idn [ uwfunc nevent ifirst nupd option idh ]

OPTION:

'' ''
'C'
Draw a smooth curve (1D plots).
'S'
Superimpose plot on top of existing picture.
'+'
Add contents of IDN to last plotted ntuple (1D plots).
'B'
Bar chart format (1D plots).
'L'
Connect channels contents by a line (1D, 2D and 3D plots).
'P'
Draw the current polymarker at each channel or cell (1D plots).
'*'
Draw a * at each channel (1D plots).
'U'
Update channels modified since last call (1D plots).
'E'
Compute (HBARX) and draw error bars with current marker.
'A'
Axis labels and tick marks are not drawn.
'' ''
Draw the ntuple as an histogram.
'N'
Don't draw anything, but fill the 1D or 2D histogram IDH
'G'
Draw a gouraud shaded surface (3D plots).
'PROF'
Fill a Profile histogram (mean option).
'PROFS'
Fill a Profile histogram (spread option).
'PROFI'
Fill a Profile histogram (integer spread option).

Project and plot an Ntuple as a (1-Dim or 2-Dim) histogram with automatic binning (ID=1000000), possibly using a selection algorithm. See parameter CHOPT in command HISTO/PLOT to have more details on the possible OPTION.

IDN may be given as IDN.X IDN.Y%X IDN.Y%X%Z IDN.Y%X%Z%T IDN.expression1 IDN.expression1%expression2 IDN.expression1%expression2%expression3 IDN.expression1%expression2%expression3%expression4

Y%X means a scatter-plot Y(I) versus X(I) where I is the event number. In this example, X and Y are the names of the variables 1 and 2 respectively. Expression 1 is any numerical expression of the Ntuple variables. It may include a call to a COMIS function. Y%X%Z means a 3D scatter-plot Z(I) versus Y(I) versus X(I) where I is the event number. If option "G" is given, three Gouraud shaded surfaces are drawn. The green one is the average. Y%X%Z means a 3D scatter-plot Z(I) versus Y(I) versus X(I) where I is the event number. T is mapped on the color map.

UWFUNC may have the following forms: 1- UWFUNC='0' or missing (only IDN given). No selection is applied. 2- UWFUNC is a CUT or combination of valid CUTS created by the command NTUPLE/CUTS. Ex: UWFUNC=$1 means use cut $1 UWFUNC=$1.AND.$2 UWFUNC=.NOT.($1.AND.$2) UWFUNC=($1.OR.$2).AND.$3 3- UWFUNC is a FORTRAN expression Ex: X>3.14.AND.(Y<Z+3.15) 4- UWFUNC is a variable name or an arithmetic expression Ex: NT/PLOT 30.X Y weight of each event is variable Y NT/PLOT 30.X X**2+Y**2 5- UWFUNC is the name of a selection function in a text file with the name UWFUNC.FTN, UWFUNC.FOR, UWFUNC FORTRAN (Apollo, VAX, IBM).

The command UWFUNC may be used to generate automatically this function. For example if IDN=30 is an Ntuple with 3 variables per event and 10000 events, then

NTUPLE/PLOT 30.X SELECT.FOR

will process the 10000 events of the Ntuple IDN=30. For each event, the function SELECT is called. It returns the weight of the event. Example:

FUNCTION SELECT(X) DIMENSION X(3) IF(X(1)**1+X(2)**2.LT.1.5)THEN SELECT=0. ELSE SELECT=1. ENDIF END

The file SELECT.FOR (VAX), SELECT.FTN (Apollo) or SELECT FORTRAN (IBM) can be edited from PAW using the command EDIT. Note that if the suffix (.FTN, .FORTRAN or .FOR) is omitted, then COMIS will start from the precompiled version in memory and not from the file. Results of a selection can be saved in a MASK (See NTUPLE/MASK).

Ex: NT/PLOT 30.X Z<0.4>>MNAME(4) means mark bit 4 in mask MNAME for all events satisfying the condition Z<0.4

A MASK may also be given as input to a selection expression.

Ex: NT/PLOT 30.X MNAME(4).and.Z<0.4 means all events satisfying bit 4 of MNAME AND Z<0.4

It is possible to plot expressions of the original variables.

Ex 1: NT/PLOT 30.SIN(X)%SQRT(Y**2+Z**2) Z<0.4 plots a scatter-plot of variable U versus V for all events satisfying the condition Z<0.4. U and V are defined as being U=SIN(X) and V=SQRT(X**2+Y**2) Ex 2: NT/PLOT 30.FUNC.FTN(X)%(SIN(Y)+3.) Z<0.2.and.TEST.FTN>6 plots a scatter-plot of variable U versus V for all events satisfying the condition (Z<0.2 and the result of the COMIS function TEST.FTN >6). U and V are defined as being U=Result of the COMIS function FUNC.FTN, V=SIN(Y)+3.

The default identifier of the histogram being filled is IDH=1000000. At the next invocation of this command, it will be overwritten. If either NEVENT or IFIRST or NUPD are negative, then the identifier of the histogram being filled will be taken as IDH=-NEVENT or IDH=-IFIRST or IDH=-NUPD. IDH may have been created with H/CREATE. Before filling IDH, the contents of IDH are reset if IDH already exists. Use NTUPLE/PROJECT to cumulate several passes into IDH. Note that IDH not equal to 1000000 is a convenient way to force user binning. Every NUPD events, the current status of the histogram is displayed.

Note that IFIRST and NEVENT parameters are meaningless in case of CHAINs.


/NTUPLE/CHAIN [ cname entry ]

Using the chain command one can build logical Ntuples of unlimited size. The chain command creates an Ntuple chain CNAME and add member(s) ENTRY. If the chain already exists the member is simply added. More than one member may be specified at a time. A chain can contain three different type of members: files, logical units and other chains. The member type is deduced from the format of the member. Entries containing the characters . / : ; $ are considered to be files, entries like //LUN4 are assumed to be logical units and all other type of entries are chains. Chain names must be unique. After a chain has been defined it can be traversed, by all Ntuple commands (NT/PLOT, NT/PROJ, NT/LOOP), by changing the current working directory to the chain: CD //CNAME. A member may be deleted from a chain by preceding it by a - sign. A complete chain can be deleted by preceding the chain name by a -. All chains can be deleted by giving a - as chain name. Not specifying any parameters results in the listing of all defined chains. A chain tree will be printed by appending a > character to the chain name. The path of all chain members, from chain CNAME downwards, can be changed by specifying a chain path. This is done by giving a chain name followed by the -P option and a path specification. The chain path will be pre-pended to the member names. Chains down the tree can override a path specified higher up in the tree.

Examples of chain (Ntuple tree) definition: CHAIN Year93 Jan Feb March April May ... CHAIN Jan Week1 Week2 Week3 Week4 CHAIN Week1 file1.hbook file2.hbook ... CHAIN Week2 file3.hbook file4.hbook ... CD //Jan NT/PLOT 10.e ; loop over all files in chains Week1, Week2, Week3, ... CD //Year93 ; loop over all files in chains Jan, Feb, March, ... CHAIN Year93 -P /user/delphi ; all files from chain Year93 downward will be changed to /user/delphi/file1.hbook, ... CHAIN Year93> ; print the chain tree Year93 CHAIN -Feb ; delete chain Feb CHAIN Jan -file3.hbook ; delete file3.hbook from chain Jan

Note that IFIRST and NEVENT parameters are not meaningful in case of CHAINs.


/NTUPLE/CUTS cutid [ option fname wkid ]

OPTION:

'P'
Print definition of cut CUTID.
'-'
Reset cut CUTID.
'R'
Read definition of cut CUTID from file FNAME.
'W'
Write definition of cut CUTID on file FNAME (text file).
'D'
Draw cut contour.

Define the CUTID with the format $nn. nn is an integer between 1 and 99. This cut can then be used in subsequent commands NTUPLE/PLOT, PROJECT.

OPTION='expression' allows to define the cut CUTID. For example the command: PAW > CUTS $1 X<0.8.and.Y<SQRT(X) defines the cut $1.

Note that CUTID=$0 means all cuts.


/NTUPLE/CSELECT [ chopt csize ]

CHOPT:

'' ''
Comment is left adjusted to the current zone
'R'
Comment is right adjusted to the current zone
'C'
Comment is centered to the current zone
'B'
Comment is drawn below the top zone line
'N'
All subsequent NTUPLE/PLOT commands will print the selection mechanism with the options specified in CHOPT.

To write selection mechanism as a comment on the picture. By default, the comment is drawn left justified above the top zone line. Example:

CSEL All coming NT/PLOT commands will draw a comment of size CSIZE=0.28cm Left justified. CSEL NRB 0.4 All coming NT/PLOT commands will draw a comment of size 0.4 cm Right justified Below the top line. CSEL CB Draw previous selection mechanism Centered Below the top zone line.

The Global title font (SET GFON) with precision 1 is used to draw the text.


/NTUPLE/UWFUNC idn fname [ chopt ]

CHOPT:

'' ''
Generate the FORTRAN skeleton of a selection function.
'E'
Present the selection function in the local editor.
'P'
Code to print events is generated (not valid for new Ntuples).
'T'
Names of the Ntuple variables are generated in DATA statements (not valid for new Ntuples).

To generate the FORTRAN skeleton of a selection function or the INCLUDE file with the columns declaration.

A FORTRAN function is generated if the FNAME is of the form, xxx.f, xxx.for, xxx.fortran. Otherwise an INCLUDE file is generated. Example: If Ntuple ID=30 has variable names [X,Y,Z,ETOT,EMISS,etc] then:

NTUPLE/UWFUNC 30 SELECT.FOR will generate the file SELECT.FOR with:

FUNCTION SELECT(XDUMMY) COMMON/PAWIDN/IDNEVT,VIDN1,VIDN2,VIDN3,X,Y,Z,ETOT,EMISS,etc SELECT=1. END

Then using the command EDIT one can modify this file which could then look something like (IDNEVT is the event number):

FUNCTION SELECT(XDUMMY) COMMON/PAWIDN/IDNEVT,VIDN1,VIDN2,VIDN3,X,Y,Z,ETOT,EMISS,etc IF(X**2+Y**2.GT.Z**2.OR.ETOT.GT.20.)THEN SELECT=1. ELSE SELECT=0. ENDIF END

If in a subsequent command NTUPLE/PLOT, the selection function SELECT is used, then:

If NTUPLE/PLOT 30.ETOT SELECT.FOR VIDN1=ETOT If NTUPLE/PLOT 30.SQRT(X**2+Y**2)%(ETOT-EMISS) VIDN1=ETOT-EMISS VIDN2=SQRT(X**2+Y**2)

NTUPLE/UWFUNC 30 SELECT.INC will generate an include file. This include file may be referenced in a selection function in the following way:

FUNCTION SELECT(XDUMMY) include 'select.inc' SELECT=1. IF(X.LE.Y)SELECT=0. END

Note that the command UWFUNC is not required if the SELECT function has the following form:

FUNCTION SELECT(XDUMMY) include ? SELECT=1. IF(X.LE.Y)SELECT=0. END

In this case (thanks to the statement 'include ?') the include file will be generated automatically with the name 'comis.inc'.


/NTUPLE/LINTRA idn [ chopt nevent ifirst nvars varlis ]

CHOPT:

'N'
The variables are normalized. This option is useful in the case the ranges of variables are very different
'P'
Print more results about the analysis

Data reduction on Ntuple. The method used is the PRINCIPAL COMPONENTS ANALYSIS. The Principal Components Analysis method consists in applying a linear transformation to the original variables of a ntuple. This transformation is described by an orthogonal matrix and is equivalent to a rotation of the original space to a new set of coordinates vectors, which hopefully provide easier identification and dimensionality reduction. This matrix is real positive definite and symmetric and has all its eigenvalues greater than zero. Among the family of all complete orthonormal bases, the basis formed by the eigenvectors of the covariance matrix and belonging to the largest eigenvalues corresponds to the most significant features for the description of the original ntuple. Reduction of the variables for NEVENT events starting at IFIRST The default is to take all the 20 first variables. This command creates a file : -> XTOXSI.FORTRAN or xtoxsi.for,xtoxsi.ftn. This file contains a Fortran function which computes the new variables. These new variables can be visualized in PAW with for example:

PAW > Ntuple/plot id.xtoxsi.ftn(1) PAW > Ntuple/plot id.xtoxsi.ftn(1)%xtoxsi.ftn(3)

/NTUPLE/VMEM [ mxsize ]

Change or show the size of the dynamic memory buffer used to store Ntuple columns during Ntuple analysis. The default is 10 MB. Giving a value of 0 turns the buffer facility off. The upper limit is 128 MB, but be sure you have enough swap space and realize that when the buffer is swapped to disk you loose part of the benefit of the buffer facility (which is to reduce the number of disk accesses). Omitting the argument or specifying -1 will show you the current upper limit and used and free space. Giving -2 shows which columns are currently stored in memory.


/NTUPLE/DUMP idn [ uwfunc nevent ifirst filename sep1 sep2 ]

For the selected events the values of the expressions are printed to the screen (by default) or to a specified file. If the expression is non scalar (e.g. vector) the elements of the vector are sepatated by a ',' (changed with SEP1). The values of the expressions are separated by a '%' (changed with SEP2). The output of the DUMP command is meant for consumption by other computer programs, for easy inspection of an ntuple the NTUPLE/SCAN command might be more suitable.


/NTUPLE/FLAGS_QP [ option value ]

Set debug options for the Query Processor