LCOV - code coverage report
Current view: top level - PYTHIA8/pythia8210dev/include/Pythia8 - ParticleData.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 197 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 138 0.0 %

          Line data    Source code
       1             : // ParticleData.h is a part of the PYTHIA event generator.
       2             : // Copyright (C) 2015 Torbjorn Sjostrand.
       3             : // PYTHIA is licenced under the GNU GPL version 2, see COPYING for details.
       4             : // Please respect the MCnet Guidelines, see GUIDELINES for details.
       5             : 
       6             : // Header file for the classes containing particle data.
       7             : // DecayChannel contains info on a single decay channel.
       8             : // ParticleDataEntry contains info on a single particle species.
       9             : // ParticleData collects info on all particles as a map.
      10             : 
      11             : #ifndef Pythia8_ParticleData_H
      12             : #define Pythia8_ParticleData_H
      13             : 
      14             : #include "Pythia8/Basics.h"
      15             : #include "Pythia8/Info.h"
      16             : #include "Pythia8/PythiaStdlib.h"
      17             : #include "Pythia8/Settings.h"
      18             : #include "Pythia8/StandardModel.h"
      19             : 
      20             : namespace Pythia8 {
      21             : 
      22             : //==========================================================================
      23             : 
      24             : // Forward reference to some classes.
      25             : class ParticleData;
      26             : class ResonanceWidths;
      27             : class Couplings;
      28             : class CoupSUSY;
      29             : class SUSYResonanceWidths;
      30             : 
      31             : //==========================================================================
      32             : 
      33             : // This class holds info on a single decay channel.
      34             : 
      35             : class DecayChannel {
      36             : 
      37             : public:
      38             :   // Constructor.
      39             :   DecayChannel(int onModeIn = 0, double bRatioIn = 0., int meModeIn = 0,
      40             :     int prod0 = 0, int prod1 = 0, int prod2 = 0, int prod3 = 0,
      41             :     int prod4 = 0, int prod5 = 0, int prod6 = 0, int prod7 = 0)
      42           0 :     : onModeSave(onModeIn), bRatioSave(bRatioIn), currentBRSave(0.),
      43           0 :     onShellWidthSave(0.), openSecPos(1.), openSecNeg(1.),
      44           0 :     meModeSave(meModeIn), nProd(0), hasChangedSave(true) {
      45           0 :     prod[0] = prod0; prod[1] = prod1; prod[2] = prod2; prod[3] = prod3;
      46           0 :     prod[4] = prod4; prod[5] = prod5; prod[6] = prod6; prod[7] = prod7;
      47           0 :     for (int j = 0; j < 8; ++j) if (prod[j] != 0 && j == nProd) ++nProd; }
      48             : 
      49             :   // Member functions for input.
      50           0 :   void onMode(int onModeIn) {onModeSave = onModeIn; hasChangedSave = true;}
      51             :   void bRatio(double bRatioIn, bool countAsChanged = true) {
      52           0 :     bRatioSave = bRatioIn; if (countAsChanged) hasChangedSave = true;}
      53           0 :   void rescaleBR(double fac) {bRatioSave *= fac; hasChangedSave = true;}
      54           0 :   void meMode(int meModeIn) {meModeSave = meModeIn; hasChangedSave = true;}
      55           0 :   void multiplicity(int multIn)  {nProd = multIn; hasChangedSave = true;}
      56           0 :   void product(int i, int prodIn) {prod[i] = prodIn; nProd = 0;
      57           0 :     for (int j = 0; j < 8; ++j) if (prod[j] != 0 && j == nProd) ++nProd;
      58           0 :     hasChangedSave = true;}
      59           0 :   void setHasChanged(bool hasChangedIn) {hasChangedSave = hasChangedIn;}
      60             : 
      61             :   // Member functions for output.
      62           0 :   int    onMode()       const {return onModeSave;}
      63           0 :   double bRatio()       const {return bRatioSave;}
      64           0 :   int    meMode()       const {return meModeSave;}
      65           0 :   int    multiplicity() const {return nProd;}
      66           0 :   int    product(int i) const {return (i >= 0 && i < nProd) ? prod[i] : 0;}
      67           0 :   bool   hasChanged()   const { return hasChangedSave;}
      68             : 
      69             :   // Check for presence of particles anywhere in decay list.
      70             :   bool   contains(int id1) const;
      71             :   bool   contains(int id1, int id2) const;
      72             :   bool   contains(int id1, int id2, int id3) const;
      73             : 
      74             :   // Input/output for current selection of decay modes.
      75             :   // Takes into account on/off switches and dynamic width for resonances.
      76           0 :   void   currentBR(double currentBRIn) {currentBRSave = currentBRIn;}
      77           0 :   double currentBR() const {return currentBRSave;}
      78             : 
      79             :   // Input/output for nominal partial width; used by resonances.
      80             :   void   onShellWidth(double onShellWidthIn) {
      81           0 :          onShellWidthSave = onShellWidthIn;}
      82           0 :   double onShellWidth() const {return onShellWidthSave;}
      83           0 :   void   onShellWidthFactor(double factor) {onShellWidthSave *= factor;}
      84             : 
      85             :   // Input/output for fraction of secondary open widths; used by resonances.
      86             :   void   openSec(int idSgn, double openSecIn) {
      87           0 :     if (idSgn > 0) openSecPos = openSecIn; else openSecNeg = openSecIn;}
      88             :   double openSec(int idSgn) const {
      89           0 :     return (idSgn > 0) ? openSecPos : openSecNeg;}
      90             : 
      91             : private:
      92             : 
      93             :   // Decay channel info.
      94             :   int    onModeSave;
      95             :   double bRatioSave, currentBRSave, onShellWidthSave, openSecPos,
      96             :          openSecNeg;
      97             :   int    meModeSave, nProd, prod[8];
      98             :   bool   hasChangedSave;
      99             : 
     100             : };
     101             : 
     102             : //==========================================================================
     103             : 
     104             : // This class holds info on a single particle species.
     105             : 
     106           0 : class ParticleDataEntry {
     107             : 
     108             : public:
     109             : 
     110             :   // Constructors: for antiparticle exists or not.
     111           0 :   ParticleDataEntry(int idIn = 0, string nameIn = " ",
     112             :     int spinTypeIn = 0, int chargeTypeIn = 0, int colTypeIn = 0,
     113             :     double m0In = 0., double mWidthIn = 0., double mMinIn = 0.,
     114           0 :     double mMaxIn = 0., double tau0In = 0.) : idSave(abs(idIn)),
     115           0 :     nameSave(nameIn), antiNameSave("void"),  spinTypeSave(spinTypeIn),
     116           0 :     chargeTypeSave(chargeTypeIn), colTypeSave(colTypeIn), m0Save(m0In),
     117           0 :     mWidthSave (mWidthIn), mMinSave(mMinIn), mMaxSave(mMaxIn),
     118           0 :     tau0Save(tau0In), hasAntiSave(false), hasChangedSave(true),
     119           0 :     resonancePtr(0) {setDefaults();}
     120           0 :   ParticleDataEntry(int idIn, string nameIn, string antiNameIn,
     121             :     int spinTypeIn = 0, int chargeTypeIn = 0, int colTypeIn = 0,
     122             :     double m0In = 0., double mWidthIn = 0., double mMinIn = 0.,
     123           0 :     double mMaxIn = 0., double tau0In = 0.) : idSave(abs(idIn)),
     124           0 :     nameSave(nameIn), antiNameSave(antiNameIn), spinTypeSave(spinTypeIn),
     125           0 :     chargeTypeSave(chargeTypeIn), colTypeSave(colTypeIn), m0Save(m0In),
     126           0 :     mWidthSave (mWidthIn), mMinSave(mMinIn), mMaxSave(mMaxIn),
     127           0 :     tau0Save(tau0In), hasAntiSave(true), hasChangedSave(true),
     128           0 :     resonancePtr(0) {setDefaults();
     129           0 :     if (toLower(antiNameIn) == "void") hasAntiSave = false;}
     130             : 
     131             :   // Destructor: delete any ResonanceWidths object.
     132             :   ~ParticleDataEntry();
     133             : 
     134             :   // Initialization of some particle flags.
     135             :   void setDefaults();
     136             : 
     137             :   // Store pointer to whole particle data table/database.
     138             :   void initPtr( ParticleData* particleDataPtrIn) {
     139           0 :     particleDataPtr = particleDataPtrIn;}
     140             : 
     141             :   // Reset all the properties of an existing particle.
     142             :   void setAll(string nameIn, string antiNameIn, int spinTypeIn = 0,
     143             :     int chargeTypeIn = 0, int colTypeIn = 0, double m0In = 0.,
     144             :     double mWidthIn = 0., double mMinIn = 0., double mMaxIn = 0.,
     145             :     double tau0In = 0.)
     146           0 :     {nameSave = nameIn; antiNameSave = antiNameIn; hasAntiSave = true;
     147           0 :     if (toLower(antiNameIn) == "void") hasAntiSave = false;
     148           0 :     spinTypeSave = spinTypeIn; chargeTypeSave = chargeTypeIn;
     149           0 :     colTypeSave = colTypeIn; m0Save = m0In; mWidthSave = mWidthIn;
     150           0 :     mMinSave = mMinIn; mMaxSave = mMaxIn; tau0Save = tau0In;
     151           0 :     setDefaults(); hasChangedSave = true;}
     152             : 
     153             :   // Change current values one at a time (or set if not set before).
     154             :   // (Must use set here since else name+signature clash with get methods.)
     155           0 :   void setName(string nameIn) {nameSave = nameIn; hasChangedSave = true;}
     156           0 :   void setAntiName(string antiNameIn) {antiNameSave = antiNameIn;
     157           0 :     hasChangedSave = true;}
     158           0 :   void setNames(string nameIn, string antiNameIn) {nameSave = nameIn;
     159           0 :     antiNameSave = antiNameIn; hasAntiSave = true; if (toLower(antiNameIn)
     160           0 :     == "void") hasAntiSave = false; hasChangedSave = true;}
     161           0 :   void setSpinType(int spinTypeIn) {spinTypeSave = spinTypeIn;
     162           0 :     hasChangedSave = true;}
     163           0 :   void setChargeType(int chargeTypeIn) {chargeTypeSave = chargeTypeIn;
     164           0 :     hasChangedSave = true;}
     165           0 :   void setColType(int colTypeIn) {colTypeSave = colTypeIn;
     166           0 :     hasChangedSave = true;}
     167           0 :   void setM0(double m0In) {m0Save = m0In; setConstituentMass();
     168           0 :     hasChangedSave = true;}
     169             :   void setMWidth(double mWidthIn, bool countAsChanged = true) {
     170           0 :     mWidthSave = mWidthIn; if (countAsChanged) hasChangedSave = true;}
     171           0 :   void setMMin(double mMinIn) {mMinSave = mMinIn; hasChangedSave = true;}
     172           0 :   void setMMax(double mMaxIn) {mMaxSave = mMaxIn; hasChangedSave = true;}
     173             :   // Special options specifically when cutting wings of Breit-Wigners.
     174           0 :   void setMMinNoChange(double mMinIn) {mMinSave = mMinIn;}
     175           0 :   void setMMaxNoChange(double mMaxIn) {mMaxSave = mMaxIn;}
     176           0 :   void setTau0(double tau0In) {tau0Save = tau0In; hasChangedSave = true;}
     177           0 :   void setIsResonance(bool isResonanceIn) {isResonanceSave = isResonanceIn;
     178           0 :     hasChangedSave = true;}
     179             :   void setMayDecay(bool mayDecayIn, bool countAsChanged = true) {
     180           0 :     mayDecaySave = mayDecayIn; if (countAsChanged) hasChangedSave = true;}
     181             :   void setDoExternalDecay(bool doExternalDecayIn)
     182           0 :     {doExternalDecaySave = doExternalDecayIn; hasChangedSave = true;}
     183           0 :   void setIsVisible(bool isVisibleIn) {isVisibleSave = isVisibleIn;
     184           0 :     hasChangedSave = true;}
     185           0 :   void setDoForceWidth(bool doForceWidthIn) {doForceWidthSave = doForceWidthIn;
     186           0 :     hasChangedSave = true;}
     187           0 :   void setHasChanged(bool hasChangedIn) {hasChangedSave = hasChangedIn;
     188           0 :     for (int i = 0; i < int(channels.size()); ++i)
     189           0 :       channels[i].setHasChanged(hasChangedIn);}
     190             : 
     191             :   // Give back current values.
     192           0 :   int    id()                     const { return idSave; }
     193           0 :   bool   hasAnti()                const { return hasAntiSave; }
     194             :   string name(int idIn = 1)       const {
     195           0 :          return (idIn > 0) ? nameSave : antiNameSave; }
     196           0 :   int    spinType() const {return spinTypeSave; }
     197             :   int    chargeType(int idIn = 1) const {
     198           0 :          return (idIn > 0) ? chargeTypeSave : -chargeTypeSave; }
     199             :   double charge(int idIn = 1)     const {
     200           0 :          return (idIn > 0) ? chargeTypeSave / 3. : -chargeTypeSave / 3.; }
     201             :   int    colType(int idIn = 1)    const {
     202           0 :          if (colTypeSave == 2) return colTypeSave;
     203           0 :          return (idIn > 0) ? colTypeSave : -colTypeSave; }
     204           0 :   double m0()                     const { return m0Save; }
     205           0 :   double mWidth()                 const { return mWidthSave; }
     206           0 :   double mMin()                   const { return mMinSave; }
     207           0 :   double mMax()                   const { return mMaxSave; }
     208             :   double m0Min()                  const {
     209           0 :          return (modeBWnow == 0) ? m0Save : mMinSave; }
     210             :   double m0Max()                  const {
     211           0 :          return (modeBWnow == 0) ? m0Save : mMaxSave; }
     212           0 :   double tau0()                   const { return tau0Save; }
     213           0 :   bool   isResonance()            const { return isResonanceSave; }
     214           0 :   bool   mayDecay()               const { return mayDecaySave; }
     215           0 :   bool   doExternalDecay()        const { return doExternalDecaySave; }
     216           0 :   bool   isVisible()              const { return isVisibleSave; }
     217           0 :   bool   doForceWidth()           const { return doForceWidthSave; }
     218           0 :   bool   hasChanged()     const { if (hasChangedSave) return true;
     219           0 :          for (int i = 0; i < int(channels.size()); ++i)
     220           0 :          if (channels[i].hasChanged()) return true; return false;}
     221             : 
     222             :   // Set and give back several mass-related quantities.
     223             :   void   initBWmass();
     224           0 :   double constituentMass()        const { return constituentMassSave; }
     225             :   double mSel();
     226             :   double mRun(double mH);
     227             : 
     228             :   // Give back other quantities.
     229           0 :   bool   useBreitWigner() const { return (modeBWnow > 0); }
     230           0 :   bool   canDecay()       const { return (channels.size() > 0);}
     231           0 :   bool   isLepton()       const { return (idSave > 10 && idSave < 19);}
     232           0 :   bool   isQuark()        const { return (idSave != 0 && idSave < 9);}
     233           0 :   bool   isGluon()        const { return (idSave == 21);}
     234           0 :   bool   isDiquark()      const { return (idSave > 1000 && idSave < 10000
     235           0 :          && (idSave/10)%10 == 0);}
     236           0 :   bool   isParton()       const { return ( idSave == 21
     237           0 :     || (idSave != 0 && idSave < 6)
     238           0 :     || (idSave > 1000 && idSave < 5510 && (idSave/10)%10 == 0) );}
     239             :   bool   isHadron()       const;
     240             :   bool   isMeson()        const;
     241             :   bool   isBaryon()       const;
     242             : 
     243             :   // Intermediate octet ccbar or bbar states in colour-octet model.
     244           0 :   bool   isOctetHadron()  const {return idSave >= 9940000
     245           0 :       && idSave < 9960000; }
     246             :   int    heaviestQuark(int idIn = 1)    const;
     247             :   int    baryonNumberType(int idIn = 1) const;
     248             : 
     249             :   // Reset to empty decay table.
     250           0 :   void clearChannels() {channels.resize(0);}
     251             : 
     252             :   // Add a decay channel to the decay table.
     253             :   void addChannel(int onMode = 0, double bRatio = 0., int meMode = 0,
     254             :     int prod0 = 0, int prod1 = 0, int prod2 = 0, int prod3 = 0,
     255             :     int prod4 = 0, int prod5 = 0, int prod6 = 0, int prod7 = 0) {
     256           0 :     channels.push_back( DecayChannel( onMode, bRatio, meMode, prod0,
     257           0 :     prod1, prod2, prod3, prod4, prod5, prod6, prod7) ); }
     258             : 
     259             :   // Decay table size.
     260           0 :   int sizeChannels() const {return channels.size();}
     261             : 
     262             :   // Gain access to a channel in the decay table.
     263           0 :   DecayChannel& channel(int i){return channels[i];}
     264             :   const DecayChannel& channel(int i) const {return channels[i];}
     265             : 
     266             :   // Rescale sum of branching ratios to unity.
     267             :   void rescaleBR(double newSumBR = 1.);
     268             : 
     269             :   // Random choice of decay channel according to branching ratios.
     270             :   bool preparePick(int idSgn, double mHat = 0., int idInFlav = 0);
     271             :   DecayChannel& pickChannel();
     272             : 
     273             :   // Access methods stored in ResonanceWidths.
     274             :   void   setResonancePtr(ResonanceWidths* resonancePtrIn);
     275           0 :   ResonanceWidths* getResonancePtr() {return resonancePtr;}
     276             :   void   resInit(Info* infoPtrIn, Settings* settingsPtrIn,
     277             :     ParticleData* particleDataPtrIn, Couplings* couplingsPtrIn);
     278             :   double resWidth(int idSgn, double mHat, int idIn = 0,
     279             :     bool openOnly = false, bool setBR = false);
     280             :   double resWidthOpen(int idSgn, double mHat, int idIn = 0);
     281             :   double resWidthStore(int idSgn, double mHat, int idIn = 0);
     282             :   double resOpenFrac(int idSgn);
     283             :   double resWidthRescaleFactor();
     284             :   double resWidthChan(double mHat, int idAbs1 = 0, int idAbs2 = 0);
     285             : 
     286             : private:
     287             : 
     288             :   // Constants: could only be changed in the code itself.
     289             :   static const int    INVISIBLENUMBER, INVISIBLETABLE[52], KNOWNNOWIDTH[3];
     290             :   static const double MAXTAU0FORDECAY,MINMASSRESONANCE, NARROWMASS,
     291             :                       CONSTITUENTMASSTABLE[10];
     292             : 
     293             :   // Particle data.
     294             :   int    idSave;
     295             :   string nameSave, antiNameSave;
     296             :   int    spinTypeSave, chargeTypeSave, colTypeSave;
     297             :   double m0Save, mWidthSave, mMinSave, mMaxSave, tau0Save,
     298             :          constituentMassSave;
     299             :   bool   hasAntiSave, isResonanceSave, mayDecaySave, doExternalDecaySave,
     300             :          isVisibleSave, doForceWidthSave, hasChangedSave;
     301             : 
     302             :   // Extra data for mass selection according to a Breit-Wigner.
     303             :   int    modeBWnow;
     304             :   double atanLow, atanDif, mThr;
     305             : 
     306             :   // A vector containing all the decay channels of the particle.
     307             :   vector<DecayChannel> channels;
     308             : 
     309             :   // Summed branching ratio of currently open channels.
     310             :   double currentBRSum;
     311             : 
     312             :   // Pointer to ResonanceWidths object; only used for some particles.
     313             :   ResonanceWidths* resonancePtr;
     314             : 
     315             :   // Pointer to the full particle data table.
     316             :   ParticleData* particleDataPtr;
     317             : 
     318             :   // Set constituent mass.
     319             :   void setConstituentMass();
     320             : 
     321             :   // Useful functions for string handling.
     322           0 :   string toLower(const string& nameConv) { string temp(nameConv);
     323           0 :     for (int i = 0; i < int(temp.length()); ++i) temp[i] = tolower(temp[i]);
     324           0 :     return temp; }
     325             : 
     326             : };
     327             : 
     328             : //==========================================================================
     329             : 
     330             : // This class holds a map of all ParticleDataEntries.
     331             : 
     332           0 : class ParticleData {
     333             : 
     334             : public:
     335             : 
     336             :   // Constructor.
     337           0 :   ParticleData() : infoPtr(0), settingsPtr(0), rndmPtr(0), couplingsPtr(0),
     338           0 :     particlePtr(0), isInit(false), readingFailedSave(false) {}
     339             : 
     340             :   // Initialize pointers.
     341             :   void initPtr(Info* infoPtrIn, Settings* settingsPtrIn, Rndm* rndmPtrIn,
     342           0 :     Couplings* couplingsPtrIn) {infoPtr = infoPtrIn;
     343           0 :     settingsPtr = settingsPtrIn; rndmPtr = rndmPtrIn;
     344           0 :     couplingsPtr = couplingsPtrIn;}
     345             : 
     346             :   // Read in database from specific file.
     347             :   bool init(string startFile = "../xmldoc/ParticleData.xml") {
     348           0 :     initCommon(); return readXML(startFile);}
     349             : 
     350             :   // Overwrite existing database by reading from specific file.
     351             :   bool reInit(string startFile, bool xmlFormat = true) { initCommon();
     352             :     return (xmlFormat) ? readXML(startFile) : readFF(startFile);}
     353             : 
     354             :   // Initialize pointers, normal Breit-Wigners and special resonances.
     355             :   void initWidths(vector<ResonanceWidths*> resonancePtrs);
     356             : 
     357             :   // Read or list whole (or part of) database from/to an XML file.
     358             :   bool readXML(string inFile, bool reset = true) ;
     359             :   void listXML(string outFile);
     360             : 
     361             :   // Read or list whole (or part of) database from/to a free format file.
     362             :   bool readFF(string inFile, bool reset = true) ;
     363             :   void listFF(string outFile);
     364             : 
     365             :   // Read in one update from a single line.
     366             :   bool readString(string lineIn, bool warn = true, ostream& os = cout) ;
     367             : 
     368             :   // Keep track whether any readings have failed, invalidating run setup.
     369           0 :   bool readingFailed() {return readingFailedSave;}
     370             : 
     371             :   // Print out table of whole database, or of only part of it.
     372           0 :   void listAll(ostream& os = cout) {list(false, true, os);}
     373             :   void listChanged(ostream& os = cout) {list(true, false, os);}
     374             :   void listChanged(bool changedRes, ostream& os = cout) {
     375           0 :     list(true, changedRes, os);}
     376             :   void list(bool changedOnly = false, bool changedRes = true,
     377             :     ostream& os = cout);
     378             : 
     379             :   // Print out specified particles.
     380           0 :   void list(int idList, ostream& os = cout) {vector<int> idListTemp;
     381           0 :     idListTemp.push_back(idList); list( idListTemp, os);}
     382             :   void list(vector<int> idList, ostream& os = cout);
     383             : 
     384             :   // Check that table makes sense, especially for decays.
     385             :   void checkTable(ostream& os = cout) {checkTable(1, os);};
     386             :   void checkTable(int verbosity, ostream& os = cout) ;
     387             : 
     388             :   // Add new entry.
     389             :   void addParticle(int idIn, string nameIn = " ", int spinTypeIn = 0,
     390             :     int chargeTypeIn = 0, int colTypeIn = 0, double m0In = 0.,
     391             :     double mWidthIn = 0., double mMinIn = 0., double mMaxIn = 0.,
     392           0 :     double tau0In = 0.) { pdt[abs(idIn)] = ParticleDataEntry(idIn,
     393           0 :     nameIn, spinTypeIn, chargeTypeIn, colTypeIn, m0In, mWidthIn,
     394           0 :     mMinIn, mMaxIn, tau0In); pdt[abs(idIn)].initPtr(this); }
     395             :   void addParticle(int idIn, string nameIn, string antiNameIn,
     396             :     int spinTypeIn = 0, int chargeTypeIn = 0, int colTypeIn = 0,
     397             :     double m0In = 0., double mWidthIn = 0., double mMinIn = 0.,
     398           0 :     double mMaxIn = 0., double tau0In = 0.) { pdt[abs(idIn)]
     399           0 :     = ParticleDataEntry(idIn, nameIn, antiNameIn, spinTypeIn,
     400             :     chargeTypeIn, colTypeIn, m0In, mWidthIn, mMinIn, mMaxIn, tau0In);
     401           0 :     pdt[abs(idIn)].initPtr(this); }
     402             : 
     403             :   // Reset all the properties of an entry in one go.
     404             :   void setAll(int idIn, string nameIn, string antiNameIn,
     405             :     int spinTypeIn = 0, int chargeTypeIn = 0, int colTypeIn = 0,
     406             :     double m0In = 0., double mWidthIn = 0., double mMinIn = 0.,
     407           0 :     double mMaxIn = 0.,double tau0In = 0.) { if (isParticle(idIn))
     408           0 :     pdt[abs(idIn)].setAll( nameIn, antiNameIn, spinTypeIn, chargeTypeIn,
     409           0 :     colTypeIn, m0In, mWidthIn, mMinIn, mMaxIn, tau0In); }
     410             : 
     411             :   // Query existence of an entry.
     412             :   bool isParticle(int idIn) {
     413           0 :     if (pdt.find(abs(idIn)) == pdt.end()) return false;
     414           0 :     if (idIn > 0 || pdt[abs(idIn)].hasAnti()) return true;
     415           0 :     return false; }
     416             : 
     417             :   // Return the id of the sequentially next particle stored in table.
     418             :   int nextId(int idIn) ;
     419             : 
     420             :   // Change current values one at a time (or set if not set before).
     421             :   void name(int idIn, string nameIn) {
     422           0 :     if (isParticle(idIn)) pdt[abs(idIn)].setName(nameIn); }
     423             :   void antiName(int idIn, string antiNameIn) {
     424             :     if (isParticle(idIn)) pdt[abs(idIn)].setAntiName(antiNameIn); }
     425             :   void names(int idIn, string nameIn, string antiNameIn) {
     426           0 :     if (isParticle(idIn)) pdt[abs(idIn)].setNames(nameIn, antiNameIn); }
     427             :   void spinType(int idIn, int spinTypeIn) {
     428           0 :     if (isParticle(idIn)) pdt[abs(idIn)].setSpinType(spinTypeIn); }
     429             :   void chargeType(int idIn, int chargeTypeIn) {
     430             :     if (isParticle(idIn)) pdt[abs(idIn)].setChargeType(chargeTypeIn); }
     431             :   void colType(int idIn, int colTypeIn) {
     432             :     if (isParticle(idIn)) pdt[abs(idIn)].setColType(colTypeIn); }
     433             :   void m0(int idIn, double m0In) {
     434           0 :     if (isParticle(idIn)) pdt[abs(idIn)].setM0(m0In); }
     435             :   void mWidth(int idIn, double mWidthIn) {
     436           0 :     if (isParticle(idIn)) pdt[abs(idIn)].setMWidth(mWidthIn); }
     437             :   void mMin(int idIn, double mMinIn) {
     438           0 :     if (isParticle(idIn)) pdt[abs(idIn)].setMMin(mMinIn); }
     439             :   void mMax(int idIn, double mMaxIn) {
     440           0 :     if (isParticle(idIn)) pdt[abs(idIn)].setMMax(mMaxIn); }
     441             :   void tau0(int idIn, double tau0In) {
     442           0 :     if (isParticle(idIn)) pdt[abs(idIn)].setTau0(tau0In); }
     443             :   void isResonance(int idIn, bool isResonanceIn) {
     444           0 :     if (isParticle(idIn)) pdt[abs(idIn)].setIsResonance(isResonanceIn); }
     445             :   void mayDecay(int idIn, bool mayDecayIn) {
     446           0 :     if (isParticle(idIn)) pdt[abs(idIn)].setMayDecay(mayDecayIn); }
     447             :   void doExternalDecay(int idIn, bool doExternalDecayIn) {
     448           0 :     if (isParticle(idIn))
     449           0 :     pdt[abs(idIn)].setDoExternalDecay(doExternalDecayIn); }
     450             :   void isVisible(int idIn, bool isVisibleIn) {
     451             :     if (isParticle(idIn)) pdt[abs(idIn)].setIsVisible(isVisibleIn); }
     452             :   void doForceWidth(int idIn, bool doForceWidthIn) {
     453             :     if (isParticle(idIn)) pdt[abs(idIn)].setDoForceWidth(doForceWidthIn); }
     454             :   void hasChanged(int idIn, bool hasChangedIn) {
     455             :     if (isParticle(idIn)) pdt[abs(idIn)].setHasChanged(hasChangedIn); }
     456             : 
     457             :   // Give back current values.
     458             :   bool hasAnti(int idIn) {
     459           0 :     return isParticle(idIn) ? pdt[abs(idIn)].hasAnti() : false ; }
     460             :   string name(int idIn) {
     461           0 :     return (isParticle(abs(idIn))) ? pdt[abs(idIn)].name(idIn) : " "; }
     462             :   int spinType(int idIn) {
     463           0 :     return isParticle(idIn) ? pdt[abs(idIn)].spinType() : 0 ; }
     464             :   int chargeType(int idIn) {
     465           0 :     return isParticle(idIn) ? pdt[abs(idIn)].chargeType(idIn) : 0 ; }
     466             :   double charge(int idIn) {
     467           0 :     return isParticle(idIn) ? pdt[abs(idIn)].charge(idIn) : 0 ; }
     468             :   int colType(int idIn) {
     469           0 :     return isParticle(idIn) ? pdt[abs(idIn)].colType(idIn) : 0 ; }
     470             :   double m0(int idIn) {
     471           0 :     return isParticle(idIn) ? pdt[abs(idIn)].m0() : 0. ; }
     472             :   double mWidth(int idIn) {
     473           0 :     return isParticle(idIn) ? pdt[abs(idIn)].mWidth() : 0. ; }
     474             :   double mMin(int idIn) {
     475           0 :     return isParticle(idIn) ? pdt[abs(idIn)].mMin() : 0. ; }
     476             :   double m0Min(int idIn) {
     477           0 :     return isParticle(idIn) ? pdt[abs(idIn)].m0Min() : 0. ; }
     478             :   double mMax(int idIn) {
     479           0 :     return isParticle(idIn) ? pdt[abs(idIn)].mMax() : 0. ; }
     480             :   double m0Max(int idIn) {
     481           0 :     return isParticle(idIn) ? pdt[abs(idIn)].m0Max() : 0. ; }
     482             :   double tau0(int idIn) {
     483           0 :     return isParticle(idIn) ? pdt[abs(idIn)].tau0() : 0. ; }
     484             :   bool isResonance(int idIn) {
     485           0 :     return isParticle(idIn) ? pdt[abs(idIn)].isResonance() : false ; }
     486             :   bool mayDecay(int idIn) {
     487             :     return isParticle(idIn) ? pdt[abs(idIn)].mayDecay() : false ; }
     488             :   bool doExternalDecay(int idIn) {
     489             :     return isParticle(idIn) ? pdt[abs(idIn)].doExternalDecay() : false ; }
     490             :   bool isVisible(int idIn) {
     491             :     return isParticle(idIn) ? pdt[abs(idIn)].isVisible() : false ; }
     492             :   bool doForceWidth(int idIn) {
     493             :     return isParticle(idIn) ? pdt[abs(idIn)].doForceWidth() : false ; }
     494             :   bool hasChanged(int idIn) {
     495             :     return isParticle(idIn) ? pdt[abs(idIn)].hasChanged() : false ; }
     496             : 
     497             :   // Give back special mass-related quantities.
     498             :   bool useBreitWigner(int idIn) {
     499           0 :     return isParticle(idIn) ? pdt[abs(idIn)].useBreitWigner() : false ; }
     500             :   double constituentMass(int idIn) {
     501           0 :     return isParticle(idIn) ? pdt[abs(idIn)].constituentMass() : 0. ; }
     502             :   double mSel(int idIn) {
     503           0 :     return isParticle(idIn) ? pdt[abs(idIn)].mSel() : 0. ; }
     504             :   double mRun(int idIn, double mH) {
     505           0 :     return isParticle(idIn) ? pdt[abs(idIn)].mRun(mH) : 0. ; }
     506             : 
     507             :   // Give back other quantities.
     508             :   bool canDecay(int idIn) {
     509             :     return isParticle(idIn) ? pdt[abs(idIn)].canDecay() : false ; }
     510             :   bool isLepton(int idIn) {
     511           0 :     return isParticle(idIn) ? pdt[abs(idIn)].isLepton() : false ; }
     512             :   bool isQuark(int idIn) {
     513             :     return isParticle(idIn) ? pdt[abs(idIn)].isQuark() : false ; }
     514             :   bool isGluon(int idIn) {
     515             :     return isParticle(idIn) ? pdt[abs(idIn)].isGluon() : false ; }
     516             :   bool isDiquark(int idIn) {
     517             :     return isParticle(idIn) ? pdt[abs(idIn)].isDiquark() : false ; }
     518             :   bool isParton(int idIn) {
     519             :     return isParticle(idIn) ? pdt[abs(idIn)].isParton() : false ; }
     520             :   bool isHadron(int idIn) {
     521             :     return isParticle(idIn) ? pdt[abs(idIn)].isHadron() : false ; }
     522             :   bool isMeson(int idIn) {
     523             :     return isParticle(idIn) ? pdt[abs(idIn)].isMeson() : false ; }
     524             :   bool isBaryon(int idIn) {
     525             :     return isParticle(idIn) ? pdt[abs(idIn)].isBaryon() : false ; }
     526             :   bool isOctetHadron(int idIn) {
     527           0 :     return isParticle(idIn) ? pdt[abs(idIn)].isOctetHadron() : false ; }
     528             :   int heaviestQuark(int idIn) {
     529           0 :     return isParticle(idIn) ? pdt[abs(idIn)].heaviestQuark(idIn) : 0 ; }
     530             :   int baryonNumberType(int idIn) {
     531           0 :     return isParticle(idIn) ? pdt[abs(idIn)].baryonNumberType(idIn) : 0 ; }
     532             : 
     533             :   // Change branching ratios.
     534             :   void rescaleBR(int idIn, double newSumBR = 1.) {
     535             :     if (isParticle(idIn)) pdt[abs(idIn)].rescaleBR(newSumBR); }
     536             : 
     537             :   // Access methods stored in ResonanceWidths.
     538             :   void setResonancePtr(int idIn, ResonanceWidths* resonancePtrIn) {
     539           0 :     if (isParticle(idIn)) pdt[abs(idIn)].setResonancePtr( resonancePtrIn);}
     540           0 :   void resInit(int idIn) { if (isParticle(idIn))
     541           0 :     pdt[abs(idIn)].resInit(infoPtr, settingsPtr, this, couplingsPtr);}
     542             :   double resWidth(int idIn, double mHat, int idInFlav = 0,
     543             :     bool openOnly = false, bool setBR = false) {
     544             :     return isParticle(idIn) ? pdt[abs(idIn)].resWidth(idIn, mHat,
     545             :     idInFlav, openOnly, setBR) : 0.;}
     546             :   double resWidthOpen(int idIn, double mHat, int idInFlav = 0) {
     547             :     return isParticle(idIn) ? pdt[abs(idIn)].resWidthOpen(idIn, mHat,
     548             :     idInFlav) : 0.;}
     549             :   double resWidthStore(int idIn, double mHat, int idInFlav = 0) {
     550             :     return isParticle(idIn) ? pdt[abs(idIn)].resWidthStore(idIn, mHat,
     551             :     idInFlav) : 0.;}
     552             :   double resOpenFrac(int id1In, int id2In = 0, int id3In = 0);
     553             :   double resWidthRescaleFactor(int idIn) { return isParticle(idIn)
     554             :     ? pdt[abs(idIn)].resWidthRescaleFactor() : 0.;}
     555             :   double resWidthChan(int idIn, double mHat, int idAbs1 = 0,
     556           0 :     int idAbs2 = 0) { return isParticle(idIn)
     557           0 :     ? pdt[abs(idIn)].resWidthChan( mHat, idAbs1, idAbs2) : 0.;}
     558             : 
     559             :   // Return pointer to entry.
     560             :   ParticleDataEntry* particleDataEntryPtr(int idIn) {
     561           0 :     return (isParticle(idIn)) ? &pdt[abs(idIn)] : &pdt[0]; }
     562             : 
     563             : private:
     564             : 
     565             :   // Common data, accessible for the individual particles.
     566             :   int    modeBreitWigner;
     567             :   double maxEnhanceBW, mQRun[7], Lambda5Run;
     568             : 
     569             :   // The individual particle need access to the full database.
     570             :   friend class ParticleDataEntry;
     571             : 
     572             :   // Pointer to various information on the generation.
     573             :   Info*     infoPtr;
     574             : 
     575             :   // Pointer to the settings database.
     576             :   Settings* settingsPtr;
     577             : 
     578             :   // Pointer to the random number generator.
     579             :   Rndm*     rndmPtr;
     580             : 
     581             :   // Pointer to Standard Model couplings.
     582             :   Couplings*   couplingsPtr;
     583             : 
     584             :   // All particle data stored in a map.
     585             :   map<int, ParticleDataEntry> pdt;
     586             : 
     587             :   // Pointer to current particle (e.g. when reading decay channels).
     588             :   ParticleDataEntry* particlePtr;
     589             : 
     590             :   // Flag that initialization has been performed; whether any failures.
     591             :   bool   isInit, readingFailedSave;
     592             : 
     593             :   // Method for common setting of particle-specific info.
     594             :   void   initCommon();
     595             : 
     596             :   // Useful functions for string handling.
     597           0 :   string toLower(const string& nameConv) { string temp(nameConv);
     598           0 :     for (int i = 0; i < int(temp.length()); ++i) temp[i] = tolower(temp[i]);
     599           0 :     return temp; }
     600           0 :   bool   boolString(string tag) { string tagLow = toLower(tag);
     601           0 :     return ( tagLow == "true" || tagLow == "1" || tagLow == "on"
     602           0 :     || tagLow == "yes" || tagLow == "ok" ); }
     603             : 
     604             :   // Extract XML value following XML attribute.
     605             :   string attributeValue(string line, string attribute);
     606             :   bool   boolAttributeValue(string line, string attribute);
     607             :   int    intAttributeValue(string line, string attribute);
     608             :   double doubleAttributeValue(string line, string attribute);
     609             : 
     610             : };
     611             : 
     612             : //==========================================================================
     613             : 
     614             : } // end namespace Pythia8
     615             : 
     616             : #endif // Pythia8_ParticleData_H

Generated by: LCOV version 1.11