May 03

Organism of the week #13 – Unlucky for some

I’m a sucker for things that are both poisonous and pretty. Datura metel definitely meets both criteria.

Datura metel (flower) [CC-BY Alex Lomas]

Datura metel (flower)

These photos were taken in southern Spain, where this purple variety of the plant seemed to have naturalised itself out from someone’s garden .

Datura metel [CC-BY Alex Lomas]

Ominously looming over the Spanish countryside

Datura metel is closely related to Atropa belladonna, the deadly nightshade, and – like it – the plant contains high concentrations of atropine and scopolamine. If eaten, these chemicals clog up receptors in the nervous system, the normal job of which is to cause the body to “rest and digest“. By blocking these receptors, high doses of atropine or scopolamine cause a “flight or fight” response: increased heart rate, dry mouth, reduced gut movement, and dilated pupils. The last of these effects is the source of the belladonna (‘beautiful lady’) of Atropa belladonna: juice from deadly nightshade was used cosmetically during the middle ages to dilate the pupils alluringly – and, one suspects – alarmingly.

Atropine and scopolamine are still used medically, but in standardised and pure form rather than as the random rag-bag of assorted poisons used by mediaeval herbalists. Atropine is used to speed up dangerously slow heart beats, and as a treatment for organophosphate poisoning, where it counteracts the excessive “rest and digest” symptoms caused by nerve agents and accidental consumption of some insecticides. Atropine is no longer used to dilate pupils for eye examinations as it is too long-lasting in its effects (days to weeks!) Scopolamine is mostly used in the treatment of motion sickness: it reduces nausea by reducing motion of the gut.

Scopolamine [CC-BY-SA-3.0 Steve Cook]

Scopolamine

The fruit of the Datura is called a thorn-apple, but I would certainly not recommend baking them into pies. In Datura stramonium, the fruit varies markedly in its shape if it carries an extra copy of one of its chromosomes. Extra chromosomes (up to and including a whole extra set, or four, or even eight!) are quite well tolerated by plants, although they can lead to fertility issues. However, in humans, most (but not all) changes to chromosome number are lethal. Quite why plants are more tolerant than humans of this sort of large-scale chromosomal change is not well understood. On the other hand, doubling of chromosome number has occurred at least twice in the evolutionary history of human beings, and our own chromosome 2 is the product of fusion of two smaller chromosomes (which are retained in our nearest relatives), so these events – whilst rare – are not unheard of in mammals.

Datura metel (fruit) [CC-BY Alex Lomas]

Thorn-apple

May 01

The Michaelis-Menten model is not applicable to most enzymes in a cell

Enzymes in cells can be modelled using the Michaelis-Menten model

Enzymes can be, and often are, modelled by the Michaelis-Menten (well, Briggs-Haldane) model:

v = vmax · [S] / (KM + [S])

Where:

  • v is the velocity of the enzyme, which is the rate at which product accumulates
  • vmax is the maximum velocity of the enzyme (i.e. the velocity to which it tends as substrate concentration increases towards infinity)
  • [S] is the concentration of substrate
  • KM is the Michaelis constant for the enzyme, which is the concentration of substrate needed to make the enzyme run at half its maximum velocity

This model works out very well when you mix together an enzyme and its substrate in a test-tube and measure the initial rate of product accumulation. Here are some data from a practical I run with my first-year biology students, showing a nice hyperbolic curve as predicted by the model:

Michaelis-Menten kinetics [CC-BY-SA-3.0 Steve Cook]

Wheat-germ acid phosphatase shows Michaelis-Menten kinetics when acting on para-nitrophenol phosphate, with a vmax of about 17 µM min−1 and a KM of about 0.5 mM.

However, the Michaelis-Menten model relies on a number of assumptions. During the Veneration and Memorisation of the Derivation, these assumptions may be dashed past by the lecturer doing the mathematical masturbation, and may be ignored by the students trying to grasp the point of the modelling. This is problematic, as not understanding the assumptions leads to the Michaelis-Menten being applied thoughtlessly in situations in which it does not apply.

Which turns out to be almost all situations.

The assumptions are:

  1. The only relevant chemical species in the system are the enzyme (E), the substrate (S), the enzyme-substrate complex (ES), and the product (P).
  2. The only relevant chemical reactions occurring in the system are the reversible association of enzyme and substrate to form the enzyme-substrate complex; and the irreversible breakdown of the enzyme-substrate complex to product.
  3. The concentration of the enzyme-substrate complex is constant.

For the Michaelis-Menten model to be applicable to an enzyme in a cell, then these assumptions need to hold.

Are the only chemicals in a cell E, S, P and ES?

The answer is obviously no. Cells contain thousands of metabolites. To imagine that none of them have any relevant effect on the enzyme under consideration is patent nonsense, particularly when half of the rest of the enzymology course is about enzyme inhibitors, and enzyme regulation by small molecules.

