// This macro plays a recorded ROOT session showing how to perform various // interactive graphical editing operations. The initial graphics setup // was created using the following root commands: /* t = new TRecorder(); t->Start("graphedit_playback.root"); gStyle->SetPalette(1); TCanvas *c2 = new TCanvas("c2","c2",0,0,700,500); TH2F* h2 = new TH2F("h2","Random 2D Gaussian",40,-4,4,40,-4,4); h2->SetDirectory(0); TRandom r; for (int i=0;i<50000;i++) h2->Fill(r.Gaus(),r.Gaus()); h2->Draw(); gPad->Update(); TCanvas *c1 = new TCanvas("c1","c1",0,0,700,500); TH1F* h1 = new TH1F("h1","Random 1D Gaussian",100,-4,4); h1->SetDirectory(0); h1->FillRandom("gaus",10000); h1->Draw(); gPad->Update(); // Here the following "sketch" was done. t->Stop(); */ // Note: The previous commands should be copy/pasted into a ROOT session, not // executed as a macro. // // The interactive editing shows: // - Object editing using object editors // - Direct editing on the graphics canvas // - Saving PS and bitmap files. // - Saving as a .C file: C++ code corresponding to the modifications // is saved. // // The sketch of the recorded actions is: // // On the canvas c1: // Open View/Editor // Select histogram // Change fill style // Change fill color // Move stat box // Change fill color // Move title // Change fill color using wheel color // Select Y axis // Change axis title // Select X axis // Change axis title // Select histogram // Go in binning // Change range // Move range // On the canvas menu set grid Y // On the canvas menu set grid X // On the canvas menu set log Y // Increase the range // Close View/Editor // Open the Tool Bar // Create a text "Comment" // Create an arrow // Change the arrow size // Close the Tool Bar // Save as PS file // Save as C file // Close c1 // On the canvas c2: // Open View/Editor // Select histogram // Select COL // Select Palette // Move Stats // Select Overflows // Select histogram // Select 3D // Select SURF1 // Rotate Surface // Go in binning // Change X range // Change Y range // Close View/Editor // Save as GIF file // Save as C file // Close c2 Int_t file_size(char *filename) { FileStat_t fs; gSystem->GetPathInfo(filename, fs); return (Int_t)fs.fSize; } void graph_edit_playback() { r = new TRecorder(); r->Replay("http://root.cern.ch/files/graphedit_playback.root"); // wait for the recorder to finish the replay while (r->GetState() == TRecorder::kReplaying) { gSystem->ProcessEvents(); gSystem->Sleep(1); } Int_t c1_ps_Ref = 11592 , c1_ps_Err = 600; Int_t c1_C_Ref = 4729 , c1_C_Err = 200; Int_t c2_gif_Ref = 21184 , c2_gif_Err = 500; Int_t c2_C_Ref = 35471 , c2_C_Err = 1500; Int_t c1_ps = file_size("c1.ps"); Int_t c1_C = file_size("c1.C"); Int_t c2_gif = file_size("c2.gif"); Int_t c2_C = file_size("c2.C"); cout << "**********************************************************************" <