Find the ProtoJets from the collection of input Candidates.
23 if (
verbose_ )
cout <<
"Welcome to CATopSubJetAlgorithm::run" << endl;
30 for (
unsigned i = 0;
i < cell_particles.size(); ++
i) {
31 sumEt += cell_particles[
i].perp();
39 if (
verbose_ )
cout <<
"Using sumEt = " << sumEt <<
", bin = " << sumEtBinId << endl;
42 if ( sumEtBinId < 0 ) {
47 fastjet::PseudoJet blankJetA(0,0,0,0);
48 blankJetA.set_user_index(-1);
49 const fastjet::PseudoJet blankJet = blankJetA;
70 if (
verbose_ )
cout <<
"About to do jet clustering in CA" << endl;
75 boost::shared_ptr<fastjet::ClusterSequence> fjClusterSeq;
77 fjClusterSeq = boost::shared_ptr<fastjet::ClusterSequence>(
new fastjet::ClusterSequence( cell_particles, jetDef ) );
79 fjClusterSeq = boost::shared_ptr<fastjet::ClusterSequence>(
new fastjet::ClusterSequenceArea( cell_particles, jetDef , *
fjActiveArea_ ) );
81 fjClusterSeq = boost::shared_ptr<fastjet::ClusterSequence>(
new fastjet::ClusterSequenceVoronoiArea( cell_particles, jetDef , fastjet::VoronoiAreaSpec(
voronoiRfact_) ) );
84 if (
verbose_ )
cout <<
"Getting inclusive jets" << endl;
86 vector<fastjet::PseudoJet> inclusiveJets = fjClusterSeq->inclusive_jets(
ptMin_);
90 vector<fastjet::PseudoJet> centralJets;
91 for (
unsigned int i = 0;
i < inclusiveJets.size();
i++) {
94 centralJets.push_back(inclusiveJets[
i]);
99 sort( centralJets.begin(), centralJets.end(), compEt );
102 vector<math::XYZTLorentzVector> p4_hardJets;
106 vector<vector<int> > indices( centralJets.size() );
109 vector<fastjet::PseudoJet>::iterator jetIt = centralJets.begin(),
110 centralJetsBegin = centralJets.begin(),
111 centralJetsEnd = centralJets.end();
114 for ( ; jetIt != centralJetsEnd; ++jetIt ) {
117 fastjet::PseudoJet localJet = *jetIt;
123 if (
verbose_ )
cout<<
"local jet pt = "<<localJet.perp()<<endl;
126 double ptHard =
ptFracBins_[sumEtBinId]*localJet.perp();
127 vector<fastjet::PseudoJet> leftoversAll;
130 if (
verbose_ )
cout <<
"Doing decomposition 1" << endl;
131 fastjet::PseudoJet ja, jb;
132 vector<fastjet::PseudoJet> leftovers1;
133 bool hardBreak1 =
decomposeJet(localJet,*fjClusterSeq,cell_particles,ptHard,nCellMin,deltarcut,ja,jb,leftovers1);
134 leftoversAll.insert(leftoversAll.end(),leftovers1.begin(),leftovers1.end());
139 if (
verbose_ )
cout <<
"Doing decomposition 2. ja->jaa+jab?" << endl;
140 fastjet::PseudoJet jaa, jab;
141 vector<fastjet::PseudoJet> leftovers2a;
142 bool hardBreak2a =
false;
143 if (hardBreak1) hardBreak2a =
decomposeJet(ja,*fjClusterSeq,cell_particles,ptHard,nCellMin,deltarcut,jaa,jab,leftovers2a);
144 leftoversAll.insert(leftoversAll.end(),leftovers2a.begin(),leftovers2a.end());
146 if (
verbose_ )
cout <<
"Doing decomposition 2. ja->jba+jbb?" << endl;
147 fastjet::PseudoJet jba, jbb;
148 vector<fastjet::PseudoJet> leftovers2b;
149 bool hardBreak2b =
false;
150 if (hardBreak1) hardBreak2b =
decomposeJet(jb,*fjClusterSeq,cell_particles,ptHard,nCellMin,deltarcut,jba,jbb,leftovers2b);
151 leftoversAll.insert(leftoversAll.end(),leftovers2b.begin(),leftovers2b.end());
158 if (
verbose_ )
cout <<
"Done with decomposition" << endl;
160 if (
verbose_ )
cout<<
"hardBreak1 = "<<hardBreak1<<endl;
161 if (
verbose_ )
cout<<
"hardBreak2a = "<<hardBreak2a<<endl;
162 if (
verbose_ )
cout<<
"hardBreak2b = "<<hardBreak2b<<endl;
164 fastjet::PseudoJet hardA = blankJet, hardB = blankJet, hardC = blankJet, hardD = blankJet;
170 if(
verbose_)
cout<<
"Hardbreak failed. Save subjet1=localJet"<<endl;
172 if (hardBreak1 && !hardBreak2a && !hardBreak2b) {
177 if(
verbose_)
cout<<
"First decomposition succeeded, both second decompositions failed. Save subjet1=ja subjet2=jb"<<endl;
179 if (hardBreak1 && hardBreak2a && !hardBreak2b) {
184 if(
verbose_)
cout<<
"First decomposition succeeded, ja split succesfully, jb did not split. Save subjet1=jaa subjet2=jab subjet3=jb"<<endl;
186 if (hardBreak1 && !hardBreak2a && hardBreak2b) {
191 if(
verbose_)
cout<<
"First decomposition succeeded, jb split succesfully, ja did not split. Save subjet1=jba subjet2=jbb subjet3=ja"<<endl;
193 if (hardBreak1 && hardBreak2a && hardBreak2b) {
198 if(
verbose_)
cout<<
"First decomposition and both secondary decompositions succeeded. Save subjet1=jaa subjet2=jab subjet3=jba subjet4=jbb"<<endl;
202 fastjet::PseudoJet subjet1 = blankJet;
203 fastjet::PseudoJet subjet2 = blankJet;
204 fastjet::PseudoJet subjet3 = blankJet;
205 fastjet::PseudoJet subjet4 = blankJet;
206 subjet1 = hardA; subjet2 = hardB; subjet3 = hardC; subjet4 = hardD;
209 vector<fastjet::PseudoJet> hardSubjets;
211 if ( subjet1.user_index() >= 0 )
212 hardSubjets.push_back(subjet1);
213 if ( subjet2.user_index() >= 0 )
214 hardSubjets.push_back(subjet2);
215 if ( subjet3.user_index() >= 0 )
216 hardSubjets.push_back(subjet3);
217 if ( subjet4.user_index() >= 0 )
218 hardSubjets.push_back(subjet4);
219 sort(hardSubjets.begin(), hardSubjets.end(), compEt );
222 vector<CompoundPseudoSubJet> subjetsOutput;
223 std::vector<fastjet::PseudoJet>::const_iterator itSubJetBegin = hardSubjets.begin(),
224 itSubJet = itSubJetBegin, itSubJetEnd = hardSubjets.end();
225 for (; itSubJet != itSubJetEnd; ++itSubJet ){
230 vector<fastjet::PseudoJet> subjetFastjetConstituents = fjClusterSeq->constituents( *itSubJet );
233 vector<int> constituents;
236 vector<fastjet::PseudoJet>::const_iterator fastSubIt = subjetFastjetConstituents.begin(),
237 transConstBegin = subjetFastjetConstituents.begin(),
238 transConstEnd = subjetFastjetConstituents.end();
239 for ( ; fastSubIt != transConstEnd; ++fastSubIt ) {
240 if ( fastSubIt->user_index() >= 0 &&
static_cast<unsigned int>(fastSubIt->user_index()) < cell_particles.size() ) {
241 constituents.push_back( fastSubIt->user_index() );
251 ((fastjet::ClusterSequenceArea&)*fjClusterSeq).area(*jetIt) : 0.0;
boost::shared_ptr< fastjet::ActiveAreaSpec > fjActiveArea_
std::vector< double > sumEtBins_
std::vector< double > rBins_
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
bool decomposeJet(const fastjet::PseudoJet &theJet, const fastjet::ClusterSequence &theClusterSequence, const std::vector< fastjet::PseudoJet > &cell_particles, double ptHard, double nCellMin, double deltarcut, fastjet::PseudoJet &ja, fastjet::PseudoJet &jb, std::vector< fastjet::PseudoJet > &leftovers) const
CompoundPseudoJet holds an association of fastjet::PseudoJets that represent a "hard" top jet with su...
std::vector< double > ptFracBins_
boost::shared_ptr< fastjet::JetDefinition > fjJetDefinition_
std::vector< double > deltarBins_
T perp() const
Magnitude of transverse component.
std::vector< double > nCellBins_