Пример #1
0
    def root_example_rrp(self):
        """ an example used in the tests below, a main root with laterals """
        self.plant = pb.Organism(
        )  # store organism (not owned by Organ, or OrganRandomParameter)
        p0 = pb.RootRandomParameter(self.plant)
        p0.name, p0.subType, p0.la, p0.lb, p0.lmax, p0.ln, p0.r, p0.dx = "taproot", 1, 10., 1., 100., 1., 1.5, 0.5
        p0.successor = [2]
        p0.successorP = [1.]
        p1 = pb.RootRandomParameter(self.plant)
        p1.name, p1.subType, p1.lmax, p1.r, p1.dx = "lateral", 2, 25., 2., 0.1
        self.p0, self.p1 = p0, p1  # needed at later point
        self.plant.setOrganRandomParameter(
            p0)  # the organism manages the type parameters and takes ownership
        self.plant.setOrganRandomParameter(p1)
        srp = pb.SeedRandomParameter(self.plant)
        self.plant.setOrganRandomParameter(srp)

        param0 = p0.realize()  # set up root by hand (without a root system)
        param0.la, param0.lb = 0, 0  # its important parent has zero length, otherwise creation times are messed up
        parentroot = pb.Root(1, param0, True, True, 0., 0.,
                             pb.Vector3d(0, 0, -1), 0, 0, False,
                             0)  # takes ownership of param0
        parentroot.setOrganism(self.plant)
        parentroot.addNode(pb.Vector3d(0, 0, -3),
                           0)  # there is no nullptr in Python

        self.parentroot = parentroot  # store parent (not owned by child Organ)
        self.root = pb.Root(self.plant, p0.subType, pb.Vector3d(0, 0, -1), 0,
                            self.parentroot, 0, 0)
        self.root.setOrganism(self.plant)
Пример #2
0
    def test_initialize(self):
        """ test initialization (! most important) """
        srp = self.get_srp()
        seed = pb.Seed(self.plant)
        # print(seed)
        tap_rp = pb.RootRandomParameter(self.plant)
        tap_rp.name = "taproot"
        tap_rp.subType = seed.tapType  # 1
        basal_rp = pb.RootRandomParameter(self.plant)
        basal_rp.name = "basalroot"
        basal_rp.subType = seed.basalType  # 4
        shootborne_rp = pb.RootRandomParameter(self.plant)
        shootborne_rp.name = "shootborneroot"
        shootborne_rp.subType = seed.shootborneType  # 5
        self.plant.setOrganRandomParameter(tap_rp)
        self.plant.setOrganRandomParameter(basal_rp)
        self.plant.setOrganRandomParameter(shootborne_rp)
        seed.initialize(False)  # A CRootBox initializations (now StemRandomParameter set)

        # print("CRootBox initialization (including shootborne)")
        organs = seed.baseOrgans()
        st_ = []
        ot_ = []
        for o in organs:
            st_ .append(o.getParameter("subType"))
            ot_ .append(o.getParameter("organType"))
        norc = int(((365 - srp.firstSB) / srp.delayRC) + 0.5)
        self.assertEqual(norc, seed.getNumberOfRootCrowns(), "wrong number of root crowns")
        maxB = min(srp.maxB, int(((365 - srp.firstB) / srp.delayB) + 0.5))
        self.assertEqual(len(st_), norc * srp.nC + 1 + maxB, "wrong number of roots created")

        seed = pb.Seed(self.plant)
        stem_rp = pb.StemRandomParameter(self.plant)
        stem_rp.name = "stem"
        stem_rp.subType = seed.mainStemType  # 1
        tiller_rp = pb.StemRandomParameter(self.plant)
        tiller_rp.name = "tiller"
        tiller_rp.subType = seed.tillerType  # 4

        self.plant.setOrganRandomParameter(stem_rp)
        self.plant.setOrganRandomParameter(tiller_rp)
        seed.initialize(False)  # A CPlantBox initializations (now StemRandomParameter set)
        organs = seed.baseOrgans()

        # print("CPlantBox initialization (no shootborne, since they emerge from the stem)")
        st_ = []
        ot_ = []
        for o in organs:
            # print(o)
            st_ .append(o.getParameter("subType"))
            ot_ .append(o.getParameter("organType"))
        st = [1.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 4.0, 1.0, 4.0, 4.0, 4.0]
        ot = [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0]

        for i in range(0, len(organs)):
            self.assertEqual(st_[i], st[i], "no tap root produced")
            self.assertEqual(ot_[i], ot[i], "tap root produced wrong organ type")
