00001
00002
00004
00005 #ifdef WIN32
00006 #pragma warning(disable:4786)
00007 #endif
00008 #include "LowEnergyThetaBraggCorrectionReader.h"
00009
00010 #include <stdlib.h>
00011 #include <stdio.h>
00012 using namespace std;
00013
00014
00015 namespace Interpolator
00016 {
00017
00019
00022 LowEnergyThetaBraggCorrectionReader::LowEnergyThetaBraggCorrectionReader()
00023 {
00024
00025 }
00027 LowEnergyThetaBraggCorrectionReader::~LowEnergyThetaBraggCorrectionReader()
00028 {
00029
00030 if (_mEnergy)
00031 {
00032 delete [] _mEnergy;
00033 _mEnergy = 0;
00034 }
00035
00036 if (_mThetaDiff)
00037 {
00038 delete [] _mThetaDiff;
00039 _mThetaDiff = 0;
00040 }
00041 if (_mFitDiff)
00042 {
00043 delete [] _mFitDiff;
00044 _mFitDiff = 0;
00045 }
00046 if (_mFWHMResolution)
00047 {
00048 delete [] _mFWHMResolution;
00049 _mFWHMResolution = 0;
00050 }
00051
00052 }
00053
00056 LowEnergyThetaBraggCorrectionReader::LowEnergyThetaBraggCorrectionReader(const std::string& sFileName) : FileReader(sFileName)
00057 {
00058 Parse();
00059 }
00060
00065 LowEnergyThetaBraggCorrectionReader::LowEnergyThetaBraggCorrectionReader(const std::string& sFileName,long lNbColumns,long lNbLines) : FileReader(sFileName,lNbColumns,lNbLines)
00066 {
00067 Parse();
00068 }
00069
00075 void LowEnergyThetaBraggCorrectionReader::Parse()
00076 {
00077
00078 int iNbData = getNbData();
00079 if(Interpolator::_verb == true) cout << "NbData : " << iNbData << endl;
00080
00081 int iNbVariables = getNbVariables();
00082 if(Interpolator::_verb == true) cout << "NbVariables : " << iNbVariables << endl;
00083
00084
00085 std::string sColumnName;
00086 int i=0;
00087
00088 for (i=0;i<iNbVariables;i++)
00089 {
00090 sColumnName = extractString();
00091 if(Interpolator::_verb == true) cout << "Column " << i << " --> " << sColumnName << endl;
00092
00093 switch (i)
00094 {
00095 case 0 :
00096 _sEnergyName = sColumnName;
00097 break;
00098 case 1 :
00099 _sThetaDiffName = sColumnName;
00100 break;
00101 case 2 :
00102 _sFitDiffName = sColumnName;
00103 break;
00104 case 3 :
00105 _sFWHMResolutionName= sColumnName;
00106 break;
00107 }
00108 }
00109
00110 _mEnergy = new double[iNbData];
00111 _mThetaDiff = new double[iNbData];
00112 _mFitDiff = new double[iNbData];
00113 _mFWHMResolution = new double[iNbData];
00114 double dValue;
00115
00116 for (i=0;i<iNbData;i++)
00117 {
00118 for (int j=0;j<iNbVariables;j++)
00119 {
00120 dValue = extractDouble();
00121
00122 switch (j)
00123 {
00124 case 0 :
00125 _mEnergy[i] = dValue/1000.0;
00126 break;
00127 case 1 :
00128 _mThetaDiff[i] = DegresToRadians(dValue);
00129 break;
00130 case 2 :
00131 _mFitDiff[i] = dValue;
00132 break;
00133 case 3 :
00134 _mFWHMResolution[i] = dValue;
00135 break;
00136 default:
00138 break;
00139 }
00140 }
00141 }
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177 }
00178
00181 double* LowEnergyThetaBraggCorrectionReader::getEnergy() const
00182 {
00183 if (_mEnergy == 0) throw NullPointerException("_mEnergy","LowEnergyThetaBraggCorrectionReader::getEnergy()",__FILE__,__LINE__);
00184 return _mEnergy;
00185 }
00186
00188 double* LowEnergyThetaBraggCorrectionReader::getThetaDiff() const
00189 {
00190 if (_mThetaDiff == 0) throw NullPointerException("_mThetaDiff","LowEnergyThetaBraggCorrectionReader::getThetaDiff()",__FILE__,__LINE__);
00191 return _mThetaDiff;
00192 }
00193
00195 double* LowEnergyThetaBraggCorrectionReader::getFitDiff() const
00196 {
00197 if (_mFitDiff == 0) throw NullPointerException("_mFitDiff","LowEnergyThetaBraggCorrectionReader::getFitDiff()",__FILE__,__LINE__);
00198 return _mFitDiff;
00199 }
00200
00202 double* LowEnergyThetaBraggCorrectionReader::getFWHMResolution() const
00203 {
00204 if (_mFWHMResolution == 0) throw NullPointerException("_mFWHMResolution","LowEnergyThetaBraggCorrectionReader::getFWHMResolution()",__FILE__,__LINE__);
00205 return _mFWHMResolution;
00206 }
00207
00208
00212 double LowEnergyThetaBraggCorrectionReader::getValue(int iColumn, int iIndex) const
00213 {
00214
00215 if ( (iIndex<0) || (iIndex>=getNbData())) throw IndexOutOfBoundException("iIndex",iIndex,0,getNbData(),"LowEnergyThetaBraggCorrectionReader::getValue(int iColumn, int iIndex)",__FILE__,__LINE__);
00216
00217 switch (iColumn)
00218 {
00219 case 0 :
00220 return _mEnergy[iIndex];
00221 break;
00222 case 1 :
00223 return _mThetaDiff[iIndex];
00224 break;
00225 case 2 :
00226 return _mFitDiff[iIndex];
00227 break;
00228 case 3 :
00229 return _mFWHMResolution[iIndex];
00230 break;
00231 default:
00232 throw IndexOutOfBoundException("iColumn",iColumn,0,getNbVariables(),"LowEnergyThetaBraggCorrectionReader::getValue(int iColumn, int iIndex)",__FILE__,__LINE__);
00233 }
00234 }
00235
00237 double LowEnergyThetaBraggCorrectionReader::getEnergyValue(int i) const
00238 {
00239 return getValue(0,i);
00240 }
00241
00243 double LowEnergyThetaBraggCorrectionReader::getThetaDiffValue(int i) const
00244 {
00245 return getValue(1,i);
00246 }
00247
00249 double LowEnergyThetaBraggCorrectionReader::getFitDiffValue(int i) const
00250 {
00251 return getValue(2,i);
00252 }
00253
00255 double LowEnergyThetaBraggCorrectionReader::getFWHMResolutionValue(int i) const
00256 {
00257 return getValue(3,i);
00258 }
00259
00261 std::string LowEnergyThetaBraggCorrectionReader::getEnergyName() const
00262 {
00263 return _sEnergyName;
00264 }
00266 std::string LowEnergyThetaBraggCorrectionReader::getThetaDiffName() const
00267 {
00268 return _sThetaDiffName;
00269 }
00271 std::string LowEnergyThetaBraggCorrectionReader::getFitDiffName() const
00272 {
00273 return _sFitDiffName;
00274 }
00276 std::string LowEnergyThetaBraggCorrectionReader::getFWHMResolutionName() const
00277 {
00278 return _sFWHMResolutionName;
00279 }
00280
00281 }
00282