1 | #ifndef KTJET_KTJETTABLE_H
|
---|
2 | #define KTJET_KTJETTABLE_H
|
---|
3 |
|
---|
4 | #include "KtJet/KtLorentzVector.h"
|
---|
5 | #include "KtJet/KtDistanceInterface.h"
|
---|
6 | #include "KtJet/KtRecomInterface.h"
|
---|
7 | #include <vector>
|
---|
8 | #include <string>
|
---|
9 |
|
---|
10 |
|
---|
11 | namespace KtJet{
|
---|
12 |
|
---|
13 | /**
|
---|
14 | * Class KtJetTable encapsulates the jet four-momenta and Kt's in one object.
|
---|
15 | * Does merging and deletion of jets and returns jets, Kt's etc.
|
---|
16 | * Uses a KtDistance object to calculate Kt's.
|
---|
17 | *
|
---|
18 | * Usage example:
|
---|
19 | * CLHEP::HepLorentzVector eScheme(const CLHEP::HepLorentzVector &,
|
---|
20 | const CLHEP::HepLorentzVector &); // function to merge jets
|
---|
21 | * std::vector<KtLorentzVector> jets;
|
---|
22 | * // [Put some particles in "jets".]
|
---|
23 | * KtDistanceDeltaR ktPP(4); // 4 = pp collision
|
---|
24 | * KtJetTable jt(jets, ktPP, eScheme);
|
---|
25 |
|
---|
26 | @author J.Butterworth J.Couchman B.Cox B.Waugh
|
---|
27 | */
|
---|
28 | class KtJetTable {
|
---|
29 | public:
|
---|
30 | KtJetTable(const std::vector<KtLorentzVector> &, KtDistance *, KtRecom *recom);
|
---|
31 | ~KtJetTable();
|
---|
32 | /* Number of jets */
|
---|
33 | inline int getNJets() const;
|
---|
34 | /** Get jet from table */
|
---|
35 | const KtLorentzVector & getJet(int i) const;
|
---|
36 | /** Kt for jet pair (i,j) */
|
---|
37 | KtFloat getD(int i, int j) const;
|
---|
38 | /** Kt of jet (i) with respect to beam */
|
---|
39 | KtFloat getD(int i) const;
|
---|
40 | /** Get indices of jet pair with min Kt */
|
---|
41 | std::pair<int,int> getMinDPair() const;
|
---|
42 | /** Get index of jet with min Kt with respect to beam */
|
---|
43 | int getMinDJet() const;
|
---|
44 | /** Combine jets (i,j) (E-scheme only so far) */
|
---|
45 | void mergeJets(int i, int j);
|
---|
46 | /** Delete jet (i) from table */
|
---|
47 | void killJet(int i);
|
---|
48 | private:
|
---|
49 | /** Initial number of jets/particles */
|
---|
50 | int m_nRows;
|
---|
51 | /** Jet 4-momenta */
|
---|
52 | std::vector<KtLorentzVector> m_jets;
|
---|
53 | /** Function object to define Kt distance scheme */
|
---|
54 | KtDistance *m_fKtDist;
|
---|
55 | /** Recombination scheme */
|
---|
56 | KtRecom *m_ktRecom;
|
---|
57 | // CLHEP::HepLorentzVector (*m_frecom)(const CLHEP::HepLorentzVector &, const CLHEP::HepLorentzVector &);
|
---|
58 | /** Kt with respect to beam */
|
---|
59 | std::vector<KtFloat> m_ddi;
|
---|
60 | /** Class to deal with pair Kt's */
|
---|
61 | class DijTable {
|
---|
62 | private:
|
---|
63 | /** No. of initial jets/particles */
|
---|
64 | int m_nRows;
|
---|
65 | /** No. of jets after merging etc. */
|
---|
66 | int m_nJets;
|
---|
67 | /** Vector of Kt values */
|
---|
68 | std::vector<KtFloat> m_table;
|
---|
69 | public:
|
---|
70 | DijTable(int nParticles=0);
|
---|
71 | ~DijTable();
|
---|
72 | /** Set size to hold nParticles particles */
|
---|
73 | void resize(int nParticles);
|
---|
74 | /** Return reference to allow Kt value to be set */
|
---|
75 | KtFloat & operator() (int i, int j);
|
---|
76 | /** Return Kt by value */
|
---|
77 | KtFloat operator() (int i, int j) const;
|
---|
78 | /** Find position of minimum Kt in table */
|
---|
79 | std::pair<int,int> getMin() const;
|
---|
80 | /** Decrement number of jets */
|
---|
81 | void killJet();
|
---|
82 | /** ??? debug only? Print contents of table */
|
---|
83 | void print() const;
|
---|
84 | };
|
---|
85 | /** 2D table of all pair kt's */
|
---|
86 | DijTable m_dPairs;
|
---|
87 | };
|
---|
88 |
|
---|
89 | #include "KtJet/KtJetTable.icc"
|
---|
90 |
|
---|
91 | }//end of namespace
|
---|
92 | #endif
|
---|