Nuncleosome Module



This module is designed to handle the various geometrical considerations of nucleosomes.

Quick access

Variables:basepairsperturn, multiparams, nucleosomerot, nucleosometran
Routines:get_params(), internucleosome_energy(), load_nucleosome_positions(), nucleosome_energy(), nucleosome_prop(), setup_nucleosome_constants()

Needed modules

  • precision (dp(), pi())


  • nucleosome/basepairsperturn [real,parameter=10.5_dp]
  • nucleosome/multiparams (10,wlc_p__max_bacepairs_per_bead) [real]
  • nucleosome/nucleosomerot (3,3,147) [real,private]
  • nucleosome/nucleosometran (3,147) [real,private]

Subroutines and functions

subroutine nucleosome/nucleosome_prop(uin, vin, rin, linkbp, wrapbp, uout, vout, rout)

Calculates the final position and orientation Rout,Uout,Vout based on the the incomming position and orientation Rin, Uin, Vin for a nucleosome with wrapBP bace paris of DNA wrapped around it. The intrisic rotation of a linkBP long linker that follows is also included.

  • uin (3) [real,in] :: Entry direction along DNA
  • vin (3) [real,in] :: Entry tangent vector
  • rin (3) [real,in] :: Position of entry
  • linkbp [real,in]
  • wrapbp [integer,in]
  • uout (3) [real,out] :: Exit position
  • vout (3) [real,out] :: Exit tangent vector
  • rout (3) [real,out] :: Exit position
Use :

vector_utils (cross())

Called from:

sterics_check(), nucleosome_energy(), initcond()

Call to:


function nucleosome/nucleosome_energy(rp1, r, up1, u, vp1, v, linkbp, wrapbp)

Caltulate the bending energy of a nucleosome at position R and orientation U, V with wrapBP of DNA wrapped around it followed by a liner linkBP bace pairs long that ends at RP1, UP1, and VP1. Assumes a SSWLCWT linker.

  • rp1 (3) [real,in] :: R of bead i+1
  • r (3) [real,in] :: R of bead i
  • up1 (3) [real,in] :: U of bead i+1
  • u (3) [real,in] :: U of bead i
  • vp1 (3) [real,in] :: multiParams(1,linkBP),& ! EB
  • v (3) [real,in] :: V of bead i
  • linkbp [real,in]
  • wrapbp [integer,in]

nucleosome_energy (4) [real]

Use :

mc_wlc (e_sswlcwt())

Called from:

energy_elas(), mc_eelas(), nucleosome_energy()

Call to:

nucleosome_energy(), nucleosome_prop(), get_params(), e_sswlcwt()

function nucleosome/internucleosome_energy(ri, rj, ui, uj, vi, vj)

internucleosome attraction energy. this is based off the work out of de pablos group where they look at the pairwise potential between 2 nucleosome dependent on their orientation/geometry and distance from each other. parameters come from their counterion condensation assumptions. i try to simplify their findings and create 3 main classes of interactions: 1) face-face where the nucleosomes are aligned such that their core histones can interact 2) face-side where the nucleosomes are aligned perpendicular such that the core histones of one nucleosome interacts with the DNA wrapping the exterior of the other nucleosome and 3) side-side where the nucleosome DNA wrappings are in line with each other.

  • ri (3) [real,in] :: R of nuc i
  • rj (3) [real,in] :: R of nuc j
  • ui (3) [real,in] :: U of nuc i
  • uj (3) [real,in] :: U of nuc j
  • vi (3) [real,in] :: V of nuc i
  • vj (3) [real,in] :: V of nuc j

internucleosome_energy [real]

Use :

mc_wlc (e_sswlcwt()), vector_utils (cross()), energies (energyof(), internucleosome_())

Called from:

mc_internucleosome(), calculate_energies_from_scratch()

Call to:


subroutine nucleosome/get_params(i, eb, epar, eperp, gam, eta, xir, xiu, sigma, etwist, simtype)

Return parameters for a linker that is i bace pairs long

  • i [real,in] :: Number of bace pairs in linder
  • eb [real,out] :: Bending modulus
  • epar [real,out] :: Stretch modulus
  • eperp [real,out] :: Shear modulus
  • gam [real,out] :: ground state segment length
  • eta [real,out] :: bend-shear coupling
  • xir [real,out]
  • xiu [real,out]
  • sigma [real,out]
  • etwist [real,out] :: Twist coefficient
  • simtype [real,out] :: WLC, SSWLC, or Gaussian Chain
Called from:


subroutine nucleosome/setup_nucleosome_constants()
Use :precision (nan()), mc_wlc (calc_elastic_constants())
Called from:set_parameters()
Call to:calc_elastic_constants()
subroutine nucleosome/load_nucleosome_positions(wlc_nucleosomewrap, wlc_basepairs)

if WLC_P__INCLUDE_DISCRETIZE_LINKER is turned on, then this determines the discretization scheme of the beads throughout the chain. it sets a real (can be non-integer) value for the discretization as a function of contour length and WLC_P__NB. if WLC_P__INCLUDE_DISCRETIZE_LINKER is off, then each bead is if WLC_P__INCLUDE_DISCRETIZE_LINKER is turn on, then this determines the discretization scheme of the beads throughout the chain. it defaults to trying to set integer values for each bead discretization, but not has the capability to use real numbers. if WLC_P__INCLUDE_DISCRETIZE_LINKER is off, then each bead is default assumed to be a nucleosome, so there are no additional beads used to model the fluctuations of the linker geometry with more detail. nucleosomes are intialized on the chain according to WLC_P__LINKER_TYPE, where the default is ‘phased’, i.e. the nuclesomes are separated by a constant linker length throughout the chain

  • wlc_nucleosomewrap (wlc_p__nt) [integer,out]
  • wlc_basepairs (wlc_p__nt) [real,out]
Use :

precision (nan()), gjkalgorithm (gjk(), sameshapetest(), nointersectx(), intersectx(), tangentx(), runtimetest5(), runtimetest6(), nointersecty(), intersecty(), tangenty(), runtimetest1(), runtimetest3(), nointersectz(), intersectz(), tangentz(), runtimetest2(), runtimetest4()), polydispersity (first_bead_of_chain(), last_bead_of_chain())

Called from:


Call to:

first_bead_of_chain(), last_bead_of_chain(), sameshapetest(), nointersectx(), intersectx(), tangentx(), nointersecty(), intersecty(), tangenty(), nointersectz(), intersectz(), tangentz(), runtimetest1(), runtimetest2(), runtimetest3(), runtimetest4(), runtimetest5(), runtimetest6()