In a test-tube, we can provide a pristine environment of E, S, P and ES, but a test-tube of four ingredients isn’t a terribly realistic model of a cell. It’s also not terribly realistic to expect P to sit back and do nothing…

Are enzyme-catalysed reactions in the cell irreversible?

The answer depends on which reaction you’re talking about, but it is certainly true that many of reactions in the cell are at equilibrium under normal cellular conditions. For example, in glycolysis:

Glucose → Glucose phosphate  Fructose phosphate → Fructose bisphosphate

Triose phosphate Bisphosphoglycerate  Phosphoglycerate Phosphoenolpyruvate → Pyruvate

…all but three of the glycolytic reactions (those shown with a → rather than a ) are usually at equilibrium in the cell. At equilibrium, the forward and reverse rates of reaction are equal, so for these enzymes, the Michaelis-Menten model is inappropriate because assumption #2 is completely broken. The backwards reaction is appreciable because the concentration of product is relatively high. So for many enzymes in the cell, the answer to the question above is a resounding “no”.

You can model these enzymes with a (substantially more complex) reversible version of Michaelis-Menten model, but at equilibrium, these enzymes are most assuredly not causing products to accumulate in the way implied by a naïve glance at the graph above. Enzymes acting on equilibrium reactions are also exquisitely sensitive to changes in substrate and product concentrations. This is something else that is not obvious from the Michaelis-Menten graph, but which is vitally important, as we shall see below.

In a test-tube, we can provide a super-duper pristine environment of just E and S, which will give us more-or-less Michaelis-Menten kinetics after a little while (once the concentration of ES has settled down) and then for a little while (until P accumulates a bit and the reverse reaction becomes appreciable), but this is even less realistic than the four-ingredient tube above!

What of the remaining three reactions of glycolysis? It turns out these enzymes have to violate the assumptions of the Michaelis-Menten model, and for a very good reason.

If enzymes that catalyse irreversible reactions in the cell were to exhibit Michaelis-Menten kinetics, what would their response to substrate look like at low substrate concentrations?

Substrate concentrations in cells are typically lower than, but somewhere in the vicinity of, KM. When [S] is lower than KM, the Michaelis-Menten can be approximated as:

v ≈ (vmax/KM) · [S]

To double the velocity of such a reaction, you need to double the concentration of substrate: if you look at the graph above, you can see it’s more-or-less a straight line between 0 and 0.5 mM.

Requiring the concentration of a chemical to double in order to get an appreciable increase in the rate of the reaction that consumes that chemical is an extremely bad idea. Your blood normally contains glucose at a concentration between 4 and 6 mM. If your blood glucose needs to double to 10 mM before the enzymes in your body begin to deal with it properly, then you are probably diabetic.

Enzymes acting at irreversible reactions have usually evolved a completely different response to substrate that is most certainly not modelled by the Michaelis-Menten equation:

Sigmoidal kinetics [CC-BY-SA-3.0 Steve Cook]

Enzymes acting at non-equilibrium reactions usually show sigmoidal kinetics, with a very sharp response to substrate: doubling the substrate concentration from 0.5 to 1 mM here leads to a six-fold increase in the velocity

These enzymes are usually multimeric and can co-operatively bind multiple substrate molecules, so there are ES, ESS, ESSS, etc., complexes in the system too. They are also often sensitive to feedback inhibition from other small molecules, so there are plenty of other relevant chemicals you need to take account of when modelling their behaviour. These enzymes violate assumption #1 in the most thorough fashion, and have a sharp sigmoidal (S-shaped) response to substrate.

The Michaelis-Menten is a very good model of the activity of many enzymes in a test tube full of substrate. Its parameters vmax and KM are genuinely useful bits of basic information to obtain about an enzyme, and they are easy to estimate in this simple system. However, Michaelis-Menten kinetics are inapplicable for most enzymes within a cell because most enzymes act on reactions that are at equilibrium, and they are unsuitable for most of the other enzymes within a cell, because enzymes acting at non-equilibrium reactions cannot afford to behave in such a lackadaisical fashion. Be really careful when applying toy models to real cells. Be really careful that you know the assumptions of any model you are using.

Apr 25

Lacklustre butterworts

I’d like to be more excited about this than I am, but Pinguicula agnata is not the most crowd-pleasing of my butterworts, even whilst in flower (as it currently is). Ho hum. Strange specific epithet though. No idea why Casper (whoever s/he might have been) thought it appropriate. Could be worse though, I guess.

Pinguicula agnata [CC-BY-SA-3.0 Steve Cook]

Pinguicula agnata

Apr 23

Metabolic pathways don’t really have end products

The end product of glycolysis is pyruvate

This, and equivalent statements about other metabolic pathways:

The products of Krebs cycle are ATP/GTP, NADH and carbon dioxide

are not exactly wrong, but they are easily over-interpreted in a way that leads to misunderstanding. They are also  easily swallowed as explanations without considering quite what ‘end product’ is supposed to mean.

Glycolysis is the metabolic pathway in cells that converts glucose to pyruvate

