Index: /trunk/ippdor/src/ipp/ChipManager.py
===================================================================
--- /trunk/ippdor/src/ipp/ChipManager.py	(revision 32875)
+++ /trunk/ippdor/src/ipp/ChipManager.py	(revision 32876)
@@ -226,5 +226,5 @@
             self.send_email('Chip stage failed for label %s / exposure %s)' % (self.label, 
                                                                                self.exposure_name), 
-                            body)
+                            body % (GlobalConstants.LOCAL_TMP_DIR))
             print 'EMail sent to [%s]' % self.recipient
             raise IppException('Chip stage failed for label %s / exposure %s)' % (self.label, self.exposure_name))
Index: /trunk/ippdor/src/ipp/constants/Chip.py
===================================================================
--- /trunk/ippdor/src/ipp/constants/Chip.py	(revision 32875)
+++ /trunk/ippdor/src/ipp/constants/Chip.py	(revision 32876)
@@ -10,5 +10,5 @@
 class Chip:
     """
-    This class is not intended to be used as a class instance.
+    This class is not intended to be instantiated.
     All its members are static.
     """
@@ -18,4 +18,18 @@
     REQUIREMENTS = 'LoadAvg < 0.3'
     email_subject = ''
+
+    # This is the e-mail body which is sent when revert as
+    # failed. Some values need to be replaced, namely:
+    # - @COUNT_FAILED_CHIPS@: the number of chips which have failed;
+    # - @LABEL@: the label;
+    # - @EXPOSURE_NAME@: the exposure name;
+    # - @LIST_PROCESSING_LOGS@: the list of log files that should be
+    #   checked by the operator;
+    # - @CHIPTOOL_UPDATEPROCESSEDIMFILE@: the list of commands that
+    #   could be run to ignore some flaky OTAs
+    # - @CHIPTOOL_REVERTPROCESSEDIMFILE@: the command that shoudl be
+    #   run to revert the exposure.
+    # It is also expected to valuate this expression with one argument:
+    # - #1: The path to Globals.LOCAL_TMP_DIR
     email_body_failed_revert = """Hi,
 
@@ -38,5 +52,5 @@
 
 Once you have FIXED ALL PROBLEMS FOR ALL EXPOSURES, on the host where the Condor task was submitted, submit the DAG (the host name is shown in the following line) again:
-condor_submit_dag -maxidle 1000 -maxjobs 500 %s/%s/ch2st.dag
+condor_submit_dag -maxidle 1000 -maxjobs 500 %s/@LABEL@/ch2st.dag
 
 Thanks,
Index: /trunk/ippdor/src/ipp/constants/Globals.py
===================================================================
--- /trunk/ippdor/src/ipp/constants/Globals.py	(revision 32875)
+++ /trunk/ippdor/src/ipp/constants/Globals.py	(revision 32876)
@@ -1,11 +1,16 @@
 """
 This is the file in which all constants relative to the Condor-IPP
-framework are defined. It defines the following data members
+framework are defined. It defines the following constants
 (depending on the hostname value):
 
-- LOCAL_TMP_DIR
-- NFS_TMP_DIR
-- IPP_BIN_PATH
--
+- IPPDOR_BINARY_PATH: the path to ippdor executables (they do not
+  strictly have to be binaries)
+- LOCAL_TMP_DIR: The local file system where some files can be
+  stored. On the IPP production cluster, it is dependent on the host
+  name.
+- NFS_TMP_DIR: The NFS file system where some files are located.
+- IPP_BIN_PATH: The path to the IPP executables. It is recommended to
+  leave it to a fixed value (like current.lin64) and to relink 
+  current.lin64 to any new install.
 """
 
@@ -15,8 +20,9 @@
 class Globals:
     """
-    This class is not intended to be used as a class instance.
-    All its members are static.
+    This class is not intended to be instantiated.
+    All its members are static (and constant).
     """
     def __init__(self):
+        """We don't want this class to be instantiated"""
         raise UninstantiableIppException()
 
@@ -38,14 +44,20 @@
     GENERATE_EXPOSURE_DAG = '%s/generate_exposure_dag.py %s %s %s' % (IPPDOR_BINARY_PATH, '%s', '%s', '%s')
 
+    ###################
     # IPP executables
+    ###################
+    # Chip stage
     CHIPTOOL = '%s/chiptool -dbname gpc1' % IPP_BIN_PATH
     CHIPIMFILE = '%s/chip_imfile.pl --dbname gpc1 --redirect-output --verbose --threads 1' % IPP_BIN_PATH
 
+    # Cam stage
     CAMTOOL = '%s/camtool' % IPP_BIN_PATH
     CAMEXP = '%s/camera_exp.pl --dbname gpc1 --redirect-output --verbose' % IPP_BIN_PATH
 
+    # Fake stage
     FAKETOOL = '%s/faketool -dbname gpc1' % IPP_BIN_PATH
     FAKE_IMFILE = '%s/fake_imfile.pl -dbname gpc1 --redirect-output --verbose'
 
+    # Warp stage
     WARPTOOL = '%s/warptool -dbname gpc1' % IPP_BIN_PATH
     WARP_OVERLAP = '%s/warp_overlap.pl --dbname gpc1' % IPP_BIN_PATH
@@ -53,3 +65,4 @@
     WARP_JPEG = '%s/skycell_jpeg.pl -dbname gpc1 -stage warp' % IPP_BIN_PATH
 
+    # Stack stage
     STACKTOOL = '%s/stacktool' % IPP_BIN_PATH
Index: /trunk/ippdor/src/ipp/constants/__init__.py
===================================================================
--- /trunk/ippdor/src/ipp/constants/__init__.py	(revision 32875)
+++ /trunk/ippdor/src/ipp/constants/__init__.py	(revision 32876)
@@ -1,5 +1,22 @@
 """
-This module is the place where all constants are defined
+This package is the package where constants are defined.
 
-TODO: anything else?
+- The Globals module defines constants which can be used anywhere. It
+  is also the module where path to executables are defined;
+
+- The Chip module defines constants relative to the Chip stage (but
+  the executables)
+
+- The Cam module defines constants relative to the Camera stage (but
+  the executables)
+
+- The Fake module defines constants relative to the Fake stage (but
+  the executables)
+
+- The Warp module defines constants relative to the Warp stage (but
+  the executables)
+
+- The Stack module defines constants relative to the Stack stage (but
+  the executables)
+
 """
