NAME
TClass - ROOT's TClass introspection interface with SOOT extensions
SYNOPSIS
use SOOT ':all';
# Make a ROOT object:
my $hist = TH1D->new("name", "title", 100, 0., 1.);
my $class = $hist->Class(); # this is a TClass
# ... introspect here ...
DESCRIPTION
TClass
is the ROOT meta-class representing introspective information about a ROOT class. Its SOOT wrapper provides all the usual ROOT interfaces with some Perl-specific helper methods added for convenience.
This document only describes the added SOOT-specific methods. For the rest, please refer to the ROOT reference manual.
METHODS
soot_method_complete_name
Takes two parameters: A stub of the method name to search for, and a boolean indicating whether to match the exact method name (true) or it's start (false, default).
Returns a list of method names in the class represented by the current TClass object that start with the provided string (or that are exactly the same as the provided string if the second parameter is true).
Example:
my $hist = TH1D->new("name", "title", 100, 0., 1.);
my $class = $hist->Class(); # this is a TClass
my @possibilities = $class->soot_method_complete_name('Fi');
# @possibilities is now:
# qw(Fill FillN FindBin FindFixBin FindObject FitOptionsMake
# FillBuffer FillRandom FindFirstBinAbove FindLastBinAbove Fit FitPanel)
@possibilities = $class->soot_method_complete_name('Fill', 1);
# now: qw(Fill) since only that matches exactly.
soot_method_complete_proto_str
Takes two parameters: A stub of the method name to search for, and a boolean indicating whether to match the exact method name (true) or it's start (false, default).
Returns a list of strings that are the C++ prototypes of different possible completions of the provided method name. This works much the same as soot_method_complete_name
, except it returns the full method prototype instead of just the method name(s).
soot_method_complete
The most generic of the soot_method_complete*
methods, it also takes two parameters: the start of a method name and a flag indicating whether it's an exact method name match.
It returns an array reference of structures that describe the method prototype. This is best explained with an example.
my $class = TH1D->new->Class;
my @protos = $class->soot_method_complete('FillRandom', 1);
@protos = (
{
class => 'TH1',
method => 'FillRandom',
parameters => [
[ 'const char* fname' ],
[ 'Int_t', 'ntimes', 5000 ]
],
return_type => 'void'
},
{
class => 'TH1',
method => 'FillRandom',
parameters => [
[ 'TH1*', 'h' ],
[ 'Int_t', 'ntimes', 5000 ]
],
return_type => 'void'
}
)
NB: This example neatly shows how C++ parameter-type based method polymorphism can result in having multiple C++ methods covered by the same Perl level method (here: FillRandom
). SOOT will guess the parameter types and call the right method for you when you call FillRandom
on a TH1
.
For each matching method in the class, a hash reference is returned. Such a hash will contain the class name where the method was originally defined as the class
slot of the hash, the full name of the method that was matched as the method
slot, the name of the C++ return type as the return_type
slot, and finally, an array reference of method parameters as the parameters
slot.
Each parameter is itself described as an array reference containing two or three elements. The first is the C++ type of the parameter, the second is the name of the parameter, and the optional third is a default value of the parameter.
CAVEATS
The method completion works on a C++ level and considers only the ROOT methods, not additional SOOT, Perl-level methods. This means that for example, you can't auto-complete the soot_method_complete
method of a TClass
object itself.
This could be partially fixed by looking at the Perl stash and @ISA
for the respective class, but that's currently considered overkill.
SEE ALSO
SOOT is the main ROOT-wrapper module and has most of the user documentation.
AUTHOR
Steffen Mueller, <smueller@cpan.org>
COPYRIGHT AND LICENSE
Copyright (C) 2010, 2011 by Steffen Mueller
SOOT, the Perl-ROOT wrapper, is free software; you can redistribute it and/or modify it under the same terms as ROOT itself, that is, the GNU Lesser General Public License. A copy of the full license text is available from the distribution as the LICENSE file.