02_user_tutorials:from_photosynthesis_to_transport
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| 02_user_tutorials:from_photosynthesis_to_transport [2026/09/25 15:44] – created barley1965 | 02_user_tutorials:from_photosynthesis_to_transport [2026/09/28 09:48] (current) – removed barley1965 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Exercise: Sources, sinks and assimilate transport in a virtual plant ====== | ||
| - | //Master 2, specialties "Seed Science and Plant Propagation" | ||
| - | |||
| - | ===== Learning objectives ===== | ||
| - | |||
| - | At the end of this session you should be able to: | ||
| - | * explain how a functional–structural plant model (FSPM) links **light interception → photosynthesis → transport → growth of sinks**; | ||
| - | * identify, in real model code, where each of these processes is computed and which organs act as **sources** or **sinks**; | ||
| - | * run a model experiment rigorously: **predict, run, observe, explain**; | ||
| - | * modify the model to represent a situation from your own field (a pest or disease, or seed/fruit set); | ||
| - | * critically judge what a model does and does not represent. | ||
| - | |||
| - | You do **not** need to be a programmer. Every code change you are asked to make is given or guided step by step. | ||
| - | |||
| - | ===== Schedule ===== | ||
| - | |||
| - | ^ Part ^ Content ^ Time ^ | ||
| - | | 0 | Setup: open and run the model | 10 min | | ||
| - | | 1 | The biology in brief | 10 min | | ||
| - | | 2 | The model at a glance | 15 min | | ||
| - | | 3 | Run and observe | 15 min | | ||
| - | | 4 | Reading the code: production, transport, use | 25 min | | ||
| - | | 5 | Virtual experiments | 25 min | | ||
| - | | 6 | Your specialty: plant health **or** seed science | 15 min | | ||
| - | | 7 | Synthesis | 5 min | | ||
| - | | (Bonus) | Connect transport to fruit growth | for fast groups | | ||
| - | |||
| - | ---- | ||
| - | |||
| - | ===== Part 0 – Setup (10 min) ===== | ||
| - | |||
| - | - Start GroIMP and open the project '' | ||
| - | - The model code is in the file '' | ||
| - | - In the toolbar of the 3D view you will find buttons for the **public** methods of the model. Here there is one: '' | ||
| - | - To reset the plant to its initial state, use the reset/" | ||
| - | - Click '' | ||
| - | |||
| - | Three charts open automatically: | ||
| - | ^ Chart ^ What it shows ^ | ||
| - | | //Light intercepted by canopy// | total light absorbed by all leaves during the last hour | | ||
| - | | //Canopy photosynthesis// | ||
| - | | //Fruit growth// | size of every fruit over time (one series per fruit) | | ||
| - | |||
| - | **Colour code in the 3D view** (false colours, for display only): | ||
| - | * Leaves: colour depends on the light they absorbed. | ||
| - | * Internodes: colour depends on their sugar content – the brighter, the more sugar. | ||
| - | * The brown floor is made of light-absorbing tiles; bright tiles receive more light. | ||
| - | |||
| - | The '' | ||
| - | |||
| - | ===== Part 1 – The biology in brief (10 min) ===== | ||
| - | |||
| - | Plants produce sugars (assimilates) in **source** organs – mainly mature leaves – and use them in **sink** organs – young leaves, stems, roots, flowers, fruits and seeds. Sugars travel through the **phloem**. In the widely accepted Münch model, sugar loading at the source raises the osmotic pressure there, unloading at the sink lowers it, and the resulting pressure difference drives a mass flow from source to sink. A young leaf is first a sink and becomes a source when it reaches roughly a third to half of its final size (**sink–source transition**). | ||
| - | |||
| - | **Questions (answer in 2–3 lines each):** | ||
| - | - **Q1.** Name three sources and three sinks in a tomato plant bearing fruit. | ||
| - | - **Q2.** Give one example of a pest or pathogen that changes the source–sink balance of a crop, and say whether it mainly reduces the source, adds a sink, or blocks transport. | ||
| - | - **Q3.** In a seed crop, why can the number of fruits/ | ||
| - | |||
| - | ===== Part 2 – The model at a glance (15 min) ===== | ||
| - | |||
| - | ==== 2.1 The organs (modules) ==== | ||
| - | |||
| - | ^ Module ^ Role ^ Important attributes ^ | ||
| - | | '' | ||
| - | | '' | ||
| - | | '' | ||
| - | | '' | ||
| - | | '' | ||
| - | | '' | ||
| - | | '' | ||
| - | | '' | ||
| - | |||
| - | ==== 2.2 What happens during one call of grow() ==== | ||
| - | |||
| - | <code java> | ||
| - | public void grow () { | ||
| - | run(); | ||
| - | lm.compute(); | ||
| - | absorbAndGrow(); | ||
| - | if (time % 24 == 0) { // 4. once every 24 steps ... | ||
| - | for (int hour = 0; hour < 24; hour++) { | ||
| - | transport(); | ||
| - | } | ||
| - | } | ||
| - | updateChart(); | ||
| - | time++; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | **Q4.** One step represents one hour (constant '' | ||
| - | |||
| - | ==== 2.3 How the plant is built ==== | ||
| - | |||
| - | The rule that makes a bud produce a new metamer is: | ||
| - | |||
| - | <code java> | ||
| - | Bud(r, p, o), (r < 10 && p == 0 && o < 3) ==> | ||
| - | RV(-0.1) Internode(0.1, | ||
| - | [ RL(BRANCH_ANGLE) Bud(r, PHYLLOCHRON, | ||
| - | [ LFA(1) Leaf(0.1, 0.07, 0, 1, 0, r) ] // leaf | ||
| - | RH(GOLDEN_ANGLE) RV(-0.1) Internode(0.1, | ||
| - | Bud(r+1, PHYLLOCHRON, | ||
| - | </ | ||
| - | |||
| - | **Q5.** Draw (on paper) one metamer as produced by this rule: which organs, in which order, and what is inside the square brackets '' | ||
| - | |||
| - | **Q6.** When '' | ||
| - | |||
| - | ===== Part 3 – Run and observe (15 min) ===== | ||
| - | |||
| - | Reset the model and run it for about **300 steps** (≈ 12 days). Observe the 3D view, the charts and the console. | ||
| - | |||
| - | Fill in: | ||
| - | ^ Observation ^ Your answer ^ | ||
| - | | Step at which the first flower appears | | | ||
| - | | Step at which the first fruit appears | | | ||
| - | | Number of fruits at step 300 | | | ||
| - | | Shape of the fruit growth curves (linear? S-shaped? all the same?) | | | ||
| - | | Where are the internodes brightest (most sugar)? Top, bottom, main stem, branches? | | | ||
| - | | Which leaves absorb the most light? | | | ||
| - | |||
| - | **Q7.** Do all flowers become fruits at the same time? Why not? (You will find the rule in Part 4.4.) | ||
| - | |||
| - | ===== Part 4 – Reading the code: production, transport, use (25 min) ===== | ||
| - | |||
| - | We now follow a sugar molecule from where it is made to where it is used. | ||
| - | |||
| - | ==== 4.1 Production: the light response curve ==== | ||
| - | |||
| - | <code java> | ||
| - | float calculateCER(float ppfd) { | ||
| - | return ((FMAX + DARK_RESPIRATION_RATE) * PHOTO_EFFICIENCY * ppfd) | ||
| - | / (PHOTO_EFFICIENCY * ppfd + FMAX + DARK_RESPIRATION_RATE) | ||
| - | - DARK_RESPIRATION_RATE; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | '' | ||
| - | |||
| - | * **Q8.** What is the value of CER in darkness (ppfd = 0)? What does a negative value mean for the leaf? | ||
| - | * **Q9.** What value does CER approach when ppfd becomes very large? Sketch the curve. | ||
| - | * **Q10.** The function '' | ||
| - | |||
| - | In '' | ||
| - | |||
| - | ==== 4.2 Transport ==== | ||
| - | |||
| - | The method '' | ||
| - | |||
| - | **Rule 1 – between a leaf and the internode that carries it** | ||
| - | <code java> | ||
| - | lf:Leaf < | ||
| - | if (lf[as] > 0.01 && lf[age] >= 10) { // mature leaf: EXPORT | ||
| - | float exportable = lf[as] - 0.01; | ||
| - | float r = DIFF_CONST * exportable; | ||
| - | lf[as] -= r; | ||
| - | } else if (itn[as] > 0.01 && lf[age] < 10) { // young leaf: IMPORT | ||
| - | float exportable = itn[as] - 0.01; | ||
| - | float r = DIFF_CONST * exportable; | ||
| - | lf[as] += r; | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | **Rule 2 – between two successive internodes** (simplified here, same meaning as in the model) | ||
| - | <code java> | ||
| - | i_top: | ||
| - | float r = DIFF_CONST * (i_top[as] - i_bottom[as]); | ||
| - | i_bottom[as] :+= r; | ||
| - | i_top[as] | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | **Rule 3 – from an internode to a fruit** | ||
| - | <code java> | ||
| - | itn: | ||
| - | if (itn[as] > 0) { | ||
| - | float r = DIFF_CONST * itn[as]; | ||
| - | itn[as] :-= r; | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | //Reading tip:// '' | ||
| - | |||
| - | * **Q11.** At what age does a leaf switch from sink to source in this model? Why do leaves keep a reserve of 0.01? | ||
| - | * **Q12.** In Rule 2, can sugar move **upwards** as well as **downwards**? | ||
| - | * **Q13.** Compare Rule 1 (export) and Rule 2. Does the export of a mature leaf depend on how much sugar is already in the internode? Is that consistent with the Münch model? | ||
| - | * **Q14.** In Rule 3, which quantity drives the flux into the fruit: the fruit' | ||
| - | |||
| - | ==== 4.3 Use: maintenance and growth ==== | ||
| - | |||
| - | * Internodes lose 1 % of their sugar per step ('' | ||
| - | * Leaves grow following a logistic curve (look at the leaf part of '' | ||
| - | * Fruits grow in the '' | ||
| - | |||
| - | **Q15 – Detective question.** Look closely at the fruit block. Where does the variable '' | ||
| - | |||
| - | **Q16.** Does leaf growth depend on the amount of sugar in the leaf? (Read the comment in the code, then read the code itself.) | ||
| - | |||
| - | ==== 4.4 Fruit set ==== | ||
| - | |||
| - | <code java> | ||
| - | fl: | ||
| - | (t >= m && t < m+2) ==> | ||
| - | { float sugar = lf[as]; } | ||
| - | if (sugar > 0) ( {noFrts++;} Fruit(0.01, 1, 0.1, noFrts) ) | ||
| - | else (fl); | ||
| - | </ | ||
| - | |||
| - | **Q17.** In words: under which condition does a flower become a fruit? Which leaf is checked? What happens to a flower when the condition is not met? | ||
| - | |||
| - | ===== Part 5 – Virtual experiments (25 min) ===== | ||
| - | |||
| - | Method, for **each** experiment: | ||
| - | - Write your **prediction** //before// running (effect on fruit number, fruit size, internode sugar, total leaf sugar). | ||
| - | - Change **one** value only, save (the model resets), run 300 steps. | ||
| - | - Record the result, then **restore the original value**. | ||
| - | |||
| - | Every group does **E1**, plus **two** other experiments of its choice. | ||
| - | |||
| - | ^ Exp. ^ What to change ^ Where ^ | ||
| - | | E1 | '' | ||
| - | | E2 | Lamp power: '' | ||
| - | | E3 | Sink–source transition: leaf age '' | ||
| - | | E4 | Maintenance respiration '' | ||
| - | | E5 | Transport every hour instead of 24 rounds once a day: in '' | ||
| - | | E6 | Phyllochron: | ||
| - | |||
| - | Results table (one line per run): | ||
| - | ^ Exp. ^ Value ^ Prediction ^ Nb fruits (step 300) ^ Size of largest fruit ^ Internode colour ^ Total leaf sugar (chart) ^ Explanation ^ | ||
| - | | Ref | – | – | | | | | | | ||
| - | | E1 | 0.02 | | | | | | | | ||
| - | | E1 | 0.0002 | | | | | | | | ||
| - | | | | | | | | | | | ||
| - | | | | | | | | | | | ||
| - | |||
| - | **Q18.** Was any result the opposite of your prediction? Use your answer to Q15 to explain it. | ||
| - | |||
| - | ===== Part 6 – Your specialty (15 min) ===== | ||
| - | |||
| - | Choose **one** track and do at least one task. | ||
| - | |||
| - | ==== Track A – Plant Health ==== | ||
| - | |||
| - | **A1. Aphids: a new phloem sink.** Aphids feed directly on phloem sap. Add a colony on the internodes of rank 3, starting at step 100. | ||
| - | |||
| - | At the top of the file, next to the other constants, add: | ||
| - | <code java> | ||
| - | const float APHID_RATE = 0.02; // fraction of internode sugar taken per transport round | ||
| - | float aphidSugar = 0; // total sugar taken by the aphids | ||
| - | </ | ||
| - | |||
| - | Inside '' | ||
| - | <code java> | ||
| - | itn: | ||
| - | float r = APHID_RATE * itn[as]; | ||
| - | itn[as] :-= r; | ||
| - | aphidSugar += r; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Print the total at each step: add '' | ||
| - | |||
| - | **A2. Defoliation by a leaf disease.** Remove all leaves of rank ≤ 4 at step 150. Add this rule in '' | ||
| - | <code java> | ||
| - | lf:Leaf, (time == 150 && lf[rank] <= 4) ==> ; | ||
| - | </ | ||
| - | |||
| - | **A3. A pathogen that lowers photosynthetic capacity** (e.g. a leaf spot or a virus): reduce '' | ||
| - | |||
| - | **Questions: | ||
| - | * **QA1.** Which intervention reduced fruit set / fruit growth the most? Was the position of the aphid colony important? Why? | ||
| - | * **QA2.** Which of A1, A2, A3 reduces the //source//, which adds a //sink//? Why is it useful for a plant pathologist to make this distinction? | ||
| - | * **QA3.** What would you need to add to the model to represent the aphid population growing over time? | ||
| - | |||
| - | ==== Track B – Seed Science and Plant Propagation ==== | ||
| - | |||
| - | **B1. Fruit thinning.** Remove every second fruit at step 250. Add this rule in '' | ||
| - | <code java> | ||
| - | fr:Fruit, (time == 250 && fr[no] % 2 == 0) ==> ; | ||
| - | </ | ||
| - | Compare the size of the remaining fruits with the reference run. | ||
| - | |||
| - | **B2. Fruit abortion threshold.** In the fruit-set rule (Part 4.4), a flower sets fruit as soon as '' | ||
| - | |||
| - | **B3. Competition among fruits.** In the fruit block of '' | ||
| - | |||
| - | **Questions: | ||
| - | * **QB1.** Is there a trade-off between the number and the size of fruits? Show it with your results. | ||
| - | * **QB2.** In real plants, the first-set fruits usually dominate later ones. Which setting of B3 is closest to this? What are the consequences for seed-lot uniformity? | ||
| - | * **QB3.** A seed producer wants large, uniform seeds. Based on the model, what would you advise, and what is missing from the model to give a reliable answer? | ||
| - | |||
| - | ===== Part 7 – Synthesis (5 min) ===== | ||
| - | |||
| - | * **Q19.** Draw a diagram (boxes and arrows) of the sugar flows in the model **as it is coded**: production → stocks → transport → use. Mark any place where sugar appears or disappears without an arrow. | ||
| - | * **Q20.** List two strengths and two limitations of this model for studying source–sink relations. | ||
| - | |||
| - | ===== Bonus – Make fruits grow on the sugar they actually receive ===== | ||
| - | |||
| - | For fast groups (this is a "new functionality" | ||
| - | |||
| - | Modify the fruit block in '' | ||
| - | - the fruit computes its **potential** growth for this step (you can keep the '' | ||
| - | - it converts potential growth into a **sugar demand** (introduce a constant, e.g. '' | ||
| - | - it grows only as much as its stock '' | ||
| - | |||
| - | Then repeat experiment E1. Do the results now match your original predictions? | ||
| - | |||
| - | ===== Before the exam ===== | ||
| - | |||
| - | This exercise is not handed in, but the questions above cover the kind of reasoning expected in the exam: explaining source–sink relations, reading a simple model rule, and predicting and interpreting the outcome of a virtual experiment. Keep your answers and tables as revision notes. | ||
02_user_tutorials/from_photosynthesis_to_transport.1790351085.txt.gz · Last modified: by barley1965
