ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbb/python/TMVAGui.C
Revision: 1.2
Committed: Wed Jan 16 16:22:43 2013 UTC (12 years, 3 months ago) by peller
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
State: FILE REMOVED
Log Message:
reorganized the whole repository. Macros im myutils, config files in subdirectories. Config file split in parts. Path config file restructured. Moved all path options to the path config. Changed the code accordingly.

File Contents

# User Rev Content
1 peller 1.1 #include <iostream>
2     #include <vector>
3    
4     #include "TList.h"
5     #include "TROOT.h"
6     #include "TKey.h"
7     #include "TString.h"
8     #include "TControlBar.h"
9     #include "TObjString.h"
10    
11     #include "tmvaglob.C"
12    
13     // some global lists
14     static TList* TMVAGui_keyContent;
15     static std::vector<TString> TMVAGui_inactiveButtons;
16    
17     TList* GetKeyList( const TString& pattern )
18     {
19     TList* list = new TList();
20    
21     TIter next( TMVAGui_keyContent );
22     TKey* key(0);
23     while ((key = (TKey*)next())) {
24     if (TString(key->GetName()).Contains( pattern )) { list->Add( new TObjString( key->GetName() ) ); }
25     }
26     return list;
27     }
28    
29     // utility function
30     void ActionButton( TControlBar* cbar,
31     const TString& title, const TString& macro, const TString& comment,
32     const TString& buttonType, TString requiredKey = "")
33     {
34     cbar->AddButton( title, macro, comment, buttonType );
35    
36     // search
37     if (requiredKey != "") {
38     Bool_t found = kFALSE;
39     TIter next( TMVAGui_keyContent );
40     TKey* key(0);
41     while ((key = (TKey*)next())) {
42     if (TString(key->GetName()).Contains( requiredKey )) { found = kTRUE; break; }
43     }
44     if (!found) TMVAGui_inactiveButtons.push_back( title );
45     }
46     }
47    
48     // main GUI
49     void TMVAGui( const char* fName = "TMVA.root" )
50     {
51     // Use this script in order to run the various individual macros
52     // that plot the output of TMVA (e.g. running TMVAClassification.C),
53     // stored in the file "TMVA.root"
54    
55     TString curMacroPath(gROOT->GetMacroPath());
56     // uncomment next line for macros submitted to next root version
57     gROOT->SetMacroPath(curMacroPath+":./:$ROOTSYS/tmva/test/:");
58    
59     // for the sourceforge version, including $ROOTSYS/tmva/test in the
60     // macro path is a mistake, especially if "./" was not part of path
61     // add ../macros to the path (comment out next line for the ROOT version of TMVA)
62     // gROOT->SetMacroPath(curMacroPath+":../macros:");
63    
64     TString curIncludePath=gSystem->GetIncludePath();
65     TString newIncludePath=TString("-I../ ")+curIncludePath;
66     gSystem->SetIncludePath(newIncludePath);
67    
68     cout << "--- Launch TMVA GUI to view input file: " << fName << endl;
69    
70     // init
71     TMVAGui_inactiveButtons.clear();
72    
73     // check if file exist
74     TFile* file = TFile::Open( fName );
75     if (!file) {
76     cout << "==> Abort TMVAGui, please verify filename" << endl;
77     return;
78     }
79     // find all references
80     TMVAGui_keyContent = (TList*)file->GetListOfKeys()->Clone();
81    
82     // close file
83     file->Close();
84    
85     TString defaultRequiredClassifier = "";
86    
87     // gROOT->Reset();
88     // gStyle->SetScreenFactor(2); // if you have a large screen, select 1,2 or 1.4
89    
90     // create the control bar
91     TControlBar* cbar = new TControlBar( "vertical", "TMVA Plotting Macros for Classification", 0, 0 );
92    
93     const TString buttonType( "button" );
94    
95     // configure buttons
96     Int_t ic = 1;
97    
98     // find all input variables types
99     TList* keylist = GetKeyList( "InputVariables" );
100     TListIter it( keylist );
101     TObjString* str = 0;
102     char ch = 'a';
103     while ((str = (TObjString*)it())) {
104     TString tmp = str->GetString();
105     TString title = Form( "Input variables '%s'-transformed (training sample)",
106     tmp.ReplaceAll("InputVariables_","").Data() );
107     if (tmp.Contains( "Id" )) title = "Input variables (training sample)";
108     ActionButton( cbar,
109     Form( "(%i%c) %s", ic, ch++, title.Data() ),
110     Form( ".x variables.C(\"%s\",\"%s\",\"%s\")", fName, str->GetString().Data(), title.Data() ),
111     Form( "Plots all '%s'-transformed input variables (macro variables.C(...))", str->GetString().Data() ),
112     buttonType, str->GetString() );
113     }
114     ic++;
115    
116     // correlation scatter plots
117     it.Reset(); ch = 'a';
118     while ((str = (TObjString*)it())) {
119     TString tmp = str->GetString();
120     TString title = Form( "Input variable correlations '%s'-transformed (scatter profiles)",
121     tmp.ReplaceAll("InputVariables_","").Data() );
122     if (tmp.Contains( "Id" )) title = "Input variable correlations (scatter profiles)";
123     ActionButton( cbar,
124     Form( "(%i%c) %s", ic, ch++, title.Data() ),
125     Form( ".x CorrGui.C(\"%s\",\"%s\",\"%s\")", fName, str->GetString().Data(), title.Data() ),
126     Form( "Plots all correlation profiles between '%s'-transformed input variables (macro CorrGui.C(...))",
127     str->GetString().Data() ),
128     buttonType, str->GetString() );
129     }
130    
131     TString title;
132     // coefficients
133     title =Form( "(%i) Input Variable Linear Correlation Coefficients", ++ic );
134     ActionButton( cbar,
135     title,
136     Form( ".x correlations.C(\"%s\")", fName ),
137     "Plots signal and background correlation summaries for all input variables (macro correlations.C)",
138     buttonType );
139    
140     title =Form( "(%ia) Classifier Output Distributions (test sample)", ++ic );
141     ActionButton( cbar,
142     title,
143     Form( ".x mvas.C(\"%s\",0)", fName ),
144     "Plots the output of each classifier for the test data (macro mvas.C(...,0))",
145     buttonType, defaultRequiredClassifier );
146    
147     title =Form( "(%ib) Classifier Output Distributions (test and training samples superimposed)", ic );
148     ActionButton( cbar,
149     title,
150     Form( ".x mvas.C(\"%s\",3)", fName ),
151     "Plots the output of each classifier for the test (histograms) and training (dots) data (macro mvas.C(...,3))",
152     buttonType, defaultRequiredClassifier );
153    
154     title = Form( "(%ic) Classifier Probability Distributions (test sample)", ic );
155     ActionButton( cbar,
156     title,
157     Form( ".x mvas.C(\"%s\",1)", fName ),
158     "Plots the probability of each classifier for the test data (macro mvas.C(...,1))",
159     buttonType, defaultRequiredClassifier );
160    
161     title =Form( "(%id) Classifier Rarity Distributions (test sample)", ic );
162     ActionButton( cbar,
163     title,
164     Form( ".x mvas.C(\"%s\",2)", fName ),
165     "Plots the Rarity of each classifier for the test data (macro mvas.C(...,2)) - background distribution should be uniform",
166     buttonType, defaultRequiredClassifier );
167    
168     title =Form( "(%ia) Classifier Cut Efficiencies", ++ic );
169     ActionButton( cbar,
170     title,
171     Form( ".x mvaeffs.C+(\"%s\")", fName ),
172     "Plots signal and background efficiencies versus cut on classifier output (macro mvaeffs.C)",
173     buttonType, defaultRequiredClassifier );
174    
175     title = Form( "(%ib) Classifier Background Rejection vs Signal Efficiency (ROC curve)", ic );
176     ActionButton( cbar,
177     title,
178     Form( ".x efficiencies.C(\"%s\")", fName ),
179     "Plots background rejection vs signal efficiencies (macro efficiencies.C) [\"ROC\" stands for \"Receiver Operation Characteristics\"]",
180     buttonType, defaultRequiredClassifier );
181    
182     title = Form( "(%i) Parallel Coordinates (requires ROOT-version >= 5.17)", ++ic );
183     ActionButton( cbar,
184     title,
185     Form( ".x paracoor.C(\"%s\")", fName ),
186     "Plots parallel coordinates for classifiers and input variables (macro paracoor.C, requires ROOT >= 5.17)",
187     buttonType, defaultRequiredClassifier );
188    
189     // parallel coordinates only exist since ROOT 5.17
190     #if ROOT_VERSION_CODE < ROOT_VERSION(5,17,0)
191     TMVAGui_inactiveButtons.push_back( title );
192     #endif
193    
194     title =Form( "(%i) PDFs of Classifiers (requires \"CreateMVAPdfs\" option set)", ++ic );
195     ActionButton( cbar,
196     title,
197     Form( ".x probas.C(\"%s\")", fName ),
198     "Plots the PDFs of the classifier output distributions for signal and background - if requested (macro probas.C)",
199     buttonType, defaultRequiredClassifier );
200    
201     title = Form( "(%i) Likelihood Reference Distributiuons", ++ic);
202     ActionButton( cbar,
203     title,
204     Form( ".x likelihoodrefs.C(\"%s\")", fName ),
205     "Plots to verify the likelihood reference distributions (macro likelihoodrefs.C)",
206     buttonType, "Likelihood" );
207    
208     title = Form( "(%ia) Network Architecture (MLP)", ++ic );
209     TString call = Form( ".x network.C+g(\"%s\")", fName );
210     ActionButton( cbar,
211     title,
212     call,
213     "Plots the MLP weights (macro network.C)",
214     buttonType, "MLP" );
215    
216     title = Form( "(%ib) Network Convergence Test (MLP)", ic );
217     ActionButton( cbar,
218     title,
219     Form( ".x annconvergencetest.C(\"%s\")", fName ),
220     "Plots error estimator versus training epoch for training and test samples (macro annconvergencetest.C)",
221     buttonType, "MLP" );
222    
223     title = Form( "(%i) Decision Trees (BDT)", ++ic );
224     ActionButton( cbar,
225     title,
226     Form( ".x BDT.C+(\"%s\")", fName ),
227     "Plots the Decision Trees trained by BDT algorithms (macro BDT.C(itree,...))",
228     buttonType, "BDT" );
229    
230     title = Form( "(%i) Decision Tree Control Plots (BDT)", ++ic );
231     ActionButton( cbar,
232     title,
233     Form( ".x BDTControlPlots.C(\"%s\")", fName ),
234     "Plots to monitor boosting and pruning of decision trees (macro BDTControlPlots.C)",
235     buttonType, "BDT" );
236     // ActionButton( cbar,
237     // Form( "(%i) Rule Ensemble Importance Plots (RuleFit)", ++ic ),
238     // Form( ".x rulevis.C(\"%s\",0)", fName ),
239     // "Plots all input variables with rule ensemble weights, including linear terms (macro rulevis.C)",
240     // buttonType, "RuleFit" );
241    
242     title = Form( "(%i) Plot Foams (PDEFoam)", ++ic );
243     ActionButton( cbar,
244     title,
245     ".x PlotFoams.C(\"weights/TMVAClassification_PDEFoam.weights_foams.root\")",
246     "Plot Foams (macro PlotFoams.C)",
247     buttonType, "PDEFoam" );
248    
249     title = Form( "(%i) General Boost Control Plots", ++ic );
250     ActionButton( cbar,
251     title,
252     Form( ".x BoostControlPlots.C(\"%s\")", fName ),
253     "Plots to monitor boosting of general classifiers (macro BoostControlPlots.C)",
254     buttonType, "Boost" );
255    
256     cbar->AddSeparator();
257    
258     cbar->AddButton( Form( "(%i) Quit", ++ic ), ".q", "Quit", buttonType );
259    
260     // set the style
261     cbar->SetTextColor("black");
262    
263     // there seems to be a bug in ROOT: font jumps back to default after pressing on >2 different buttons
264     // cbar->SetFont("-adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-iso8859-1");
265    
266     // draw
267     cbar->Show();
268    
269     // indicate inactive buttons
270     for (UInt_t i=0; i<TMVAGui_inactiveButtons.size(); i++) cbar->SetButtonState(TMVAGui_inactiveButtons[i], 3 );
271     if (TMVAGui_inactiveButtons.size() > 0) {
272     cout << "=== Note: inactive buttons indicate classifiers that were not trained, ===" << endl;
273     cout << "=== or functionalities that were not invoked during the training ===" << endl;
274     }
275    
276     gROOT->SaveContext();
277     }