/****************************************************************************** * macro to draw parallel coordinates * * * * Author: Dr. Christian Stratowa, Vienna, Austria. * * Created: 01 Aug 2008 Last modified: 03 Sep 2008 * ******************************************************************************/ /////////////////////////// // // in new root session(s): // create file "plot.root" // > .L macroParallelCoordTree.C+ // > CreateFileTree("PlotTree100.root", 100000) // > CreateFileTree("PlotTreeM15.root", 1500000) // > CreateFileTree("PlotTreeM65.root", 6500000) // // in new root session(s): // draw plot // > .L macroParallelCoord.C // > ParallelCoordTree("PlotTree100.root") // > ParallelCoordTree("PlotTreeM15.root") // > ParallelCoordTree("PlotTree100.root","random0:random1:random2:random3:random4:random5",0,0,1,1) // > ParallelCoordTree("PlotTree100.root","log(random0):log(random1):log(random2):log(random3):log(random4):log(random5)",0,0,1,1) // > ParallelCoordTree("PlotTreeM15.root","random0:random1:random2:random3:random4:random5",0,0,1,1) // > ParallelCoordTree("PlotTreeM15.root","log(random0):log(random1):log(random2):log(random3):log(random4):log(random5)",0,0,1,1) // // > DrawParallelCoord("PlotTree100.root","random0:random1:random2:random3:random4:random5",0,0,1,1,1) // > DrawParallelCoord("PlotTreeM15.root","random0:random1:random2:random3:random4:random5",0,0,1,1,1) // /////////////////////////// #include "TBranch.h" #include "TCanvas.h" #include "TFile.h" #include "TLeaf.h" #include "TMath.h" #include "TParallelCoord.h" #include "TParallelCoordVar.h" #include "TParallelCoordRange.h" #include "TRandom.h" #include "TStyle.h" #include "TTree.h" #ifndef __CINT__ #include #endif #include "float.h" //______________________________________________________________________________ void CreateFileTree(const char *filename="PlotTree.root", Int_t nentries = 10000) { // Create "PlotTree.root" TFile f(filename, "recreate"); TTree tree("OneTree","a simple Tree with simple variables"); Double_t random0, random1, random2, random3, random4, random5; tree.Branch("random0", &random0, "random0/D"); tree.Branch("random1", &random1, "random1/D"); tree.Branch("random2", &random2, "random2/D"); tree.Branch("random3", &random3, "random3/D"); tree.Branch("random4", &random4, "random4/D"); tree.Branch("random5", &random5, "random5/D"); for (Int_t i=0; iGaus(13, 1.6); random1 = gRandom->Gaus(13, 1.6); random2 = gRandom->Gaus(13, 1.6); random3 = gRandom->Gaus(13, 1.6); random4 = gRandom->Gaus(13, 1.6); random5 = gRandom->Gaus(13, 1.6); tree.Fill(); }//for_i tree.Write(); }//CreateFileTree //______________________________________________________________________________ void ParallelCoordTree(const char *filename="PlotTree.root", const char *varlist = "random0:random1:random2:random3:random4:random5", Double_t min = 0, Double_t max = 0, Bool_t gl = kTRUE, Bool_t can = kFALSE) { TFile *file = TFile::Open(filename, "READ"); if (!file) return; TTree *tree = (TTree*)gDirectory->Get("OneTree"); Int_t nentries = (Int_t)(tree->GetEntries()); TCanvas *fCanvas = new TCanvas("test", "test", 10, 10, 600, 640); tree->Draw(varlist, "", "para", nentries); TParallelCoord* para = (TParallelCoord*)gPad->GetListOfPrimitives()->FindObject("ParaCoord"); para->SetGlobalScale(gl); para->SetDotsSpacing(5); //no para->SetCandleChart(can); if (can) para->SetCandleChart(can); // Set axis range if (min < max){ para->SetGlobalMin(min); para->SetGlobalMax(max); }//if }//ParallelCoordTree //______________________________________________________________________________ void DrawParallelCoord(const char *filename="PlotTree.root", const char *varlist = "random0:random1:random2:random3:random4:random5", Double_t min = 0, Double_t max = 0, Bool_t aslog = kTRUE, Bool_t gl = kTRUE, Bool_t can = kFALSE) { TFile *file = TFile::Open(filename, "READ"); if (!file) return; TTree *tree = (TTree*)gDirectory->Get("OneTree"); Int_t nentries = (Int_t)(tree->GetEntries()); TCanvas *fCanvas = new TCanvas("test", "test", 10, 10, 600, 460); TParallelCoord* para = new TParallelCoord(tree, nentries); // Add variables TString varname; char *name = new char[strlen(varlist) + 1]; char *dname = name; name = strtok(strcpy(name, varlist), ":"); while(name) { if (aslog) {varname = "log("; varname += name;} else {varname = name;} if (aslog) {varname += ")";} para->AddVariable(varname); name = strtok(0, ":"); if (name == 0) break; }//while delete [] dname; para->SetGlobalScale(gl); para->SetDotsSpacing(5); //no para->SetCandleChart(can); if (can) para->SetCandleChart(can); // Set axis range if (min < max){ para->SetGlobalMin(min); para->SetGlobalMax(max); }//if para->Draw(); }//DrawParallelCoord