Skip to content

Commit

Permalink
Merge pull request #2598 from VinInn/TkHit
Browse files Browse the repository at this point in the history
Reco updates -- TrackingRecHit rework
  • Loading branch information
ktf committed Mar 5, 2014
2 parents bbca249 + 3cd3ea5 commit f3b076f
Show file tree
Hide file tree
Showing 81 changed files with 332 additions and 311 deletions.
1 change: 1 addition & 0 deletions CommonTools/Utils/test/BuildFile.xml
@@ -1,4 +1,5 @@
<bin name="testCommonToolsUtil" file="testSelectors.cc,testSelectIterator.cc,testComparators.cc,testCutParser.cc,testExpressionParser.cc,testRunner.cpp">
<use name="Geometry/CommonDetUnit"/>
<use name="DataFormats/TrackReco"/>
<use name="DataFormats/TrackerRecHit2D"/>
<use name="DataFormats/Candidate"/>
Expand Down
34 changes: 33 additions & 1 deletion CommonTools/Utils/test/testCutParser.cc
Expand Up @@ -10,6 +10,32 @@
#include <typeinfo>
#include "Cintex/Cintex.h"



#include "DataFormats/GeometrySurface/interface/Surface.h"
#include "DataFormats/GeometrySurface/interface/BoundPlane.h"
#include <Geometry/CommonDetUnit/interface/GeomDet.h>

// A fake Det class

class MyDet : public GeomDet {
public:
MyDet(BoundPlane * bp) :
GeomDet(bp){}

virtual DetId geographicalId() const {return DetId();}
virtual std::vector< const GeomDet*> components() const {
return std::vector< const GeomDet*>();
}

/// Which subdetector
virtual SubDetector subDetector() const {return GeomDetEnumerators::DT;}

};




