FairRoot/PandaRoot
Functions
PndCAFunctionality Namespace Reference

Functions

float_m FitIteration (const PndCAParam &caParam, const PndCAHits &hits, PndCATrackParamVector &param, const vector< PndCATESV > &iHits, const PndCATarget &target, bool dir, bool useParam, const float_m &active=float_m(true))
 
float_m Fit (const PndCAParam &caParam, const PndCAHits &hits, PndCATrackParamVector &param, const vector< PndCATESV > &iHits, const PndCATarget &target, bool dir, const float_m &active=float_m(true))
 

Function Documentation

float_m PndCAFunctionality::Fit ( const PndCAParam caParam,
const PndCAHits hits,
PndCATrackParamVector param,
const vector< PndCATESV > &  iHits,
const PndCATarget target,
bool  dir,
const float_m &  active = float_m(true) 
)

Definition at line 56 of file PndCAFunctionality.cxx.

References FitIteration(), i, and PndCATrackParamVector::QMomentum().

Referenced by PndCATrack::Fit().

57 {
58  float_m active = mask;
59  int i = 0;
60 
61  float_v qMom = float_v(10e10f);
62 
63 #if 1
64  while ( (++i < 10) && ( abs( (param.QMomentum() - qMom)/qMom ) > 0.005f ) ) { //SG!!! 10 iterations !!!
65  qMom = param.QMomentum();
66  if( active.isEmpty() ) break;
67  active &= FitIteration( caParam, hits, param, iHits, target, dir, false, active );
68  break;// SG!!
69  }
70 #else // for Panda it is and slower, since doesn't use target z-coor?
71  active &= FitIteration( caParam, hits, param, iHits, target, dir, false, active );
72  while ( (++i < 5) && ( abs( (param.QMomentum() - qMom)/qMom ) > 0.005f ) ) {
73  qMom = param.QMomentum();
74  active &= FitIteration( caParam, hits, param, iHits, target, !dir, true, active );
75  active &= FitIteration( caParam, hits, param, iHits, target, dir, true, active );
76  }
77 #endif
78  return active;
79 }
Int_t i
Definition: run_full.C:25
float_m FitIteration(const PndCAParam &caParam, const PndCAHits &hits, PndCATrackParamVector &param, const vector< PndCATESV > &iHits, const PndCATarget &target, bool dir, bool useParam, const float_m &active=float_m(true))
float_m PndCAFunctionality::FitIteration ( const PndCAParam caParam,
const PndCAHits hits,
PndCATrackParamVector param,
const vector< PndCATESV > &  iHits,
const PndCATarget target,
bool  dir,
bool  useParam,
const float_m &  active = float_m(true) 
)

Definition at line 13 of file PndCAFunctionality.cxx.

References PndCAHitV::Angle(), PndCATESV::e, PndCATarget::Err2QMom(), PndCATrackParamVector::Filter(), hit(), PndCATrackParamVector::InitByTarget(), PndCATrackParamVector::InitCovMatrix(), PndCATrackParamVector::InitDirection(), PndCATrackParamVector::QMomentum(), PndCATESV::s, PndCATrackParamVector::SetAngle(), PndCATrackParamVector::SetQMomentum(), PndCATrackParamVector::Transport(), PndCAHitV::X0(), PndCAHitV::X1(), and PndCAHitV::X2().

Referenced by CAFunctionality::Fit(), Fit(), and CAFunctionality::FitUseParam().

14 {
15  const unsigned int NTHits = iHits.size();
16  float_m active = mask;
17  if( active.isEmpty() ) return active;
18  // get hits
19  vector<PndCAHitV> thits( NTHits );
20  for ( unsigned int ihit = 0; ihit < NTHits; ihit++ ) {
21  PndCATESV index = iHits[ihit];
22  if (!dir) index = iHits[NTHits-1-ihit];
23 
24  PndCAHit hs[float_v::Size];
25  foreach_bit(unsigned int iV, active) {
26  hs[iV] = hits[index.s[iV]][index.e[iV]];
27  }
28 
29  thits[ihit] = PndCAHitV( hs, active );
30  }
31 
32  const PndCAHitV& hit0 = thits[0];
33 
34  if (!useParam) {
35  float_v qMom = param.QMomentum();
36  param.InitByTarget(target);
37  param.SetQMomentum(qMom);
38  param.InitDirection( hit0.X0(), hit0.X1(), hit0.X2() );
39  param.SetAngle( hit0.Angle() );
40  }
41  else {
42  param.InitCovMatrix( target.Err2QMom() );
43  }
44 
45  for ( unsigned int ihit = 0; ihit < NTHits; ihit++ ) {
46  if( active.isEmpty() ) break;
47  const PndCAHitV& hit = thits[ihit];
48  active &= param.Transport( hit, caParam, active );
49  if( active.isEmpty() ) break;
50  active &= param.Filter( hit, caParam, active );
51  }
52 
53  return active;
54 }
void InitByTarget(const PndCATarget &target)
void SetAngle(const float_v &v)
float_v X1() const
Definition: PndCAHitsV.h:44
int_v s
Definition: PndCATES.h:42
float_m Filter(const PndCAHitV &hit, const PndCAParam &param, const float_m &mask=float_m(true), const float_v &chi2Cut=10e10f)
void InitCovMatrix(float_v d2QMom=0.f)
uint_v e
Definition: PndCATES.h:43
float_v X2() const
Definition: PndCAHitsV.h:45
void InitDirection(float_v r0, float_v r1, float_v r2)
void SetQMomentum(const float_v &v)
int hit(Int_t nEvents=0, TString inFile="sim.root", TString parFile="par.root", TString inDigi="digi.root", TString outFile="hit.root", Int_t timeBased=0)
Definition: hit.C:1
float_v Angle() const
Definition: PndCAHitsV.h:59
float Err2QMom() const
Definition: PndCATarget.h:29
float_m Transport(const int_v &ista, const PndCAParam &param, const float_m &mask=float_m(true))
float_v X0() const
Definition: PndCAHitsV.h:43