Skip to content

Commit

Permalink
Change all calls to TrackExtra::add to TrackExtra::setHits
Browse files Browse the repository at this point in the history
TrackExtra::add was removed from the TrackExtra api.
Calls TrackExtra::add required to caller to pass edm::Ref's which
come from sequential entries in the same container. The callers always
created a temporary edm::Ref which was then discarded.
The TrackExtra::setHits API better enforces the requirements by taking
an edm:RefProd to the container and then a starting index and number of
entries into that container for the hits. Not only is setHits safer
than calling add it is also faster.

TrackExtra::add had to go away anway because of work being done in
the framework which will no longer allow an edm::RefProd to be constructed
from an edm::Ref.
  • Loading branch information
Dr15Jones committed Jan 16, 2015
1 parent 91f7356 commit 6ef647f
Show file tree
Hide file tree
Showing 24 changed files with 111 additions and 72 deletions.
5 changes: 4 additions & 1 deletion CommonTools/RecoAlgos/interface/GsfElectronSelector.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,13 @@ namespace helper {
trk.seedDirection() ) );
selGsfTrackExtras_->push_back( GsfTrackExtra( *(trk.gsfExtra()) ) );
TrackExtra & tx = selTrackExtras_->back();
unsigned int nHitsToAdd = 0;
for( trackingRecHit_iterator hit = trk.recHitsBegin(); hit != trk.recHitsEnd(); ++ hit ) {
selHits_->push_back( (*hit)->clone() );
tx.add( TrackingRecHitRef( rHits, hidx ++ ) );
++nHitsToAdd;
}
tx.setHits( rHits, hidx, nHitsToAdd );
hidx += nHitsToAdd;
trk.setGsfExtra( GsfTrackExtraRef( rGsfTrackExtras, tidx ) );
trk.setExtra( TrackExtraRef( rTrackExtras, tidx ++ ) );
}
Expand Down
4 changes: 3 additions & 1 deletion CommonTools/RecoAlgos/interface/TrackFullCloneSelectorBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,10 +98,12 @@ class TrackFullCloneSelectorBase : public edm::stream::EDProducer<> {
selTracks_->back().setExtra( TrackExtraRef( rTrackExtras, selTrackExtras_->size() - 1) );
TrackExtra & tx = selTrackExtras_->back();
// TrackingRecHits
auto const firstHitIndex = selHits_->size();
for( trackingRecHit_iterator hit = trk.recHitsBegin(); hit != trk.recHitsEnd(); ++ hit ) {
selHits_->push_back( (*hit)->clone() );
tx.add( TrackingRecHitRef( rHits, selHits_->size() - 1) );
}
tx.setHits( rHits, firstHitIndex, selHits_->size() - firstHitIndex );

if (copyTrajectories_) {
goodTracks[current] = reco::TrackRef(rTracks, selTracks_->size() - 1);
}
Expand Down
17 changes: 14 additions & 3 deletions CommonTools/RecoAlgos/src/MuonSelector.cc
Original file line number Diff line number Diff line change
Expand Up @@ -81,16 +81,19 @@ namespace helper

TrackExtra & tx = selTracksExtras_->back();

auto const firstHitIndex = hidx_;
unsigned int nHitsAdded = 0;
for( trackingRecHit_iterator hit = trk.recHitsBegin(); hit != trk.recHitsEnd();
++ hit, ++ hidx_) {
selTracksHits_->push_back( (*hit)->clone() );
TrackingRecHit * newHit = & (selTracksHits_->back());
tx.add( TrackingRecHitRef( rHits_, hidx_ ) );
++nHitsAdded;
if (cloneClusters() && newHit->isValid()
&& ((*hit)->geographicalId().det() == DetId::Tracker)) {
clusterStorer_.addCluster( *selTracksHits_, hidx_ );
}
} // end of for loop over tracking rec hits on this track
tx.setHits( rHits_, firstHitIndex, nHitsAdded );

trk.setExtra( TrackExtraRef( rTrackExtras_, idx_ ++ ) );

Expand All @@ -109,17 +112,21 @@ namespace helper
trk.outerStateCovariance(), trk.outerDetId(),
trk.innerStateCovariance(), trk.innerDetId(), trk.seedDirection() ) );
TrackExtra & tx = selGlobalMuonTracksExtras_->back();
auto const firstHitIndex = higbdx_;
unsigned int nHitsAdded = 0;
for( trackingRecHit_iterator hit = trk.recHitsBegin(); hit != trk.recHitsEnd();
++ hit, ++ higbdx_) {
selGlobalMuonTracksHits_->push_back( (*hit)->clone() );
TrackingRecHit * newHit = & (selGlobalMuonTracksHits_->back());
tx.add( TrackingRecHitRef( rGBHits_, higbdx_ ) );
++nHitsAdded;
if (cloneClusters() && newHit->isValid()
&& ((*hit)->geographicalId().det() == DetId::Tracker)) {
clusterStorer_.addCluster( *selGlobalMuonTracksHits_, higbdx_ );
}

}
tx.setHits( rGBHits_, firstHitIndex, nHitsAdded );

