20 typename T::const_iterator
hit = fCollection.find (fId);
21 if (hit != fCollection.end())
return &*hit;
26 std::vector <const PCaloHit*>
result;
27 for (
unsigned i = 0;
i < fCollection.size (); ++
i) {
28 if (fCollection[
i].
id() == fId.
rawId()) {
29 result.push_back (&(fCollection[
i]));
38 mEBRecHitCollection (0),
39 mEERecHitCollection (0),
40 mHBHERecHitCollection (0),
41 mHORecHitCollection (0),
42 mHFRecHitCollection (0),
43 mEBSimHitCollection (0),
44 mEESimHitCollection (0),
45 mHcalSimHitCollection (0),
46 mSimTrackCollection (0),
47 mSimVertexCollection (0),
48 mGenParticleCollection (0)
158 std::vector <const CaloTower*>
result;
160 for (
unsigned i = 0;
i < constituents.size(); ++
i) result.push_back (&*(constituents[
i]));
166 std::vector<JetConstituent>
result;
183 else std::cerr <<
"Can not find rechit for id " <<
id.rawId () << std::endl;
198 else std::cerr <<
"Can not find rechit for id " <<
id.rawId () << std::endl;
207 std::vector <DetId>
result;
210 result.push_back (
id);
216 std::vector <const PCaloHit*>
result;
244 if (!track)
return -1;
247 std::cerr <<
"JetMatchingTools::generatorId-> No vertex for track " << *track << std::endl;
252 std::cerr <<
"JetMatchingTools::generatorId-> No track for vertex " << *vertex << std::endl;
271 std::set <const reco::GenParticle*>
result;
274 for (
unsigned itower = 0; itower < towers.size (); ++itower) {
276 for (
unsigned iid = 0; iid < detids.size(); ++iid) {
277 std::vector <const PCaloHit*> phits =
getPCaloHits (detids[iid]);
278 for (
unsigned iphit = 0; iphit < phits.size(); ++iphit) {
285 result.insert (genPart);
288 std::cerr <<
"JetMatchingTools::getGenParticles-> Can not convert genId " << genId <<
" to GenParticle" << std::endl;
292 std::cerr <<
"JetMatchingTools::getGenParticles-> Can not convert trackId " << trackId <<
" to genId" << std::endl;
296 std::cerr <<
"JetMatchingTools::getGenParticles-> Unknown trackId for PCaloHit " << *(phits[iphit]) << std::endl;
301 return std::vector <const reco::GenParticle*> (result.begin (), result.end());
311 double totalEnergy = 0;
312 double lostEnergy = 0;
315 for (
unsigned itower = 0; itower < towers.size (); ++itower) {
317 for (
unsigned ihit = 0; ihit < recHits.size(); ++ihit) {
318 double foundSimEnergy = 0;
319 double lostSimEnergy = 0;
320 std::vector <const PCaloHit*> phits =
getPCaloHits (recHits[ihit].
id);
321 for (
unsigned iphit = 0; iphit < phits.size(); ++iphit) {
322 double simEnergy = phits[iphit]->energy ();
324 if (trackId < 0 ||
generatorId (trackId) < 0) lostSimEnergy += simEnergy;
325 else foundSimEnergy += simEnergy;
327 if (foundSimEnergy > 0 || lostSimEnergy > 0) {
328 totalEnergy += recHits[ihit].energy;
329 lostEnergy += recHits[ihit].energy * lostSimEnergy / (foundSimEnergy + lostSimEnergy);
333 return lostEnergy / totalEnergy;
338 const std::vector <const reco::GenParticle*>& fReference)
const {
339 if (fObject.empty())
return 0;
340 double totalEnergy = 0;
341 double overlapEnergy = 0;
342 for (
unsigned i = 0;
i < fObject.size(); ++
i) {
343 totalEnergy += fObject [
i]->energy();
344 if (
find (fReference.begin(), fReference.end(), fObject [
i]) != fReference.end ()) overlapEnergy += fObject [
i]->energy();
346 return overlapEnergy / totalEnergy;
std::vector< PCaloHit > PCaloHitContainer
Jets made from CaloTowers.
size_t constituentsSize() const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
DetId constituent(size_t i) const
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
virtual std::vector< CaloTowerPtr > getCaloConstituents() const
get all constituents
uint32_t rawId() const
get the raw id
Container::value_type value_type
int genpartIndex() const
index of the corresponding Generator particle in the Event container (-1 if no Genpart) ...
Jets made from MC generator particles.
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
virtual std::vector< const GenParticle * > getGenConstituents() const
get all constituents
int vertIndex() const
index of the vertex in the Event container (-1 if no vertex)
std::vector< SimVertex > SimVertexContainer
static const GenParticle * genParticle(const reco::Candidate *fConstituent)
convert generic constituent to specific type
Detector det() const
get the detector field from this detid
std::vector< SimTrack > SimTrackContainer