FairRoot/PandaRoot
Functions
CAFunctionality Namespace Reference

Functions

float_m FitIteration (const PndFTSCAParam &caParam, const FTSCAHits &hits, PndFTSCATrackParamVector &param, const vector< TESV > &iHits, const FTSCATarget &target, bool dir, bool useParam, const float_m &active=float_m(true))
 
float_m Fit (const PndFTSCAParam &caParam, const FTSCAHits &hits, PndFTSCATrackParamVector &param, const vector< TESV > &iHits, const FTSCATarget &target, bool dir, const float_m &active=float_m(true))
 
float_m FitUseParam (const PndFTSCAParam &caParam, const FTSCAHits &hits, PndFTSCATrackParamVector &param, const vector< TESV > &iHits, const FTSCATarget &target, bool dir, bool usePar=false, const float_m &mask=float_m(true))
 

Function Documentation

float_m CAFunctionality::Fit ( const PndFTSCAParam caParam,
const FTSCAHits hits,
PndFTSCATrackParamVector param,
const vector< TESV > &  iHits,
const FTSCATarget target,
bool  dir,
const float_m &  active = float_m(true) 
)

Definition at line 174 of file CAFunctionality.cxx.

References PndCAFunctionality::FitIteration(), i, and PndFTSCATrackParamVector::QMomentum().

Referenced by FTSCATrack::Fit(), and FTSCATrack::Fit2Times().

175 {
176  float_m active1 = mask;
177  int_v maskvar(1);
178  foreach_bit(unsigned short iV, active1)
179  {
180  if (iV!=0)
181  {
182  maskvar[iV] = 0;
183  }
184  }
185 
186  float_m active = static_cast<float_m> (maskvar!=0);
187  //int i = 0; //[R.K. 9/2018] unused
188 
189  float_v qMom = float_v(10e10f);
190 
191 #if 1
192  qMom = param.QMomentum();
193  //cout<<"FitIteration "<<i<<endl;
194  active &= FitIteration( caParam, hits, param, iHits, target, dir, false, active );
195  /*
196  while ( (++i < 10) && ( abs( (param.QMomentum() - qMom)/qMom ) > 0.005f ) ) {
197  qMom = param.QMomentum();
198  cout<<"FitIteration "<<i<<endl;
199  active &= FitIteration( caParam, hits, param, iHits, target, dir, false, active );
200  }
201  */
202 #else // for Panda it is and slower, since doesn't use target z-coor?
203  active &= FitIteration( caParam, hits, param, iHits, target, dir, false, active );
204  while ( (++i < 5) && ( abs( (param.QMomentum() - qMom)/qMom ) > 0.005f ) ) {
205  qMom = param.QMomentum();
206  active &= FitIteration( caParam, hits, param, iHits, target, !dir, true, active );
207  active &= FitIteration( caParam, hits, param, iHits, target, dir, true, active );
208  }
209 #endif
210  return active;
211 }
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 CAFunctionality::FitIteration ( const PndFTSCAParam caParam,
const FTSCAHits hits,
PndFTSCATrackParamVector param,
const vector< TESV > &  iHits,
const FTSCATarget target,
bool  dir,
bool  useParam,
const float_m &  active = float_m(true) 
)

Definition at line 14 of file CAFunctionality.cxx.

References FTSCAHitV::Angle(), TESV::e, PndFTSCATrackParamVector::Filter(), hit, PndFTSCATrackParamVector::InitByTarget(), PndFTSCATrackParamVector::InitDirection(), PndFTSCATrackParamVector::QMomentum(), TESV::s, PndFTSCATrackParamVector::SetAngle(), PndFTSCATrackParamVector::SetQMomentum(), PndFTSCATrackParamVector::Transport(), FTSCAHitV::X0(), FTSCAHitV::X1(), and FTSCAHitV::X2().

