WarpTwin
Documentation for WarpTwin models and classes.
Loading...
Searching...
No Matches
DispersionEngine.h
Go to the documentation of this file.
1/******************************************************************************
2* Copyright (c) ATTX INC 2025. All Rights Reserved.
3*
4* This software and associated documentation (the "Software") are the
5* proprietary and confidential information of ATTX INC. The Software is
6* furnished under a license agreement between ATTX and the user organization
7* and may be used or copied only in accordance with the terms of the agreement.
8* Refer to 'license/attx_license.adoc' for standard license terms.
9*
10* EXPORT CONTROL NOTICE: THIS SOFTWARE MAY INCLUDE CONTENT CONTROLLED UNDER THE
11* INTERNATIONAL TRAFFIC IN ARMS REGULATIONS (ITAR) OR THE EXPORT ADMINISTRATION
12* REGULATIONS (EAR99). No part of the Software may be used, reproduced, or
13* transmitted in any form or by any means, for any purpose, without the express
14* written permission of ATTX INC.
15******************************************************************************/
16/*
17Normal Random Distribution Header File
18
19Author: Alex Reynolds
20*/
21#ifndef DISPERSION_ENGINE_H
22#define DISPERSION_ENGINE_H
23
24#include <vector>
25
26#include "UniformRandom.hpp"
27#include "NormalRandom.hpp"
29
30namespace warptwin {
31
35 struct Dispersion {
36 Dispersion(std::string nme, double d_v, clockwerk::GraphTreeObject* parent)
37 : default_val(d_v), value(parent, nme.c_str(), 0.0) {}
41 };
42
46 struct UniformDispersion : public Dispersion {
47 UniformDispersion(std::string nme, double d_v, double mn, double mx, clockwerk::GraphTreeObject* parent)
48 : Dispersion(nme, d_v, parent), min(mn), max(mx) {}
49 double min;
50 double max;
51 };
52
56 struct NormalDispersion : public Dispersion {
57 NormalDispersion(std::string nme, double d_v, double mn, double sd, clockwerk::GraphTreeObject* parent)
58 : Dispersion(nme, d_v, parent), mean(mn), stdev(sd) {}
59 double mean;
60 double stdev;
61 };
62
63 const int HASH_MULTIPLIER = 37;
64 const int HASH_ADDER = 3;
65
77 public:
78 // Standard constructor. Takes executive
81
86 void initialize(int seed, int run, int nruns=1000);
87
90 void setUniformValue(UniformDispersion* dispersion_ptr);
91
94 void setNormalValue(NormalDispersion* dispersion_ptr);
95
103 double default_val, double min, double max);
104
112 double default_val, double mean, double stdev);
113
117 Dispersion* operator () (const std::string &query);
118
119 // Pointer to the executive object
121
122 // The has seed generated by the dispersion engine
123 int hash_seed = 0;
124 protected:
129 int _hash(int run_number, int seed);
130
131 // Variable to store our hash value
133
134 // Variable to store the current run number
136
137 // Variable to set the number of runs
139
140 // Our lists to store each type of dispersion info
141 std::vector<UniformDispersion*> _uniform_dispersions;
142 std::vector<NormalDispersion*> _normal_dispersions;
143
144 // Our distribution engines for generating varied inputs
147 };
148
149}
150
151#endif
Class for inter-object communication.
Definition DataIO.hpp:60
Base class for object organization.
Definition GraphTreeObject.h:98
const char * name() const
Getter and setter for object name.
Definition GraphTreeObject.h:135
Executive derivation specifically to run flight systems.
Definition FlightExecutive.h:46
UniformDispersion & createUniformInputDispersion(const std::string &name, double default_val, double min, double max)
Function to generate a uniform input dispersion.
Definition DispersionEngine.cpp:72
int hash_seed
Definition DispersionEngine.h:123
int _hash_value
Definition DispersionEngine.h:132
void setNormalValue(NormalDispersion *dispersion_ptr)
Function to set the value of a dispersion.
Definition DispersionEngine.cpp:57
NormalRandom< double > * _normal_dist
Definition DispersionEngine.h:146
~DispersionEngine()
Definition DispersionEngine.cpp:20
NormalDispersion & createNormalInputDispersion(const std::string &name, double default_val, double mean, double stdev)
Function to generate a normal input dispersion.
Definition DispersionEngine.cpp:86
int _nruns
Definition DispersionEngine.h:138
UniformRandom< double > * _uniform_dist
Definition DispersionEngine.h:145
int _hash(int run_number, int seed)
Function to generate a hashed seed from run number and seed.
Definition DispersionEngine.cpp:116
int _run_number
Definition DispersionEngine.h:135
std::vector< UniformDispersion * > _uniform_dispersions
Definition DispersionEngine.h:141
void initialize(int seed, int run, int nruns=1000)
Function to initialize the dispersion engine.
Definition DispersionEngine.cpp:31
DispersionEngine(warpos::FlightExecutive &e)
Definition DispersionEngine.h:79
warpos::FlightExecutive & exc
Definition DispersionEngine.h:120
Dispersion * operator()(const std::string &query)
Call operator to get pointer to dispersion matching string.
Definition DispersionEngine.cpp:100
std::vector< NormalDispersion * > _normal_dispersions
Definition DispersionEngine.h:142
void setUniformValue(UniformDispersion *dispersion_ptr)
Function to set the value of a dispersion.
Definition DispersionEngine.cpp:42
Class to generate random numbers according to normal distribution.
Definition NormalRandom.hpp:40
Class to generate random numbers according to uniform distribution.
Definition UniformRandom.hpp:42
Class to propagate CR3BP dynamics in characteristic units.
Definition statistics.hpp:22
const int HASH_MULTIPLIER
Definition DispersionEngine.h:63
int min(T *array, unsigned int size, T &result)
Definition statistics.hpp:85
int stdev(T *array, unsigned int size, T &result)
Definition statistics.hpp:55
int mean(T *array, unsigned int size, T &result)
Definition statistics.hpp:25
const int HASH_ADDER
Definition DispersionEngine.h:64
int max(T *array, unsigned int size, T &result)
Definition statistics.hpp:67
Struct to store all data associated with dispersion.
Definition DispersionEngine.h:35
clockwerk::DataIO< double > value
Definition DispersionEngine.h:39
clockwerk::DataIO< double > & operator()()
Definition DispersionEngine.h:40
double default_val
Definition DispersionEngine.h:38
Dispersion(std::string nme, double d_v, clockwerk::GraphTreeObject *parent)
Definition DispersionEngine.h:36
Struct to store all data associated with normal dispersion.
Definition DispersionEngine.h:56
NormalDispersion(std::string nme, double d_v, double mn, double sd, clockwerk::GraphTreeObject *parent)
Definition DispersionEngine.h:57
double mean
Definition DispersionEngine.h:59
double stdev
Definition DispersionEngine.h:60
Struct to store all data associated with uniform dispersion.
Definition DispersionEngine.h:46
double min
Definition DispersionEngine.h:49
double max
Definition DispersionEngine.h:50
UniformDispersion(std::string nme, double d_v, double mn, double mx, clockwerk::GraphTreeObject *parent)
Definition DispersionEngine.h:47