5 #include<TApplication.h>
11 #include<TClonesArray.h>
22 #include<TGraphErrors.h>
24 #include "Math/Minimizer.h"
25 #include "Math/Factory.h"
26 #include "Math/Functor.h"
50 double Chi2(
const double *xx);
71 for (
int i = 0;
i < 7;
i++){
78 for (
int i = 0;
i < 7;
i++){
79 if (
i < 4) result += entry[
i]*entry[
i];
82 else result += entry[
i]*entry[
i];
89 for (
int i = 0;
i < 7;
i++){
125 for (
int i = 0;
i < 7;
i++){
126 for (
int j = 0; j < 7; j++){
134 for (
int i = 0;
i < 7*7;
i++){
139 return M[ij/7][ij%7];
145 double* result =
new double[7*7];
146 for (
int i = 0;
i < 7*7;
i++){
147 result[
i] = (*this)[
i];
153 for (
int i = 0;
i < 7;
i++){
154 for (
int j = 0; j < 7; j++){
162 for (
int i = 0;
i < 7;
i++){
163 for (
int j = 0; j < 7; j++){
164 for (
int k = 0; k < 7; k++){
165 result.
M[
i][j] += this->M[
i][k] * mat.
M[k][j];
172 cout <<
" The numbers are " << endl;
173 for (
int i = 0;
i < 7;
i++){
174 for (
int j = 0; j < 7; j++){
175 cout << std::setprecision(4) <<
"\t" << M[
i][j] <<
", ";
186 TH1D
Chi2_dist(
"Chi2_dist",
"chi2 distribution", 100, 0, 0.002);
210 double mean_diff = 0;
212 for (
int ivector = 0; ivector < nvectors; ivector++){
241 mean_diff += x0.
Mag2()/(double) nvectors;
287 TCanvas canvas(
"canvas",
"canvas", 600, 600);
288 TH1F hist_res_x(
"hist_res_x",
"resolution x", 500, -0.005, 0.005);
289 TH1F hist_res_y(
"hist_res_y",
"resolution y", 500, -0.005, 0.005);
290 TH1F hist_res_z(
"hist_res_z",
"resolution z", 500, -0.005, 0.005);
291 TH1F hist_res_w(
"hist_res_w",
"resolution w", 500, -0.005, 0.005);
292 TH1F hist_res_pxpz(
"hist_res_pxpz",
"resolution px/pz", 500, -0.005, 0.005);
293 TH1F hist_res_pypz(
"hist_res_pypz",
"resolution py/pz", 500, -0.005, 0.005);
294 TH1F hist_res_pw(
"hist_res_pw",
"resolution pw", 500, -0.005, 0.005);
297 TH1F* hists[7] = {&hist_res_x, &hist_res_y, &hist_res_z, &hist_res_w, &hist_res_pxpz, &hist_res_pypz, &hist_res_pw};
310 for (
int ivector = 0; ivector < nvectors; ivector++){
316 for (
int i = 0;
i < 7;
i++){
324 hists[
i]->Fill(x0[
i]);
333 for (
int i = 0;
i < 7;
i++){
334 hists[
i]->Draw(
"hist");
335 if (
i < 6) canvas.Print((filename+
"(").c_str());
336 else canvas.Print((filename+
")").c_str());
343 TChain tMC(
"pndsim");
344 tMC.Add(filename.c_str());
347 TClonesArray* true_tracks =
new TClonesArray(
"PndMCTrack");
348 tMC.SetBranchAddress(
"MCTrack", &true_tracks);
350 TClonesArray* true_points =
new TClonesArray(
"PndSdsMCPoint");
351 tMC.SetBranchAddress(
"LMDPoint", &true_points);
354 TCanvas canvas(
"canvas_test",
"canvas_test", 600, 600);
355 TH1F hist_res_x(
"hist_res_x",
"resolution x", 500, -0.1, 0.1);
356 TH1F hist_res_y(
"hist_res_y",
"resolution y", 500, -0.1, 0.1);
357 TH1F hist_res_z(
"hist_res_z",
"resolution z", 500, -0.5, 0.5);
358 TH1F hist_res_px(
"hist_res_px",
"resolution px", 500, -0.001, 0.001);
359 TH1F hist_res_py(
"hist_res_py",
"resolution py", 500, -0.001, 0.001);
360 TH1F hist_res_pz(
"hist_res_pz",
"resolution pz", 500, -0.001, 0.001);
361 TH1F hist_res_theta(
"hist_res_theta",
"resolution theta", 500, -0.001, 0.001);
362 TH1F hist_res_phi(
"hist_res_phi",
"resolution phi", 500, -0.1, 0.1);
365 int nEvents = tMC.GetEntries();
366 cout <<
" reading " << nEvents <<
" Events " << endl;
367 for (Int_t j = 0; j <
nEvents ; j++) {
372 TVector3 pos_ip_test;
373 TVector3 mom_ip_test;
374 TVector3 pos_lmd_test;
375 TVector3 mom_lmd_test;
378 int nHits = true_points->GetEntriesFast();
381 const int nParticles = true_tracks->GetEntriesFast();
384 repvectpair.
valid =
false;
387 for (Int_t iParticle = 0; iParticle < nParticles; iParticle++) {
401 repvectpair.
IP[0] = posMC.X()/100.;
402 repvectpair.
IP[1] = posMC.Y()/100.;
403 repvectpair.
IP[2] = posMC.Z()/100.;
404 repvectpair.
IP[3] = 1.;
405 repvectpair.
IP[4] = momMC.X()/momMC.Z()*10.;
406 repvectpair.
IP[5] = momMC.Y()/momMC.Z()*10.;
407 repvectpair.
IP[6] = 1.;
412 for (Int_t iHit = 0; iHit <
nHits; iHit++) {
414 if (mcpoint->GetTrackID() < 0)
continue;
424 int ihalf, iplane, imodule, iside, idie, isensor;
425 lmddim.
Get_sensor_by_id(sensID, ihalf, iplane, imodule, iside, idie, isensor);
426 if (iplane > 0)
continue;
428 TVector3 momMC(mcpoint->GetPx(), mcpoint->GetPy(), mcpoint->GetPz());
429 pos_lmd_test = posMC;
430 mom_lmd_test = momMC;
431 repvectpair.
LMD[0] = posMC.X()/100.;
432 repvectpair.
LMD[1] = posMC.Y()/100.;
433 repvectpair.
LMD[2] = posMC.Z()/100.;
434 repvectpair.
LMD[3] = 1.;
435 repvectpair.
LMD[4] = momMC.X()/momMC.Z()*10.;
436 repvectpair.
LMD[5] = momMC.Y()/momMC.Z()*10.;
437 repvectpair.
LMD[6] = 1.;
438 repvectpair.
valid =
true;
443 if (repvectpair.
valid){
444 if (invert) repvectpair.
invert();
464 double theta_test = mom_ip_test.Theta() - mom_lmd_test.Theta();
465 double phi_test = mom_ip_test.Phi() - mom_lmd_test.Phi();
466 pos_lmd_test = pos_ip_test - pos_lmd_test;
467 mom_lmd_test = mom_ip_test - mom_lmd_test;
468 hist_res_x.Fill(pos_lmd_test.X());
469 hist_res_y.Fill(pos_lmd_test.Y());
470 hist_res_z.Fill(pos_lmd_test.Z());
471 hist_res_px.Fill(mom_lmd_test.X());
472 hist_res_py.Fill(mom_lmd_test.Y());
473 hist_res_pz.Fill(mom_lmd_test.Z());
474 hist_res_theta.Fill(theta_test);
475 hist_res_phi.Fill(phi_test);
478 cout << endl <<
" found " <<
repvectpairs.size() <<
" vector pairs for analysis " << endl;
481 static int datacounter (0);
484 outfile <<
"test_lmd_" << datacounter <<
".pdf";
486 hist_res_x.Draw(
"hist");
487 canvas.Print((outfile.str()+
"(").c_str());
488 hist_res_y.Draw(
"hist");
489 canvas.Print((outfile.str()+
"(").c_str());
490 hist_res_z.Draw(
"hist");
491 canvas.Print((outfile.str()+
"(").c_str());
492 hist_res_px.Draw(
"hist");
493 canvas.Print((outfile.str()+
"(").c_str());
494 hist_res_py.Draw(
"hist");
495 canvas.Print((outfile.str()+
"(").c_str());
496 hist_res_pz.Draw(
"hist");
497 canvas.Print((outfile.str()+
"(").c_str());
498 hist_res_theta.Draw(
"hist");
499 canvas.Print((outfile.str()+
"(").c_str());
500 hist_res_phi.Draw(
"hist");
501 canvas.Print((outfile.str()+
")").c_str());
505 TApplication myapp(
"myapp", 0, 0);
508 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.1_0.1_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
509 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_-0.5_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
510 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.001_0.001_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
511 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_-0.0002_-0.0002_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
512 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_-0.0002_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
513 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_-0.0002_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
514 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_-0.0001_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
515 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
516 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_-0.0001_0.0001_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
517 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0002_-0.0002_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
518 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0001_-0.0001_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
519 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0001_0.0001_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
520 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_-0.0001_-0.0001_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
521 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_-0.0002_0.0002_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
522 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.001_0.001/200000/mc_data/asymmetries_results.root", invert);
523 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.001_0.001/200000/mc_data/Lumi_MC_200000.root", invert);
524 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_-0.0001_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
525 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0001_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
526 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0001_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
527 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0002_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
528 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0002_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
529 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.5_0.5_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
530 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.1_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
531 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.5_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
532 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.1_-0.1_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/asymmetries_results.root", invert);
533 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.1_-0.1_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
534 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_-0.1_-0.1_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
535 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_-0.1_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
536 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.5_-0.5_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
537 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_-0.5_0.5_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
538 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_-0.5_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
539 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_-0.1_0.1_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
540 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_-0.1_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
541 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.0_0.1_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
542 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_-0.5_-0.5_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
543 load_vectors(
"./dpm_elastic_thmin_0.06deg/ip_offset_XYZDXDYDZ_0.5_0.0_0.0_0.08_0.08_0.35/beam_grad_XYDXDY_0.0_0.0_0.0_0.0/200000/mc_data/Lumi_MC_200000.root", invert);
553 ROOT::Math::Minimizer*
min =
554 ROOT::Math::Factory::CreateMinimizer(
"Minuit2",
"");
555 min->SetMaxFunctionCalls(100000);
556 min->SetMaxIterations(100000);
557 min->SetTolerance(0.00001);
558 min->SetPrintLevel(1);
560 ROOT::Math::Functor
f(&
Chi2, 49);
622 1 ,0 ,40e-3 ,6.5*40e-3 ,1.124 ,0. ,0 ,
623 0 ,1 ,0 ,0 ,0 ,1.124 ,0 ,
624 -40e-3 ,0 ,1 ,11.24 ,0 ,0 ,0 ,
625 0 ,0 ,0 ,1 ,0 ,0 ,0 ,
626 0 ,0 ,0 ,0 ,1 ,0 ,400e-3 ,
627 0 ,0 ,0 ,0 ,0 ,1 ,0 ,
631 double Mij_inverted[49] = {
639 0.979707, 0.00855083, -0.957085, 10.5033, -1.14336, -0.00568183,
640 0.45782, 0.0379627, 0.955083, 0.999504, -11.2443, 0.00606571,
641 -1.07678, -0.00239097, 9.70718, -4.38641, 244.35, -2749.01,
642 -0.0322177, 4.76301, 0.0134341, 0.0000190301, 0.000359596,
643 0.000503436, 0.994336, 0.0000179324, -0.00038629, -6.77702e-6,
644 0.147446, -0.229086, 3.19516, -35.9521, 0.974497, 0.28175,
645 -0.389989, 0.105476, 0.0543932, 0.267799, -3.03747, -0.167528,
646 0.943272, 0.0670344, 0.0000190301, 0.000359596, 0.000503436,
647 -0.00566317, 0.0000179324, -0.00038629, 0.999993
649 for (
int i = 0;
i < 49;
i++)
650 Mij[
i] = Mij_inverted[
i];
653 cout <<
" the starting condition is " << endl;
668 double stepsize = 0.001;
669 for (
int i = 0;
i < 49;
i++){
670 stringstream varname;
671 varname <<
"M" <<
i/7 <<
i%7;
672 if (
i > 3) stepsize = 0.001;
673 else stepsize = 0.001;
675 min->SetVariable(
i, varname.str().c_str(), Mij[
i], stepsize);
682 TRepMat Mij_err(min->Errors());
683 cout <<
" The minimized matrix is " << endl;
685 cout <<
" with the corresponding errors " << endl;
697 gROOT->SetStyle(
"Plain");
698 const Int_t NRGBs = 5;
699 const Int_t NCont = 255;
700 Double_t stops[NRGBs] = { 0.00, 0.34, 0.61, 0.84, 1.00 };
701 Double_t red[NRGBs] = { 0.00, 0.00, 0.87, 1.00, 0.51 };
702 Double_t green[NRGBs] = { 0.00, 0.81, 1.00, 0.20, 0.00 };
703 Double_t blue[NRGBs] = { 0.51, 1.00, 0.12, 0.00, 0.00 };
704 TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont);
705 gStyle->SetNumberContours(NCont);
706 gStyle->SetTitleFont(10*13+2,
"xyz");
707 gStyle->SetTitleSize(0.06,
"xyz");
708 gStyle->SetTitleOffset(1,
"xy");
709 gStyle->SetTitleOffset(1.3,
"z");
710 gStyle->SetLabelFont(10*13+2,
"xyz");
711 gStyle->SetLabelSize(0.06,
"xyz");
712 gStyle->SetLabelOffset(0.009,
"xyz");
713 gStyle->SetPadBottomMargin(0.2);
714 gStyle->SetPadTopMargin(0.15);
715 gStyle->SetPadLeftMargin(0.15);
716 gStyle->SetPadRightMargin(0.20);
717 gStyle->SetOptTitle(1);
718 gStyle->SetOptStat(1);
720 gStyle->SetFrameFillColor(0);
721 gStyle->SetFrameFillStyle(0);
722 TGaxis::SetMaxDigits(3);
727 if ((
int) (
last_percent * 100) == (
int) (percent * 100))
733 for (
int i = 0;
i < len; ++
i) {
734 if (
i < static_cast<int> (len * percent)) {
740 cout <<
"[" << progress <<
"] " << (
static_cast<int> (100 * percent))
vector< TRepVectPair > repvectpairs
RhoError operator-(const RhoError &m1, const RhoError &m2)
void Propagate_fast_ip_to_lmd(TVector3 &pos, TVector3 &mom, double pbeam)
TRepVect operator*(const TRepVect vect)
TVector3 GetMomentum() const
Int_t GetSensorID() const
Bool_t IsGeneratorCreated(void) const
void load_vectors(string filename, bool invert=false)
void Get_sensor_by_id(const int sensor_id, int &ihalf, int &iplane, int &imodule, int &iside, int &idie, int &isensor)
void trafo_matrix_test(const double *xx, string filename)
TRepMat(const double *mat)
friend F32vec4 min(const F32vec4 &a, const F32vec4 &b)
float & operator[](int i)
void DrawProgressBar(int len, double percent)
TVector3 GetPosition() const
TRepMat operator*(const TRepMat mat)
TH1D Chi2_dist("Chi2_dist","chi2 distribution", 100, 0, 0.002)
static PndLmdDim & Get_instance()
double Chi2(const double *xx)
double & GetSet(int col, int row)
int trafo_matrix_fit(bool invert=false)
TVector3 GetStartVertex() const
double & operator[](int const ij)