Re: ROOT without running root...

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Feb 23 2000 - 18:28:51 MET


Hi Mattias,
You must initialize the ROOT system before using the Root classes.
You must also specify the include files corresponding to the classes
used
in your program (TVector3, TlorentzVector, TObjArray, TROOT, etc).
I have added the line to initialize Root in your code below.
See examples of Root main programs in $ROOTSYS/test/hsimple.cxx, etc

Rene Brun

Mattias Davidsson wrote:
> 
> Hi!
> 
> I'm trying to use the classes of ROOT and the jetfinder package together
> with some events producd
> by pythia as explained by the short program below. When I run the
> executable with the
> 
> //std::cout << "class: " << output->ClassName() << std::endl;
> 
> line (at the bottom) uncommented I get the following:
> 
> Fatal in <TClass::TClass>: ROOT system not initialized
> aborting
> Abort (core dumped)
> 
> Why is this? Ie why does it work with the line commented using the ROOT
> classes etc?
> 
> PS. I'm quite new to ROOT and c++ ....
> 
> example program:
> ////////////////////////
> 
> #include <stdlib.h>
> #include <iostream>
> #include <cmath>
> #include <fstream>
> #include <list>
> #include <string>
> #include <vector>
> #include "Pythia.h"
> #include "LorentzVector.h"
> #include "JetFindDict.h"
> 
//------------new code----------------
  #include #TROOT.h"
  #include "TVector3.h"
  #include "TObjArray.h"
  ...
  TROOT demo("demo","my first Root program");
//-------------------------------------
> //
> //  This program produces DIS events from pythia, adds the stable
> particles
> //  to a TObjArray (veclist). The aim is then to feed these 4-vectors
> //  to the jetfinder package. See bottom for troubles.
> //
> 
> int main() {
> 
>   const char* frame="CMS";
>   int iframe=3;
>   const char* beam="gamma/e+";
>   int ibeam=8;
>   const char* target="p+";
>   int itarget=2;
>   double E=297.2E0;
> 
>   double y_cut=0.E0;
> 
>   //  Choose jet finding scheme. Jade with y_cut
>   pydat1_.mstu[46-1]=4;      // MSTU(46)=4
>   pydat1_.paru[45-1]=y_cut; // PARU(45)=y_cut
> 
>   //  Disable preclustering and don't ignore neutrinos
>   pydat1_.paru[43-1]=0.E0;  // PARU(43)=0
>   pydat1_.mstu[41-1]=1;     // MSTU(41)=1
> 
>   // Setup ROOT jet finder
>   JadeJetFinder  *jetf = new JadeJetFinder(0.004);
> 
>   // Select DIS process in PYTHIA.
>   pysubs_.msel=1;       // MSEL=0
>   pysubs_.msub[1-1]=1;  // MSUB(1)=1
> 
>   //Initialize Pythia
>   pyinit_(frame,beam,target,&E,iframe,ibeam,itarget);
> 
>   // Declare a 3 vector a'la ROOT
>   TVector3* vec3  = new TVector3();
>   if(vec3) delete vec3;
> 
>   //Declare the 4 vector a'la ROOT
>   TLorentzVector* vec4 = new TLorentzVector();
>   if(vec4) delete vec4;
> 
>   // Declare 4vector list a'la ROOT
>   TObjArray* veclist = new TObjArray();
>   if(veclist) veclist->Delete();
> 
>   // Read out 1'st 4 vector
>   TObject* output = new TObject();
> 
>   // Temporary 3 vector a'la ROOT
>   Float_t Pvec3[3];
> 
>   // Main event loop
>   int events=10;
>   for (long iev=0;iev<events;iev++){
>     pyevnt_();
>     long nlist=2;
>     if (iev < 3) pylist_(&nlist);
> 
>     //    jade jet1;
>     //   jet1.set_y(y_cut);
>     //    jet1.set_s(pow(92.1,2));
>     int N=pyjets_.n;
>     for(int i=9; i<=N; i++) {
>       if (pyjets_.k[1-1][i-1]==1 && pyjets_.k[2-1][i-1]!=22) {  //
> Stable particle (not photon)
>  //TLorentzVector vec(pyjets_.p[1-1][i-1],pyjets_.p[2-1][i-1],
>  //     pyjets_.p[3-1][i-1],pyjets_.p[4-1][i-1]);
>  Pvec3[0] = pyjets_.p[1-1][i-1];
>  Pvec3[0] = pyjets_.p[2-1][i-1];
>  Pvec3[0] = pyjets_.p[3-1][i-1];
>  Float_t  E_part = pyjets_.p[4-1][i-1];
>  vec3 = new TVector3(Pvec3);
>  vec4 = new TLorentzVector(*vec3,E_part);
>  veclist->Add(vec4);
>  delete vec3;
>        }
>     }
>     // Perform Jet finding
>     // jetf->setEvent(veclist);
>     // jetf->setYCut(0.010);
>     //   jetf->doFindJets();
> 
>     // std::cout << "Nof jets: " << jetf->njets() << std::endl;
>      int Njet=0;
>     pyclus_(&Njet);
>     std::cout << "Pythia: " << Njet << std::endl;
>   }
>   output = veclist->First();
>   // if the line below (the std::cout line) is uncommented, running the
> program is sais that
>   // I have to Initialize ROOT... Why? Ie. what is so special about the
> line
>   // below? All the stuff above worked. (not if you uncomment the
> jetf->lines
>   // then the same problem appears...
>   std::cout << "class: " << output->ClassName() << std::endl;
>   delete veclist;
> 
> --
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Mattias Davidsson,   http://www.quark.lu.se/~mattias
>  +46 (0)46 222 76 83
> Department of elementary particle physics
> Box 118 SE-221 00
> Lund, Sweden
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:19 MET