34 inline float sqr(
float x) {
return x*
x; }
38 float areaParallelogram
39 (
const Vector2D&
a,
const Vector2D&
b)
41 return a.x() * b.y() - a.y() * b.x();
55 if(0.
f == curvature) {
56 LogDebug(
"LowPtClusterShapeSeedComparitor")<<
"the curvature is null:"
59 <<
"\n point3: "<<g[2];
65 Vector2D
c = circle.center();
66 for(
int i=0;
i!=3;
i++)
67 p[
i] = g[
i].basicVector().xy() -
c;
70 float area =
std::abs(areaParallelogram(p[1] - p[0], p[1]));
72 float a12 = std::asin(
std::min(area*curvature*curvature,1.
f));
74 float slope = (g[1].
z() - g[0].
z()) / a12;
80 float cosTheta = cotTheta*sinTheta;
82 if (areaParallelogram(p[0], p[1] ) < 0) sinTheta = - sinTheta;
84 for(
int i = 0;
i!=3;
i++) {
85 Vector2D vl = p[
i]*(curvature*sinTheta);
101 for(
unsigned int i=0;
i!=hits.
size(); ++
i)
102 globalPoss[
i] = hits[
i]->globalPosition();
127 throw cms::Exception(
"LogicError") <<
"LowPtClusterShapeSeedComparitor: init(EventSetup) method was not called";
131 getGlobalPos(hits, globalPoss);
136 bool ok = getGlobalDirs(globalPoss,globalDirs);
143 LogDebug(
"LowPtClusterShapeSeedComparitor")<<
"curvarture 0:"
144 <<
"\nnHits: "<<hits.
size()
145 <<
" will say the seed is good anyway.";
149 for(
int i = 0;
i < 3;
i++)
155 edm::LogError(
"LowPtClusterShapeSeedComparitor")<<
"this is not a pixel cluster";
164 LogDebug(
"LowPtClusterShapeSeedComparitor")<<
"about to compute compatibility."
165 <<
"hit ptr: "<<pixelRecHit
166 <<
"global direction:"<< globalDirs[
i];
169 if(! filter->isCompatible(*pixelRecHit, globalDirs[
i], *thePixelClusterShapeCache) )
171 LogTrace(
"LowPtClusterShapeSeedComparitor")
172 <<
" clusShape is not compatible"
bool getByToken(EDGetToken token, Handle< PROD > &result) const
static const double slope[3]
edm::ESHandle< ClusterShapeHitFilter > theShapeFilter
something
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
edm::ESHandle< TrackerTopology > theTTopo
T x() const
Cartesian x coordinate.
T curvature(T InversePt, const edm::EventSetup &iSetup)
Basic2DVector< double >::MathVector Vector2D
Abs< T >::type abs(const T &t)
LowPtClusterShapeSeedComparitor(const edm::ParameterSet &ps, edm::ConsumesCollector &iC)
edm::Handle< SiPixelClusterShapeCache > thePixelClusterShapeCache
virtual void init(const edm::Event &e, const edm::EventSetup &es)
virtual bool compatible(const SeedingHitSet &hits) const
edm::EDGetTokenT< SiPixelClusterShapeCache > thePixelClusterShapeCacheToken
Square< F >::type sqr(const F &f)
unsigned int size() const
static std::string getInfo(const DetId &id, const TrackerTopology *tTopo)
Global3DVector GlobalVector