Re: Re: [ROOT] geant3_vmc undefined symbol: _ZN10TVirtualMC14DefineParticleEiPKc15TMCParticleTypeddd

From: Stefano Dusini <stefano.dusini_at_pd.infn.it>
Date: Wed, 22 Apr 2009 14:41:44 +0200


Hi Andrei

but TVirtualMC::DefineParticle(pdg, name, type, mass, charge, lifetime); dose not exist in ROOT there is only the prototype but the implementation, or at least I did not find. At the moment I'm using root_v5.23/02

regards, Stefano

Andrei Gheata wrote:

> Hi Stefano,
> 
> TVirtualMC is a root class (in vmc library) and defines the 2 prototypes 
> for the virtual function DefineParticle() that are implemented in the 
> derived TGeant3 (a class in the G3 library). In your case apparently the 
> TVirtualMC class version is not in sync with the TGeant3 one. Most 
> likely you have to upgrade ROOT to at least 5.23/02 (as specified at 
> http://root.cern.ch/drupal/content/how-use-virtual-monte-carlo#Download)
> 
> Cheers,
> Andrei
> 
> Stefano Dusini wrote:

>> I have check inside the code of geant3_vmc_1.10 and DefineParticle has
>> two implementation
>> //______________________________________________________________________
>> Bool_t TGeant3::DefineParticle(Int_t pdg,const char*
>> name,TMCParticleType type,
>> Double_t mass, Double_t charge, Double_t lifetime)
>> {
>> // Old function definition, now replaced with more arguments
>>
>> TVirtualMC::DefineParticle(pdg, name, type, mass, charge, lifetime);
>>
>> return false;
>> }
>>
>>
>> //______________________________________________________________________
>> Bool_t TGeant3::DefineParticle(Int_t pdg,const char* name,
>> TMCParticleType mcType,
>> Double_t mass, Double_t charge, Double_t lifetime,
>> const TString& /*pType*/, Double_t /*width*/,
>> Int_t /*iSpin*/, Int_t /*iParity*/, Int_t
>> /*iConjugation*/,
>> Int_t /*iIsospin*/, Int_t /*iIsospinZ*/, Int_t
>> /*gParity*/,
>> Int_t /*lepton*/, Int_t /*baryon*/,
>> Bool_t /*stable*/, Bool_t /*shortlived*/,
>> const TString& /*subType*/,
>> Int_t /*antiEncoding*/, Double_t /*magMoment*/,
>> Double_t /*excitation*/)
>> {
>> //
>> // Set a user defined particle
>> // Function is ignored if particle with specified pdg
>> // already exists and error report is printed.
>> // ---
>>
>> // Check if particle with specified pdg already exists
>> // in TGeant3
>> if (IdFromPDG(pdg) > 0) {
>> Error("SetParticle", "Particle already exists.");
>> return kFALSE;
>> }
>>
>> // Check if particle type is known to Geant3
>> Int_t itrtyp = TransportMethod(mcType);
>> if (itrtyp < 0) {
>> Error("SetParticle", "Unknown particle transport.");
>> return kFALSE;
>> }
>>
>> // Add particle to Geant3
>> Gspart(fNG3Particles++, name, itrtyp, mass, charge, lifetime);
>>
>> // Add particle to TDatabasePDG
>> // (if it does not yet exist here)
>> if (!TDatabasePDG::Instance()->GetParticle(pdg))
>> TDatabasePDG::Instance()
>> ->AddParticle(name, name, mass, kTRUE, 0, charge*3,
>> ParticleClass(mcType).Data(), pdg);
>>
>> // Resize fPDGCode table if needed
>> if ( fNPDGCodes >= fPDGCode.GetSize() )
>> fPDGCode.Set( fPDGCode.GetSize() + 100);
>>
>> fPDGCode[fNPDGCodes++] = pdg;
>>
>> return kTRUE;
>> }
>>
>> In my code I use the first implementation.
>>
>> To my understanding (sorry but I'm not a c++ expert) the first one
>> points to ROOT while the second not. I have check inside root src code
>> but I did not find any implementation of TVirtualMC::DefineParticle
>> only the definition in TVirtualMC.h.
>>
>> Do I have to use in my code the second implementation of
>> TGeant3::DefineParticle ?
>>
>> Thanks
>> Stefano
>> Andrei Gheata wrote:
>>> Stefano, looks like your G3 compilation is inconsistent. Just refresh
>>> the geant3 directory and recompile it from scratch. Make also sure
>>> that the library you compile is the first one accessible in
>>> LD_LIBRARY_PATH in case you have multiple versions.
>>>
>>> Cheers,
>>> Andrei
>>>
>>> Stefano Dusini wrote:
>>>> Hi,
>>>>
>>>> I have recompiled root with
>>>>
>>>> --enable-pythia6 --with-pythia-libdir=$KITS_DIR/pythia6
>>>>
>>>> recompiled geant3_vmc_1.10
>>>>
>>>> but the keep crash with the same error
>>>>
>>>> /sps/opera/scratch/dusini/sw/OpRelease/3.1/OpSim/v7r4/Linux/opsim.exe:
>>>> symbol lookup error:
>>>> /sps/opera/scratch/dusini/sw/OpRelease_fluka/kits/geant3_vmc_1.10/lib/tgt_linux/libgeant321vmc.so:
>>>> undefined symbol:
>>>> _ZN10TVirtualMC14DefineParticleEiPKc15TMCParticleTypeddd
>>>>
>>>> This error occur at the point where I define a new particle
>>>>
>>>> // DefineParticle(PDGCode, Name, Type, Mass, Charge, Lifetime)
>>>> gMC->DefineParticle(kOpPDGDPlus, "OPERA D +", kPTMuon, kOpMassDPlus,
>>>> 1., 1e+12);
>>>>
>>>> where gMC is a TGeant3TGeo object.
>>>>
>>>> regards,
>>>> Stefano
>>>>
>>>> Rene Brun wrote:
>>>>> TMCParticle class is in libEGPythia6.
>>>>> see top right corner of:
>>>>> http://root.cern.ch/root/html/TMCParticle.html
>>>>>
>>>>> Rene Brun
>>>>>
>>>>> Stefano Dusini wrote:
>>>>>> I'm trying to upgrade our (OPERA) detector simulation software to
>>>>>> use ROOT v5.23 and therefore I have also upgraded the geant3_vmc
>>>>>> version to v1.10. I have also modify the code to use TVirtualMC as
>>>>>> the only interface to the MC transportation code. But at run time
>>>>>> I get this error
>>>>>>
>>>>>> /sps/opera/scratch/dusini/sw/OpRelease/3.1/OpSim/v7r4/Linux/opsim.exe:
>>>>>> symbol lookup error:
>>>>>> /sps/opera/scratch/dusini/sw/OpRelease_fluka/kits/geant3_vmc_1.10/lib/tgt_linux/libgeant321vmc.so:
>>>>>> undefined symbol:
>>>>>> _ZN10TVirtualMC14DefineParticleEiPKc15TMCParticleTypeddd
>>>>>>
>>>>>> In fact using
>>>>>>
>>>>>> nm -u libgeant321vmc.so
>>>>>>
>>>>>> I see that
>>>>>>
>>>>>> U _ZN10TVirtualMC14DefineParticleEiPKc15TMCParticleTypeddd
>>>>>>
>>>>>> where the U means (from nm man page) that the symbol is undefined.
>>>>>>
>>>>>> What is wrong?
>>>>>>
>>>>>> The geant3_vmc library has been build just with
>>>>>>
>>>>>> gmake
>>>>>>
>>>>>> and the environmental variable $ROOTSYS pointing to the ROOT v5.23
>>>>>> directory and $ROOTSYS/lib added to the $LD_LIBRARY_PATH and
>>>>>> $ROOTSYS/bin added to $PATH.
>>>>>>
>>>>>> Do I have to specify something else when I compile geant3_vmc?
>>>>>> Do I have to use some special switch when I compile root?
>>>>>>
>>>>>> Thanks a lot
>>>>>> Stefano
>>>>>
>>>>
>>>>
>>
>>
-- 
__________________________________________________________________
Stefano Dusini, INFN Padova, Via Marzolo, 8 I-35131 Padova, Italy
Phones: +39-049-827-7312 +39-049-789-7676. Handy +39-348-8137991

Received on Wed Apr 22 2009 - 14:41:47 CEST

This archive was generated by hypermail 2.2.0 : Wed Apr 22 2009 - 17:25:01 CEST