trk.setExtra( TrackExtraRef( rGBTrackExtras_, igbdx_ ++ ) );

} // GB trkRef.isNonnull()
Expand All @@ -136,10 +143,14 @@ namespace helper
trk.outerStateCovariance(), trk.outerDetId(),
trk.innerStateCovariance(), trk.innerDetId(), trk.seedDirection() ) );
TrackExtra & tx = selStandAloneTracksExtras_->back();
auto const firstHitIndex = hisadx_;
unsigned int nHitsAdded = 0;
for( trackingRecHit_iterator hit = trk.recHitsBegin(); hit != trk.recHitsEnd(); ++ hit ) {
selStandAloneTracksHits_->push_back( (*hit)->clone() );
tx.add( TrackingRecHitRef( rSAHits_, hisadx_ ++ ) );
++nHitsAdded;
hisadx_ ++;
}
tx.setHits( rSAHits_, firstHitIndex, nHitsAdded );
trk.setExtra( TrackExtraRef( rSATrackExtras_, isadx_ ++ ) );

} // SA trkRef.isNonnull()
Expand Down
6 changes: 5 additions & 1 deletion CommonTools/RecoAlgos/src/TrackSelector.cc
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,14 @@ namespace helper
trk.innerStateCovariance(), trk.innerDetId(),
trk.seedDirection() ) );
TrackExtra & tx = selTrackExtras_->back();
auto const firstHitIndex = hidx_;
unsigned int nHitsAdded = 0;
for( trackingRecHit_iterator hit = trk.recHitsBegin(); hit != trk.recHitsEnd();
++ hit, ++ hidx_ ) {

selHits_->push_back( (*hit)->clone() );
TrackingRecHit * newHit = & (selHits_->back());
tx.add( TrackingRecHitRef( rHits_, hidx_ ) );
++nHitsAdded;

//--- Skip the rest for this hit if we don't want to clone the cluster.
//--- The copy constructer in the rec hit will copy the link properly.
Expand All @@ -50,6 +52,8 @@ namespace helper
clusterStorer_.addCluster( *selHits_, hidx_ );
}
} // end of for loop over tracking rec hits on this track
tx.setHits( rHits_, firstHitIndex, nHitsAdded );

} // end of track, and function


Expand Down
11 changes: 0 additions & 11 deletions DataFormats/TrackReco/interface/TrackExtraBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,6 @@ class TrackExtraBase
m_firstHit =firstH; m_nHits=nH;
}

/// add a reference to a RecHit
void add(const TrackingRecHitRef &ref) {
m_hitCollection.pushBackItem(ref.refCore(), true);
if (m_nHits==0) {
m_firstHit = ref.key();
}
assert(m_nHits== ref.key()-m_firstHit);
++m_nHits;
}


unsigned int firstRecHit() const {
return m_firstHit;
}
Expand Down
12 changes: 5 additions & 7 deletions FastSimulation/Tracking/plugins/PixelTracksProducer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -152,20 +152,18 @@ PixelTracksProducer::produce(edm::Event& e, const edm::EventSetup& es) {
}

edm::OrphanHandle <TrackingRecHitCollection> ohRH = e.put( recHits );

edm::RefProd<TrackingRecHitCollection> ohRHProd(ohRH);