class testCutParser : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(testCutParser);
CPPUNIT_TEST(checkAll);
Expand Down Expand Up @@ -83,7 +109,13 @@ void testCutParser::checkAll() {
reco::TrackBase::CovarianceMatrix cov(e, e + 15);
trk = reco::Track(chi2, ndof, v, p, -1, cov);

hitOk = SiStripRecHit2D(LocalPoint(1,1), LocalError(1,1,1), 0, 0, SiStripRecHit2D::ClusterRef());

GlobalPoint gp(0,0,0);
BoundPlane* plane = new BoundPlane( gp, Surface::RotationType());
MyDet mdet(plane);
GeomDet * det = &mdet;

hitOk = SiStripRecHit2D(LocalPoint(1,1), LocalError(1,1,1), 0, 0, det, SiStripRecHit2D::ClusterRef());

edm::TypeWithDict t(typeid(reco::Track));
o = edm::ObjectWithDict(t, & trk);
Expand Down
78 changes: 68 additions & 10 deletions DataFormats/TrackerRecHit2D/interface/BaseTrackerRecHit.h
Expand Up @@ -2,8 +2,14 @@
#define BaseTrackerRecHit_H

#include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
#include "DataFormats/GeometrySurface/interface/LocalError.h"
#include "DataFormats/GeometryVector/interface/LocalPoint.h"
#include "DataFormats/TrackingRecHit/interface/TrackingRecHitGlobalState.h"
#include "DataFormats/GeometryCommonDetAlgo/interface/ErrorFrameTransformer.h"
#include "Geometry/CommonDetUnit/interface/GeomDet.h"
#include "DataFormats/GeometrySurface/interface/Surface.h"



// #define VI_DEBUG

class OmniClusterRef;

Expand All @@ -26,9 +32,18 @@ class BaseTrackerRecHit : public TrackingRecHit {

// no position (as in persistent)
BaseTrackerRecHit(DetId id, trackerHitRTTI::RTTI rt) : TrackingRecHit(id,(unsigned int)(rt)) {}
BaseTrackerRecHit(DetId id, GeomDet const * idet, trackerHitRTTI::RTTI rt) : TrackingRecHit(id, idet, (unsigned int)(rt)) {}

BaseTrackerRecHit( const LocalPoint& p, const LocalError&e,
DetId id, trackerHitRTTI::RTTI rt) : TrackingRecHit(id,(unsigned int)(rt)), pos_(p), err_(e){}
DetId id, GeomDet const * idet, trackerHitRTTI::RTTI rt) : TrackingRecHit(id,idet, (unsigned int)(rt)), pos_(p), err_(e){
if unlikely(!hasPositionAndError()) return;
LocalError lape = det()->localAlignmentError();
if (lape.valid())
err_ = LocalError(err_.xx()+lape.xx(),
err_.xy()+lape.xy(),
err_.yy()+lape.yy()
);
}

trackerHitRTTI::RTTI rtti() const { return trackerHitRTTI::rtti(*this);}
bool isSingle() const { return trackerHitRTTI::isSingle(*this);}
Expand All @@ -43,14 +58,17 @@ class BaseTrackerRecHit : public TrackingRecHit {
// verify that hits can share clusters...
inline bool sameDetModule(TrackingRecHit const & hit) const;

virtual LocalPoint localPosition() const GCC11_FINAL { return pos_;}
bool hasPositionAndError() const GCC11_FINAL;

virtual LocalPoint localPosition() const GCC11_FINAL { check(); return pos_;}

virtual LocalError localPositionError() const GCC11_FINAL { return err_;}
virtual LocalError localPositionError() const GCC11_FINAL { check(); return err_;}

bool hasPositionAndError() const GCC11_FINAL;

const LocalPoint & localPositionFast() const { return pos_; }
const LocalError & localPositionErrorFast() const { return err_; }
const LocalPoint & localPositionFast() const { check(); return pos_; }
const LocalError & localPositionErrorFast() const { check(); return err_; }



// to be specialized for 1D and 2D
virtual void getKfComponents( KfComponentsHolder & holder ) const=0;
Expand All @@ -60,15 +78,55 @@ class BaseTrackerRecHit : public TrackingRecHit {
void getKfComponents2D( KfComponentsHolder & holder ) const;


// global coordinates
// Extension of the TrackingRecHit interface
virtual const Surface * surface() const GCC11_FINAL {return &(det()->surface());}


virtual GlobalPoint globalPosition() const GCC11_FINAL {
return surface()->toGlobal(localPosition());
}

GlobalError globalPositionError() const GCC11_FINAL { return ErrorFrameTransformer().transform( localPositionError(), *surface() );}
float errorGlobalR() const GCC11_FINAL { return std::sqrt(globalPositionError().rerr(globalPosition()));}
float errorGlobalZ() const GCC11_FINAL { return std::sqrt(globalPositionError().czz()); }
float errorGlobalRPhi() const GCC11_FINAL { return globalPosition().perp()*sqrt(globalPositionError().phierr(globalPosition())); }

// once cache removed will obsolete the above
TrackingRecHitGlobalState globalState() const {
GlobalError
globalError = ErrorFrameTransformer::transform( localPositionError(), *surface() );
GlobalPoint gp = globalPosition();
float r = gp.perp();
float errorRPhi = r*std::sqrt(float(globalError.phierr(gp)));
float errorR = std::sqrt(float(globalError.rerr(gp)));
float errorZ = std::sqrt(float(globalError.czz()));
return (TrackingRecHitGlobalState){
gp.basicVector(), r, gp.barePhi(),
errorR,errorZ,errorRPhi
};
}


public:

// obsolete (for what tracker is concerned...) interface
virtual AlgebraicVector parameters() const;
virtual AlgebraicSymMatrix parametersError() const;
virtual AlgebraicMatrix projectionMatrix() const;

private:

private:

#ifdef VI_DEBUG
void check() const { assert(det());}
#elif EDM_LM_DEBUG
void check() const;
#else
static void check(){}
#endif

private:

LocalPoint pos_;
LocalError err_;
};
Expand Down
Expand Up @@ -8,9 +8,9 @@ class ProjectedSiStripRecHit2D : public BaseTrackerRecHit {

typedef BaseTrackerRecHit Base;
ProjectedSiStripRecHit2D() {};
ProjectedSiStripRecHit2D( const LocalPoint& pos, const LocalError& err, const DetId& id ,
ProjectedSiStripRecHit2D( const LocalPoint& pos, const LocalError& err, const DetId& id , GeomDet const * idet,
const SiStripRecHit2D* originalHit) :
BaseTrackerRecHit(pos, err, id, trackerHitRTTI::proj), originalHit_(*originalHit) {}
BaseTrackerRecHit(pos, err, id, idet, trackerHitRTTI::proj), originalHit_(*originalHit) {}

virtual ProjectedSiStripRecHit2D* clone() const {return new ProjectedSiStripRecHit2D( *this); }

Expand Down
4 changes: 2 additions & 2 deletions DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h
Expand Up @@ -30,9 +30,9 @@ class SiPixelRecHit GCC11_FINAL : public TrackerSingleRecHit {
~SiPixelRecHit() {}

SiPixelRecHit( const LocalPoint& pos , const LocalError& err,
const DetId& id,
const DetId& id, GeomDet const * idet,
ClusterRef const& clus) :
TrackerSingleRecHit(pos,err,id,clus),
TrackerSingleRecHit(pos,err,id,idet, clus),
qualWord_(0)
{}

Expand Down
Expand Up @@ -10,9 +10,9 @@ class SiStripMatchedRecHit2D GCC11_FINAL : public BaseTrackerRecHit {
SiStripMatchedRecHit2D(){}
~SiStripMatchedRecHit2D(){}

SiStripMatchedRecHit2D( const LocalPoint& pos, const LocalError& err, const DetId& id ,
SiStripMatchedRecHit2D( const LocalPoint& pos, const LocalError& err, const DetId& id , GeomDet const * idet,
const SiStripRecHit2D* rMono,const SiStripRecHit2D* rStereo):
BaseTrackerRecHit(pos, err, id, trackerHitRTTI::match), clusterMono_(rMono->omniClusterRef()), clusterStereo_(rStereo->omniClusterRef()){}
BaseTrackerRecHit(pos, err, id, idet, trackerHitRTTI::match), clusterMono_(rMono->omniClusterRef()), clusterStereo_(rStereo->omniClusterRef()){}

// by value, as they will not exists anymore...
SiStripRecHit2D stereoHit() const { return SiStripRecHit2D(stereoId(),stereoClusterRef()) ;}
Expand Down
24 changes: 5 additions & 19 deletions DataFormats/TrackerRecHit2D/interface/SiStripRecHit1D.h
Expand Up @@ -11,25 +11,18 @@ class SiStripRecHit1D GCC11_FINAL : public TrackerSingleRecHit {
public:


SiStripRecHit1D(): sigmaPitch_(-1.){}
SiStripRecHit1D(){}


typedef OmniClusterRef::ClusterStripRef ClusterRef;
typedef OmniClusterRef::ClusterRegionalRef ClusterRegionalRef;


SiStripRecHit1D( const LocalPoint& p, const LocalError& e,
const DetId& id,
OmniClusterRef const& clus) : TrackerSingleRecHit(p,e,id,clus), sigmaPitch_(-1.){}

template<typename CluRef>
SiStripRecHit1D( const LocalPoint& p, const LocalError& e,
const DetId& id,
ClusterRef const& clus) : TrackerSingleRecHit(p,e,id,clus), sigmaPitch_(-1.){}
const DetId& id, GeomDet const * idet,
CluRef const& clus) : TrackerSingleRecHit(p,e,id,idet,clus){}

SiStripRecHit1D( const LocalPoint& p, const LocalError& e,
const DetId& id,
ClusterRegionalRef const& clus) : TrackerSingleRecHit(p,e,id,clus), sigmaPitch_(-1.){}


/// method to facilitate the convesion from 2D to 1D hits
SiStripRecHit1D(const SiStripRecHit2D*);

Expand All @@ -44,13 +37,6 @@ class SiStripRecHit1D GCC11_FINAL : public TrackerSingleRecHit {
virtual void getKfComponents( KfComponentsHolder & holder ) const {getKfComponents1D(holder);}


double sigmaPitch() const { return sigmaPitch_;}
void setSigmaPitch(double sigmap) const { sigmaPitch_=sigmap;}

private:

/// cache for the matcher....
mutable double sigmaPitch_; // transient....
};

#endif
21 changes: 4 additions & 17 deletions DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h
Expand Up @@ -20,26 +20,13 @@ class SiStripRecHit2D GCC11_FINAL : public TrackerSingleRecHit {
TrackerSingleRecHit(id, clus),
sigmaPitch_(-1.) {}


template<typename CluRef>
SiStripRecHit2D( const LocalPoint& pos, const LocalError& err, float isigmaPitch,
const DetId& id,
OmniClusterRef const& clus) :
TrackerSingleRecHit(pos,err,id, clus),
const DetId& id, GeomDet const * idet,
CluRef const& clus) :
TrackerSingleRecHit(pos,err,id, idet, clus),
sigmaPitch_(isigmaPitch) {}

SiStripRecHit2D( const LocalPoint& pos, const LocalError& err, float isigmaPitch,
const DetId& id,
ClusterRef const& clus) :
TrackerSingleRecHit(pos,err,id, clus),
sigmaPitch_(isigmaPitch) {}


SiStripRecHit2D(const LocalPoint& pos, const LocalError& err, float isigmaPitch,
const DetId& id,
ClusterRegionalRef const& clus) :
TrackerSingleRecHit(pos,err,id, clus),
sigmaPitch_(isigmaPitch) {}


ClusterRef cluster() const { return cluster_strip() ; }
void setClusterRef(ClusterRef const & ref) {setClusterStripRef(ref);}
Expand Down
Expand Up @@ -20,7 +20,7 @@ class SiTrackerMultiRecHit : public BaseTrackerRecHit
virtual ~SiTrackerMultiRecHit(){}


SiTrackerMultiRecHit(const LocalPoint&, const LocalError&, const DetId&,
SiTrackerMultiRecHit(const LocalPoint&, const LocalError&, const DetId&, GeomDet const * idet,
const std::vector< std::pair<const TrackingRecHit*, float> >&);

virtual SiTrackerMultiRecHit* clone() const {return new SiTrackerMultiRecHit(*this);}
Expand Down
16 changes: 3 additions & 13 deletions DataFormats/TrackerRecHit2D/interface/TrackerSingleRecHit.h
Expand Up @@ -27,21 +27,11 @@ class TrackerSingleRecHit : public BaseTrackerRecHit {
OmniClusterRef const& clus) :
Base(id, trackerHitRTTI::single), cluster_(clus){}

template<typename CluRef>
TrackerSingleRecHit(const LocalPoint& p, const LocalError& e,
DetId id,
OmniClusterRef const& clus) : Base(p,e,id, trackerHitRTTI::single), cluster_(clus){}
DetId id, GeomDet const * idet,
CluRef const& clus) : Base(p,e,id, idet, trackerHitRTTI::single), cluster_(clus){}

TrackerSingleRecHit(const LocalPoint& p, const LocalError& e,
DetId id,
ClusterPixelRef const& clus) : Base(p,e,id, trackerHitRTTI::single), cluster_(clus){}

TrackerSingleRecHit(const LocalPoint& p, const LocalError& e,
DetId id,
ClusterStripRef const& clus) : Base(p,e,id, trackerHitRTTI::single), cluster_(clus){}

TrackerSingleRecHit(const LocalPoint& p, const LocalError& e,
DetId id,
ClusterRegionalRef const& clus) : Base(p,e,id, trackerHitRTTI::single), cluster_(clus){}

// used by trackMerger (to be improved)
virtual OmniClusterRef const & firstClusterRef() const GCC11_FINAL { return cluster_;}
Expand Down
15 changes: 11 additions & 4 deletions DataFormats/TrackerRecHit2D/src/BaseTrackerRecHit.cc
Expand Up @@ -5,8 +5,8 @@


namespace {
void
inline throwExceptionUninitialized(const char *where)
inline void
throwExceptionUninitialized(const char *where)
{
throw cms::Exception("BaseTrackerRecHit") <<
"Trying to access " << where << " for a RecHit that was read from disk, but since CMSSW_2_1_X local positions are transient.\n" <<
Expand All @@ -19,10 +19,17 @@ namespace {
}
}

#ifdef EDM_LM_DEBUG
void BaseTrackerRecHit::check() const {
if (!hasPositionAndError()) throwExceptionUninitialized("localPosition or Error");
}
#endif

bool BaseTrackerRecHit::hasPositionAndError() const {
return (err_.xx() != 0) || (err_.yy() != 0) || (err_.xy() != 0) ||
(pos_.x() != 0) || (pos_.y() != 0) || (pos_.z() != 0);
return det();

// return (err_.xx() != 0) || (err_.yy() != 0) || (err_.xy() != 0) ||
// (pos_.x() != 0) || (pos_.y() != 0) || (pos_.z() != 0);
}


Expand Down
5 changes: 2 additions & 3 deletions DataFormats/TrackerRecHit2D/src/SiStripRecHit1D.cc
Expand Up @@ -4,7 +4,6 @@
SiStripRecHit1D::SiStripRecHit1D(const SiStripRecHit2D* hit2D) :
TrackerSingleRecHit(hit2D->localPosition(),
LocalError(hit2D->localPositionError().xx(),0.f,std::numeric_limits<float>::max()),
hit2D->geographicalId(), hit2D->omniCluster()
),
sigmaPitch_(-1){}
hit2D->geographicalId(), hit2D->det(), hit2D->omniCluster()
){}

4 changes: 2 additions & 2 deletions DataFormats/TrackerRecHit2D/src/SiTrackerMultiRecHit.cc
Expand Up @@ -4,9 +4,9 @@
using namespace std;
using namespace edm;

SiTrackerMultiRecHit::SiTrackerMultiRecHit(const LocalPoint& pos, const LocalError& err, const DetId& id,
SiTrackerMultiRecHit::SiTrackerMultiRecHit(const LocalPoint& pos, const LocalError& err, const DetId& id, GeomDet const * idet,
const std::vector< std::pair<const TrackingRecHit*, float> >& aHitMap):
BaseTrackerRecHit(pos,err,id,trackerHitRTTI::multi)
BaseTrackerRecHit(pos,err,id,idet,trackerHitRTTI::multi)
{
for(std::vector<std::pair<const TrackingRecHit*, float> >::const_iterator ihit = aHitMap.begin(); ihit != aHitMap.end(); ihit++){
theHits.push_back(ihit->first->clone());
Expand Down
7 changes: 0 additions & 7 deletions DataFormats/TrackerRecHit2D/src/classes_def.xml
Expand Up @@ -25,15 +25,8 @@

<class name="SiStripRecHit1D" ClassVersion="12">
<version ClassVersion="12" checksum="3158843011"/>
<field name="sigmaPitch_" transient="true" />
<version ClassVersion="11" checksum="1486832741"/>
<field name="sigmaPitch_" transient="true" />
<!-- <field name="pos_" transient="true" /> -->
<!-- <field name="err_" transient="true" /> -->
<version ClassVersion="10" checksum="1325274892"/>
<field name="sigmaPitch_" transient="true" />
<!-- <field name="pos_" transient="true" /> -->
<!-- <field name="err_" transient="true" /> -->
</class>

<class name="SiStripRecHit2D" ClassVersion="12">
Expand Down
1 change: 1 addition & 0 deletions DataFormats/TrackingRecHit/BuildFile.xml
@@ -1,5 +1,6 @@
<use name="DataFormats/Common"/>
<use name="DataFormats/GeometrySurface"/>
<use name="Geometry/CommonDetUnit"/>
<use name="FWCore/Utilities"/>
<use name="clhep"/>
<use name="rootrflx"/>
Expand Down

0 comments on commit f3b076f

Please sign in to comment.