Skip to content

Commit

Permalink
Merge pull request #5173 from Dr15Jones/useUniquePtrInTkCloner
Browse files Browse the repository at this point in the history
Have TkCloner return std::unique_ptr for factory functions
  • Loading branch information
ktf committed Sep 6, 2014
2 parents 1360bef + 764f5ad commit 7fcfdc9
Show file tree
Hide file tree
Showing 10 changed files with 98 additions and 40 deletions.
Expand Up @@ -74,7 +74,7 @@ class ProjectedSiStripRecHit2D GCC11_FINAL : public TrackerSingleRecHit {
private:
// double dispatch
virtual ProjectedSiStripRecHit2D * clone(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const {
return cloner(*this,tsos);
return cloner(*this,tsos).release();
}
#ifdef NO_DICT
virtual ConstRecHitPointer cloneSH(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const {
Expand Down
2 changes: 1 addition & 1 deletion DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h
Expand Up @@ -58,7 +58,7 @@ class SiPixelRecHit GCC11_FINAL : public TrackerSingleRecHit {
private:
// double dispatch
virtual SiPixelRecHit * clone(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const {
return cloner(*this,tsos);
return cloner(*this,tsos).release();
}
#ifdef NO_DICT
virtual RecHitPointer cloneSH(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const {
Expand Down
Expand Up @@ -64,7 +64,7 @@ class SiStripMatchedRecHit2D GCC11_FINAL : public BaseTrackerRecHit {
private:
// double dispatch
virtual SiStripMatchedRecHit2D * clone(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const {
return cloner(*this,tsos);
return cloner(*this,tsos).release();
}
#ifdef NO_DICT
virtual RecHitPointer cloneSH(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const {
Expand Down
2 changes: 1 addition & 1 deletion DataFormats/TrackerRecHit2D/interface/SiStripRecHit1D.h
Expand Up @@ -42,7 +42,7 @@ class SiStripRecHit1D GCC11_FINAL : public TrackerSingleRecHit {
private:
// double dispatch
virtual SiStripRecHit1D * clone(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const GCC11_OVERRIDE {
return cloner(*this,tsos);
return cloner(*this,tsos).release();
}
#ifdef NO_DICT
virtual RecHitPointer cloneSH(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const GCC11_OVERRIDE {
Expand Down
4 changes: 2 additions & 2 deletions DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h
Expand Up @@ -40,8 +40,8 @@ class SiStripRecHit2D GCC11_FINAL : public TrackerSingleRecHit {
virtual bool canImproveWithTrack() const GCC11_OVERRIDE {return true;}
private:
// double dispatch
virtual SiStripRecHit2D * clone(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const GCC11_OVERRIDE {
return cloner(*this,tsos);
virtual SiStripRecHit2D* clone(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const GCC11_OVERRIDE {
return cloner(*this,tsos).release();
}
#ifdef NO_DICT
virtual RecHitPointer cloneSH(TkCloner const& cloner, TrajectoryStateOnSurface const& tsos) const GCC11_OVERRIDE {
Expand Down
12 changes: 7 additions & 5 deletions DataFormats/TrackerRecHit2D/interface/TkCloner.h
@@ -1,8 +1,10 @@
#ifndef TKClonerRecHit_H
#define TKClonerRecHit_H

#include <memory>
#include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
#include "FWCore/Utilities/interface/thread_safety_macros.h"
#include "FWCore/Utilities/interface/HideStdUniquePtrFromRoot.h"

class SiPixelRecHit;
class SiStripRecHit2D;
Expand All @@ -23,11 +25,11 @@ class TkCloner {
}
#endif

virtual SiPixelRecHit * operator()(SiPixelRecHit const & hit, TrajectoryStateOnSurface const& tsos) const=0;
virtual SiStripRecHit2D * operator()(SiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const=0;
virtual SiStripRecHit1D * operator()(SiStripRecHit1D const & hit, TrajectoryStateOnSurface const& tsos) const=0;
virtual SiStripMatchedRecHit2D * operator()(SiStripMatchedRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const=0;
virtual ProjectedSiStripRecHit2D * operator()(ProjectedSiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const=0;
virtual std::unique_ptr<SiPixelRecHit> operator()(SiPixelRecHit const & hit, TrajectoryStateOnSurface const& tsos) const=0;
virtual std::unique_ptr<SiStripRecHit2D> operator()(SiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const=0;
virtual std::unique_ptr<SiStripRecHit1D> operator()(SiStripRecHit1D const & hit, TrajectoryStateOnSurface const& tsos) const=0;
virtual std::unique_ptr<SiStripMatchedRecHit2D> operator()(SiStripMatchedRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const=0;
virtual std::unique_ptr<ProjectedSiStripRecHit2D> operator()(ProjectedSiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const=0;

#ifdef NO_DICT
virtual TrackingRecHit::ConstRecHitPointer makeShared(SiPixelRecHit const & hit, TrajectoryStateOnSurface const& tsos) const=0;
Expand Down
55 changes: 55 additions & 0 deletions FWCore/Utilities/interface/HideStdUniquePtrFromRoot.h
@@ -0,0 +1,55 @@
#ifndef FWCore_Utilities_HideStdUniquePtrFromRoot_h
#define FWCore_Utilities_HideStdUniquePtrFromRoot_h
#if defined(__GCCXML__)
// -*- C++ -*-
//
// Package: FWCore/Utilities
// Class : HideStdUniquePtrFromRoot
//
/**
Description: gccxml can't parse std::unique_ptr so we need to give a substitute
Usage:
gccxml has its own version of <memory> which does not include
std::unique_ptr<> so we need a declaration of the class which has
the same memory footprint and declares those methods which are seen
by gccxml.
*/
//
// Original Author: Chris Jones
// Created: Wed, 04 Dec 2013 16:39:12 GMT
//

// system include files

// user include files

// forward declarations
namespace std {
template< typename T>
class unique_ptr {
void* data_;
public:
unique_ptr();
unique_ptr(T*);
template<typename U> unique_ptr(const U&);
void reset(T* iValue=0);
T* get();
T const* get() const;
T* release();

T* operator->();
T const* operator->() const;

T operator*() const;

operator bool() const;
};
}
#endif
#endif

/* LocalWords: ifndef
*/
2 changes: 1 addition & 1 deletion RecoTracker/TkSeedingLayers/src/HitExtractorSTRP.cc
Expand Up @@ -82,7 +82,7 @@ HitExtractorSTRP::skipThis(const TkTransientTrackingRecHitBuilder& ttrhBuilder,
// replace with one

auto cloner = ttrhBuilder.cloner();
replaceMe = cloner.project(hit, rejectSt, TrajectoryStateOnSurface());
replaceMe = cloner.project(hit, rejectSt, TrajectoryStateOnSurface()).release();
if (rejectSt)
LogDebug("HitExtractorSTRP")<<"a matched hit is partially masked, and the mono hit got projected onto: "<<replaceMe->geographicalId().rawId()<<" key: "<<hit.monoClusterRef().key();
else
Expand Down
24 changes: 12 additions & 12 deletions RecoTracker/TransientTrackingRecHit/interface/TkClonerImpl.h
@@ -1,9 +1,9 @@
#ifndef TKClonerImplRecHit_H
#define TKClonerImplRecHit_H

#include <memory>
#include "DataFormats/TrackerRecHit2D/interface/TkCloner.h"


class PixelClusterParameterEstimator;
class StripClusterParameterEstimator;
class SiStripRecHitMatcher;
Expand All @@ -18,23 +18,23 @@ class TkClonerImpl final : public TkCloner {
): pixelCPE(ipixelCPE), stripCPE(istripCPE), theMatcher(iMatcher){}

using TkCloner::operator();
virtual SiPixelRecHit * operator()(SiPixelRecHit const & hit, TrajectoryStateOnSurface const& tsos) const;
virtual SiStripRecHit2D * operator()(SiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const;
virtual SiStripRecHit1D * operator()(SiStripRecHit1D const & hit, TrajectoryStateOnSurface const& tsos) const;
virtual SiStripMatchedRecHit2D * operator()(SiStripMatchedRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const;
virtual ProjectedSiStripRecHit2D * operator()(ProjectedSiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const;
virtual std::unique_ptr<SiPixelRecHit> operator()(SiPixelRecHit const & hit, TrajectoryStateOnSurface const& tsos) const override;
virtual std::unique_ptr<SiStripRecHit2D> operator()(SiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const override;
virtual std::unique_ptr<SiStripRecHit1D> operator()(SiStripRecHit1D const & hit, TrajectoryStateOnSurface const& tsos) const override;
virtual std::unique_ptr<SiStripMatchedRecHit2D> operator()(SiStripMatchedRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const override;
virtual std::unique_ptr<ProjectedSiStripRecHit2D> operator()(ProjectedSiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const override;


using TkCloner::makeShared;
virtual TrackingRecHit::ConstRecHitPointer makeShared(SiPixelRecHit const & hit, TrajectoryStateOnSurface const& tsos) const;
virtual TrackingRecHit::ConstRecHitPointer makeShared(SiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const;
virtual TrackingRecHit::ConstRecHitPointer makeShared(SiStripRecHit1D const & hit, TrajectoryStateOnSurface const& tsos) const;
virtual TrackingRecHit::ConstRecHitPointer makeShared(SiStripMatchedRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const;
virtual TrackingRecHit::ConstRecHitPointer makeShared(ProjectedSiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const;
virtual TrackingRecHit::ConstRecHitPointer makeShared(SiPixelRecHit const & hit, TrajectoryStateOnSurface const& tsos) const override;
virtual TrackingRecHit::ConstRecHitPointer makeShared(SiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const override;
virtual TrackingRecHit::ConstRecHitPointer makeShared(SiStripRecHit1D const & hit, TrajectoryStateOnSurface const& tsos) const override;
virtual TrackingRecHit::ConstRecHitPointer makeShared(SiStripMatchedRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const override;
virtual TrackingRecHit::ConstRecHitPointer makeShared(ProjectedSiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const override;


// project either mono or stero hit...
ProjectedSiStripRecHit2D * project(SiStripMatchedRecHit2D const & hit, bool mono, TrajectoryStateOnSurface const& tsos) const;
std::unique_ptr<ProjectedSiStripRecHit2D> project(SiStripMatchedRecHit2D const & hit, bool mono, TrajectoryStateOnSurface const& tsos) const;

private:
const PixelClusterParameterEstimator * pixelCPE;
Expand Down
33 changes: 17 additions & 16 deletions RecoTracker/TransientTrackingRecHit/src/TkClonerImpl.cc
Expand Up @@ -21,27 +21,27 @@
#include<iostream>
#include <memory>

SiPixelRecHit * TkClonerImpl::operator()(SiPixelRecHit const & hit, TrajectoryStateOnSurface const& tsos) const {
std::unique_ptr<SiPixelRecHit> TkClonerImpl::operator()(SiPixelRecHit const & hit, TrajectoryStateOnSurface const& tsos) const {
const SiPixelCluster& clust = *hit.cluster();
auto && params = pixelCPE->getParameters( clust, *hit.detUnit(), tsos);
return new SiPixelRecHit(std::get<0>(params), std::get<1>(params), std::get<2>(params), *hit.det(), hit.cluster());
return std::unique_ptr<SiPixelRecHit>(new SiPixelRecHit(std::get<0>(params), std::get<1>(params), std::get<2>(params), *hit.det(), hit.cluster()));
}

SiStripRecHit2D * TkClonerImpl::operator()(SiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const {
std::unique_ptr<SiStripRecHit2D> TkClonerImpl::operator()(SiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const {
/// FIXME: this only uses the first cluster and ignores the others
const SiStripCluster& clust = hit.stripCluster();
StripClusterParameterEstimator::LocalValues lv =
stripCPE->localParameters( clust, *hit.detUnit(), tsos);
return new SiStripRecHit2D(lv.first, lv.second, *hit.det(), hit.omniCluster());
return std::unique_ptr<SiStripRecHit2D>{new SiStripRecHit2D(lv.first, lv.second, *hit.det(), hit.omniCluster())};
}

SiStripRecHit1D * TkClonerImpl::operator()(SiStripRecHit1D const & hit, TrajectoryStateOnSurface const& tsos) const {
std::unique_ptr<SiStripRecHit1D> TkClonerImpl::operator()(SiStripRecHit1D const & hit, TrajectoryStateOnSurface const& tsos) const {
/// FIXME: this only uses the first cluster and ignores the others
const SiStripCluster& clust = hit.stripCluster();
StripClusterParameterEstimator::LocalValues lv =
stripCPE->localParameters( clust, *hit.detUnit(), tsos);
LocalError le(lv.second.xx(),0.,std::numeric_limits<float>::max()); //Correct??
return new SiStripRecHit1D(lv.first, le, *hit.det(), hit.omniCluster());
return std::unique_ptr<SiStripRecHit1D>{new SiStripRecHit1D(lv.first, le, *hit.det(), hit.omniCluster())};
}

TrackingRecHit::ConstRecHitPointer TkClonerImpl::makeShared(SiPixelRecHit const & hit, TrajectoryStateOnSurface const& tsos) const {
Expand Down Expand Up @@ -100,7 +100,7 @@ namespace {
#endif
}

SiStripMatchedRecHit2D * TkClonerImpl::operator()(SiStripMatchedRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const {
std::unique_ptr<SiStripMatchedRecHit2D> TkClonerImpl::operator()(SiStripMatchedRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const {
const GeomDet * det = hit.det();
const GluedGeomDet *gdet = static_cast<const GluedGeomDet *> (det);
LocalVector tkDir = (tsos.isValid() ? tsos.localDirection() :
Expand All @@ -123,10 +123,10 @@ SiStripMatchedRecHit2D * TkClonerImpl::operator()(SiStripMatchedRecHit2D const &

// return theMatcher->match(&monoHit,&stereoHit,gdet,tkDir,true);
std::unique_ptr<SiStripMatchedRecHit2D> temp = theMatcher->match(&monoHit,&stereoHit,gdet,tkDir,false);
SiStripMatchedRecHit2D * better = temp.release();

return better ? better : hit.clone();

if(temp.get() == nullptr) {
temp = std::unique_ptr<SiStripMatchedRecHit2D>(hit.clone());
}
return temp;
}

TrackingRecHit::ConstRecHitPointer TkClonerImpl::makeShared(SiStripMatchedRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const {
Expand All @@ -139,7 +139,7 @@ TrackingRecHit::ConstRecHitPointer TkClonerImpl::makeShared(ProjectedSiStripRecH
return TrackingRecHit::ConstRecHitPointer((*this)(hit,tsos));
}

ProjectedSiStripRecHit2D * TkClonerImpl::operator()(ProjectedSiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const {
std::unique_ptr<ProjectedSiStripRecHit2D> TkClonerImpl::operator()(ProjectedSiStripRecHit2D const & hit, TrajectoryStateOnSurface const& tsos) const {
const SiStripCluster& clust = hit.stripCluster();
const GeomDetUnit * gdu = reinterpret_cast<const GeomDetUnit *>(hit.originalDet());
//if (!gdu) std::cout<<"no luck dude"<<std::endl;
Expand All @@ -164,11 +164,11 @@ ProjectedSiStripRecHit2D * TkClonerImpl::operator()(ProjectedSiStripRecHit2D con
hitErr = LocalError( hitErr.xx(), -hitErr.xy(), hitErr.yy());
}
LocalError rotatedError = hitErr.rotate( hitXAxis.x(), hitXAxis.y());
return new ProjectedSiStripRecHit2D(projectedHitPos, rotatedError, *hit.det(), *hit.originalDet(), hit.omniCluster());
return std::unique_ptr<ProjectedSiStripRecHit2D>{new ProjectedSiStripRecHit2D(projectedHitPos, rotatedError, *hit.det(), *hit.originalDet(), hit.omniCluster())};
}


ProjectedSiStripRecHit2D * TkClonerImpl::project(SiStripMatchedRecHit2D const & hit, bool mono, TrajectoryStateOnSurface const& tsos) const {
std::unique_ptr<ProjectedSiStripRecHit2D> TkClonerImpl::project(SiStripMatchedRecHit2D const & hit, bool mono, TrajectoryStateOnSurface const& tsos) const {
const GeomDet & det = *hit.det();
const GluedGeomDet & gdet = static_cast<const GluedGeomDet &> (det);
const GeomDetUnit * odet = mono ? gdet.monoDet() : gdet.stereoDet();
Expand Down Expand Up @@ -203,6 +203,7 @@ ProjectedSiStripRecHit2D * TkClonerImpl::project(SiStripMatchedRecHit2D const &
hitErr = LocalError( hitErr.xx(), -hitErr.xy(), hitErr.yy());
}
LocalError rotatedError = hitErr.rotate( hitXAxis.x(), hitXAxis.y());
return new ProjectedSiStripRecHit2D(projectedHitPos, rotatedError, det, *odet,
mono ? hit.monoClusterRef() : hit.stereoClusterRef() );
return std::unique_ptr<ProjectedSiStripRecHit2D>{
new ProjectedSiStripRecHit2D(projectedHitPos, rotatedError, det, *odet,
mono ? hit.monoClusterRef() : hit.stereoClusterRef() ) };
}

0 comments on commit 7fcfdc9

Please sign in to comment.