1 #ifndef CRMINROBOTAGENTOPTIMISED_H
2 #define CRMINROBOTAGENTOPTIMISED_H
10 #include "arguments.h"
11 #include "featurevector.h"
13 #include "robotagent_optimised.h"
14 #include "celldatacontainers.h"
19 #define CELLLOWERBOUND 1e-3 //todo: set as percentage instead of absolute value
22 #define CONJUGATION_OVERFLOW_LIMIT 1.0e-15 //todo: set as percentage instead of absolute value
43 enum ConjugationIntegrationPhase :
unsigned {CONJ_K0, CONJ_K1, CONJ};
44 enum TcellIntegrationPhase :
unsigned {K0, K1};
56 virtual double GetCurrE(
unsigned int thtype);
57 virtual double GetCurrR(
unsigned int thtype);
59 virtual void SetCurrE(
unsigned int thtype,
double f_currE);
60 virtual void SetCurrR(
unsigned int thtype,
double f_currR);
62 virtual double GetAPC(
unsigned int apctype);
67 virtual void FreeTcellsAndAvailableAPCSites(TcellIntegrationPhase TK, ConjugationIntegrationPhase CONJK);
69 virtual void ConjugatesQSS(
bool bResetConjugates, TcellIntegrationPhase TK);
70 virtual void Derivative(TcellIntegrationPhase TK);
72 virtual void ConjugatesQSS_ExcessTcells(
bool bClearDeadConjugates, TcellIntegrationPhase TK);
73 virtual void Derivative_ExcessTcells(TcellIntegrationPhase TK);
74 virtual void ComputeNewDerivative(TcellIntegrationPhase TK);
76 virtual inline double GetFVtoApcScaling() {
return m_fFVtoApcscaling;}
78 virtual inline double GetConvergenceError() {
return m_dconvergence_error;}
79 virtual inline double GetConvergenceError_Perc() {
return m_dpercconvergence_error;}
81 virtual void PrintCRMDetails(
unsigned int id);
82 virtual void PrintAPCList(
unsigned int id);
83 virtual void PrintTcellResponseToAPCList(
unsigned int id);
84 virtual void PrintTcellList(
unsigned int id);
85 virtual void PrintConjugatestoAPCList(
unsigned int id, ConjugationIntegrationPhase CONJK);
86 virtual void PrintConjugatestoTcellList(
unsigned int id, ConjugationIntegrationPhase CONJK);
88 virtual void TcellNumericalIntegration_RK2();
89 virtual void SimulationStepUpdatePosition();
90 virtual void DiffuseTcells();
92 void ScaleDownConjugates(ConjugationIntegrationPhase CONJK);
97 inline list<structAPC>* GetListAPCs() {
return &listAPCs;}
98 inline list<structTcell>* GetListTcells() {
return &listTcells;}
100 static double NegExpDistAffinity(
unsigned int v1,
unsigned int v2,
double k);
101 static unsigned int GetNumberOfSetBits(
unsigned int x);
107 virtual void UpdateState();
109 virtual void UpdateAPCList();
110 virtual void UpdateTcellList(
unsigned int hammingdistance);
111 virtual void UpdateConjugatesToAPCList();
112 virtual void UpdateConjugatesToTcellList();
113 virtual void MarkConjugatesOfDeadTcell(list<structTcell>::iterator* ptrit_tcells);
115 virtual inline double GetWeight() {
return m_fWeight;}
118 double step_h;
double conjstep_h;
132 double m_fTryExchangeProbability;
162 list<structTcell> listTcells;
163 list<structAPC> listAPCs;
164 virtual inline void IncIt(list<structTcell>::iterator *it_tcell, list<structTcell>* list)
165 { (*it_tcell) == list->end() ? (*it_tcell):++(*it_tcell); }
166 virtual inline void IncIt(list<structAPC>::iterator *it_apc, list<structAPC>* list)
167 { (*it_apc) == list->end() ? (*it_apc):++(*it_apc); }
169 unsigned int m_unNumberOfReceptors;
182 double m_fcross_affinity;
186 double m_fFVtoApcscaling;
188 bool m_bConvergenceFlag;
189 double m_dconvergence_error;
190 double m_dpercconvergence_error;
198 #endif // CRMINROBOTAGENTOPTIMISED_H