void SWTrack::drawHits(QPainter *pnt) { int *zly = (TkDBc::Head->GetSetup() == 3) ? &zLayer2[NLAY*lyrConf] : zLayer1; int zl1 = -200, zl2 = 200; for (int i = 0; i < NLAY; i++) { if (zly[i] > zl1) zl1 = zly[i]; if (zly[i] < zl2) zl2 = zly[i]; } int zl = zl1-zl2; int px = (wWid-zl)/2+LYR_PX+zl1; int py = (wHei-tHei-LYR_H)/2+tHei+LYR_PY; int py1 = py+RES_H+LYR_D; int py2 = py-RES_H-LYR_D+LYR_H; int px1 = px-zl1-20; int px2 = px-zl2+20; int ifc = focusStatus/FOCUS_DOBJ/2-1; if (!(focusStatus & FOCUS_DOBJ)) ifc = -1; for (int i = 0; i < NLAY; i++) { if (zly[i] == 0) continue; pnt->setPen(QColor(100, 255, 200)); pnt->drawLine(px-zly[i], py, px-zly[i], py+LYR_H); pnt->setPen((ifc == i) ? Qt::white : Qt::green); pnt->drawLine(px-zly[i]+1, py, px-zly[i]+1, py+LYR_H); pnt->setPen((ifc == i) ? Qt::gray : Qt::darkGreen); pnt->drawLine(px-zly[i]+2, py, px-zly[i]+2, py+LYR_H); pnt->setPen(Qt::green); drawText(pnt, px-zly[i]-3, py-17, Form("%d", i+1)); } TrTrackR *trk = rEvent->pTrTrack(tID); if (!trk) return; int mfit = (0 <= fID && fID < NPAR) ? fitPar[fID] : 0; if (mfit <= 0) return; double rscx = 0.001, rscy = 0.001; int nhit = trk->GetNhits(); for (int i = 0; i < nhit; i++) { TrRecHitR *hit = trk->GetHit(i); if (!hit) continue; int ily = hit->GetLayer()-1; if (zly[ily] == 0) continue; AMSPoint res = trk->GetResidualO(hit->GetLayer(), mfit); if (!hit->OnlyY() && abs(res.x()) > rscx) rscx = abs(res.x()); if (!hit->OnlyX() && abs(res.y()) > rscy) rscy = abs(res.y()); } rscx = (rscx < 0.005) ? (int)(rscx*2000)*0.0005 : (rscx < 1.000) ? (int)(rscx*200) *0.005 : (int)(rscx*20) *0.05; rscy = (rscy < 0.005) ? (int)(rscy*2000)*0.0005 : (rscy < 1.000) ? (int)(rscy*200) *0.005 : (int)(rscy*20) *0.05; int bx1, bx2, by1, by2; int n1 = 0, n2 = 0; int idx[NLAY]; double zht[NLAY]; for (int i = 0; i < nhit; i++) zht[i] = trk->GetHit(i)->GetCoord().z(); TMath::Sort(nhit, zht, idx); for (int i = 0; i < nhit; i++) { TrRecHitR *hit = trk->GetHit(idx[i]); int lay = hit->GetLayer(); int ily = lay-1; if (zly[ily] == 0) continue; int x = px-zly[ily]; int y1 = py1-RES_H*trk->GetResidualO(lay, mfit).x()/rscx; int y2 = py2-RES_H*trk->GetResidualO(lay, mfit).y()/rscy; if (lyrSta[ily] == LSTA_HITT) { pnt->setPen(Qt::white); pnt->drawRect(x-3, y1-3, 6, 6); pnt->setPen((ifc == ily) ? Qt::darkGray : Qt::darkRed); pnt->drawRect(x-2, y1-2, 6, 6); pnt->fillRect(x-2, y1-2, 6, 6, (ifc == ily) ? QColor(Qt::gray) : QColor(Qt::red)); if (n1++ > 0) { pnt->setPen(Qt::red); pnt->drawLine(bx1, by1, x, y1); pnt->setPen(Qt::darkRed); if (abs(x-bx1) > abs(y1-by1)) pnt->drawLine(bx1, by1+1, x, y1+1); else pnt->drawLine(bx1+1, by1, x+1, y1); } bx1 = x; by1 = y1; } pnt->setPen(Qt::white); pnt->drawRect(x-3, y2-3, 6, 6); pnt->setPen((ifc == ily) ? Qt::darkGray : Qt::darkRed); pnt->drawRect(x-2, y2-2, 6, 6); pnt->fillRect(x-2, y2-2, 6, 6, (ifc == ily) ? QColor(Qt::gray) : QColor(Qt::red)); if (n2++ > 0) { pnt->setPen(Qt::red); pnt->drawLine(bx2, by2, x, y2); pnt->setPen(Qt::darkRed); if (abs(x-bx2) > abs(y2-by2)) pnt->drawLine(bx2, by2+1, x, y2+1); else pnt->drawLine(bx2+1, by2, x+1, y2); } bx2 = x; by2 = y2; } pnt->save(); pnt->rotate(-90); pnt->setPen(QColor(255, 50, 50)); drawText(pnt, -py1-14, px1-47, "ResX"); drawText(pnt, -py2-14, px1-47, "ResY"); drawText(pnt, -py1-20, px1-30, (rscx < 0.005) ? Form("%.0fum", rscx*2e4) : (rscx < 1.000) ? Form("%.1fmm", rscx*2e1) : Form("%.1fcm", rscx*2)); drawText(pnt, -py2-20, px1-30, (rscy < 0.005) ? Form("%.0fum", rscy*2e4) : (rscy < 1.000) ? Form("%.1fmm", rscy*2e1) : Form("%.1fcm", rscy*2)); pnt->restore(); pnt->setPen(QColor(255, 30, 30)); pnt->drawLine(px1, py1, px2, py1); pnt->drawLine(px1, py2, px2, py2); pnt->drawLine(px1-7, py1-RES_H, px1-7, py1+RES_H); pnt->drawLine(px1-9, py1-RES_H, px1-5, py1-RES_H); pnt->drawLine(px1-9, py1+RES_H, px1-5, py1+RES_H); pnt->drawLine(px1-7, py2-RES_H, px1-7, py2+RES_H); pnt->drawLine(px1-9, py2-RES_H, px1-5, py2-RES_H); pnt->drawLine(px1-9, py2+RES_H, px1-5, py2+RES_H); }
QString &InfoText::TrackInfo(AMSEventR *event, int itrk) { static QString str; str = ""; if (!event) return str; TrTrackR *trk = event->pTrTrack(itrk); if (!trk) return str; int id1 = TrTrackR::kChoutko; int id2 = TrTrackR::kChoutko+TrTrackR::kMultScat; if (!trk->ParExists(id1)) id1 = TrTrackR::kLinear; if (!trk->ParExists(id2)) id2 = id1; if (!trk->ParExists(id1)) return str; int fpat[8]; for (int i = 0; i < 8; i++) fpat[i] = 0; for (int i = 0; i < trk->GetNhits(); i++) { TrRecHitR *hit = trk->GetHit(i); int ily = hit->GetLayer()-1; if (hit->OnlyY()) fpat[ily] = 1; else fpat[ily] = 2; } TString spat; for (int i = 0; i < 8; i++) { if (fpat[i] == 0) spat += "_"; if (fpat[i] == 1) spat += "Y"; if (fpat[i] == 2) spat += "O"; } str += Form("Track[%d]\n", itrk); str += Form(" nHit: %d\n", trk->GetNhits()); str += Form(" nHitXY: %d\n", trk->GetNhitsXY()); str += Form(" Pattern: %d [%s]\n", trk->GetPattern(), spat.Data()); str += "\n"; str += Form(" Rigidity (noMS): %.2f\n", trk->GetRigidity(id1)); str += Form(" Rigidity (Fast): %.2f\n", trk->GetRigidity(id2)); str += Form(" errRinv (Fast): %.2f\n", trk->GetErrRinv (id2)); str += "\n"; str += Form(" Chi2Fast: %.2f\n", trk->GetChisq (id2)); str += Form(" Chi2X/Ndf: %.2f/%d\n", trk->GetChisqX (id2), trk->GetNdofX (id2)); str += Form(" Chi2Y/Ndf: %.2f/%d\n", trk->GetChisqY (id2), trk->GetNdofY (id2)); str += "\n"; str += Form(" P0: (%.2f, %.2f, %.2f)\n", trk->GetP0x(id2), trk->GetP0y(id2), trk->GetP0z(id2)); str += Form(" th/ph: (%.1f, %.1f)\n", trk->GetTheta(id2)*TMath::RadToDeg(), trk->GetPhi (id2)*TMath::RadToDeg()); for (int i = 0; i < trk->GetNhits(); i++) { TrRecHitR *hit = trk->GetHit(i); if (!hit) continue; int lay = hit->GetLayer(); str += Form("\nHit[%d]\n ", i); str += hit->Info(i); str += Form("Residual: %.4f %.4f\n", trk->GetResidualO(lay).x(), trk->GetResidualO(lay).y()); } return str; }
void SWTrack::drawInfobar(QPainter *pnt) { pnt->fillRect(QRect(0, 0, wWid-2, tHei), QColor(0, 0, 0, 200)); drawButtons(pnt); TrTrackR *trk = rEvent->pTrTrack(tID); if (!trk) return; int mfit = (0 <= fID && fID < NPAR) ? fitPar[fID] : 0; if (mfit <= 0) return; TString hpat; for (int i = 0; i < NLAY; i++) { if (lyrSta[i] == LSTA_HITY) hpat += "Y"; else if (lyrSta[i] == LSTA_HITT) hpat += "O"; else hpat += "_"; } pnt->setPen(Qt::white); drawText(pnt, 28, 10, Form("Track [%d]", tID)); drawText(pnt, 100, 10, Form("nHit: %d", trk->GetNhits())); drawText(pnt, 170, 10, Form("nHitXY: %d", trk->GetNhitsXY())); drawText(pnt, 270, 10, Form("fPat: %s", hpat.Data())); drawText(pnt, 28, 30, Form("Fit %d", fitPar[fID])); drawText(pnt, 100, 30, Form("chi2/Ndf (X): %.2f/%d", trk->GetChisqX(mfit), trk->GetNdofX(mfit))); drawText(pnt, 270, 30, Form("chi2/Ndf (Y): %.2f/%d", trk->GetChisqY(mfit), trk->GetNdofY(mfit))); drawText(pnt, 100, 50, Form("rigidity: %.2f", trk->GetRigidity(mfit))); drawText(pnt, 270, 50, Form("errRinv: %.2f", trk->GetErrRinv(mfit))); int ifc = focusStatus/FOCUS_DOBJ/2-1; if ((focusStatus & FOCUS_DOBJ) && ifc >= 0) { int iht = getFocusHid(); TrRecHitR *hit = trk->GetHit(iht); if (hit) { char cf1 = (hit->OnlyY()) ? 'G' : '_'; char cf2 = (hit->checkstatus(AMSDBc::USED)) ? 'T' : '_'; int lay = hit->GetLayer(); drawText(pnt, 40, 70, Form("Hit [%d]", iht)); drawText(pnt, 90, 70, Form("TkID: %d", hit->GetTkId())); drawText(pnt, 180, 70, Form("Flag: %c%c", cf1, cf2)); drawText(pnt, 250, 70, Form("Residual: %.4f %.4f", trk->GetResidualO(lay, mfit).x(), trk->GetResidualO(lay, mfit).y())); } else if (abs(lyrSta[ifc]) > 10) { int tkid = lyrSta[ifc]; int nclx = 0, ncly = 0, nhit = 0, nhtt = 0, nhtg = 0; for (int i = 0; rEvent && i < rEvent->nTrCluster(); i++) { TrClusterR *cls = rEvent->pTrCluster(i); if (!cls || cls->GetTkId() != tkid) continue; if (cls->GetSide() == 0) nclx++; else ncly++; } for (int i = 0; rEvent && i < rEvent->nTrRecHit(); i++) { TrRecHitR *hit = rEvent->pTrRecHit(i); if (!hit || hit->GetTkId() != tkid) continue; nhit++; if (hit->checkstatus(AMSDBc::USED)) nhtt++; else if (hit->OnlyY()) nhtg++; } drawText(pnt, 40, 70, "Ladder"); drawText(pnt, 90, 70, Form("TkID: %d", tkid)); drawText(pnt, 170, 70, Form("nClsX/Y: %d/%d", nclx, ncly)); drawText(pnt, 270, 70, Form("nHit/T/G: %d/%d/%d", nhit, nhtt, nhtg)); } } }