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

◆ Cluster1DMerger() [1/2]

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

Definition at line 30 of file Cluster1DMerger.h.

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

◆ ~Cluster1DMerger()

template<class T >
Cluster1DMerger< T >::~Cluster1DMerger ( )

Definition at line 33 of file Cluster1DMerger.h.

33  {
34  delete theEstimator;
35 }
WeightEstimator< T > * theEstimator

◆ Cluster1DMerger() [2/2]

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

◆ operator()()

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 first, mps_fire::i, edm::second(), mathSSE::sqrt(), and tracks.

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 }
U second(std::pair< T, U > const &p)
T sqrt(T t)
Definition: SSEVec.h:19
auto const & tracks
cannot be loose
WeightEstimator< T > * theEstimator

Member Data Documentation

◆ theEstimator

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

Definition at line 22 of file Cluster1DMerger.h.