00001 void tvdemo() {
00002 printf("This demo show how to handle TTreeViewer sessions\n");
00003 printf("Compile class Event from test directory before running this\n");
00004 printf("- use arrow buttons from bottom to cycle records ...\n");
00005 printf("- make new expressions and drag them to X, Y, Z or Cut items ...\n");
00006 printf("- use the Draw button to check your current selection ...\n");
00007 printf("- click the record button once you are happy with this ...\n");
00008 printf("- open the TV context menu (right-click on the right panel)...\n");
00009 printf(" Use : RemoveLastRecord() - to remove last record :-)\n");
00010 printf(" SetRecordName() - to name current record\n");
00011 printf(" UpdateRecord() - if you want to change a record from the list\n");
00012 printf(" with your new X, Y, Z, Cut configuration.\n");
00013 printf(" Best luck !\n");
00014
00015 open_session();
00016 }
00017
00018 open_session(void *p = 0) {
00019
00020
00021
00022
00023 gSystem->Load("libTreeViewer");
00024 TTreeViewer *treeview = (TTreeViewer *) p;
00025 if (!treeview) treeview = new TTreeViewer();
00026 TTree *tv_tree = (TTree*)gROOT->FindObject("T");
00027 TFile *tv_file = (TFile*)gROOT->GetListOfFiles()->FindObject("Event.root");
00028 if (!tv_tree) {
00029 if (!tv_file) tv_file = new TFile("$ROOTSYS/test/Event.root");
00030 if (tv_file) tv_tree = (TTree*)tv_file->Get("T");
00031 if(!tv_tree) {
00032 printf("Tree %s not found", fTree->GetName());
00033 return;
00034 }
00035 }
00036
00037 treeview->SetTreeName("T");
00038 treeview->SetNexpressions(10);
00039
00040 TTVLVEntry *item;
00041
00042 item = treeview->ExpressionItem(0);
00043 item->SetExpression("fTemperature", "fTemperature");
00044
00045 item = treeview->ExpressionItem(1);
00046 item->SetExpression("", "-empty-");
00047
00048 item = treeview->ExpressionItem(2);
00049 item->SetExpression("", "-empty-");
00050
00051 item = treeview->ExpressionItem(3);
00052 item->SetExpression("", "-empty-");
00053
00054 item = treeview->ExpressionItem(4);
00055 item->SetExpression("", "Scan box");
00056
00057 item = treeview->ExpressionItem(5);
00058 item->SetExpression("sqrt(fTracks.fPx*fTracks.fPx+fTracks.fPy*fTracks.fPy)", "~Pt", kFALSE);
00059 item = treeview->ExpressionItem(6);
00060 item->SetExpression("fTracks.fPx>0", "~Cut1", kTRUE);
00061 item = treeview->ExpressionItem(7);
00062 item->SetExpression("", "-empty-", kFALSE);
00063 item = treeview->ExpressionItem(8);
00064 item->SetExpression("", "-empty-", kFALSE);
00065 item = treeview->ExpressionItem(9);
00066 item->SetExpression("", "-empty-", kFALSE);
00067 item = treeview->ExpressionItem(10);
00068 item->SetExpression("", "-empty-", kFALSE);
00069 item = treeview->ExpressionItem(11);
00070 item->SetExpression("", "-empty-", kFALSE);
00071 item = treeview->ExpressionItem(12);
00072 item->SetExpression("", "-empty-", kFALSE);
00073 item = treeview->ExpressionItem(13);
00074 item->SetExpression("", "-empty-", kFALSE);
00075 item = treeview->ExpressionItem(14);
00076 item->SetExpression("", "-empty-", kFALSE);
00077
00078 tv_session = new TTVSession(treeview);
00079 treeview->SetSession(tv_session);
00080
00081 tv_record = tv_session->AddRecord(kTRUE);
00082 tv_session->SetRecordName("Temperature");
00083 tv_record->fX = "fTemperature";
00084 tv_record->fY = "";
00085 tv_record->fZ = "";
00086 tv_record->fCut = "";
00087 tv_record->fXAlias = "fTemperature";
00088 tv_record->fYAlias = "-empty-";
00089 tv_record->fZAlias = "-empty-";
00090 tv_record->fCutAlias = "-empty-";
00091 tv_record->fOption = "lego1";
00092 tv_record->fScanRedirected = kFALSE;
00093 tv_record->fCutEnabled = kTRUE;
00094
00095 tv_record = tv_session->AddRecord(kTRUE);
00096 tv_session->SetRecordName("Py versus Px");
00097 tv_record->fX = "fTracks.fPx";
00098 tv_record->fY = "fTracks.fPy";
00099 tv_record->fZ = "";
00100 tv_record->fCut = "";
00101 tv_record->fXAlias = "fTracks.fPx";
00102 tv_record->fYAlias = "fTracks.fPy";
00103 tv_record->fZAlias = "-empty-";
00104 tv_record->fCutAlias = "-empty-";
00105 tv_record->fOption = "lego";
00106 tv_record->fScanRedirected = kFALSE;
00107 tv_record->fCutEnabled = kTRUE;
00108
00109 tv_record = tv_session->AddRecord(kTRUE);
00110 tv_session->SetRecordName("Transverse momentum");
00111 tv_record->fX = "sqrt(fTracks.fPx*fTracks.fPx+fTracks.fPy*fTracks.fPy)";
00112 tv_record->fY = "";
00113 tv_record->fZ = "";
00114 tv_record->fCut = "fTracks.fPx>0";
00115 tv_record->fXAlias = "~Pt";
00116 tv_record->fYAlias = "-empty-";
00117 tv_record->fZAlias = "-empty-";
00118 tv_record->fCutAlias = "~Cut1";
00119 tv_record->fOption = "";
00120 tv_record->fScanRedirected = kFALSE;
00121 tv_record->fCutEnabled = kTRUE;
00122
00123 tv_record = tv_session->AddRecord(kTRUE);
00124 tv_session->SetRecordName("Surface plot of Py vs. Px");
00125 tv_record->fX = "fTracks.fPx";
00126 tv_record->fY = "fTracks.fPy";
00127 tv_record->fZ = "";
00128 tv_record->fCut = "";
00129 tv_record->fXAlias = "fTracks.fPx";
00130 tv_record->fYAlias = "fTracks.fPy";
00131 tv_record->fZAlias = "-empty-";
00132 tv_record->fCutAlias = "-empty-";
00133 tv_record->fOption = "SURF";
00134 tv_record->fScanRedirected = kFALSE;
00135 tv_record->fCutEnabled = kTRUE;
00136
00137 tv_session->Show(tv_session->First());
00138 }