CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Attributes
SubjetFilterAlgorithm Class Reference

#include <SubjetFilterAlgorithm.h>

Public Member Functions

void run (const std::vector< fastjet::PseudoJet > &inputs, std::vector< CompoundPseudoJet > &fatJets, const edm::EventSetup &iSetup)
 
 SubjetFilterAlgorithm (const std::string &moduleLabel, const std::string &jetAlgorithm, unsigned nFatMax, double rParam, double rFilt, double jetPtMin, double massDropCut, double asymmCut, bool asymmCutLater, bool doAreaFastjet, double ghostEtaMax, int activeAreaRepeats, double ghostArea, bool verbose)
 
std::string summary () const
 
virtual ~SubjetFilterAlgorithm ()
 

Private Attributes

int activeAreaRepeats_
 
double asymmCut2_
 
bool asymmCutLater_
 
bool doAreaFastjet_
 
fastjet::AreaDefinition * fjAreaDef_
 
fastjet::JetDefinition * fjJetDef_
 
double ghostArea_
 
double ghostEtaMax_
 
std::string jetAlgorithm_
 
double jetPtMin_
 
double massDropCut_
 
std::string moduleLabel_
 
unsigned nevents_
 
unsigned nFatMax_
 
unsigned nfound_
 
unsigned ntotal_
 
double rFilt_
 
double rParam_
 
bool verbose_
 

Detailed Description

Definition at line 29 of file SubjetFilterAlgorithm.h.

Constructor & Destructor Documentation

SubjetFilterAlgorithm::SubjetFilterAlgorithm ( const std::string &  moduleLabel,
const std::string &  jetAlgorithm,
unsigned  nFatMax,
double  rParam,
double  rFilt,
double  jetPtMin,
double  massDropCut,
double  asymmCut,
bool  asymmCutLater,
bool  doAreaFastjet,
double  ghostEtaMax,
int  activeAreaRepeats,
double  ghostArea,
bool  verbose 
)

Definition at line 40 of file SubjetFilterAlgorithm.cc.

References activeAreaRepeats_, doAreaFastjet_, Exception, fjAreaDef_, fjJetDef_, ghostArea_, ghostEtaMax_, jetAlgorithm_, and rParam_.

54  : moduleLabel_(moduleLabel)
56  , nFatMax_(nFatMax)
57  , rParam_(rParam)
58  , rFilt_(rFilt)
60  , massDropCut_(massDropCut)
61  , asymmCut2_(asymmCut*asymmCut)
62  , asymmCutLater_(asymmCutLater)
64  , ghostEtaMax_(ghostEtaMax)
65  , activeAreaRepeats_(activeAreaRepeats)
66  , ghostArea_(ghostArea)
67  , verbose_(verbose)
68  , nevents_(0)
69  , ntotal_(0)
70  , nfound_(0)
71  , fjJetDef_(0)
72  , fjAreaDef_(0)
73 {
74  // FASTJET JET DEFINITION
75  if (jetAlgorithm=="CambridgeAachen"||jetAlgorithm_=="ca")
76  fjJetDef_=new fastjet::JetDefinition(fastjet::cambridge_algorithm,rParam_);
77  else if (jetAlgorithm=="AntiKt"||jetAlgorithm_=="ak")
78  fjJetDef_=new fastjet::JetDefinition(fastjet::antikt_algorithm,rParam_);
79  else if (jetAlgorithm=="Kt"||jetAlgorithm_=="kt")
80  fjJetDef_=new fastjet::JetDefinition(fastjet::kt_algorithm,rParam_);
81  else
82  throw cms::Exception("InvalidJetAlgo")
83  <<"Jet Algorithm for SubjetFilterAlgorithm is invalid: "
84  <<jetAlgorithm_<<", use (ca|CambridgeAachen)|(Kt|kt)|(AntiKt|ak)"<<endl;
85 
86  // FASTJET AREA DEFINITION
87  if (doAreaFastjet_) {
88  fastjet::GhostedAreaSpec ghostSpec(ghostEtaMax_,activeAreaRepeats_,ghostArea_);
89  fjAreaDef_=new fastjet::AreaDefinition(fastjet::active_area_explicit_ghosts,
90  ghostSpec);
91  }
92 }
fastjet::AreaDefinition * fjAreaDef_
fastjet::JetDefinition * fjJetDef_
SubjetFilterAlgorithm::~SubjetFilterAlgorithm ( )
virtual

