ACF $AcfVersion:0$
List of all members
icmm::ISpectrum Class Reference

Common interface for a measured or sampled spectrum. More...

#include <ISpectrum.h>

Inheritance diagram for icmm::ISpectrum:
imath::ISampledFunction icmm::ISpectrumInfoProvider iser::ISerializable imath::TISampledFunction< 1, 1 > istd::IChangeable istd::IChangeable imath::TIMathFunction< istd::TIndex< ArgumentDimensions >, TVector< ResultDimensions > > istd::IChangeable istd::IPolymorphic istd::IPolymorphic istd::IPolymorphic istd::IPolymorphic icmm::CSpectrum

Additional Inherited Members

- Public Types inherited from imath::TISampledFunction< 1, 1 >
typedef imath::TIMathFunction< istd::TIndex< ArgumentDimensions >, imath::TVector< ResultDimensions > > BaseClass
 
typedef BaseClass::ArgumentType ArgumentType
 
typedef BaseClass::ResultType ResultType
 
typedef istd::TIndex< ArgumentDimensions > SampleIndex
 
- Public Types inherited from imath::TIMathFunction< istd::TIndex< ArgumentDimensions >, TVector< ResultDimensions > >
typedef istd::TIndex< ArgumentDimensions > ArgumentType
 
typedef TVector< ResultDimensions > ResultType
 
- Public Types inherited from istd::IChangeable
enum  ChangeFlags {
  CF_ACF_INTERNAL = 0 , CF_ALL_DATA , CF_ANY , CF_DESTROYING ,
  CF_DELEGATED , CF_NO_UNDO
}
 Data model change notification flags. More...
 
enum  SupportedOperations {
  SO_NONE = 0 , SO_OBSERVE = 1 << 0 , SO_COPY = 1 << 1 , SO_CLONE = 1 << 2 ,
  SO_COMPARE = 1 << 3 , SO_RESET = 1 << 4
}
 Flags for supported operations. More...
 
enum  CompatibilityMode { CM_STRICT , CM_WITHOUT_REFS , CM_WITH_REFS , CM_CONVERT }
 Control how relationship betweeen objects are interpreted. More...
 
typedef QMultiMap< QByteArray, QVariant > ChangeInfoMap
 
- Public Member Functions inherited from imath::ISampledFunction
double operator[] (int index) const
 
- Public Member Functions inherited from imath::TISampledFunction< 1, 1 >
virtual bool CreateFunction (double *dataPtr, const ArgumentType &sizes)=0
 Create function from input data.
 
virtual int GetTotalSamplesCount () const=0
 Get number of samples stored in this container.
 
virtual int GetGridSize (int dimensionIndex) const=0
 Get number of samples for specified dimension.
 
virtual double GetSampleAt (const SampleIndex &index) const=0
 Get sample value at the given index.
 
virtual istd::CRange GetLogicalRange (int dimensionIndex) const=0
 Get logical range for the specified dimension.
 
virtual istd::CRange GetResultValueRange (int dimensionIndex, int resultDimension=-1) const=0
 Get the range (boundary) of possible result values for the given axis.
 
virtual std::vector< double > GetSamples () const=0
 Get all samples as a vector.
 
virtual int GetArgumentDimensionality () const
 Get the number of argument components.
 
virtual int GetResultDimensionality () const
 Get the number of result components.
 
- Public Member Functions inherited from imath::TIMathFunction< istd::TIndex< ArgumentDimensions >, TVector< ResultDimensions > >
virtual bool GetValueAt (const istd::TIndex< ArgumentDimensions > &argument, TVector< ResultDimensions > &result) const=0
 Get function value for specified argument value.
 
virtual TVector< ResultDimensions > GetValueAt (const istd::TIndex< ArgumentDimensions > &argument) const=0
 Get function value for specified argument value.
 
- Public Member Functions inherited from istd::IPolymorphic
virtual ~IPolymorphic ()
 
- Public Member Functions inherited from istd::IChangeable
virtual int GetSupportedOperations () const
 Get set of flags for supported operations.
 
virtual bool CopyFrom (const IChangeable &object, CompatibilityMode mode=CM_WITHOUT_REFS)
 Copy this object from another one.
 
virtual bool IsEqual (const IChangeable &object) const
 Compare this object with another object.
 
virtual istd::TUniqueInterfacePtr< istd::IChangeableCloneMe (CompatibilityMode mode=CM_WITHOUT_REFS) const
 Make a copy of this object.
 
virtual bool ResetData (CompatibilityMode mode=CM_WITHOUT_REFS)
 Reset data to its default state.
 
virtual void BeginChanges (const ChangeSet &changeSet)
 Starts the change transaction.
 
virtual void EndChanges (const ChangeSet &changeSet)
 Ends the change transaction.
 
virtual void BeginChangeGroup (const ChangeSet &changeSet)
 Starts group of changes.
 
virtual void EndChangeGroup (const ChangeSet &changeSet)
 Ends group of changes.
 
