15 #include "FairRootManager.h"
20 #include "TClonesArray.h"
25 #include "TPolyLine.h"
74 *ioman = FairRootManager::Instance();
78 cout <<
"-E- PndSttHelixTrackFitter::Init: "
79 <<
"RootManager not instantised!" << endl;
84 fHitArray = (TClonesArray*) ioman->GetObject(
"STTHit");
87 cout <<
"-W- PndSttHelixTrackFitter::Init: No Hit array!"
92 fPointArray = (TClonesArray*) ioman->GetObject(
"STTPoint");
95 cout <<
"-W- PndSttHelixTrackFitter::Init: No Point array!"
113 cout <<
"PndSttHelixTrackFitter::DoFit, Constraint 1 not usable now. A big change is needed to use start point from PndTrack and not PndTrackCand anymore" << endl;
118 cout <<
"PndSttHelixTrackFitter::DoFit, Constraint " <<
fConstraint <<
" not implemented" << endl;
129 if(!pTrackCand)
return 0;
135 cout <<
"press any key to continue: " << endl;
141 fit =
XYFit(pTrackCand, 1);
156 if(
fVerbose == 2) cout <<
"-E- prefit FAILED" << endl;
165 fit =
XYFit(pTrackCand, 2);
167 if(Rint == kTRUE) fit =
MinuitFit(pTrackCand, 2);
169 if(Rint == kTRUE) fit =
MinuitFit(pTrackCand, 2);
181 Int_t zfit =
ZFit(pTrackCand, 1);
186 else if(
fVerbose == 2) cout <<
"-E- zfinder FAILED" << endl;
192 cout <<
"param last phi : " <<
fTrack->
GetPhi() << endl;
199 cout <<
"pT : " << pt << endl;
200 cout <<
"pL : " << pl << endl;
212 if(!pTrackCand)
return 0;
214 Int_t hitcounter = pTrackCand->
GetNHits();
216 if(hitcounter == 0)
return 0;
218 if(
fVerbose == 2) cout <<
"Bad No of hits in STT " << hitcounter << endl;
221 if(
fVerbose == 2) cout <<
"FIT xy ********************" << endl;
229 if(
fVerbose == 2) cout <<
"hitcounter: " << hitcounter << endl;
230 for(Int_t k = 0; k <hitcounter; k++) {
235 if(!currenthit) { cout <<
"PndSttHelixTrackFitter::XYFit: no hit at " << iHit << endl;
continue; }
237 if(currenthit->GetX() == -999 || currenthit->GetY() == -999)
continue;
238 Int_t refindex = currenthit->GetRefIndex();
241 if(!iPoint) { cout <<
"PndSttHelixTrackFitter::XYFit: no point at " << refindex <<
" associated to hit " << iHit << endl;
continue; }
250 if(wiredirection != TVector3(0.,0.,1.))
continue;
251 else if(first == kFALSE)
255 trasl[0] = hitfirst->GetX();
256 trasl[1] = hitfirst->GetY();
260 alpha =
TMath::ATan2(hitlast->GetY() - hitfirst->GetY(), hitlast->GetX() - hitfirst->GetX());
271 Double_t Suu, Su, Sv, Suv, S1, Suuu, Suuv, Suuuu;
282 Int_t digicounter = 0;
283 TArrayD uarray(hitcounter);
284 TArrayD varray(hitcounter);
285 TArrayD sigv2array(hitcounter);
286 TArrayD sigu2array(hitcounter);
288 for(Int_t
i=0;
i < hitcounter;
i++){
289 uarray.AddAt(-999,
i);
290 varray.AddAt(-999,
i);
291 sigv2array.AddAt(-999,
i);
292 sigu2array.AddAt(-999,
i);
294 for(Int_t
i=0;
i < hitcounter;
i++){
299 if(!currenthit) { cout <<
"PndSttHelixTrackFitter::XYFit: no hit at " << iHit << endl;
continue; }
300 if(currenthit->GetX() == -999 || currenthit->GetY() == -999)
continue;
301 Int_t refindex = currenthit->GetRefIndex();
304 if(!iPoint) { cout <<
"PndSttHelixTrackFitter::XYFit: no point at " << refindex <<
" associated to hit " << iHit << endl;
continue; }
311 if(wiredirection != TVector3(0.,0.,1.))
continue;
323 xtrasl = currenthit->GetX() - trasl[0];
324 ytrasl = currenthit->GetY() - trasl[1];
337 TMarker *
pt =
new TMarker(xrot, yrot, 6);
338 pt->SetMarkerColor(3);
345 u = xtrasl / (xtrasl*xtrasl + ytrasl*ytrasl);
346 v = ytrasl / (xtrasl*xtrasl + ytrasl*ytrasl);
350 TMarker *uv =
new TMarker(u, v, 6);
352 if(whatToFit == 2) uv->Draw(
"SAME");
377 Double_t dvdx = (-2 * xtrasl * ytrasl)/pow((xtrasl*xtrasl + ytrasl*ytrasl),2);
378 Double_t dvdy = (xtrasl*xtrasl - ytrasl*ytrasl) / pow((xtrasl*xtrasl + ytrasl*ytrasl),2);
379 Double_t dudx = (ytrasl*ytrasl - xtrasl*xtrasl) / pow((xtrasl*xtrasl + ytrasl*ytrasl),2);
380 Double_t dudy = (-2 * xtrasl * ytrasl)/pow((xtrasl*xtrasl + ytrasl*ytrasl),2);
382 sigu2 = dudx * dudx * sigx * sigx + dudy * dudy * sigy * sigy + 2 * dudx * dudy * sigx * sigy;
383 sigv2 = dvdx * dvdx * sigx * sigx + dvdy * dvdy * sigy * sigy + 2 * dvdx * dvdy * sigx * sigy;
385 uarray.AddAt(u, digicounter);
386 varray.AddAt(v, digicounter);
387 sigu2array.AddAt(sigu2, digicounter);
388 sigv2array.AddAt(sigv2, digicounter);
393 Suv = Suv + ((u*
v)/sigv2);
394 Suu = Suu + ((u*u)/sigv2);
396 Suuu = Suuu + ((u*u*u)/sigv2);
397 Suuv = Suuv + ((u*u*
v)/sigv2);
399 Suuuu = Suuuu + ((u*u*u*u)/sigv2);
417 matrix[2][2] = Suuuu;
421 determ = matrix.Determinant();
428 if(
fVerbose == 2) cout <<
"DET 0" << endl;
437 column2.Mult(matrix, column);
445 std::cout <<
"1) parabolic parameters:\n";
446 std::cout <<
"a = " << column2[0][0] <<
"\n";
447 std::cout <<
"b = " << column2[1][0] <<
"\n";
448 std::cout <<
"c = " << column2[2][0] <<
"\n";
450 if(
fabs(a)<0.000001)
return 0;
454 for(Int_t
i=0;
i < digicounter;
i++){
455 if(uarray.At(
i) == -999 || varray.At(
i) == -999 || sigv2array.At(
i) == -999)
continue;
456 chi2 = chi2 + pow(((varray.At(
i) - (a + b*uarray.At(
i) + c*uarray.At(
i)*uarray.At(
i))) /
sqrt(sigv2array.At(
i))),2) ;
459 if(
fVerbose == 2) cout <<
"digicounter: " << digicounter << endl;
471 TArrayD sigE2array(digicounter);
473 for(Int_t
i=0;
i< digicounter;
i++){
474 if(uarray.At(
i) == -999 || varray.At(
i) == -999 || sigv2array.At(
i) == -999)
continue;
475 sigE2 = sigv2array.At(
i) + sigu2array.At(
i) * pow((b + 2*c*uarray.At(
i)),2);
476 sigE2array.AddAt(sigE2,
i);
478 Su = Su + (uarray.At(
i)/sigE2);
479 Sv = Sv + (varray.At(
i)/sigE2);
481 Suv = Suv + ((uarray.At(
i)*varray.At(
i))/sigE2);
482 Suu = Suu + ((uarray.At(
i)*uarray.At(
i))/sigE2);
484 Suuu = Suuu + ((uarray.At(
i)*uarray.At(
i)*uarray.At(
i))/sigE2);
485 Suuv = Suuv + ((uarray.At(
i)*uarray.At(
i)*varray.At(
i))/sigE2);
487 Suuuu = Suuuu + ((uarray.At(
i)*uarray.At(
i)*uarray.At(
i)*uarray.At(
i))/sigE2);
499 matrixb[1][2] = Suuu;
502 matrixb[2][1] = Suuu;
503 matrixb[2][2] = Suuuu;
505 determ = matrixb.Determinant();
512 if(
fVerbose == 2) cout <<
"DET 0" << endl;
518 columnb[2][0] = Suuv;
521 column2b.Mult(matrixb, columnb);
535 for(Int_t
i=0;
i<digicounter;
i++){
536 if(uarray.At(
i) == -999 || varray.At(
i) == -999 || sigv2array.At(
i) == -999)
continue;
537 chi2 = chi2 + pow(((varray.At(
i) - (a + b*uarray.At(
i) + c*uarray.At(
i)*uarray.At(
i)))/
sqrt(sigE2array.At(
i))), 2);
544 for(Int_t
p = 0;
p<100;
p++){
545 uu[
p] = -1.5 +
p*3*0.01;
546 vv[
p] = a + b*uu[
p] + c*uu[
p]*uu[
p];
548 TPolyLine *uvline =
new TPolyLine(100, uu, vv);
549 if(whatToFit == 2) uvline->Draw(
"SAME");
555 Double_t xcrot, ycrot, xc, yc, epsilon,
R;
558 epsilon = -c*pow((1+(b*b)), -3/2);
559 R = epsilon +
sqrt((xcrot*xcrot)+(ycrot*ycrot));
624 if(whatToFit == 2) fitarc->SetLineColor(kRed - 9);
625 fitarc->SetFillStyle(0);
626 fitarc->Draw(
"SAME");
654 Int_t hitcounter = pTrackCand->
GetNHits();
655 for(Int_t k = 0; k < hitcounter; k++){
661 if (!pMhit ) { cout <<
"PndSttHelixTrackFitter::IntersectionFinder: no hit at " << iHit << endl;
continue; }
663 Int_t refindex = pMhit->GetRefIndex();
666 if (!iPoint ) { cout <<
"PndSttHelixTrackFitter::IntersectionFinder: no point at " << refindex <<
" associated to hit " << iHit << endl;
continue; }
674 if(wiredirection != TVector3(0.,0.,1.))
continue;
687 Double_t m = (point.Y() - vec.Y())/(point.X() - vec.X());
688 Double_t q = point.Y() - m*point.X();
694 TLine *line =
new TLine(-50, -50*m + q, 50, 50*m + q);
695 line->SetLineColor(5);
717 if(
fabs(point.X() - vec.X()) < 1e-6) {
724 y1 = point.Y() +
sqrt(radius * radius - (x1 - point.X()) * (x1 - point.X()));
727 y2 = point.Y() -
sqrt(radius * radius - (x2 - point.X()) * (x2 - point.X()));
744 x1 = (-(m*(q - point.Y()) - point.X()) +
sqrt((m*(q - point.Y()) - point.X())*(m*(q - point.Y()) - point.X()) - (m*m + 1)*((q - point.Y())*(q - point.Y()) + point.X()*point.X() - radius*radius))) / (m*m + 1);
747 x2 = (-(m*(q - point.Y()) - point.X()) -
sqrt((m*(q - point.Y()) - point.X())*(m*(q - point.Y()) - point.X()) - (m*m + 1)*((q - point.Y())*(q - point.Y()) + point.X()*point.X() - radius*radius))) / (m*m + 1);
752 xb1 = (-(m*(q - vec.Y()) - vec.X()) +
sqrt((m*(q - vec.Y()) - vec.X())*(m*(q - vec.Y()) - vec.X()) - (m*m + 1)*((q - vec.Y())*(q - vec.Y()) + vec.X()*vec.X() - (
fTrack->
GetRad()) *(
fTrack->
GetRad()) ))) / (m*m + 1);
755 xb2 = (-(m*(q - vec.Y()) - vec.X()) -
sqrt((m*(q - vec.Y()) - vec.X())*(m*(q - vec.Y()) - vec.X()) - (m*m + 1)*((q - vec.Y())*(q - vec.Y()) + vec.X()*vec.X() - (
fTrack->
GetRad()) *(
fTrack->
GetRad())))) / (m*m + 1);
760 Double_t distb1 =
sqrt((yb1 - point.Y())*(yb1 - point.Y()) + (xb1 - point.X())*(xb1 - point.X()));
761 Double_t distb2 =
sqrt((yb2 - point.Y())*(yb2 - point.Y()) + (xb2 - point.X())*(xb2 - point.X()));
765 if(distb1 > distb2) xyb.Set(xb2, yb2);
766 else xyb.Set(xb1, yb1);
769 Double_t dist1 =
sqrt((xyb.Y() - y1)*(xyb.Y() - y1) + (xyb.X() - x1)*(xyb.X() - x1));
770 Double_t dist2 =
sqrt((xyb.Y() - y2)*(xyb.Y() - y2) + (xyb.X() - x2)*(xyb.X() - x2));
774 if(dist1 > dist2) xy =
new TVector2(x2, y2);
775 else xy =
new TVector2(x1, y1);
786 pMhit->SetX(xy->X());
787 pMhit->SetY(xy->Y());
791 TMarker *np =
new TMarker(pMhit->GetX(), pMhit->GetY(), 6);
792 np->SetMarkerColor(3);
801 if(counter==0)
return kFALSE;
811 if(
fVerbose == 2) cout <<
"ZFINDER" << endl;
813 if(!pTrackCand)
return 0;
815 Int_t hitcounter = pTrackCand->
GetNHits();
823 if(
fVerbose == 2) cout <<
"less than 5 hits" << endl;
830 if(hitcounter == 0)
return kFALSE;
844 TVector3 *tofit, *tofit2;
855 for (Int_t
i = 0;
i < hitcounter;
i++) {
863 if (!pMhit ) { cout <<
"PndSttHelixTrackFitter::ZFinder: no hit at " << iHit << endl;
continue; }
865 Int_t refindex = pMhit->GetRefIndex();
868 if (!iPoint ) { cout <<
"PndSttHelixTrackFitter::ZFinder: no point at " << refindex <<
" associated to hit " << iHit << endl;
continue; }
875 TVector3 wiredirection2;
882 min = cenposition - wiredirection2;
883 max = cenposition + wiredirection2;
911 if(wiredirection != TVector3(0.,0.,1.))
919 if(
fabs(x_2-x_1)>0.0001) {
920 a =(y_2-y_1)/(x_2-x_1);
932 else if(
fabs(y_2-y_1)>0.0001) {
935 Double_t C = y_0*y_0 +(x_1-x_0)*(x_1-x_0) -R*
R;
944 if(
fVerbose == 2) cout <<
"-E- intersection point not found" << endl;
950 (y1-cenposition.Y())*(y1-cenposition.Y()));
952 (y2-cenposition.Y())*(y2-cenposition.Y()));
958 if(d2<d1) {x_=x2;y_=y2;}
962 TMarker *
pt =
new TMarker(x_, y_, 6);
963 pt->SetMarkerColor(6);
967 TLine *intline =
new TLine(x_, y_, x_0, y_0);
968 intline->SetLineColor(5);
969 intline->Draw(
"SAME");
992 Double_t C = x_*x_+ y_*y_+b*b-2*b*y_-rcur*rcur;
999 else if((B*B-A*C)==0){
1006 if(
fVerbose == 2) cout <<
"NO WAY2" << endl;
1012 TArc *drftarc =
new TArc(x1, y1, rcur);
1013 drftarc->SetLineColor(7);
1014 drftarc->SetFillStyle(0);
1015 drftarc->Draw(
"SAME");
1016 TArc *drftarc2 =
new TArc(x2, y2, rcur);
1017 drftarc2->SetLineColor(7);
1018 drftarc2->SetFillStyle(0);
1019 drftarc2->Draw(
"SAME");
1022 d1=
TMath::Sqrt((x1-cenposition.X())*(x1-cenposition.X())+(y1-cenposition.Y())*(y1-cenposition.Y()));
1023 d2=
TMath::Sqrt((x2-cenposition.X())*(x2-cenposition.X())+(y2-cenposition.Y())*(y2-cenposition.Y()));
1040 if(
fabs(x_2-x_1)<0.001) {
1041 t_ =(ycen0-y_1)/(y_2-y_1);
1042 z_ =(z_2-z_1)*t_ +z_1;
1043 t_bis =(ycen1-y_1)/(y_2-y_1);
1044 z_bis =(z_2-z_1)*t_bis +z_1;
1047 t_ =(xcen0-x_1)/(x_2-x_1);
1048 z_ =(z_2-z_1)*t_ +z_1;
1049 t_bis =(xcen1-x_1)/(x_2-x_1);
1050 z_bis =(z_2-z_1)*t_bis +z_1;
1054 tofit =
new TVector3(x_,y_,z_);
1057 tofit2 =
new TVector3(x_,y_,z_bis);
1065 TMarker *mrkt2 =
new TMarker(x_, z_, 6);
1066 mrkt2->SetMarkerColor(wireOk);
1067 mrkt2->Draw(
"SAME");
1069 TMarker *mrkt2bis =
new TMarker(x_, z_bis, 6);
1070 mrkt2bis->SetMarkerColor(wireOk);
1071 mrkt2bis->Draw(
"SAME");
1076 TMarker *mrkt2b =
new TMarker(y_, z_, 6);
1077 mrkt2b->SetMarkerColor(wireOk);
1078 mrkt2b->Draw(
"SAME");
1080 TMarker *mrkt2bbis =
new TMarker(y_, z_bis, 6);
1081 mrkt2bbis->SetMarkerColor(wireOk);
1082 mrkt2bbis->Draw(
"SAME");
1088 TMarker *MCmrk =
new TMarker(
h* R*
TMath::ATan2((iPoint->GetY() -
y0)*TMath::Cos(Phi0) - (iPoint->GetX() -
x0)*TMath::Sin(Phi0) , R + (iPoint->GetX() -
x0) * TMath::Cos(Phi0) + (iPoint->GetY()-
y0) * TMath::Sin(Phi0)), iPoint->GetZ(), 6);
1089 MCmrk->SetMarkerColor(4);
1090 MCmrk->Draw(
"SAME");
1096 if(tofit)
Hough(tofit, Phi0, x0, y0, R);
1099 if(tofit2)
Hough(tofit2, Phi0, x0, y0, R);
1113 TLine *line =
new TLine(-40, -40*outz.X() + outz.Y(), 40, (40*outz.X() + outz.Y()));
1124 if(outz.X() == 0. && outz.Y() == 0.)
return kFALSE;
1132 Int_t okcounter = 0;
1133 for(Int_t
i = 0;
i < (2*hitcounter);
i+=2) {
1141 if (!pMhit ) { cout <<
"PndSttHelixTrackFitter::ZFinder: no hit at " << iHit << endl;
continue; }
1143 Int_t refindex = pMhit->GetRefIndex();
1146 if (!iPoint ) { cout <<
"PndSttHelixTrackFitter::ZFinder: no point at " << refindex <<
" associated to hit " << iHit << endl;
continue; }
1153 if(wiredirection == TVector3(0.,0.,1.))
continue;
1159 TVector3 *vi = (TVector3*)
ZPointsArray->At(okcounter);
1161 if(vi == NULL)
continue;
1167 TMarker *mrk =
new TMarker(scos, vi->Z(), 6);
1174 Double_t distfirst = pow(((vi->Z() - (outz.Y() + outz.X() * scos))/sigz), 2);
1175 if(distfirst < 10) {
1176 pMhit->SetX(vi->X());
1177 pMhit->SetY(vi->Y());
1178 pMhit->SetZ(vi->Z());
1185 if(vi == NULL)
continue;
1188 Double_t distsecond = pow(((vi->Z() - (outz.Y() + outz.X() * scos))/sigz), 2);
1192 TMarker *mrk2 =
new TMarker(scos, vi->Z(), 6);
1197 if(fitdone == kTRUE){
1198 if(distsecond < 10 && distsecond < distfirst) {
1199 pMhit->SetX(vi->X());
1200 pMhit->SetY(vi->Y());
1201 pMhit->SetZ(vi->Z());
1205 if (distsecond < 10) {
1206 pMhit->SetX(vi->X());
1207 pMhit->SetY(vi->Y());
1208 pMhit->SetZ(vi->Z());
1219 if(pMhit->GetZ()!= -999) {
1221 TMarker *mrk3 =
new TMarker(scos, pMhit->GetZ(), 6);
1222 mrk3->SetMarkerColor(3);
1227 okcounter = okcounter + 2;
1241 if(
fVerbose == 2) cout <<
"ZFIT" << endl;
1243 if(!pTrackCand)
return 0;
1245 Int_t hitcounter = pTrackCand->
GetNHits();
1249 if(hitcounter < 5)
return 0;
1279 for (Int_t
i = 0;
i < hitcounter;
i++) {
1287 if (!pMhit ) { cout <<
"PndSttHelixTrackFitter::ZFit: no hit at " << iHit << endl;
continue; }
1289 if(pMhit->GetX() == -999 || pMhit->GetY() == -999 || pMhit->GetZ() == -999)
continue;
1291 Int_t refindex = pMhit->GetRefIndex();
1294 if (!iPoint ) { cout <<
"PndSttHelixTrackFitter::ZFit: no point at " << refindex <<
" associated to hit " << iHit << endl;
continue; }
1302 if(wiredirection == TVector3(0.,0.,1.))
continue;
1305 TVector3 *vi =
new TVector3(pMhit->GetX(), pMhit->GetY(), pMhit->GetZ());
1312 Sx = Sx + (scos /(sigz * sigz));
1313 Sz = Sz + (vi->Z()/(sigz * sigz));
1314 Sxz = Sxz + ((scos *vi->Z())/(sigz * sigz));
1315 Sxx = Sxx + ((scos * scos)/(sigz * sigz));
1316 S1z = S1z + 1/(sigz * sigz);
1322 if(counter == 0)
return 0;
1324 Detz = S1z*Sxx - Sx*Sx;
1329 fitp = (1/Detz)*(Sxx*Sz - Sx*Sxz);
1330 fitm = (1/Detz)*(S1z*Sxz - Sx*Sz);
1333 TVector2 outz(fitm, fitp);
1343 TLine *line2 =
new TLine(-40, -40*fitm + fitp, 40, (40*fitm + fitp));
1344 line2->SetLineColor(kGreen - 9);
1345 line2->Draw(
"SAME");
1375 for(Int_t
i = 0;
i < 200;
i++) {
1379 for(Int_t j = 0; j <= 1000; j++) {
1383 if(
fabs(ycalc - y) < 0.2) {
1402 for(Int_t
i=0;
i <= 200;
i++)
1406 for(Int_t j = 0; j <= 1000; j++) {
1411 mrk2 =
new TMarker(tga, b, 6);
1412 mrk2->SetMarkerColor(3);
1416 if(
vote[
i][j] >= vref) {
1445 TVector3 hough(aref, bref, vref);
1448 for(Int_t
i=0;
i <= 200;
i++)
for(Int_t j = 0; j <= 1000; j++)
vote[
i][j] = 0;
1457 cout <<
"-W- PndSttMinuitTrackFitter::Extrapolate: Not yet implemented, sorry!"
1463 for(Int_t
i = 0;
i < 100;
i++)
marray.AddAt(-999,
i);
1470 fitvect.ResizeTo(nhits, 4);
1480 if(!currenthit) { cout <<
"PndSttHelixTrackFitter::SetUpFitVector: no hit at " << iHit << endl;
continue; }
1488 if(currenthit->GetX() == -999 || currenthit->GetY() == -999)
continue;
1490 fitvect[
counter][0] = currenthit->GetX();
1491 fitvect[
counter][1] = currenthit->GetY();
1497 if(nhits != counter) {
1498 fitvect.ResizeTo(counter, 4);
1516 TMinuit minimizer(3);
1519 if(
fVerbose < 2) minimizer.SetPrintLevel(-1);
1522 cout <<
"*******MINUIT********" << endl;
1526 cout <<
"********************" << endl;
1531 TMatrixT<Double_t> fitvect;
1534 if(whatToFit == 1) minimizer.SetFCN(
fcnHelix);
1538 minimizer.DefineParameter(0,
"xc", xcstart, 0.1, -3000., 3000.);
1539 minimizer.DefineParameter(1,
"yc", ycstart, 0.1, -3000., 3000.);
1540 minimizer.DefineParameter(2,
"r", rstart, 0.1, 0., 3000.);
1541 if(
fVerbose == 2) cout <<
"xcstart: " << xcstart <<
" ycxtart: " << ycstart <<
" rstart: " << rstart << endl;
1542 minimizer.SetObjectFit(&fitvect);
1544 minimizer.SetPrintLevel(-1);
1546 minimizer.SetMaxIterations(500);
1551 Double_t resultsRadial[3], errorsRadial[3];
1553 minimizer.GetParameter(0, resultsRadial[0], errorsRadial[0]);
1554 minimizer.GetParameter(1, resultsRadial[1], errorsRadial[1]);
1555 minimizer.GetParameter(2, resultsRadial[2], errorsRadial[2]);
1560 cout <<
"xc: " << resultsRadial[0] << endl;
1561 cout <<
"yc: " << resultsRadial[1] << endl;
1562 cout <<
"R: " << resultsRadial[2] << endl;
1583 fitarc->SetLineColor(kGreen - 9);
1584 fitarc->SetFillStyle(0);
1585 fitarc->Draw(
"SAME");
1596 TMatrixT<Double_t> *mama = (TMatrixT<Double_t> *)gMinuit->GetObjectFit();
1600 Int_t hitcounter = mama->GetNrows();
1601 for (Int_t
i = 0;
i < hitcounter;
i++)
1603 delta =
sqrt((mama[0][
i][0]-par[0])*(mama[0][
i][0]-par[0])+(mama[0][
i][1]-par[1])*(mama[0][
i][1]-par[1])) -par[2] ;
1604 if(mama[0][
i][2] == 0) chisq += (delta * delta * 12.);
1605 else chisq += (delta*delta)/(mama[0][
i][2] * mama[0][
i][2] / 12.);
1612 TMatrixT<Double_t> *mama = (TMatrixT<Double_t> *)gMinuit->GetObjectFit();
1616 Int_t hitcounter = mama->GetNrows();
1617 for (Int_t
i = 0;
i < hitcounter;
i++)
1619 delta =
sqrt((mama[0][
i][0]-par[0])*(mama[0][
i][0]-par[0])+(mama[0][
i][1]-par[1])*(mama[0][
i][1]-par[1])) -par[2] ;
1620 if(mama[0][
i][2] == 0) chisq += (delta * delta * 12.);
1621 else chisq += (delta*delta)/(pow(mama[0][
i][3],2));
1637 relativeCounter = hitCounter;
1639 for (Int_t collectionCounter = 0; collectionCounter <
fHitCollectionList.GetEntries(); collectionCounter++)
1644 if (relativeCounter < size)
1651 relativeCounter -= size;
1671 xCenter = (dCenter + radius) *
cos(phiCenter),
1672 yCenter = (dCenter + radius) *
sin(phiCenter);
1685 if(deltaX != 0) angle = atan(deltaY / deltaX);
1687 if(deltaY < 0.) angle +=
dPi;
1736 map<Double_t, Int_t> hitMap;
1741 map<Double_t, Int_t>::iterator
1742 hitMapStart = hitMap.begin(),
1743 hitMapEnd = hitMap.end();
1752 Int_t starttubeID = startHit->
GetTubeID();
1753 Int_t endtubeID = endHit->GetTubeID();
1764 lastPoint(endTube->GetPosition().X(),
1765 endTube->GetPosition().Y(),
1766 endTube->GetPosition().Z());
1777 votesForPositive = 0,
1778 votesForNegative = 0,
1781 map<Double_t, Int_t>::iterator
1782 hitMapIter = hitMap.begin();
1784 while (hitMapIter != hitMap.end())
1787 angle =
GetHitAngle(hitMapIter->second, dCenter, phiCenter, radius);
1798 while (difAngle < 0)
1800 difAngle += 2 *
dPi;
1806 if (difAngle > oldAngle)
1812 oldAngle = difAngle;
1819 if (votesForPositive > votesForNegative)
1823 if (firstPoint.DistanceTo(vertex) < lastPoint.DistanceTo(vertex))
1832 else if (votesForNegative > votesForPositive)
1835 if (firstPoint.DistanceTo(vertex) < lastPoint.DistanceTo(vertex))
1860 if(!pTrackCand)
return 0;
1862 Int_t hitcounter = pTrackCand->
GetNHits();
1864 if(hitcounter == 0)
return 0;
1865 if(hitcounter < 5) {
1866 if(
fVerbose == 2) cout <<
"Bad No of hits in STT " << hitcounter << endl;
1869 if(
fVerbose == 2) cout <<
"FIT xy ********************" << endl;
1877 if(
fVerbose == 2) cout <<
"hitcounter: " << hitcounter << endl;
1878 for(Int_t k = 0; k <hitcounter; k++) {
1883 if(!currenthit)
continue;
1884 if(currenthit->GetX() == -999 || currenthit->GetY() == -999)
continue;
1893 if(wiredirection != TVector3(0.,0.,1.))
continue;
1894 else if(first == kFALSE)
1898 trasl[0] = hitfirst->GetX();
1899 trasl[1] = hitfirst->GetY();
1903 alpha =
TMath::ATan2(hitlast->GetY() - hitfirst->GetY(), hitlast->GetX() - hitfirst->GetX());
1920 Int_t digicounter = 0;
1921 TArrayD uarray(hitcounter);
1922 TArrayD varray(hitcounter);
1923 TArrayD sigv2array(hitcounter);
1924 TArrayD sigu2array(hitcounter);
1926 for(Int_t
i=0;
i < hitcounter;
i++){
1927 uarray.AddAt(-999,
i);
1928 varray.AddAt(-999,
i);
1929 sigv2array.AddAt(-999,
i);
1930 sigu2array.AddAt(-999,
i);
1932 for(Int_t
i=0;
i < hitcounter;
i++){
1937 if(!currenthit) { cout <<
"PndSttHelixTrackFitter::XYFit: no hit at " << iHit << endl;
continue; }
1938 if(currenthit->GetX() == -999 || currenthit->GetY() == -999)
continue;
1944 Int_t refindex = currenthit->GetRefIndex();
1947 if(!iPoint) { cout <<
"PndSttHelixTrackFitter::XYFit: no point at " << refindex <<
" associated to hit " << iHit << endl;
continue; }
1949 if(wiredirection != TVector3(0.,0.,1.))
continue;
1952 if(whatToFit == 2) {
1962 xtrasl = currenthit->GetX() - trasl[0];
1963 ytrasl = currenthit->GetY() - trasl[1];
1965 if(xtrasl == 0 && ytrasl == 0)
continue;
1974 TMarker *
pt =
new TMarker(xrot, yrot, 6);
1975 pt->SetMarkerColor(3);
1982 u = xrot / (xrot*xrot + yrot*yrot);
1983 v = yrot / (xrot*xrot + yrot*yrot);
1987 TMarker *uv =
new TMarker(u, v, 6);
1988 uv->SetMarkerColor(3);
1989 if(whatToFit == 2) uv->Draw(
"SAME");
1994 if(whatToFit == 1) {
2014 Double_t dvdx = (-2 * xrot * yrot)/pow((xrot*xrot + yrot*yrot),2);
2015 Double_t dvdy = (xrot*xrot - yrot*yrot) / pow((xrot*xrot + yrot*yrot),2);
2016 Double_t dudx = (yrot*yrot - xrot*xrot) / pow((xrot*xrot + yrot*yrot),2);
2017 Double_t dudy = (-2 * xrot * yrot)/pow((xrot*xrot + yrot*yrot),2);
2019 sigu2 = dudx * dudx * sigx * sigx + dudy * dudy * sigy * sigy + 2 * dudx * dudy * sigx * sigy;
2020 sigv2 = dvdx * dvdx * sigx * sigx + dvdy * dvdy * sigy * sigy + 2 * dvdx * dvdy * sigx * sigy;
2022 uarray.AddAt(u, digicounter);
2023 varray.AddAt(v, digicounter);
2024 sigu2array.AddAt(sigu2, digicounter);
2025 sigv2array.AddAt(sigv2, digicounter);
2027 Su = Su + (u/sigv2);
2028 Sv = Sv + (v/sigv2);
2030 Suv = Suv + ((u*
v)/sigv2);
2031 Suu = Suu + ((u*u)/sigv2);
2045 double fita = (1/determ)*(Suu*Sv - Su*Suv);
2046 double fitb = (1/determ)*(S1*Suv - Su*Sv);
2049 std::cout <<
"1) linear parameters:\n";
2050 std::cout <<
"a = " << fita <<
"\n";
2051 std::cout <<
"b = " << fitb <<
"\n";
2056 for(Int_t
i=0;
i < digicounter;
i++){
2057 if(uarray.At(
i) == -999 || varray.At(
i) == -999 || sigv2array.At(
i) == -999)
continue;
2058 chi2 = chi2 + pow(((varray.At(
i) - (fita + fitb*uarray.At(
i)))/
sqrt(sigv2array.At(
i))),2) ;
2061 if(
fVerbose == 2) cout <<
"digicounter: " << digicounter << endl;
2113 TLine *uvline =
new TLine(-0.1, fita - 0.1 * fitb, 0.1, fita + 0.1 * fitb);
2114 if(whatToFit == 2) uvline->Draw(
"SAME");
2122 ycrot = 1 / (2 * fita);
2123 xcrot = - fitb * ycrot;
2124 R =
sqrt(xcrot * xcrot + ycrot * ycrot);
2158 if(whatToFit == 2) fitarc->SetLineColor(kRed - 9);
2159 fitarc->SetFillStyle(0);
2160 fitarc->Draw(
"SAME");
2188 for(Int_t
i = 0;
i < 200;
i++) {
2193 if(
fabs(ycalc - y) < 0.2) {
2209 for(Int_t
i=0;
i <= 200;
i++)
2231 TVector3 hough(aref, 0, vref);
2245 if(
fVerbose == 2) cout <<
"ZFINDER" << endl;
2247 if(!pTrackCand)
return 0;
2249 Int_t hitcounter = pTrackCand->
GetNHits();
2256 if(hitcounter < 5) {
2257 if(
fVerbose == 2) cout <<
"less than 5 hits" << endl;
2264 if(hitcounter == 0)
return kFALSE;
2274 TVector3 *tofit, *tofit2;
2291 for (Int_t
i = 0;
i < hitcounter;
i++) {
2299 if (!pMhit ) { cout <<
"PndSttHelixTrackFitter::ZFinder: no hit at " << iHit << endl;
continue; }
2304 Int_t refindex = pMhit->GetRefIndex();
2307 if (!iPoint ) { cout <<
"PndSttHelixTrackFitter::ZFinder: no point at " << refindex <<
" associated to hit " << iHit << endl;
continue; }
2310 TVector3 wiredirection2;
2317 min = cenposition - wiredirection2;
2318 max = cenposition + wiredirection2;
2341 if(wiredirection != TVector3(0.,0.,1.))
2349 if(
fabs(x_2-x_1)>0.0001) {
2350 a =(y_2-y_1)/(x_2-x_1);
2354 Double_t C = x_0*x_0+y_0*y_0+b*b-R*R-2*y_0*
b;
2362 else if(
fabs(y_2-y_1)>0.0001) {
2365 Double_t C = y_0*y_0 +(x_1-x_0)*(x_1-x_0) -R*
R;
2374 if(
fVerbose == 2) cout <<
"-E- intersection point not found" << endl;
2382 (y1-cenposition.Y())*(y1-cenposition.Y()));
2384 (y2-cenposition.Y())*(y2-cenposition.Y()));
2390 if(d2<d1) {x_=x2;y_=y2;}
2394 TMarker *
pt =
new TMarker(x_, y_, 6);
2395 pt->SetMarkerColor(6);
2399 TLine *intline =
new TLine(x_, y_, x_0, y_0);
2400 intline->SetLineColor(5);
2401 intline->Draw(
"SAME");
2424 Double_t C = x_*x_+ y_*y_+b*b-2*b*y_-rcur*rcur;
2431 else if((B*B-A*C)==0){
2438 if(
fVerbose == 2) cout <<
"NO WAY2" << endl;
2444 TArc *drftarc =
new TArc(x1, y1, rcur);
2445 drftarc->SetFillStyle(0);
2446 drftarc->SetLineColor(3);
2447 drftarc->Draw(
"SAME");
2448 TArc *drftarc2 =
new TArc(x2, y2, rcur);
2449 drftarc2->SetFillStyle(0);
2450 drftarc2->SetLineColor(3);
2451 drftarc2->Draw(
"SAME");
2454 d1=
TMath::Sqrt((x1-cenposition.X())*(x1-cenposition.X())+(y1-cenposition.Y())*(y1-cenposition.Y()));
2455 d2=
TMath::Sqrt((x2-cenposition.X())*(x2-cenposition.X())+(y2-cenposition.Y())*(y2-cenposition.Y()));
2472 if(
fabs(x_2-x_1)<0.001) {
2473 t_ =(ycen0-y_1)/(y_2-y_1);
2474 z_ =(z_2-z_1)*t_ +z_1;
2475 t_bis =(ycen1-y_1)/(y_2-y_1);
2476 z_bis =(z_2-z_1)*t_bis +z_1;
2479 t_ =(xcen0-x_1)/(x_2-x_1);
2480 z_ =(z_2-z_1)*t_ +z_1;
2481 t_bis =(xcen1-x_1)/(x_2-x_1);
2482 z_bis =(z_2-z_1)*t_bis +z_1;
2486 tofit =
new TVector3(x_,y_,z_);
2489 tofit2 =
new TVector3(x_,y_,z_bis);
2496 TMarker *mrkt2 =
new TMarker(x_, z_, 6);
2497 mrkt2->SetMarkerColor(wireOk);
2498 mrkt2->Draw(
"SAME");
2500 TMarker *mrkt2bis =
new TMarker(x_, z_bis, 6);
2501 mrkt2bis->SetMarkerColor(wireOk);
2502 mrkt2bis->Draw(
"SAME");
2508 TMarker *mrkt2b =
new TMarker(y_, z_, 6);
2509 mrkt2b->SetMarkerColor(wireOk);
2510 mrkt2b->Draw(
"SAME");
2512 TMarker *mrkt2bbis =
new TMarker(y_, z_bis, 6);
2513 mrkt2bbis->SetMarkerColor(wireOk);
2514 mrkt2bbis->Draw(
"SAME");
2520 TMarker *MCmrk =
new TMarker(
h* R*
TMath::ATan2((iPoint->GetY() -
y0)*TMath::Cos(Phi0) - (iPoint->GetX() -
x0)*TMath::Sin(Phi0) , R + (iPoint->GetX() -
x0) * TMath::Cos(Phi0) + (iPoint->GetY()-
y0) * TMath::Sin(Phi0)), iPoint->GetZ(), 6);
2521 MCmrk->SetMarkerColor(4);
2522 MCmrk->Draw(
"SAME");
2545 TLine *line =
new TLine(-40, -40*outz.X() + outz.Y(), 40, (40*outz.X() + outz.Y()));
2556 if(outz.X() == 0. && outz.Y() == 0.)
return kFALSE;
2564 Int_t okcounter = 0;
2565 for(Int_t
i = 0;
i < (2*hitcounter);
i+=2) {
2573 if (!pMhit ) { cout <<
"PndSttHelixTrackFitter::ZFinder: no hit at " << iHit << endl;
continue; }
2578 Int_t refindex = pMhit->GetRefIndex();
2581 if (!iPoint ) { cout <<
"PndSttHelixTrackFitter::ZFinder: no point at " << refindex <<
" associated to hit " << iHit << endl;
continue; }
2587 if(wiredirection == TVector3(0.,0.,1.))
continue;
2593 TVector3 *vi = (TVector3*)
ZPointsArray->At(okcounter);
2595 if(vi == NULL)
continue;
2601 TMarker *mrk =
new TMarker(scos, vi->Z(), 6);
2608 Double_t distfirst = pow(((vi->Z() - (outz.Y() + outz.X() * scos))/sigz), 2);
2609 if(distfirst < 10) {
2610 pMhit->SetX(vi->X());
2611 pMhit->SetY(vi->Y());
2612 pMhit->SetZ(vi->Z());
2619 if(vi == NULL)
continue;
2622 Double_t distsecond = pow(((vi->Z() - (outz.Y() + outz.X() * scos))/sigz), 2);
2626 TMarker *mrk2 =
new TMarker(scos, vi->Z(), 6);
2631 if(fitdone == kTRUE){
2632 if(distsecond < 10 && distsecond < distfirst) {
2633 pMhit->SetX(vi->X());
2634 pMhit->SetY(vi->Y());
2635 pMhit->SetZ(vi->Z());
2639 if (distsecond < 10) {
2640 pMhit->SetX(vi->X());
2641 pMhit->SetY(vi->Y());
2642 pMhit->SetZ(vi->Z());
2653 if(pMhit->GetZ()!= -999) {
2655 TMarker *mrk3 =
new TMarker(scos, pMhit->GetZ(), 6);
2656 mrk3->SetMarkerColor(3);
2661 okcounter = okcounter + 2;
2675 if(
fVerbose == 2) cout <<
"ZFIT" << endl;
2677 if(!pTrackCand)
return 0;
2679 Int_t hitcounter = pTrackCand->
GetNHits();
2683 if(hitcounter < 5)
return 0;
2709 for (Int_t
i = 0;
i < hitcounter;
i++) {
2717 if (!pMhit ) { cout <<
"PndSttHelixTrackFitter::ZFit: no hit at " << iHit << endl;
continue; }
2722 if(pMhit->GetX() == -999 || pMhit->GetY() == -999 || pMhit->GetZ() == -999)
continue;
2724 Int_t refindex = pMhit->GetRefIndex();
2727 if (!iPoint ) { cout <<
"PndSttHelixTrackFitter::ZFit: no point at " << refindex <<
" associated to hit " << iHit << endl;
continue; }
2731 if(wiredirection == TVector3(0.,0.,1.))
continue;
2735 TVector3 *vi =
new TVector3(pMhit->GetX(), pMhit->GetY(), pMhit->GetZ());
2741 Sxz = Sxz + ((scos *vi->Z())/(sigz * sigz));
2742 Sxx = Sxx + ((scos * scos)/(sigz * sigz));
2748 if(counter == 0)
return 0;
2754 TVector2 outz(fitm, fitp);
2764 TLine *line2 =
new TLine(-40, -40*fitm + fitp, 40, (40*fitm + fitp));
2765 line2->SetLineColor(kGreen - 9);
2766 line2->Draw(
"SAME");
2919 h1 =
new TH2F(
"h1",
"xy plane", 100, -50, 50, 100, -50, 50);
2920 h2 =
new TH2F(
"h2",
"z cos#{lambda} plane", 100, -75, 75, 100, -45, 115);
2921 h3 =
new TH2F(
"h3",
"conformal plane", 100, -1.5, 1.5, 100, -1.5, 1.5);
2922 h4 =
new TH2F(
"h4",
"tubes", 100, -45, 45, 100, -45, 115);
2924 houg =
new TH2F(
"houg",
"houg", 100,-1.001,1.001,100,-150.001,151.001);
2925 hougcon =
new TH1F(
"hougcon",
"hougcon", 200,-1.001,1.001);
2933 eventCanvas =
new TCanvas(
"eventCanvas",
"eventcanvas", 900, 500);
2937 eventCanvas =
new TCanvas(
"eventCanvas",
"eventcanvas", 0, 0, 400, 600);
2939 eventDetails =
new TCanvas(
"eventDetails",
"eventdetails", 400, 0, 600, 600);
2968 if(!pTrackCand)
return kFALSE;
2969 Int_t hitcounter = pTrackCand->
GetNHits();
2971 for(Int_t
i = 0;
i < hitcounter;
i++){
2975 if(!currenthit)
continue;
2976 if(currenthit->GetX() == -999 || currenthit->GetY() == -999)
continue;
2977 Int_t refindex = currenthit->GetRefIndex();
2980 if(!iPoint)
continue;
2988 TMarker *cir0 =
new TMarker(iPoint->GetX(), iPoint->GetY(), 6);
2989 cir0->SetMarkerColor(4);
2994 TMarker *mcmrkt2bis =
new TMarker(iPoint->GetX(), iPoint->GetZ(), 6);
2995 mcmrkt2bis->SetMarkerColor(4);
2996 mcmrkt2bis->Draw(
"SAME");
2999 TMarker *mcmrkt2bbis =
new TMarker(iPoint->GetY(), iPoint->GetZ(), 6);
3000 mcmrkt2bbis->SetMarkerColor(4);
3001 mcmrkt2bbis->Draw(
"SAME");
3008 cir1->SetLineColor(3);
3009 if(wiredirection != TVector3(0.,0.,1.)) cir1->SetLineColor(5);
3010 cir1->SetFillStyle(0);
3016 TVector3 wiredirection2;
3021 min = cenposition - wiredirection2;
3022 max = cenposition + wiredirection2;
3034 if(wiredirection != TVector3(0.,0.,1.)) {
3038 TMarker *pt1z =
new TMarker(x_1, z_1, 6);
3039 pt1z->SetMarkerColor(6);
3042 TMarker *pt2z =
new TMarker(x_2, z_2, 6);
3043 pt2z->SetMarkerColor(6);
3046 TLine *ztubeline =
new TLine(x_1, z_1, x_2, z_2);
3047 ztubeline->Draw(
"SAME");
3052 TMarker *pt1z2 =
new TMarker(y_1, z_1, 6);
3053 pt1z2->SetMarkerColor(6);
3054 pt1z2->Draw(
"SAME");
3056 TMarker *pt2z2 =
new TMarker(y_2, z_2, 6);
3057 pt2z2->SetMarkerColor(6);
3058 pt2z2->Draw(
"SAME");
3060 TLine *ztubeline2 =
new TLine(y_1, z_1, y_2, z_2);
3061 ztubeline2->Draw(
"SAME");
3065 TMarker *pt1 =
new TMarker(x_1, y_1, 6);
3066 pt1->SetMarkerColor(6);
3068 TMarker *pt2 =
new TMarker(x_2, y_2, 6);
3069 pt2->SetMarkerColor(6);
3071 TLine *tubeline =
new TLine(x_1, y_1, x_2, y_2);
3072 tubeline->Draw(
"SAME");
3094 fitarc->SetLineColor(2);
3095 fitarc->SetFillStyle(0);
3096 fitarc->Draw(
"SAME");
3100 TLine *line =
new TLine(-40, -40 * track->
GetTanL() + track->
GetZ(),
3102 line->SetLineColor(2);
3103 if(track->
GetFlag() >= 3) line->Draw(
"SAME");
3119 int hitcounter = choices->GetEntriesFast();
3120 TH1F hlocal(
"hlocal",
"", 200, -0.001, 6.281);
3123 TMatrixT<double> found_atan(hitcounter, 1);
3124 for(
int i = 0;
i < hitcounter;
i++) {
3126 TVector3 *
choice = (TVector3*) choices->At(
i);
3140 found_atan[
i][0] = atang;
3143 hlocal.Fill(found_atan[i][0]);
3152 double foundatan = hlocal.GetBinCenter(hlocal.GetMaximumBin());
3155 TVector3 foundz(
TMath::Tan(foundatan), 0, hlocal.GetMaximumBin());
Int_t XYFit(PndTrackCand *pTrackCand, Int_t whatToFit)
TClonesArray * fPointArray
Double_t GetHitAngle(Int_t hitNo, Double_t dCenter, Double_t phiCenter, Double_t radius)
friend F32vec4 cos(const F32vec4 &a)
void Hough(TVector3 *choice, Double_t Phi0, Double_t x0, Double_t y0, Double_t R)
void fcnHelix2(Int_t &, Double_t *, Double_t &f, Double_t *par, Int_t)
#define choice(c1, c2, c3)
virtual void Extrapolate(PndSttTrack *track, Double_t r, FairTrackParam *param)
friend F32vec4 sqrt(const F32vec4 &a)
static T Sqrt(const T &x)
void HoughThroughOrigin(TVector3 *choice, Double_t Phi0, Double_t x0, Double_t y0, Double_t R)
friend F32vec4 sin(const F32vec4 &a)
PndTrackCandHit GetSortedHit(UInt_t i)
Int_t ZFit(PndTrackCand *pTrackCand, Int_t whatToFit)
Bool_t RunEventDisplay(PndTrackCand *trackCand)
cout<< "POINTs for new FwEndCap == "<< tsim-> GetEntriesFast()
Int_t ZFitThroughOrigin(PndTrackCand *pTrackCand, Int_t whatToFit)
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
TVector3 FindCorrectZ(TObjArray *choices, Double_t x_0, Double_t y_0, Double_t x0, Double_t y0, Double_t R)
Bool_t IntersectionFinder(PndTrackCand *pTrackCand)
void FinishEventDisplay(PndSttTrack *track)
~PndSttHelixTrackFitter()
TString pt(TString pts, TString exts="px py pz")
cout<< "blue = Monte Carlo "<< endl;cout<< "red = Helix Hit "<< endl;cout<< "green = Center Of Tubes "<< endl;for(Int_t k=0;k< track->GetEntriesFast();k++){PndSttTrack *stttrack=(PndSttTrack *) track-> At(k)
void SetCharge(Int_t charge)
void SetPhi(Double_t phi)
void SetDist(Double_t dist)
Double_t GetIsochrone() const
static T ATan2(const T &y, const T &x)
Int_t DoFit(PndTrackCand *pTrackCand, PndSttTrack *pTrack, Int_t pidHypo=211)
Double_t GetIsochroneError() const
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
TVector3 GetHoughResponse()
friend F32vec4 fabs(const F32vec4 &a)
void OrderHitsByR(std::map< Double_t, Int_t > &hitMap)
PndSttHit * GetHitFromCollections(Int_t hitCounter) const
TVector3 GetHoughResponseThroughOrigin()
Double_t CalculateScosl(Double_t x, Double_t y)
Int_t DoFitPlain(PndTrackCand *pTrackCand, PndSttTrack *pTrack, Int_t pidHypo=211)
Bool_t ZFinderThroughOrigin(PndTrackCand *pTrackCand, Int_t whatToFit)
Int_t XYFitThroughOrigin(PndTrackCand *pTrackCand, Int_t whatToFit)
Bool_t ZFinder(PndTrackCand *pTrackCand, Int_t whatToFit)
Int_t MinuitFit(PndTrackCand *pTrackCand, Int_t whatToFit)
PndTrackCand * fTrackCand
Int_t GetCharge(Double_t dCenter, Double_t phiCenter, Double_t radius)
Int_t SetUpFitVector(PndTrackCand *pTrackCand, TMatrixT< Double32_t > &fitvect)
TClonesArray * fTubeArray
TVector3 GetWireDirection()
TMatrixT< double > TMatrixD
void fcnHelix(Int_t &, Double_t *, Double_t &f, Double_t *par, Int_t)
void SetTanL(Double_t tanl)