21 ClassImp(TGL5DDataSet);
29 void FindRange(Long64_t size,
const Double_t *src, Rgl::Range_t &range);
37 TGL5DDataSet::TGL5DDataSet(TTree *tree)
38 : TNamed(
"TGL5DataSet",
"TGL5DataSet"),
40 fV1(0), fV2(0), fV3(0), fV4(0), fV5(0),
41 fV1Range(1.), fV2Range(1.), fV3Range(1.),
45 Error(
"TGL5Data",
"Null pointer tree.");
46 throw std::runtime_error(
"");
49 fNP = tree->GetSelectedRows();
51 Info(
"TGL5DDataSet",
"Number of selected rows: %d", Int_t(fNP)) ;
53 fV1 = tree->GetVal(0);
54 fV2 = tree->GetVal(1);
55 fV3 = tree->GetVal(2);
56 fV4 = tree->GetVal(3);
57 fV5 = tree->GetVal(4);
59 fV4IsString = tree->GetVar(3)->IsString();
61 if (!fV1 || !fV2 || !fV3 || !fV4 || !fV5) {
62 Error(
"TGL5DDataSet",
"One or all of vN is a null pointer.");
63 throw std::runtime_error(
"");
66 FindRange(fNP, fV1, fV1MinMax);
67 FindRange(fNP, fV2, fV2MinMax);
68 FindRange(fNP, fV3, fV3MinMax);
69 FindRange(fNP, fV4, fV4MinMax);
70 FindRange(fNP, fV5, fV5MinMax);
72 const Double_t v1Add = 0.1 * (fV1MinMax.second - fV1MinMax.first);
73 const Double_t v2Add = 0.1 * (fV2MinMax.second - fV2MinMax.first);
74 const Double_t v3Add = 0.1 * (fV3MinMax.second - fV3MinMax.first);
76 fV1MinMax.first -= v1Add, fV1MinMax.second += v1Add;
77 fV1Range = fV1MinMax.second - fV1MinMax.first;
78 fV2MinMax.first -= v2Add, fV2MinMax.second += v2Add;
79 fV2Range = fV2MinMax.second - fV2MinMax.first;
80 fV3MinMax.first -= v3Add, fV3MinMax.second += v3Add;
81 fV3Range = fV3MinMax.second - fV3MinMax.first;
83 TH3F hist(
"tmp",
"tmp", 2, -1., 1., 2, -1., 1., 2, -1., 1.);
87 hist.GetXaxis()->Copy(fXAxis);
88 hist.GetYaxis()->Copy(fYAxis);
89 hist.GetZaxis()->Copy(fZAxis);
91 fXAxis.Set(kDefaultNB, fV1MinMax.first, fV1MinMax.second);
92 fYAxis.Set(kDefaultNB, fV2MinMax.first, fV2MinMax.second);
93 fZAxis.Set(kDefaultNB, fV3MinMax.first, fV3MinMax.second);
95 fPainter.reset(
new TGLHistPainter(
this));
102 Int_t TGL5DDataSet::DistancetoPrimitive(Int_t px, Int_t py)
104 return fPainter->DistancetoPrimitive(px, py);
110 void TGL5DDataSet::ExecuteEvent(Int_t event, Int_t px, Int_t py)
112 return fPainter->ExecuteEvent(event, px, py);
118 char *TGL5DDataSet::GetObjectInfo(Int_t , Int_t )
const
120 static char mess[] = {
"5d data set"};
127 void TGL5DDataSet::Paint(Option_t * )
129 fPainter->Paint(
"dummyoption");
135 TGL5DPainter *TGL5DDataSet::GetRealPainter()
const
137 return static_cast<TGL5DPainter *
>(fPainter->GetRealPainter());
144 void TGL5DDataSet::SelectPoints(Double_t v4Level, Double_t range)
148 for (Int_t i = 0; i < fNP; ++i)
149 if (TMath::Abs(fV4[i] - v4Level) < range)
150 fIndices.push_back(i);
156 UInt_t TGL5DDataSet::SelectedSize()
const
158 return UInt_t(fIndices.size());
164 Double_t TGL5DDataSet::V1(UInt_t ind)
const
166 return V1ToUnitCube(fV1[fIndices[ind]]);
172 Double_t TGL5DDataSet::V2(UInt_t ind)
const
174 return V2ToUnitCube(fV2[fIndices[ind]]);
180 Double_t TGL5DDataSet::V3(UInt_t ind)
const
182 return V3ToUnitCube(fV3[fIndices[ind]]);
188 TAxis *TGL5DDataSet::GetXAxis()
const
196 TAxis *TGL5DDataSet::GetYAxis()
const
204 TAxis *TGL5DDataSet::GetZAxis()
const
212 const Rgl::Range_t &TGL5DDataSet::GetXRange()
const
220 const Rgl::Range_t &TGL5DDataSet::GetYRange()
const
228 const Rgl::Range_t &TGL5DDataSet::GetZRange()
const
236 const Rgl::Range_t &TGL5DDataSet::GetV4Range()
const
244 Double_t TGL5DDataSet::V1ToUnitCube(Double_t v1)
const
246 return (v1 - fV1MinMax.first) / fV1Range;
252 Double_t TGL5DDataSet::V2ToUnitCube(Double_t v2)
const
254 return (v2 - fV2MinMax.first) / fV2Range;
260 Double_t TGL5DDataSet::V3ToUnitCube(Double_t v3)
const
262 return (v3 - fV3MinMax.first) / fV3Range;
270 void FindRange(Long64_t size,
const Double_t *src, Rgl::Range_t &range)
272 range.first = src[0];
273 range.second = src[0];
275 for (Long64_t i = 1; i < size; ++i) {
276 range.first = TMath::Min(range.first, src[i]);
277 range.second = TMath::Max(range.second, src[i]);