43 , alg_(iConfig.getParameter<
string> (
"@module_label"),
44 iConfig.getParameter<
string> (
"jetAlgorithm"),
45 iConfig.getParameter<unsigned>(
"nFatMax"),
46 iConfig.getParameter<double> (
"rParam"),
47 iConfig.getParameter<double> (
"rFilt"),
48 iConfig.getParameter<double> (
"jetPtMin"),
49 iConfig.getParameter<double> (
"massDropCut"),
50 iConfig.getParameter<double> (
"asymmCut"),
51 iConfig.getParameter<
bool> (
"asymmCutLater"),
52 iConfig.getParameter<
bool> (
"doAreaFastjet"),
53 iConfig.getParameter<double> (
"Ghost_EtaMax"),
54 iConfig.getParameter<
int> (
"Active_Area_Repeats"),
55 iConfig.getParameter<double> (
"GhostArea"),
56 iConfig.getUntrackedParameter<
bool>(
"verbose",
false))
58 produces<reco::BasicJetCollection>(
"fat");
113 writeCompoundJets<reco::CaloJet>(
iEvent, iSetup );
116 writeCompoundJets<reco::PFJet>(
iEvent, iSetup );
119 writeCompoundJets<reco::GenJet>(
iEvent, iSetup );
122 writeCompoundJets<reco::BasicJet>(
iEvent, iSetup );
125 edm::LogError(
"InvalidInput")<<
" invalid jet type in SubjetFilterJetProducer\n";
137 auto fatJets = std::make_unique<reco::BasicJetCollection>();
138 auto subJets = std::make_unique< vector<T>>();
139 auto filterJets = std::make_unique< vector<T>>();
147 vector<math::XYZTLorentzVector> p4FatJets;
148 vector<double> areaFatJets;
150 vector<CompoundPseudoJet>::const_iterator itBegin(
fjCompoundJets_.begin());
151 vector<CompoundPseudoJet>::const_iterator itEnd(
fjCompoundJets_.end());
152 vector<CompoundPseudoJet>::const_iterator it(itBegin);
154 for (;it!=itEnd;++it) {
156 int jetIndex = it-itBegin;
157 fastjet::PseudoJet fatJet = it->hardJet();
159 fatJet.pz(),fatJet.e()));
160 areaFatJets.push_back(it->hardJetArea());
162 vector<CompoundPseudoSubJet>::const_iterator itSubBegin(it->subjets().begin());
163 vector<CompoundPseudoSubJet>::const_iterator itSubEnd(it->subjets().end());
164 vector<CompoundPseudoSubJet>::const_iterator itSub(itSubBegin);
166 for (; itSub!=itSubEnd;++itSub) {
167 int subJetIndex = itSub-itSubBegin;
168 fastjet::PseudoJet fjSubJet = itSub->subjet();
170 fjSubJet.pz(),fjSubJet.e());
173 vector<reco::CandidatePtr> subJetConstituents;
174 const vector<int>& subJetConstituentIndices = itSub->constituents();
175 vector<int>::const_iterator itIndexBegin(subJetConstituentIndices.begin());
176 vector<int>::const_iterator itIndexEnd(subJetConstituentIndices.end());
177 vector<int>::const_iterator itIndex(itIndexBegin);
178 for (;itIndex!=itIndexEnd;++itIndex)
179 if ((*itIndex) < static_cast<int>(
inputs_.size()))
180 subJetConstituents.push_back(
inputs_[*itIndex]);
184 subJet.setJetArea(itSub->subjetArea());
187 subIndices[jetIndex].push_back(subJets->size());
188 subJets->push_back(subJet);
191 filterIndices[jetIndex].push_back(filterJets->size());
192 filterJets->push_back(subJet);
197 subJetsAfterPut = iEvent.
put(
std::move(subJets),
"sub");
198 filterJetsAfterPut = iEvent.
put(
std::move(filterJets),
"filter");
200 vector<math::XYZTLorentzVector>::const_iterator itP4Begin(p4FatJets.begin());
201 vector<math::XYZTLorentzVector>::const_iterator itP4End(p4FatJets.end());
202 vector<math::XYZTLorentzVector>::const_iterator itP4(itP4Begin);
203 for (;itP4!=itP4End;++itP4) {
204 int fatIndex = itP4-itP4Begin;
205 vector<int>& fatToSub = subIndices[fatIndex];
206 vector<int>& fatToFilter = filterIndices[fatIndex];
208 vector<reco::CandidatePtr> i_fatJetConstituents;
210 vector<int>::const_iterator itSubBegin(fatToSub.begin());
211 vector<int>::const_iterator itSubEnd(fatToSub.end());
212 vector<int>::const_iterator itSub(itSubBegin);
213 for(;itSub!=itSubEnd;++itSub) {
215 i_fatJetConstituents.push_back(candPtr);
218 vector<int>::const_iterator itFilterBegin(fatToFilter.begin());
219 vector<int>::const_iterator itFilterEnd(fatToFilter.end());
220 vector<int>::const_iterator itFilter(itFilterBegin);
221 for(;itFilter!=itFilterEnd;++itFilter) {
223 i_fatJetConstituents.push_back(candPtr);
227 fatJets->push_back(
reco::BasicJet((*itP4),point,i_fatJetConstituents));
228 fatJets->back().setJetArea(areaFatJets[fatIndex]);
void output(edm::Event &iEvent, const edm::EventSetup &iSetup) override
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
std::vector< CompoundPseudoJet > fjCompoundJets_
virtual void inputTowers()
void inputTowers() override
void runAlgorithm(edm::Event &iEvent, const edm::EventSetup &iSetup) override
~SubjetFilterJetProducer() override
Jets made from CaloTowers.
SubjetFilterAlgorithm alg_
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
void run(const std::vector< fastjet::PseudoJet > &inputs, std::vector< CompoundPseudoJet > &fatJets, const edm::EventSetup &iSetup)
std::vector< fastjet::PseudoJet > fjInputs_
#define DEFINE_FWK_MODULE(type)
std::vector< edm::Ptr< reco::Candidate > > inputs_
virtual void makeProduces(std::string s, std::string tag="")
math::XYZPoint Point
point in the space
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
void writeCompoundJets(edm::Event &iEvent, const edm::EventSetup &iSetup)
void produce(edm::Event &iEvent, const edm::EventSetup &iSetup) override
SubjetFilterJetProducer(const edm::ParameterSet &ps)
std::string summary() const
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
void writeSpecific(reco::CaloJet &jet, reco::Particle::LorentzVector const &p4, reco::Particle::Point const &point, std::vector< reco::CandidatePtr > const &constituents, edm::EventSetup const &c)