Пример #3
0
 def test_parameter(self):
     """ tests getParameter() """
     self.plant = pb.Organism()
     rrp = pb.RootRandomParameter(self.plant)
     rrp.lns = 0.123
     rrp.la = 12
     ot = rrp.getParameter("organType")  # test defaults
     st = rrp.getParameter("subType")
     gf = rrp.getParameter("gf")
     ln = rrp.getParameter("ln")
     lns = rrp.getParameter("ln_dev")
     la = rrp.getParameter(
         "la_mean")  # we can always add "_mean" to avoid naming conflicts
     self.assertEqual(ot, 2., "getParameter: value unexpected")
     self.assertEqual(st, -1., "getParameter: value unexpected")
     self.assertEqual(gf, 1., "getParameter: value unexpected")
     self.assertEqual(ln, 1., "getParameter: value unexpected")
     self.assertEqual(lns, 0.123, "getParameter: value unexpected")
     self.assertEqual(la, 12, "getParameter: value unexpected")
     rrp.theta = 123  # change values
     rrp.thetas = 456
     theta = rrp.getParameter("theta")
     thetas = rrp.getParameter("theta_dev")
     self.assertEqual(theta, 123, "getParameter: value unexpected")
     self.assertEqual(thetas, 456, "getParameter: value unexpected")
Пример #4
0
    def root_example_rrp2(self):
        """ an example used in the tests below, a main root with laterals """
        self.plant = pb.RootSystem(
        )  # store organism (not owned by Organ, or OrganRandomParameter)
        p0 = pb.RootRandomParameter(self.plant)
        p0.name, p0.subType, p0.la, p0.lb, p0.lmax, p0.ln, p0.lnk, p0.r, p0.dx, p0.dxMin = "taproot", 1, 0.95, 0.8, 10., 1.05, 0.01, 0.8, 0.25, 0.2
        p0.successor = [2]
        p0.successorP = [1.]
        p1 = pb.RootRandomParameter(self.plant)
        p1.name, p1.subType, p1.lmax, p1.r, p1.dx = "lateral", 2, 2., 2., 2.

        self.plant.setOrganRandomParameter(
            p0)  # the organism manages the type parameters and takes ownership
        self.plant.setOrganRandomParameter(p1)
        srp = pb.SeedRandomParameter(self.plant)
        self.plant.setOrganRandomParameter(srp)

        print("root p0, initial parameters: lmax = ", p0.lmax, ", lb = ",
              p0.lb, ", la = ", p0.la, ", ln = ", p0.ln)
        param0 = p0.realize()  # set up root by hand (without a root system)
        print("root p0, realized parameters: lmax = ",
              sum((sum(param0.ln), param0.lb, param0.la)), ", lb = ",
              param0.lb, ", la = ", param0.la, ", mean ln = ",
              np.mean(param0.ln))
        if ((param0.lb % p0.dx > 0) and (param0.lb % p0.dx < p0.dxMin * 0.99)):
            print("lb value does not fit with dx and dxMin")
            print(param0.lb % p0.dx)
        if ((param0.la % p0.dx > 0) and (param0.la % p0.dx < p0.dxMin * 0.99)):
            print("la value does not fit with dx and dxMin")
            print(param0.la % p0.dx)
        if (any([(lni % p0.dx > 0 and lni % p0.dx < p0.dxMin * 0.99)
                 for lni in param0.ln])):
            print("ln value does not fit with dx and dxMin")

        param0.la, param0.lb = 0, 0  # its important parent has zero length, otherwise creation times are messed up
        parentroot = pb.Root(1, param0, True, True, 0., 0.,
                             pb.Vector3d(0, 0, -1), 0, 0, False,
                             0)  # takes ownership of param0
        parentroot.setOrganism(self.plant)
        parentroot.addNode(pb.Vector3d(0, 0, -1),
                           0)  # there is no nullptr in Python

        self.parentroot = parentroot  # store parent (not owned by child Organ)
        self.root = pb.Root(self.plant, p0.subType, pb.Vector3d(0, 0, -1), 0,
                            self.parentroot, 0, 0)
        self.root.setOrganism(self.plant)
        self.p0 = p0
