51 template <
class Object>
57 template <
class Object>
61 size_ = (
int) objects_.size();
64 for (
int i = 0; i < size_ ; ++i ) candidates_.push_back(objects_[i]);
71 size_ = (
int) objects_.size();
76 template <
class Object>
91 template <
class Object>
94 std::vector< std::shared_ptr<Object> > objects;
95 for (
auto & obj : objects_ )
97 std::shared_ptr<Object> sp_obj = std::shared_ptr<Object> (
new Object(obj));
98 objects.push_back(sp_obj);
102 template <
class Object>
109 for (
auto & jet : objects_ )
114 template <
class Object>
122 if ( objects_.size() < 1 )
return;
123 std::vector< std::shared_ptr<GenJet> > vec = cands->vector();
124 for (
auto & jet : objects_ )
130 template <
class Object>
138 if ( objects_.size() < 1 )
return;
139 auto vec = particles->vector();
141 for (
auto & jet : objects_ )
142 jet.associatePartons(vec,deltaR,ptMin,pythia8);
148 std::map<Jet *, std::set<int> > removeFromJet;
150 for (
size_t j1 = 0 ; j1 < objects_.size()-1 ; ++j1 )
152 Jet * jet1 = &(objects_.at(j1));
153 auto partons1 = jet1->
partons();
154 for (
auto it1 = partons1.begin(); it1 != partons1.end(); it1++ )
157 auto p1 = std::distance(partons1.begin(), it1 );
158 for (
size_t j2 = j1+1 ; j2 < objects_.size() ; ++j2 )
160 Jet * jet2 = &(objects_.at(j2));
161 auto partons2 = jet2->
partons();
162 for (
auto it2 = partons2.begin(); it2 != partons2.end(); ++it2 )
165 int p2 = std::distance(partons2.begin(), it2 );
166 if ( parton1 == parton2 )
168 float dR1 = jet1->
p4().DeltaR(parton1->p4());
169 float dR2 = jet2->
p4().DeltaR(parton2->p4());
170 if ( dR1 < dR2 ) { removeFromJet[jet2].insert(p2) ;}
171 else { removeFromJet[jet1].insert(p1) ;}
181 for (
auto & jet : removeFromJet )
184 for (
auto &
p : jet.second )
186 jet.first -> removeParton(
p-counts);
194 template <
class Object>
197 for (
auto & obj : objects_ )
198 obj.matchTo(vectorcandidates,name,deltaR);
201 template <
class Object>
204 for (
auto & obj : objects_ )
208 template <
class Object>
210 for (
auto & obj : objects_){
217 for (
auto & obj : objects_){
218 obj.matchTo(collection.
vectorCandidates(),collection.
name(),delta_pT*obj.jerPtResolution()*obj.pt(),deltaR);
222 template <
class Object>
225 for (
auto & obj : objects_ )
229 template <
class Object>
232 this->matchTo(*collection, deltaR);
250 for(
auto & jet : objects_){
252 sf = n_sigma * (jet.jerSFup() - jet.jerSF()) + jet.jerSF();
254 else if (n_sigma < 0){
255 sf = std::abs(n_sigma) * (jet.jerSFdown() - jet.jerSF()) + jet.jerSF();
258 if(jet.matched(collection.
name())){
259 smear_pt = jet.matched(collection.
name())->pt() + sf * (jet.pt() - jet.matched(collection.
name())->pt());
260 smear_pt = std::max(0.,smear_pt);
261 smear_e = jet.matched(collection.
name())->e() + sf * (jet.e() - jet.matched(collection.
name())->e());
262 smear_e = std::max(0.,smear_e);
268 smear_pt = gRandom->Gaus(jet.pt(),std::sqrt(sf*sf-1)*jet.jerPtResolution()*jet.pt());
269 smear_e = gRandom->Gaus(jet.e(),std::sqrt(sf*sf-1)*jet.jerPtResolution()*jet.pt());
276 out.SetPtEtaPhiE(smear_pt,jet.eta(),jet.phi(),smear_e);
282 std::sort(objects_.begin(),objects_.end(),
pTordering);
285 template <
class Object>
bool pTordering(Candidate j1, Candidate j2)