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]);