Coverity 21239
[u/mrichter/AliRoot.git] / PYTHIA8 / pythia8175 / include / PartonSystems.h
1 // PartonSystems.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2013 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 // This file contains auxiliary classes for the parton-level processes.
7 // PartonSystem contains info on a single partonic subcollision.
8 // PartonSystems describes the set of subcollisions in the whole event.
9
10 #ifndef Pythia8_PartonSystems_H
11 #define Pythia8_PartonSystems_H
12
13 #include "PythiaStdlib.h"
14
15 namespace Pythia8 {
16  
17 //==========================================================================
18
19 // The PartonSystem class contains info on an individual singlet.
20 // Only to be used inside PartonSystems, so no private members. 
21
22 class PartonSystem {
23   
24 public:
25
26   // Constructors.
27   PartonSystem() : iInA(0), iInB(0), sHat(0.), pTHat(0.) {iOut.reserve(10);}
28
29   // Stored quantities. 
30   int         iInA, iInB; 
31   vector<int> iOut;
32   double      sHat, pTHat;
33   
34 };
35  
36 //==========================================================================
37
38 // The PartonSystems class describes the whole set of subcollisions.
39
40 class PartonSystems {
41
42 public:
43
44   // Constructor.
45   PartonSystems() {systems.resize(0);}
46
47   // Reset system list to empty.
48   void clear() {systems.resize(0);}
49
50   // Add new subsystem to list; return its index. Number of subsystems. 
51   int addSys() {systems.push_back(PartonSystem()); 
52     return systems.size() - 1;} 
53   int sizeSys() const {return systems.size();}
54
55   // Set, add or replace info to one system. 
56   void setInA(int iSys, int iPos) {systems[iSys].iInA = iPos;}  
57   void setInB(int iSys, int iPos) {systems[iSys].iInB = iPos;}  
58   void addOut(int iSys, int iPos) {systems[iSys].iOut.push_back(iPos);} 
59   void setOut(int iSys, int iMem, int iPos) {systems[iSys].iOut[iMem] = iPos;} 
60   void replace(int iSys, int iPosOld, int iPosNew);
61   void setSHat(int iSys, double sHatIn) {systems[iSys].sHat = sHatIn;}
62   void setPTHat(int iSys, double pTHatIn) {systems[iSys].pTHat = pTHatIn;}
63
64   // Get info on one system.
65   bool hasInAB(int iSys)         const {return ( (systems[iSys].iInA > 0)   
66                                         || (systems[iSys].iInB > 0) ) ;}
67   int getInA(int iSys)           const {return systems[iSys].iInA;}
68   int getInB(int iSys)           const {return systems[iSys].iInB;}
69   int sizeOut(int iSys)          const {return systems[iSys].iOut.size();}
70   int getOut(int iSys, int iMem) const {return systems[iSys].iOut[iMem];} 
71   int sizeAll(int iSys)          const {return (hasInAB(iSys)) 
72     ? systems[iSys].iOut.size() + 2 : systems[iSys].iOut.size();}
73   int getAll(int iSys, int iMem) const; 
74   double getSHat(int iSys)       const {return systems[iSys].sHat;} 
75   double getPTHat(int iSys)      const {return systems[iSys].pTHat;} 
76
77   // Find system of given outgoing parton, optionally also incoming one.
78   int getSystemOf(int iPos, bool alsoIn = false) const;  
79
80   // Find iOut index of given system and event record index
81   int getIndexOfOut(int iSys, int iPos) const;  
82
83   // List all current systems.
84   void list(ostream& os = cout) const;
85
86 private:
87  
88   // List of all separate partonic subsystems.
89   vector<PartonSystem> systems;
90
91 };
92  
93 //==========================================================================
94
95 } // end namespace Pythia8
96
97 #endif // Pythia8_PartonSystems_H