In ‘simplified’ form, glycolysis looks like:

Glucose → Glucose phosphate → Fructose phosphate → Fructose bisphosphate ⇉

Triose phosphate → Bisphosphoglycerate → Phosphoglycerate → Phosphoenolpyruvate → Pyruvate

When written down like this, it looks very much as if pyruvate is the end product of a nice linear sequence of reactions. However, glycolysis has a messy metabolic context:

Metabolic pathways [CC-BY-SA-3.0 Zephyris from w]

Metabolic pathways [CC-BY-SA-3.0 Zephyris from w]

Many of the intermediates of glycolysis can enter into other metabolic pathways, and vice versa. For example, some of the glucose-phosphate can enter the pentose phosphate pathway (represented by “Ribulose-5P” and “Fructose” in the diagram above):

Glucose phosphate → Phosphogluconate (+CO2) → Ribulose phosphate →

3 ribulose phosphate → [Big ball of mud including ribose phosphate] → Triose phosphate + 2 Fructose phosphate

If a cell is making lots of DNA, it will need a lot of ribose phosphate, and much of the glucose entering glycolysis will end up as ribose phosphate, not as pyruvate. The question to ask is therefore:

If a cell is synthesising DNA, is ribose phosphate the product of glycolysis?

The knee-jerk response to this is “no”; that ribose phosphate is a product of the pentose phosphate pathway, not of glycolysis. But this begs the question. The two pathways have the same initial steps:

Glucose → Glucose phosphate

The reaction (technically, reactions) above is generally considered part of glycolysis, and it is generally taught that the pentose phosphate pathway is a ‘shunt’ that bleeds off glycolytic intermediates, as though it were some parasitic excrescence to the side of the True Path of Glycolysis. If not a completely arbitrary way of looking at these two pathways, it is at least quite arbitrary.

The choice of which pathway owns these (or any other) reactions depends on what you’re trying to use the pathways to explain. Glycolysis is a convenient shorthand in cells that are channelling a lot of glucose to respiration; it may not be such a helpful or unifying shorthand under other circumstances.

Divvying up the metabolic pathways of a cell into discrete subunits like “glycolysis”, “Krebs cycle” and “pentose phosphate pathway” is largely a matter of convenience. This seems – and indeed, is – very obvious and uncontroversial. Of course metabolic pathways are mere conveniences. Of course they are an imperfect exercise in pigeon-holing. Of course they interact in complex ways that blurs their edges. What’s the problem?

The problem lies in not explicitly acknowledging this. When looking at the ‘end products’ of metabolic pathways, forgetting that glycolysis is just a shorthand can lead to significant misunderstandings of why metabolic pathways are regulated (which will be the subject of a later post), and what they are for (which is the subject of the rest of this one).

Does pyruvate accumulate when glycolysis is running?

It is true that pyruvate is the ‘end product’ of glycolysis, but only in the same sense that the M1 motorway’s destination is junction 21 of the M25 that surrounds London. The cars travelling along the M1 from Leeds to London do not simply pile up at junction 21 of the M25, or at least – if the cars do pile up – something is wrong. The cars filter off onto the M25 and elsewhither. Similarly, the carbon travelling down the glycolytic pathway from glucose does not simply pile up at pyruvate, or at least – if pyruvate does pile up – something is wrong. The carbon filters off to the Krebs cycle or elsewhither.

M1 motorway map [CC-BY-SA-3.0 Steve Cook, based on uncopyrighted image by Michiel1972]

M1 motorway map

The end product of glycolysis is the starting material for some other bit of metabolism, as indeed are all of its intermediates. If you don’t have that in mind, you may get the misleading impression that when glycolysis is running normally, pyruvate is accumulating. It shouldn’t, and it usually doesn’t.

It is also true that the purpose of glycolysis is to convert glucose to pyruvate, but only in the same sense that the purpose of the M1 is to move cars from Leeds to London (and vice versa). This is a purpose, but there are higher-level purposes for both highways. For the motorway, this purpose is probably the easy movement of cars across the whole road network: from Derby to York, as well as from London to Leeds. At a higher level, it might conceivably also include employment and economic growth: the mere milling about of cars is a detail of a larger picture.

Do metabolic pathways really have end products?

or to put it another way

What is the larger picture for the milling about of carbon in a metabolic pathway?

The usual fate of the pyruvate made by glycolysis in aerobically respiring cells is to be ‘burnt’ with oxygen to form carbon dioxide, water and ATP. Carbon dioxide certainly has a good claim to be the ultimate end product of glycolysis in humans, as it is exhaled as a waste product. Conversely, the ATP has no better claim than pyruvate to be an end product of these pathways: it is mostly used to power growth and movement, including the walking and chewing and swallowing involved in getting the glucose into your body in the first place. The ATP generated by respiration is recycled to obtain more glucose to make more ATP, which is recycled to obtain more glucose to make more ATP, and so on and so on. The only ‘true’ end product of human metabolism would appear to to be the warm, damp carbon dioxide you exhale.

This is almost – but not quite – true.

There is one other important end product of glycolysis (and Krebs cycle and oxidative phosphorylation and all the other metabolic gubbins) and that is more metabolism. Metabolic pathways in humans have the unusual properly that whilst creating an awful lot of warm, damp carbon dioxide waste, they also produce more of the components needed to run that metabolism.

The ultimate, bigger-picture ‘end product’ of glycolysis is not pyruvate, but babies.

If you think of named metabolic pathways as distinct entities with particular purposes and set start and end points, rather than convenient shorthands for navigation, you may miss the forest for the trees journey for the roads.

Apr 17

Organism of the week #12 – Preying mantis

This is mostly just to see if I can get embedded video to work. Mantis religiosa

Om nomnomnom.

Explain again why I need to install a plug-in to get WordPress to embed video from its own local media library?

Apr 14

Down amongst the butterworts

I lived within 30 minutes’ drive of Charles Darwin’s house for the whole of my childhood. It’s been open to the public since it was acquired by English Heritage in 1998. I’ve been a biologist of sorts for about 18 years.

It’s taken me until today to actually visit Down House, and to wander down the famous sandwalk behind the house, where Darwin used to do his thinking. I am a very bad, and very lazy boy. Also a very lucky one to have a husband prepared to schlepp to yet another greenhouse.

The Sandwalk at Down House [CC-BY-SA-3.0 Steve Cook]

The Sandwalk at Down House

Darwin’s greatest work was – of course – his 1875 treatise Insectivorous Plants in which he described the carnivorous activities of sundews, butterworts and their ilk.

Drosera rotundifolia [CC-BY-SA-3.0 Steve Cook]

Darwin did much of his observations of carnivory in plants on the round-leaved sundew Drosera rotundifolia. This is a photo of some of these plants at Darwin’s glasshouse.

The glasshouses at Down are home to a small but beautifully formed collection of plants including the lovely large-flowered butterwort, Pinguicula grandiflora, one of just nine species of insectivorous plant native to Britain and Ireland (three sundews, three butterworts, three bladderworts, plus one introduced pitcher-plant).

Pinguicula grandiflora [CC-BY-SA-3.0 Steve Cook]

Pinguicula grandiflora, also at Down House

This species forms a hibernaculum, a very tight overwintering bud, like a more extreme version of the non-carnivorous winter rosettes of my Mexican species, so we were quite lucky to see them in flower given that it’s been winter since – IIRC – September 2010.

Alex and Steve on the Sandwalk at Down House [CC-BY-SA-3.0 Steve Cook]

Me and my lovely husband on the Sandwalk

Apr 12

Moose objects and roles

Mr Moose’s Newfangled Object Framework

Creating objects from scratch by hand-rolling them is somewhat fragile, and you end up drowning in the writing of endless boilerplate accessor methods. I would strongly suggest that rather than doing objects the hard way, you use the Moose object framework unless there’s some particular constraint (speed, memory footprint) on your code that would make it inappropriate.

Moose is simply a module, so to do stuff with it, you’ll need to load it.

use 5.12.0;
use strict;
use warnings;
use Moose;

The first three lines are optional, but if you’re using Perl’s modern object framework, you might as well take advantage of its other more recent features.

From a coding standpoint, a Moose object is still a blessed hashref instantiated with new, but the module imports some syntactic-sugar functions that allow you to create objects by declaration, rather than having to hand-code most of their methods.

Creation of the Cat class from the previous post is so simple we can afford to give it an extra attribute and an extra method for the same quantity of RSI:

package Cat;
use strict;
use warnings;
use 5.12.0;
use Moose;

has( 'stomach_contents',
      is      => 'rw', 
      isa     => 'Str', 
      default => 'nothing',
);

has( 'balance',
      is      => 'ro', 
      isa     => 'Str', 
      default => 'perfect',
);

sub feed {
    my ( $self, $food ) = @_;
    $self->stomach_contents( $food ) if defined $food;
    return $self->stomach_contents();
}

sub vomit {
    my ( $self ) = @_;
    my $vomit = $self->stomach_contents();
        # we could still use feed() instead, but this is more intuitive
        # given Moose has created the accessor method for us for free
    $self->feed( 'nothing' );
    return $vomit;
}

sub fetch {
    say "I don't bloody think so";
}

1;

The has declaration is used to create an attribute called stomach_contents with an associated getter/setter method called  stomach_contents. The other items passed to has set restrictions on the attribute and what its getter/setter can do, and what the value of the attribute can be.

  • If you pass is => 'rw', the method will act as a read/write getter/setter accessor method. If you pass is => 'ro', the attribute can only be set at the time of instantiation, and the associated method will a read only getter accessor thereafter.
  • If you pass isa => 'Str', the attribute must be (something interpretable as) a string. Bool, Num, ArrayRef, etc. are some of the alternative restrictions on the attribute’s type.
  • The value of the attribute can be set to a default at instantiation by default => blah where blah can be a value, or a coderef like sub { time % 2 ? 'empty' : 'fish-heads' } that returns a default value.

You then create a Cat in the same way as before:

my $kitty = Cat->new(); # create new object $kitty of class Cat

and manipulate it by invoking methods on it as before:

$kitty->feed( "Mechanically recovered meat sludge" );

You can still even violate encapsulation and look at its innards:

use Data::Dumper;
Dumper( $kitty );

Inheritance (if you must)

To implement the Manx class that inherits from Cat, you use extends:

package Manx;
use strict;
use warnings;
use 5.12.0;
use Moose;
extends 'Cat';

has( 'tail_type',
      is      => 'rw', 
      isa     => 'Str', 
      default => 'stumpy',
);

# We can override the default value of the 'balance' attribute of the parent Cat class
# using a plus sign to indicate we're extending/modifying a pre-existing attribute
has( '+balance', default => 'issues' );
has( '_secret_name',
      is      => 'ro', 
      isa     => 'Str', 
      default => sub { time % 2 ? 'Odette' : 'Evelyn' },
);

sub miaow {
    my( $self ) = @_;
    print "Miaow\n";
}

# We can override the 'fetch' method too by passing a coderef to 'override',
# and we can invoke the parent's 'fetch' method by calling 'super'

override 'fetch' => sub {
    my $self = shift;
    say "Hm, thinking about it...";
    $self->_secret_name eq 'Odette' ? super() : say "Oh, alright then";
};
1;

Roles

Although inheritance is a very common feature in programming languages that have classes, when you create subclasses that inherit from base classes and then extend them with additional functionality, there’s a good chance you might be better off composing the class from its roles instead.

Some classes genuinely extend their base classes. 3DPoint extends 2DPoint by the addition of a z attribute.  Bird extends Vertebrate by overriding the default ‘skin’ value of the integument attribute with ‘feathers’.

If a piece of code uses a generic Vertebrate object, you should be able to replace it with a Bird and see no ill effects, because all the things a Vertebrate can do should be a subset of the things a Bird can do.

However, what happens when we try to make a Bird fly? When we come to implement Bat, we realise that a lot of the aerial assault code in Bird should also be in Bat too. It doesn’t make sense to factor fly out into Vertebrate otherwise you’d be able to make a generic Vertebrate->fly, which – in general – it shouldn’t be able to do.

The problem is that our two classes are trying both to model the hierarchy of our organisms, and also to avoid code duplication. These two aims are incompatible. We want only one copy of the fly method to avoid code duplication in Bird and Bat, but we also want Vertebrate to contain only the methods applicable to all vertebrates. Similarly, we’d want only one copy of lay and roll to avoid duplication of EggLayer code across Bird and Bee.

One way to work around this clash is to allow a class to have multiple parents. We could create classes called Aircraft and EggLayer and allow Bird to inherit from Vertebrate and Aircraft and EggLayer. This would certainly make sense if we’d already written the Aircraft class for some other previous project. Such multiple inheritance is possible in Perl, but it simply opens a new can of worms.

The most important of these problems is that Bird will inherit all the methods and attributes of all its base classes, and there may well be clashes. It is not possible to resolve these clashes automatically and correctly. Perhaps you want Bird to inherit the squawk method from Vertebrate (overriding Aircraft‘s irrelevant radio transponder version). But maybe you also want some sort of disambiguation so you can use Aircraft‘s roll method and the egg-roll-ing method that is supplied by EggLayer. Most languages (including Perl’s default method resolution order) do not give you this flexibility.

Moose allows you to compose a class from roles, and to allow fine-grained control over what happens when roles have conflicting methods.

use strict;
use warnings;
use 5.12.0;

{
  package Vertebrate;
  use Moose;
  has( 'integument', is => 'ro', default => 'skin' );
  sub squawk { 
    my ( $self, $what ) = @_;
    say uc "$what!!!"
  };
}

{
  package Aircraft;
  use Moose::Role;
  has( 'wings',      is => 'ro', default => 'flap', );
  sub fly {
    my ( $self ) = @_;
    print "My wings " . $self->wings . "\n";
  }
  sub roll {
    say "Are you sure you wouldn't rather I yawed or pitched?";
  }
  sub squawk { 
    say "7700! 7700! 7700!"
  };
  requires 'wingspan';
}

{
  package EggLayer;
  use Moose::Role;
  has( 'clutch',      is => 'rw', default => 0, );
  sub lay {
    my ( $self ) = @_;
    print "Clutch-size now " . $self->clutch( 1 + $self->clutch ) . "\n";
  }
  sub roll {
    say "Inverting my eggs";
  }
  requires 'wingspan';
}

{
  package Bird;
  use Moose;
  extends 'Vertebrate';
  has( '+integument',             default => 'feathers' );
  has( 'wingspan',    is => 'ro', default => 0 );
  with
    'Aircraft' => { -alias => { squawk => 'transponder_squawk'}, -excludes => 'squawk' },
    'EggLayer' => { -alias => { roll => 'roll_eggs' }, -excludes => 'roll' };
}

my $bird = Bird->new( wingspan => 20 );
print "Bird has ". $bird->integument . "\n";
$bird->fly;
$bird->squawk( "Tweet" );
$bird->transponder_squawk;
$bird->roll;
$bird->lay;
$bird->lay;
$bird->roll_eggs;
Bird has feathers
My wings flap
TWEET!!!
7700! 7700! 7700!
Are you sure you wouldn't rather I yawed or pitched?
Clutch-size now 1
Clutch-size now 2
Inverting my eggs

Rather than inheriting EggLayer and Aircraft base classes using extends, we consume EggLayer and Aircraft roles using with.

The packages that define the EggLayer and Aircraft roles look very similar to the packages implementing the Vertebrate and Bird classes; the main difference is that they use Moose::Role rather than use Moose. Roles cannot be instantiated, so you cannot create a stand-alone Aircraft or EggLayer object, but you could certainly consume these roles into Cessna and Platypus classes.

The Aircraft role shows an additional feature. It implements fly, roll and wings itself, but it does not implement wingspan. However, it requires that wingspan be implemented somehow by any class consuming the Aircraft role. This allows you to use roles to create interfaces.

{
  package Aircraft;
  use Moose::Role;
  has( 'wings',      is => 'ro', default => 'flap', );
  sub fly {
    my ( $self ) = @_;
    print "My wings " . $self->wings . "\n";
  }
  sub roll {
    say "Are you sure you wouldn't rather I yawed or pitched?";
  }
  sub squawk { 
    say "7700! 7700! 7700!"
  };
  requires 'wingspan';
}

If you delete the line in Bird that defines wingspan as an attribute, you’ll get an exception:

'Aircraft|EggLayer' requires the method 'wingspan' to be implemented by 'Bird'

The Bird class has to deal explicitly with any naming conflicts arising from its consumption of roles. This is a good thing: better to deal with this clearly and make it do what you want, than to rely on some One Size Fits None automated resolution.

Either the Bird class has to define its own roll method directly, or it needs to exclude and/or alias the roll methods it has consumed. Here, we exclude consumption of EggLayer‘s roll method, but also alias it to roll_eggs so that we can still access it is we need to. We could also have excluded and aliased the Aircraft version to roll_fuselage or similar, but that would leave the class without any roll method at all. Although this is allowed, it’s probably to be discouraged, as naïve coders using your Bird class will expect it to have a roll method, and it’s best not to disappoint them.

{
  package Bird;
  use Moose;
  extends 'Vertebrate';
  has( '+integument',             default => 'feathers' );
  has( 'wingspan',    is => 'ro', default => 0 );
  with
    'Aircraft', => { -alias => { squawk => 'transponder_squawk'}, -excludes => 'squawk' },
    'EggLayer'  => { -alias => { roll => 'roll_eggs' }, -excludes => 'roll' };
}

Similarly, we have a conflict between the squawk inherited from the Vertebrate class, and the squawk consumed from the Aircraft role. Note this is subtly different from the case above, which was a conflict between roles, rather than between a role and a class. Here, we exclude consumption of the irrelevant Aircraft version, but again alias it so we can access it as transponder_squawk if we wish. If we did not do this, the squawk consumed from the Aircraft role would silently override the squawk inherited from the Vertebrate class.

Roles provide a convenient way of packaging behaviours up into reusable chunks, without having to create a (possibly, even probably) spurious hierarchy of classes and subclasses and inheritance. If you find yourself using inheritance, think carefully about whether the subclass you propose is truly extending its parent, or whether it’s simply adding new behaviours that other classes might need too. If the answer is the latter, you probably want roles not inheritance.

Next up…command line

Apr 10

The kraken wakes

My butterworts have been waiting with unbaited breath for the long, slow arrival of the spring. In winter, they cut their losses and produce small non-carnivorous leaves as there’s not enough prey around to justify investment in glue. In spring, they awaken and start making larger, insecticidal leaves again. Tina has already captured a fungus gnat with one of her freshly unfurled leaves.

Pinguicula cv. Tina (awakening) [CC-BY-SA-3.0 Steve Cook]

Pinguicula cv. Tina awakens from her winter slumber

I suspect tediously documenting the behaviour of windowsill flora is some barren homosexual equivalent of Facebooking pictures of your offspring. I shall stop when you do.

Apr 09

Enzymes don’t necessarily increase the rate at which products are formed

An enzyme increases the rate of product formation

What happens if you add the enzyme malate dehydrogenase to a mixture of of its substrates NAD and malate (both at 1 mM for the sake of argument)?

A brief look on BRENDA indicates that the reaction malate dehydrogenase catalyses is:

malate + NAD → oxaloacetate + NADH

So you might very well expect that the NAD would oxidise the malate, and the products oxaloacetate and NADH would rapidly accumulate.

Your expectation might well be incorrect if there is even a small trace of oxaloacetate or NADH already in the system. According to Voet & Voet (2004), the standard free energy change for malate oxidation is 29.7 kJ mol−1, which means the equilibrium constant (Keq) for this reaction at standard temperature and pressure is:

Keq = e−(∆G⁰/RT) = e−(29700/(8.314×298)) = 6.22×10−6

As you can see, this number is tiny. Keq is the ratio of the concentrations of products to reactants at equilibrium. It is therefore a measure of the ratio of oxaloacetate (and NADH) to malate (and NAD) at the ‘end’ of the experiment.

Keq = [oxaloacetate]eq[NADH]eq/[malate]eq[NAD]eq = 6.22×10−6

At equilibrium, the concentration of oxaloacetate is likely to be much, much smaller than the concentration of malate. If both malate and NAD start off at 1 mM, the equilibrium concentration* of oxaloacetate will increase from zero to the heady heights of 2.5 µM, and the concentration of malate will decrease so little you’d be hard-pressed to detect the change!

Addition of the malate dehydrogenase enzyme would cause product accumulation in this case, but the amount of product formed would be microscopic.

It gets worse. Pose this question:

If you added malate dehydrogenase to a mixture of malate, oxaloacetate, NAD and NADH (all at 1 mM) what would happen?

In this case, the concentration of malate would actually increase, to nearly 2 mM, and the concentration of oxaloacetate would drop to almost nothing. The alleged ‘products’ of the reaction would react with one another and convert back to ‘reactants’.

The reason for this is that enzymes speed up the rate at which equilibrium is attained. They do not necessarily speed up the accumulation of ‘products’. What happens depends critically on the relative concentrations of all the reactants and products in the reaction, and their relationship to the equilibrium constant for the reaction. The leftward reaction’s products are the rightward reaction’s reactants, and vice versa.

We actually exploit this ‘unexpected’ behaviour in a first-year practical I run, where malate dehydrogenase activity is assayed by how rapidly it degrades NADH in the presence of oxaloacetate.

Calculations

At the start of the reaction where only malate and NAD are present, the concentrations are:

malate NAD oxaloacetate NADH
10−3 M 10−3 M 0 M 0 M

At equilibrium, the concentrations of malate and NADH will be lower by some value x, whilst the concentrations of oxaloacetate and NADH will be higher by the same value, because of the 1:1:1:1 stoichiometry of the reaction:

malate NAD oxaloacetate NADH
(10−3x) M (10−3x) M x M x M

Working out x, the final concentration of the oxaloacetate (and indeed the NADH) is fairly straightforward:

Keq = [oxaloacetate][NADH]/[malate][NAD] = 6.22×10−6
Keq = (x·x) / (10−3 − x)(10−3 − x)
Keq = x2 / (10−3 − x)2
Keq = x / (10−3 − x)
x = ( 10−3 · √Keq ) / (1 + √Keq )
x = ( 10−3 · √(6.22×10−6) ) / (1 + √(6.22×10−6) )
x = 2.49×10−6 M

This gives final concentrations of:

malate NAD oxaloacetate NADH
0.998 mM 0.998 mM 2.49 µM 2.49 µM

If instead we start with all four compounds at the same concentration (call it c, where c = 1 mM in the text above), and allow things to progress to equilibrium, we get final concentrations of:

malate NAD oxaloacetate NADH
(cx) (cx) (c + x) (c + x)

and working through the rearrangements, we get

x = c · ( √Keq − 1 ) / (1 + √Keq )
x = −0.995 mM

That x is negative indicates a decrease in the quantity of ‘product’, and an increase in the quantity of ‘reactant’.

malate NAD oxaloacetate NADH
1.995 mM 1.995 mM 5 µM 5 µM

References

  • Voet, D. & Voet, J. G. (2004) Citric acid cycle. In: Biochemistry. 3rd edition. New York, John Wiley and Sons, Inc., pp. 765-796.

Apr 09

The product of succinate dehydrogenase is ubiquinol not reduced flavin

Succinate dehydrogenase (SDH) produces reduced flavin (FADH2) as a product

This misconception is so widespread, even the exam boards get it wrong. Page 41 of the Edexcel GCE specification for A-level biology (2008 onwards) states that students should be able to…

Describe the role of the Krebs cycle in the complete oxidation of glucose and formation of carbon dioxide (CO2), ATP, reduced NAD and reduced FAD (names of other compounds are not required) and that respiration is a many-stepped process with each step controlled and catalysed by a specific intracellular enzyme. [my emphasis]

Succinate dehydrogenase (SDH) is an enzyme of the Krebs (citric acid, tricarboxylic acid, etc.) cycle found in mitochondria. It is the only enzyme of the Krebs cycle that is membrane-bound. Its job is to oxidise the organic acid succinate by removing two of its electrons, and then to pass those electrons on to a fatty molecule called ubiquinone, reducing this molecule to ubiquinol.