Definition at line 96 of file SubjetFilterAlgorithm.cc.

References fjAreaDef_, and fjJetDef_.

97 {
98  if (0!=fjJetDef_) delete fjJetDef_;
99  if (0!=fjAreaDef_) delete fjAreaDef_;
100 }
fastjet::AreaDefinition * fjAreaDef_
fastjet::JetDefinition * fjJetDef_

Member Function Documentation

void SubjetFilterAlgorithm::run ( const std::vector< fastjet::PseudoJet > &  inputs,
std::vector< CompoundPseudoJet > &  fatJets,
const edm::EventSetup iSetup 
)

Definition at line 108 of file SubjetFilterAlgorithm.cc.

References asymmCut2_, asymmCutLater_, gather_cfg::cout, fwrapper::cs, doAreaFastjet_, fjAreaDef_, fjJetDef_, i, jetPtMin_, massDropCut_, min(), nevents_, nFatMax_, nfound_, ntotal_, rFilt_, rParam_, mathSSE::sqrt(), swap(), and verbose_.

Referenced by SubjetFilterJetProducer::runAlgorithm().

111 {
112  nevents_++;
113 
114  if (verbose_) cout<<endl<<nevents_<<". EVENT"<<endl;
115 
116  fastjet::ClusterSequence* cs = (doAreaFastjet_) ?
117  new fastjet::ClusterSequenceArea(fjInputs,*fjJetDef_,*fjAreaDef_) :
118  new fastjet::ClusterSequence (fjInputs,*fjJetDef_);
119 
120  vector<fastjet::PseudoJet> fjFatJets =
121  fastjet::sorted_by_pt(cs->inclusive_jets(jetPtMin_));
122 
123  size_t nFat =
124  (nFatMax_==0) ? fjFatJets.size() : std::min(fjFatJets.size(),(size_t)nFatMax_);
125 
126  for (size_t iFat=0;iFat<nFat;iFat++) {
127 
128  if (verbose_) cout<<endl<<iFat<<". FATJET: "<<fjFatJets[iFat]<<endl;
129 
130  fastjet::PseudoJet fjFatJet = fjFatJets[iFat];
131  fastjet::PseudoJet fjCurrentJet(fjFatJet);
132  fastjet::PseudoJet fjSubJet1,fjSubJet2;
133  bool hadSubJets;
134 
135  vector<CompoundPseudoSubJet> subJets;
136 
137 
138  // FIND SUBJETS PASSING MASSDROP [AND ASYMMETRY] CUT(S)
139  while ((hadSubJets = cs->has_parents(fjCurrentJet,fjSubJet1,fjSubJet2))) {
140 
141  if (fjSubJet1.m() < fjSubJet2.m()) swap(fjSubJet1,fjSubJet2);
142 
143  if (verbose_) cout<<"SUBJET CANDIDATES: "<<fjSubJet1<<endl
144  <<" "<<fjSubJet2<<endl;
145  if (verbose_) cout<<"md="<<fjSubJet1.m()/fjCurrentJet.m()
146  <<" y="<<fjSubJet1.kt_distance(fjSubJet2)/fjCurrentJet.m2()
147  <<endl;
148 
149  if (fjSubJet1.m()<massDropCut_*fjCurrentJet.m() &&
150  (asymmCutLater_||
151  fjSubJet1.kt_distance(fjSubJet2)>asymmCut2_*fjCurrentJet.m2())) {
152  break;
153  }
154  else {
155  fjCurrentJet = fjSubJet1;
156  }
157  }
158 
159  if (!hadSubJets) {
160  if (verbose_) cout<<"FAILED TO SELECT SUBJETS"<<endl;
161  }
162  // FOUND TWO GOOD SUBJETS PASSING MASSDROP CUT
163  else {
164  if (verbose_) cout<<"SUBJETS selected"<<endl;
165 
166  if (asymmCutLater_&&
167  fjSubJet1.kt_distance(fjSubJet2)<=asymmCut2_*fjCurrentJet.m2()) {
168  if (verbose_) cout<<"FAILED y-cut"<<endl;
169  }
170  // PASSED ASYMMETRY (Y) CUT
171  else {
172  if (verbose_) cout<<"PASSED y cut"<<endl;
173 
174  vector<fastjet::PseudoJet> fjFilterJets;
175  double Rbb = std::sqrt(fjSubJet1.squared_distance(fjSubJet2));
176  double Rfilt = std::min(0.5*Rbb,rFilt_);
177  double dcut = Rfilt*Rfilt/rParam_/rParam_;
178  fjFilterJets=fastjet::sorted_by_pt(cs->exclusive_subjets(fjCurrentJet,dcut));
179 
180  if (verbose_) {
181  cout<<"Rbb="<<Rbb<<", Rfilt="<<Rfilt<<endl;
182  cout<<"FILTER JETS: "<<flush;
183  for (size_t i=0;i<fjFilterJets.size();i++) {
184  if (i>0) cout<<" "<<flush; cout<<fjFilterJets[i]<<endl;
185  }
186  }
187 
188  vector<fastjet::PseudoJet> fjSubJets;
189  fjSubJets.push_back(fjSubJet1);
190  fjSubJets.push_back(fjSubJet2);
191  size_t nFilter = fjFilterJets.size();
192  for (size_t iFilter=0;iFilter<nFilter;iFilter++)
193  fjSubJets.push_back(fjFilterJets[iFilter]);
194 
195  for (size_t iSub=0;iSub<fjSubJets.size();iSub++) {
196  vector<fastjet::PseudoJet> fjConstituents=
197  cs->constituents(fjSubJets[iSub]);
198  vector<int> constituents;
199  for (size_t iConst=0;iConst<fjConstituents.size();iConst++) {
200  int userIndex = fjConstituents[iConst].user_index();
201  if (userIndex>=0) constituents.push_back(userIndex);
202  }
203 
204  double subJetArea=(doAreaFastjet_) ?
205  ((fastjet::ClusterSequenceArea*)cs)->area(fjSubJets[iSub]) : 0.0;
206 
207  if (iSub<2||constituents.size()>0)
208  subJets.push_back(CompoundPseudoSubJet(fjSubJets[iSub],
209  subJetArea,
210  constituents));
211  }
212 
213  } // PASSED Y CUT
214 
215  } // PASSED MASSDROP CUT
216 
217  if (verbose_) cout<<"write fatjet with "<<subJets.size()<<" sub+filter jets"
218  <<endl;
219 
220  double fatJetArea = (doAreaFastjet_) ?
221  ((fastjet::ClusterSequenceArea*)cs)->area(fjFatJet) : 0.0;
222 
223  fjJets.push_back(CompoundPseudoJet(fjFatJet,fatJetArea,subJets));
224 
225  ntotal_++;
226  if (subJets.size()>3) nfound_++;
227 
228  } // LOOP OVER FATJETS
229 
230  if (verbose_) cout<<endl<<fjJets.size()<<" FATJETS written\n"<<endl;
231 
232  delete cs;
233 
234  return;
235 }
void swap(ora::Record &rh, ora::Record &lh)
Definition: Record.h:70
int i
Definition: DBlmapReader.cc:9
auto_ptr< ClusterSequence > cs
fastjet::AreaDefinition * fjAreaDef_
T sqrt(T t)
Definition: SSEVec.h:48
CompoundPseudoJet holds an association of fastjet::PseudoJets that represent a &quot;hard&quot; top jet with su...
fastjet::JetDefinition * fjJetDef_
T min(T a, T b)
Definition: MathUtil.h:58
tuple cout
Definition: gather_cfg.py:121
string SubjetFilterAlgorithm::summary ( void  ) const

