Fork me on GitHub

Frequently Asked Questions

Miscellaneous

(Q) How can I use the mother/daughter particles in the GEN branch?

(A) Here is a sample code

This code prints the kinematics of each central tau in the event, as well as the list of all its daughter particles.

 {
 
   TIter itGen((TCollection*)GEN);
   TRootGenParticle *part;

   // creates the array of particles
   TSimpleArray array;
   itGen.Reset();
   while( (part = (TRootGenParticle*) itGen.Next()) )
     {
       array.Add(part);
     }

   itGen.Reset();
   while((part = (TRootGenParticle*) itGen.Next()))
     {
        // for tau leptons which are inside tracker:
        if(abs(part->PID)==15 && 
           fabs(part->Eta)<2.5 )
          {
             Int_t Qfille  = part->D1; // index of first daughter
             Int_t Qfille2 = part->D2; // index of second daughter

             // if the index of first daughter is valid:
             if(Qfille < array.GetEntries() && 
                Qfille > 0)
               {
                 // prints the list of daughter particles coming from this tau lepton
                 cout << "it is a tau lepton(" << part->PID << ") with these daughters : ";
                 for(int i=Qfille; i<=Qfille2; i++)  // beware! it is less-or-equal !
                   {
                     cout << array[i]->PID << ", ";
                   }

                 // prints the kinematics of the tau-lepton
                 cout << "\t eta= " << part->Eta 
                      << ", phi= "  << part->Phi 
                      << ", E= "    << part->E 
                      << " pt= "    << part->PT 
                      << endl;
                }
          }
      }

To try this sample code, one can copy-and-paste it in line 160 of the file Examples/src/Analysis_Ex.cc (Q) How can I delete information from a root file ?

(A) Here is a sample code for deleting the GEN tree

If you want to drop some information from the root files in order to make them lighter, here is the receipe It is quite easy. First open your root file in write mode, then delete the object, save the file and then close the file.

root [5]
TFile * myfile = new TFile("test.root","UPDATE");
.ls
myfile->Delete("GEN;1");
.ls
myfile->Save();
myfile->Close();
// opens the file in write-mode
// shows its contents
// deletes tree from memory
// deleted tree has disappeared
// writes changes on disk
// closes the file

(Q) "Undefined symbol" error at run time

(A) Some library specific to your ROOT installation should be added

On non-default installations of ROOT, such errors could happen. In particular if the _hepevt_ symbol is not defined, this reflects the use of libEGPythia6 in your ROOT installation. For instance (as an illustration, this error occured on a Mac OS X)

        me@mylaptop:~$ ./Delphes 
        dyld: Symbol not found: _hepevt_
        Referenced from: /usr/local/root/lib/libEG.dylib
        Expected in: dynamic lookup

In order to solve this problem, just link the corresponding library (in this particular case, libEGPythia6 contains the definition of the _hepevt_ symbol) in the compilation command of Delphes. For this, edit the genMakefile.tcl file by adding -lEGPythia6 at the end of the LIBS line (it should be the line number 221):

        LIBS = $(ROOTLIBS) -lEG $(SYSLIBS) -lEGPythia6

Then, you should clean and recompile Delphes, and it will run smoothly:

        me@mylaptop:~$ make clean
        me@mylaptop:~$ make
        me@mylaptop:~$ ./Delphes

In addition, in order to find in which library a given variable is defined, it is worth knowing the command nm which lists the symbols defined in a library. For instance,

        me@mylaptop:~$ nm -a libEGPythia6.so | grep _hepevt_
        003a8a70 S _hepevt_
        me@mylaptop:~$ nm -a libEG.so | grep _hepevt_
                 U _hepevt_ 

Here the symbol _hepevt_ is defined in libEGPythia6 (as mentioned by the S character) but not in libEG.so (as meant by the U character). For more information, refer to the manpage of nm.

(Q) I have got a strange distribution for the Phi of the jets

(A) The default binning from ROOT used for plotting is not adequate

When the bin size is not correct when displaying a variable, it might be that you obtain distributions with periodic pikes, like here. In particular, for the azimuthal angle Phi, you might pay attention to have, say, 5-degree wide bins:

	root[0] TH1F * phi = new TH1F("phi","",80,-200,200);
	root[1] Analysis->Draw("(Jet.Phi)/acos(-1)*180. >> phi",
                                    "Jet.Eta<1.5 && Jet.Eta>-1.5");
	root[2] phi->GetXaxis()->SetTitle("Jet.Phi [degree]");

This gives a plot with the expected distribution like here or here.

Delphes options:Convertors_Only LHCO_Only Trigger_Only

(Q) Delphes complains that data/DataCardDet.dat is not found.

(A) The default datacard names have been changed.

In recent versions of the code (>1.4beta), the default names have been changed to DetectorCard.dat. Similarly, trigger cards are now called TriggerCard.dat

(Q) May I run the convertor stage independently before running Delphes?

(A) Yes, you can convert your generator-level input files

Just by running the 'Convertors_Only' executable:

        me@mylaptop:~$ ./Convertors_Only
        Usage: ./Convertors_Only input_file output_file
        input_list - list of files in Ntpl, StdHep of LHEF format,
        output_file - output file.
        me@mylaptop:~$ ./Convertors_Only TEST.list converted.root

(Q-options2) Can I easily convert my ROOT output to LHCO?

I did not create a LHCO output file when I ran Delphes (FLAG_lhco=0). Can I do this on my ROOT output file? (A) The LHCO output file can be easily created out-of your Delphes ROOT output file.

Just by running the 'LHCO_Only' executable:

        me@mylaptop:~$ ./LHCO_Only
        Usage: ./LHCO_Only input_file [runlog_file]
        input_file - file in Delphes root format,
        [runlog_file] - the corresponding log file (optional)
        me@mylaptop:~$ ./LHCO_Only test.root

(Q-options1) Can I easily reprocess the trigger stage?

I did not run the triggers when I ran Delphes (FLAG_trigger=0). Can I reprocess this on my output file? (A) There is no problem to re-run the trigger on a Delphes output-file.

Just run the 'Trigger_Only' executable:

        me@mylaptop:~$ ./Trigger_Only
        Usage: ./Trigger_Only input_file output_file [detector_card] [trigger_card]
        input_file - file in Delphe root format,
        trigger_card - Datacard containing the trigger algorithms (optional)
        me@mylaptop:~$ ./Trigger_Only test_without_trigger.root test_with_trigger.root \ 
			data/mydetector.dat data/mytrigger.dat

FROG related questions

(Q-frog5) I do not remember how to run FROG

(A) Just run the "frog" executable in Utilities/FROG

	me@mylaptop:~$ cd Utilities/FROG
	me@mylaptop:~$ ./frog

(Q-frog4) frog executable is not found!

	me@mylaptop:~$ ./Utilities/FROG/frog
	./Utilities/FROG/frog: No such file or directory

(A) you should have compiled FROG first.

        me@mylaptop:~$ cd Utilities/FROG
        me@mylaptop:~$ make

(Q-frog3) How should I know which external libraries I need for FROG ?

(A) Please refer to this page on the FROG website

Look at the Getting started page. You will need OpenGL, GLUT, X11-devel, Curl. For instance, here are the packages you could use in some Linux installation: OpenGL:

    xorg-x11-Mesa-libGL-6.8.2-1.EL.33.0.2 
    xorg-x11-Mesa-libGLU-6.8.2-1.EL.33.0.2 

GLUT:

    freeglut-2.2.0-14 
    freeglut-devel-2.2.0-14 

X11-devel:

    xorg-x11-devel-6.8.2-1.EL.33.0.2 

CURL:

    libcurl

For instance, to install these on Fedora 12: try

sudo yum install mesa-libGL mesa-libGL-devel mesa-libGLU freeglut freeglut-devel libX11-devel libcurl

(Q-frog2) FROG complains that libcurl is missing. What should I do?

(A) First, make sure the libcurl library is installed on your computer.

locate it on your computer

	me@mylaptop:~$ locate libcurl.so
	/usr/lib/libcurl.so

if the library is not present, take it from the internet (http://curl.haxx.se/) or via installers like "apt-get" (ubuntu systems) or "yum" (fedora systems) if the libcurl.so is not found, juste make a symbolic link in Utilities/FROG/Lib:

	me@mylaptop:~$ cd Utilities/FROG/Lib
	me@mylaptop:~$ ln -s /usr/lib/libcurl.so
	me@mylaptop:~$ ls -l libcurl.so
	lrwxrwxrwx  1 me me 21 Jan  7 15:19 libcurl.so -> /usr/lib/libcurl.so.4.0.1

now it should work properly

For instance, to install these on Fedora 12: try sudo yum install libcurl

(Q-frog1) (fixed) there are many lines printed at the end of the run of Delphes. Is it an error?

55555 D0
 - 20000 D0
 -  - 3000 (detId=900000000 Name=Delphes)
 -  -  - 3000 (detId=910000000 Name=Tracker)
 -  -  -  - 41040 (detId=9100010)
 -  -  -  - 41040 (detId=9100020)
 -  -  -  - 41040 (detId=9100030)
 -  -  -  - 41040 (detId=9100040)
...

(A) no, this is normal

This is just the output of FROG, showing that everything is ok. You should find your *vis and *geom files when it has ended. This output is not visible anymore, since Delphes-1.3beta

Mac OS-X

(Q-mac 2) Delphes is not compiling properly on Mac OS-X

(A) One modification is required in the Makefile

--- NOT needed anymore for Delphes V > 1.7 --- In Delphes' genMakefile.tcl, you should add "-Dmacos " in the CXXFLAGS definition (line 219):

CXXFLAGS += $(ROOTCFLAGS) -Dmacos -DDROP_CGAL -I. -Iinterface ...

Check also that for your ROOT installation you have defined the following environment variables: ROOTSYS, PATH, LD_LIBRARY_PATH and DYLD_LIBRARY_PATH (see below).

(Q-mac 1) FROG is not compiling properly on Mac OS-X

(A) One modification is required in FROG's Makefile

Open Utilities/FROG/Makefile. There, you should link the libcurl library in the compilation line of libfrog:

Utilities/FROG/Makefile:
libfrog.dylib : $(OBJS)
        $(CXX) ... $(ARCHDEPENDENT) -lcurl -lX11 -lz -lpng -o $(LIBDIR)/$@

Do not forget to recompile FROG from its directory (Utilities/FROG)

	me@mylaptop:~$ cd Utilities/FROG
	me@mylaptop:~$ make

ROOT basics

(Q-root 1) I am not familiar with ROOT, how can I start?

(A) Refer to our online manual

You will find basic commands here.

(Q-root 2) ROOT does not seem to work properly, or Delphes complains about ROOT

(A) It could be that the required environment variables are not declared

ROOT will properly work only if environment variables such as ROOTSYS are properly defined. To check this, try the following command:

echo $ROOTSYS

This should output the path to your ROOT installation folder (e.g. /usr/bin/root5.18). You must check and define all the following environment variables: ROOTSYS, LD_LIBRARY_PATH and PATH. In addition, for MacOSX, one must have DYLD_LIBRARY_PATH. Following ROOT website, here are the correct ways to define these variables. You must know which kind of shell you are running in your terminal (the command echo $SHELL will give you the answer to this question). if you are running a shell from the "sh family" (e.g. a bash shell):

export PATH=$ROOTSYS/bin:$PATH
export LD_LIBRARY_PATH=$ROOTSYS/lib:$LD_LIBRARY_PATH

In addition, for MacOS X only:

export DYLD_LIBRARY_PATH=$ROOTSYS/lib:$DYLD_LIBRARY_PATH

if your shell is from the "csh family":

setenv PATH ${ROOTSYS}/bin:${PATH}
setenv LD_LIBRARY_PATH ${ROOTSYS}/lib:${LD_LIBRARY_PATH}
rehash
In addition, for MacOS X only:
setenv DYLD_LIBRARY_PATH ${ROOTSYS}/lib:${DYLD_LIBRARY_PATH}
Last modified 13 years ago Last modified on Jul 1, 2011, 10:25:28 AM
Note: See TracWiki for help on using the wiki.