Пример #5
0
 def test_toString(self):
     """ tests __str__ output """
     self.rrp = pb.RootRandomParameter(pb.Organism())
     rrp = self.rrp  # rename
     rrp.name = "the root"
     self.assertEqual(rrp.__str__(False),
                      "name: the root, organType: 2, subType: -1.",
                      "toString: value unexpected")
Пример #6
0
 def rs_example_rtp(self):
     """ an example used in some of the tests below, 100 basals with laterals """
     self.rs = pb.RootSystem()
     srp = pb.SeedRandomParameter(self.rs)
     srp.subType = 0
     srp.seedPos = pb.Vector3d(0., 0., -3.)
     srp.maxB = 100
     srp.firstB = 10
     srp.delayB = 3
     self.rs.setRootSystemParameter(srp)
     p0 = pb.RootRandomParameter(self.rs)
     p0.name, p0.subType, p0.la, p0.lmax, p0.ln, p0.r, p0.dx = "taproot", 1, 10, 101, 89. / 19., 1, 0.5
     p0.lb = 2
     p0.successor = [2]
     p0.successorP = [1.]
     p1 = pb.RootRandomParameter(self.rs)
     p1.name, p1.subType, p1.la, p1.ln, p1.r, p1.dx = "lateral", 2, 25, 0, 2, 0.1
     self.p0, self.p1, self.srp = p0, p1, srp  # Python will garbage collect them away, if not stored
     self.rs.setOrganRandomParameter(p0)  # the organism manages the type parameters
     self.rs.setOrganRandomParameter(p1)
Пример #7
0
 def root_example(self):
     """ example root parameters used below """
     self.plant = pb.Organism()
     self.rrp = pb.RootRandomParameter(self.plant)
     self.rrp.la = 1.5
     self.rrp.lb = 5.5
     self.rrp.ln = 1.25
     self.rrp.lns = 0.12
     self.rrp.lmax = 7 * self.rrp.ln + self.rrp.la + self.rrp.lb
     self.rrp.subType = 1
     self.rrp.successor = [4, 5, 6]
     self.rrp.successorP = [0.4, 0.1, 0.5]
     self.rrp.ldelay = 5
     self.rrp.ldelays = 2
Пример #8
0
 def test_constructors(self):
     """ tests constructor and copy """
     plant = pb.Organism()
     rrp = pb.RootRandomParameter(plant)
     rrp.theta = 123
     rrp.thetas = 456
     rrp.gf = 789
     otp2 = rrp.copy(plant)
     self.assertIsNot(rrp, otp2,
                      "copy: organ type parameter set is not copied")
     self.assertEqual(otp2.name, rrp.name, "copy: value unexpected")
     self.assertEqual(otp2.organType, rrp.organType,
                      "copy: value unexpected")
     self.assertEqual(otp2.subType, rrp.subType, "copy: value unexpected")
     self.assertEqual(otp2.a, rrp.a, "copy: value unexpected")
     self.assertEqual(otp2.theta, rrp.theta, "copy: value unexpected")
     self.assertEqual(otp2.thetas, rrp.thetas, "copy: value unexpected")
     self.assertEqual(otp2.gf, rrp.gf, "copy: value unexpected")