Definition at line 239 of file SubjetFilterAlgorithm.cc.

References moduleLabel_, nevents_, nfound_, ntotal_, and contentValuesCheck::ss.

Referenced by SubjetFilterJetProducer::endJob().

240 {
241  double eff = (ntotal_>0) ? nfound_/(double)ntotal_ : 0;
242  std::stringstream ss;
243  ss<<"************************************************************\n"
244  <<"* "<<moduleLabel_<<" (SubjetFilterAlgorithm) SUMMARY:\n"
245  <<"************************************************************\n"
246  <<"nevents = "<<nevents_<<endl
247  <<"ntotal = "<<ntotal_<<endl
248  <<"nfound = "<<nfound_<<endl
249  <<"eff = "<<eff<<endl
250  <<"************************************************************\n";
251  return ss.str();
252 }

Member Data Documentation

int SubjetFilterAlgorithm::activeAreaRepeats_
private

Definition at line 72 of file SubjetFilterAlgorithm.h.

Referenced by SubjetFilterAlgorithm().

double SubjetFilterAlgorithm::asymmCut2_
private

Definition at line 68 of file SubjetFilterAlgorithm.h.

Referenced by run().

bool SubjetFilterAlgorithm::asymmCutLater_
private

Definition at line 69 of file SubjetFilterAlgorithm.h.

