/* ===========================================================

        Author: Daniel Keller
	e-mail: daniel.keller@epfl.ch
	Institution: Ecole Polytechnique Federale de Lausanne
	Reference: Keller D, Babai N, Kochubey O, Han Y, Markram H, Schürmann F, et al. (2015) An Exclusion Zone for Ca2+ Channels around Docked Vesicles Explains Release Control by Multiple Channels at a CNS Synapse. PLoS Comput Biol 11(5): e1004253. doi:10.1371/journal.pcbi.1004253

============================================================= */

NOTIFICATIONS
{
  VARYING_PROBABILITY_REPORT=FALSE
}

sprintf(data_header_str,"../data_files/linearap1.0/")
sprintf(seed_str,"%04g",SEED)
INCLUDE_FILE="../../rates/rates.mdl"
INCLUDE_FILE="variables.mdl"

TIME_STEP = dt

ITERATIONS = it
EFFECTOR_GRID_DENSITY = grid_density

ACCURATE_3D_REACTIONS = TRUE
MICROSCOPIC_REVERSIBILITY=TRUE

INCLUDE_FILE="../../parameters/geometry_parameters.mdl"
INCLUDE_FILE="../../parameters/epspstart.mdl"

SPACE_STEP= 0.001
ITERATIONS = it
EFFECTOR_GRID_DENSITY = grid_density
INTERACTION_RADIUS=0.002

PARTITION_X=[[-dendrite_length/2-0.05 TO dendrite_length/2+0.05 STEP 0.03]]
PARTITION_Y=[[-dendrite_width/2-0.05 TO dendrite_width/2+0.05 STEP 0.03]]
PARTITION_Z=[[-2.0001 TO 2.0001 STEP 0.03]]

/* --------- Mechanisms ------------- */

INCLUDE_FILE="../../molecules/molecules.mdl"
INCLUDE_FILE="../../mechanisms/mechanisms.mdl"

/* ----- Define Physical Objects ------- */

INCLUDE_FILE="../../geometry_files/bbp_sphere2.mdl"

INCLUDE_FILE="../../geometry_files/sampling_boxes.mdl"

INCLUDE_FILE="../../geometry_files/cbp_sheets.mdl"

INCLUDE_FILE="../../release_events_files/glutamate_release.mdl"

INCLUDE_FILE="../../geometry_files/bouton2.mdl"
INCLUDE_FILE="../../geometry_files/bouton_sensor.mdl"

INSTANTIATE tissue OBJECT {
sphere1 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[   -0.0992 ,  0.0267 ,  0.0435+0.5*gap_size]
  }
sphere2 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[   -0.0992 ,  0.0965  , 0.0834+0.5*gap_size]
  }
sphere3 OBJECT sphere1 {
  SCALE=[2.0,2.0,2.0]
  TRANSLATE=[   -0.0496 ,  0.0447 ,  0.0223+0.5*gap_size]
  }
sphere4 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[   -0.0496 , -0.0079  , 0.0304+0.5*gap_size]
  }
sphere5 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[   -0.0496 ,  0.0154  , 0.0700+0.5*gap_size]
  }
sphere6 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[   -0.0496 ,  0.0811 ,  0.0723+0.5*gap_size]
  }
sphere7 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[         0 ,  0.0528 ,  0.0328+0.5*gap_size]
  }
sphere8 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[         0 , -0.0003 ,  0.0324+0.5*gap_size]
  }
sphere9 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[         0  , 0.1101 ,  0.0669+0.5*gap_size]
  }
sphere10 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[         0 ,  0.0600 ,  0.0706+0.5*gap_size]
  }
sphere11 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[         0 , -0.0818 ,  0.0802+0.5*gap_size]
  }
sphere12 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[         0 ,  -0.0475 ,   0.0639+0.5*gap_size]
  }
sphere13 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[         0  , 0.1101 ,  0.0797+0.5*gap_size]
  }
sphere14 OBJECT sphere1 {
  SCALE=[2.0,2.0,2.0]
  TRANSLATE=[    0.0496 ,  0.0151  , 0.0227+0.5*gap_size]
  }
sphere15 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[    0.0496 , -0.0299 ,  0.0289+0.5*gap_size]
  }
sphere16 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[    0.0496 ,  0.0140 ,  0.0791+0.5*gap_size]
  }
sphere17 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[    0.0496 , -0.0329  , 0.0714+0.5*gap_size]
  }
sphere18 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[    0.0992 ,  0.0140 ,  0.0864+0.5*gap_size]
  }
sphere19 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[    0.0992 ,  0.0537 ,  0.0361+0.5*gap_size]
  }
sphere20 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[    0.0992 , -0.0908 ,  0.0529+0.5*gap_size]
  }
