CRASH when compiling macro before starting a PROOF session

Hello all,

I need to compile a macro before starting a PROOF session. I am doing:

gSystem->CompileMacro(“mymacro.C”, “k”);

Then, I start the PROOF session and Upload an Enable the package:

TProof *p = TProof::Open(" ");
p->UploadPackage(“packages/mymacro.par”,TProof::kRemoveOld);
p->EnablePackage(“mymacro”);

and I get this:

Info in TUnixSystem::ACLiC: creating shared library /gpfs/csic_users/arodrig/MyProofAnalysis/ProofAnalysisFramework/mymacro_C.so
+++ Starting PROOF-Lite with 2 workers +++
Opening connections to workers: OK (2 workers)
Setting up worker servers: OK (2 workers)
PROOF set to parallel mode (2 workers)
Info in TUnixSystem::ACLiC: creating shared library /gpfs/csic_users/arodrig/.proof/packages/InputParameters/./mymacro_C.so
/usr/lib/crt1.o(.text+0x18): In function _start': : undefined reference tomain’
collect2: ld returned 1 exit status

and just after the code crashed. If I avoid the CompileMacro step the code works fine, but I am not able to use what is in mymacro, and I need before the PROOF session.

Any idea?

Ana.

Hi Ana,

It looks like a clash of names.
What is the package “mymacro” doing in its BUILD.sh and SETUP.C ?
Does it load a ‘mymacro.C’ macro?

Gerri

I have the Setup.C but no the Build.sh.
In the setup, yes I load my macro.C:

gROOT->ProcessLine(".L mymacro.C+");

Ana.

Hi Ana,

There is a clash of names or symbols that need to be investigated.

However, I am not sure to understand why you need to load separately the macro.
When you issue EnablePackage, the package is also enabled locally.

If in the macro there are things that you need only on the client before starting PROOF, then
I would advise to take those things out in a separated macro.

Gerri

Ganis,

Thanks. I will investigate also a bit more this case.

Ana.

Hi Gerri,

We should have probably explained better the use case. We are building a PROOF macro which will set all the information we need for PROOF at the very first lines: Proof server (or prooflite), data files, input parameters, feedback histograms, selector file, etc… After all those initial setting is when (hidden probably in some management class) we would like to start proof. The idea is that the user only edits a few lines of code.

We are using for the input parameters the InputParameters class I think you provided us sometime ago (Ana can confirm where it came from). That is the “macro” we try to load first and then pass it to the proof slaves.

The weird thing for me is that if you load the class and then try to enable it on PROOF it will come with that strange error. I wonder if there is a mechanism to avoid that (either in Setup.C or on the main macro). If you need some test code just let us know.

If not we will have to be a bit more imaginative and find a way to hide all the routine tasks to our users. Thanks for your help!

Isidro

Hi Isidro,

Yes, I remember the input parameters example and I think more or less what you are trying to do.
The error that you get is strange and I need to investigate it with some CINT expert (I managed
to reproduce it in a very simple case).
However, I believe hat we can have a solution in which you do not need to call CompileMacro before starting PROOF. If you can send some test code I can have a look and propose something.

Cheers, Gerri

Hi Gerri,

thanks for helping Isidro and me with this issue. We will prepare some test code to send to you.

Best,
Ana.

Hi Gerri,

In the attach you will find a simple test code, so you can have a look to what we are trying to do.
You may run it like that:
> ./setup > root -l
$> .x Run.prooflite.C

If you edit Run.prooflite.C you will find the lines:
// PARAMETERS FOR MY ANALYSIS
we would like to use this part before starting the PROOF session.

I am using a modification of the InputParameters you posted me in packages.

Best,
Ana.
testcode.zip (15.2 KB)

Hi,

Any news on a possible workaround this issue? I thin that the use case of someone wanting to fill an object of some kind to be passed onto the PROOF slaves arises pretty soon when you want to do something a bit structured. I remember I could have this working in the far past times :slight_smile:

Cheers,

Isidro

Hi,

First of all, I would like to apologize for the long time this took to be processed.

Attached is a modified version of the tarball with two modificatons:

  1. in Run.prooflite.C enable the package on the cluster only, i.e. not on client
  2. add signature and new end line to SETUP.C (this is needed by a recent change we have done in PROOF to support arguments in SETUP; not needed for 5.26/00xxx)

After these changes, I get this with PROOF-Lite:

which is what I expect, given that I have no access to the file.

Can you try it in your setup and let me know what you get?

Sorry again for the late reply,
Gerri

Forgot the attachment, sorry.
G
ana_testcode.1.tar.gz (17.2 KB)