Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   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   char    block[32];
00016 
00017   //  struct _var   {
00018     char     name[512][64];
00019     long     dim[512];
00020     long     theDim[512][5];
00021     long     hasIndex[512];
00022     char     index[512][64];
00023     char     type[512];
00024     long     size[512];
00025     long     hasRange[512];
00026     long     irange[512][2];
00027     double   frange[512][2];
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 #endif // HBOOKCNV_NTUPLEINFO_H
00089 
00090 #else
00091 #ifdef WIN32
00092         STRUCTURE /NTUPLEVAR/
00093           CHARACTER*64 NAME
00094           INTEGER      NDIM
00095            INTEGER      THEDIM(5)
00096           INTEGER      HASINDEX
00097            CHARACTER*64 INDEX
00098           CHARACTER*1  TYPE
00099            INTEGER      SIZE
00100           INTEGER      HASRANGE
00101           UNION
00102             MAP
00103               INTEGER IMIN, IMAX
00104             END MAP
00105             MAP
00106               REAL*8  FMIN, FMAX
00107             END MAP
00108           END UNION
00109         END STRUCTURE
00110 
00111         STRUCTURE /NTUPLEINFO/
00112           INTEGER       ID
00113           CHARACTER*128 TITLE
00114           INTEGER       NOENT
00115           INTEGER       NDIM
00116            CHARACTER*8   BLOCK 
00117            RECORD /NTUPLEVAR/ VAR(512)
00118         END STRUCTURE
00119 #else
00120 c        TYPE NTUPLEVAR
00121           CHARACTER*64 VNAME(512)
00122           INTEGER      VNDIM(512)
00123           INTEGER      VTHEDIM(512,5)
00124           INTEGER      VHASINDEX(512)
00125           CHARACTER*64 VINDEX(512)
00126           CHARACTER*1  VTYPE(512)
00127           INTEGER      VSIZE(512)
00128           INTEGER      VHASRANGE(512)
00129 c          UNION
00130 c            MAP
00131   INTEGER VIMIN(512), VIMAX(512)
00132 c            END MAP
00133 c            MAP
00134   REAL*8  VFMIN(512), VFMAX(512)
00135 c            END MAP
00136 c          END UNION
00137 c        END TYPE NTUPLEVAR
00138 
00139 c        TYPE NTUPLEINFO
00140           INTEGER       NTID
00141           CHARACTER*128 NTTITLE
00142           INTEGER       NTNOENT
00143           INTEGER       NTNDIM
00144           CHARACTER*8   NTBLOCK 
00145 c          TYPE(NTUPLEVAR) VAR(512)
00146 c        END TYPE NTUPLEINFO
00147        COMMON/NTUPLEINFO/VNAME,VNDIM,VTHEDIM,
00148      &  VHASINDEX,VINDEX,VTYPE,VSIZE,
00149      &  VHASRANGE, VIMIN, VIMAX, VFMIN, VFMAX,
00150      &  NTID, NTTITLE, NTNDIM, NTBLOCK
00151 #endif
00152 #endif

Generated at Wed Nov 21 12:20:49 2001 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000