Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:38:29

0001 // -*- C++ -*-
0002 //
0003 // ParticleData.h is a part of ThePEG - Toolkit for HEP Event Generation
0004 // Copyright (C) 1999-2019 Leif Lonnblad
0005 //
0006 // ThePEG is licenced under version 3 of the GPL, see COPYING for details.
0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
0008 //
0009 #ifndef ThePEG_ParticleData_H
0010 #define ThePEG_ParticleData_H
0011 // This is the declaration of the ParticleData class.
0012 
0013 #include "ThePEG/Config/ThePEG.h"
0014 #include "ThePEG/PDT/PDT.h"
0015 #include "ThePEG/PDT/PID.h"
0016 #include "ThePEG/Vectors/LorentzVector.h"
0017 #include "ThePEG/Vectors/ThreeVector.h"
0018 #include "ThePEG/Interface/Interfaced.h"
0019 #include "ThePEG/Utilities/Selector.h"
0020 #include "ThePEG/PDT/WidthGenerator.h"
0021 #include "ThePEG/PDT/MassGenerator.h"
0022 #include "ThePEG/PDT/DecayMode.fh"
0023 #include "ThePEG/Utilities/ClassTraits.h"
0024 #include "ThePEG/Utilities/ClassDescription.h"
0025 
0026 namespace ThePEG {
0027 
0028 /**
0029  * ParticleData inherits from InterfacedBase and represents the
0030  * properties of a particle type. It is also able to produce instances
0031  * of this Particle type and, among other things, to decay them.
0032  *
0033  * @see \ref ParticleDataInterfaces "The interfaces"
0034  * defined for ParticleData.
0035  */
0036 class ParticleData: public Interfaced {
0037 
0038 public:
0039 
0040   /** The Repository is a friend. */
0041   friend class Repository;
0042 
0043   /** The EventGenerator is a friend. */
0044   friend class EventGenerator;
0045 
0046   /** DecayMode is a friend. */
0047   friend class DecayMode;
0048 
0049   /** A selector of DecayMode objects. */
0050   typedef Selector<tDMPtr> DecaySelector;
0051 
0052 public:
0053 
0054   /**
0055    * Default constructor.
0056    */
0057   ParticleData();
0058 
0059   /** @name The Create methods are special interfaces for ParticleData
0060       classes. */
0061   //@{
0062   /**
0063    * Create a Particle which is its own anti-particle.
0064    */
0065   static PDPtr Create(PID newId, const string & newPDGName);
0066 
0067   /**
0068    * Create a particle - anti particle pair.
0069    */
0070   static PDPair Create(PID newId, const string & newPDGName, const string & newAntiPDGName);
0071   //@}
0072 
0073 public:
0074 
0075   /** @name Acces to number and name. */
0076   //@{
0077   /**
0078    * Return the PDG id number.
0079    */
0080   long id() const { return theId; }
0081 
0082   /**
0083    * Return the generic PDG name. Note that this is not really
0084    * standardised.
0085    */
0086   const string & PDGName() const { return thePDGName; }
0087 
0088   /**
0089    * Return the generic PDG name. Note that this is not really
0090    * standardised.
0091    */
0092   const string & genericName() const { return thePDGName; }
0093   //@}
0094 
0095   /** @name Functions used for producing Particle instances. */
0096   //@{
0097   /**
0098    * Produce a particle specifying momentum.
0099    */
0100   PPtr produceParticle(const Lorentz5Momentum &) const;
0101 
0102   /**
0103    * Produce a particle specifying momentum.
0104    */
0105   PPtr produceParticle(const LorentzMomentum &) const;
0106 
0107   /**
0108    * Produce a particle specifying 4-momentum and a mass.
0109    */
0110   PPtr produceParticle(const LorentzMomentum &, Energy m) const;
0111 
0112   /**
0113    * Produce a particle specifying 3-momentum.
0114    */
0115   PPtr produceParticle(const Momentum3 & pp = Momentum3()) const;
0116 
0117   /**
0118    * Produce a particle specifying mass and 3-momentum.
0119    */
0120   PPtr produceParticle(Energy m, const Momentum3 & pp = Momentum3()) const;
0121 
0122   /**
0123    * Produce a particle specifying light-cone momentum components and
0124    * transverse momentum components.
0125    */
0126   PPtr produceParticle(Energy plus, Energy minus, Energy px, Energy py) const;
0127 
0128   /**
0129    * Generate a mass for an instance of this particle type.
0130    */
0131   Energy generateMass() const;
0132 
0133   /**
0134    * Generate a width for an instance of this particle type. Given a
0135    * \a mass of an instance of this particle type, calculate its width.
0136    */
0137   Energy generateWidth(Energy mass) const;
0138 
0139   /**
0140    * Generate a mass for an instance of this particle type. Given a \a
0141    * mass and a \a width of an instance of this particle type,
0142    * generate a life time.
0143    */
0144   Length generateLifeTime(Energy mass, Energy width) const;
0145   // Given a mass and a width of an instance of this particle type,
0146   // generate a life time.
0147   //@}
0148 
0149   /** @name Access the decay modes. */
0150   //@{
0151   /**
0152    * Return the nominal decay selector for this particle. Ie. the
0153    * decay modes weighted by their nominal branching ratios.
0154    */
0155   const DecaySelector & decaySelector() const { return theDecaySelector; }
0156 
0157   /**
0158    * Selects a decay mode randomly according to the branching
0159    * ratios. The nominal branching ratios may be changed for the
0160    * particular Particle instance \a p, iether by an assigned
0161    * WidthGenerator or the respective Decayers.
0162    */
0163   tDMPtr selectMode(Particle & p) const;
0164 
0165   /**
0166    * Access all the decay modes, including those which are
0167    * switched off, or have zero branching ratio
0168    */
0169   const DecaySet & decayModes() const { return theDecayModes; }
0170   //@}
0171 
0172   /**
0173    * Set the nominal mass
0174    */
0175   Energy mass(Energy);
0176 
0177   /**
0178    * Return the nominal mass.
0179    */
0180   Energy mass() const { return theMass; }
0181 
0182   /**
0183    * Return the mass to be used when evaluating hard process cross sections.
0184    */
0185   Energy hardProcessMass() const { 
0186     return 
0187       hardProcessMassSet ? theHardProcessMass : mass();
0188   }
0189 
0190   /**
0191    * Return the maximum possible mass of this particle type.
0192    */
0193   Energy massMax() const { return mass() + widthUpCut(); }
0194 
0195   /**
0196    * Return the minimum possible mass of this particle type.
0197    */
0198   Energy massMin() const { return max(mass() - widthLoCut(), ZERO); }
0199 
0200   /**
0201    * Return the constituent mass of this particle if relevant. This
0202    * version simply returns the nominal mass.
0203    */
0204   virtual Energy constituentMass() const { return mass(); }
0205 
0206   /**
0207    * Set the width.
0208    */
0209   Energy width(Energy);
0210 
0211   /**
0212    * Get the width. If no width is specified, it is calculated from
0213    * the lifetime.
0214    */
0215   Energy width() const {
0216     return theWidth >= ZERO ? theWidth :
0217       ( theCTau > Length() ? hbarc/theCTau :
0218     ( theCTau == Length() ? Constants::MaxEnergy : ZERO ) );
0219   }
0220 
0221   /**
0222    * Set the width cut. Both upper and lower cut is set.
0223    */
0224   Energy widthCut(Energy wci) {
0225     widthUpCut(wci);
0226     return widthLoCut(wci);
0227   }
0228 
0229   /**
0230    * Get the width cut.
0231    */
0232   Energy widthCut() const { return max(widthUpCut(), widthLoCut()); }
0233 
0234   /**
0235    * Set the upper width cut.
0236    */
0237   Energy widthUpCut(Energy);
0238 
0239   /**
0240    * Get the upper width cut.
0241    */
0242   Energy widthUpCut() const {
0243     return theWidthUpCut >= ZERO? theWidthUpCut: Constants::MaxEnergy;
0244   }
0245 
0246   /**
0247    * Set the lower width cut.
0248    */
0249   Energy widthLoCut(Energy);
0250 
0251   /**
0252    * Get the lower width cut.
0253    */
0254   Energy widthLoCut() const {
0255     return theWidthLoCut >= ZERO? theWidthLoCut: Constants::MaxEnergy;
0256   }
0257 
0258   /**
0259    * Set the life time cTau.
0260    */
0261   Length cTau(Length);
0262 
0263   /**
0264    * Get the life time cTau cTau. If no life time is specified, it is
0265    * calculated from the width. If the width is also not specified,
0266    * the lifetime is assumed to be zero for ustable particles and
0267    * infinite for stable ones.
0268    */
0269   Length cTau() const {
0270     return theCTau > Length() ? theCTau :
0271       ( theWidth > ZERO ? hbarc/theWidth :
0272     ( stable() ? Constants::MaxLength : Length() ) );
0273   }
0274 
0275   /**
0276    * Return the width to be used when evaluating hard process cross sections.
0277    */
0278   Energy hardProcessWidth() const { 
0279     return 
0280       hardProcessWidthSet ? theHardProcessWidth : width();
0281   }
0282 
0283   /**
0284    * Set the charge. The charge should be given
0285    * in units of e/3 using the PDT::Charge enum.
0286    */
0287   PDT::Charge iCharge(PDT::Charge);
0288 
0289   /**
0290    * Get the charge. The charge is returned in standard units and in
0291    * iCharge the charge is returned in units of e/3.
0292    */
0293   Charge charge() const { return eplus*double(theCharge)/3.0; }
0294 
0295   /**
0296    * Get the charge. The charge is returned in units of e/3.
0297    */
0298   PDT::Charge iCharge() const { return theCharge; }
0299 
0300   /**
0301    * Return true if charged.
0302    */
0303   bool charged() const { return PDT::charged(theCharge); }
0304 
0305   /**
0306    * Return true if positively charged.
0307    */
0308   bool positive() const { return PDT::positive(theCharge); }
0309 
0310   /**
0311    * Return true if negatively charged.
0312    */
0313   bool negative() const { return PDT::negative(theCharge); }
0314 
0315   /**
0316    * Set the spin. The spin should be given as 2J+1 (in units of
0317    * hbar/2) using the PDT::Spin enum.
0318    */
0319   PDT::Spin iSpin(PDT::Spin);
0320 
0321   /**
0322    * Get the spin.The spin is returned in standard units.
0323    */
0324   AngularMomentum spin() const { return hbar_Planck*double(theSpin-1)*0.5; }
0325 
0326   /**
0327    * Get the spin. The spin is returned as 2J+1 in units of hbar/2.
0328    */
0329   PDT::Spin iSpin() const { return theSpin; }
0330 
0331   /**
0332    * Set the colour of the particle in units of PDT::Colour.
0333    */
0334   PDT::Colour iColour(PDT::Colour);
0335 
0336   /**
0337    * Get the colour of the particle in units of PDT::Colour.
0338    */
0339   PDT::Colour iColour() const { return theColour; }
0340 
0341   /**
0342    * Return true if coloured.
0343    */
0344   bool coloured() const { return PDT::coloured(iColour()); }
0345 
0346   /**
0347    * Return true if (\a anti) coloured or colour-octet.
0348    */
0349   bool hasColour(bool anti = false) const {
0350     return anti? hasAntiColour():
0351       ( iColour() == PDT::Colour3 || iColour() == PDT::Colour6 ||
0352     iColour() == PDT::Colour8 );
0353   }
0354 
0355   /**
0356    * Return true if anti coloured or colour-octet.
0357    */
0358   bool hasAntiColour() const {
0359     return iColour() == PDT::Colour3bar || iColour() == PDT::Colour6bar || 
0360       iColour() == PDT::Colour8;
0361   }
0362 
0363   /**
0364    * Return what kind of colour charge this particle carries
0365    */
0366   PDT::ColouredInteraction colouredInteraction() const {
0367     return theColouredInteraction;
0368   }
0369 
0370   /**
0371    * Specify if particle is to be considered stable according to \a
0372    * stab.
0373    */
0374   void stable(bool stab);
0375 
0376   /**
0377    * Return true if particle is to be considered stable. If the decay
0378    * table is empty the function always returns true, even if the
0379    * member variable is false.
0380    */
0381   bool stable() const { return isStable; }
0382 
0383   /**
0384    * Get the pointer to the corresponding anti partner.
0385    */
0386   tPDPtr CC() const { return theAntiPartner; }
0387 
0388   /**
0389    * Specify if the anti partner chould be changed automatically when
0390    * this object is changed according to \a sync.
0391    */
0392   void synchronized(bool sync);
0393 
0394   /**
0395    * Return true if the anti partner chould be changed automatically
0396    * when this object is changed.
0397    */
0398   bool synchronized() const { return syncAnti; }
0399 
0400   /**
0401    * If there is an anti-partner, update this object to have correct
0402    * anti-properties.
0403    */
0404   void synchronize();
0405 
0406   /**
0407    * Set the mass generator object.
0408    */
0409   void massGenerator(tMassGenPtr);
0410 
0411   /**
0412    * Get the mass generator object.
0413    */
0414   tMassGenPtr massGenerator() const { return theMassGenerator; }
0415 
0416   /**
0417    * Set the width generator object.
0418    */
0419   void widthGenerator(tWidthGeneratorPtr);
0420 
0421   /**
0422    * Get the width generator object.
0423    */
0424   tWidthGeneratorPtr widthGenerator() const { return theWidthGenerator; }
0425 
0426   /**
0427    * Specify if the branching ratio of the Particle instances should vary with their
0428    * masses. 
0429    */
0430   void variableRatio(bool varRatio);
0431 
0432   /**
0433    * Return true if the branching ratio should vary with the mass of the Particle
0434    * instance.
0435    */
0436   bool variableRatio() const { return theVariableRatio; }
0437 
0438 public:
0439 
0440 
0441   /** @name Functions used by the persistent I/O system. */
0442   //@{
0443   /**
0444    * Function used to write out object persistently.
0445    * @param os the persistent output stream written to.
0446    */
0447   void persistentOutput(PersistentOStream & os) const;
0448 
0449   /**
0450    * Function used to read in object persistently.
0451    * @param is the persistent input stream read from.
0452    * @param version the version number of the object when written.
0453    */
0454   void persistentInput(PersistentIStream & is, int version);
0455   //@}
0456 
0457   static void Init();
0458 
0459 protected:
0460 
0461   /** @name Clone Methods. */
0462   //@{
0463   /**
0464    * Make a simple clone of this object.
0465    * @return a pointer to the new object.
0466    */
0467   virtual IBPtr clone() const;
0468 
0469   /** Make a clone of this object, possibly modifying the cloned object
0470    * to make it sane.
0471    * @return a pointer to the new object.
0472    */
0473   virtual IBPtr fullclone() const;
0474   //@}
0475 
0476   /**
0477    * Special clone function used by the Repository. Also makes copies
0478    * the decay modes and the anti-partner if it exists and if
0479    * synchronized() is true.
0480    */
0481   virtual PDPtr pdclone() const;
0482 
0483   /**
0484    * Protected constructor only to be used by subclasses or by the
0485    * Create method.
0486    */
0487   ParticleData(PID newId, const string & newPDGName);
0488 
0489   /**
0490    * Read setup info from a standard stream. The following information
0491    * must be supplied in a white-space separated list: PDG number,
0492    * generic name, default mass (GeV), default width (GeV), width cut
0493    * (GeV), the lifetime ctau (mm), the charge, the colour, the spin,
0494    * stable (true) or not (false). Note that if a minus sign is given
0495    * instead of a generic name, the name of the object will be used
0496    * instead.
0497    */
0498   virtual void readSetup(istream & is);
0499 
0500   /**
0501    * Used by subclasses or by the Create method to setup
0502    * anti-relationship.
0503    */
0504   static void antiSetup(const PDPair & pap);
0505 
0506 
0507 protected:
0508 
0509   /** @name Standard Interfaced functions. */
0510   //@{
0511   /**
0512    * Check sanity of the object during the setup phase.
0513    */
0514   virtual void doupdate();
0515 
0516   /**
0517    * Initialize this object after the setup phase before saving an
0518    * EventGenerator to disk.
0519    * @throws InitException if object could not be initialized properly.
0520    */
0521   virtual void doinit();
0522 
0523   /**
0524    * Rebind pointer to other Interfaced objects. Called in the setup phase
0525    * after all objects used in an EventGenerator has been cloned so that
0526    * the pointers will refer to the cloned objects afterwards.
0527    * @param trans a TranslationMap relating the original objects to
0528    * their respective clones.
0529    * @throws RebindException if no cloned object was found for a given
0530    * pointer.
0531    */
0532   virtual void rebind(const TranslationMap & trans)
0533    ;
0534 
0535   /**
0536    * Return a vector of all pointers to Interfaced objects used in this
0537    * object.
0538    * @return a vector of pointers.
0539    */
0540   virtual IVector getReferences();
0541 
0542   /**
0543    * Initialize this object. Called in the run phase just before
0544    * a run begins.
0545    */
0546   virtual void doinitrun();
0547   //@}
0548 
0549 protected:
0550 
0551   /**
0552    * Add a decay mode for this particle.
0553    */
0554   void addDecayMode(tDMPtr);
0555 
0556   /**
0557    * Remove a decay mode for this particle.
0558    */
0559   void removeDecayMode(tDMPtr);
0560 
0561 private:
0562 
0563   /**
0564    * Id number according to the STDHEP/PDG standard.
0565    */
0566   PID theId;
0567 
0568   /**
0569    * Name and Id number according to the STDHEP/PDG standard.
0570    */
0571   string thePDGName;
0572 
0573   /**
0574    * Nominal mass.
0575    */
0576   Energy theMass;
0577 
0578   /**
0579    * Width.
0580    */
0581   Energy theWidth;
0582 
0583   /**
0584    * The mass to be used when evaluating hard process cross sections.
0585    */
0586   Energy theHardProcessMass;
0587 
0588   /**
0589    * True, if a hard process mass has been set.
0590    */
0591   bool hardProcessMassSet;
0592 
0593   /**
0594    * The width to be used when evaluating hard process cross sections.
0595    */
0596   Energy theHardProcessWidth;
0597 
0598   /**
0599    * True, if a hard process width has been set.
0600    */
0601   bool hardProcessWidthSet;
0602 
0603   /**
0604    * Upper width cut.
0605    */
0606   Energy theWidthUpCut;
0607 
0608   /**
0609    * Lower width cut.
0610    */
0611   Energy theWidthLoCut;
0612 
0613   /**
0614    * Lifetime.
0615    */
0616   Length theCTau;
0617 
0618   /**
0619    * Three times the charge.
0620    */
0621   PDT::Charge theCharge;
0622 
0623   /**
0624    * 2 times the spin plus one.
0625    */
0626   PDT::Spin theSpin;
0627 
0628   /**
0629    * The colour for this particle.
0630    */
0631   PDT::Colour theColour;
0632 
0633   /**
0634    * The coloured interaction of this particle
0635    */
0636   PDT::ColouredInteraction theColouredInteraction;
0637 
0638   /**
0639    * The nonabelian interaction of this particle
0640    */
0641 
0642   /**
0643    * A pointer to an object capable to generate a mass for a particle
0644    * of this type.
0645    */
0646   MassGenPtr theMassGenerator;
0647 
0648   /**
0649    * True if the particle is considered stable.
0650    */
0651   bool isStable;
0652 
0653   /**
0654    * A selector of decay modes weighted by the nominal branching
0655    * ratios.
0656    */
0657   DecaySelector theDecaySelector;
0658 
0659   /**
0660    * The set of all decay modes.
0661    */
0662   DecaySet theDecayModes;
0663 
0664   /**
0665    * A pointer to an object capable to generate the branching
0666    * fractions for different decay modes for this particle type. The
0667    * object will be asked to generate branching fractions every time
0668    * the ParticleData object it updated and will modify the branching
0669    * fractions for every particle instance if variableRatio is true.
0670    */
0671   WidthGeneratorPtr theWidthGenerator;
0672 
0673   /**
0674    * Determine whether the branching fractions are allowed to change
0675    * on a particle-by-particle basis.
0676    */
0677   bool theVariableRatio;
0678 
0679   /**
0680    * Pointer to the object corresponding to the antiparticle. Set to
0681    * null if it is its own antiparticle.
0682    */
0683   tPDPtr theAntiPartner;
0684 
0685   /**
0686    * If syncAnti is true all changes to this object will be transfered
0687    * to the antiParticle.
0688    */
0689   bool syncAnti;
0690 
0691   /**
0692    * Helper variable to keep track of the default mass.
0693    */
0694   Energy theDefMass;
0695 
0696   /**
0697    * Helper variable to keep track of the default width.
0698    */
0699   Energy theDefWidth;
0700 
0701   /**
0702    * Helper variable to keep track of the default width cut.
0703    */
0704   Energy theDefCut;
0705 
0706   /**
0707    * Helper variable to keep track of the default lifetime.
0708    */
0709   Length theDefCTau;
0710 
0711   /**
0712    * Helper variable to keep track of the default charge.
0713    */
0714   PDT::Charge theDefCharge;
0715 
0716   /**
0717    * Helper variable to keep track of the default spin.
0718    */
0719   PDT::Spin theDefSpin;
0720 
0721   /**
0722    * Helper variable to keep track of the default colour.
0723    */
0724   PDT::Colour theDefColour;
0725 
0726   /**
0727    * Helper variable to keep track of the default coloured interaction.
0728    */
0729   PDT::ColouredInteraction theDefColouredInteraction;
0730 
0731   /**
0732    * Utility function for the interface.
0733    */
0734   void setMass(Energy);
0735 
0736   /**
0737    * Utility function for the interface.
0738    */
0739   void setHardProcessMass(Energy);
0740 
0741   /**
0742    * Reset the hard process mass
0743    */
0744   string doUnsetHardProcessMass(string);
0745 
0746   /**
0747    * Adjust the nominal mass to the hard process mass if a reshuffling
0748    * is not desirable.
0749    */
0750   string doAdjustNominalMass(string);
0751 
0752   /**
0753    * Utility function for the interface.
0754    */
0755   Energy defMass() const;
0756 
0757   /**
0758    * Utility function for the interface.
0759    */
0760   void setWidth(Energy);
0761 
0762   /**
0763    * Utility function for the interface.
0764    */
0765   void setHardProcessWidth(Energy);
0766 
0767   /**
0768    * Reset the hard process mass
0769    */
0770   string doUnsetHardProcessWidth(string);
0771 
0772   /**
0773    * Utility function for the interface.
0774    */
0775   Energy getWidth() const;
0776 
0777   /**
0778    * Utility function for the interface.
0779    */
0780   Energy defWidth() const;
0781 
0782   /**
0783    * Utility function for the interface.
0784    */
0785   void setCut(Energy);
0786 
0787   /**
0788    * Utility function for the interface.
0789    */
0790   Energy getCut() const;
0791 
0792   /**
0793    * Utility function for the interface.
0794    */
0795   Energy defCut() const;
0796 
0797   /**
0798    * Utility function for the interface.
0799    */
0800   void setUpCut(Energy);
0801 
0802   /**
0803    * Utility function for the interface.
0804    */
0805   Energy getUpCut() const;
0806 
0807   /**
0808    * Utility function for the interface.
0809    */
0810   void setLoCut(Energy);
0811 
0812   /**
0813    * Utility function for the interface.
0814    */
0815   Energy getLoCut() const;
0816 
0817   /**
0818    * Utility function for the interface.
0819    */
0820   void setCTau(Length);
0821 
0822   /**
0823    * Utility function for the interface.
0824    */
0825   Length getCTau() const;
0826 
0827   /**
0828    * Utility function for the interface.
0829    */
0830   Length defCTau() const;
0831 
0832   /**
0833    * Utility function for the interface.
0834    */
0835   void setStable(long);
0836 
0837   /**
0838    * Utility function for the interface.
0839    */
0840   long getStable() const;
0841 
0842   /**
0843    * Utility function for the interface.
0844    */
0845   void setSync(long);
0846 
0847   /**
0848    * Utility function for the interface.
0849    */
0850   long getSync() const;
0851 
0852   /**
0853    * Utility function for the interface.
0854    */
0855   void setVariableRatio(long);
0856 
0857   /**
0858    * Utility function for the interface.
0859    */
0860   long getVariableRatio() const;
0861 
0862   /**
0863    * Utility function for the interface.
0864    */
0865   string doSync(string);
0866 
0867   /**
0868    * Utility function for the interface.
0869    */
0870   void setMassGenerator(MassGenPtr);
0871 
0872   /**
0873    * Utility function for the interface.
0874    */
0875   void setWidthGenerator(WidthGeneratorPtr);
0876 
0877   /**
0878    * Utility function for the interface.
0879    */
0880   void setCharge(int);
0881 
0882   /**
0883    * Utility function for the interface.
0884    */
0885   string ssetCharge(string);
0886 
0887   /**
0888    * Utility function for the interface.
0889    */
0890   int getCharge() const;
0891 
0892   /**
0893    * Utility function for the interface.
0894    */
0895   int defCharge() const;
0896 
0897   /**
0898    * Utility function for the interface.
0899    */
0900   void setSpin(int);
0901 
0902   /**
0903    * Utility function for the interface.
0904    */
0905   int getSpin() const;
0906 
0907   /**
0908    * Utility function for the interface.
0909    */
0910   int defSpin() const;
0911 
0912   /**
0913    * Utility function for the interface.
0914    */
0915   void setColour(long);
0916 
0917   /**
0918    * Utility function for the interface.
0919    */
0920   long getColour() const;
0921 
0922   /**
0923    * Utility function for the interface.
0924    */
0925   long defColour() const;
0926 
0927   /**
0928    * Utility function for the interface.
0929    */
0930   void setColouredInteraction(long);
0931 
0932   /**
0933    * Utility function for the interface.
0934    */
0935   long getColouredInteraction() const;
0936 
0937   /**
0938    * Utility function for the interface.
0939    */
0940   long defColouredInteraction() const;
0941 
0942   /**
0943    * Utility function for the interface.
0944    */
0945   void insDecayModes(DMPtr dm, int);
0946 
0947   /**
0948    * Utility function for the interface.
0949    */
0950   void delDecayModes(int i);
0951 
0952   /**
0953    * Utility function for the interface.
0954    */
0955   vector<DMPtr> getDecayModes() const;
0956 
0957   /**
0958    * Utility function for the interface.
0959    */
0960   string doSelectDecayModes(string);
0961 
0962   /**
0963    * Utility function for the interface.
0964    */
0965   string doPrintDecayModes(string);
0966 
0967   /**
0968    * Describe a concrete class with persistent data.
0969    */
0970   static ClassDescription<ParticleData> initParticleData;
0971 
0972 };
0973 
0974 /** @cond TRAITSPECIALIZATIONS */
0975 
0976 /** This template specialization informs ThePEG about the base classes
0977  *  of ParticleData. */
0978 template <>
0979 struct BaseClassTrait<ParticleData,1>: public ClassTraitsType {
0980   /** Typedef of the first base class of ParticleData. */
0981   typedef Interfaced NthBase;
0982 };
0983 
0984 /** This template specialization informs ThePEG about the name of the
0985  *  ParticleData class. */
0986 template <>
0987 struct ClassTraits<ParticleData>: public ClassTraitsBase<ParticleData> {
0988   /** Return a platform-independent class name */
0989   static string className() { return "ThePEG::ParticleData"; }
0990 };
0991 
0992 /** @endcond */
0993 
0994 }
0995 
0996 #endif /* ThePEG_ParticleData_H */