Page MenuHomeHEPForge

No OneTemporary

Size
66 KB
Referenced Files
None
Subscribers
None
This document is not UTF8. It was detected as ISO-8859-1 (Latin 1) and converted to UTF8 for display.
diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,1061 +1,1066 @@
+2004-12-20 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
+
+ * PDT/ParticleData.cc: Added initialization for members in default
+ constructor.
+
2004-12-02 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Utilities/Math.icc: Added 'using namespace std;' in exp1m and
log1m to avoid problems with compilers where atanh etc are (not)
in std.
2004-10-27 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* lib/fixCLHEP: Fixed the script to use g++ instead of ld to
create a shared library from the static CLHEP library. This should
probably be a configure option in the future.
2004-10-14 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Utilities/StringUtils.*: Added stripws() function to strip a
string from leading and trailing white space.
* Repository/EventGenerator.cc : Incommented string parameters in
Init as these should now work properly on any compiler.
* lib/ThePEG.el (ThePEG-parameter): Made specialization for
string.
* Interface/Parameter.*: Made (partial) specialization for string
parameters to avoid min/max functions and units.
2004-10-13 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Repository/BaseRepository.cc, Interface/InterfacedBase.*: Each
interfaced object may now be assignrd a unique comment. If an
interfaced object is being initialized with the setup command in
the repository the non-virtual InterfacedBase::setup() function is
called which in turn calls the virtual readSetup(). Everything in
the stream supplied as argument which is not parsed by the
readSetup functions will be treated as a comment.
* Repository/Repository.cc: Added possibility in read() function
to have continuation lines. If a command line end with a \
the next line will be added.
2004-09-30 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* lib/ThePEG.el: Added ThePEG-variable-cutnpaste function to
produce templates for including a variable definition and
corresponding set/get functions, constructor initialization adn
I/O.
2004-09-29 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* lib/ThePEG.el: Added ThePEG-refvector and ThePEG-parvector
functions.
* LesHouches/LesHouchesEventHandler.*: Added subclass to
EventHandler for the LesHouches readers. A reorganization of
(Partial)Collision/Event handlers is called for.
2004-09-25 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* configure.in, Config/config.h.in, Utilities/CFileLineReader.cc:
Added facilities to handle .bz2 files as well as .gz files.
* Utilities/CFileLineReader.*: Bug fixes.
2004-09-24 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Utilities/CFileLineReader.*: Added class to read from C FILE
streams.
* lib/ThePEG.el: Cleaned up comments.
2004-09-20 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* */Makefile: Modified to fix installation procedures.
2004-09-19 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* */Makefile: Modified to fix installation procedures.
2004-09-14 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Makefile: Modified snapshot target to work with new documentation.
2004-09-10 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* lib/ThePEG.el: Fixed dummy min/max values for unlimited
Parameter objects in ThePEG-parameter function.
2004-09-09 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* lib/ThePEG.el: Changed documentation in header file generation.
* *** GLOBAL ***: Added doxygen reference to interfaces in
documentation. Also changed some descriptions of interfaces to get
proper references between interfaces.
* Doc/Makefile: Added call to fixinterfaces.pl script to fix
references between interfaces in AllInterfaces.h
* Doc/fixinterfaces.pl: Added script to fix references between
interfaces in AllInterfaces.h
2004-09-08 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Doc/refman.conf: Updated to suit doxygen version 1.3.8.
* Helicity/*.fh: Added include of Pointer.h to help doxygen
documentation.
* Helicity/HelicityDefinitions.h: Added documentation of Helicity
namespace.
2004-09-05 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Utilities/Math.*: Added sign transfer function.
* Config/Units.h: Add inverse energy to the fourth power as unit.
* Handlers/GaussianPtGenerator.*, Handlers/PtGenerator.h:
Changed pair of energy for TransverseMomentum.
2004-09-04 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* src/Makefile, Makefile: Introduce init target to just initialize
the repository. The doc target depends on init.
2004-09-03 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Config/Makefile.common.in, Makefile: Modified the doc target to
use doxygen.
* Interface/Switch.*, Interface/Reference.*,
Interface/RefVector.*, Interface/Parameter.*,
Interface/ParVector.*, Interface/Command.*,
Interface/InterfaceBase.*: Added virtual functions to write out
doxygen formatted entries describing interfaces.
* Repository/BaseRepository.cc: Added command-line function to
write out doxygen documentation of all interfaces.
* *** GLOBAL ***: Modified all descriptions in declarations of
interfaces to conform to doxygen format.
2004-08-25 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* *** GLOBAL ***: Fixed various doxygen comment issues.
* Doc/refman.h: Added file with embryo of mainpage reference
manual documentation.
2004-08-24 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* *** GLOBAL ***: Fixed various doxygen comments.
* Doc/refman.conf: Added config file for doxygen generation of
reference manual.
2004-08-22 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* *** GLOBAL ***: Changed the last class names from /ThePEG/name
to ThePEG::name.
* StandardModel (directory): Modified to use new documentation
format.
2004-08-19 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Repository (directory): Modified to use new documentation
format.
2004-08-10 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* PDT (directory): Modified to use new documentation format.
2004-08-02 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* lib/ThePEG.el: Added functions for creating PDF classes.
2004-08-01 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* PDF (directory): Modified to use new documentation format.
2004-07-27 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* MatrixElement (directory): Modified to use new documentation
format.
2004-07-24 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Interface (directory): Modified to use new documentation format.
2004-07-21 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* EventRecord/Particle.icc: Reset pointer to particle
representation and particle data for the case a dangling pointer
to the destroyed object should be used accidentally.
* EventRecord/Step.*: Changed destructor to reset transient
pointers in Particlespointing to the destroyed object.
* EventRecord/Collision.*: Changed destructor to reset transient
pointers in Steps and SubProcesses pointing to the destroyed
object.
* EventRecord/Event.*: Changed destructor to reset transient
pointers in Collisions pointing to the destroyed object.
2004-07-20 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Handlers/PartialCollisionHandler.cc: In performStep, if the
StepHandler throws an exception, call popStep() to set the correct
current step rather than calling Collision::popStep() directly.
* Helicity (directory): Modified to use new documentation format.
2004-07-16 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Handlers (directory): Modified to use new documentation format.
2004-06-28 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Handlers/CascadeHandler.icc: Fixed bug in standard setup
functions. Before they called the HandlerBase versions, now they
correctly call the StepHandler ones.
* Doc/Makefile, Makefile: Also make clean in Doc directory.
* Handlers (directory): Modified to use new documentation format.
2004-06-25 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* EventRecord (directory): Modified to use new documentation
format.
2004-06-24 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* EventRecord (directory): Modified to use new documentation
format.
2004-06-23 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* ACDC, CLHEPWrap, Config, Persistency, Pointer, Utilities
(directory): Modified to use new documentation format.
2004-06-22 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Utilities (directory): Modified to use new
documentation format. Also removed unused Integrator class.
2004-06-21 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Config, Persistency, Pointer (directory): Modified to use new
documentation format.
* lib/ThePEG.el: Modified to use new documentation format.
2004-05-24 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* src/ThePEGParticles.in: Made also the photon and pi0
BeamParticleData since they can have parton densities.
* Handlers/GaussianPtGenerator.cc: Fixed units in I/O.
* src/ThePEGDefaults.in: Set GaussianPtGenerator and
SimpleZGenerator in the BaryonRemnants object.
* lib/Makefile: Added SHOWCOMMAND conditionals.
* Utilities/Rebinder.icc: Fixed bug in translate(iterator ...)
function.
* Handlers/SimpleZGenerator.*: Added simple default implementation
of the abstract ZGenerator class.
* Handlers/GaussianPtGenerator.*: Added simple default
implementation of the abstract PtGenerator class.
2004-05-15 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* PDT/BreitWignerMass.cc: Now uses the new asymmetric width cuts.
* PDT/ParticleData.o: Changed the internal representation of the
width cut to one upper and one lower cut. Added corresponding
access functions and Parameter interfaces. Also changed the
massMax and massMin functions accordingly. The old set and get
functions for the width cut now sets both the upper and lower cut
and returns the maximum of the two.
2004-05-14 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Handlers/EventHandler.cc: Added doinitrun implementation to
reset the statistics for the XCombs after initializing the phase
space sampler.
* Handlers/XComb.*: Added checkInit function to check if the XComb
has any possibility to produce events. Also add reset function to
reset statistics for the XComb.
* Handlers/CollisionHandler.cc: Do not add XComb's which cannot
possibly produce events (and issue a warning).
2004-05-13 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* ACDC/ACDCGen.icc: Fixed bug which caused a crash if it was
impossible to find a non-zero cross section for a channel.
* MatrixElement/ME2to2Base.cc: Added (possibly unnecessary) try
block for checking impossible kinematics.
2004-04-26 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* LesHouches/MadGraphReader.*: New class.
* LesHouches/LesHouchesFileReader.*: New class.
* Config/config.h.in, configure.in: Added macros for opening
compressed files with popen. (popen turns out not to be in the C++
standard, so we may have to look for another solution).
2004-04-23 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* configure.in: Changed default optimization flag to -O2
(otherwise things get slow with gcc 3.4.0).
* ThePEG: The following changes were made to allow compilation
with gcc 3.4.0.
* Utilities/TypeInfo.icc: in version and name method, use typeid
of type rather than variabe.
* Utilities/Interval.icc: Fixed obvious bugs in check and
checkAll.
* Utilities/FixedSizeAllocator.h: Fixed obvious bug in destroy
which for unknown reasons was not detected before.
* Utilities/ClassDescription.tcc: Workaround of bug in gcc 3.4.0
when taking typeid of template parameter.
* Utilities/ClassDescription.icc: Added scope resolutions to calls
to name().
* Repository/Repository.cc: Removed 'template' prefix in calls to
templated static member functions.
* Repository/RandomGenerator.icc, Repository/RandomGenerator.h:
changed return type for rnd(OutputIterator, size_type n) to void.
* Pointer/RCPtr.icc: Made implementations of swap explicit instead
of using std::swap (problems with gcc 3.4.0).
* Interface/Switch.tcc, Interface/Reference.tcc,
Interface/RefVector.tcc, Interface/Parameter.tcc,
Interface/ParVector.tcc: Added scope resolution to calls to
readOnly, limited, and dependencySafe functions.
* Interface/InterfacedBase.h: Made clear and reset functions
public.
* Interface/Switch.cc, Interface/Reference.cc,
Interface/RefVector.cc, Interface/Parameter.cc,
Interface/ParVector.cc, Interface/Command.cc: Moved include of
InterfacedBase.h
* Handlers/HandlerGroup.tcc: Added #include of Hint.h
* Handlers/ClusterCollapser.cc: Changes call to swap for PPtr.
* EventRecord/Particle.h: Made inner class ParticleRep public as a
quick fix to allow access.
* EventRecord/Step.tcc: Added missing Step:: in definition of the
addIfFinal function.
*PDT/DecayMode.cc , PDF/BaryonRemnants.h,
EventRecord/SubProcess.cc, EventRecord/Step.cc,
EventRecord/Particle.cc, EventRecord/Event.cc,
Config/Containers.cc: Removed unnecessary semi-colons.
2004-04-20 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* lib/ThePEG.el: ThePEG-class-files now also create a suitable .fh
file which is included in the .h file
* LesHouches (Directory): Started implementing the Les Houches
interface.
2004-04-17 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Handlers/KinematicalCuts.cc: Changed the cut methods to use the
check methods for induvidual cuts for consistency reasons.
* Handlers/KinematicalCuts.icc: Changed the methods mHat, sHat,
pTHat, yStar, maxY, minY, maxEta, minEta. The treatment of <
vs. <= is now better. See documentation for respective functions.
2004-03-31 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Persistency/PersistentOStream.cc: Minor changes to facilitate
debugging.
* Handlers/XComb.h, Handlers/CollisionHandler.cc,
PDF/PartonExtractor.cc, PDF/PartonBin.*: The incoming PartonBin is
now a transient pointer while the outgoing ones are reference
counted (before it was vice versa). This is to avoid that outgoing
PartonBins which are not used get deleted while the transient
pointers are still around. Also the PartonExtractor was changed to
reflect this change. In PartonExtractor::getPartons the bins
corresponding to the incoming particles are also saved last in the
returned vector to avoid them being deleted. This is then also
taken care of in CollisionHandler::initialize.In addition, the
XComb objects now also hold reference counted pointers to the bins
corresponding to the incoming particles.
2004-03-27 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Helicity/HelicityDefinitions.h: Removed the
HelicityDefinitions class.
2004-03-16 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Helicity/HelicityDefinitions.h: Changed integers for detrmining
dirac representation and spinor type to enums. Also made
corresponding changes in LorentzSpinor and LorenzSpinorBar
classes.
* Persistency/PersistentOStream.* Persistency/PersistentIStream.*:
Added members functions for i/o of Complex.
* Interface/ParVector.* (Module): Fixed bug where min, max and def
members were implemented as doubles. They are now properly
templated.
* Helicity (Module): Changed the implementation of Direc
representation in Lorentz spinors. Also fixed documentation.
2004-03-07 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Helicity (Module): Changed all 'cerr' error messges to
HelicityLogicalError and HelicityConsistencyError exceptions.
2004-03-04 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Helicity (Module): The helicity classes are now included in the
ThePEG structure. They have not been tested in this structure yet,
but it compiles and links into ThePEG without any problems.
2004-03-03 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Helicity (Module): Added Peters helicity classes and started to
integrate them into ThePEG.
* MatrixElement/MEBase.cc (Module): Added new virtual function
constructVertes for constructing the spin information for the
interaction. The default version does nothing.
* Handlers/XComb.cc (Module): Added call to
MEBase::constructVertex in the construct method.
* EventRecord/Particle.cc (Module): Fixed bug in the cloning of
the spin information in the ParticleRep copy-tor.
2004-03-01 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Config/Complex.h (Module): Added using std::complex int the
ThePEG namespace.
2004-02-24 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* EventRecord/Particle.*: Added function 'abandonChild' which will
undo the actions of 'addChild', i.e. Remove the child from the
list of children and also remove this from the childs list of
parents.
2003-11-19 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* lib/ThePEG.el: Made sure ClassTraits.h is included before class
traits templates are specialized.
* configure.in, Config/Makefile.common.in: Made configure steer
all compiler flags and included info for --help option. Also
changed the check for log1p and expm1 which caused problems under
cygwin. Need to also fix a atanh check but no solution to that for
cygwin yet.
2003-11-04 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* lib/Makefile, lib/fixCLHEP: If CLHEP is already in a dynamic
library, make symbolic links to the corresponding files instead of
copying. Also make symbolic links when installing.
2003-11-02 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Makefile: Fixed dependencies for setup target.
* configure.in: Fixed strange behavior when --prefix is not
explicitly used.
2003-10-31 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* lib/fixCLHEP: Since CLHEP-2.0 comes with shared libraries, we
now look for that before trying to find the static one.
* Handlers/ACDCSampler.h: Added using namespace ThePEG::Units in
the ACDCGenerator namespace to be compatible with CLHEP-2.0 and
earlier versions.
* Config/Units.h: Added using namespace CLHEP to be
compatible with CLHEP-2.0 and earlier versions.
* CLHEPWrap/CLHEP.h: Added an empty CLHEP namespace to be
compatible with CLHEP-2.0 and earlier versions.
* ../Makefile: Made distclean a special target since here the
ThePEG directory has to be cleaned last.
* configure.in: Set the default CLHEPPATH to $prefix rather than
hardcoded to /usr/local
2003-10-24 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* StandardModel/StandardModelBase.*: Changed CKM function to check
if theCKM2Matrix has been generated by the CKM object before
returning a matrix element.
2003-08-27 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* src/runThePEG.cc: If -x argument specifies a dynamic library, it
is assumed to contain a class inheriting from Main and which has a
static Init() function which runs the event generator instead of
simply calling the event generators go() function.
2003-08-26 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Repository/Main.*: Added base class for classes implementing a
main steering routine for running an EventGenerator, in case the
standard 'go()' function in the EventGenerator is not enough.
* Handlers/EventHandler.cc: Avoid floating exception in
atatistics() if no events were generated. Write nice message
instead.
* Handlers/ACDCSampler.cc: Avoid floating exception in finish() if
no events were generated. Write nice message instead.
* ACDC/ACDCGen.icc: Avoid floating exception in efficiency() if no
events were generated.
2003-08-13 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Handlers/DecayHandler.cc: Use the StepHandler::newStep()
function.
* Handlers/ClusterCollapser.h: Changed the signature of the
collapse() function to take a new step as argument instead of a
collision handler. Changed the handle method accordingly.
* EventRecord/Collision.*, Handlers/PartialCollisionHandler.*:
newStep() now have an optional argument to specify the step
handler.
* Handlers/StepHandler.cc: createNewStep now sets the handler to
this.
2003-08-12 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* PDT/V2PPDecayer.cc: Fixed but in reweight() where the parent and
grand parent momenta were not boosted to the parent cms.
* PDT/WeakToHadronsDecayer.cc, PDT/V2PPDecayer.cc,
PDT/OmegaPhi3PiDecayer.cc, PDT/FlatDecayer.*,
PDT/DalitzDecayer.cc, PDT/Decayer.*: Added utility function
getChildren(), finalBoost() and setScales() in Decayer to be used
in subclasses.
* Utilities/SimplePhaseSpace.tcc: Fixed bug in CMSn. I the case of
two particles the angles were not properly distributed.
* src/ThePEGParticles.in, src/ThePEGDefaults.in: Using
WeakToHadronsDecayer instead of dummies PYDECY42 and
PYDECY48. Also using DummyDecayer instead of PYDECY51 and PYDECY53
* PDT/WeakToHadronsDecayer.*: Added class for weak decays of taus,
charmed and bottom hadrons. Seems to work.
* PDT/QuarksToHadronsDecayer.cc: Fixed bug where the decay
products were not boosted to the parents frame. Also made minor
change tosimplify for the WeakToHadronsDecayer sub class.
* Makefile: Removed -$(MAKEFLAGS) in recursive calls.
2003-08-08 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Config/Makefile.common.in: Moved macro for THEPEGLIBS from src/Makefile to Config/Makefile.common
* src/ThePEGParticles.in, src/ThePEGDefaults.in: Using
QuarksToHadronsDecayer also instead of dummies PYDECY11 and
PYDECY12. Also using ColourPairDecayer instead of dummy PYDECY32.
2003-08-07 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* PDT/ColourPairDecayer.*: Added class inheriting from FlatDecayer
which can handle colour connected pairs of decay products which
are to undergo subsequent hadronization and optional
showereing. NOT TESTED.
* PDT/QuarksToHadronsDecayer.cc: Class now can handle matcher
specifications of light quark pairs.
* PDT/FlatDecayer.*: Added virtual getChildren() functions for
sub-classes which need to do special things with the children.
2003-08-04 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* src/ThePEGParticles.in, src/ThePEGDefaults.in: Using
QuarksToHadronsDecayer instead of dummy PYDECY13.
* PDT/QuarksToHadronsDecayer.cc: Fixed vaious bugs. Seems to work
now, but physics not tested.
* Handlers/SimpleFlavour.cc: Fixed bug in generateHadron() when
argument was anti-quark and and in setProbabilities() for diquark
production. Fixed anti-particle bug in vectorMeson() and
pseudoScalarMeson(). THe class seems to work now but physics not
tested.
* Handlers/FlavourGenerator.cc: Just changed error messages.
2003-08-01 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Handlers/FlavourGenerator.*: Added 'always' wrapper functions
which call the virtual generateHadron(), getHadron() and
getBaryon() functions which throws exceptions if no hadron could
be generated.
2003-07-30 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* PDT/QuarksToHadronsDecayer.*: Added class for decay of particles
to quarks which are then converted to hadrons distributed
according to phase space. Not ready yet.
* PDT/StandardMatchers.h: Added QuarkMatcher.
* src/ThePEGParticles.in, src/ThePEGDefaults.in,
PDT/Onium3GDecayer.*: Added Onium3GDecayer class for decay of
spin-1 onia into three gluons or two gluons and a photon. The
class has not been properly tested.
2003-07-29 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* src/ThePEGDefaults.in: Added a SimpleFlavour object which is
used by the BaryonRemnants and ClusterCollapser objects.
* PDT/StandardMatchers.h: Added Check functions taking PDG code
arguments for the MesonMatcher and BaryonMatcher classes.
* PDT/PDT.*: Added functions to get the flavour content out of
hadrons.
* Handlers/SimpleFlavour.*: Added class to implement simple
versions of the pure virtual functions of the FlavourGenerator
class. The model implemented ti s simplified version of the Pythia
fortran version. (NOT TESTED)
* Handlers/FlavourGenerator.*: Changed the standard pure virtual
functions for the FlavourGenerator class to get rid of things that
were too much related to the Lund string fragmentation stuff.
2003-07-27 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* PDT/OmegaPhi3PiDecayer.h: Changed the class name in the class
description to ThePEG::OmegaPhi3PiDecayer.
* lib/ThePEG.el: Changed the naming of classes from
"/{namespace}/{class}" to "{namespace}::{class}".
* src/ThePEGParticles.in, src/ThePEGDefaults.in: Changed the
naming of classes from "/{namespace}/{class}" to
"{namespace}::{class}".
* Utilities/DescriptionList.cc: The naming of classes in the class
description has until now been on the form "/{namespace}/{class}"
In the future it should instead be on the more natural form
"{namespace}::{class}". Before the new naming scheme is enforced
class descriptions will be registered in both the old and new
form.
* Repository/BaseRepository.*: Added remove(ObjectList) to safely
remove a set of objects from the repository if no other objects
are referring to them. The function is used by the "rm"
command. In addition a new command "rrmdir" was added to remove a
complete directory with all its objects and sub-directories. (The
"rmdir" only removes empty directories.)
* Repository/Repository.*: The "cp" command now treats particles
separately (copyParticle()). If a particle has an anti-partner
this is also copied to the same directory. In addition the decay
modes of both particle and anti-particle will be copied.
* PDT/DecayMode.cc: in constructDecayMode() it is now the default
to specify the full name of the decaying particle (rather than
just the PDGName).
2003-07-26 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* CLHEPWrap/*.fh, CLHEPWrap/*.h: Reordered include paths to
prepare for next version of CLHEP which will use namespace CLHEP.
2003-07-25 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* PDT/DecayMode.*: Added new member variable to remember the order
in which the decay products were specified. The produceProducts()
now created particles according to this order.
* src/ThePEGParticles.*, src/ThePEGDefaults.in,
PDT/DummyDecayer.*: Added DummyDecayer class for symbolic decay
channels. It replaces the PYDECYDummy decayer with mode 102.
* src/ThePEGParticles.*, src/ThePEGDefaults.in,
PDT/Tau2HadronsDecayer.*: Added class to decay tau to neutrino
plus hadrons.
* PDT/OmegaPhi3PiDecayer.cc:
* src/ThePEGParticles.in, src/ThePEGDefaults.in,
PDT/DalitzDecayer.*: Added class to perform Dalitz decays into e+
e- gamma.
2003-07-24 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* PDT/StandardMatchers.h: Added matcher classes for
PseudoScalarMesons and VectorMesons.
* src/ThePEGParticles.*, src/ThePEGDefaults.in, PDT/V2PPDecayer.*:
Added V2PPDecayer class to decay vector mesons to pseudo-scalar
ones. Will be flat in phase space unless the grand parent is a
speudoscalar and its only other daughter is a speudo-scalar or a
photon.
* Repository/EventGenerator.icc: Added member functions and
variables to access the current (partial) collision handler and
the current step handler.
* Handlers/PartialCollisionHandler.*: addStep() now has default
null arguments for the step handler and the hint. If the hint is
null, it is immediately converted to the default hint. If a step
was added to a given group, the subsequent groups are
automatically reinitialized. In continueCollision(), the
currentCollisionHandler() of the current event generator is set to
this. In performStep() the currentStepHandler() in the current
event generator is set to the step handler which is called.
* Handlers/HandlerGroup.cc: next() will now return immediately for
an empty group. addPreHandler(), addHint() and addPostHandler()
now assumes (rightly) that the hint recieved is never null.
addHint will refill the whole group event if there is the main
handler is currently executing. I.e it is assumed that someone
adding a hint to the main handler wants the whole group to be
redone.
* EventRecord/Collision.cc: Fixed so that if a perticle is removed
from the event record its birthStep pointer is set to null.
Hopefully this will fix the problem that sometimes when a
generator is dumped (due to an error) a particle is written to a
persistent stream and then tries to write a no longer existent
birthStep.
2003-07-23 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* PDT/OmegaPhi3PiDecayer.*, src/ThePEGDefaults.in,
src/ThePEGParticles.in: Added OmegaPhi3PiDecayer class to handle
omega-phi->3pi decays.
* lib/ThePEG.el: Added ThePEG-Decayer-class-files function.
* PDT/FlatDecayer.cc: Now uses DecayMode::produceProducts().
* src/ThePEGParticles.in, PDT/DecayMode.*: The naming of decay
modes were before such that only the number and types of the decay
products were important, this meant that it was not possible to
have both eg. B0 -> c-cbar d-sbar and B0 -> c-sbar d-cbar decay
modes since they have the same name and same representation. Now
the concept of links have been introduced to indicate that decay
products can be linked together in pairs making two decay modes
with the same decay products but different linking different. This
is indicated in the name by an equal sign instead of a comma:
B0->c=cbar,sbar=d; and B0->c=sbar,cbar=d;
Also added a produceProducts() function to produce particles from
the specified decay products, so that linked particles come first
and consecutively in the returned vector.
2003-07-22 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* CLHEPWrap/Makefile: Added Matrix.h and Matrix.fh to the dist
files.
* lib/fixCLHEP: Make sure the fixed .so version of the CLHEP
library is called libCLHEP.so irrespective of what the original
CLHEP library was called.
* MatrixElement/MEQQ2GG.cc, MatrixElement/MEQG2QG.cc: Fixed error
in specification of intermediate particles (which was compensated
by a corresponding error in the colour flow).
* Makefile: Changed the version number to 1.0ab (between alpha and
beta).
2003-07-21 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* lib/ThePEG.el: Added the parameter and switches functions which
were forgotten in the move from skeleton.el
2003-07-20 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* EventRecord/Step.*: Added addDecayNoCheck(tPPtr parent, tPPtr
child) and, addDecayProduct(tPPtr child) to add decay products
which are already linked with their parents.
2003-07-19 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* PDF/RemnantHandler.*, PDF/PartonExtractor.*, PDF/PartonBin.*,
PDF/PDF.*, PDF/NoRemnants.*, PDF/LeptonLeptonRemnant.*,
PDF/BaryonRemnants.*, Handlers/XComb.*,
Handlers/LastXCombInfo.icc, Handlers/CollisionHandler.cc: Removed
all traces of old strategy involving the PartonBinInfo and
RemnantInfo classes.
2003-07-16 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Utilities/DynamicLoader.cc: Added the current working directory
as a standard search path. Also added '/' between paths and
libraries if needed.
* src/Makefile: Corrected link flags for setup and run programs.
* Templates/Makefile, lib/Makefile: Moved ThePEG.el and g++dep to
the lib directory.
* Repository/EventGenerator.cc: Changed Pythia7 to ThePEG in
generateReferences().
* Handlers/StepHandler.cc: The createNewStep() function now
automatically calles useMe()
* Handlers/SubProcessHandler.*, Handlers/KinematicalCuts.*,
Handlers/EventHandler.*, Handlers/CollisionHandler.*,
Handlers/AnalysisHandler.*: Added fullclone() method to avoid
slicing when making copies in the Repository.
* Config/Makefile, Config/Makefile.common.in: Fixed correct
include path for installed makefiles.
* Makefile: install now depends on the check target to ensure the
setup and run programs are compiled.
* ../configure: Added top-level configure script which simply runs
configure in the sub-directories.
2003-07-14 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Config/Makefile: Removed config.h from DISTFILES.
* Utilities/SimplePhaseSpace.cc: CMSn now throws
ImpossibleKinematics if an infinite boost is requested.
* Utilities/UtilityBase.*: Added new setMomentum function which
doesn't boost to cms but just rotates to z-axis boosts along it
and rotates to correct angle.
* PDT/FlatDecayer.cc: Fixed precision problems for large boosts of
decay products.
2003-07-13 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Config/Makefile.install: This file is copied to the lib dir in
the installation and can be used to compile a users own .so
modules.
* lib/Makefile: The .o files included in libThePEG.so are now
explicitly listed. The .so files in the listed sub-directories are
explicitly soft-linked to the lib directory.
* Config/Makefile.common.in: .o and .so files are no longer
automatically soft-linked to the lib directory.
2003-07-12 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Templates/ThePEG.el: This elisp file will replace the old
skeleton.el. The main difference is the renaming of the p7-*
functions to thepeg-*. Also started to write specialized functions
to create standard handler classes with templates for the virtual
functions.
* EventRecord/Step.cc: In addDecayProduct() remove test to see if
children are still in the final state.
2003-07-08 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Utilities/SimplePhaseSpace.cc: Set the momentum of the first
particle rather than boosting it to avoid problems with massless
particles.
* Makefile: Hid unnecessary output with @.
* Utilities/UtilityBase.tcc: Fixed imediate returns in case ranges
of particles is empty. In setMomentum the boost version is only
tried if the invariant mass squared or the mass is non-negative,
otherwise the momentum is set directly.
* Utilities/Exception.cc: Added a debug function to print out a
range of particles (and summing their momenta).
* PDT/ParticleData.h: Added produceParticle method which takes a
Lorentz vector and a mass.
* PDF/LeptonLeptonRemnant.*: Added parameter to veto photon
remnants with too small energy fractions. Also the photons mass is
properly set to zero.
* Handlers/ClusterCollapser.cc: The procedure to find particles to
compensate with was changed so that coloured particles are tried
first and singlets only if the coloured particles were not enough.
Also required the compensating particles to have a positive
invariant mass squared to avoid boost problems.
* EventRecord/ColourSinglet.*: Introduced ColourSingletException
which is thrown if an inconsistent colour flow is detected.
2003-07-07 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Utilities/Exception.cc: Added debug function to print out
particle.
* Handlers/ClusterCollapser.cc: Fixed bug for the case where mass
of compensating particle is 0.
2003-07-05 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Utilities/UtilityBase.tcc: Fixed bug in transformToCMS(): boos
was backward.
* Utilities/UtilityBase.*: Added transformToMomentum() method.
* Utilities/SimplePhaseSpace.cc: Fixed potential problem in
getMagnitude() where impossible kinematics didn't generate an
exception due to rounding errors.
* EventRecord/Step.*: Added setCopy method.
* CLHEPWrap/Transverse.icc: Fixed bug in phi() calculation.
2003-07-04 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* PDF/PartonExtractor.cc: Messed around with the newRemnants
methods.
* Utilities/ObjectIndexer.icc: Fixed memory leak in
operator()(Int).
2003-07-03 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Handlers/StepHandler.h: Added method and member for getting the
current step from the collision handler.
* PDF/PartonExtractor.*: Changed return type on newRemnants method.
* Utilities/ObjectIndexer.*: Added const method for getting object
from index without possibility to create corresponding object.
* EventRecord/Step.*: Added insertCopy method.
2003-07-02 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* PDF/PartonBin.*: Added information about outgoing bins in
addition to the info about the incoming bin.
* PDF/PartonExtractor.*, Handlers/XComb.*,
Handlers/CollisionHandler.*: Changed to use PartonBinInstance
instead of PartonBinInfo.
* EventRecord/Step.*: Added removeDecayProducts methods.
2003-07-01 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Handlers/XComb.cc: Fixed floating underflow problem due to
uninitialized field in constructor.
2003-06-30 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Handlers/XComb.*: Prepared to use the new PartonBinInstance
class.
* PDF/PartonExtractor.*: Prepared to use the new PartonBinInstance
class.
* PDF/RemnantHandler.*, PDF/NoRemnants.*,
PDF/LeptonLeptonRemnant.*, PDF/BaryonRemnants.*: Prepared to use
the new PartonBinInstance class.
* PDF/PartonBinInstance.*: Added new class to hold info on parton
bins. Instead of a PartonBin having a ParonBinInfo to keep
temporary info, PartonBinInstance keeps a PartonBin together with
temporary info.
* CLHEPWrap/Transverse.h: Added units for input/output to streams.
2003-06-28 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* PDF/PartonExtractor.cc: Fixed association beteen partons and
parton bins for generated sub-processes (used to find PDFs for
partons).
2003-06-23 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Utilities/ObjectIndexer.*: Added templated class for dynamical
association between (reference counted) objects and indices.
* Handlers/StepHandler.*, Handlers/PartialCollisionHandler.cc: In
preparation for changing the signature of the handle() method i
StepHandler classes, StepHandler now has a method to return the
collision handler which made the call to handle(), The
corresponding member variable is set be the
PartialCollisionHandler before handle() is called. Also the
StepHandler class now has its own method to create a new step if
needed.
* PDT/FlatDecayer.cc: The scale of all decay products in a decay
is set to the squared mass of the decaying particle.
* Handlers/XComb.cc: The scale of all incoming and outgoing
partons in a sub-process is set to the hard scale.
* Handlers/DecayHandler.cc: The scale of a particle which has
decayed is set to zero.
2003-06-16 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* Repository/Repository.cc: Added code so that the load() command
will look in the ThePEG_INSTALL_PATH for a .rpo file if the given
filename did not exist.
2003-06-14 Leif Lönnblad <Leif.Lonnblad@thep.lu.se>
* First check-in of ThePEG. This is just what was previously
Pythia7 but stripped from any pythia-specific classes. Pythia7
still exists but contains only pythia-specific classes which
depend on ThePEG.
Most significant change is that the 'Misc' directory has been
removed and all classes therin has been moved to the 'Utilities'
directory.
Another change is that 'make check' now only checks the SimpleLEP
generator since the SimpleLHC generator was indirectly dependent
on the FlavourGenerator in the pythia string fragmentation classes
(used in the remnant handling).
When compiling, the full compiler and link commands are now by
default replaced by messages such as 'comiling xxx.cc ...' To see
the full commands use the make-variable SHOWCOMMAND eg. 'make -k
check SHOWCOMMAND=1'
diff --git a/PDT/ParticleData.cc b/PDT/ParticleData.cc
--- a/PDT/ParticleData.cc
+++ b/PDT/ParticleData.cc
@@ -1,821 +1,829 @@
// -*- C++ -*-
//
// This is the implementation of the non-inlined, non-templated member
// functions of the ParticleData class.
//
#include "ParticleData.h"
#include "ParticleData.xh"
#include "ThePEG/PDT/DecayMode.h"
#include "ThePEG/PDT/MassGenerator.h"
#include "ThePEG/PDT/WidthGenerator.h"
#include "ThePEG/Utilities/HoldFlag.h"
#include "ThePEG/Utilities/Rebinder.h"
#include "ThePEG/EventRecord/Particle.h"
#include "ThePEG/Interface/Parameter.h"
#include "ThePEG/Interface/Switch.h"
#include "ThePEG/Interface/Reference.h"
#include "ThePEG/Interface/RefVector.h"
#include "ThePEG/Interface/Command.h"
#include "ThePEG/Interface/ClassDocumentation.h"
#include "ThePEG/Repository/Repository.h"
#include "ThePEG/Persistency/PersistentOStream.h"
#include "ThePEG/Persistency/PersistentIStream.h"
#include "ThePEG/Config/algorithm.h"
#include "ThePEG/Utilities/Exception.h"
#include "ThePEG/Utilities/EnumIO.h"
namespace ThePEG {
ParticleData::ParticleData()
- : theId(0) {}
+ : theId(0), thePDGName(""), theMass(-1.0*GeV), theWidth(-1.0*GeV),
+ theWidthUpCut(-1.0*GeV), theWidthLoCut(-1.0*GeV), theCTau(-1.0*mm),
+ theCharge(PDT::ChargeUnknown),
+ theSpin(PDT::SpinUnknown), theColor(PDT::ColourUnknown), isStable(true),
+ variableRatio(false), syncAnti(false), theDefMass(-1.0*GeV),
+ theDefWidth(-1.0*GeV), theDefCut(-1.0*GeV), theDefCTau(-1.0*mm),
+ theDefCharge(PDT::ChargeUnknown), theDefSpin(PDT::SpinUnknown),
+ theDefColour(PDT::ColourUnknown) {}
+
ParticleData::ParticleData(const ParticleData & pd)
: Interfaced(pd), theId(pd.theId), thePDGName(pd.thePDGName),
theMass(pd.theMass), theWidth(pd.theWidth),
theWidthUpCut(pd.theWidthUpCut), theWidthLoCut(pd.theWidthLoCut),
theCTau(pd.theCTau), theCharge(pd.theCharge), theSpin(pd.theSpin),
theColor(pd.theColor), theMassGenerator(pd.theMassGenerator),
isStable(pd.isStable), theDecaySelector(pd.theDecaySelector),
theDecayModes(pd.theDecayModes), theWidthGenerator(pd.theWidthGenerator),
variableRatio(pd.variableRatio), theAntiPartner(pd.theAntiPartner),
syncAnti(pd.syncAnti), theDefMass(pd.theDefMass),
theDefWidth(pd.theDefWidth), theDefCut(pd.theDefCut),
theDefCTau(pd.theDefCTau), theDefCharge(pd.theDefCharge),
theDefSpin(pd.theDefSpin), theDefColour(pd.theDefColour) {}
ParticleData::
ParticleData(long newId, string newPDGName)
: theId(newId), thePDGName(newPDGName), theMass(-1.0*GeV), theWidth(-1.0*GeV),
theWidthUpCut(-1.0*GeV), theWidthLoCut(-1.0*GeV), theCTau(-1.0*mm),
theCharge(PDT::ChargeUnknown),
theSpin(PDT::SpinUnknown), theColor(PDT::ColourUnknown), isStable(true),
variableRatio(false), syncAnti(false), theDefMass(-1.0*GeV),
theDefWidth(-1.0*GeV), theDefCut(-1.0*GeV), theDefCTau(-1.0*mm),
theDefCharge(PDT::ChargeUnknown), theDefSpin(PDT::SpinUnknown),
theDefColour(PDT::ColourUnknown) {}
ParticleData::~ParticleData() {}
PDPtr ParticleData::Create(long newId, string newPDGName) {
return new_ptr(ParticleData(newId, newPDGName));
}
PDPair ParticleData::
Create(long newId, string newPDGName, string newAntiPDGName) {
PDPair pap;
pap.first = new_ptr(ParticleData(newId, newPDGName));
pap.second = new_ptr(ParticleData(-newId, newAntiPDGName));
antiSetup(pap);
return pap;
}
void ParticleData::readSetup(istream & is) throw(SetupException) {
is >> theId >> thePDGName >> iunit(theDefMass, GeV) >> iunit(theDefWidth, GeV)
>> iunit(theDefCut, GeV) >> iunit(theDefCTau, mm) >> ienum(theDefCharge)
>> ienum(theDefColour) >> ienum(theDefSpin) >> ienum(isStable);
theMass = theDefMass;
theWidth = theDefWidth;
theWidthUpCut = theDefCut;
theWidthLoCut = theDefCut;
theCTau = theDefCTau;
theCharge = theDefCharge;
theColor = theDefColour;
theSpin = theDefSpin;
return;
}
void ParticleData::antiSetup(const PDPair & pap) {
pap.first->theAntiPartner = pap.second;
pap.second->theAntiPartner = pap.first;
pap.first->syncAnti = pap.second->syncAnti = true;
}
PDPtr ParticleData::pdclone() const {
return new_ptr(*this);
}
IBPtr ParticleData::clone() const {
return pdclone();
}
IBPtr ParticleData::fullclone() const {
PDPtr pd = pdclone();
Repository::Register(pd);
pd->theDecaySelector.clear();
pd->theDecayModes.clear();
PDPtr apd;
if ( CC() ) {
apd = CC()->pdclone();
Repository::Register(apd);
apd->theDecaySelector.clear();
apd->theDecayModes.clear();
pd->theAntiPartner = apd;
apd->theAntiPartner = pd;
pd->syncAnti = syncAnti;
apd->syncAnti = CC()->syncAnti;
}
HoldFlag<> dosync(pd->syncAnti, true);
for ( DecaySet::const_iterator it = theDecayModes.begin();
it != theDecayModes.end(); ++it )
pd->addDecayMode(*it);
return pd;
}
Energy ParticleData::width(Energy wi) {
theWidth = wi;
if ( synchronized() && CC() ) CC()->theWidth = theWidth;
return theWidth;
}
Energy ParticleData::widthUpCut(Energy wci) {
theWidthUpCut = wci;
if ( synchronized() && CC() ) CC()->theWidthUpCut = theWidthUpCut;
return theWidthUpCut;
}
Energy ParticleData::widthLoCut(Energy wci) {
theWidthLoCut = wci;
if ( synchronized() && CC() ) CC()->theWidthLoCut = theWidthLoCut;
return theWidthLoCut;
}
Length ParticleData::cTau(Length ti) {
theCTau = ti;
if ( synchronized() && CC() ) CC()->theCTau = theCTau;
return theCTau;
}
PDT::Charge ParticleData::iCharge(PDT::Charge ci) {
theCharge = ci;
if ( synchronized() && CC() ) CC()->theCharge = PDT::Charge(-ci);
return theCharge;
}
PDT::Spin ParticleData::iSpin(PDT::Spin si) {
theSpin = si;
if ( synchronized() && CC() ) CC()->theSpin = si;
return si;
}
PDT::Color ParticleData::iColor(PDT::Color ci) {
theColor = ci;
if ( synchronized() && CC() ) CC()->theColor = PDT::Color(-ci);
return theColor;
}
PDT::Colour ParticleData::iColour(PDT::Colour ci) {
theColor = ci;
if ( synchronized() && CC() ) CC()->theColor = PDT::Color(-ci);
return theColor;
}
void ParticleData::stable(bool theSpin) {
isStable = s;
if ( synchronized() && CC() ) CC()->isStable = s;
}
void ParticleData::synchronized(bool h) {
syncAnti = h;
if ( CC() ) CC()->syncAnti = h;
}
void ParticleData::addDecayMode(tDMPtr dm) {
if ( member(theDecayModes, dm) ) return;
cPDPtr parent = dm->parent();
if ( !parent ) parent = this;
if ( parent != this ) {
dm = dm->clone(this);
}
theDecayModes.insert(dm);
theDecaySelector.insert(dm->brat(), dm);
if ( CC() ) {
if ( !synchronized() ) dm->CC()->switchOff();
CC()->theDecayModes.insert(dm->CC());
CC()->theDecaySelector.insert(dm->CC()->brat(), dm->CC());
}
}
void ParticleData::removeDecayMode(tDMPtr dm) {
theDecayModes.erase(theDecayModes.find(dm));
theDecaySelector.erase(dm);
if ( !CC() ) return;
CC()->theDecayModes.erase(dm->CC());
CC()->theDecaySelector.erase(dm->CC());
}
void ParticleData::synchronize() {
if ( !CC() ) return;
isStable = CC()->isStable;
theMass = CC()->theMass;
theWidth = CC()->theWidth;
theWidthUpCut = CC()->theWidthUpCut;
theWidthLoCut = CC()->theWidthLoCut;
theCTau = CC()->theCTau;
theCharge = PDT::Charge(-CC()->theCharge);
theSpin = CC()->theSpin;
theColor = PDT::antiColor(CC()->theColor);
theMassGenerator = CC()->theMassGenerator;
theWidthGenerator = CC()->theWidthGenerator;
syncAnti = CC()->syncAnti;
theDecaySelector.clear();
for ( DecaySet::iterator it = theDecayModes.begin();
it != theDecayModes.end(); ++it ) {
(*it)->synchronize();
theDecaySelector.insert((*it)->brat(), *it);
}
}
void ParticleData::doupdate() throw(UpdateException) {
Interfaced::doupdate();
bool redo = touched();
for_each(theDecayModes, UpdateChecker(redo));
UpdateChecker::check(theMassGenerator, redo);
UpdateChecker::check(theWidthGenerator, redo);
if ( !redo ) return;
theDecaySelector.clear();
for ( DecaySet::const_iterator dit = theDecayModes.begin();
dit != theDecayModes.end(); ++dit ) {
tDMPtr dm = *dit;
dm->resetOverlap();
for ( DecaySet::const_iterator dit2 = theDecayModes.begin();
dit2 != theDecayModes.end(); ++dit2 )
if ( dit2 != dit ) dm->addOverlap(dm);
if ( dm->brat() > 0.0 ) theDecaySelector.insert(dm->brat(), dm);
}
if ( theDecaySelector.empty() ) stable(true);
if ( theMassGenerator && !theMassGenerator->accept(*this) )
throw UpdateException();
if ( theWidthGenerator &&
!theWidthGenerator->accept(*this) )
throw UpdateException();
if ( theWidthGenerator ) theDecaySelector = theWidthGenerator->rate(*this);
touch();
}
tDMPtr ParticleData::selectMode(Particle & p) const {
if ( &(p.data()) != this ) return tDMPtr();
try {
if ( !theWidthGenerator || !variableRatio )
return theDecaySelector.select(generator()->random());
DecaySelector local;
if ( theWidthGenerator )
local = theWidthGenerator->rate(p);
else
for ( DecaySet::const_iterator mit = theDecayModes.begin();
mit != theDecayModes.end(); ++mit )
local.insert((*mit)->brat(p), *mit);
return local.select(generator()->random());
}
catch (range_error) {
return tDMPtr();
}
}
void ParticleData::rebind(const TranslationMap & trans) throw(RebindException) {
if ( CC() ) theAntiPartner = trans.translate(theAntiPartner);
DecaySet newModes;
DecaySelector newSelector;
for ( DecaySet::iterator it = theDecayModes.begin();
it != theDecayModes.end(); ++it ) {
DMPtr dm;
dm = trans.translate(*it);
if ( !dm ) throw RebindException();
newModes.insert(dm);
newSelector.insert(dm->brat(), dm);
}
theDecayModes.swap(newModes);
theDecaySelector.swap(newSelector);
}
IVector ParticleData::getReferences() {
IVector refs = Interfaced::getReferences();
if ( CC() ) refs.push_back(CC());
refs.insert(refs.end(), theDecayModes.begin(), theDecayModes.end());
// for ( DecaySet::iterator it = theDecayModes.begin();
// it != theDecayModes.end(); ++it ) refs.push_back(*it);
return refs;
}
void ParticleData::massGenerator(tMassGenPtr mg) {
if ( mg && !mg->accept(*this) ) return;
if ( mg && synchronized() && CC() && !mg->accept(*CC()) ) return;
theMassGenerator = mg;
if ( synchronized() && CC() ) CC()->theMassGenerator = mg;
}
void ParticleData::widthGenerator(tWidthGeneratorPtr newGen) {
if ( newGen && !newGen->accept(*this) ) return;
if ( newGen && synchronized() && CC() && !newGen->accept(*CC()) ) return;
theWidthGenerator = newGen;
if ( synchronized() && CC() ) CC()->theWidthGenerator = newGen;
}
Energy ParticleData::generateMass() const {
return massGenerator()? massGenerator()->mass(*this): mass();
}
Energy ParticleData::generateWidth(Energy m) const {
return widthGenerator()? widthGenerator()->width(*this, m): width();
}
Length ParticleData::generateLifeTime(Energy m, Energy w) const {
return widthGenerator()? widthGenerator()->lifeTime(*this, m, w): cTau();
}
PPtr ParticleData::produceParticle(const Lorentz5Momentum & pp) const {
PPtr p = new_ptr(Particle(this));
p->set5Momentum(pp);
return p;
}
PPtr ParticleData::produceParticle(const LorentzMomentum & pp) const {
PPtr p(produceParticle(Lorentz5Momentum(pp)));
return p;
}
PPtr ParticleData::produceParticle(const LorentzMomentum & pp, Energy m) const {
PPtr p(produceParticle(Lorentz5Momentum(pp, m)));
return p;
}
PPtr ParticleData::produceParticle(Energy m, const Momentum3 & pp) const {
PPtr p(produceParticle(Lorentz5Momentum(m, pp)));
return p;
}
PPtr ParticleData::produceParticle(const Momentum3 & pp) const {
PPtr p(produceParticle(Lorentz5Momentum(generateMass(), pp)));
return p;
}
PPtr ParticleData::
produceParticle(Energy plus, Energy minus, Energy px, Energy py) const {
PPtr p(produceParticle(LorentzMomentum(px, py, 0.5*(plus-minus),
0.5*(plus+minus))));
return p;
}
void ParticleData::setMass(Energy mi) {
theMass = mi;
ParticleData * apd = CC().operator->();
if ( synchronized() && apd ) apd->theMass = theMass;
}
Energy ParticleData::defMass() const {
return theDefMass;
}
Energy ParticleData::maxMass() const {
return 10.0*max(mass(),defMass());
}
void ParticleData::setWidth(Energy wi) {
width(wi);
}
Energy ParticleData::getWidth() const {
return width();
}
Energy ParticleData::defWidth() const {
return theDefWidth;
}
Energy ParticleData::maxWidth() const {
return 10.0*max(theWidth,theDefWidth);
}
void ParticleData::setCut(Energy ci) {
widthCut(ci);
}
Energy ParticleData::getCut() const {
return widthCut();
}
Energy ParticleData::defCut() const {
return theDefCut;
}
Energy ParticleData::maxCut() const {
return 10.0*max(max(theWidthUpCut, theWidthLoCut), theDefCut);
}
void ParticleData::setUpCut(Energy ci) {
widthUpCut(ci);
}
Energy ParticleData::getUpCut() const {
return widthUpCut();
}
void ParticleData::setLoCut(Energy ci) {
widthLoCut(ci);
}
Energy ParticleData::getLoCut() const {
return widthLoCut();
}
void ParticleData::setCTau(Length ti) {
cTau(ti);
}
Length ParticleData::getCTau() const {
return cTau();
}
Length ParticleData::defCTau() const {
return theDefCTau;
}
Length ParticleData::maxCTau() const {
return 10.0*max(theCTau,theDefCTau);
}
void ParticleData::setStable(long is) {
stable(is);
}
long ParticleData::getStable() const {
return stable();
}
void ParticleData::setSync(long is) {
synchronized(is);
}
long ParticleData::getSync() const {
return synchronized();
}
string ParticleData::doSync(string) {
synchronize();
return "";
}
void ParticleData::setMassGenerator(MassGenPtr gi) {
massGenerator(gi);
}
void ParticleData::setWidthGenerator(WidthGeneratorPtr wg) {
widthGenerator(wg);
}
void ParticleData::setColour(long c) {
theColor = PDT::Colour(c);
}
long ParticleData::getColour() const {
return theColor;
}
long ParticleData::defColour() const {
return theDefColour;
}
void ParticleData::setCharge(int c) {
theCharge = PDT::Charge(c);
}
string ParticleData::ssetCharge(string arg) {
istringstream is(arg);
long i;
if ( is >> i ) {
theCharge = PDT::Charge(i);
return "New charge is " + arg;
}
if ( arg == "unknown" )
theCharge = PDT::ChargeUnknown;
else if ( arg == "charged" )
theCharge = PDT::Charged;
else if ( arg == "positive" )
theCharge = PDT::Positive;
else if ( arg == "negative" )
theCharge = PDT::Negative;
else throw ParticleChargeCommand(*this, arg);
return "New charge is " + arg;
}
int ParticleData::getCharge() const {
return theCharge;
}
int ParticleData::defCharge() const {
return theDefCharge;
}
void ParticleData::setSpin(int s) {
theSpin = PDT::Spin(s);
}
int ParticleData::getSpin() const {
return theSpin;
}
int ParticleData::defSpin() const {
return theDefSpin;
}
ClassDescription<ParticleData> ParticleData::initParticleData;
struct ParticleOrdering {
bool operator()(const tcPDPtr & p1, const tcPDPtr & p2) {
return abs(p1->id()) > abs(p2->id()) ||
( abs(p1->id()) == abs(p2->id()) && p1->id() > p2->id() ) ||
( p1->id() == p2->id() && p1->fullName() > p2->fullName() );
}
};
struct ModeOrdering {
bool operator()(const tcDMPtr & d1, const tcDMPtr & d2) {
ParticleOrdering ord;
return ord(d1->parent(), d2->parent()) ||
( !ord(d2->parent(), d1->parent()) &&
( d1->tag() < d2->tag() ||
( d1->tag() == d2->tag() && d1->fullName() < d2->fullName() ) ) );
}
};
void ParticleData::persistentOutput(PersistentOStream & os) const {
multiset<tcDMPtr,ModeOrdering,Allocator<tcDMPtr> >
modes(theDecayModes.begin(), theDecayModes.end());
os << theId << thePDGName << ounit(theMass, GeV) << ounit(theWidth, GeV)
<< ounit(theWidthUpCut, GeV) << ounit(theWidthLoCut, GeV)
<< ounit(theCTau, mm) << oenum(theCharge) << oenum(theSpin)
<< oenum(theColor);
os << theMassGenerator << isStable << modes << theDecaySelector
<< theWidthGenerator << variableRatio << theAntiPartner << syncAnti
<< ounit(theDefMass, GeV) << ounit(theDefWidth, GeV)
<< ounit(theDefCut, GeV) << ounit(theDefCTau, mm) << oenum(theDefColour)
<< oenum(theDefCharge) << oenum(theDefSpin);
}
void ParticleData::persistentInput(PersistentIStream & is, int) {
is >> theId >> thePDGName >> iunit(theMass, GeV) >> iunit(theWidth, GeV)
>> iunit(theWidthUpCut, GeV) >> iunit(theWidthLoCut, GeV)
>> iunit(theCTau, mm) >> ienum(theCharge) >> ienum(theSpin)
>> ienum(theColor) >> theMassGenerator >> isStable
>> theDecayModes >> theDecaySelector >> theWidthGenerator >> variableRatio
>> theAntiPartner >> syncAnti >> iunit(theDefMass, GeV)
>> iunit(theDefWidth, GeV) >> iunit(theDefCut, GeV)
>> iunit(theDefCTau, mm) >> ienum(theDefColour) >> ienum(theDefCharge)
>> ienum(theDefSpin);
}
void ParticleData::Init() {
static ClassDocumentation<ParticleData> documentation
("There is no documentation for the ThePEG::ParticleData class");
static Parameter<ParticleData,Energy> interfaceMass
("NominalMass",
"The nominal mass in GeV of the particle. The actual mass "
"of a particle instance is generated depending on the "
"nominal mass and the width and is generated by the "
"<interface>Mass_generator</interface> object associated with the "
"particle.",
&ParticleData::theMass, GeV, 0.0*GeV, 0.0*GeV, Constants::MaxEnergy,
false, false, true,
&ParticleData::setMass, 0, 0, &ParticleData::maxMass,
&ParticleData::defMass);
static Parameter<ParticleData,Energy> interfaceDefMass
("DefaultMass",
"The default nominal mass in GeV of the particle. The actual mass "
"of a particle instance is generated depending on the "
"nominal mass and the width and is generated by the "
"<interface>Mass_generator</interface> object associated with the "
"particle.",
&ParticleData::theDefMass, GeV, 0.0*GeV, 0.0*GeV, Constants::MaxEnergy,
false, true, true);
static Parameter<ParticleData,Energy> interfaceWidth
("Width",
"The width of the particle in GeV.",
0, GeV, 0.0*GeV, 0.0*GeV, Constants::MaxEnergy, false, false, true,
&ParticleData::setWidth, &ParticleData::getWidth,
0, &ParticleData::maxWidth, &ParticleData::defWidth);
static Parameter<ParticleData,Energy> interfaceDefWidth
("DefaultWidth",
"The default width of the particle in GeV.",
&ParticleData::theDefWidth, GeV, 0.0*GeV, 0.0*GeV, Constants::MaxEnergy,
false, true, true);
static Parameter<ParticleData,Energy> interfaceWidthUpCut
("WidthUpCut",
"The upper hard cutoff in GeV in generated mass, which is the maximum "
"allowed upwards deviation from the nominal mass.",
0, GeV, 0.0*GeV, 0.0*GeV, Constants::MaxEnergy, false, false, true,
&ParticleData::setUpCut, &ParticleData::getUpCut,
0, &ParticleData::maxCut, &ParticleData::defCut);
static Parameter<ParticleData,Energy> interfaceWidthLoCut
("WidthLoCut",
"The lower hard cutoff in GeV in generated mass, which is the maximum "
"allowed downwards deviation from the nominal mass.",
0, GeV, 0.0*GeV, 0.0*GeV, Constants::MaxEnergy, false, false, true,
&ParticleData::setLoCut, &ParticleData::getLoCut,
0, &ParticleData::maxCut, &ParticleData::defCut);
static Parameter<ParticleData,Energy> interfaceWidthCut
("WidthCut",
"The hard cutoff in GeV in generated mass, which is the maximum "
"allowed deviation from the nominal mass. Sets both the upper and lower "
"cut. (The displayed value is the maximium of the upper and lower cut.)",
0, GeV, 0.0*GeV, 0.0*GeV, Constants::MaxEnergy, false, false, true,
&ParticleData::setCut, &ParticleData::getCut,
0, &ParticleData::maxCut, &ParticleData::defCut);
static Parameter<ParticleData,Energy> interfaceDefWidthCut
("DefaultWidthCut",
"The default hard cutoff in GeV in generated mass, which is the maximum "
"allowed deviation from the nominal mass. For the actual cutoff, the "
"upper and lower cut can be set separately.",
&ParticleData::theDefCut, GeV, 0.0*GeV, 0.0*GeV, Constants::MaxEnergy,
false, true, true);
static Parameter<ParticleData,Length> interfaceCTau
("LifeTime",
"c times the average lifetime of the particle measuerd in mm."
"The actual lifetime of a particle instance is generated "
"from this number by the <interface>Mass_generator</interface> "
"object associated with the particle.",
0, mm, 0.0*mm, 0.0*mm, Constants::MaxLength, false, false, true,
&ParticleData::setCTau, &ParticleData::getCTau,
0, &ParticleData::maxCTau, &ParticleData::defCTau);
static Parameter<ParticleData,Length> interfaceDefCTau
("DefaultLifeTime",
"c times the default average lifetime of the particle measuerd in mm."
"The actual lifetime of a particle instance is generated "
"from this number by the <interface>Mass_generator</interface> "
"object associated with the particle.",
&ParticleData::theDefCTau, mm, 0.0*mm, 0.0*mm, Constants::MaxLength,
false, true, true);
static Switch<ParticleData> interfaceColour
("Colour",
"The colour quantum number of this particle type.",
0, -1, false, false, &ParticleData::setColour, &ParticleData::getColour,
&ParticleData::defColour);
static SwitchOption interfaceColourUndefined
(interfaceColour, "Undefined", "The coulur is undefined.", -1);
static SwitchOption interfaceColourNeutral
(interfaceColour, "Neutral", "This particle is colour neutral.", 0);
static SwitchOption interfaceColour3
(interfaceColour, "Triplet", "This particle is a colour triplet.", 3);
static SwitchOption interfaceColour3bar
(interfaceColour, "AntiTriplet",
"This particle is a colour anti-triplet.", -3);
static SwitchOption interfaceColour8
(interfaceColour, "Octet", "This particle is a colour octet.", 8);
static Switch<ParticleData,PDT::Color> interfaceDefColour
("DefaultColour",
"The defaault colour quantum number of this particle type.",
&ParticleData::theDefColour, PDT::Color(-1), false, true);
static SwitchOption interfaceDefColourUndefined
(interfaceDefColour, "Undefined", "The coulur is undefined.", -1);
static SwitchOption interfaceDefColourNeutral
(interfaceDefColour, "Neutral", "This particle is colour neutral.", 0);
static SwitchOption interfaceDefColour3
(interfaceDefColour, "Triplet", "This particle is a colour triplet.", 3);
static SwitchOption interfaceDefColour3bar
(interfaceDefColour, "AntiTriplet",
"This particle is a colour anti-triplet.", -3);
static SwitchOption interfaceDefColour8
(interfaceDefColour, "Octet", "This particle is a colour octet.", 8);
static Parameter<ParticleData, int> interfaceCharge
("Charge",
"The charge of this particle in units of e/3. "
"See also the command interface <interface>SetCharge</interface>.",
0, 0, -24, 24, false, false, true,
&ParticleData::setCharge, &ParticleData::getCharge, 0, 0,
&ParticleData::defCharge);
static Parameter<ParticleData, PDT::Charge> interfaceDefCharge
("DefaultCharge",
"The default charge of this particle in units of e/3. "
"See also the command interface <interface>SetCharge</interface>.",
&ParticleData::theDefCharge, PDT::Charge(0), PDT::Charge(-24),
PDT::Charge(24), false, true, true);
static Command<ParticleData> interfaceSetCharge
("SetCharge",
"Set the charge of this particle. The argument should be given as an "
"interger giving three times the unit charge, or 'unknown', "
"'charged', 'positive' or 'negative'", &ParticleData::ssetCharge);
static Parameter<ParticleData, int> interfaceSpin
("Spin",
"The spin quantim number of this particle on the form 2j+1.",
0, 0, 0, 9, false, false, true,
&ParticleData::setSpin, &ParticleData::getSpin, 0, 0,
&ParticleData::defSpin);
static Parameter<ParticleData, PDT::Spin> interfaceDefSpin
("DefaultSpin",
"The default spin quantim number of this particle on the form 2j+1.",
&ParticleData::theDefSpin, PDT::Spin(0), PDT::Spin(0), PDT::Spin(9),
false, true, true);
static Switch<ParticleData> interfaceStable
("Stable",
"Indicates if the particle is stable or not.",
0, 0, false, false,
&ParticleData::setStable, &ParticleData::getStable, 0);
static SwitchOption interfaceStableYes
(interfaceStable,
"Stable",
"This particle is stable",
1);
static SwitchOption interfaceStableNo
(interfaceStable,
"Unstable",
"This particle is not stable",
0);
static Switch<ParticleData> interfaceSync
("Synchronized",
"Indicates if the changes to this particle is propagated to "
"its anti-partner or not. Not that seting this switch does not"
"actually synchronize the properties with the anti-partner, "
"it only assures that following changes are propagated. "
"To sync the particle with its anti-particle, use the "
"<interface>Synchronize</interface> command.",
0, 1, false, false,
&ParticleData::setSync, &ParticleData::getSync, 0);
static SwitchOption interfaceSyncYes
(interfaceSync,
"Synchronized",
"Changes to this particle will propagate to its "
"anti-partner",
1);
static SwitchOption interfaceSyncNo
(interfaceSync,
"Not_synchronized",
"Changes to this particle will propagate to its "
"anti-partner",
0);
static Command<ParticleData> interfaceSynchronize
("Synchronize",
"Synchronizes this particle so that all its properties "
"correspond to those of its anti-partner",
&ParticleData::doSync, false);
static Reference<ParticleData,MassGenerator> interfaceMassGenerator
("Mass_generator",
"An object derived from the ThePEG::MassGenerator"
"class, which is able to generate a mass for a given "
"particle instance",
&ParticleData::theMassGenerator, false, false, true, true,
&ParticleData::setMassGenerator, 0, 0);
static Reference<ParticleData,WidthGenerator> interfaceWidthGenerator
("Width_generator",
"An object derived from the ThePEG::WidthGenerator class, "
"which is able to calculate the full and partial widths for"
"this particle type and for a given instance of this "
"particle type.",
&ParticleData::theWidthGenerator, false, false, true, true,
&ParticleData::setWidthGenerator, 0, 0);
static RefVector<ParticleData,DecayMode> interfaceDecayModes
("DecayModes",
"The list of decay modes defined for this particle type.",
0, -1, false, false, false, false, 0,
&ParticleData::insDecayModes, &ParticleData::delDecayModes,
&ParticleData::getDecayModes);
}
void ParticleData::insDecayModes(DMPtr dm, int) {
addDecayMode(dm);
}
void ParticleData::delDecayModes(int i) {
vector<DMPtr> mv = getDecayModes();
if ( i >= 0 && (unsigned int)i < mv.size() ) removeDecayMode(mv[i]);
}
vector<DMPtr> ParticleData::getDecayModes() const {
return vector<DMPtr>(theDecayModes.begin(), theDecayModes.end());
}
ParticleChargeCommand::
ParticleChargeCommand(const ParticleData & pd, string arg) {
theMessage << "Cannot set the charge of particle '" << pd.name()
<< "' to '" << arg << "'.";
severity(warning);
}
}

File Metadata

Mime Type
text/x-diff
Expires
Tue, Sep 30, 5:44 AM (5 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
6566307
Default Alt Text
(66 KB)

Event Timeline