Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:16:38

0001 
0002 #ifndef HiMain2_h
0003 #define HiMain2_h
0004 
0005 extern "C" { void* himain2_address_(void); }
0006 /**
0007 @class HiMain2
0008 @brief       Class definition for HiMain2, which is used
0009       to modify the Hijing HIMAIN2 common.
0010 */
0011 class HiMain2 {
0012 public:
0013     HiMain2();
0014     ~HiMain2();
0015     
0016     int&    katt    (int i, int j);
0017     float&  patt    (int i, int j);
0018     float&  vatt    (int i, int j);
0019 
0020     void    init    (void);
0021 
0022     // return common array lengths
0023     inline int  leniKatt() const {return _leniKatt;}
0024     inline int  lenjKatt() const {return _lenjKatt;}
0025     inline int  leniPatt() const {return _leniPatt;}
0026     inline int  lenjPatt() const {return _lenjPatt;}
0027     inline int  leniVatt() const {return _leniVatt;}
0028     inline int  lenjVatt() const {return _lenjVatt;}
0029 
0030 private: 
0031 
0032     // Lengths of array in HiMain2 common
0033     static const int _leniKatt  = 130000;
0034     static const int _lenjKatt  = 4;
0035     static const int _leniPatt  = 130000;
0036     static const int _lenjPatt  = 4;
0037     static const int _leniVatt  = 130000;
0038     static const int _lenjVatt  = 4;
0039 
0040     struct HIMAIN2;
0041     friend struct HIMAIN2;
0042 
0043     struct HIMAIN2
0044     {
0045     int     katt[_lenjKatt][_leniKatt];
0046     float   patt[_lenjPatt][_leniPatt];
0047     float   vatt[_lenjVatt][_leniVatt];
0048     };
0049 
0050     int  _dummy;
0051     float  _realdummy;
0052     
0053     static HIMAIN2* _himain2;
0054 };
0055 
0056 // set pointer to zero at start
0057 HiMain2::HIMAIN2* HiMain2::_himain2 =0;
0058 
0059 inline void
0060 HiMain2::init(void)
0061 { if (!_himain2) _himain2 = static_cast<HIMAIN2*>(himain2_address_()); }
0062 
0063 // Constructor
0064 inline
0065 HiMain2::HiMain2()
0066     : _dummy        (-999),
0067       _realdummy    (-999.)
0068 {}
0069 
0070 // Destructor
0071 inline
0072 HiMain2::~HiMain2()
0073 {}
0074 
0075 inline int&
0076 HiMain2::katt   (int i, int j)
0077 {
0078     init(); // check COMMON is initialized
0079     if( i < 1 || i > leniKatt() ||
0080     j < 1 || j > lenjKatt() ) return _dummy;
0081 
0082     return _himain2->katt[j-1][i-1];
0083 }
0084 
0085 inline float&
0086 HiMain2::patt   (int i, int j)
0087 {
0088     init(); // check COMMON is initialized
0089     if( i < 1 || i > leniPatt() ||
0090     j < 1 || j > lenjPatt() ) return _realdummy;
0091 
0092     return _himain2->patt[j-1][i-1];
0093 }
0094 
0095 inline float&
0096 HiMain2::vatt   (int i, int j)
0097 {
0098     init(); // check COMMON is initialized
0099     if( i < 1 || i > leniVatt() ||
0100     j < 1 || j > lenjVatt() ) return _realdummy;
0101 
0102     return _himain2->vatt[j-1][i-1];
0103 }
0104 
0105 #endif