Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
pointset.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_eve
3 /// Demonstrates usage of class TEvePointSet.
4 ///
5 /// \image html eve_pointset.png
6 /// \macro_code
7 ///
8 /// \author Matevz Tadel
9 
10 #include <TEveManager.h>
11 #include <TEvePointSet.h>
12 #include <TEveRGBAPalette.h>
13 #include <TColor.h>
14 #include <TRandom.h>
15 #include <TMath.h>
16 
17 
18 TEvePointSet* pointset(Int_t npoints = 512, TEveElement* parent=0)
19 {
20  TEveManager::Create();
21 
22  if (!gRandom) gRandom = new TRandom(0);
23  TRandom& r= *gRandom;
24 
25  Float_t s = 100;
26 
27  auto ps = new TEvePointSet();
28  ps->SetOwnIds(kTRUE);
29 
30  for(Int_t i = 0; i<npoints; i++)
31  {
32  ps->SetNextPoint(r.Uniform(-s,s), r.Uniform(-s,s), r.Uniform(-s,s));
33  ps->SetPointId(new TNamed(Form("Point %d", i), ""));
34  }
35 
36  ps->SetMarkerColor(TMath::Nint(r.Uniform(2, 9)));
37  ps->SetMarkerSize(r.Uniform(1, 2));
38  ps->SetMarkerStyle(4);
39 
40  if (parent) {
41  parent->AddElement(ps);
42  } else {
43  gEve->AddElement(ps);
44  gEve->Redraw3D();
45  }
46 
47  return ps;
48 }
49 
50 TEvePointSet* pointset_hierarchy(Int_t level=3, Int_t nps=1, Int_t fac=2,
51  Int_t npoints=512, TEveElement* parent=0)
52 {
53  // This only works in compiled mode!
54 
55  TEvePointSet* ps = 0;
56  --level;
57  for (Int_t i=0; i<nps; ++i) {
58  printf("level=%d nps=%d i=%d\n", level, nps, i);
59  ps = pointset(npoints, parent);
60  if (level) {
61  pointset_hierarchy(level, nps*fac, fac, npoints/fac, ps);
62  }
63  }
64  return ps;
65 }
66 
67 TEvePointSetArray* pointsetarray()
68 {
69  TEveManager::Create();
70 
71  TRandom r(0);
72 
73  auto l = new TEvePointSetArray("TPC hits - Charge Slices", "");
74  l->SetSourceCS(TEvePointSelectorConsumer::kTVT_RPhiZ);
75  l->SetMarkerColor(3);
76  l->SetMarkerStyle(4); // antialiased circle
77  l->SetMarkerSize(0.8);
78 
79  gEve->AddElement(l);
80  l->InitBins("Charge", 9, 10, 100);
81 
82  TColor::SetPalette(1, 0); // Spectrum palette
83  const Int_t nCol = TColor::GetNumberOfColors();
84  for (Int_t i = 1; i <= 9; ++i)
85  l->GetBin(i)->SetMainColor(TColor::GetColorPalette(i * nCol / 10));
86 
87  l->GetBin(0) ->SetMainColor(kGray);
88  l->GetBin(10)->SetMainColor(kWhite);
89 
90  Double_t rad, phi, z;
91  for (Int_t i = 0; i < 10000; ++i) {
92  rad = r.Uniform(60, 180);
93  phi = r.Uniform(0, TMath::TwoPi());
94  z = r.Uniform(-250, 250);
95  l->Fill(rad*TMath::Cos(phi), rad*TMath::Sin(phi), z, r.Uniform(0, 110));
96  }
97 
98  l->CloseBins();
99 
100  gEve->Redraw3D();
101 
102  return l;
103 }