ATLAS Offline Software
Loading...
Searching...
No Matches
PySubs.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5//
6// Description:
7// Class definition for PySubs, which is used
8// to modify PYSUBS common.
9
10#ifndef PySubs_h
11#define PySubs_h
12
13#include <cstdint>
14
15extern "C" { uintptr_t pysubs_address_(); }
16
17class PySubs {
18public:
19 PySubs();
20 ~PySubs();
21
22 int& msel (void);
23 int& mselpd (void);
24 int& msub (int n);
25 int& kfin (int i, int j);
26 double& ckin (int n);
27
28 void init (void);
29
30 // return common array lengths
31 inline int lenMsub() const {return s_lenMsub;}
32 inline int leniKfin() const {return s_leniKfin;}
33 inline int lenjKfin() const {return s_lenjKfin;}
34 inline int lenCkin() const {return s_lenCkin;}
35
36private:
37
38 // Lengths of the COMMONS
39 static const int s_lenMsub = 500;
40 static const int s_leniKfin = 2;
41 static const int s_lenjKfin = 81;
42 static const int s_lenCkin = 200;
43
44 struct PYSUBS;
45 friend struct PYSUBS;
46
47 struct PYSUBS
48 {
49 int msel;
50 int mselpd;
53 double ckin[s_lenCkin];
54 };
55
59};
60
61// set pointer to zero at start
63
64inline void
66{ if (!s_pysubs) s_pysubs = reinterpret_cast<PYSUBS*>(pysubs_address_()); }
67
68inline
70 : m_dummy (-999),
71 m_realdummy (-999.)
72{}
73
74inline
77
78inline int&
80{
81 init();
82 return s_pysubs->msel;
83}
84
85inline int&
87{
88 init();
89 return s_pysubs->mselpd;
90}
91
92inline int&
94{
95 init(); // check COMMON is initialized
96 if(n < 1 || n > lenMsub()) return m_dummy;
97 return s_pysubs->msub[n-1];
98}
99
100inline int&
101PySubs::kfin (int i, int j)
102{
103 init(); // check COMMON is initialized
104 if( i < 1 || i > leniKfin() ||
105 j < 1 || j > lenjKfin() ) return m_dummy;
106
107 return s_pysubs->kfin[j-1][i-1];
108}
109
110inline double&
112{
113 init(); // check COMMON is initialized
114 if(n < 1 || n > lenCkin()) return m_realdummy;
115 return s_pysubs->ckin[n-1];
116}
117
118
119#endif
uintptr_t pysubs_address_()
static const int s_lenjKfin
Definition PySubs.h:41
int leniKfin() const
Definition PySubs.h:32
PySubs()
Definition PySubs.h:69
int m_dummy
Definition PySubs.h:56
double m_realdummy
Definition PySubs.h:57
int & msub(int n)
Definition PySubs.h:93
double & ckin(int n)
Definition PySubs.h:111
int lenjKfin() const
Definition PySubs.h:33
static const int s_leniKfin
Definition PySubs.h:40
int & mselpd(void)
Definition PySubs.h:86
static const int s_lenCkin
Definition PySubs.h:42
static const int s_lenMsub
Definition PySubs.h:39
~PySubs()
Definition PySubs.h:75
int lenCkin() const
Definition PySubs.h:34
int lenMsub() const
Definition PySubs.h:31
int & kfin(int i, int j)
Definition PySubs.h:101
void init(void)
Definition PySubs.h:65
int & msel(void)
Definition PySubs.h:79
static PYSUBS * s_pysubs
Definition PySubs.h:58
int msub[s_lenMsub]
Definition PySubs.h:51
double ckin[s_lenCkin]
Definition PySubs.h:53
int kfin[s_lenjKfin][s_leniKfin]
Definition PySubs.h:52