Пример #9
0
 def open_folder(self, folder_name):
     """ see RsmlData.open_rsml() in src/python_modules/rsml_data.py                
     """
     self.rsmls = []  # delete old data
     self.folder_name = folder_name
     for root, subdirs, files in os.walk(folder_name):
         for filename in files:
             if filename.endswith('.rsml'):
                 file_path = os.path.join(root, filename)
                 print()
                 print('file %s (full path: %s)\n' % (filename, file_path))
                 print()
                 self.file_names.append(filename)
                 file_data = RsmlData()
                 file_data.open_rsml(file_path)
                 if not "order" in file_data.properties:  # check if orders were created, if not create tag
                     file_data.properties[
                         "order"] = rsml_reader.get_root_orders(
                             file_data.properties)
                 self.rsmls.append(file_data)
                 try:
                     if file_data.tagnames[1]:
                         self.times.append(file_data.max_ct
                                           )  #  check for creation_time tag
                         # self.times.append(11.)  # TESTING
                     else:
                         s = filename.split(".")
                         str = ''.join(
                             [n for n in s[0][-3:] if n.isdigit()])
                         self.times.append(int(str))
                 except:
                     print("filename", filename)
                     self.times.append(0)
     self.estimates = [None] * len(self.times)
     self.parameters = [
         pb.RootRandomParameter(self.plant) for _ in range(0, 10)
     ]
     self.create_length()  # add a length tag to properties
     self.initialize_roots_()  # find base roots
Пример #10
0
 def test_xml(self):
     """ write the organ as xml, and rereads it """
     self.root_example()
     rrp = self.rrp  # rename
     rrp.name = "lateral"
     rrp.subType = 2
     rrp.writeXML("root.xml")
     otp2 = pb.RootRandomParameter(self.plant)
     otp2.readXML("root.xml")
     self.assertEqual(otp2.ldelay, rrp.ldelay, "xml: value unexpected")
     self.assertEqual(otp2.ldelays, rrp.ldelays, "xml: value unexpected")
     self.assertEqual(otp2.name, rrp.name, "xml: value unexpected")
     self.assertEqual(otp2.organType, rrp.organType,
                      "xml: value unexpected")
     self.assertEqual(otp2.subType, rrp.subType, "xml: value unexpected")
     self.assertEqual(otp2.nob(), rrp.nob(),
                      "xml: value unexpected")  # value
     self.assertEqual(otp2.lns, rrp.lns, "xml: value unexpected")  # dev
     for i in range(0, 3):
         self.assertEqual(otp2.successor[i], rrp.successor[i],
                          "xml: value unexpected")
     for i in range(0, 3):
         self.assertAlmostEqual(otp2.successorP[i], rrp.successorP[i], 7,
                                "xml: value unexpected")
Пример #11
0
        super(Boundary_Elongation_Impedance, self).__init__()
        self.geometry = geometry
        self.impedance = impedance

    def getValue(self, pos, root):
        #         print("Root", root)
        #         print("Root tip position", pos)
        d = self.geometry.getDist(pos)
        if d < 0:
            return 1.
        else:
            return 1. * self.impedance


rs = pb.RootSystem()
p0, p1, p2 = pb.RootRandomParameter(rs), pb.RootRandomParameter(
    rs), pb.RootRandomParameter(rs)