Referenced by run().

bool SubjetFilterAlgorithm::doAreaFastjet_
private

Definition at line 70 of file SubjetFilterAlgorithm.h.

Referenced by run(), and SubjetFilterAlgorithm().

fastjet::AreaDefinition* SubjetFilterAlgorithm::fjAreaDef_
private

Definition at line 81 of file SubjetFilterAlgorithm.h.

Referenced by run(), SubjetFilterAlgorithm(), and ~SubjetFilterAlgorithm().

fastjet::JetDefinition* SubjetFilterAlgorithm::fjJetDef_
private

Definition at line 80 of file SubjetFilterAlgorithm.h.

Referenced by run(), SubjetFilterAlgorithm(), and ~SubjetFilterAlgorithm().

double SubjetFilterAlgorithm::ghostArea_
private

Definition at line 73 of file SubjetFilterAlgorithm.h.

Referenced by SubjetFilterAlgorithm().

double SubjetFilterAlgorithm::ghostEtaMax_
private

Definition at line 71 of file SubjetFilterAlgorithm.h.

Referenced by SubjetFilterAlgorithm().

std::string SubjetFilterAlgorithm::jetAlgorithm_
private

Definition at line 62 of file SubjetFilterAlgorithm.h.

Referenced by SubjetFilterAlgorithm().

double SubjetFilterAlgorithm::jetPtMin_
private

Definition at line 66 of file SubjetFilterAlgorithm.h.

Referenced by run().

double SubjetFilterAlgorithm::massDropCut_
private

Definition at line 67 of file SubjetFilterAlgorithm.h.

Referenced by run().

std::string SubjetFilterAlgorithm::moduleLabel_
private
unsigned SubjetFilterAlgorithm::nevents_
private

Definition at line 76 of file SubjetFilterAlgorithm.h.

Referenced by run(), and summary().

unsigned SubjetFilterAlgorithm::nFatMax_
private

Definition at line 63 of file SubjetFilterAlgorithm.h.

Referenced by run().

unsigned SubjetFilterAlgorithm::nfound_
private

Definition at line 78 of file SubjetFilterAlgorithm.h.

Referenced by run(), and summary().

unsigned SubjetFilterAlgorithm::ntotal_
private

Definition at line 77 of file SubjetFilterAlgorithm.h.

Referenced by run(), and summary().

double SubjetFilterAlgorithm::rFilt_
private

Definition at line 65 of file SubjetFilterAlgorithm.h.

Referenced by run().

double SubjetFilterAlgorithm::rParam_
private

Definition at line 64 of file SubjetFilterAlgorithm.h.

Referenced by run(), and SubjetFilterAlgorithm().

bool SubjetFilterAlgorithm::verbose_
private

Definition at line 74 of file SubjetFilterAlgorithm.h.

Referenced by run().