ROOT with Pythia6 and Pythia8

Hi,

I am desperately trying to compile ROOT with both Pythia6 and Pythia8 support included.
I installed and compiled both Pythia versions without issues and added the --with-pythia6-libdir, --with-pythia8-incdir and --with-pythia8-libdir options with the according paths in the configure step.
Yet, no combinations of Pythia versions and ROOT versions seems to work for me.

It works fine for only Pythia6 using ROOT 5.34/30 and --disable-pythia8 in configure!?

Depending on the ROOT version I use, the errors during ROOT compilation on the Pythia8 part vary.

Thanks in advance
Regards
Sascha

Hi Sascha,

For Pythia 6:
Take this tar file file: https://root.cern.ch/download/pythia6.tar.gz and replace the pythia6416.f with the version you prefer (I just tried with pythia-6.4.28.f), and then run the makePythia6 script which corresponds to your architecture

For Pythia 8: you can use any version of Pythia 8 with ROOT 6, but with ROOT 5, you have to use Pythia 8.1 at most

If you don’t manage to get it working, please post the error message you get

Cheers, Bertrand.

For Pythia6 inside ROOT see this old thread:
[Select a PDFset for pythia6 inside Root

Hi Bertrand,

thanks for the hint. I guess it was the Pythia8 version we were unlucky with (though I thought we tried a 8.1.* as well).

Anyways, just for completeness, here’s a full recipe that worked for us now …

mkdir Pythia
cd Pythia

wget https://root.cern.ch/download/pythia6.tar.gz
tar zxvf pythia6.tar.gz
rm -rf pythia6.tar.gz
wget http://www.hepforge.org/archive/pythia6/pythia-6.4.28.f.gz
gzip -d pythia-6.4.28.f.gz
mv pythia-6.4.28.f pythia6/pythia6428.f
rm -rf pythia6/pythia6416.f
mv pythia6 pythia6428
cd pythia6428
./makePythia6.linuxx8664
cd ..

wget http://home.thep.lu.se/~torbjorn/pythia8/pythia8186.tgz
tar zxvf pythia8186.tgz
rm -rf pythia8186.tgz
cd pythia8186
./configure --enable-shared --enable-64bit
make -j 4
cd ..

cat >setupPythiaROOT <<EOL
#!/bin/sh
export PYTHIA6=$PWD/pythia6428
export PYTHIA8=$PWD/pythia8186
export PYTHIA8DATA=$PWD/pythia8186/xmldoc
EOL
source setupPythiaROOT

wget http://root.cern.ch/download/root_v5.34.30.source.tar.gz
tar zxvf root_v5.34.30.source.tar.gz
mv root root53430
rm -rf root_v5.34.30.source.tar.gz
cd root53430
./configure --fail-on-missing \
  --with-pythia8-incdir=$PYTHIA8/include \
  --with-pythia8-libdir=$PYTHIA8/lib \
  --with-pythia6-libdir=$PYTHIA6 \
  --enable-pythia6 \
  --enable-pythia8
make -j 4
cd ..

cat >>setupPythiaROOT <<EOL
source root53430/bin/thisroot.sh
EOL

cp root53430/tutorials/pythia/pythiaExample.C .
cp root53430/tutorials/pythia/pythia8.C .

# adjust pythia6 path in pythiaExample.C to $PYTHIA6/libPythia6

Hi guys,

are there any chances to get Pythia 8.2 running with root 5 as well or do you really not maintain the framework for that.

Regards,
Friederike

The problem with Pythia 8.2 and ROOT 5 that I am aware is that CINT is not able to digest the header file dlfcn.h. See https://sft.its.cern.ch/jira/browse/ROOT-6862. Since we are not going to improve CINT to do it, you can avoid the problem by patching your version of Pythia8 and protect the inclusion of the dlfcn.h with #ifdef MAKECINT#endif.

Hi,
Since our cluster has been moved from CENTOS7 to AlmaLinux 9, I had to recompile my Pythia6 stuff.
The recipe that you gave here works well under CENTOS7, but under AlmaLinux 9 I get the following error messages from the last command (i.e. building the shared lib).
I guess it has to do with some compiler option. Does anyone have a clue ?
/usr/bin/ld: pythia6_common_address.o:(.bss+0x61aa0): multiple definition of pydat1_'; pythia6428.o:(.data+0x280c0): first defined here /usr/bin/ld: pythia6_common_address.o:(.bss+0x62d60): multiple definition of pydat2_‘; pythia6428.o:(.data+0x29380): first defined here
/usr/bin/ld: pythia6_common_address.o:(.bss+0x6ca20): multiple definition of pydat3_'; pythia6428.o:(.data+0x33040): first defined here /usr/bin/ld: pythia6_common_address.o:(.bss+0xb46a0): multiple definition of pydat4_’; pythia6428.o:(.data+0x7acc0): first defined here
/usr/bin/ld: pythia6_common_address.o:(.bss+0xb8520): multiple definition of pydatr_'; pythia6428.o:(.data+0x7eb40): first defined here /usr/bin/ld: pythia6_common_address.o:(.bss+0xb8860): multiple definition of pysubs_‘; pythia6428.o:(.data+0x9ece0): first defined here
/usr/bin/ld: pythia6_common_address.o:(.bss+0xb9900): multiple definition of pypars_'; pythia6428.o:(.data+0x9d560): first defined here /usr/bin/ld: pythia6_common_address.o:(.bss+0xbabc0): multiple definition of pyint1_’; pythia6428.o:(.bss+0x20): first defined here
/usr/bin/ld: pythia6_common_address.o:(.bss+0xbbe80): multiple definition of pyint2_'; pythia6428.o:(.data+0x7ee80): first defined here /usr/bin/ld: pythia6_common_address.o:(.bss+0xd66c0): multiple definition of pyint4_‘; pythia6428.o:(.data+0x94380): first defined here
/usr/bin/ld: pythia6_common_address.o:(.bss+0xe0340): multiple definition of pyint6_'; pythia6428.o:(.data+0x99980): first defined here /usr/bin/ld: pythia6_common_address.o:(.bss+0xe3a20): multiple definition of pyint7_’; pythia6428.o:(.bss+0x12e0): first defined here
/usr/bin/ld: pythia6_common_address.o:(.bss+0xe4d20): multiple definition of pymssm_'; pythia6428.o:(.data+0x9d0a0): first defined here /usr/bin/ld: pythia6_common_address.o:(.bss+0xe5640): multiple definition of pybins_'; pythia6428.o:(.data+0x0): first defined here
collect2: error: ld returned 1 exit status

Okido, problem solved !!!
I turned out that in pythia6_common_address.c these blocks were NOT declared
as extern like for instance
extern int pyjets[2+54000+2254000];
By declaring them as extern everything works fine again.