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)
{
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*/)
{
// 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-8137991Received on Wed Apr 22 2009 - 12:42:23 CEST
- application/x-pkcs7-signature attachment: S/MIME Cryptographic Signature
This archive was generated by hypermail 2.2.0 : Wed Apr 22 2009 - 17:25:01 CEST