31 #include "FairRootManager.h"
32 #include "FairRunAna.h"
33 #include "FairRuntimeDb.h"
35 #include "TClonesArray.h"
40 #include "TSpectrum2.h"
41 #include "TSpectrum.h"
42 #include "TStopwatch.h"
56 PndTrkLegendreNew::PndTrkLegendreNew() : FairTask(
"secondary track finder", 0), fDisplayOn(kFALSE), fPersistence(kTRUE), fUseMVDPix(kTRUE), fUseMVDStr(kTRUE), fUseSTT(kTRUE), fSecondary(kFALSE), fMvdPix_RealDistLimit(1000), fMvdStr_RealDistLimit(1000), fStt_RealDistLimit(1000), fMvdPix_ConfDistLimit(1000), fMvdStr_ConfDistLimit(1000), fStt_ConfDistLimit(1000), fInitDone(kFALSE), fUmin(-0.07), fUmax(0.07), fVmin(-0.07), fVmax(0.07), fRmin(-1.5), fRmax(1.5), fThetamin(0), fThetamax(180) {
63 PndTrkLegendreNew::PndTrkLegendreNew(
int verbose) : FairTask(
"secondary track finder", verbose), fDisplayOn(kFALSE), fPersistence(kTRUE), fUseMVDPix(kTRUE), fUseMVDStr(kTRUE), fUseSTT(kTRUE), fSecondary(kFALSE), fMvdPix_RealDistLimit(1000), fMvdStr_RealDistLimit(1000), fStt_RealDistLimit(1000), fMvdPix_ConfDistLimit(1000), fMvdStr_ConfDistLimit(1000), fStt_ConfDistLimit(1000), fInitDone(kFALSE), fUmin(-0.07), fUmax(0.07), fVmin(-0.07), fVmax(0.07), fRmin(-1.5), fRmax(1.5), fThetamin(0), fThetamax(180) {
100 FairRootManager* ioman = FairRootManager::Instance();
102 cout <<
"-E- PndTrkLegendreNew::Init: "
103 <<
"RootManager not instantiated, return!" << endl;
112 cout <<
"-W- PndTrkLegendreNew::Init: "
113 <<
"No STTHit array, return!" << endl;
120 std::cout <<
"-W- PndTrkLegendreNew::Init: " <<
"No MVD Pixel hitArray, return!" << std::endl;
127 std::cout <<
"-W- PndTrkLegendreNew::Init: " <<
"No MVD Strip hitArray, return!" << std::endl;
143 display =
new TCanvas(
"display",
"display", 0, 0, 800, 800);
158 fTimer =
new TStopwatch();
167 FairRuntimeDb*
rtdb = FairRunAna::Instance()->GetRuntimeDb();
207 if(
fVerbose > 0) cout <<
"*********************** " <<
fEventCounter <<
" ***********************" << endl;
212 cout <<
"number of stt hits " <<
fSttHitArray->GetEntriesFast() << endl;
222 cout <<
" STARTING" << endl;
237 cout <<
"CLUSTERLIST " << nofclusters << endl;
240 for(
int iclus = 0; iclus < nofclusters; iclus++) {
242 cout <<
"CLUSTER " << iclus <<
":";
258 for(
int iclus = 0; iclus < nofclusters; iclus++) {
263 cout <<
"CLUSTER " << iclus <<
":";
273 for(
int ihit = 0; ihit < cluster->
GetNofHits(); ihit++) {
286 cout <<
"\033[1;36m ITERATIONS -----------------------> " << maxnoftracks <<
"\033[0m" << endl;
287 for(
int iter = 0; iter < maxnoftracks; iter++) {
288 cout <<
"\033[1;36m ############### ITER " << iter <<
"\033[0m" << endl;
301 cout <<
">>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<" << endl;
305 cout <<
"nofsteps " << nofsteps << endl;
309 if(track == NULL)
continue;
311 cout <<
"nof hits " << thiscluster->
GetNofHits() << endl;
314 cout <<
"ADD CLUSTER TO TRACKLIST " << thiscluster->
GetNofHits() << endl;
317 for(
int ihit = 0; ihit < cluster->
GetNofHits(); ihit++) {
320 remainingcluster->
AddHit(hit);
322 cluster = remainingcluster;
323 cout <<
"partialclusterlist " << partialcluslist.
GetNofClusters() << endl;
324 cout <<
"remainning hits " << remainingcluster->
GetNofHits() << endl;
328 if(remainingcluster->
GetNofHits() > 15 && iter == maxnoftracks - 1) {
329 cout <<
"\033[1;31m LETS TRY ANOTHER ONE -------- BONUS ------------ \033[0m" << endl;
336 cout <<
"tracklist is " << tracklist.
GetNofTracks() << endl;
343 cout <<
"\033[1;35m (AFTER LEGENDRE AND RECLUSTERING) NEW CLUSTERLIST " << noftrack <<
" \033[0m" << endl;
349 for(
int itrk = 0; itrk < noftrack; itrk++) {
355 cout <<
"CLUSTER " << itrk <<
":";
369 if(track == NULL)
continue;
381 TLine *line =
new TLine(-10.07, fitp + fitm * (-10.07), 10.07, fitp + fitm * (10.07));
407 for(
int itrk = 0; itrk < tracklist2.
GetNofTracks(); itrk++) {
436 cout <<
"FINISH" << endl;
466 if(
fVerbose) cout <<
"Refresh stt" << endl;
468 if(
fVerbose) cout <<
"Refresh pixel" << endl;
470 if(
fVerbose) cout <<
"Refresh strip" << endl;
472 if(
fVerbose) cout <<
"Refresh stop" << endl;
499 if(
hxy == NULL)
hxy =
new TH2F(
"hxy",
"xy plane", 100, -43, 43, 100, -43, 43);
502 hxy->SetStats(kFALSE);
506 for(
int itube = 1; itube <
fTubeArray->GetEntriesFast(); itube++) {
510 arc->SetFillStyle(0);
511 arc->SetLineColor(kCyan - 10);
517 mrk->SetMarkerColor(kCyan - 10);
535 if(
huv == NULL)
huv =
new TH2F(
"huv",
"uv plane", 100, x1, x2, 100, y1, y2);
538 huv->GetXaxis()->SetLimits(x1, x2);
539 huv->GetYaxis()->SetLimits(y1, y2);
551 cout <<
"new hit?" << endl;
572 for(
int j = 0; j < neighs->GetEntriesFast(); j++) {
575 if(neighs2->GetEntriesFast() > 2) {
578 for(
int k = 0; k < neighs2->GetEntriesFast(); k++) {
581 cout <<
"tubes " << tubeB <<
" "<< tubeC << endl;
585 if(counter > 2)
continue;
611 cout <<
"new neigh hit?" << endl;
629 cout <<
"HIT " << hit->
GetHitID() <<
"(" << hit->
GetTubeID() <<
"/" << tube->
GetLayerID() <<
")" <<
" has " << neighs->GetEntriesFast() <<
" neighborings: ";
630 for(
int i = 0;
i < neighs->GetEntriesFast();
i++) {
645 TArc *arc =
new TArc(u, v, r);
646 arc->SetFillStyle(0);
650 TMarker *mrk =
new TMarker(u, v, marker);
665 for(
int jhit = 0; jhit < cluster->
GetNofHits(); jhit++) {
685 if(ntot == 0)
return NULL;
691 for(
int jhit = 0; jhit < ntot; jhit++) {
697 if(
fVerbose > 1) cout <<
"STT hit " << jhit <<
"already used " << endl;
706 if(tmphitid == -1)
return NULL;
709 if(
fVerbose > 1) cout <<
"STT REFERENCE HIT " << tmphitid <<
" " << refhit->
GetIsochrone() << endl;
723 if(
fVerbose > 1) cout <<
"already used V" << endl;
729 if(tmphitid == -1)
return NULL;
731 if(
fVerbose > 1) cout <<
"MVD PIXEL REFERENCE HIT " << refhit->
GetHitID() << endl;
744 if(
fVerbose > 1) cout <<
"already used V" << endl;
750 if(tmphitid == -1)
return NULL;
752 if(
fVerbose > 1) cout <<
"MVD STRIP REFERENCE HIT " << refhit->
GetHitID() << endl;
761 if(refhit != NULL)
return refhit;
772 if(refhit != NULL)
return refhit;
783 if(ntot == 0)
return NULL;
789 for(
int jhit = 0; jhit < ntot; jhit++) {
811 if(tmphitid == -1)
return NULL;
812 refhit = cluster->
GetHit(tmphitid);
832 double rc_of_min, rc_of_max;
837 double u = chit->
GetU();
838 double v = chit->
GetV();
852 r1 < r2 ? (rimin =
r1, rimax =
r2) : (rimin = r2, rimax = r1);
854 rimin <
fRmin ? (rc_of_min = rc,
fRmin = rimin) : fRmin;
855 rimax >
fRmax ? (rc_of_max = rc,
fRmax = rimax) : fRmax;
864 double delta =
fabs(dv - du)/2.;
865 du < dv ? (fUmin -= delta,
fUmax += delta) : (fVmin -= delta,
fVmax += delta);
867 cout <<
"u_min " << fUmin <<
" u_max " << fUmax << endl;
868 cout <<
"v_min " << fVmin <<
" v_max " <<
fVmax << endl;
869 cout <<
"r_min " <<
fRmin <<
" r_max " <<
fRmax << endl;
870 cout <<
"theta_min 0 theta_max 180" << endl;
929 bool alreadythere =
false;
935 cout <<
"\033[1;31m MAXPEAK " << maxpeak <<
", BREAK NOW! \033[0m" << endl;
939 for(
int ialready = 0; ialready <
fFoundPeaks.size(); ialready++) {
940 std::pair<double, double> foundthetar =
fFoundPeaks.at(ialready);
941 double foundtheta = foundthetar.first;
942 double foundr = foundthetar.second;
944 if(theta_max == foundtheta && r_max == foundr) {
948 if(
fVerbose > 0) cout <<
"OH NO! THIS PEAK IS ALREADY THERE" << endl;
953 if(alreadythere ==
false) {
954 std::pair<double, double>
tr(theta_max, r_max);
967 if(mode == 0 && alreadythere ==
true) {
968 cout <<
"THIS PEAK IS ALREADY THERE" << endl;
978 TMarker *mrk =
new TMarker(theta_max, r_max, 29);
995 ycrot0 = 1 / (2 * fitp);
996 xcrot0 = - fitm * ycrot0;
997 R =
sqrt(xcrot0 * xcrot0 + ycrot0 * ycrot0);
1026 fitp = 1 / (2 * ycrot0);
1027 fitm = - 2 * fitp * xcrot0;
1032 TObjArray sector[6];
1033 TObjArray *neighborings = NULL;
1054 neighborings =
new TObjArray();
1057 if(ihit == jhit)
continue;
1062 if(tube->
IsNeighboring(tubeID2) == kTRUE) neighborings->Add(hit2);
1093 for(
int jhit = 0; jhit < indiv->GetEntriesFast(); jhit++) {
1095 stthit2->
Draw(kOrange);
1096 stthit->
Draw(kOrange);
1102 cout <<
" FILLHITM AP STARTING" << endl;
1108 cout <<
"PRINT INDIVISIBILE MAP" << endl;
1116 cout <<
"CLUSTERIZATION <---------------" << endl;
1120 TObjArray *neighborings = NULL;
1121 int clusterizedhits = 0;
1123 for(
int iseed = 0; iseed < seeds.GetEntriesFast(); iseed++) {
1128 if(seedhit->
IsUsed() == kTRUE)
continue;
1135 cluster->
AddHit(seedhit);
1141 cout <<
"SEED " << seedtubeID << endl;
1142 seedhit->
Draw(kRed);
1150 int nlastadded = 1, addedcounter = 0;
1153 while(nlastadded > 0) {
1172 for(
int iadded = nclusterhits - 1; iadded >= (nclusterhits - nlastadded); iadded--) {
1175 if(neighborings->GetEntriesFast() == 0)
continue;
1179 for(
int ineigh = 0; ineigh < neighborings->GetEntriesFast(); ineigh++)
1187 cluster->
AddHit(neighhit);
1195 neighhit->
Draw(kGreen);
1196 cout <<
"nof hits " << cluster->
GetNofHits() << endl;
1208 nlastadded = addedcounter;
1220 cout <<
"NOF TOTAL HITS " <<
stthitlist->
GetNofHits() <<
" NOF CLUSTERIZED HITS " << clusterizedhits << endl;
1226 cout <<
"we have " << candseeds.GetEntriesFast() <<
" canduidate seeds" << endl;
1227 for(
int jseed = 0; jseed < candseeds.GetEntriesFast(); jseed++) {
1237 cout <<
"CSEED " << endl;
1238 cseedhit->
Draw(kBlue);
1244 if(cseedhit->
IsUsed() == kTRUE) { cout <<
"already" << endl ;
continue; }
1246 int cseedtubeID = cseedhit->
GetTubeID();
1251 cluster->
AddHit(cseedhit);
1257 cout <<
"SEED " << cseedtubeID << endl;
1258 cseedhit->
Draw(kRed);
1266 int nlastadded = 1, addedcounter = 0;
1269 while(nlastadded > 0) {
1288 for(
int iadded = nclusterhits - 1; iadded >= (nclusterhits - nlastadded); iadded--) {
1291 if(neighborings->GetEntriesFast() == 0)
continue;
1295 for(
int ineigh = 0; ineigh < neighborings->GetEntriesFast(); ineigh++)
1303 cluster->
AddHit(neighhit);
1311 neighhit->
Draw(kGreen);
1312 cout <<
"nof hits " << cluster->
GetNofHits() << endl;
1324 nlastadded = addedcounter;
1376 cout <<
"COUNT TRACKS IN SKEW SECTOR" << endl;
1377 int nofhitsinlay[30];
1378 for(
int ilay = 0; ilay < 30; ilay++) nofhitsinlay[ilay] = 0;
1380 for(
int ihit = 0; ihit < cluster->
GetNofHits(); ihit++) {
1390 for(
int ihit = 0; ihit < cluster->
GetNofHits(); ihit++) {
1396 int maxnoftracks = 1;
1401 for(
int ihit = 0; ihit < cluster->
GetNofHits(); ihit++) {
1410 if(nofhitsinlay[layid] <= 1)
continue;
1413 if(layid != tmplayid) {
1433 if(
counter1 == nofhitsinlay[layid])
continue;
1435 for(
int jhit = counter; jhit < counter + nofhitsinlay[layid] -
counter1; jhit++) {
1452 if(counter1 == nofhitsinlay[layid] - 1) {
1453 int noftracks = nofhitsinlay[layid] - isneigh;
1454 cout <<
"CLUSTER CONTAINS @ LAYER " << layid <<
" ACTUALLY " << nofhitsinlay[layid] <<
" - " << isneigh <<
" = " << noftracks <<
" TRACKS" << endl;
1455 if(noftracks > maxnoftracks) maxnoftracks = noftracks;
1461 cout <<
"THIS CLUSTER HAS A TOTAL OF " << maxnoftracks <<
" TRACKS" << endl;
1462 return maxnoftracks;
1471 Double_t delta = 0, trasl[2] = {0., 0.};
1484 cout <<
"DELTA " << delta <<
" TRASL " << trasl[0] <<
" " << trasl[1] << endl;
1493 cout <<
"APPLY LEGENDRE =======================" << endl;
1494 cout <<
"nof hits " << cluster->
GetNofHits() << endl;
1506 double theta_max, r_max;
1510 if(maxpeak < 4)
return NULL;
1516 TLine *line =
new TLine(-10.07, fitq + fitm * (-10.07), 10.07, fitq + fitm * (10.07));
1523 cout <<
"\033[1;33m MAXPEAK " << maxpeak <<
" XR, YC, R: " << xc <<
" " << yc <<
" " << R <<
"\033[0m" << endl;
1545 double rmin = R - R * 0.05;
1546 double rmax = R + R * 0.05;
1553 TArc *arcmin =
new TArc(xc, yc, rmin);
1554 TArc *arcmax =
new TArc(xc, yc, rmax);
1556 arcmin->SetFillStyle(0);
1557 arcmax->SetFillStyle(0);
1558 arcmin->SetLineColor(kGreen);
1559 arcmax->SetLineColor(kBlue);
1567 cout <<
"want to go to new cluster?" << endl;
1573 int startsecid = 1000, endsecid = -1, startlayid = 1000, endlayid = -1;
1574 double totaldistanceconf = 0, chi2 = 0;
1576 for(
int ihit = 0; ihit < cluster->
GetNofHits(); ihit++) {
1586 if(distance <= rmax && distance >= rmin) {
1587 thiscluster->
AddHit(hit);
1606 totaldistanceconf += distanceconf;
1611 double meandistanceconf = totaldistanceconf/thiscluster->
GetNofHits();
1613 cout <<
"START SECTOR " << startsecid <<
" END SECTOR " << endsecid << endl;
1614 cout <<
"START LAYER " << startlayid <<
" END LAYER " << endlayid << endl;
1618 thiscluster->
Draw(kRed);
1622 cout <<
"want to go to next cluster1?" << endl;
1627 if(startlayid != 0 || endlayid != 23) {
1634 if(distance <= rmax && distance >= rmin) {
1639 if(startsecid != 5 && endsecid != 5 && startsecid != 0 && endsecid != 0)
continue;
1659 cout <<
"want to go to next?" << endl;
1664 thiscluster->
AddHit(hit);
1675 thiscluster->
Draw(kRed);
1679 cout <<
"want to go to next cluster2?" << endl;
1696 for(
int ihit = 0; ihit < cluster->
GetNofHits(); ihit++)
1724 cout <<
"previous " << xc <<
" " << yc <<
" " << R << endl;
1726 cout <<
"now " << xc <<
" " << yc <<
" " << R << endl;
1730 cout <<
"wanna see the line?" << endl;
1731 TLine *line =
new TLine(-10.07, fitq + fitm * (-10.07), 10.07, fitq + fitm * (10.07));
1732 line->SetLineColor(2);
1755 for(
int ihit = 0; ihit < cluster->
GetNofHits(); ihit++)
1769 mrk->SetMarkerColor(kRed);
1777 mrk2->SetMarkerColor(kRed);
1791 cout <<
"previous " << xc <<
" " << yc <<
" " << R << endl;
1793 cout <<
"now " << xc <<
" " << yc <<
" " << R << endl;
1797 cout <<
"wanna see the line?" << endl;
1798 TLine *line =
new TLine(-10.07, fitp2 + fitm2 * (-10.07), 10.07, fitp2 + fitm2 * (10.07));
1799 line->SetLineColor(2);
1803 TArc *aline =
new TArc(xc, yc, R);
1804 aline->SetFillStyle(0);
1805 aline->SetLineColor(2);
1806 aline->Draw(
"SAME");
1827 double xi = 0, yi = 0;
1829 fabs(yi1 - (fitm * xi1 + fitp)) <
fabs(yi2 - (fitm * xi2 + fitp)) ? (yi = yi1, xi = xi1) : (yi = yi2, xi = xi2);
1837 TVector2
vec(xc, yc);
1878 yb1 = vec.Y() +
sqrt(R * R - (xb1 - vec.X()) * (xb1 - vec.X()));
1881 yb2 = vec.Y() -
sqrt(R * R - (xb2 - vec.X()) * (xb2 - vec.X()));
1898 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() - R *
R))) / (m*m + 1);
1901 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() - R *
R))) / (m*m + 1);
1911 if(distb1 > distb2) xyb.Set(xb2, yb2);
1912 else xyb.Set(xb1, yb1);
1915 Double_t dist1 =
sqrt((xyb.Y() - y1)*(xyb.Y() - y1) + (xyb.X() - x1)*(xyb.X() - x1));
1916 Double_t dist2 =
sqrt((xyb.Y() - y2)*(xyb.Y() - y2) + (xyb.X() - x2)*(xyb.X() - x2));
1920 if(dist1 > dist2) xy =
new TVector2(x2, y2);
1921 else xy =
new TVector2(x1, y1);
1923 hit->
SetPosition(TVector3(xy->X(), xy->Y(), 0.0));
PndTrkSdsHitList * mvdstrhitlist
void AnalyticalFit(PndTrkCluster *cluster, double xc, double yc, double R, double &fitm, double &fitq)
void AddNeighboringsToHit(PndTrkHit *hit, TObjArray *hits)
void FillLegendreHisto(PndTrkCluster *cluster)
std::vector< std::pair< double, double > > fFoundPeaks
char fMvdPixelBranch[200]
void DrawConfHit(double x, double y, double r, int marker=2)
void DrawNeighboringsToHit(PndTrkHit *hit)
Double_t fStt_ConfDistLimit
void AddTCA(Int_t detID, TClonesArray *array)
Int_t FillConformalHitList(PndTrkCluster *cluster)
void DrawHits(PndTrkHitList *hitlist)
Int_t CountTracksInCluster(PndTrkCluster *cluster)
PndTrkTrack * LegendreFit(PndTrkCluster *cluster)
PndTrkSttHitList * stthitlist
void Draw(Color_t color=kBlack)
friend F32vec4 sqrt(const F32vec4 &a)
PndTrkNeighboringMap * fHitMap
PndTrkSttHitList * Instanciate()
void FromConformalToRealTrack(double fitm, double fitp, double &x0, double &y0, double &R)
static T Sqrt(const T &x)
PndTrkSdsHitList * mvdpixhitlist
void IntersectionFinder(PndTrkHit *hit, double xc, double yc, double R)
PndTrkCluster GetCluster()
TObjArray GetNeighboringsToHit(PndTrkHit *hit)
PndTrkClusterList CreateFullClusterization2()
Double_t fMvdStr_RealDistLimit
PndTrkHit * FindMvdPixelReferenceHit()
int GetNofHitsInSector(int isec)
void SetSortVariable(Double_t sortvar)
void AddHit(PndTrkHit *hit)
PndTrkHit * GetHitFromSector(int ihit, int isec)
PndTrkConformalHitList * conformalhitlist
Int_t ClusterToConformal(PndTrkCluster *cluster)
Double_t fStt_RealDistLimit
void SetCluster(PndTrkCluster *cluster)
PndGeoSttPar * fSttParameters
PndTrkHit * GetHit(int index)
virtual InitStatus Init()
PndTrkLegendreTransform * legendre
TClonesArray * fTrackArray
void ComputeTraAndRot(PndTrkHit *hit, Double_t &delta, Double_t trasl[2])
PndTrkHit * GetHit(int index)
void SetOwnerValue(Bool_t enable=kTRUE)
void FromRealToConformalTrack(double x0, double y0, double R, double &fitm, double &fitp)
void AddCluster(PndTrkCluster *cluster)
void PrintIndivisibleMap()
TClonesArray * fSttHitArray
Double_t fMvdStr_ConfDistLimit
PndTrkClusterList CreateFullClusterization()
void SetCenter(double x, double y)
Bool_t IsNeighboring(int tubeID)
PndTrkConformalTransform * conform
TClonesArray * fMvdPixelHitArray
PndTrkTrack * GetTrack(Int_t index)
Int_t CountTracksInSkewSector(PndTrkCluster *cluster)
void AddTrack(PndTrkTrack *track)
void SetRadius(double radius)
PndTrkSdsHitList * InstanciateStrip()
static T ATan2(const T &y, const T &x)
PndSttMapCreator * fMapper
void Draw(Color_t color=kBlack)
void SetPosition(TVector3 pos)
Int_t ExtractLegendre(Int_t mode, double &theta_max, double &r_max)
TClonesArray * fTubeArray
TClonesArray * fTrackCandArray
TClonesArray * FillTubeArray()
Double_t fMvdPix_RealDistLimit
void Draw(Color_t color=kBlack)
friend F32vec4 fabs(const F32vec4 &a)
void DrawTube(Color_t color)
static PndGeoHandling * Instance()
TClonesArray * fMvdStripHitArray
void DrawGeometryConf(double x1, double x2, double y1, double y2)
PndTrkHit * FindReferenceHit()
Bool_t DoesContain(PndTrkHit *hit)
virtual void Exec(Option_t *opt)
TObjArray GetIndivisiblesToHit(PndTrkHit *hit)
Double_t GetXYDistance(PndTrkHit *fromhit)
Bool_t StraightLineFit(Double_t &fitm, Double_t &fitp)
void AnalyticalFit2(PndTrkCluster *cluster, double fitm, double fitp, double &fitm2, double &fip2)
Double_t fMvdPix_ConfDistLimit
PndTrkCluster * GetCluster(Int_t index)
void ComputePlaneExtremities(PndTrkCluster *cluster)
PndTrkHit * FindMvdReferenceHit()
TObjArray GetIndivisibles()
char fMvdStripBranch[200]
TObjArray GetStandalone()
PndTrkHit * FindSttReferenceHit(int isec=-1)
PndTrkHit * FindMvdStripReferenceHit()
void RePrepareLegendre(PndTrkCluster *cluster)
Int_t ApplyLegendre(PndTrkCluster *cluster, double &theta_max, double &r_max)
PndTrkCluster * CreateClusterAroundTrack(PndTrkTrack *track)
void SetPointToFit(double x, double y, double sigma)
PndTrkSdsHitList * InstanciatePixel()