41 AbsoluteNumberOfHits(conf_.getParameter<bool>(
"AbsoluteNumberOfHits")),
42 SimToRecoDenominator(denomnone),
43 quality_SimToReco(conf_.getParameter<double>(
"Quality_SimToReco")),
44 purity_SimToReco(conf_.getParameter<double>(
"Purity_SimToReco")),
45 cut_RecoToSim(conf_.getParameter<double>(
"Cut_RecoToSim")),
46 UsePixels(conf_.getParameter<bool>(
"UsePixels")),
47 UseGrouped(conf_.getParameter<bool>(
"UseGrouped")),
48 UseSplitting(conf_.getParameter<bool>(
"UseSplitting")),
49 ThreeHitTracksAreSpecial(conf_.getParameter<bool>(
"ThreeHitTracksAreSpecial"))
54 }
else if (tmp ==
"reco") {
59 throw cms::Exception(
"TrackAssociatorByHits") <<
"SimToRecoDenominator not specified as sim or reco";
84 std::vector< SimHitIdpr> SimTrackIds;
85 std::vector< SimHitIdpr> matchedIds;
91 if (TPCollectionH.
size()!=0) tPC = *const_cast<TrackingParticleCollection*>(TPCollectionH.
product());
99 getMatchedIds<trackingRecHit_iterator>(matchedIds, SimTrackIds, ri, (*track)->recHitsBegin(), (*track)->recHitsEnd(), associate);
109 std::vector<SimHitIdpr> idcachev;
110 if(!matchedIds.empty()){
113 for (TrackingParticleCollection::iterator
t = tPC.begin();
t != tPC.end(); ++
t, ++tpindex) {
120 if (
abs(
t->pdgId())==11&&(
t->g4Track_end()-
t->g4Track_begin())>1){
121 nshared-=getDoubleCount<trackingRecHit_iterator>((*track)->recHitsBegin(), (*track)->recHitsEnd(), associate,
t);
125 else if(ri!=0) quality = (
static_cast<double>(nshared)/static_cast<double>(ri));
131 outputCollection.
insert(tC[tindex],
149 return outputCollection;
161 std::vector< SimHitIdpr> SimTrackIds;
162 std::vector< SimHitIdpr> matchedIds;
168 if (TPCollectionH.
size()!=0) tPC = *const_cast<TrackingParticleCollection*>(TPCollectionH.
product());
182 getMatchedIds<trackingRecHit_iterator>(matchedIds, SimTrackIds, ri, (*track)->recHitsBegin(), (*track)->recHitsEnd(), associate);
185 std::vector<SimHitIdpr> idcachev;
186 if(!matchedIds.empty()){
189 for (TrackingParticleCollection::iterator
t = tPC.begin();
t != tPC.end(); ++
t, ++tpindex) {
191 std::vector<PSimHit> trackerPSimHit(
t->trackPSimHit(
DetId::Tracker) );
194 std::vector<PSimHit> tphits;
210 for(std::vector<PSimHit>::const_iterator TPhit = trackerPSimHit.begin(); TPhit != trackerPSimHit.end(); TPhit++){
213 unsigned int subdetId =
static_cast<unsigned int>(dId.
subdetId());
226 for(std::vector<PSimHit>::const_iterator TPhitOK = tphits.begin(); TPhitOK != tphits.end(); TPhitOK++){
254 tphits.push_back(*TPhit);
259 totsimhit = tphits.size();
269 float purity = 1.0*nshared/ri;
273 std::make_pair(tC[tindex],quality));
289 return outputCollection;
295 unsigned int subdetId =
static_cast<unsigned int>(detId.
subdetId());
299 layerNumber = tibid.
layer();
304 layerNumber = tobid.
layer();
309 layerNumber = tidid.
wheel();
314 layerNumber = tecid.
wheel();
319 layerNumber = pxbid.
layer();
324 layerNumber = pxfid.
disk();
327 LogTrace(
"TrackAssociator") <<
"Unknown subdetid: " << subdetId;
338 edm::LogVerbatim(
"TrackAssociator") <<
"Starting TrackAssociatorByHits::associateRecoToSim - #seeds="
339 <<seedCollectionH->size()<<
" #TPs="<<TPCollectionH->size();
342 std::vector< SimHitIdpr> SimTrackIds;
343 std::vector< SimHitIdpr> matchedIds;
357 int nsimhit = seed->recHits().second-seed->recHits().first;
358 LogTrace(
"TrackAssociator") <<
"\nNEW SEED - seed number " << tindex <<
" # valid=" << nsimhit;
359 getMatchedIds<edm::OwnVector<TrackingRecHit>::const_iterator>(matchedIds, SimTrackIds, ri, seed->recHits().first, seed->recHits().second, associate );
362 std::vector<SimHitIdpr> idcachev;
363 if(!matchedIds.empty()){
366 for (TrackingParticleCollection::const_iterator
t = tPC.begin();
t != tPC.end(); ++
t, ++tpindex) {
367 LogTrace(
"TrackAssociator") <<
"TP number " << tpindex <<
" pdgId=" <<
t->pdgId() <<
" with number of PSimHits: " << nsimhit;
372 if (
abs(
t->pdgId())==11&&(
t->g4Track_end()-
t->g4Track_begin())>1){
373 nshared-=getDoubleCount<edm::OwnVector<TrackingRecHit>::const_iterator>(seed->recHits().first, seed->recHits().second, associate,
t);
377 else if(ri!=0) quality = (
static_cast<double>(nshared)/static_cast<double>(ri));
384 LogTrace(
"TrackAssociator") <<
"Seed number " << tindex <<
" with #hits=" << ri
385 <<
"associated to TP (pdgId, nb segments, p) = "
386 << (*t).pdgId() <<
" " << (*t).g4Tracks().size()
387 <<
" " << (*t).momentum() <<
" number " << tpindex <<
" with quality =" << quality;
389 LogTrace(
"TrackAssociator") <<
"Seed number " << tindex <<
" with #hits=" << ri <<
" NOT associated with quality =" << quality;
394 LogTrace(
"TrackAssociator") <<
"% of Assoc Seeds=" << ((double)outputCollection.
size())/((
double)seedCollectionH->size());
397 return outputCollection;
407 edm::LogVerbatim(
"TrackAssociator") <<
"Starting TrackAssociatorByHits::associateSimToReco - #seeds="
408 <<seedCollectionH->size()<<
" #TPs="<<TPCollectionH->size();
411 std::vector< SimHitIdpr> SimTrackIds;
412 std::vector< SimHitIdpr> matchedIds;
425 LogTrace(
"TrackAssociator") <<
"\nNEW SEED - seed number " << tindex <<
" # valid=" << seed->recHits().second-seed->recHits().first;
426 getMatchedIds<edm::OwnVector<TrackingRecHit>::const_iterator>(matchedIds, SimTrackIds, ri, seed->recHits().first, seed->recHits().second, associate );
429 std::vector<SimHitIdpr> idcachev;
430 if(!matchedIds.empty()){
432 for (TrackingParticleCollection::iterator
t = tPC.begin();
t != tPC.end(); ++
t, ++tpindex) {
435 LogTrace(
"TrackAssociator") <<
"TP number " << tpindex <<
" pdgId=" <<
t->pdgId() <<
" with number of PSimHits: " << nsimhit;
439 else if(ri!=0) quality = ((double) nshared)/((double)ri);
447 LogTrace(
"TrackAssociator") <<
"TrackingParticle number " << tpindex <<
" with #hits=" << nsimhit
448 <<
" associated to seed number " << tindex <<
" with #hits=" << ri
449 <<
" with hit quality =" << quality ;
452 LogTrace(
"TrackAssociator") <<
"TrackingParticle number " << tpindex <<
" with #hits=" << nsimhit <<
" NOT associated with quality =" << quality;
457 LogTrace(
"TrackAssociator") <<
"% of Assoc TPs=" << ((double)outputCollection.
size())/((
double)TPCollectionH->size());
460 return outputCollection;
463 template<
typename iter>
465 std::vector<SimHitIdpr>& SimTrackIds,
472 for (iter it = begin; it !=
end; it++){
480 if(!SimTrackIds.empty()){
481 for(
size_t j=0;
j<SimTrackIds.size();
j++){
482 LogTrace(
"TrackAssociator") <<
" hit # " << ri <<
" valid=" << hit->
isValid()
483 <<
" det id = " << t_detID <<
" SimId " << SimTrackIds[
j].first
484 <<
" evt=" << SimTrackIds[
j].second.event()
485 <<
" bc=" << SimTrackIds[
j].second.bunchCrossing();
486 matchedIds.push_back(SimTrackIds[
j]);
513 std::vector<SimHitIdpr>& idcachev,
514 TrackingParticleCollection::const_iterator
t)
const {
516 if (t->trackPSimHit().size()==0)
return nshared;
518 for(
size_t j=0;
j<matchedIds.size();
j++){
520 if(
find(idcachev.begin(), idcachev.end(),matchedIds[
j]) == idcachev.end() ){
522 idcachev.push_back(matchedIds[
j]);
532 if((*g4T).trackId() == matchedIds[
j].first && t->eventId() == matchedIds[
j].second){
533 int countedhits =
std::count(matchedIds.begin(), matchedIds.end(), matchedIds[
j]);
534 nshared += countedhits;
546 template<
typename iter>
550 TrackingParticleCollection::const_iterator
t)
const {
551 int doublecount = 0 ;
552 std::vector<SimHitIdpr> SimTrackIdsDC;
554 for (iter it = begin; it !=
end; it++){
556 SimTrackIdsDC.clear();
559 if(SimTrackIdsDC.size()>1){
562 if(
find(SimTrackIdsDC.begin(), SimTrackIdsDC.end(),
SimHitIdpr((*g4T).trackId(), SimTrackIdsDC.begin()->second)) != SimTrackIdsDC.end() ){
567 if (idcount>1) doublecount+=(idcount-1);
T getParameter(std::string const &) const
const double cut_RecoToSim
TrackAssociatorByHits(const edm::ParameterSet &)
void getMatchedIds(std::vector< SimHitIdpr > &, std::vector< SimHitIdpr > &, int &, iter, iter, TrackerHitAssociator *) const
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
unsigned int layer() const
layer id
const double purity_SimToReco
C const * product() const
Accessor for product collection.
int getShared(std::vector< SimHitIdpr > &, std::vector< SimHitIdpr > &, TrackingParticleCollection::const_iterator) const
unsigned int layerNumber(align::ID)
Layer number increases with rho from 1 to 8.
const_iterator end() const
int LayerFromDetid(const DetId &) const
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
std::vector< SimHitIdpr > associateHitId(const TrackingRecHit &thit)
unsigned int layer() const
layer id
uint32_t rawId() const
get the raw id
const TrackingRecHit * getHitPtr(edm::OwnVector< TrackingRecHit >::const_iterator iter) const
const double quality_SimToReco
void post_insert()
post insert action
virtual uint32_t partnerDetId() const
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
unsigned int disk() const
disk id
std::vector< SimTrack >::const_iterator g4t_iterator
Detector identifier class for the strip tracker.
reco::SimToRecoCollection associateSimToReco(const edm::RefToBaseVector< reco::Track > &, const edm::RefVector< TrackingParticleCollection > &, const edm::Event *event=0, const edm::EventSetup *setup=0) const
Association Sim To Reco with Collections.
std::pair< uint32_t, EncodedEventId > SimHitIdpr
size_type size() const
map size
void insert(const key_type &k, const data_type &v)
insert an association
const bool AbsoluteNumberOfHits
const edm::ParameterSet & conf_
int getDoubleCount(iter, iter, TrackerHitAssociator *, TrackingParticleCollection::const_iterator) const
T const * product() const
unsigned int wheel() const
wheel id
const_iterator begin() const
unsigned int layer() const
layer id
std::vector< std::vector< double > > tmp
const bool ThreeHitTracksAreSpecial
size_type size() const
Size of the RefVector.
reco::RecoToSimCollection associateRecoToSim(const edm::RefToBaseVector< reco::Track > &, const edm::RefVector< TrackingParticleCollection > &, const edm::Event *event=0, const edm::EventSetup *setup=0) const
Association Reco To Sim with Collections.
const_iterator begin() const
const_iterator end() const
std::vector< TrackingParticle > TrackingParticleCollection
DetId geographicalId() const
SimToRecoDenomType SimToRecoDenominator
unsigned int wheel() const
wheel id