Coding Conventions

From GlueXWiki
Revision as of 15:58, 3 November 2009 by Davidl (Talk | contribs)

Jump to: navigation, search

Hall-D Coding and Use Conventions

We are currently looking at adopting a set of standards based on the CLEO coding conventions. You can find the latest draft here:

http://www.jlab.org/Hall-D/software/GlueXCodingStandard.html


Below are the old, deprecated conventions which have not yet been incorporated into the new conventions


C++

  • Classes specific to Hall-D/GlueX reconstruction will have names starting with the letter "D".
  • Classes specific to a subsystem should include the subsystem name in the first part of the class name. For example, all classes in the CDC package should have names starting with "DCDC"
  • The suffix for C++ source files should be .cc
  • The suffix for C source files should be .c
  • The suffix for both C++ and C header files should be .h
  • The suffix .C will be used for ROOT macros and will therefore be ignored by the make system.
  • The suffix for FOTRAN files should be .F
  • The suffix .f will be used for PAW macros and will therefore be ignored by the make system.
  • C++ source files will be named using the classname they provide.
  • Multiple classes should be defined in a single header only under special circumstances.
  • Classes should have a brief description of their purpose in a doxygen recognizable format(i.e. with three forwardslashes ///) inside the class definition in the header files.
  • #include preprocessor directives should use double quotes for headers specific to Hall-D/GlueX code and angle brackets for all others. e.g.
 * #include <JANA/JEventLoop.h>
 * #include "DCDCHit.h"
  • Factory classes derived from JFactory will have names that start with the data class (subclass of DObject) which they provide with "_factory" appended. For example:

DCDCHit_factory

  • Tagged factory classes (factories with a tag other than an empty string) will have an underscore and the tag appended to the class name. For example, a factory with the tag "ALT1" :

DCDCHit_factory_ALT1

  • Configuration Parameters in JANA should start with a common prefix and a colon to indicate the package where they are being implemented. For example, all configuration parameters implemented in the TRACKING package start with the prefix "TRK:" like this:

TRK:MAX_HIT_R_FDC

  • Standard output should be directed to the "Dcout" stream rather than to the "cout" stream.

Header Files (files included by the pre-processor)

  1. Content of all header files should be enclosed in a pre-processor #ifndef statement to prevent multiple inclusion. For example, a header file called "DMCTrackHit.h" should look like:
    #ifndef _DMCTRACKHIT_H_        /* check for definition (and thus inclusion) */
    #define _DMCTRACKHIT_H_        /* define it if not previously defined */
    
    #include <JANA/JObject.h>      /* start of actual header file content */
    using namespace jana;
    
    #include "GlueX.h"
    
    class DMCTrackHit:public JObject{
     public:
      JOBJECT_PUBLIC(DMCTrackHit);
    .
    .
    .
    #endif // _DMCTRACKHIT_H_      /* close definition-check if-block */
    

Standard Units

Unless explicity indicated otherwise, software will use the following standard units:

QuantityUnit
lengthcentimeters
timenanoseconds
energyGeV
momentumGeV/c
massGeV/c2
magnetic fieldTesla
electric potentialVolts
anglesradians
currencyDollars (U. S.)
happinessFrancs (Swiss)
true happiness:-)'s