PROOF crashing in OSX

Hi,

I am running OSX version 10.10.3, Xcode version 6.3.2 and ROOT version 6.05/01 built from source. When I try to test PROOF with the code in root.cern.ch/drupal/content/usi … ctor-proof (that I put in the zipped file attached so that you only have to source run.sh) I get the following message:

[code]Angels-Air:Test_Proof angelcampoverde$ source run.sh
+++ Starting PROOF-Lite with 4 workers +++
Opening connections to workers: OK (4 workers)
Setting up worker servers: OK (4 workers)
PROOF set to parallel mode (4 workers)

Info in TProofLite::SetQueryRunning: starting query: 1
Info in TProofQueryResult::SetRunning: nwrks: 4
Info in TMacOSXSystem::ACLiC: creating shared library /Users/angelcampoverde/WORK/Test/Test_Proof/./ProofEventSelector_C.so
clang: error: no such file or directory: ‘cl_kernels’
clang: error: no such file or directory: ‘cl_kernels’
Error in : Compilation failed!
Error in TSelector::GetSelector: The file ProofEventSelector.C+ does not define a class named ProofEventSelector.
Error in TProofLite::CopyMacroToCache: could not create a selector from ProofEventSelector.C+
Info in TProofQueryResult::RecordEnd: output list cloned successfully!
Lite-0: all output objects have been merged [/code]

When I use a ROOT version 6.02.05-x86_64-slc6-gcc48-opt in LXPLUS I can get it to work. I can use the Tier3 in my university or LXPLUS but I thought I should tell you the problem.

Thanks.
Test_Proof.zip (3.35 KB)

Hello,

Unfortunately I cannot reproduce your problem, neither with 10.10, nor with 10.9 .
Are you sure you are running 6.05/01 ?
A fix for a problem that could have produced this was only committing last Friday evening.

G Ganis

Hi,

Yes, that is the right version or ROOT. If it’s working for you maybe its my OSX installation, I also tried the binaries but I got the same message.

Hi Dr Ganis,

Also if working on my university’s cluster I put the header file in a directory called “Header” and then I do:

TProof *proof = TProof::Open("");

proof->AddIncludePath("./Header/");

In run.sh, as you can see in the files I attached, then I get:

Error in <TProofLite::CopyMacroToCache>: header file for ProofEventSelector.C not found or not readable (checked extensions: .h,.hh)

If I put it outside “Header”, with the .C file, it works. I am not sure why I am not able to tell PROOF where my header file is, what am I doing wrong?

Thanks.
Test_Proof.zip (3.55 KB)

Hi,

In PROOF each process has a different working directory.
In particular, this

proof->AddIncludePath("./Header/")

adds a -I relative to the worker sandbox, which is not the current directory.
TProof::Load() allows in principle to specify additional files from anywhere and worked well for ROOT 5, but it is not any longer working with R 6, I guess because of new/different requirements on headers files required by the created shared libs. I will investigate and try to fix it.
For the moment the best is to have files at the same directory level.
For more structured things you may want to try PAR packages (see https://root.cern.ch/drupal/content/preparing-uploading-and-enabling-additional-software).

G Ganis

Hi Dr Ganis,

Yes, I was looking at the PAR files. However I would still need to include header files if I use them, because with the PAR files it seems you just make a library with all your classes and load it in PROOF. I think I will make soft links to the header files, that in order to make my code tidy, I will put in a different directory.

By the way I include below a scrip that makes PAR files, for anyone who reads this and wants something quick and simple. Its supposed to go in a make_par.sh file, however I seem to be unable to upload executables here.

[code]#!/bin/bash

#THIS SCRIPT MAKES PAR FILES, call it as ./make_par.sh PACKAGE_NAME
#IT SEEKS THE SOURCE FILES FROM …/source AND THE HEADER FILES FROM …/include
#EACH *.cxx IN …/source SHOULD CORRESPOND TO A *.h IN …/include

#THE PAR FILE WILL ENDUP IN …/Obj AS PACKAGE_NAME.par

#AFTER THAT DO ./make_par.sh PACKAGE_NAME.par 0 TO ENABLE THE PACKAGE AND SEE IF
#ITS WORKING.

PACKAGE=$1
TEST=$2

cd …
PKGDIR=pwd
cd -

if [[ “$PACKAGE” == “” ]];then
echo "make_par:: Called with no package name"
exit 1
elif [[ “$TEST” != “” ]];then

root -l <<EOF

TProof *proof = TProof::Open("");
proof->ClearPackage("$PACKAGE");
proof->UploadPackage("$PKGDIR/Obj/$PACKAGE.par");
proof->EnablePackage("$PACKAGE");
proof->ShowEnabledPackages();

EOF

exit 0

fi
###################################COPY FILES AND MAKE STRUCTURE
rm -rf …/Obj
mkdir …/Obj

PARDIR=…/Obj/$PACKAGE

mkdir -p $PARDIR

cp …/source/* $PARDIR
cp …/include/* $PARDIR

mkdir -p $PARDIR/PROOF-INF

SETUP=$PARDIR/PROOF-INF/SETUP.C
BUILD=$PARDIR/PROOF-INF/BUILD.sh
MKFIL=$PARDIR/Makefile

rm -f $SETUP $BUILD $MKFIL

touch $SETUP
touch $BUILD
touch $MKFIL

chmod +x $BUILD
###################################FILL MAKEFILE
echo “all: lib$PACKAGE.so” >>$MKFIL
echo “” >>$MKFIL
echo “lib$PACKAGE.so: *.o” >>$MKFIL
echo -e “\tg++ -shared -o lib$PACKAGE.so $^ `root-config --evelibs`”>>$MKFIL
echo “” >>$MKFIL
echo “%.o: %.cxx” >>$MKFIL
echo -e “\tg++ -Wall -fPIC -c $^ `root-config --cflags`” >>$MKFIL
echo “” >>$MKFIL
echo “clean:” >>$MKFIL
echo -e “\trm -f *.o *.so *.lib” >>$MKFIL
###################################FILL BUILD.sh
echo “#! /bin/sh” >>$BUILD
echo “# Build libEvent library.” >>$BUILD
echo “” >>$BUILD
echo “make” >>$BUILD
echo “” >>$BUILD
echo “rc=$?” >>$BUILD
echo “” >>$BUILD
echo “echo “COMPILATION STATUS:: $?”” >>$BUILD
echo “” >>$BUILD
echo “if [ $? != “0” ] ; then” >>$BUILD
echo “exit 1” >>$BUILD
echo “fi” >>$BUILD
echo “” >>$BUILD
echo “exit 0” >>$BUILD
###################################FILL SETUP
echo “Int_t SETUP()” >>$SETUP
echo “{” >>$SETUP
echo “if (gSystem->Load(“lib$PACKAGE”) == -1)” >>$SETUP
echo “return -1;” >>$SETUP
echo “” >>$SETUP
echo “return 0;” >>$SETUP
echo “}” >>$SETUP
###################################MAKE PAR FILE
cd …/Obj

tar zcvf $PACKAGE.par $PACKAGE

rm -rf $PACKAGE

cd -[/code]

Hi,

I got my code working with the PAR file made with the script above. And I also found out that I dont really need to make any symbolic link. I just enable the package and the selector knows where to look for the header files, so yes, this definitely solves the AddInclude issue.

Hi,
Thank you very much for reporting this.
I am glad that you have found a solution to your problem.
I will continue to investigate the issue we have with R6 and TProof::Load.

G Ganis