ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/VHbbDataFormats/interface/JetSubstructureTools.h
Revision: 1.1.2.1
Committed: Mon Nov 19 20:59:46 2012 UTC (12 years, 5 months ago) by ntran
Content type: text/plain
Branch: hbbsubstructDevPostHCP
CVS Tags: hbbsubstructDev_4, hbbsubstructDev_3, hbbsubstructDev_2
Changes since 1.1: +214 -0 lines
Log Message:
add files

File Contents

# Content
1 #ifndef JETSUBSTRUCTURETOOLS_H
2 #define JETSUBSTRUCTURETOOLS_H
3
4
5 #include "FWCore/ParameterSet/interface/ParameterSet.h"
6 #include "FWCore/Framework/interface/Frameworkfwd.h"
7 #include "FWCore/Framework/interface/EDAnalyzer.h"
8 #include "FWCore/Framework/interface/Event.h"
9
10 #include "VHbbAnalysis/VHbbDataFormats/interface/VHbbEventAuxInfo.h"
11 #include "VHbbAnalysis/VHbbDataFormats/interface/VHbbEvent.h"
12
13 #include <fastjet/ClusterSequence.hh>
14 #include <fastjet/GhostedAreaSpec.hh>
15 #include <fastjet/ClusterSequenceArea.hh>
16 #include "fastjet/tools/Filter.hh"
17 #include "fastjet/tools/Pruner.hh"
18 #include "fastjet/tools/MassDropTagger.hh"
19 #include "fastjet/GhostedAreaSpec.hh"
20
21 #include "VHbbAnalysis/VHbbDataFormats/interface/Nsubjettiness.h"
22
23 #include <iostream>
24
25 class JetSubstructureTools {
26
27 // member functions
28 public:
29
30 // constructor
31 JetSubstructureTools( std::vector<float> c_px, std::vector<float> c_py, std::vector<float> c_pz, std::vector<float> c_e, std::vector<float> c_pdgId );
32 ~JetSubstructureTools(){}
33
34 fastjet::PseudoJet getPrunedJet(){ return prunedJet_; }
35 fastjet::PseudoJet getTrimmedJet(){ return trimmedJet_; }
36 fastjet::PseudoJet getFilteredJet(){ return filteredJet_; }
37 float getPrunedJetArea(){ return prunedJetArea_; }
38 float getTrimmedJetArea(){ return trimmedJetArea_; }
39 float getFilteredJetArea(){ return filteredJetArea_; }
40
41 float getTau1(){ return tau1_; }
42 float getTau2(){ return tau2_; }
43 float getTau3(){ return tau3_; }
44 float getTau4(){ return tau4_; }
45
46 fastjet::PseudoJet getPrunedSubJet(int i){
47 if (i == 0) return prunedSubJet1_;
48 else if (i == 1) return prunedSubJet2_;
49 else throw cms::Exception("JetSubstructureTools") << "Too many subjets..." << std::endl;
50 }
51
52 // data members
53 public:
54
55 std::vector<fastjet::PseudoJet> FJconstituents_;
56 std::vector<float> c_pdgIds_;
57
58 fastjet::PseudoJet prunedJet_;
59 fastjet::PseudoJet trimmedJet_;
60 fastjet::PseudoJet filteredJet_;
61
62 float prunedJetMass_;
63 float trimmedJetMass_;
64 float filteredJetMass_;
65 float ungroomedJetMass_;
66
67 float prunedJetArea_;
68 float trimmedJetArea_;
69 float filteredJetArea_;
70
71 float tau1_;
72 float tau2_;
73 float tau3_;
74 float tau4_;
75
76 float rcore01_;
77 float rcore02_;
78 float rcore03_;
79 float rcore04_;
80 float rcore05_;
81 float rcore06_;
82 float rcore07_;
83 float rcore08_;
84 float rcore09_;
85 float rcore10_;
86 float rcore11_;
87 float rcore12_;
88
89 fastjet::PseudoJet prunedSubJet1_;
90 fastjet::PseudoJet prunedSubJet2_;
91
92 float QJetVolatility_;
93 };
94
95 // -------------------------------------------
96 // -------------------------------------------
97 // -------------------------------------------
98 // -------------------------------------------
99
100 // constructor
101 JetSubstructureTools::JetSubstructureTools( std::vector<float> c_px, std::vector<float> c_py, std::vector<float> c_pz, std::vector<float> c_e, std::vector<float> c_pdgId )
102 {
103
104 std::cout << "hey y'all!" << std::endl;
105
106 // check that they are all the same size
107 if ((c_px.size() == c_py.size())&&(c_py.size() == c_pz.size())&&(c_pz.size() == c_e.size())&&(c_e.size() == c_pdgId.size())){
108 for (unsigned int i = 0; i < c_px.size(); i++){
109
110 FJconstituents_.push_back( fastjet::PseudoJet( c_px[i], c_py[i], c_pz[i], c_e[i] ) );
111 c_pdgIds_.push_back( c_pdgId[i] );
112
113 }
114 }
115 else throw cms::Exception("JetSubstructureTools") << "Constituent size mismatch..." << std::endl;
116
117 // -------------------------------------------
118 // recluster on the fly....
119 double mJetRadius = 1.2;
120 fastjet::JetDefinition jetDef(fastjet::cambridge_algorithm, mJetRadius);
121
122 int activeAreaRepeats = 1;
123 double ghostArea = 0.01;
124 double ghostEtaMax = 5.0;
125
126 fastjet::GhostedAreaSpec fjActiveArea(ghostEtaMax,activeAreaRepeats,ghostArea);
127 fjActiveArea.set_fj2_placement(true);
128 fastjet::AreaDefinition fjAreaDefinition( fastjet::active_area_explicit_ghosts, fjActiveArea );
129
130 fastjet::ClusterSequenceArea thisClustering(FJconstituents_, jetDef, fjAreaDefinition);
131 std::vector<fastjet::PseudoJet> out_jets = sorted_by_pt(thisClustering.inclusive_jets(50.0));
132
133 fastjet::ClusterSequence thisClustering_basic(FJconstituents_, jetDef);
134 std::vector<fastjet::PseudoJet> out_jets_basic = sorted_by_pt(thisClustering_basic.inclusive_jets(50.0));
135
136 // -------------------------------------------
137 // define groomers
138 fastjet::Filter trimmer( fastjet::Filter(fastjet::JetDefinition(fastjet::kt_algorithm, 0.2), fastjet::SelectorPtFractionMin(0.03)));
139 fastjet::Filter filter( fastjet::Filter(fastjet::JetDefinition(fastjet::cambridge_algorithm, 0.3), fastjet::SelectorNHardest(3)));
140 fastjet::Pruner pruner(fastjet::cambridge_algorithm, 0.1, 0.5);
141
142 std::vector<fastjet::Transformer const *> transformers;
143 transformers.push_back(&trimmer);
144 transformers.push_back(&filter);
145 transformers.push_back(&pruner);
146
147 // define n-subjettiness
148 float mNsubjettinessKappa = 1.;
149 NsubParameters paraNsub = NsubParameters(mNsubjettinessKappa, mJetRadius);
150 Nsubjettiness routine(nsub_kt_axes, paraNsub);
151
152
153 ungroomedJetMass_ = out_jets.at(0).m();
154 // -------------------------------------------
155 // compute pruning, trimming, filtering -------------
156 int transctr = 0;
157 for ( std::vector<fastjet::Transformer const *>::const_iterator
158 itransf = transformers.begin(), itransfEnd = transformers.end();
159 itransf != itransfEnd; ++itransf ) {
160
161 fastjet::PseudoJet transformedJet = out_jets.at(0);
162 transformedJet = (**itransf)(transformedJet);
163
164 if (transctr == 0){ // trimmed
165 trimmedJet_ = transformedJet;
166 trimmedJetMass_ = transformedJet.m();
167 trimmedJetArea_ = transformedJet.area();
168 }
169 else if (transctr == 1){ // filtered
170 filteredJet_ = transformedJet;
171 filteredJetMass_ = transformedJet.m();
172 filteredJetArea_ = transformedJet.area();
173 }
174 else if (transctr == 2){ // pruned
175 prunedJet_ = transformedJet;
176 prunedJetMass_ = transformedJet.m();
177 prunedJetArea_ = transformedJet.area();
178
179 //decompose into requested number of subjets:
180 if (transformedJet.constituents().size() > 1){
181
182 int nsubjetstokeep = 2;
183 std::vector<fastjet::PseudoJet> prunedSubjets = transformedJet.associated_cluster_sequence()->exclusive_subjets(transformedJet,nsubjetstokeep);
184
185 prunedSubJet1_ = prunedSubjets.at(0);
186 prunedSubJet2_ = prunedSubjets.at(1);
187
188 }
189 }
190 else{ std::cout << "error in number of transformers" << std::endl;}
191 transctr++;
192 }
193
194 // -------------------------------------------
195 // compute n-subjettiness -------------
196 tau1_ = routine.getTau(1, out_jets.at(0).constituents());
197 tau2_ = routine.getTau(2, out_jets.at(0).constituents());
198 tau3_ = routine.getTau(3, out_jets.at(0).constituents());
199 tau4_ = routine.getTau(4, out_jets.at(0).constituents());
200
201 }
202 // -------------------------------------------
203 // -------------------------------------------
204 // -------------------------------------------
205 // -------------------------------------------
206
207
208 #endif
209
210
211
212
213
214