Newer
Older
Janik Zikovsky
committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "MantidAPI/ISpectrum.h"
#include "MantidKernel/System.h"
namespace Mantid
{
namespace API
{
//----------------------------------------------------------------------------------------------
/** Constructor
*/
ISpectrum::ISpectrum()
: m_specNo(0),
detectorIDs(), refX(), refDx()
{
}
/** Constructor with spectrum number
* @param specNo :: spectrum # of the spectrum
*/
ISpectrum::ISpectrum(const specid_t specNo)
: m_specNo(specNo),
detectorIDs(), refX(), refDx()
{
}
//----------------------------------------------------------------------------------------------
/** Copy constructor
*/
ISpectrum::ISpectrum(const ISpectrum& other)
: m_specNo(other.m_specNo), detectorIDs(other.detectorIDs),
refX(other.refX), refDx(other.refDx)
{
}
//----------------------------------------------------------------------------------------------
/** Copy spectrum number and detector IDs, but not X vector, from another ISpectrum
*
* @param other :: take the values from other, put them in this
*/
void ISpectrum::copyInfoFrom(const ISpectrum& other)
{
m_specNo = other.m_specNo;
detectorIDs = other.detectorIDs;
}
//----------------------------------------------------------------------------------------------
/** Destructor
*/
ISpectrum::~ISpectrum()
{
}
/**
* Return the min/max X values for this spectrum.
* @returns A pair where the first is the minimum X value
* and the second the maximum
*/
std::pair<double,double> ISpectrum::getXDataRange() const
const auto & xdata = *refX;
return std::pair<double,double>(xdata.front(),xdata.back());
Janik Zikovsky
committed
// =============================================================================================
/// Sets the x data.
/// @param X :: vector of X data
void ISpectrum::setX(const MantidVec& X)
{ refX.access()=X; }
/// Sets the x error data.
/// @param Dx :: vector of X error data
void ISpectrum::setDx(const MantidVec& Dx)
{ refDx.access()=Dx; }
/// Sets the x data.
/// @param X :: vector of X data
void ISpectrum::setX(const MantidVecPtr& X)
{ refX=X; }
/// Sets the x error data.
/// @param Dx :: vector of X error data
void ISpectrum::setDx(const MantidVecPtr& Dx)
{ refDx=Dx; }
/// Sets the x data
Janik Zikovsky
committed
void ISpectrum::setX(const MantidVecPtr::ptr_type& X)
{ refX=X; }
/// Sets the x data error
/// @param Dx :: vector of X error data
void ISpectrum::setDx(const MantidVecPtr::ptr_type& Dx)
{refDx=Dx;}
// =============================================================================================
///Returns the x data
MantidVec& ISpectrum::dataX()
{ return refX.access(); }
/** Returns the x error data
* BE VERY CAUTIOUS about using this method (when, e.g., just copying
* data from an input to output workspace) if you are not actively
* using X errors. It may result in the breaking of sharing between
* Dx vectors and a significant and unnecessary bloating of memory usage.
*/
Janik Zikovsky
committed
MantidVec& ISpectrum::dataDx()
{ return refDx.access(); }
/// Returns the x data const
const MantidVec& ISpectrum::dataX() const
{ return *refX; }
/// Returns the x error data const
const MantidVec& ISpectrum::dataDx() const
{ return *refDx; }
/// Returns the x data const
const MantidVec& ISpectrum::readX() const
{ return *refX; }
/// Returns the x error data const
const MantidVec& ISpectrum::readDx() const
{ return *refDx; }
/// Returns the y data const
const MantidVec& ISpectrum::readY() const
{ return this->dataY(); }
/// Returns the y error data const
const MantidVec& ISpectrum::readE() const
{ return this->dataE(); }
Janik Zikovsky
committed
/// Returns a pointer to the x data
MantidVecPtr ISpectrum::ptrX() const
{ return refX; }
/// Returns a pointer to the x data
MantidVecPtr ISpectrum::ptrDx() const
{ return refDx; }
Janik Zikovsky
committed
// =============================================================================================
// --------------------------------------------------------------------------
/** Add a detector ID to the set of detector IDs
*
* @param detID :: detector ID to insert in set.
*/
void ISpectrum::addDetectorID(const detid_t detID)
{
this->detectorIDs.insert( detID );
}
/** Add a set of detector IDs to the set of detector IDs
*
* @param detIDs :: set of detector IDs to insert in set.
Janik Zikovsky
committed
*/
void ISpectrum::addDetectorIDs(const std::set<detid_t>& detIDs)
Janik Zikovsky
committed
{
if (detIDs.size() == 0) return;
this->detectorIDs.insert( detIDs.begin(), detIDs.end() );
}
/** Add a vector of detector IDs to the set of detector IDs
*
* @param detIDs :: vector of detector IDs to insert in set.
Janik Zikovsky
committed
*/
void ISpectrum::addDetectorIDs(const std::vector<detid_t>& detIDs)
Janik Zikovsky
committed
{
if (detIDs.size() == 0) return;
this->detectorIDs.insert( detIDs.begin(), detIDs.end() );
}
// --------------------------------------------------------------------------
/** Clear the list of detector IDs, then add one.
*
* @param detID :: detector ID to insert in set.
*/
void ISpectrum::setDetectorID(const detid_t detID)
{
this->detectorIDs.clear();
this->detectorIDs.insert( detID );
}
/** Set the detector IDs to be the set given.
* Will clear any previous IDs (unlike addDetectorIDs).
* @param detIDs The new list of detector ID numbers
*/
void ISpectrum::setDetectorIDs(const std::set<detid_t>& detIDs)
{
}
/** Set the detector IDs to be the set given (move version).
* Will clear any previous IDs (unlike addDetectorIDs).
* @param detIDs The new list of detector ID numbers
void ISpectrum::setDetectorIDs(std::set<detid_t>&& detIDs)
{
#if !(defined(__INTEL_COMPILER))
detectorIDs = std::move(detIDs);
#else
detectorIDs = detIDs; // No moving on the Mac :(
#endif
}
Janik Zikovsky
committed
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
// --------------------------------------------------------------------------
/** Return true if the given detector ID is in the list for this ISpectrum */
bool ISpectrum::hasDetectorID(const detid_t detID) const
{
return ( detectorIDs.find(detID) != detectorIDs.end() );
}
// --------------------------------------------------------------------------
/** Get a const reference to the detector IDs set.
*/
const std::set<detid_t>& ISpectrum::getDetectorIDs() const
{
return this->detectorIDs;
}
// --------------------------------------------------------------------------
/** Clear the detector IDs set.
*/
void ISpectrum::clearDetectorIDs()
{
this->detectorIDs.clear();
return;
}
// --------------------------------------------------------------------------
/** Get a mutable reference to the detector IDs set.
*/
std::set<detid_t>& ISpectrum::getDetectorIDs()
{
return this->detectorIDs;
}
// ---------------------------------------------------------
/// @return the spectrum number of this spectrum
specid_t ISpectrum::getSpectrumNo() const
{
return m_specNo;
}
/** Sets the the spectrum number of this spectrum
* @param num :: the spectrum number of this spectrum */
void ISpectrum::setSpectrumNo(specid_t num)
{
m_specNo = num;
}
// ---------------------------------------------------------
/** Lock access to the data so that it does not get deleted while reading.
* Does nothing unless overridden.
*/
void ISpectrum::lockData() const
{
}
/** Unlock access to the data so that it can again get deleted.
* Does nothing unless overridden.
*/
void ISpectrum::unlockData() const
{
}
Janik Zikovsky
committed
} // namespace Mantid
} // namespace API