Line data Source code
1 : // PartonSystems.cc 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 : // Function definitions (not found in the header) for the
7 : // PartonSystem and PartonSystems classes.
8 :
9 : #include "Pythia8/PartonSystems.h"
10 :
11 : namespace Pythia8 {
12 :
13 : //==========================================================================
14 :
15 : // The PartonSystems class.
16 :
17 : //--------------------------------------------------------------------------
18 :
19 : // Replace the index of an incoming or outgoing parton by a new index.
20 :
21 : void PartonSystems::replace(int iSys, int iPosOld, int iPosNew) {
22 :
23 0 : if (systems[iSys].iInA == iPosOld) {
24 0 : systems[iSys].iInA = iPosNew;
25 0 : return;
26 : }
27 0 : if (systems[iSys].iInB == iPosOld) {
28 0 : systems[iSys].iInB = iPosNew;
29 0 : return;
30 : }
31 0 : for (int i = 0; i < sizeOut(iSys); ++i)
32 0 : if (systems[iSys].iOut[i] == iPosOld) {
33 0 : systems[iSys].iOut[i] = iPosNew;
34 0 : return;
35 : }
36 :
37 0 : }
38 :
39 : //--------------------------------------------------------------------------
40 :
41 : // Return index of any parton in system, list starting with beam remnants.
42 :
43 : int PartonSystems::getAll(int iSys, int iMem) const {
44 :
45 0 : if (hasInAB(iSys)) {
46 0 : if (iMem == 0) return systems[iSys].iInA;
47 0 : if (iMem == 1) return systems[iSys].iInB;
48 0 : return systems[iSys].iOut[iMem - 2];
49 0 : } else return systems[iSys].iOut[iMem];
50 :
51 0 : }
52 :
53 : //--------------------------------------------------------------------------
54 :
55 : // Find system of given outgoing parton, optionally also incoming one.
56 :
57 : int PartonSystems::getSystemOf(int iPos, bool alsoIn) const {
58 :
59 : // Loop over systems and over final-state members in each system.
60 0 : for (int iSys = 0; iSys < sizeSys(); ++iSys) {
61 0 : if (alsoIn) {
62 0 : if (systems[iSys].iInA == iPos) return iSys;
63 0 : if (systems[iSys].iInB == iPos) return iSys;
64 : }
65 0 : for (int iMem = 0; iMem < sizeOut(iSys); ++iMem)
66 0 : if (systems[iSys].iOut[iMem] == iPos) return iSys;
67 : }
68 :
69 : // Failure signalled by return value -1.
70 0 : return -1;
71 :
72 0 : }
73 :
74 : //--------------------------------------------------------------------------
75 :
76 : // Get the iMem index of iOut for an index into the event record
77 :
78 : int PartonSystems::getIndexOfOut(int iSys, int iPos) const {
79 0 : for (int iMem = 0; iMem < sizeOut(iSys); ++iMem)
80 0 : if (systems[iSys].iOut[iMem] == iPos) return iMem;
81 :
82 : // Failure signalled by return value -1.
83 0 : return -1;
84 0 : }
85 :
86 :
87 : //--------------------------------------------------------------------------
88 :
89 : // Print members in systems; for debug mainly.
90 :
91 : void PartonSystems::list(ostream& os) const {
92 :
93 : // Header.
94 0 : os << "\n -------- PYTHIA Parton Systems Listing -------------------"
95 0 : << "--------------------------------- "
96 0 : << "\n \n no inA inB out members \n";
97 :
98 : // Loop over system list and over members in each system.
99 0 : for (int iSys = 0; iSys < sizeSys(); ++iSys) {
100 0 : os << " " << setw(3) << iSys << " " << setw(4) << systems[iSys].iInA
101 0 : << " " << setw(4) << systems[iSys].iInB;
102 0 : for (int iMem = 0; iMem < sizeOut(iSys); ++iMem) {
103 0 : if (iMem%16 == 0 && iMem > 0) os << "\n ";
104 0 : os << " " << setw(4) << systems[iSys].iOut[iMem];
105 : }
106 0 : os << "\n";
107 : }
108 :
109 : // Alternative if no systems. Done.
110 0 : if (sizeSys() == 0) os << " no systems defined \n";
111 0 : os << "\n -------- End PYTHIA Parton Systems Listing ---------------"
112 0 : << "---------------------------------" << endl;
113 :
114 0 : }
115 :
116 : //==========================================================================
117 :
118 : } // end namespace Pythia8
|