You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
186 lines
5.7 KiB
C++
186 lines
5.7 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkBlueObeliskData.h
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
/**
|
|
* @class vtkBlueObeliskData
|
|
* @brief Contains chemical data from the Blue
|
|
* Obelisk Data Repository
|
|
*
|
|
*
|
|
* The Blue Obelisk Data Repository is a free, open repository of
|
|
* chemical information. This class is a container for this
|
|
* information.
|
|
*
|
|
* \note This class contains only the raw arrays parsed from the
|
|
* BODR. For more convenient access to this data, use the
|
|
* vtkPeriodicTable class.
|
|
*
|
|
* \note If you must use this class directly, consider using the
|
|
* static vtkBlueObeliskData object accessible through
|
|
* vtkPeriodicTable::GetBlueObeliskData(). This object is
|
|
* automatically populated on the first instantiation of
|
|
* vtkPeriodicTable.
|
|
*/
|
|
|
|
#ifndef vtkBlueObeliskData_h
|
|
#define vtkBlueObeliskData_h
|
|
|
|
#include "vtkDomainsChemistryModule.h" // For export macro
|
|
#include "vtkNew.h" // For vtkNew
|
|
#include "vtkObject.h"
|
|
|
|
class vtkAbstractArray;
|
|
class vtkFloatArray;
|
|
class vtkStringArray;
|
|
class vtkSimpleMutexLock;
|
|
class vtkUnsignedShortArray;
|
|
|
|
// Hidden STL reference: std::vector<vtkAbstractArray*>
|
|
class MyStdVectorOfVtkAbstractArrays;
|
|
|
|
class VTKDOMAINSCHEMISTRY_EXPORT vtkBlueObeliskData : public vtkObject
|
|
{
|
|
public:
|
|
vtkTypeMacro(vtkBlueObeliskData, vtkObject);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
static vtkBlueObeliskData* New();
|
|
|
|
/**
|
|
* Fill this object using an internal vtkBlueObeliskDataParser
|
|
* instance. Check that the vtkSimpleMutexLock GetWriteMutex() is
|
|
* locked before calling this method on a static instance in a
|
|
* multithreaded environment.
|
|
*/
|
|
void Initialize();
|
|
|
|
/**
|
|
* Check if this object has been initialized yet.
|
|
*/
|
|
bool IsInitialized() { return this->Initialized; }
|
|
|
|
//@{
|
|
/**
|
|
* Access the mutex that protects the arrays during a call to
|
|
* Initialize()
|
|
*/
|
|
vtkGetObjectMacro(WriteMutex, vtkSimpleMutexLock);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Return the number of elements for which this vtkBlueObeliskData
|
|
* instance contains information.
|
|
*/
|
|
vtkGetMacro(NumberOfElements, unsigned short);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Access the raw arrays stored in this vtkBlueObeliskData.
|
|
*/
|
|
vtkGetNewMacro(Symbols, vtkStringArray);
|
|
vtkGetNewMacro(LowerSymbols, vtkStringArray);
|
|
vtkGetNewMacro(Names, vtkStringArray);
|
|
vtkGetNewMacro(LowerNames, vtkStringArray);
|
|
vtkGetNewMacro(PeriodicTableBlocks, vtkStringArray);
|
|
vtkGetNewMacro(ElectronicConfigurations, vtkStringArray);
|
|
vtkGetNewMacro(Families, vtkStringArray);
|
|
//@}
|
|
|
|
vtkGetNewMacro(Masses, vtkFloatArray);
|
|
vtkGetNewMacro(ExactMasses, vtkFloatArray);
|
|
vtkGetNewMacro(IonizationEnergies, vtkFloatArray);
|
|
vtkGetNewMacro(ElectronAffinities, vtkFloatArray);
|
|
vtkGetNewMacro(PaulingElectronegativities, vtkFloatArray);
|
|
vtkGetNewMacro(CovalentRadii, vtkFloatArray);
|
|
vtkGetNewMacro(VDWRadii, vtkFloatArray);
|
|
vtkGetNewMacro(DefaultColors, vtkFloatArray);
|
|
vtkGetNewMacro(BoilingPoints, vtkFloatArray);
|
|
vtkGetNewMacro(MeltingPoints, vtkFloatArray);
|
|
|
|
vtkGetNewMacro(Periods, vtkUnsignedShortArray);
|
|
vtkGetNewMacro(Groups, vtkUnsignedShortArray);
|
|
|
|
/**
|
|
* Static method to generate the data header file used by this class from the
|
|
* BODR elements.xml. See the GenerateBlueObeliskHeader test in this module.
|
|
*/
|
|
static bool GenerateHeaderFromXML(std::istream& xml, std::ostream& header);
|
|
|
|
protected:
|
|
friend class vtkBlueObeliskDataParser;
|
|
|
|
vtkBlueObeliskData();
|
|
~vtkBlueObeliskData() override;
|
|
|
|
vtkSimpleMutexLock* WriteMutex;
|
|
bool Initialized;
|
|
|
|
/**
|
|
* Allocate enough memory in each array for sz elements. ext is not
|
|
* used.
|
|
*/
|
|
virtual vtkTypeBool Allocate(vtkIdType sz, vtkIdType ext = 1000);
|
|
|
|
/**
|
|
* Reset each array.
|
|
*/
|
|
virtual void Reset();
|
|
|
|
/**
|
|
* Free any unused memory in the member arrays
|
|
*/
|
|
virtual void Squeeze();
|
|
|
|
unsigned short NumberOfElements;
|
|
|
|
// Lists all arrays
|
|
MyStdVectorOfVtkAbstractArrays* Arrays;
|
|
|
|
// Atomic Symbols
|
|
vtkNew<vtkStringArray> Symbols;
|
|
vtkNew<vtkStringArray> LowerSymbols;
|
|
|
|
// Element Names
|
|
vtkNew<vtkStringArray> Names;
|
|
vtkNew<vtkStringArray> LowerNames;
|
|
|
|
// Misc Strings
|
|
vtkNew<vtkStringArray> PeriodicTableBlocks;
|
|
vtkNew<vtkStringArray> ElectronicConfigurations;
|
|
vtkNew<vtkStringArray> Families; // Non-Metal, Noblegas, Metalloids, etc
|
|
|
|
// Misc Data
|
|
vtkNew<vtkFloatArray> Masses; // amu
|
|
vtkNew<vtkFloatArray> ExactMasses; // amu
|
|
vtkNew<vtkFloatArray> IonizationEnergies; // eV
|
|
vtkNew<vtkFloatArray> ElectronAffinities; // eV
|
|
vtkNew<vtkFloatArray> PaulingElectronegativities; // eV
|
|
vtkNew<vtkFloatArray> CovalentRadii; // Angstrom
|
|
vtkNew<vtkFloatArray> VDWRadii; // Angstom
|
|
vtkNew<vtkFloatArray> DefaultColors; // rgb 3-tuples, [0.0,1.0]
|
|
vtkNew<vtkFloatArray> BoilingPoints; // K
|
|
vtkNew<vtkFloatArray> MeltingPoints; // K
|
|
vtkNew<vtkUnsignedShortArray> Periods; // Row of periodic table
|
|
vtkNew<vtkUnsignedShortArray> Groups; // Column of periodic table
|
|
|
|
void PrintSelfIfExists(const char*, vtkObject*, ostream&, vtkIndent);
|
|
|
|
private:
|
|
vtkBlueObeliskData(const vtkBlueObeliskData&) = delete;
|
|
void operator=(const vtkBlueObeliskData&) = delete;
|
|
};
|
|
|
|
#endif
|