34 Point(
double _x,
double _y,
double _z)
49 map<THitI, THitI>* Duplets_start,
52 unsigned int* realIHit);
57 THitI* StsRestHitsStartIndex,
58 unsigned int* realIHit);
63 THitI* StsRestHitsStopIndex,
64 unsigned int* realIHit);
102 int tmp[10] = {5, 7, 3, 8, 6, 2, 4, 1, 9, 14};
103 for (
int i = 0;
i < 10;
i++) {
113 gStyle->SetCanvasBorderMode(0);
114 gStyle->SetCanvasBorderSize(1);
115 gStyle->SetCanvasColor(0);
117 YZ =
new TCanvas(
"YZ",
"YZ Side View", -1, 0, 500, 500);
118 YZ->Range(-5.0, -50.0, 105.0, 50.0);
122 XZ =
new TCanvas(
"XZ",
"XZ Top View", -1, 500, 500, 500);
123 XZ->Range(-5.0, -50.0, 105.0, 50.0);
127 YX =
new TCanvas(
"YX",
"YX Front View", -506, 0, 500, 500);
128 YX->Range(-50.0, -50.0, 50.0, 50.0);
133 XYZ =
new TCanvas(
"XYZ",
"XYZ 3D View", -500, 500, 500, 500);
134 XYZ->Range(-5.0, -50.0, 115.0, 60.0);
154 for (
int i = 0;
i <
algo->vStsStrips.size();
i++) {
158 for (
int i = 0;
i <
algo->vStsStripsB.size();
i++) {
162 for (
int i = 0;
i <
algo->vStsHits.size();
i++) {
175 int NRegMCTracks = 0;
179 cout <<
"Only reconstructable tracks are shown." << endl;
180 cout <<
"Red - primary p > 0.5 - (first iteration)" << endl;
181 cout <<
"Blue - primary p < 0.5 - (second iteration)" << endl;
182 cout <<
"Green - secondary p > 0.5 - (third\\first iteration)" << endl;
183 cout <<
"Gray - secondary p < 0.5 - (third\\second iteration)" << endl;
186 for (vector<CbmL1MCTrack>::iterator it = L1.vMCTracks.begin(); it != L1.vMCTracks.end(); ++it) {
189 if (!T.IsReconstructable())
199 if (T.mother_ID != -1)
201 if ((T.mother_ID != -1) && (T.p < 0.5))
204 cout <<
"MC Track: p = " << T.p <<
" mother_ID = " << T.mother_ID <<
" PDG = " << T.pdg <<
" x,y,z = ("
205 << T.x <<
", " << T.y <<
", " << T.z <<
")" << endl;
210 par[2] = T.px / T.pz;
211 par[3] = T.py / T.pz;
215 int npoints = T.Points.size();
217 cout <<
" NMCPoints = " << npoints << endl;
221 vector<double> lx, ly, lz;
222 lx.push_back(par[0]);
223 ly.push_back(par[1]);
224 lz.push_back(par[5]);
230 for (
int ih = 0; ih < T.StsHits.size(); ih++)
231 cout << T.StsHits[ih] <<
" ";
234 for (
int ip = 0; ip < npoints; ip++) {
240 par1[2] = p.
px / p.
pz;
241 par1[3] = p.
py / p.
pz;
245 static float pz = -1;
246 if (
fabs(pz - p.
z) > 1.0)
248 cout <<
"point.z = " << p.
z << endl;
252 double Zfrst = par[5];
253 double Zlast = par1[5];
255 if (step >
fabs(Zfrst - Zlast) / 5)
256 step =
fabs(Zfrst - Zlast) / 5;
259 while (
fabs(par[5] - Zlast) >
fabs(step)) {
260 double znxt = par[5] + step;
263 double w =
fabs(znxt - Zfrst);
264 double w1 =
fabs(znxt - Zlast);
265 if (w + w1 < 1.e-3) {
269 float xl = (w1 * par[0] + w * par1[0]) / (w + w1);
270 float yl = (w1 * par[1] + w * par1[1]) / (w + w1);
271 float zl = (w1 * par[5] + w * par1[5]) / (w + w1);
272 if ((
fabs(xl) > 50.0) || (
fabs(yl) > 50.0)) {
278 lx.push_back((w1 * par[0] + w * par1[0]) / (w + w1));
279 ly.push_back((w1 * par[1] + w * par1[1]) / (w + w1));
280 lz.push_back((w1 * par[5] + w * par1[5]) / (w + w1));
285 par[2] = p.
px / p.
pz;
286 par[3] = p.
py / p.
pz;
289 lx.push_back(par[0]);
290 ly.push_back(par[1]);
291 lz.push_back(par[5]);
312 cout <<
"L1CADraw: number of registered MC tracks: " << NRegMCTracks << endl;
332 vector<THitI>& recoHits =
algo->vRecoHits;
333 for (vector<L1Track>::iterator it =
algo->vTracks.begin(); it !=
algo->vTracks.end(); ++it) {
341 vector<double> lx, ly, lz;
342 vector<double> lx_turned, ly_turned, lz_turned;
351 for (
int iHit = 0; iHit < nHits; iHit++) {
352 unsigned int ih = recoHits[curRecoHit++];
366 lx_turned.push_back(v3.
x());
367 ly_turned.push_back(v3.
y());
368 lz_turned.push_back(v3.
z());
385 pline.
DrawPolyLine(lx_turned.size(), &(lz_turned[0]), &(lx_turned[0]));
390 cout <<
"L1CADraw: number of reconstructed tracks: " << NRecTracks << endl;
406 for (
int iTrip = 0; iTrip < triplets.size(); iTrip++) {
409 unsigned int iLHit = trip.
GetLHit();
410 iLHit = realIHit[iLHit];
411 unsigned int iMHit = trip.
GetMHit();
412 iMHit = realIHit[iMHit];
413 unsigned int iRHit = trip.
GetRHit();
414 iRHit = realIHit[iRHit];
436 vector<double> lx, ly, lz;
441 lx.push_back(coor.
x);
442 ly.push_back(coor.
y);
443 lz.push_back(coor.
z);
446 lx.push_back(coor.
x);
447 ly.push_back(coor.
y);
448 lz.push_back(coor.
z);
451 lx.push_back(coor.
x);
452 ly.push_back(coor.
y);
453 lz.push_back(coor.
z);
458 marker.
DrawMarker(lz[nHits - 1], ly[nHits - 1]);
461 marker.
DrawMarker(lz[nHits - 1], lx[nHits - 1]);
464 marker.
DrawMarker(lx[nHits - 1], ly[nHits - 1]);
468 map<THitI, THitI>* Duplets_start,
469 const int MaxArrSize,
470 THitI* StsRestHitsStartIndex,
471 unsigned int* realIHit)
473 for (
int iSta = 0; iSta <
NStations - 1; iSta++) {
474 const int firstHitOnSta = StsRestHitsStartIndex[iSta];
475 const int firstHitOnNextSta = StsRestHitsStartIndex[iSta + 1];
476 THitI* staDupletsHits = &(Duplets_hits[iSta][0]);
477 map<THitI, THitI>& staDupletsStart = Duplets_start[iSta];
479 for (
int iRestLHit = firstHitOnSta; iRestLHit < firstHitOnNextSta; iRestLHit++) {
480 const int ilh = iRestLHit - firstHitOnSta;
481 const int iirhFirst = staDupletsStart[ilh];
482 const int iirhLast = staDupletsStart[ilh + 1] - 1;
484 for (
int iirh = iirhFirst; iirh <= iirhLast; iirh++) {
485 const int iRestRHit = staDupletsHits[iirh] + firstHitOnNextSta;
487 const int iLHit = realIHit[iRestLHit];
488 const int iRHit = realIHit[iRestRHit];
505 THitI* Duplets_start,
506 const int MaxArrSize,
507 THitI* StsRestHitsStartIndex,
508 unsigned int* realIHit)
510 const int firstHitOnSta = StsRestHitsStartIndex[iSta];
511 const int firstHitOnNextSta = StsRestHitsStartIndex[iSta + 1];
512 THitI* staDupletsHits = Duplets_hits + MaxArrSize * iSta;
513 THitI* staDupletsStart = Duplets_start + MaxArrSize * iSta;
515 for (
int iRestLHit = firstHitOnSta; iRestLHit < firstHitOnNextSta; iRestLHit++) {
516 const int ilh = iRestLHit - firstHitOnSta;
517 const int iirhFirst = staDupletsStart[ilh];
518 const int iirhLast = staDupletsStart[ilh + 1] - 1;
520 for (
int iirh = iirhFirst; iirh <= iirhLast; iirh++) {
521 const int iRestRHit = staDupletsHits[iirh] + firstHitOnNextSta;
523 const int iLHit = realIHit[iRestLHit];
524 const int iRHit = realIHit[iRestRHit];
547 vector<double> lx, ly, lz;
552 lx.push_back(coor.
x);
553 ly.push_back(coor.
y);
554 lz.push_back(coor.
z);
557 lx.push_back(coor.
x);
558 ly.push_back(coor.
y);
559 lz.push_back(coor.
z);
564 marker.
DrawMarker(lz[nHits - 1], ly[nHits - 1]);
567 marker.
DrawMarker(lz[nHits - 1], lx[nHits - 1]);
570 marker.
DrawMarker(lx[nHits - 1], ly[nHits - 1]);
575 cout <<
" vStsHits.size = " <<
algo->vStsHits.size() << endl;
576 cout <<
" vRecoHits.size = " <<
algo->vRecoHits.size() << endl;
577 cout <<
" vTracks.size = " <<
algo->vTracks.size() << endl;
583 float x = 0, y = 0, z = 0;
643 latex.
DrawLatex(0.0, 45.0,
"YZ Side View");
646 latex.
DrawLatex(0.0, 45.0,
"XZ Top View");
649 latex.
DrawLatex(-45.0, 45.0,
"YX Front View");
653 Double_t x_poly[nhits], y_poly[nhits], z_poly[nhits];
654 Double_t x_poly_fake[nhits], y_poly_fake[nhits], z_poly_fake[nhits];
655 Double_t x_poly_turned[nhits], z_poly_turned[nhits];
656 Double_t x_poly_fake_turned[nhits], z_poly_fake_turned[nhits];
658 for (
int ista =
NStations - 1; ista >= 0; ista--) {
661 Int_t n_poly_fake = 0;
669 algo->GetHitCoor(h, x, y, z, st);
682 x_poly_turned[n_poly] = x_t;
683 z_poly_turned[n_poly] = z_t;
686 x_poly_fake[n_poly_fake] = x;
687 y_poly_fake[n_poly_fake] = y;
688 z_poly_fake[n_poly_fake] = z;
689 x_poly_fake_turned[n_poly_fake] = x_t;
690 z_poly_fake_turned[n_poly_fake] = z_t;
774 latex.
DrawLatex(0.0, 45.0,
"YZ Side View");
777 latex.
DrawLatex(0.0, 45.0,
"XZ Top View");
780 latex.
DrawLatex(-45.0, 45.0,
"YX Front View");
784 Double_t x_poly[nhits], y_poly[nhits], z_poly[nhits];
785 Double_t x_poly_fake[nhits], y_poly_fake[nhits], z_poly_fake[nhits];
787 for (
int ista =
NStations - 1; ista >= 0; ista--) {
790 Int_t n_poly_fake = 0;
791 for (
int iRestHit = StsRestHitsStartIndex[ista]; iRestHit < StsRestHitsStopIndex[ista]; iRestHit++) {
792 int ih = realIHit[iRestHit];
798 algo->GetHitCoor(h, x, y, z, st);
805 x_poly_fake[n_poly_fake] = x;
806 y_poly_fake[n_poly_fake] = y;
807 z_poly_fake[n_poly_fake] = z;
874 std::cin.get(symbol);
879 }
while (symbol !=
'\n');
905 algo->GetHitCoor(hit, x, y, z, sta);
906 return Point(x, y, z);
911 system(
"mkdir L1CADraw -p");
932 tmp +=
"XYZView.pdf";
friend F32vec4 fabs(const F32vec4 &a)
R__EXTERN TStyle * gStyle
Int_t Propagate(Double_t *T, Double_t *C, Double_t z_out, Double_t QP0, Bool_t line=false)
Propagation of (T, C) to z_out without material, using linearisation at qp0.
static CbmKF * Instance()
static CbmL1 * Instance()
reconstructed tracks
void SaveCanvas(TString name)
int StsHitsStartIndex[20]
vector< fscal > vStsStripsB
void DrawRestHits(THitI *StsRestHitsStartIndex, THitI *StsRestHitsStopIndex, unsigned int *realIHit)
void DrawTriplet(int il, int im, int ir)
void DrawDoublet(int il, int ir)
void DrawTriplets(vector< L1Triplet > &triplets, const THitI *realIHit)
vector< L1StsHit > vStsHits
void DrawDoubletsOnSta(int iSta, THitI *Duplets_hits, THitI *Duplets_start, const int MaxArrSize, THitI *StsRestHitsStartIndex, unsigned int *realIHit)
void DrawDoublets(vector< THitI > *Duplets_hits, map< THitI, THitI > *Duplets_start, const int MaxArrSize, THitI *StsHitsStartIndex, unsigned int *realIHit)
void InitL1Draw(L1Algo *algo_)
vector< fscal > vStsStrips
virtual void SetFillStyle(Style_t fstyle)
virtual void SetLineColor(Color_t lcolor)
virtual void SetMarkerColor(Color_t mcolor=1)
virtual void SetMarkerStyle(Style_t mstyle=1)
virtual void SetMarkerSize(Size_t msize=1)
virtual void SetTextAlign(Short_t align=11)
virtual void SetTextFont(Font_t tfont=62)
virtual void SetTextSize(Float_t tsize=1)
void Draw(Option_t *option="") override
TLatex * DrawLatex(Double_t x, Double_t y, const char *text)
virtual TLine * DrawLine(Double_t x1, Double_t y1, Double_t x2, Double_t y2)
void Draw(Option_t *option="") override
virtual TMarker * DrawMarker(Double_t x, Double_t y)
virtual TPolyLine * DrawPolyLine(Int_t n, Double_t *x, Double_t *y, Option_t *option="")
void Draw(Option_t *option="") override
Point(double _x, double _y, double _z)