void open_session(void *p = 0) { //=========Macro generated by ROOT version3.00/00 //=========for tree "T" (Wed Feb 21 14:16:23 2001) //===This macro can be opened from a TreeViewer session after loading //===the corresponding tree TTreeViewer *treeview = (TTreeViewer *) p; if (!treeview) treeview = new TTreeViewer(); TTree *tv_tree = (TTree*)gROOT->FindObject("T"); TFile *tv_file = (TFile*)gROOT->GetListOfFiles()->FindObject("Event.root"); if (!tv_tree) { if (!tv_file) tv_file = new TFile("$ROOTSYS/test/Event.root"); if (tv_file) tv_tree = (TTree*)tv_file->Get("T"); if(!tv_tree) { printf("Tree not found\n"); return; } } treeview->SetTreeName("T"); treeview->SetNexpressions(10); // Set expressions on axis and cut TTVLVEntry *item; // X expression item = treeview->ExpressionItem(0); item->SetExpression("fTemperature", "fTemperature"); // Y expression item = treeview->ExpressionItem(1); item->SetExpression("", "-empty-"); // Z expression item = treeview->ExpressionItem(2); item->SetExpression("", "-empty-"); // Cut expression item = treeview->ExpressionItem(3); item->SetExpression("", "-empty-"); // Scan list item = treeview->ExpressionItem(4); item->SetExpression("", "Scan box"); // User defined expressions item = treeview->ExpressionItem(5); item->SetExpression("sqrt(fTracks.fPx*fTracks.fPx+fTracks.fPy*fTracks.fPy)", "~Pt", kFALSE); item = treeview->ExpressionItem(6); item->SetExpression("fTracks.fPx>0", "~Cut1", kTRUE); item = treeview->ExpressionItem(7); item->SetExpression("", "-empty-", kFALSE); item = treeview->ExpressionItem(8); item->SetExpression("", "-empty-", kFALSE); item = treeview->ExpressionItem(9); item->SetExpression("", "-empty-", kFALSE); item = treeview->ExpressionItem(10); item->SetExpression("", "-empty-", kFALSE); item = treeview->ExpressionItem(11); item->SetExpression("", "-empty-", kFALSE); item = treeview->ExpressionItem(12); item->SetExpression("", "-empty-", kFALSE); item = treeview->ExpressionItem(13); item->SetExpression("", "-empty-", kFALSE); item = treeview->ExpressionItem(14); item->SetExpression("", "-empty-", kFALSE); //--- session object auto tv_session = new TTVSession(treeview); treeview->SetSession(tv_session); //--- tree viewer record auto tv_record = tv_session->AddRecord(kTRUE); tv_session->SetRecordName("Temperature"); tv_record->fX = "fTemperature"; tv_record->fY = ""; tv_record->fZ = ""; tv_record->fCut = ""; tv_record->fXAlias = "fTemperature"; tv_record->fYAlias = "-empty-"; tv_record->fZAlias = "-empty-"; tv_record->fCutAlias = "-empty-"; tv_record->fOption = "lego1"; tv_record->fScanRedirected = kFALSE; tv_record->fCutEnabled = kTRUE; //--- tree viewer record tv_record = tv_session->AddRecord(kTRUE); tv_session->SetRecordName("Py versus Px"); tv_record->fX = "fTracks.fPx"; tv_record->fY = "fTracks.fPy"; tv_record->fZ = ""; tv_record->fCut = ""; tv_record->fXAlias = "fTracks.fPx"; tv_record->fYAlias = "fTracks.fPy"; tv_record->fZAlias = "-empty-"; tv_record->fCutAlias = "-empty-"; tv_record->fOption = "lego"; tv_record->fScanRedirected = kFALSE; tv_record->fCutEnabled = kTRUE; //--- tree viewer record tv_record = tv_session->AddRecord(kTRUE); tv_session->SetRecordName("Transverse momentum"); tv_record->fX = "sqrt(fTracks.fPx*fTracks.fPx+fTracks.fPy*fTracks.fPy)"; tv_record->fY = ""; tv_record->fZ = ""; tv_record->fCut = "fTracks.fPx>0"; tv_record->fXAlias = "~Pt"; tv_record->fYAlias = "-empty-"; tv_record->fZAlias = "-empty-"; tv_record->fCutAlias = "~Cut1"; tv_record->fOption = ""; tv_record->fScanRedirected = kFALSE; tv_record->fCutEnabled = kTRUE; //--- tree viewer record tv_record = tv_session->AddRecord(kTRUE); tv_session->SetRecordName("Surface plot of Py vs. Px"); tv_record->fX = "fTracks.fPx"; tv_record->fY = "fTracks.fPy"; tv_record->fZ = ""; tv_record->fCut = ""; tv_record->fXAlias = "fTracks.fPx"; tv_record->fYAlias = "fTracks.fPy"; tv_record->fZAlias = "-empty-"; tv_record->fCutAlias = "-empty-"; tv_record->fOption = "SURF"; tv_record->fScanRedirected = kFALSE; tv_record->fCutEnabled = kTRUE; //--- Show first record tv_session->Show(tv_session->First()); } void tvdemo() { printf("This demo show how to handle TTreeViewer sessions\n"); printf("Compile class Event from test directory before running this\n"); printf("- use arrow buttons from bottom to cycle records ...\n"); printf("- make new expressions and drag them to X, Y, Z or Cut items ...\n"); printf("- use the Draw button to check your current selection ...\n"); printf("- click the record button once you are happy with this ...\n"); printf("- open the TV context menu (right-click on the right panel)...\n"); printf(" Use : RemoveLastRecord() - to remove last record :-)\n"); printf(" SetRecordName() - to name current record\n"); printf(" UpdateRecord() - if you want to change a record from the list\n"); printf(" with your new X, Y, Z, Cut configuration.\n"); printf(" Best luck !\n"); open_session(); }