26 Feb 07:

- Added SEPart function to allow for modifications of parts of
  renormalization constants.


13 Feb 07:

- Added MassRC, FieldRC, TadpoleRC, WidthRC functions to simplify
  the definition of renormalization constants (and introduce
  fewer errors).


6 Feb 07:

- Added MoveDepsLeft and MoveDepsRight functions to disentangle
  dependences between categories of abbreviations.


3 Feb 07:

- Separated abbreviations into such for tree and loop part.
  Changed the third "reset" argument of SquaredME to a more
  general flag register.  Bit 0 is the old "reset" value,
  bit 1 determines whether the loop correction should be added,
  i.e. bit 1 = 0 computes the tree-level part only.


29 Jan 07:

- Added ToArray function which turns symbols into array references,
  e.g. Xyz1234 -> Xyz[1234].

- Added MaxDims function which determines the maximum dimensions of
  array references, e.g. MaxDims[Xyz[1, 2], Xyz[2, 1]] -> {Xyz[2, 2]}.

- Added Renumber function which renumbers the given array references.

- Added SubstSimpleAbbr function which removes `simple' abbreviations
  and subexpressions from the list and substitutes them directly
  into the expressions they appear in.


24 Jan 07:

- Added startmath template script with which programs that use the
  Mathematica interface can be distributed (parallelized).

- Added handling of IndexEps objects which represent antisymmetric
  combinations of indices (e.g. colour or generation).


15 Jan 07:

- Revamped ReadForm.tm for better C style.  Adapted the MathLink
  string functions to the latest MathLink version.

- Fixed configure to work properly with pgf77 6.2.

- Fixed some problems with the Mathematica interface.


18 Nov 06:

- Added Mac OS X details to configure and makefile.in for g77 and xlf.


30 Oct 06:

- Added the six-point tensor reduction.

- Fixed overflow problem in FORM due to the procedure DotSimplify
  in CalcFeynAmp.


24 Oct 06:

- Added Mathematica interface for generated code.
  Generalized some sections of CalcFeynAmp.frm, added
  the F function as far as tensor reduction goes.


11 Sep 06:

- Adapted FeynHiggs interface to latest version (2.4.x).

- Adapted LHAPDF invocations to latest version (5.x).


15 Jul 06:

- Revamped the entire linear algebra section.  Routines now
  available as separate library.  Added TakagiFactor.


10 Apr 06:

- The SquaredME subroutine no longer sets the "reset" flag to
  .FALSE. after initialization.  Rather, this is done in xsection.F.
  This makes it easier to combine several squaredme modules.


7 Apr 06:

- Moved the Li2 function to LoopTools, substituted the Kronecker
  Delta function by a preprocessor macro.

- Updated configure to look for FeynHiggs and LHAPDF and also
  check more places.


27 Feb 06:

- Added the MultiplyDiagrams function of which the TagDiagrams
  function introduced earlier is just a special case.


20 Jan 06:

- Added the $ReadFormDebug variable.  When set to a non-zero value,
  ReadForm echos each line of the FORM output.


15 Dec 05:

- Added the Pool function which collects terms with common
  prefactors.


1 Dec 05:

- Added the OnSize function, which constructs a Switch
  statement for simplifying an expression according to its
  LeafCount.


23 Nov 05:

- Added the Abbreviate function, which introduces abbreviations
  for certain subexpressions (currently only sums).  Subexpr[]
  returns the definitions of the subexpressions and ClearSubexpr[]
  removes them.


25 Oct 05:

- The last change is now automatic with ./configure --quad.


20 Oct 05:

- Replaced all dble -> DBLE, dimag -> DIMAG, dconjg -> DCONJG.
  This way, the entire code can easily be treated to quadruple
  precision using the change in the makefile:
  FC = ifort -r16 -DDBLE=QEXT -DDIMAG=QIMAG -DDCONJG=QCONJG


21 Sep 05:

- Fixed bug re summation of Deltas in CalcFeynAmp.frm.

- Fixed problem with #call Shortest if args included parentheses,
  e.g. #call Shortest(..., MSf2(...)).


2 Aug 05:

- Corrected bug in PolarizationSum for massive vector bosons.
  Terms not containing the polarization vector were multiplied
  with 2; the correct number of polarizations is of course 3.


29 Jul 05:

- Added a generational dependence to the preprocessor macros
  for the sfermion mass-parameters, e.g. MLE -> MLE(g).


24 Jun 05:

- Improved internal InvSimplify FORM procedure which had some
  problems with large expressions.


8 Jun 05:

- Renamed internal symbols i$, d$, e$, p$, dummy$ to
  iJ, dJ, ... because Mathematica uses the $ also in Modules
  and then gives warnings of the kind "Form`i$ may be shadowed
  by Global`i$".


13 Apr 05:

- Consistently renamed all remaining occurrences of Mandel* to
  Inv*, e.g. MandelSimplify -> InvSimplify.


7 Mar 05:

- Fixed problem with insertions in Particle-level amplitudes.

- Updated some Cuba bug fixes.


9 Feb 05:

- Switched to unitary representation for the CKM matrix in sm_ini.F.


8 Feb 05:

- Added UASf + MASf stuff for FVMSSM.

- Added TagDiagrams function.

- Updated to Cuba 1.2.


7 Feb 05:

- Added cuba.F to the drivers.  Takes care of numerical integration
  using the parameters defined in run.F with a simple interface.

- Removed ModelDigest from *_ini.F files.  ModelVarIni now dumps
  the parameters once after each ModelConstIni invocation.
  Signalling done via the *_digest logical variables in model.h.


2 Feb 05:

- Added CompAZ to the util library.


25 Jan 05:

- Extended mssm_ini.F for linking with FeynHiggs 2.2.

- Updated to Cuba 1.1.

- Improved ReadData for reading huge data files.

- Log-file name now a 7-digit number.


12 Aug 04:

- Significant changes in the FORM part: Rational exponents now
  treated properly in FORM.  Scaling (AbbrScale) works properly.

- Improvements in PolarizationSum.

- Added InsertBefore option with which the loop integrals can
  be completely symmetrized.


18 Jun 04:

- Rewrote RemoveRedundancy, it now sorts tmp variables in such that
  they come after everything they depend on has been calculated
  (essentially like OnePassOrder applied to the result).


6 May 04:

- Added sqrtSstep to the output file name.

- Added submit script to automatically distribute run.F jobs over a
  cluster.


15 Apr 04:

- Added reorder utility which works much like restack in older versions.


14 Apr 04:

- openlog skips already existing logfiles.  This is useful if the
  executable dies or is killed.  One may need to remove the last,
  partial, log file, but can otherwise restart the program with
  the same parameters to resume the calculation.


9 Apr 04:

- Fixed some technical Fortran issues wrt g77 in squared_me.F.

- Added sqrtSstep in main.F.


8 Apr 04: lots of new stuff!

- Integrated the Cuba library [hep-ph/0404043] into util.a.

- Rearranged main.F so that the actual main program scans only the
  command line and then invokes the subroutine ParameterScan, which
  performs the actual calculation.

- Introduced serial numbers on the command line.  With this concept
  one can with very little effort parallelize a parameter scan on a
  large cluster.

- Every pass of the parameter-scan loop (LOOP1..15) yields an individual
  output file in all output is stored, messages and "true" data alike,
  where the latter are merely tagged by a @ in the first position.
  These output files are written to a directory named much like the
  output files in older versions, e.g. run.UUUU.00500/.  The script
  "data" extracts the actual data from the output files in this directory.

- Likewise, the main program yields as an exit value for the shell the
  number of passes of the parameter loop which were actually computed.

- The PARALLEL stuff has been removed.  Forking is much too valuable
  to waste on the simple parallelization that can be performed more
  efficiently using the serial numbers.  Forking is reserved for the
  parallelization of the integration algorithms.

- Returned to the SymbolPrefix option (rather than the $SymbolPrefix
  global variable).  Now implemented as PREFIX preprocessor def with
  the SymbolPrefix value as default.

- Helicities are now encoded as bit string.  Got rid of that stupid
  TrueHel this way.  Thus
    7 = 111b = use pols +1,0,-1 (unpolarized),
    2 = 010b = use only 0 (longitudinal),
    5 = 101b = use +1,-1 (transverse).
  Bits for particle 1 are at the lower end of the word.

- IDENTICALFACTOR is now multiplied also with the differential
  cross-section.  The factor comes from Bose statistics and not
  from phase-space overcounting and will hence be observed in
  differential cross-sections too.

- Archive now unpacks into subdirectory, no longer "flat."


27 Oct 03:

- Put the $SymbolPrefix in a lot of places where it was missing.


20 Oct 03:

- Enlarged TERMBUF limit in ReadForm.tm.


7 Oct 03:

- Rearranged some internal context stuff.

- Fixed some minor problems with PolarizationSum.


26 Jun 03:

- Moved "call setdelta" in main.F etc. into loop over parameters as
  DELTA, MUDIM, and LAMBDA may depend on model parameters.


3 Jun 03:

- Changed default to FermionChains -> Weyl in CalcFeynAmp.
  Rearranged all examples accordingly.


2 Jun 03:

- Got the Weyl-van der Waerden spinors going!
  Significant gains in both numerical stability and speed.

- When using standard Dirac fermions and the trace technique (i.e.
  HelicityME), the DIRACFERMIONS flag in process.h should be defined to
  compute unpolarized cross-sections efficiently, i.e. without actually
  summing up the different helicities.


27 May 03:

- Added PolarizationSum for performing the sum over the polarizations
  of the squared amplitude analytically.  The gauge-dependent terms
  (for massless external gauge bosons) are expressed in terms of a
  vector eta, but can also be turned off with GaugeTerms -> False
  (careful!).

- Moved all programs internal to FormCalc to the FormCalc subdirectory,
  much like in FeynArts.


30 Apr 03:

- Rearranged entirely the representation of vectors in the driver
  programs, now all functions in util/kin use the Weyl-van der Waerden
  representation, improves stability and is a first step towards the
  full Weyl spinor formalism.

- Removed VADecompose option of CalcFeynAmp.  It now has the new option
  FermionChains -> Chiral|VA|Weyl, which subsumes the functionality of
  VADecompose.  With FermionChains -> Weyl, Weyl spinor chains are
  returned by CalcFeynAmp.  Currently these are not useful for Fortran
  code generation.

- The renormalization constants are now split into several files if
  they become too large.


31 Mar 03:

- Fixed problem with phase in SingularValues, formerly
  U A V^+ = diag(d), now U^* A V^+ = diag(d).

- Rewrote Eigensystem and Eigen2x2 from scratch using Jacobi algorithm,
  much better precision now.


7 Mar 03:

- Added possibility to calculate amplitudes at Generic level.
  The generic objects not suitable for FORM, like the generic couplings
  (G[_][_][__][__]) are substituted by symbols, e.g. Coupling1.
  These symbols remain after CalcFeynAmp.  GenericList[] returns
  a list of substitutions, thus "result /. GenericList[]" recovers
  the original objects.


6 Mar 03: major rearrangement of the structure of the generated code
(version number therefore now 4.0 beta):

- New syntax for WriteSquaredME and WriteRenConst:
	dir = SetupCodeDir["myfortran", Drivers -> "mydrivers"];
	WriteSquaredME[..., dir];
	WriteRenConst[..., dir]
  i.e. setting up the code directory is now a separate step.	

- Generated modules are now put in own subdirectories (squared_me/ and
  renconst/ by default, may be changed with the Folder option of
  WriteSquaredME and WriteRenConst).  Only a minimalistic makefile is
  generated in each subdirectory.  FormCalc is now completely unaware
  of the drivers (they used to be mentioned as dependencies in the
  makefile).  Code generated by WriteSquaredME and WriteRenConst is
  completely independent of each other (option RenConstFile gone).
  The connection which renconst to use with which squared_me is now
  made by the central makefile.in in the drivers.

- The makefile.in in the drivers directory determines which
  subdirectories are taken into account.  This makes it easy to have,
  e.g., several subdirectories with squared matrix elements, such as
  for up- and down-type-quark processes when considering proton
  scattering.  Moreover, the makefile.in can be modified and copied
  to the custom driver directory since it is no longer overwritten by
  WriteSquaredME.

- WriteSquaredME's SymbolPrefix option replaced by the global
  variable $SymbolPrefix which is used by WriteSquaredME, WriteRenConst,
  SubroutineDecl, and CommonDecl.

- Added sfx shell script that packs all files necessary to compile
  the code generated by FormCalc into a self-extracting archive for
  easy distribution to other people.

- Added turnoff shell script with which the calculation of certain
  modules in squared_me.F can be turned off (i.e. the calls to the
  modules are commented out in squared_me.F).

- Moved pnuglot script to the drivers directory, making it unnecessary
  to set path to ~/FormCalc/tools.

- Much less dependence on preprocessor variables.  Most utility
  functions now moved to a library util.a which needs to be compiled
  only once.

- Main program now in main.F, the 1to2, 2to2, and 2to3 drivers now
  contain only the output routines for differential and integrated
  cross-sections, DoDifferential and DoIntegrated.

- Added one-dimensional integration algorithm "Patterson" which,
  though non-adaptive, gives an error estimate together with the
  integral.  The basic integration rule has 21 points; if the error
  is deemed too large, a 43-point rule is used (re-using all 21
  previously computed points); if that is still insufficient, a
  81-point rule is taken (again re-using all previous values).

- The executables run etc. are now invoked as "./run uuuu ..."
  instead of "./run u u u u ..." as before.  The new version makes
  it easier to scan the command-line arguments.

- The generated subroutine SquaredME (and indeed all other driver
  programs, too) no longer pass the results in two scalar variables
  tree and loop, but now in an array with NCOMP components (NCOMP is
  defined in run.F), where result(1) = tree and result(2) = loop.
  This makes it easy to add further components, e.g. if the square
  of the one-loop matrix element shall be returned, too.

- The third column in the result files, which used to be the
  tree-level result plus the one-loop contribution, is now only the
  one-loop contribution.  This way there is no loss of precision
  if the tree-level result is much larger than the one-loop
  contribution.


17 Feb 03:

- Made DCUHRE the default integrator for 2 -> 3.

- dcuhre.f now included by 2to3.F, obviating the need to explicitly
  compile libdcuhre.a.


12 Feb 03:

- Added OffShell function to take individual particles off shell.

- Removed last remaining CERNlib dependence by adding own routine to
  compute alpha_s.

- Added "--with-cernlib" switch to configure to restore old behaviour
  (e.g. alpha_s should be computed by PDFlib when using the parton
  distribution functions from PDFlib).


28 Jan 03:

- Rearranged much of the Gauss-Kronrod integration in multigauss to
  fix a bug. 

- Fixed up minor problem with allocation of working space in DCUHRE, too.


22 Jan 03: FormCalc 3.2 released, lots of new stuff:

- Completely general and systematic introduction of invariants
  for any number of external legs.

- Added an absolute precision goal to Vegas and Multigauss.

- Improvements in the ScanGraphics package.

- Improvements in ReadData (much faster now).

- 1 -> 2 drivers added.

- Added possibility for parallel execution of FormCalc-generated
  code (compile with -DPARALLEL, see hep-ph/0210220).

- Improvements in the code generation:
  1. Now uses preprocessor macros k(n), e(n), ec(n), and s(n) instead of
     integers to access vectors.
  2. New sumup function improves readability of squared_me.F considerably.
  3. Helicities passed to SquaredME as arrays, not single integers.
  4. sqrtS no longer passed to SquaredME.
  5. Because of the changes in the calling conventions (#3 & #4), the
     subroutine's name has been changed from squared_me to SquaredME
     to alert the user to the new conventions.

- Internal reordering mostly in the FORM part:
  1. Better partial factorization of expressions
  2. Simplification of invariants now done in FORM

- Needs Mathematica 4 or higher now.

- Compiled executables now reside in a single directory, which is named
  by Mathematica's $SystemID, rather than by the shell's $HOSTTYPE,
  e.g. Linux/{ReadForm,ToForm,ToFortran,ReadData}.
  ($HOSTTYPE had led to some complications because tcsh and bash had
  different values for it on some OSs.)

- mssm_ini now uses At, Ab, and Atau (rather than Au and Ad).
  Names have deliberately been chosen different than before because
  Atau must be given in addition to At and Ab, hence this is not
  just a renaming, but there must be at least a statement "Atau = Ab"
  or similar.

- mssm_ini has its own set of SVD and diagonalization routines and is
  hence no longer dependent on LAPACK (libmathlib.a of CERNlib).
  The conventions are now that all mass arrays are sorted into ascending 
  order (MNeu and MCha were in decreasing order so far).  This matches
  the conventions commonly adapted in the literature.


13 Sep 01:

- Added adaptive Gauss-Kronrod integration for 2 -> 3 (multigauss.F),
  algorithm can be tuned using the NODES_var preprocessor defines in run.F
  and may be significantly faster for some applications, though also worse
  for nasty integrands.

- Added special cases of B1[0, ...] to tools/btensor.m.


30 Aug 01:

- Largely rewritten the internal FormCalc functions for optimization and
  pre-output ordering: OptimizeAbbr, Dependencies, and OnePassOrder, yields
  some 30% in speed.


27 Aug 01:

- Switched 2 -> 3 code from (fixed-point) multiple Gaussian integration to
  VEGAS, added the adaptive ACM-algorithm DCUHRE for checking.