sphere21 OBJECT sphere1 {
  SCALE=[2.5,2.5,2.5]
  TRANSLATE=[    0.0992 ,  0.1107 ,  0.0793+0.5*gap_size]
  }


  bouton OBJECT bouton {}
  bouton_box OBJECT bouton_box {}
  bouton_box_top OBJECT bouton_box_top {}

  boutonactivezone OBJECT boutonactivezone {}


  Glu_release_site_1 OBJECT Glu_release_site_1 {}


  RELEASE_active  RELEASE_SITE
  {
    SHAPE=LIST
    MOLECULE_POSITIONS {
    Ca_HH.C0' [   -0.0368 , -0.0711,0.5*gap_size]
    Ca_HH.C0' [   -0.1133 ,  0.0171,0.5*gap_size]
    Ca_HH.C0' [    0.0866 , -0.0728,0.5*gap_size]
    Ca_HH.C0' [    0.1075 , -0.0627,0.5*gap_size]
    Ca_HH.C0' [    0.0941 ,  0.0768,0.5*gap_size]
    Ca_HH.C0' [   -0.0062 , -0.0963,0.5*gap_size]
    Ca_HH.C0' [    0.0998 ,  0.0235,0.5*gap_size]
    Ca_HH.C0' [    0.1189 ,  0.0999,0.5*gap_size]
    Ca_HH.C0' [    0.0869 , -0.0742,0.5*gap_size]
    Ca_HH.C0' [    0.1100 ,  0.0280,0.5*gap_size]
    Ca_HH.C0' [    0.0886 ,  0.1074,0.5*gap_size]
    Ca_HH.C0' [   -0.0248 ,  0.0972,0.5*gap_size]
    Ca_HH.C0' [    0.0972 , -0.0503,0.5*gap_size]
    Ca_HH.C0' [   -0.0639 ,  0.1029,0.5*gap_size] 
  }
  SITE_DIAMETER = 0.005
}


RELEASE_boutonsensoraz0 CUBIC_RELEASE_SITE {
  LOCATION = [ -0.0496 ,  0.0447 ,0.5*gap_size+1.5 *fuzz+0.002]
  LIGAND =  release_sensor0.a.x0
  NUMBER_TO_RELEASE = 1
  SITE_DIAMETER = [0.001,0.001,0.001]
}
RELEASE_boutonsensoraz1 CUBIC_RELEASE_SITE {
  LOCATION = [  -0.0496 ,  -0.0079,0.5*gap_size+1.5 *fuzz+0.002]
  LIGAND =  release_sensor1.a.x0
  NUMBER_TO_RELEASE = 1
  SITE_DIAMETER = [0.001,0.001,0.001]
}
RELEASE_boutonsensoraz2 CUBIC_RELEASE_SITE {
  LOCATION = [    0 ,  0.0528 ,0.5*gap_size+1.5 *fuzz+0.002]
  LIGAND =  release_sensor2.a.x0
  NUMBER_TO_RELEASE = 1
  SITE_DIAMETER = [0.001,0.001,0.001]
}
RELEASE_boutonsensoraz3 CUBIC_RELEASE_SITE {
  LOCATION = [  0 ,  -0.0003  ,0.5*gap_size+1.5 *fuzz+0.002]
  LIGAND =  release_sensor3.a.x0
  NUMBER_TO_RELEASE = 1
  SITE_DIAMETER = [0.001,0.001,0.001]
}
RELEASE_boutonsensoraz4 CUBIC_RELEASE_SITE {
  LOCATION = [ 0.0496 ,  0.0151 ,0.5*gap_size+1.5 *fuzz+0.002]
  LIGAND =  release_sensor4.a.x0
  NUMBER_TO_RELEASE = 1
  SITE_DIAMETER = [0.001,0.001,0.001]
}
RELEASE_boutonsensoraz5 CUBIC_RELEASE_SITE {
  LOCATION = [ 0.0496 ,  -0.0299,0.5*gap_size+1.5 *fuzz+0.002]
  LIGAND =  release_sensor5.a.x0
  NUMBER_TO_RELEASE = 1
  SITE_DIAMETER = [0.001,0.001,0.001]
}
  RELEASE_pumps  RELEASE_SITE
  {
    SHAPE = tissue.bouton.bouton0[topandbottom]
    MOLECULE = generic_pump.U'
    NUMBER_TO_RELEASE=0
  }

  RELEASE_ATP.CaB  RELEASE_SITE
  {
    SHAPE = tissue.bouton_box_top[ALL]
    MOLECULE = ATP.CaB
    CONCENTRATION=atp_concentration * bound_atp_fraction
  }
  RELEASE_ATP.MgB  RELEASE_SITE
  {
    SHAPE = tissue.bouton_box_top[ALL]
    MOLECULE = ATP.MgB
    CONCENTRATION=atp_concentration * mgbound_atp_fraction
  }
  RELEASE_ATP.U  RELEASE_SITE
  {
    SHAPE = tissue.bouton_box_top[ALL]
    MOLECULE = ATP.U
    CONCENTRATION=atp_concentration * unbound_atp_fraction
  }

  RELEASE_EGTA.B  RELEASE_SITE
  {
    SHAPE = tissue.bouton.bouton0[ALL]
    MOLECULE = EGTA.B
    CONCENTRATION=EGTA_concentration * EGTA_bound_fraction
  }
  RELEASE_EGTA.U  RELEASE_SITE
  {
    SHAPE = tissue.bouton.bouton0[ALL]
    MOLECULE = EGTA.U
    CONCENTRATION=EGTA_concentration * EGTA_unbound_fraction
  }

  RELEASE_BAPTA.B  RELEASE_SITE
  {
    SHAPE = tissue.bouton.bouton0[ALL]
    MOLECULE = BAPTA.B
    CONCENTRATION=BAPTA_concentration * BAPTA_bound_fraction
  }
  RELEASE_BAPTA.U  RELEASE_SITE
  {
    SHAPE = tissue.bouton.bouton0[ALL]
    MOLECULE = BAPTA.U
    CONCENTRATION=BAPTA_concentration * BAPTA_unbound_fraction
  }

  RELEASE_bouton_slowB  RELEASE_SITE
  {
    SHAPE = tissue.bouton.bouton0[ALL]
    MOLECULE = slow_sp.B
    CONCENTRATION=slow_cbp_concentration * bound_cbp_fraction
  }

  RELEASE_bouton_slowU  RELEASE_SITE
  {
    SHAPE = tissue.bouton.bouton0[ALL]
    MOLECULE = slow_sp.U
    CONCENTRATION=slow_cbp_concentration * unbound_cbp_fraction
  }

  RELEASE_bouton_parvalbuminB  RELEASE_SITE
  {
    SHAPE = tissue.bouton.bouton0[ALL]
    MOLECULE = parvalbumin.B
    CONCENTRATION=parvalbumin_concentration * bound_parvalbumin_fraction
  }
  RELEASE_bouton_parvalbuminU  RELEASE_SITE
  {
    SHAPE = tissue.bouton.bouton0[ALL]
    MOLECULE = parvalbumin.U
    CONCENTRATION=parvalbumin_concentration * unbound_parvalbumin_fraction
  }
  RELEASE_bouton_parvalbuminM  RELEASE_SITE
  {
    SHAPE = tissue.bouton.bouton0[ALL]
    MOLECULE = parvalbumin.M
    CONCENTRATION=parvalbumin_concentration * mgbound_parvalbumin_fraction
  }

}