""" tap root """
p0.name, p0.subType = "taproot", 1
p0.successor, p0.successorP = [2], [1]  # add successors
p0.dx = 0.5  # [cm] axial resolution
# from faba_taproot, faba_laterals
p0.a, p0.a_s = 0.125, 0.017  # [cm] radius TODO
p0.lb, p0.lbs = 1.007, 0.492  # [cm] basal zone
p0.la, p0.las = 9.973, 1.992  # [cm] apical zone
p0.ldelay, p0.ldelays = 5.112, 0.5  # [d] delay
p0.lmax = 150  # [cm] maximal root length, number of lateral branching nodes = round((lmax-lb-la)/ln) + 1
p0.ln, p0.lns = 0.157, 0.224  # [cm] inter-lateral distance (16 branching nodes)
p0.theta = 0.  # [rad]
p0.r = 2.071  # [cm/day] initial growth rate
# visual comparison
Пример #12
0
"""everything from scratch (without parameter files)"""
import sys

sys.path.append("../../..")
import plantbox as pb
import vtk_plot as vp

import matplotlib.pyplot as plt
import numpy as np

rs = pb.RootSystem()
p0 = pb.RootRandomParameter(rs)  # with default values,
p1 = pb.RootRandomParameter(rs)  # all standard deviations are 0

p0.name = "taproot"
p0.a = 0.2  # [cm] radius
p0.subType = 1  # [-] index starts at 1
p0.lb = 5  # [cm] basal zone
p0.la = 10  # [cm] apical zone
p0.lmax = 30  # [cm] maximal root length, number of lateral branching nodes = round((lmax-lb-la)/ln) + 1
p0.ln = 1.  # [cm] inter-lateral distance (16 branching nodes)
p0.theta = 0.  # [rad]
p0.r = 1  # [cm/day] initial growth rate
p0.dx = 10  # [cm] axial resolution
p0.successor = [2]  # add successors
p0.successorP = [1]  # probability that successor emerges
p0.tropismT = pb.TropismType.gravi  #
p0.tropismN = 1.8  # [-] strength of tropism
p0.tropismS = 0.2  # [rad/cm] maximal bending

p1.name = "lateral"
Пример #13
0
import sys
from cmath import pi
sys.path.append("../../..")
import plantbox as pb

import numpy as np
import matplotlib.pyplot as plt

path = "../../modelparameter/rootsystem/"

rs = pb.RootSystem()

################### set parameters ##########################################

