Hi people !
Does somebody know a better way to :
1. Save all your commands (C++ statements and commands starting with a
dot) from a root session in a text file.
2. Execute that file in your next root session.
Below is what I've found so far on the subject. Please let me know if
you have a BETTER way to do it.
1. I couldn't find any Cint command to save the current session commands
in a text file so I just copied them
from the root history file .root_hist to a file called
commands.cint :
.L topElectron.C
.L topHeader.C
.L topJet.C
.L topMet.C
.L topHepg.C
.L topOfflTrack.C
.L topPrimaryVertex.C
.L bbana.cc
.trace bbana
bbana* myana = new bbana;
myana.SetOutputHistFile("ttbar.hbk");
myana.BeginJob();
myana.setInputFile("TopNtuple_ElectronSample.root");
As you can see these are C++ commands MIXED WITH Cint
commands (that start with . ).
2. I tried 3 ways to execute that "Cint script" :
A) I typed in root:
x. commands.cint
Of course that gave a lot of error messages because
root expects a C script not a bunch of commands.
The command
.L commands.cint
didn't work as well.
B) I tried to use the shell's input redirection (tcsh) to
feed my text file to root :
root.exe < commands.cint
or just
root < commands.cint
In the both cases it worked brilliantly, the
commands were executed BUT root EXITS after that.
In some cases that is desirable but in my case
actually I was doing debugging and I wanted to stay in root
to check some variables after executing of the
script.
DO YOU KNOW A WAY TO STOP ROOT FROM EXITING IN THAT
CASE ?
( no I didn't give the -q option to root :) )
C) I changed the text file to a C macro by using
ProcessLine(.....) to convert the "starting-with-dot"
commands to C++ statements:
file commands.C :
{
gROOT->ProcessLine(".L topElectron.C");
gROOT->ProcessLine(".L topHeader.C");
gROOT->ProcessLine(".L topJet.C");
gROOT->ProcessLine(".L topMet.C");
gROOT->ProcessLine(".L topHepg.C");
gROOT->ProcessLine(".L topOfflTrack.C");
gROOT->ProcessLine(".L
topPrimaryVertex.C");
gROOT->ProcessLine(".L bbana.cc");
gROOT->ProcessLine(".trace bbana");
bbana* myana = new bbana;
myana.SetOutputHistFile("ttbar.hbk");
myana.BeginJob();
myana.setInputFile("TopNtuple_ElectronSample.root");
}
Of course when I typed in root :
.x commands.C
it worked but I don't like the idea that the root
interpreter doesn't have a more direct way to
execute its own commands :)
Anyway, if you know a better solution, especially of part 2B, let me
know.
Greetings, Valio
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:42 MET