MOOSE - Multiscale Object Oriented Simulation Environment
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
StochSecondOrderSingleSubstrate Class Reference

#include <RateTerm.h>

+ Inheritance diagram for StochSecondOrderSingleSubstrate:
+ Collaboration diagram for StochSecondOrderSingleSubstrate:

Public Member Functions

RateTermcopyWithVolScaling (double vol, double sub, double prd) const
 
unsigned int getReactants (vector< unsigned int > &molIndex) const
 
double operator() (const double *S) const
 Computes the rate. The argument is the molecule array. More...
 
void rescaleVolume (short comptIndex, const vector< short > &compartmentLookup, double ratio)
 
 StochSecondOrderSingleSubstrate (double k, unsigned int y)
 
- Public Member Functions inherited from ZeroOrder
double getR1 () const
 Used by Zombie to return rate terms. More...
 
double getR2 () const
 Used by Zombie to return rate terms. More...
 
void setK (double k)
 
void setR1 (double k1)
 Used by Zombie to assign rate terms. More...
 
void setR2 (double k2)
 Used by Zombie to assign rate terms. More...
 
void setRates (double k1, double k2)
 
 ZeroOrder (double k)
 
- Public Member Functions inherited from RateTerm
 RateTerm ()
 
virtual ~RateTerm ()
 

Private Attributes

const unsigned int y_
 

Additional Inherited Members

- Static Public Attributes inherited from RateTerm
static const double EPSILON = 1.0e-6
 
- Protected Attributes inherited from ZeroOrder
double k_
 

Detailed Description

The reason for this class is that if we have a single substrate acting in 2nd order, we must account for the removal of one molecule halfway through the reaction. This has a major effect when there is only one molecule to start with: the eventual # would become negative if we didn't do this correction!

Definition at line 434 of file RateTerm.h.

Constructor & Destructor Documentation

StochSecondOrderSingleSubstrate::StochSecondOrderSingleSubstrate ( double  k,
unsigned int  y 
)
inline

Definition at line 437 of file RateTerm.h.

Referenced by copyWithVolScaling().

438  : ZeroOrder( k ), y_( y )
439  {;}
ZeroOrder(double k)
Definition: RateTerm.h:257
const unsigned int y_
Definition: RateTerm.h:469

+ Here is the caller graph for this function:

Member Function Documentation

RateTerm* StochSecondOrderSingleSubstrate::copyWithVolScaling ( double  vol,
double  sub,
double  prd 
) const
inlinevirtual

Duplicates rate term and then applies volume scaling. Arguments are volume of reference voxel, product of vol/refVol for all substrates: applied to R1 product of vol/refVol for all products: applied to R2

Note that unless the reaction is cross-compartment, the vol/refVol will be one.

Reimplemented from ZeroOrder.

Definition at line 461 of file RateTerm.h.

References ZeroOrder::k_, NA, StochSecondOrderSingleSubstrate(), and y_.

463  {
464  double ratio = sub * vol * NA;
465  return new StochSecondOrderSingleSubstrate( k_ / ratio, y_ );
466  }
double k_
Definition: RateTerm.h:311
StochSecondOrderSingleSubstrate(double k, unsigned int y)
Definition: RateTerm.h:437
const double NA
Definition: consts.cpp:15
const unsigned int y_
Definition: RateTerm.h:469

+ Here is the call graph for this function:

unsigned int StochSecondOrderSingleSubstrate::getReactants ( vector< unsigned int > &  molIndex) const
inlinevirtual

This function finds the reactant indices in the vector S. It returns the number of substrates found, which are the first entries in molIndex. The products are the remaining ones. Note that it does NOT find products for unidirectional reactions, which is a bit of a problem.

Reimplemented from ZeroOrder.

Definition at line 447 of file RateTerm.h.

References y_.

447  {
448  molIndex.resize( 2 );
449  molIndex[0] = y_;
450  molIndex[1] = y_;
451  return 2;
452  }
const unsigned int y_
Definition: RateTerm.h:469
double StochSecondOrderSingleSubstrate::operator() ( const double *  S) const
inlinevirtual

Computes the rate. The argument is the molecule array.

Reimplemented from ZeroOrder.

Definition at line 441 of file RateTerm.h.

References ZeroOrder::k_, and y_.

441  {
442  double y = S[ y_ ];
443  assert( !std::isnan( y ) );
444  return k_ * ( y - 1 ) * y;
445  }
double k_
Definition: RateTerm.h:311
const unsigned int y_
Definition: RateTerm.h:469
void StochSecondOrderSingleSubstrate::rescaleVolume ( short  comptIndex,
const vector< short > &  compartmentLookup,
double  ratio 
)
inlinevirtual

This is used to rescale the RateTerm kinetics when the compartment volume changes. This is needed because the kinetics are in extensive units, that is, mol numbers, rather than in intensive units like concentration. So when the volume changes the rate terms change. Each Rate term checks if any of its reactant molecules are affected, and if so, rescales. Ratio is newVol / oldVol

Reimplemented from ZeroOrder.

Definition at line 454 of file RateTerm.h.

References ZeroOrder::k_, and y_.

456  {
457  if ( comptIndex == compartmentLookup[ y_ ] )
458  k_ /= ratio;
459  }
double k_
Definition: RateTerm.h:311
const unsigned int y_
Definition: RateTerm.h:469

Member Data Documentation

const unsigned int StochSecondOrderSingleSubstrate::y_
private

Definition at line 469 of file RateTerm.h.

Referenced by copyWithVolScaling(), getReactants(), operator()(), and rescaleVolume().


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