# Root random parameter
p0 = pb.RootRandomParameter(rs)  # with default values,
p0.name = "taproot"
p0.a = 0.2  # cm radius
p0.subType = 1
p0.lb = 1
p0.la = 10
p0.lmax = 200
p0.ln = 20.
p0.theta = 0. 
p0.r = 2.0  # initial growth rate
p0.dx = 0.5
p0.gf = 2
p0.tropismT = pb.TropismType.gravi
p0.tropismN = 1.
p0.tropismS = 0.0
def create_basil():
	plant = pb.Plant()
	p0 = pb.RootRandomParameter(plant)  # with default values,
	p1 = pb.RootRandomParameter(plant)  # all standard deviations are 0
	s2 = pb.StemRandomParameter(plant)
	s3 = pb.StemRandomParameter(plant)
	l1 = pb.LeafRandomParameter(plant)

	p0.name = "taproot"
	p0.a = 0.2  # [cm] radius
	p0.subType = 1  # [-] index starts at 1
	p0.lb = 5  # [cm] basal zone
	p0.la = 10  # [cm] apical zone
	p0.lmax = 30  # [cm] maximal root length, number of lateral branching nodes = round((lmax-lb-la)/ln) + 1
	p0.ln = 1.  # [cm] inter-lateral distance (16 branching nodes)
	p0.theta = 0.  # [rad]
	p0.r = 1  # [cm/day] initial growth rate
	p0.dx = 10  # [cm] axial resolution
	p0.successor = [2]  # add successors
	p0.successorP = [1]  # probability that successor emerges
	p0.tropismT = pb.TropismType.gravi  #
	p0.tropismN = 1.8  # [-] strength of tropism
	p0.tropismS = 0.2  # [rad/cm] maximal bending

	p1.name = "lateral"
	p1.a = 0.1  # [cm] radius
	p1.subType = 2  # [1] index starts at 1
	p1.lmax = 15  # # [cm] apical zone
	p1.lmaxs = 0.15  # [cm] standard deviation of the apical zone
	p1.theta = 90. / 180. * np.pi  # [rad]
	p1.r = 2  # initial growth rate
	p1.dx = 1  # [cm] axial resolution
	p1.tropismT = pb.TropismType.gravi  # exo
	p1.tropismN = 2  # [-] strength of tropism
	p1.tropismS = 0.1  # [rad/cm] maximal bending

	s2.name = "mainstem"
	s2.subType = 1
	s2.lmax = 25
	# s2.lmaxs = 1
	s2.lb = 3
	s2.la = 0
	s2.ln = 3  # This value is normally the Inter-lateral distance [cm], but with decussate plant, this value is
	# multiplied by 2
	s2.lnf = 5  # This value means "successors in a decussate position"
	s2.RotBeta = 1
	s2.BetaDev = 0
	s2.InitBeta = 0
	s2.gf = 1
	s2.successor = [2]
	s2.successorP = [1]
	s2.tropismT = 4
	# s2.theta = 1/6
	s2.theta = 0
	s2.tropismN = 18
	s2.tropismS = 0.01

	s3.name = "invisible"  # The invisible stem representing the bud of the leaf
	s3.subType = 2
	s3.la = 0
	s3.ln = 0
	s3.lmax = 5
	s3.RotBeta = 1
	s3.BetaDev = 0
	s3.InitBeta = 0.5
	s3.tropismS = 0
	s3.lnf = 5

	l1.name = 'basil'
	l1.subType = 2
	l1.lb = 2
	l1.la = 0.2
	l1.lmax = 5
	l1.r = 0.5
	l1.RotBeta = 0.5
	l1.BetaDev = 0
	l1.InitBeta = 0.5
	l1.tropismT = 1
	l1.tropismN = 5
	l1.tropismS = 0.1
	l1.theta = 0.35
	l1.thetas = 0.05
	l1.gf = 1
	l1.lnf = 5  # If not precised, it will not be possible to do the opposite decussate arrangement

	plant.setOrganRandomParameter(p0)
	plant.setOrganRandomParameter(p1)
	plant.setOrganRandomParameter(s2)
	plant.setOrganRandomParameter(s3)
	plant.setOrganRandomParameter(l1)

	srp = pb.SeedRandomParameter(plant)  # with default values
	# srp.seedPos = pb.Vector3d(10, 10, -3.)  # [cm] seed position
	srp.seedPos = pb.Vector3d(0, 0, -3.)  # [cm] seed position
	srp.maxB = 0  # [-] number of basal roots (neglecting basal roots and shoot borne)
	srp.firstB = 10.  # [day] first emergence of a basal root
	srp.delayB = 3.  # [day] delay between the emergence of basal roots
	plant.setOrganRandomParameter(srp)

	return plant
