]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PYTHIA8/pythia8140/include/PartonSystems.h
adding TRU/L0 plots for shifter and logbook image - code from Francesco B.
[u/mrichter/AliRoot.git] / PYTHIA8 / pythia8140 / include / PartonSystems.h
1 // PartonSystems.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2010 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
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
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