/*
* Copyright (C) 2008-2012 Thorsten Liebig (Thorsten.Liebig@gmx.de)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*/
#pragma once
#include "CSProperties.h"
//! Continuous Structure Probe Property for calculating integral properties
/*!
CSProbProbeBox is a class for calculating integral properties such as (static) charges, voltages or currents.
*/
class CSXCAD_EXPORT CSPropProbeBox : public CSProperties
{
public:
CSPropProbeBox(ParameterSet* paraSet);
CSPropProbeBox(CSProperties* prop);
CSPropProbeBox(unsigned int ID, ParameterSet* paraSet);
virtual ~CSPropProbeBox();
//! Get PropertyType as a xml element name \sa PropertyType and GetType
virtual const std::string GetTypeXMLString() const {return std::string("ProbeBox");}
//! Define a number for this probe property \sa GetNumber
void SetNumber(unsigned int val);
//! Get the number designated to this probe property \sa SetNumber
unsigned int GetNumber();
//! Get the normal direction of this probe box (required by some types of probes)
int GetNormalDir() const {return m_NormDir;}
//! Set the normal direction of this probe box (required by some types of probes)
void SetNormalDir(unsigned int ndir) {m_NormDir=ndir;}
//! Define/Set the probe weighting \sa GetWeighting
void SetWeighting(double weight) {m_weight=weight;}
//! Get the probe weighting \sa GetWeighting
double GetWeighting() {return m_weight;}
//! Define the probe type (e.g. type=0 for a charge integration, can/must be defined by the user interface) \sa GetProbeType
void SetProbeType(int type) {ProbeType=type;}
//! Get the probe type \sa SetProbeType
int GetProbeType() {return ProbeType;}
//! Set the probe start time
void SetStartTime(float value) {startTime=value;}
//! Get the probe start time
double GetStartTime() {return startTime;}
//! Set the probe stop time
void SetStopTime(float value) {stopTime=value;}
//! Get the probe stop time
double GetStopTime() {return stopTime;}
size_t CountFDSamples() {return m_FD_Samples.size();}
std::vector *GetFDSamples() {return &m_FD_Samples;}
void ClearFDSamples() {m_FD_Samples.clear();}
void AddFDSample(double freq) {m_FD_Samples.push_back(freq);}
void AddFDSample(std::vector *freqs);
void AddFDSample(std::string freqs);
virtual bool Write2XML(TiXmlNode& root, bool parameterised=true, bool sparse=false);
virtual bool ReadFromXML(TiXmlNode &root);
protected:
unsigned int uiNumber;
int m_NormDir;
double m_weight;
int ProbeType;
std::vector m_FD_Samples;
double startTime, stopTime;
};