REACTION_DATA_OUTPUT {
  OUTPUT_BUFFER_SIZE=10
  STEP = freq
  { COUNT[ Ca_HH.O,WORLD] } => "Cachan.O." & seed_str

 { COUNT[ release_sensor0.a.x6, WORLD]+ COUNT[ release_sensor0.b.x6, WORLD]+ COUNT[ release_sensor0.c.x6, WORLD]+ COUNT[ release_sensor0.d, WORLD] } => "x0." & seed_str
 { COUNT[ release_sensor1.a.x6, WORLD]+ COUNT[ release_sensor1.b.x6, WORLD]+ COUNT[ release_sensor1.c.x6, WORLD]+ COUNT[ release_sensor1.d, WORLD] } => "x1." & seed_str
 { COUNT[ release_sensor2.a.x6, WORLD]+ COUNT[ release_sensor2.b.x6, WORLD]+ COUNT[ release_sensor2.c.x6, WORLD]+ COUNT[ release_sensor2.d, WORLD] } => "x2." & seed_str
{ COUNT[ release_sensor3.a.x6, WORLD]+ COUNT[ release_sensor3.b.x6, WORLD]+ COUNT[ release_sensor3.c.x6, WORLD]+ COUNT[ release_sensor3.d, WORLD] } => "x3." & seed_str
 { COUNT[ release_sensor4.a.x6, WORLD]+ COUNT[ release_sensor4.b.x6, WORLD]+ COUNT[ release_sensor4.c.x6, WORLD]+ COUNT[ release_sensor4.d, WORLD] } => "x4." & seed_str
 { COUNT[ release_sensor5.a.x6, WORLD]+ COUNT[ release_sensor5.b.x6, WORLD]+ COUNT[ release_sensor5.c.x6, WORLD]+ COUNT[ release_sensor5.d, WORLD] } => "x5." & seed_str

 { COUNT[ io_hh,WORLD] } => "ica." & seed_str


}