In a compiled Root program, you can call gROOT->Macro
to execute instructions in the macro without recompiling
your program. This is a very convenient way to replace
the "conventional approach" with data cards.
In this macro, you will typically calls methods of a compiled
class to set some parameters.
A good example is given in the ATLFast application
(see http://root.cern.ch/root/Atlfast.html).
The program is started by executing for example the macro umain.C
below. This macro, in turn, executes another macro user.C
where some ATLFast parameters are set.
Rene Brun
//----macro umain.C
// example of main program/macro to run ATLFast
void umain(Int_t prodmode=1, Int_t nevents=1000)
{
gROOT->Reset();
gROOT->Macro("$ATLFAST/loadlibs");
// Open the root output file
TFile file("atlfast.root","recreate","ATLFast root file",2);
ATLFast atlfast("atlfast"); // create main object to run atlfast
atlfast.MCMaker()->SetProductionMode(prodmode);
gROOT->Macro("user.C"); // execute user macro to change some
parameters
atlfast.Init(); // Initialise event (maker histograms,etc)
atlfast.MakeTree(); // Create the Root tree
TPythia *pythia = (TPythia *)gATLFast->MCMaker()->Generator();
pythia->PyStat(2);
atlfast.PrintInfo();
for (Int_t i=0; i<nevents; i++) {
if (i%20 == 0) printf("In loop:%d\n",i);
atlfast.Make(i); // Generate and Reconstruct event
atlfast.FillTree();
if (i < 1) pythia->LuList(1);
atlfast.Clear(); // Clear reconstructed event lists
}
atlfast.Finish();
// save objects in Root file
// atlfast.Tree()->Print();
atlfast.Write(); //save main atlfast object (and run parameters)
// file.Write(); // save histograms and tree
}
//---macro user.C
{
// change ATLfast default parameters
gATLFast->SetSmearing(1);
gATLFast->SetTrackFinding(1);
gATLFast->ClusterMaker()->SetGranBarrelEta(0.1);
gATLFast->ClusterMaker()->Save(0);
gATLFast->PhotonMaker()->SetMinPT(5.);
gATLFast->TriggerMaker()->SetMuoEtaCoverage(2.5);
gATLFast->MCMaker()->Save(2); //give 2 to save all particles
gATLFast->TrackMaker()->Save(1); // give 1 to save tracks
}