| # Gaudi Framework, version v20r2
Generated: 18 Jul 2008

- Main Page
- Namespaces
- Classes
- Files
- Directories
- Related Pages

- Search for |

- File List
- File Members

# NTupleInfo.h

Go to the documentation of this file.

    00001 #ifdef __cplusplus
    00002
    00003 #ifndef HBOOKCNV_NTUPLEINFO_H
    00004 #define HBOOKCNV_NTUPLEINFO_H 1
    00005
    00006 #include "GaudiKernel/Kernel.h"
    00007
    00008 class NTUPLEINFO   {
    00009 public:
    00010   long    id;
    00011   char    title[128];
    00012   char    rzdir[256];
    00013   long    numEnt;
    00014   long    numVar;
    00015
    00016   //  struct _var   {
    00017     char     name[512][64];
    00018     long     dim[512];
    00019     long     theDim[512][5];
    00020     long     hasIndex[512];
    00021     char     index[512][64];
    00022     char     type[512];
    00023     long     size[512];
    00024     long     hasRange[512];
    00025     long     irange[512][2];
    00026     double   frange[512][2];
    00027     char     block[512][12];
    00028     template <class TYPE>
    00029     void getBounds(long i, TYPE& min, TYPE& max, TYPE& null)  const  {
    00030       if ( hasRange )   {
    00031         min = (type[i]=='R') ? TYPE(frange[i][0]) : TYPE(irange[i][0]);
    00032         max = (type[i]=='R') ? TYPE(frange[i][1]) : TYPE(irange[i][1]);
    00033       }
    00034       else  {
    00035         min = NTuple::Range<TYPE>::min();
    00036         max = NTuple::Range<TYPE>::max();
    00037       }
    00038       null = TYPE(0);
    00039     }
    00040     TEMPLATE_SPECIALIZATION
    00041     void getBounds(long /*i*/, bool& min, bool& max, bool& null )  const  {
    00042       min = null = false;
    00043       max = true;
    00044     }
    00045     template <class TYPE>
    00046     bool isRangeWithin(long i, TYPE min, TYPE max)  const  {
    00047       if ( hasRange[i] )   {
    00048         return min <= (TYPE)irange[i][0] && (TYPE)irange[i][1] <= max;
    00049       }
    00050       else if ( type[i] == 'I' || type[i] == 'U' )   {
    00051         return NTuple::Range<TYPE>::min() <= min && NTuple::Range<TYPE>::max() >= max;
    00052       }
    00053       return false;
    00054     }
    00055     TEMPLATE_SPECIALIZATION
    00056       bool isRangeWithin(long i, float /* min */, float /* max*/ )  const  {
    00057       if ( size[i] == 32 ) return true;
    00058       return false;
    00059     }
    00060     TEMPLATE_SPECIALIZATION
    00061       bool isRangeWithin(long i, double /* min */, double /* max */ )  const  {
    00062       if ( size[i] == 64 ) return true;
    00063       return false;
    00064     }
    00065     TEMPLATE_SPECIALIZATION
    00066     bool isRangeWithin(long /* i */ , bool min, bool max)  const  {
    00067       return min == false && max == true;
    00068     }
    00069     long idist(long i)   const   {
    00070         return irange[i][1] - irange[i][0];
    00071     }
    00072     double fdist(long i)  const    {
    00073         return frange[i][1] - frange[i][0];
    00074     }
    00075   //  } var[512];
    00076
    00077   long getIndex(const char* nam)  const  {
    00078     if ( nam[0] != 0 )   {
    00079       for ( int i = 0; i < numVar; i++ )    {
    00080         if ( strncmp(name[i], nam, sizeof(name[i])) == 0 )   {
    00081           return i;
    00082         }
    00083       }
    00084     }
    00085     return -1;
    00086   }
    00087 };
    00088
    00089 #endif // HBOOKCNV_NTUPLEINFO_H
    00090
    00091 #else
    00092 #ifdef _WIN32
    00093         STRUCTURE /NTUPLEVAR/
    00094           CHARACTER*64 NAME
    00095           INTEGER      NDIM
    00096            INTEGER      THEDIM(5)
    00097           INTEGER      HASINDEX
    00098            CHARACTER*64 INDEX
    00099           CHARACTER*1  TYPE
    00100            INTEGER      SIZE
    00101           INTEGER      HASRANGE
    00102           UNION
    00103             MAP
    00104               INTEGER IMIN, IMAX
    00105             END MAP
    00106             MAP
    00107               REAL*8  FMIN, FMAX
    00108             END MAP
    00109           END UNION
    00110           CHARACTER*12 VBLOCK
    00111         END STRUCTURE
    00112
    00113         STRUCTURE /NTUPLEINFO/
    00114           INTEGER       ID
    00115           CHARACTER*128 TITLE
    00116           INTEGER       NOENT
    00117           INTEGER       NDIM
    00118            RECORD /NTUPLEVAR/ VAR(512)
    00119         END STRUCTURE
    00120 #else
    00121 c        TYPE NTUPLEVAR
    00122           CHARACTER*64 VNAME(512)
    00123           INTEGER      VNDIM(512)
    00124           INTEGER      VTHEDIM(512,5)
    00125           INTEGER      VHASINDEX(512)
    00126           CHARACTER*64 VINDEX(512)
    00127           CHARACTER*1  VTYPE(512)
    00128           INTEGER      VSIZE(512)
    00129           INTEGER      VHASRANGE(512)
    00130 c          UNION
    00131 c            MAP
    00132   INTEGER VIMIN(512), VIMAX(512)
    00133 c            END MAP
    00134 c            MAP
    00135   REAL*8  VFMIN(512), VFMAX(512)
    00136 c            END MAP
    00137 c          END UNION
    00138 c        END TYPE NTUPLEVAR
    00139
    00140 c        TYPE NTUPLEINFO
    00141           INTEGER       NTID
    00142           CHARACTER*128 NTTITLE
    00143           INTEGER       NTNOENT
    00144           INTEGER       NTNDIM
    00145 c          TYPE(NTUPLEVAR) VAR(512)
    00146 c        END TYPE NTUPLEINFO
    00147         CHARACTER*12  VBLOCK(512)
    00148        COMMON/NTUPLEINFO/VNAME,VNDIM,VTHEDIM,
    00149      &  VHASINDEX,VINDEX,VTYPE,VSIZE,
    00150      &  VHASRANGE, VIMIN, VIMAX, VFMIN, VFMAX,
    00151      &  NTID, NTTITLE, NTNDIM, VBLOCK
    00152 #endif
    00153 #endif