// @(#)root/eve:$Id$ // Author: Matevz Tadel // Demonstrates usage of TEveBoxSet class. TEveBoxSet* boxset_zyliu(Float_t x=0, Float_t y=0, Float_t z=0, Int_t num=100, Bool_t register=kTRUE) { vector vec_cells_x; //x, y, z, rho vector vec_cells_y; //x, y, z, rho vector vec_cells_z; //x, y, z, rho vector vec_cells_w; //x, y, z, rho TFile * f= new TFile("test.root"); TH3D * h3d = (TH3D*) f->Get("h3d"); double cell_x = h3d->GetXaxis()->GetBinWidth(1); double cell_y = h3d->GetYaxis()->GetBinWidth(1); double cell_z = h3d->GetZaxis()->GetBinWidth(1); int Nbinsx = h3d->GetNbinsX(); int Nbinsy = h3d->GetNbinsY(); int Nbinsz = h3d->GetNbinsZ(); double center_x = h3d->GetXaxis()->GetBinCenter(Nbinsx/2.); double center_y = h3d->GetYaxis()->GetBinCenter(Nbinsy/2.); double center_z = h3d->GetZaxis()->GetBinCenter(Nbinsz/2.); int index = 0; double w_min = 10000; double w_max = -10000; for (int iz=1; iz<=Nbinsz; iz++) { for (int iy=1; iy<=Nbinsy; iy++) { for (int ix=1; ix<=Nbinsx; ix++) { vec_cells_x.push_back(h3d->GetXaxis()->GetBinCenter(ix)); vec_cells_y.push_back(h3d->GetYaxis()->GetBinCenter(iy)); vec_cells_z.push_back(h3d->GetZaxis()->GetBinCenter(iz)); double w = h3d->GetBinContent(ix, iy, iz); vec_cells_w.push_back( w ); index++; if (w_min>w) w_min = w; if (w_maxSetPalette(1, 0); TEveRGBAPalette* pal = new TEveRGBAPalette(0, 130); TEveFrameBox* frm = new TEveFrameBox(); frm->SetAABoxCenterHalfSize(center_x, center_y, center_z, 200, 200, 200); frm->SetFrameColor(kCyan); frm->SetBackColorRGBA(120,120,120,20); frm->SetDrawBack(kTRUE); cout << "Total bins: " << Ntotal << endl; TEveBoxSet* q = new TEveBoxSet("BoxSet"); q->SetPalette(pal); q->SetFrame(frm); //q->Reset(TEveBoxSet::kBT_AABox, kFALSE, 64); q->Reset(TEveBoxSet::kBT_AABoxFixedDim, kFALSE, 64); q->SetDefWidth(cell_x); q->SetDefHeight(cell_y); q->SetDefDepth(cell_z); for (Int_t i=0; iAddBox(vec_cells_x[i],vec_cells_y[i],vec_cells_z[i]); q->DigitValue(( vec_cells_w[i] - w_min )/unit_rho); } q->RefitPlex(); TEveTrans& t = q->RefMainTrans(); t.SetPos(x, y, z); // Uncomment these two lines to get internal highlight / selection. q->SetPickable(1); q->SetAlwaysSecSelect(1); if (register) { gEve->AddElement(q); gEve->Redraw3D(kTRUE); } return q; } TEveBoxSet* boxset_colisval(Float_t x=0, Float_t y=0, Float_t z=0, Int_t num=100, Bool_t register=kTRUE) { TEveManager::Create(); TRandom r(0); TEveBoxSet* q = new TEveBoxSet("BoxSet"); q->Reset(TEveBoxSet::kBT_AABox, kTRUE, 64); for (Int_t i=0; iAddBox(r.Uniform(-10, 10), r.Uniform(-10, 10), r.Uniform(-10, 10), r.Uniform(0.2, 1), r.Uniform(0.2, 1), r.Uniform(0.2, 1)); q->DigitColor(r.Uniform(20, 255), r.Uniform(20, 255), r.Uniform(20, 255), r.Uniform(20, 255)); } q->RefitPlex(); TEveTrans& t = q->RefMainTrans(); t.SetPos(x, y, z); if (register) { gEve->AddElement(q); gEve->Redraw3D(kTRUE); } return q; } TEveBoxSet* boxset_single_color(Float_t x=0, Float_t y=0, Float_t z=0, Int_t num=100, Bool_t register=kTRUE) { TEveManager::Create(); TRandom r(0); TEveBoxSet* q = new TEveBoxSet("BoxSet"); q->UseSingleColor(); q->SetMainColor(kCyan-2); q->SetMainTransparency(50); q->Reset(TEveBoxSet::kBT_AABox, kFALSE, 64); for (Int_t i=0; iAddBox(r.Uniform(-10, 10), r.Uniform(-10, 10), r.Uniform(-10, 10), r.Uniform(0.2, 1), r.Uniform(0.2, 1), r.Uniform(0.2, 1)); } q->RefitPlex(); TEveTrans& t = q->RefMainTrans(); t.SetPos(x, y, z); if (register) { gEve->AddElement(q); gEve->Redraw3D(kTRUE); } return q; } TEveBoxSet* boxset_freebox(Int_t num=100, Bool_t register=kTRUE) { TEveManager::Create(); TRandom r(0); gStyle->SetPalette(1, 0); TEveRGBAPalette* pal = new TEveRGBAPalette(0, 130); TEveBoxSet* q = new TEveBoxSet("BoxSet"); q->SetPalette(pal); q->Reset(TEveBoxSet::kBT_FreeBox, kFALSE, 64); #define RND_BOX(x) r.Uniform(-(x), (x)) Float_t verts[24]; for (Int_t i=0; iAddBox(verts); q->DigitValue(r.Uniform(0, 130)); } q->RefitPlex(); #undef RND_BOX // Uncomment these two lines to get internal highlight / selection. // q->SetPickable(1); // q->SetAlwaysSecSelect(1); if (register) { gEve->AddElement(q); gEve->Redraw3D(kTRUE); } return q; }