for (int k = 0; k < nTracks; ++k) {

// reco::TrackExtra* theTrackExtra = new reco::TrackExtra();
reco::TrackExtra theTrackExtra;

//fill the TrackExtra with TrackingRecHitRef
// unsigned int nHits = tracks->at(k).numberOfValidHits();
unsigned nHits = 3; // We are dealing with triplets!
for(unsigned int i = 0; i < nHits; ++i) {
theTrackExtra.add(TrackingRecHitRef(ohRH,cc++));
//theTrackExtra->add(TrackingRecHitRef(ohRH,cc));
//cc++;
}
const unsigned nHits = 3; // We are dealing with triplets!
theTrackExtra.setHits( ohRHProd, cc, nHits);
cc += nHits;

trackExtras->push_back(theTrackExtra);
//trackExtras->push_back(*theTrackExtra);
Expand Down
3 changes: 2 additions & 1 deletion FastSimulation/Tracking/plugins/RecoTrackAccumulator.cc
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,11 @@ template<class T> void RecoTrackAccumulator::accumulateEvent(const T& e, edm::Ev
//tx.setResiduals(track.residuals());
// rechits:
auto & newExtra = NewTrackExtraList_->back();
auto const firstTrackIndex = NewHitList_->size();
for( trackingRecHit_iterator hit = extra.recHitsBegin(); hit != extra.recHitsEnd(); ++ hit ) {
NewHitList_->push_back( **hit );
newExtra.add( TrackingRecHitRef( rHits, NewHitList_->size() - 1) );
}
newExtra.setHits( rHits, firstTrackIndex, NewHitList_->size() - firstTrackIndex);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -353,13 +353,15 @@ TrackingRecHitRefProd rHits = evt.getRefBeforePut<TrackingRecHitCollection>();
auto ih = selHits->size();
assert(ih==hidx);
t2t(*theTraj,*selHits,false);
auto ie = selHits->size();
auto const ie = selHits->size();
unsigned int nHitsAdded = 0;
for (;ih<ie; ++ih) {
auto const & hit = (*selHits)[ih];
track.appendHitPattern(hit);
tx.add( TrackingRecHitRef( rHits, hidx ++ ) );
++nHitsAdded;
}

tx.setHits( rHits, hidx, nHitsAdded);
hidx +=nHitsAdded;
/*
if (theTraj->direction() == alongMomentum) {
for( TrajectoryFitter::RecHitContainer::const_iterator j = transHits.begin();
Expand Down
3 changes: 2 additions & 1 deletion RecoHI/HiTracking/src/HICaloCompatibleTrackSelector.cc
Original file line number Diff line number Diff line change
Expand Up @@ -148,10 +148,11 @@ void HICaloCompatibleTrackSelector::produce( edm::Event& evt, const edm::EventSe
TrackExtra & tx = selTrackExtras_->back();
tx.setResiduals(trk.residuals());
// TrackingRecHits
auto const firstHitIndex = selHits_->size();
for( trackingRecHit_iterator hit = trk.recHitsBegin(); hit != trk.recHitsEnd(); ++ hit ) {
selHits_->push_back( (*hit)->clone() );
tx.add( TrackingRecHitRef( rHits_, selHits_->size() - 1) );
}
tx.setHits( rHits_, firstHitIndex, selHits_->size() - firstHitIndex );
}
if (copyTrajectories_) {
trackRefs_[current] = TrackRef(rTracks_, selTracks_->size() - 1);
Expand Down
2 changes: 1 addition & 1 deletion RecoMuon/L3MuonProducer/src/L3TkMuonProducer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -226,8 +226,8 @@ void L3TkMuonProducer::produce(Event& event, const EventSetup& eventSetup){
unsigned int iRH=0;
for( trackingRecHit_iterator hit = trk.recHitsBegin(); hit != trk.recHitsEnd(); ++ hit,++iRH ) {
outRecHits->push_back((*hit)->clone());
(*outTrackExtras)[i].add( TrackingRecHitRef( rHits, iRH));
}
(*outTrackExtras)[i].setHits( rHits, 0, iRH);
}

LogDebug(metname)<<"made: "<<outTracks->size()<<" tracks, "<<outTrackExtras->size()<<" extras and "<<outRecHits->size()<<" rechits.";
Expand Down
6 changes: 4 additions & 2 deletions RecoMuon/TrackingTools/plugins/MuonErrorMatrixAdjuster.cc
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ bool MuonErrorMatrixAdjuster::attachRecHits(const reco::Track & recotrack_orig,
TrackingRecHitCollection& RHcol){
//loop over the hits of the original track
trackingRecHit_iterator recHit = recotrack_orig.recHitsBegin();
auto const firstHitIndex = theRHi;
for (; recHit!=recotrack_orig.recHitsEnd();++recHit){
//clone it. this is meandatory
TrackingRecHit * hit = (*recHit)->clone();
Expand All @@ -147,10 +148,11 @@ bool MuonErrorMatrixAdjuster::attachRecHits(const reco::Track & recotrack_orig,
recotrack.appendHitPattern(*hit);
//copy them in the new collection
RHcol.push_back(hit);
//do something with the trackextra
trackextra.add(TrackingRecHitRef( theRefprodRH, theRHi++));
++theRHi;

}//loop over original rechits
//do something with the trackextra
trackextra.setHits(theRefprodRH, firstHitIndex, theRHi-firstHitIndex);

return true; //if nothing fails
}
Expand Down
18 changes: 12 additions & 6 deletions RecoMuon/TrackingTools/src/MuonTrackLoader.cc
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,7 @@ MuonTrackLoader::loadTracks(const TrajectoryContainer& trajectories,
}

// Fill the track extra with the rec hit (persistent-)reference
unsigned int nHitsAdded = 0;
for (Trajectory::RecHitContainer::const_iterator recHit = transHits.begin(); recHit != transHits.end(); ++recHit) {
TrackingRecHit *singleHit = (**recHit).hit()->clone();
std::vector<const TrackingRecHit*> hits = MuonTrackLoader::unpackHit(*singleHit);
Expand All @@ -302,9 +303,11 @@ MuonTrackLoader::loadTracks(const TrajectoryContainer& trajectories,
}
}
recHitCollection->push_back( singleHit );
// set the TrackingRecHitRef (persitent reference of the tracking rec hits)
trackExtra.add(TrackingRecHitRef(recHitCollectionRefProd, recHitsIndex++ ));
++nHitsAdded;
}
// set the TrackingRecHitRef (persitent reference of the tracking rec hits)
trackExtra.setHits(recHitCollectionRefProd, recHitsIndex, nHitsAdded);
recHitsIndex +=nHitsAdded;

// fill the TrackExtraCollection
trackExtraCollection->push_back(trackExtra);
Expand Down Expand Up @@ -617,6 +620,7 @@ MuonTrackLoader::loadTracks(const TrajectoryContainer& trajectories,
pair<bool,reco::Track> updateResult(false,reco::Track());

// Fill the track extra with the rec hit (persistent-)reference
unsigned int nHitsAdded = 0;
for (Trajectory::RecHitContainer::const_iterator recHit = transHits.begin();
recHit != transHits.end(); ++recHit) {
TrackingRecHit *singleHit = (**recHit).hit()->clone();
Expand All @@ -635,11 +639,13 @@ MuonTrackLoader::loadTracks(const TrajectoryContainer& trajectories,
break;
}
}
}
recHitCollection->push_back( singleHit );
// set the TrackingRecHitRef (persitent reference of the tracking rec hits)
trackExtra.add(TrackingRecHitRef(recHitCollectionRefProd, recHitsIndex++ ));
}
recHitCollection->push_back( singleHit );
++nHitsAdded;
}
// set the TrackingRecHitRef (persitent reference of the tracking rec hits)
trackExtra.setHits(recHitCollectionRefProd, recHitsIndex, nHitsAdded);
recHitsIndex += nHitsAdded;

// fill the TrackExtraCollection
trackExtraCollection->push_back(trackExtra);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ void TrackListCombiner::produce(edm::Event& ev, const edm::EventSetup& es)
// Save the tracking recHits
edm::OrphanHandle<TrackingRecHitCollection> theRecoHits = ev.put(recoHits);

edm::RefProd<TrackingRecHitCollection> theRecoHitsProd(theRecoHits);
// Create the track extras and add the references to the rechits
unsigned hits = 0;
unsigned nTracks = recoTracks->size();
Expand All @@ -137,8 +138,9 @@ void TrackListCombiner::produce(edm::Event& ev, const edm::EventSetup& es)
aTrack.seedRef());

unsigned nHits = aTrack.recHitsSize();
for ( unsigned int ih=0; ih<nHits; ++ih)
aTrackExtra.add(TrackingRecHitRef(theRecoHits,hits++));
aTrackExtra.setHits(theRecoHitsProd,hits,nHits);
hits +=nHits;

recoTrackExtras->push_back(aTrackExtra);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,20 +75,16 @@ void PixelTrackProducer::store(edm::Event& ev, const TracksWithTTRHs& tracksWith
LogDebug("TrackProducer") << "put the collection of TrackingRecHit in the event" << "\n";
edm::OrphanHandle <TrackingRecHitCollection> ohRH = ev.put( recHits );


edm::RefProd<TrackingRecHitCollection> hitCollProd(ohRH);
for (int k = 0; k < nTracks; k++)
{
reco::TrackExtra* theTrackExtra = new reco::TrackExtra();
reco::TrackExtra theTrackExtra{};

//fill the TrackExtra with TrackingRecHitRef
unsigned int nHits = tracks->at(k).numberOfValidHits();
for(unsigned int i = 0; i < nHits; ++i) {
theTrackExtra->add(TrackingRecHitRef(ohRH,cc));
cc++;
}

trackExtras->push_back(*theTrackExtra);
delete theTrackExtra;
theTrackExtra.setHits(hitCollProd, cc, nHits);
cc +=nHits;
trackExtras->push_back(theTrackExtra);
}

LogDebug("TrackProducer") << "put the collection of TrackExtra in the event" << "\n";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -323,10 +323,11 @@ void AnalyticalTrackSelector::run( edm::Event& evt, const edm::EventSetup& es )
TrackExtra & tx = selTrackExtras_->back();
tx.setResiduals(trk.residuals());
// TrackingRecHits
auto const firstHitIndex = selHits_->size();
for( trackingRecHit_iterator hit = trk.recHitsBegin(); hit != trk.recHitsEnd(); ++ hit ) {
selHits_->push_back( (*hit)->clone() );
tx.add( TrackingRecHitRef( rHits_, selHits_->size() - 1) );
}
tx.setHits( rHits_, firstHitIndex, selHits_->size() - firstHitIndex);
}
if (copyTrajectories_) {
trackRefs_[current] = TrackRef(rTracks_, selTracks_->size() - 1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,10 +206,11 @@ void CosmicTrackSelector::produce( edm::Event& evt, const edm::EventSetup& es )
TrackExtra & tx = selTrackExtras_->back();
tx.setResiduals(trk.residuals());
// TrackingRecHits
auto const firstHitIndex = selHits_->size();
for( trackingRecHit_iterator hit = trk.recHitsBegin(); hit != trk.recHitsEnd(); ++ hit ) {
selHits_->push_back( (*hit)->clone() );
tx.add( TrackingRecHitRef( rHits_, selHits_->size() - 1) );
}
tx.setHits( rHits_, firstHitIndex, selHits_->size() - firstHitIndex );
}
if (copyTrajectories_) {
trackRefs_[current] = TrackRef(rTracks_, selTracks_->size() - 1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -339,11 +339,12 @@ void DuplicateListMerger::produce(edm::Event& iEvent, const edm::EventSetup& iSe
tx.setResiduals(track.residuals());
// fill TrackingRecHits
unsigned nh1=track.recHitsSize();
auto const firstTrackIndex = outputTrkHits->size();
for ( unsigned ih=0; ih<nh1; ++ih ) {
//const TrackingRecHit*hit=&((*(track->recHit(ih))));
outputTrkHits->push_back( track.recHit(ih)->clone() );
tx.add( TrackingRecHitRef( refTrkHits, outputTrkHits->size() - 1) );
}
tx.setHits( refTrkHits, firstTrackIndex, outputTrkHits->size() - firstTrackIndex );
}
edm::Ref< std::vector<Trajectory> > trajRef(mergedTrajHandle, (*matchIter0).first);
TrajTrackAssociationCollection::const_iterator match = mergedTrajTrackHandle->find(trajRef);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -496,12 +496,13 @@ namespace {
// fill TrackingRecHits
std::vector<const TrackingRecHit*>& iHits = rh1[track];
unsigned nh1 = iHits.size();
auto const firstHitIndex = outputTrkHits->size();
for ( unsigned ih=0; ih<nh1; ++ih ) {
const TrackingRecHit* hit = iHits[ih];
//for( trackingRecHit_iterator hit = itB; hit != itE; ++hit ) {
outputTrkHits->push_back( hit->clone() );
tx.add( TrackingRecHitRef( refTrkHits, outputTrkHits->size() - 1) );
}
tx.setHits( refTrkHits, firstHitIndex, nh1 );
}
trackRefs[current] = reco::TrackRef(refTrks, outputTrks->size() - 1);

Expand Down Expand Up @@ -614,11 +615,12 @@ namespace {
// fill TrackingRecHits
std::vector<const TrackingRecHit*>& jHits = rh2[track];
unsigned nh2 = jHits.size();
auto const firstHitIndex2 = outputTrkHits->size();
for ( unsigned jh=0; jh<nh2; ++jh ) {
const TrackingRecHit* hit = jHits[jh];
outputTrkHits->push_back( hit->clone() );
tx.add( TrackingRecHitRef( refTrkHits, outputTrkHits->size() - 1) );
}
tx.setHits( refTrkHits, firstHitIndex2, nh2 );
}
trackRefs[current] = reco::TrackRef(refTrks, outputTrks->size() - 1);

Expand Down
Loading

0 comments on commit 6ef647f

Please sign in to comment.