def create_arabidopsis():
	plant = pb.Plant()
	p0 = pb.RootRandomParameter(plant)  # with default values,
	p1 = pb.RootRandomParameter(plant)  # all standard deviations are 0
	s1 = pb.StemRandomParameter(plant)
	s2 = pb.StemRandomParameter(plant)
	s3 = pb.StemRandomParameter(plant)
	s4 = pb.StemRandomParameter(plant)
	l1 = pb.LeafRandomParameter(plant)

	p0.name = "taproot"
	p0.a = 0.2  # [cm] radius
	p0.subType = 1  # [-] index starts at 1
	p0.lb = 5  # [cm] basal zone
	p0.la = 10  # [cm] apical zone
	p0.lmax = 30  # [cm] maximal root length, number of lateral branching nodes = round((lmax-lb-la)/ln) + 1
	p0.ln = 1.  # [cm] inter-lateral distance (16 branching nodes)
	p0.theta = 0.  # [rad]
	p0.r = 1  # [cm/day] initial growth rate
	p0.dx = 10  # [cm] axial resolution
	p0.successor = [2]  # add successors
	p0.successorP = [1]  # probability that successor emerges
	p0.tropismT = pb.TropismType.gravi  #
	p0.tropismN = 1.8  # [-] strength of tropism
	p0.tropismS = 0.2  # [rad/cm] maximal bending

	p1.name = "lateral"
	p1.a = 0.1  # [cm] radius
	p1.subType = 2  # [1] index starts at 1
	p1.lmax = 15  # # [cm] apical zone
	p1.lmaxs = 0.15  # [cm] standard deviation of the apical zone
	p1.theta = 90. / 180. * np.pi  # [rad]
	p1.r = 2  # initial growth rate
	p1.dx = 1  # [cm] axial resolution
	p1.tropismT = pb.TropismType.gravi  # exo
	p1.tropismN = 2  # [-] strength of tropism
	p1.tropismS = 0.1  # [rad/cm] maximal bending

	s1.name = "mainstem"
	s1.subType = 1
	s1.lmax = 25
	s1.lmaxs = 1
	s1.lb = 0
	s1.lbs = 0.1
	s1.la = 3
	s1.las = 0.1
	s1.ln = 3
	s1.lns = 0.2
	s1.lnf = 0  # 1 peut être cool
	s1.RotBeta = 0
	s1.BetaDev = 0
	s1.InitBeta = 0
	s1.gf = 1
	s1.successor = [3, 2]
	s1.successorP = [0.3, 0.7]
	# s1.successor = [3]
	# s1.successorP = [1]
	s1.tropismT = 1
	s1.theta = 0.
	s1.thetas = 0.05
	s1.tropismN = 2
	s1.tropismS = 0.005
	s1.r = 1
	s1.rs = 0.05

	s2.name = "secondary_stem"
	s2.subType = 3
	s2.lmax = 7
	s2.lmaxs = 0.2
	s2.lb = 0
	s2.la = 2
	s2.ln = 2
	s2.lns = 0.1
	s2.lnf = 0
	s2.RotBeta = 2 / 3
	s2.BetaDev = 0.1
	s2.InitBeta = 0
	s2.gf = 1
	s2.successor = [2]
	s2.successorP = [1]
	s2.tropismT = 4
	s2.theta = 0.3
	s2.thetas = 0.02
	s2.tropismN = 18
	s2.tropismS = 0.01
	s2.r = 0.5
	s2.rs = 0.02

	s3.name = "invisible stem"
	s3.subType = 2
	s3.lmax = 5
	s3.la = 0
	s3.ln = 0
	s3.RotBeta = 2/3
	s3.BetaDev = 0
	s3.InitBeta = 0.
	s3.lb = 0
	s3.la = 0
	s3.ln = 0
	s3.lnf = 0
	s3.RotBeta = 2 / 3
	s3.BetaDev = 0
	s3.InitBeta = 0
	s3.gf = 1
	s3.tropismT = 1
	s3.theta = 0.3
	s3.tropismN = 18
	s3.tropismS = 0.01
	s3.r = 1

	l1.name = 'leaf_under_second_stem'
	l1.subType = 2
	l1.lb = 2
	l1.la = 0.2
	l1.lmax = 5
	l1.lmaxs = 0.1
	l1.r = 0.5
	l1.rs = 0.02
	l1.RotBeta = 0.5
	l1.BetaDev = 0
	l1.InitBeta = 0.
	l1.tropismT = 1
	l1.tropismN = 5
	l1.tropismS = 0.15
	l1.theta = 0.35
	l1.gf = 1

	s4.name = "rosette"  # Cannot be a leaf organ because we can only create 1 leaf organ subType
	s4.subType = 4
	s4.lmax = 10
	s4.lmaxs = 0.2
	s4.lb = 1
	s4.la = 0
	s4.ln = 2
	s4.lnf = 0
	s4.RotBeta = 3 / 5
	s4.BetaDev = 0.02
	s4.InitBeta = 0
	s4.gf = 1
	s4.tropismT = 1
	s4.theta = 0.3
	s4.thetas = 0.02
	s4.tropismN = 18
	s4.tropismS = 0.01
	s4.r = 0.5
	s4.rs = 0.02

	plant.setOrganRandomParameter(p0)
	plant.setOrganRandomParameter(p1)
	plant.setOrganRandomParameter(s1)
	plant.setOrganRandomParameter(s2)
	plant.setOrganRandomParameter(s3)
	plant.setOrganRandomParameter(s4)
	plant.setOrganRandomParameter(l1)

	srp = pb.SeedRandomParameter(plant)  # with default values
	srp.seedPos = pb.Vector3d(0., 0., -3.)  # [cm] seed position
	srp.maxB = 0  # [-] number of basal roots (neglecting basal roots and shoot borne)
	srp.firstB = 10.  # [day] first emergence of a basal root
	srp.delayB = 3.  # [day] delay between the emergence of basal roots
	srp.maxTil = 10
	plant.setOrganRandomParameter(srp)

	return plant
