#include "TFile.h" #include "TCanvas.h" #include "TStyle.h" #include "TRandom.h" #include "TNtuple.h" #include "TParallelCoord.h" #include "TParallelCoordVar.h" #include "TParallelCoordRange.h" Double_t r1, r2, r3, r4, r5, r6, r7, r8, r9; Double_t dr = 3.5; TRandom *r; void generate_random(Int_t i) { r1 = (2 * dr * r->Rndm(i)) - dr; r2 = (2 * dr * r->Rndm(i)) - dr; r7 = (2 * dr * r->Rndm(i)) - dr; r9 = (2 * dr * r->Rndm(i)) - dr; r4 = (2 * dr * r->Rndm(i)) - dr; r3 = (2 * dr * r->Rndm(i)) - dr; r5 = (2 * dr * r->Rndm(i)) - dr; r6 = (2 * dr * r->Rndm(i)) - dr; r8 = (2 * dr * r->Rndm(i)) - dr; } void tree141_parallelcoord() { TNtuple *nt = nullptr; Double_t s1x, s1y, s1z; Double_t s2x, s2y, s2z; Double_t s3x, s3y, s3z; r = new TRandom();; new TCanvas("c1", "c1",0,0,800,700); nt = new TNtuple("nt","Demo ntuple","x:y:z:u:v:w"); for (Int_t i = 0; i < 20000; i++) { r->Sphere(s1x, s1y, s1z, 0.1); r->Sphere(s2x, s2y, s2z, 0.2); r->Sphere(s3x, s3y, s3z, 0.05); generate_random(i); nt->Fill(r1, r2, r3, r4, r5, r6); generate_random(i); nt->Fill(s1x, s1y, s1z, s2x, s2y, s2z); generate_random(i); nt->Fill(r1, r2, r3, r4, r5, r6); generate_random(i); nt->Fill(s2x-1, s2y-1, s2z, s1x+.5, s1y+.5, s1z+.5); generate_random(i); nt->Fill(r1, r2, r3, r4, r5, r6); generate_random(i); nt->Fill(s1x+1, s1y+1, s1z+1, s3x-2, s3y-2, s3z-2); generate_random(i); nt->Fill(r1, r2, r3, r4, r5, r6); } nt->Draw("x:y:z:u:v:w", "", "para", 5000); auto para = (TParallelCoord*)gPad->GetListOfPrimitives()->FindObject("ParaCoord"); para->SetDotsSpacing(5); auto firstaxis = (TParallelCoordVar*)para->GetVarList()->FindObject("x"); firstaxis->AddRange(new TParallelCoordRange(firstaxis, 0.846018, 1.158469)); para->AddSelection("violet"); para->GetCurrentSelection()->SetLineColor(kViolet); firstaxis->AddRange(new TParallelCoordRange(firstaxis, -0.169447, 0.169042)); para->AddSelection("Orange"); para->GetCurrentSelection()->SetLineColor(kOrange+9); firstaxis->AddRange(new TParallelCoordRange(firstaxis, -1.263024, -0.755292)); }