15 {
16  const int NTHits = iHits.size();
17  float_m active = mask;
18 
19  //get hits
20  vector<FTSCAHitV> thits( NTHits );
21  for ( unsigned short ihit = 0; ihit < NTHits; ihit++ ) {
22  TESV index = iHits[ihit];
23  if (!dir) index = iHits[NTHits-1-ihit];
24 
25  FTSCAHit hs[float_v::Size];
26  foreach_bit(unsigned short iV, active) {
27  hs[iV] = hits[index.s[iV]][index.e[iV]];
28  }
29  thits[ihit] = FTSCAHitV( hs, active );
30  }
31 
32  const FTSCAHitV& hit0 = thits[NTHits-1];
33  /*
34  cout<<"active "<<active<<endl;
35  cout<<"hit0.X0() "<<hit0.X0()<<endl;
36  cout<<"hit0.X1() "<<hit0.X1()<<endl;
37  cout<<"hit0.X2() "<<hit0.X2()<<endl;
38  if (!useParam) {
39  //float_v qMom = param.QMomentum();
40  param.InitByTarget(target);
41  //param.SetQMomentum(qMom, active);
42  param.InitDirection( hit0.X0(), hit0.X1(), hit0.X2() );
43  param.SetAngle( hit0.Angle() );
44  }
45  else {
46  param.InitCovMatrix( target.Err2QMom() );
47  }
48  */
49  if (useParam)
50  {
51  //NTHits-=1; DON'T FORGET TO DO THIS IF USEPARAM
52  float_v qMom = param.QMomentum();
53  /*float_v x = param.X();
54  float_v y = param.Y();
55  float_v z = param.Z();
56  float_v tx = param.Tx();
57  float_v ty = param.Ty();*/
58  /*float_v c00 = param.Cov(0);
59  float_v c11 = param.Cov(2);
60  float_v c22 = param.Cov(5);
61  float_v c33 = param.Cov(9);
62  float_v c44 = param.Cov(14);*/
63  /*float_v c[15];
64  for (int i=0; i<15; i++)
65  {
66  c[i] = param.Cov(i);
67  }*/
68  param.InitByTarget(target);
69  /*param.SetX(x, active);
70  param.SetY(y, active);
71  param.SetZ(z, active);
72  param.SetTx(tx, active);
73  param.SetTy(ty, active);*/
74  param.SetQMomentum(qMom, active);
75  cout<<"param.QP() "<<param.QP()<<endl;
76  /*param.SetCov(0,c00);
77  param.SetCov(2,c11);
78  param.SetCov(5,c22);
79  param.SetCov(9,c33);
80  param.SetCov(14,c44);*/
81  /*for (int i=0; i<15; i++)
82  {
83  param.SetCov(i,c[i]);
84  }*/
85  //param.InitDirection( hit0.X0(), hit0.X1(), hit0.X2() );
86  param.SetAngle( hit0.Angle() );
87  //cout<<param<<endl;
88  }
89  else
90  {
91  param.InitByTarget(target);
92  param.InitDirection( hit0.X0(), hit0.X1(), hit0.X2() );
93  param.SetAngle( hit0.Angle() );
94  }
95  /*cout<<"Before Fit "<<endl;
96  cout<<param<<endl;
97  param.PrintCovMat();
98  */
99  //fit bckwrd
100  for ( int ihit = NTHits-1; ihit >= 0; ihit-- )
101  {
102  const FTSCAHitV& hit = thits[ihit];
103  active &= param.Transport( hit, caParam, active );
104  active &= param.Filter( hit, caParam, active );
105  /*if (useParam)
106  {cout<<"1.after filter Z "<<param.Z()<<endl;
107  cout<<param<<endl;
108  param.PrintCovMat();
109  }*/
110  //cout<<"2.after filter NDF "<<param.NDF()<<" Chi2 "<<param.Chi2()<<endl;
111  }
112  //param.PrintCovMat();
113  //param.InitCovMatrix(target.Err2QMom());
114  /*int_v ndf;
115  ndf(static_cast<int_m>(active)) = -4;
116  param.SetNDF(ndf);
117  param.SetChi2(0.f);
118  //cout<<"2. fit bckwrd NDF "<<param.NDF()<<" Chi2 "<<param.Chi2()<<endl;
119  for ( int ihit = 1; ihit < NTHits; ihit++ )
120  {
121  const FTSCAHitV& hit = thits[ihit];
122  active &= param.Transport( hit, caParam, active );
123  active &= param.Filter( hit, caParam, active );
124  cout<<"2.after filter Z "<<param.Z()<<endl;
125  cout<<param<<endl;
126  //cout<<"1.after filter NDF "<<param.NDF()<<" Chi2 "<<param.Chi2()<<endl;
127  }
128  //param.PrintCovMat();
129  //param.InitCovMatrix(target.Err2QMom());
130  param.SetNDF(ndf);
131  param.SetChi2(0.f);
132  //cout<<"2. fit bckwrd NDF "<<param.NDF()<<" Chi2 "<<param.Chi2()<<endl;
133  //fit bckwd
134  for ( int ihit = NTHits-2; ihit >= 0; ihit-- )
135  {
136  const FTSCAHitV& hit = thits[ihit];
137  active &= param.Transport( hit, caParam, active );
138  active &= param.Filter( hit, caParam, active );
139  cout<<"3.after filter Z "<<param.Z()<<endl;
140  cout<<param<<endl;
141  //cout<<"2.after filter NDF "<<param.NDF()<<" Chi2 "<<param.Chi2()<<endl;
142  }
143 
144  param.SetNDF(ndf);
145  param.SetChi2(0.f);
146  //cout<<"2. fit bckwrd NDF "<<param.NDF()<<" Chi2 "<<param.Chi2()<<endl;
147  for ( int ihit = 1; ihit < NTHits; ihit++ )
148  {
149  const FTSCAHitV& hit = thits[ihit];
150  active &= param.Transport( hit, caParam, active );
151  active &= param.Filter( hit, caParam, active );
152  cout<<"4.after filter Z "<<param.Z()<<endl;
153  cout<<param<<endl;
154  //cout<<"1.after filter NDF "<<param.NDF()<<" Chi2 "<<param.Chi2()<<endl;
155  }*/
156 
157  /* for ( unsigned short ihit = 0; ihit < NTHits; ihit++ ) {
158  const FTSCAHitV& hit = thits[ihit];
159  active &= param.Transport( hit, caParam, active );
160  cout<<"transport \n";
161  cout<<param<<endl;
162  active &= param.Filter( hit, caParam, active );
163  cout<<"filter \n";
164  cout<<param<<endl;
165  }
166  */
167  /*cout<<"After Fit "<<endl;
168  cout<<param<<endl;
169  param.PrintCovMat();
170  std::cin.get();*/
171  return active;
172 }
float_v X2() const
Definition: FTSCAHitsV.h:51
int_v s
Definition: FTSCATES.h:42
Definition: FTSCATES.h:28
float_v X1() const
Definition: FTSCAHitsV.h:50
float_v Angle() const
Definition: FTSCAHitsV.h:73
float_m Transport(const int_v &ista, const PndFTSCAParam &param, const float_m &mask=float_m(true))
void InitDirection(float_v r0, float_v r1, float_v r2)
uint_v e
Definition: FTSCATES.h:43
void SetQMomentum(const float_v &v)
float_v X0() const
Definition: FTSCAHitsV.h:49
void InitByTarget(const FTSCATarget &target)
PndSdsMCPoint * hit
Definition: anasim.C:70
float_m Filter(const FTSCAHitV &hit, const PndFTSCAParam &param, const float_m &mask=float_m(true), const float_v &chi2Cut=10e10f)
float_m CAFunctionality::FitUseParam ( const PndFTSCAParam caParam,
const FTSCAHits hits,
PndFTSCATrackParamVector param,
const vector< TESV > &  iHits,
const FTSCATarget target,
bool  dir,
bool  usePar = false,
const float_m &  mask = float_m(true) 
)

Definition at line 213 of file CAFunctionality.cxx.

References PndCAFunctionality::FitIteration().

Referenced by FTSCATrack::Fit().

214 {
215  float_m active1 = mask;
216  int_v maskvar(1);
217  foreach_bit(unsigned short iV, active1)
218  {
219  if (iV!=0)
220  {
221  maskvar[iV] = 0;
222  }
223  }
224 
225  float_m active = static_cast<float_m> (maskvar!=0);
226  active &= FitIteration( caParam, hits, param, iHits, target, dir, usePar, active );
227  return active;
228 }
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))