- Public Member Functions inherited from icmm::ISpectrumInfoProvider
virtual const ISpectrumInfoGetSpectrumInfo () const =0
 
- Public Member Functions inherited from iser::ISerializable
virtual bool Serialize (IArchive &archive)=0
 Load or store state of this object as a archive stream.
 
virtual quint32 GetMinimalVersion (int versionId) const
 Get minimal needed version to correct storing of this data.
 
- Static Public Member Functions inherited from istd::IChangeable
static const ChangeSetGetNoChanges ()
 Get empty set of changes.
 
static const ChangeSetGetAnyChange ()
 Get anonymous change set.
 
static const ChangeSetGetAllChanges ()
 Get anonymous change set.
 
static const ChangeSetGetDelegatedChanges ()
 Get delegated change set.
 
- Protected Member Functions inherited from istd::IChangeable
virtual void OnBeginChanges ()
 Callback function for begin change event.
 
virtual void OnEndChanges (const ChangeSet &changeSet)
 Callback function for end change event.
 

Detailed Description

Common interface for a measured or sampled spectrum.

Purpose

ISpectrum represents spectral data - measurements of light intensity or energy across different wavelengths. This is commonly used in color science, spectroscopy, lighting simulation, and material analysis. The spectrum is stored as discrete samples in a regular 1D grid across the wavelength range.

Data Structure

A spectrum combines three interfaces to provide complete functionality:

Domain and Range

Usage Examples

// Example 1: Creating and populating a spectrum
CSpectrum* CreateRedSpectrum()
{
// Create spectrum for visible range (380-780 nm) with 81 samples
CSpectrum* spectrum = new CSpectrum(380.0, 780.0, 81);
// Set sample values - higher in red region (600-700 nm)
int sampleCount = spectrum->GetSamplesCount();
for (int i = 0; i < sampleCount; ++i) {
double wavelength = spectrum->GetWavelengthForIndex(i);
// Simple red spectrum: high intensity in red region
double intensity = 0.0;
if (wavelength >= 600.0 && wavelength <= 700.0) {
intensity = 1.0;
} else if (wavelength >= 550.0 && wavelength < 600.0) {
// Gradual transition from yellow to red
intensity = (wavelength - 550.0) / 50.0;
}
spectrum->SetSampleValue(i, intensity);
}
return spectrum;
}
// Example 2: Reading spectrum data
void AnalyzeSpectrum(const icmm::ISpectrum* spectrum)
{
// Get spectral range information
const ISpectralInfo& info = spectrum->GetSpectralInfo();
double minWavelength = info.GetMinWavelength(); // e.g., 380 nm
double maxWavelength = info.GetMaxWavelength(); // e.g., 780 nm
// Get sample count
int sampleCount = spectrum->GetSamplesCount();
qDebug() << "Spectrum has" << sampleCount << "samples";
qDebug() << "Range:" << minWavelength << "-" << maxWavelength << "nm";
// Find peak wavelength
double peakIntensity = 0.0;
int peakIndex = 0;
for (int i = 0; i < sampleCount; ++i) {
double intensity = spectrum->GetSampleValue(i);
if (intensity > peakIntensity) {
peakIntensity = intensity;
peakIndex = i;
}
}
// Convert peak index to wavelength
double peakWavelength = minWavelength +
(peakIndex * (maxWavelength - minWavelength) / (sampleCount - 1));
qDebug() << "Peak at" << peakWavelength << "nm";
}
// Example 3: Saving/Loading spectra
void SaveSpectrum(const icmm::ISpectrum* spectrum, const QString& filename)
{
ifile::CFileWriteArchive archive(filename);
if (archive.IsOpen()) {
const_cast<icmm::ISpectrum*>(spectrum)->Serialize(archive);
}
}
void LoadSpectrum(icmm::ISpectrum* spectrum, const QString& filename)
{
ifile::CFileReadArchive archive(filename);
if (archive.IsOpen()) {
spectrum->Serialize(archive);
}
}
// Example 4: Interpolating spectral values
double GetSpectralValueAt(const icmm::ISpectrum* spectrum, double wavelength)
{
// Use IMathFunction interface for interpolated values
const imath::IMathFunction* function =
dynamic_cast<const imath::IMathFunction*>(spectrum);
if (function) {
double value;
if (function->Calculate(wavelength, value)) {
return value;
}
}
return 0.0;
}
Standard spectrum implementation for storing sampled spectral data.
Definition CSpectrum.h:216
virtual int GetSamplesCount() const override
Return number of samples.
Common interface for a measured or sampled spectrum.
Definition ISpectrum.h:152
Simple implementation of archive reading from own ACF format binary file.
Simple implementation of archive writing to own ACF format binary file.
void SetSampleValue(int index, double value)
virtual bool Serialize(IArchive &archive)=0
Load or store state of this object as a archive stream.

Applications

See also
icmm::ISpectrumInfoProvider, imath::ISampledFunction, imath::IMathFunction, icmm::CSpectrum, iser::ISerializable

Definition at line 148 of file ISpectrum.h.


The documentation for this class was generated from the following file: