NAME

contextReaction.pl - Implements a MathObject class for checmical reactions.

DESCRIPTION

This file implements a Context in which checmical reactions can be specified and compared. Reactions can be composed of sums of integer multiples of elements (possibly with subscripts), separated by a right arrow (indicated by ``-->''). Helpful error messages are given when a reaction is not of the correct form. Sums of compounds can be given in any order, but the elements within a compound must be in the order given by the correct answer; e.g., if the correct answer specifies CO_2, then O_2C would be marked incorrect.

To use the context include

        loadMacros("contextReaction.pl");
        Context("Reaction");

at the top of your PG file, then create Formula() objects for your reactions. For example:

        $R = Formula("4P + 5O_2 --> 2P_2O_5");

Reactions know how to create their own TeX versions (via $R->TeX), and know how to check student answers (via $R->cmp), just like any other MathObject.

The Reaction Context also allows you to create parts of reactions. E.g., you could create

        $products = Formula("4CO_2 + 6H_2O");

which you could use in a problem as follows:

        loadMacros("contextReaction.pl");
        Context("Reaction");
        
        $reactants = Formula("2C_2H_6 + 7O_2");
        $products  = Formula("4CO_2 + 6H_2O");
        
        Context()->texStrings;
        BEGIN_TEXT
        \($reactants \longrightarrow\) \{ans_rule(30)\}.
        END_TEXT
        Context()->normalStrings;
        
        ANS($products->cmp);

Note that sums and products are not simplified in any way, so that Formula(``O + O'') and Formula(``2O'') and Formula(``O_2'') are all different and unequal in this context.

All the elements of the periodic table are available within the Reaction Context. If you need additional terms, like ``Heat'' for example, you can add them as variables:

        Context()->variables->add(Heat => $context::Reaction::CONSTANT);

Then you can make formulas that include Heat as a term. These ``constants'' are not allowed to have coefficients or subscripts, and can not be combined with compounds except by addition. If you want a term that can be combined in those ways, use $context::Reaction::ELEMENT instead.