Пример #16
0
sys.path.append("../../../src/python_modules")
import plantbox as pb
import matplotlib.pyplot as plt
import numpy as np

fig, axes = plt.subplots(2, 3, figsize=(15, 7))

rs = pb.RootSystem()
srp = pb.SeedRandomParameter(rs)
srp.firstB, srp.delayB, srp.maxB = 1., 1., 0
rs.setRootSystemParameter(srp)

dx0, dx1 = 100, 1  # very large resolution for taproot
theta = 70 / 180 * np.pi

p0 = pb.RootRandomParameter(rs)
p0.name, p0.subType, p0.lmax, p0.r, p0.dx, p0.theta = "taproot", 1, 50., 2., dx0, 0.  # parameters as before
p0.tropismT, p0.tropismN, p0.tropismS = pb.TropismType.gravi, 2, 0.1
p0.successor, p0.successorP = [2], [1.]  # set up successors
p0.lns = 0.  # test with other values...
p0.lb, p0.la = 0., 0.
rs.setOrganRandomParameter(p0)

p1 = pb.RootRandomParameter(rs)
p1.name, p1.subType, p1.lmax, p1.r, p1.dx, p1.theta = "lateral", 2, 30., 1., dx1, theta
p1.tropismT, p1.tropismN, p1.tropismS = pb.TropismType.exo, 2, 0.2
rs.setOrganRandomParameter(p1)

ln_ = [4., 2.]  # inter lateral distance
lnk_ = [-2. / 45., 0, 2. / 45]  # slope
Пример #17
0
import sys; sys.path.append(".."); sys.path.append("../../src/python_modules"); sys.path.append("../../")
import numpy as np
import matplotlib.pyplot as plt

import plantbox as pb
import vtk_plot as vp

plant = pb.Plant()  

seed_rp = pb.SeedRandomParameter(plant)
seed_rp.subType = 0
plant.setOrganRandomParameter(seed_rp)

root_rp = pb.RootRandomParameter(plant)
root_rp.subType = 1
root_rp.lmax = 1
root_rp.r = 0.1
root_rp.theta = 0
plant.setOrganRandomParameter(root_rp)

stem_rp = pb.StemRandomParameter(plant)
stem_rp.subType = 1
stem_rp.la = 1.
stem_rp.lb = 5
stem_rp.lmax = 7.5
stem_rp.ln = 1
stem_rp.theta = 0
stem_rp.successor = [2]
stem_rp.successorP = [1]

plant.setOrganRandomParameter(stem_rp)