Hello Valio, Similar capability is implemented in pure Cint. But I suspect this does not work in ROOT. Rene and Fons, I think this capability has to be implemented in ROOT command line as command line is implemented independently between CINT and ROOT. In case of Cint, command goes like below. $ cint cint> . # change command line to ROOT mode '.' cint> .n comdump # Start dumping command line cint> printf("abc\N") # type in whatever the commands cint> .L iostream cint> cout << "def" << endl; cint> .U iostream cint> .z # stop dumping command line cint> .q # Quit cint $ cint cint> .< comdump # running dumpped commands Thank you Masaharu Goto >---------- Forwarded message ---------- >Date: Wed, 20 Feb 2002 17:26:00 -0500 >From: valio@pacific.mps.ohio-state.edu >To: roottalk@pcroot.cern.ch >Subject: [ROOT] CINT scripts > >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