StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
PartonSystems.h
1 // PartonSystems.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2012 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.) {iOut.reserve(10);}
28 
29  // Stored quantities.
30  int iInA, iInB;
31  vector<int> iOut;
32  double sHat;
33 
34 };
35 
36 //==========================================================================
37 
38 // The PartonSystems class describes the whole set of subcollisions.
39 
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 
63  // Get info on one system.
64  bool hasInAB(int iSys) const {return ( (systems[iSys].iInA > 0)
65  || (systems[iSys].iInB > 0) ) ;}
66  int getInA(int iSys) const {return systems[iSys].iInA;}
67  int getInB(int iSys) const {return systems[iSys].iInB;}
68  int sizeOut(int iSys) const {return systems[iSys].iOut.size();}
69  int getOut(int iSys, int iMem) const {return systems[iSys].iOut[iMem];}
70  int sizeAll(int iSys) const {return (hasInAB(iSys))
71  ? systems[iSys].iOut.size() + 2 : systems[iSys].iOut.size();}
72  int getAll(int iSys, int iMem) const;
73  double getSHat(int iSys) const {return systems[iSys].sHat;}
74 
75  // Find system of given outgoing parton, optionally also incoming one.
76  int getSystemOf(int iPos, bool alsoIn = false) const;
77 
78  // Find iOut index of given system and event record index
79  int getIndexOfOut(int iSys, int iPos) const;
80 
81  // List all current systems.
82  void list(ostream& os = cout) const;
83 
84 private:
85 
86  // List of all separate partonic subsystems.
87  vector<PartonSystem> systems;
88 
89 };
90 
91 //==========================================================================
92 
93 } // end namespace Pythia8
94 
95 #endif // Pythia8_PartonSystems_H