Succinate dehydrogenase [CC-BY-SA-3.0 Steve Cook, based on PDB 1NEK: Yankovskaya, V., Horsefield, R., Tornroth, S., Luna-Chavez, C., Miyoshi, H., Leger, C., Byrne, B., Cecchini, G., Iwata, S. (2003) Architecture of succinate dehydrogenase and reactive oxygen species generation. Science 299:700-704 doi: 10.1126/science.1079605]

Succinate dehydrogenase [CC-BY-SA-3.0 Steve Cook, based on PDB 1NEK] The ‘top’ of the enzyme pokes into the mitochondrial matrix and oxidises succinate; the ‘bottom’ of the enzyme is dissolved in the lipid of inner mitochondrial membrane, and reduces ubiquinone.

To see why “SDH produces reduced FAD” is a misconception, you need only compare it with some of the other enzymes of Krebs cycle. Pose this question:

If SDH produces reduced FAD, what does α-ketoglutarate dehydrogenase produce?

α-ketoglutarate dehydrogenase is a big, multi-subunit enzyme which catalyses a complicated reaction, the details of which…

  • α-ketoglutarate + thiamine pyrophosphate → COOHCH2CH2C(OH)=TPP + CO2
  • COOHCH2CH2C(OH)=TPP + lipoyl → succinyl-dihydrolipoyl + TPP
  • succinyl-dihydrolipoyl + coenzyme-A → succinyl-coenzyme-A + dihydrolipoyl
  • dihydrolipoly + FAD → FADH2 + lipoyl
  •  FADH2 + NAD → FAD + NADH

…are certainly not part of the A-level biology specification. All the intermediates, including the FAD, cancel out, leaving only the bolded items behind. Even the net reaction of α-ketoglutarate dehydrogenase…

  • α-ketoglutarate + coenzyme-A + NAD → succinyl-coenzyme-A + CO2 + NADH

…is not mentioned in the A-level specification. The gnarly details of α-ketoglutarate dehydrogenase’s catalytic cycle, and even the overall reaction it catalyses are (rightly!) hidden behind the catch-all veil of the “formation of reduced NAD”:

Describe the role of the Krebs cycle in the complete oxidation of glucose and formation of carbon dioxide (CO2), ATP, reduced NAD and reduced FAD (names of other compounds are not required)

However, for some reason, succinate dehydrogenase gets special-cased. SDH catalyses the reactions:

  • succinate + FAD → FADH2fumarate
  • FADH2 + [2Fe-2S]ox → FAD + [2Fe-2S]red
  • [2Fe-2S]red + [4Fe-4S]ox → [2Fe-2S]ox + [4Fe-4S]red
  • [4Fe-4S]red + [3Fe-4S]ox → [4Fe-4S]ox + [3Fe-4S]red
  • [3Fe-4S]red + haem-b560ox → [3Fe-4S]ox + haem-b560red
  • haem-b560red + ubiquinone → haem-b560ox + ubiquinol

I’ve not balanced the protons for the sake of ‘clarity’. The [Fe-S] things represent iron-sulfur clusters, essentially tiny crystals of fool’s gold inside the enzyme.

Like the FAD in α-ketoglutarate dehydrogenase’s catalytic cycle, the FAD in succinate dehydrogenase is just an intermediate, one that (unusually for a flavin) is even covalently bound to the enzyme!

The FAD is part of the wiring inside the enzyme. The wiring’s job is to move electrons from succinate to ubiquinone. The FAD is no more a product of succinate dehydrogenase than TPP, [Fe-S], lipoyl, FMN, haem, or any of the other dozens of cofactors the A-level specification avoids mentioning.

This misconception seems fairly trivial, but I’m not the only one it annoys, and it exacerbates two other problems:

  • It’s important to grasp that some coenzymes (like NADH, ATP and ubiquinol) can diffuse from one enzyme to another, and therefore act as exchangeable ’currency’ within the cell. Flavins (like FAD and FMN) on the other hand have a tightly-bound, monogamous relationship with their enzyme. They cannot act as currency. By saying reduced FAD is the product of succinate dehydrogenase it gives the misleading impression that FAD is able to diffuse away from the enzyme and do something. It cannot: its mobility is fundamentally different from that of NADH, ATP and ubiquinol.
  • It is important to be consistent in distinguishing the final products of an enzyme and its intermediate products. By saying reduced FAD is the product of succinate dehydrogenase, the real product of the enzyme, ubiquinol, is obscured, and one arbitrary intermediate of many is promoted into its place. It is very likely that many A-level students will not care to find out what happens to the ‘reduced FAD’ next. Those that do may question why reduced FAD is considered the product of succinate dehydrogenase but not of α-ketoglutarate dehydrogenase, to which there is no good answer beyond “that’s what the exam-board says you must rote-learn”. Rote-learning is bad; rote-learning inconsistent and arbitrary errors is worse.

Older posts «