CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
Cluster1DMerger< T > Class Template Reference

#include <Cluster1DMerger.h>

Public Member Functions

 Cluster1DMerger (const WeightEstimator< T > &)
 
 Cluster1DMerger (const Cluster1DMerger &)
 
Cluster1D< Toperator() (const Cluster1D< T > &first, const Cluster1D< T > &second) const
 
 ~Cluster1DMerger ()
 

Private Attributes

WeightEstimator< T > * theEstimator
 

Detailed Description

template<class T>
class Cluster1DMerger< T >

The class that should always be used to merge two Cluster1D into a single Cluster1D.

Definition at line 14 of file Cluster1DMerger.h.

Constructor & Destructor Documentation

template<class T >
Cluster1DMerger< T >::Cluster1DMerger ( const WeightEstimator< T > &  est)

Definition at line 30 of file Cluster1DMerger.h.

30 : theEstimator(est.clone()) {}
virtual WeightEstimator * clone() const =0
WeightEstimator< T > * theEstimator
template<class T >
Cluster1DMerger< T >::~Cluster1DMerger ( )

Definition at line 33 of file Cluster1DMerger.h.

References Cluster1DMerger< T >::theEstimator.

33  {
34  delete theEstimator;
35 }
WeightEstimator< T > * theEstimator
template<class T >
Cluster1DMerger< T >::Cluster1DMerger ( const Cluster1DMerger< T > &  other)

Definition at line 38 of file Cluster1DMerger.h.

38 : theEstimator(other.theEstimator->clone()) {}
WeightEstimator< T > * theEstimator

Member Function Documentation

template<class T >
Cluster1D< T > Cluster1DMerger< T >::operator() ( const Cluster1D< T > &  first,
const Cluster1D< T > &  second 
) const

Definition at line 41 of file Cluster1DMerger.h.

References Measurement1D::error(), mps_fire::i, Cluster1D< T >::position(), mathSSE::sqrt(), Cluster1DMerger< T >::theEstimator, Cluster1D< T >::tracks(), PDWG_EXOHSCP_cff::tracks, Measurement1D::value(), and Cluster1D< T >::weight().

41  {
42  std::vector<const T*> tracks = first.tracks();
43  std::vector<const T*> sectracks = second.tracks();
44  for (typename std::vector<const T*>::const_iterator i = sectracks.begin(); i != sectracks.end(); ++i) {
45  tracks.push_back(*i);
46  };
47  double V1 = first.position().error() * first.position().error();
48  double V2 = second.position().error() * second.position().error();
49  double C1 = first.weight() / V1;
50  double C2 = second.weight() / V2;
51 
52  double newpos = (first.position().value() * C1 + second.position().value() * C2) / (C1 + C2);
53 
54  double newerr = sqrt(C1 * C1 * V1 + C2 * C2 * V2) / (C1 + C2);
55  double newWeight = theEstimator->weight(tracks);
56 
57  Measurement1D newmeas(newpos, newerr);
58  return Cluster1D<T>(newmeas, tracks, newWeight);
59 }
double error() const
Definition: Measurement1D.h:27
T sqrt(T t)
Definition: SSEVec.h:19
std::vector< const T * > tracks() const
Definition: Cluster1D.h:41
Measurement1D position() const
Definition: Cluster1D.h:46
double weight() const
Definition: Cluster1D.h:51
double value() const
Definition: Measurement1D.h:25
WeightEstimator< T > * theEstimator

Member Data Documentation

template<class T>
WeightEstimator<T>* Cluster1DMerger< T >::theEstimator
private