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 32 of file Cluster1DMerger.h.

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

Definition at line 36 of file Cluster1DMerger.h.

References Cluster1DMerger< T >::theEstimator.

37 {
38  delete theEstimator;
39 }
WeightEstimator< T > * theEstimator
template<class T >
Cluster1DMerger< T >::Cluster1DMerger ( const Cluster1DMerger< T > &  other)

Definition at line 42 of file Cluster1DMerger.h.

42  :
43  theEstimator ( other.theEstimator->clone() )
44 {}
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 47 of file Cluster1DMerger.h.

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

49 {
50  std::vector < const T * > tracks = first.tracks();
51  std::vector < const T * > sectracks = second.tracks();
52  for ( typename std::vector< const T * >::const_iterator i=sectracks.begin();
53  i!=sectracks.end() ; ++i )
54  {
55  tracks.push_back ( *i );
56  };
57  double V1=first.position().error() * first.position().error();
58  double V2=second.position().error() * second.position().error();
59  double C1=first.weight() / V1;
60  double C2=second.weight() / V2;
61 
62  double newpos = ( first.position().value() * C1 +
63  second.position().value() * C2 ) / ( C1 + C2 );
64 
65  double newerr = sqrt ( C1 * C1 * V1 + C2 * C2 * V2 ) / ( C1 + C2 );
66  double newWeight = theEstimator->weight ( tracks );
67 
68  Measurement1D newmeas ( newpos, newerr );
69  return Cluster1D<T> ( newmeas, tracks, newWeight );
70 }
double error() const
Definition: Measurement1D.h:27
T sqrt(T t)
Definition: SSEVec.h:18
std::vector< const T * > tracks() const
Definition: Cluster1D.h:49
Measurement1D position() const
Definition: Cluster1D.h:55
double weight() const
Definition: Cluster1D.h:61
double value() const
Definition: Measurement1D.h:25
WeightEstimator< T > * theEstimator

Member Data Documentation

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