ICP  1
item_struct.cpp
Go to the documentation of this file.
1 #include "stdafx.h"
2 #include "item_struct.h"
3 
4 template <typename T>
5 int item_struct<T>::getItem(const std::string& item_name, T& value, DAEstatus& status)
6 {
7  int n;
8  long spec_no;
9  // handle case of item_spectrum which means we average the array
10  // item[ndet] for that particular spectrum
11  n = item_name.find('_');
12  if (n != std::string::npos)
13  {
14  spec_no = atol(item_name.c_str()+n+1);
15  return getItem<T>(item_name.substr(0,n), &spec_no, 1, &value, status);
16  }
17  else
18  {
19  spec_no = 0;
20  return getItem<T>(item_name, &spec_no, 0, &value, status);
21  }
22 }
23 
24 // nspec number of 0 means no spec average
25 template <typename T>
26 int item_struct<T>::getItem(const std::string& item_name, long* spec_array, int nspec, T* lVal, DAEstatus& status)
27 {
28  int i, j, n;
29  std::string sitem_name;
30  std::string tmp_item;
31  const T* pVal = NULL;
32  const item_t* item;
33  item = findItem(item_name, false);
34  if (item != NULL)
35  {
36  for(j=0; j < (nspec == 0 ? 1 : nspec); j++)
37  {
38  lVal[j] = *(item->value);
39  }
40  return DAEstatus::Success;
41  }
42  if (nspec == 0)
43  {
44  return DAEstatus::Failure;
45  }
46  item = findItem(item_name, true);
47  if (item != NULL)
48  {
49  if (item->dim1 == 0)
50  {
51  n = *(item->dim0);
52  }
53  else
54  {
55  n = *(item->dim0) * *(item->dim1);
56  }
57  if (n == m_ndet)
58  {
59  pVal = item->value;
60  }
61  }
62  if (pVal == NULL)
63  {
64  return DAEstatus::Failure;
65  }
66  for(j=0; j<nspec; j++)
67  {
68  lVal[j] = 0;
69  n = 0;
70  for(i=0; i<m_ndet; i++)
71  {
72  if (m_spec_array[i] == spec_array[j])
73  {
74  lVal[j] += pVal[i];
75  n++;
76  }
77  }
78  if (n > 0)
79  {
80  lVal[j] = lVal[j] / n;
81  }
82  }
83  return DAEstatus::Success;
84 }
85 
86 template <typename T>
87 int item_struct<T>::getArrayItemSize(const std::string& item_name, int* dims_array, int& ndims, DAEstatus& status)
88 {
89  const item_t* item;
90  item = findItem(item_name, false);
91  if (item == NULL)
92  {
93  item = findItem(item_name, true);
94  }
95  if (item != NULL)
96  {
97  if (item->dim1 == 0)
98  {
99  dims_array[0] = *(item->dim0);
100  ndims = 1;
101  }
102  else
103  {
104  dims_array[0] = *(item->dim0);
105  dims_array[1] = *(item->dim1);
106  ndims = 2;
107  }
108  return DAEstatus::Success;
109  }
110  return DAEstatus::Failure;
111 }
112 
113 template <typename T>
114 int item_struct<T>::getArrayItem(const std::string& item_name, long* spec_array, int nspec, T* larray, DAEstatus& status)
115 {
116  int i, j, k, n;
117  const item_t* item;
118  item = findItem(item_name, false);
119  if (item == NULL)
120  {
121  item = findItem(item_name, true);
122  }
123  if (item != NULL)
124  {
125  if (item->dim1 == 0)
126  {
127  n = *(item->dim0);
128  }
129  else
130  {
131  n = *(item->dim0) * *(item->dim1);
132  }
133  for(k=0; k<nspec; k++)
134  {
135  for(j=0; j<n; j++)
136  {
137  larray[j + k * n] = item->value[j];
138  }
139  }
140  return DAEstatus::Success;
141  }
142  return DAEstatus::Failure;
143 }
144 
145 template <typename T>
146 int item_struct<T>::getArrayItem(const std::string& item_name, T* larray, DAEstatus& status)
147 {
148  int n;
149  long spec_no;
150  n = item_name.find('_');
151  if (n != std::string::npos)
152  {
153  spec_no = atol(item_name.c_str()+n+1);
154  return getIntArrayItem(item_name.substr(0,n), &spec_no, 1, larray, status);
155  }
156  else
157  {
158  spec_no = 0;
159  return getIntArrayItem(item_name, &spec_no, 1, larray, status);
160  }
161 }
162 
int getArrayItemSize(const std::string &item_name, int *dims_array, int &ndims, DAEstatus &status)
Definition: item_struct.cpp:87
static const int Failure
Definition: DAEstatus.h:141
static const int Success
Definition: DAEstatus.h:140
const int * dim0
Definition: item_struct.h:14
const int * dim1
Definition: item_struct.h:15
int getArrayItem(const std::string &item_name, long *spec_array, int nspec, T *larray, DAEstatus &status)
int getItem(const std::string &item_name, T &value, DAEstatus &status)
Definition: item_struct.cpp:5