]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TGeant3/TGeant3.cxx
Minor bugs in the definition of the bending impact parameter corrected (thanks to...
[u/mrichter/AliRoot.git] / TGeant3 / TGeant3.cxx
index fe1353d5a0798ac2343d53ac1a4a831b90712e35..c2d312839e02e9f9c0eedc3af1b6eef013f887ed 100644 (file)
 
 /*
 $Log$
+Revision 1.49  2001/04/06 14:04:25  morsch
+Anti e-neutrino added to g3 particle list.
+
+Revision 1.48  2001/04/04 11:47:56  morsch
+- muon and tau neutrinos added to g3 particle list (needed for D,B decays).
+- some (up to now harmless) bugs in Gspart calls corrected.
+
+Revision 1.47  2001/03/20 06:36:29  alibrary
+100 parameters now allowed for geant shapes
+
+Revision 1.46  2000/12/21 17:35:05  morsch
+Last updates on the right version (1.44).
+(1.45) does not compile.
+
+Revision 1.45  2000/12/21 16:49:56  morsch
+Adding particles to the PDG database delegated to AliPDG.
+
+Revision 1.44  2000/12/20 09:46:51  alibrary
+dlsym not supported on HP, reverting to gcomad
+
+Revision 1.43  2000/12/20 08:39:39  fca
+Support for Cerenkov and process list in Virtual MC
+
+Revision 1.42  2000/12/19 08:37:48  alibrary
+Using dlsym to retrieve address of commons
+
+Revision 1.41  2000/12/18 11:33:50  alibrary
+New call frequence histograms per module and volume
+
 Revision 1.40  2000/12/06 10:06:58  morsch
 Add all D and B baryons produced by HIJING to PDG DataBase.
 
@@ -117,14 +146,19 @@ Introduction of the Copyright and cvs Log
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
-#include "TGeant3.h" 
+#include "ctype.h" 
+
 #include "TROOT.h" 
+#include "TDatabasePDG.h"
+#include "TLorentzVector.h"
+#include "TArrayI.h"
+
 #include "THIGZ.h" 
-#include "ctype.h" 
-#include <TDatabasePDG.h>
+#include "TGeant3.h" 
+
 #include "AliCallf77.h" 
 #include "AliDecayer.h" 
-#include "TLorentzVector.h"
+#include "AliPDG.h" 
 
 #ifndef WIN32 
 # define gzebra  gzebra_ 
@@ -539,7 +573,7 @@ extern "C"
   void type_of_call setbomb(Float_t &);
   void type_of_call setclip(DEFCHARD, Float_t &,Float_t &,Float_t &,Float_t &,
                            Float_t &, Float_t & DEFCHARL); 
-  void type_of_call gcomad(DEFCHARD, Int_t*& DEFCHARL); 
+  void type_of_call gcomad(DEFCHARD, Int_t*& DEFCHARL);
 
   void type_of_call ertrak(const Float_t *const x1, const Float_t *const p1,
                           const Float_t *x2, const Float_t *p2,
@@ -637,42 +671,42 @@ void TGeant3::LoadAddress()
   // Assigns the address of the GEANT common blocks to the structures
   // that allow their access from C++
   //
-  Int_t *addr;
-  gcomad(PASSCHARD("QUEST"), (int*&) fQuest PASSCHARL("QUEST"));
-  gcomad(PASSCHARD("GCBANK"),(int*&) fGcbank  PASSCHARL("GCBANK"));
-  gcomad(PASSCHARD("GCLINK"),(int*&) fGclink  PASSCHARL("GCLINK"));
-  gcomad(PASSCHARD("GCCUTS"),(int*&) fGccuts  PASSCHARL("GCCUTS"));
-  gcomad(PASSCHARD("GCMULO"),(int*&) fGcmulo  PASSCHARL("GCMULO"));
-  gcomad(PASSCHARD("GCFLAG"),(int*&) fGcflag  PASSCHARL("GCFLAG"));
-  gcomad(PASSCHARD("GCKINE"),(int*&) fGckine  PASSCHARL("GCKINE"));
-  gcomad(PASSCHARD("GCKING"),(int*&) fGcking  PASSCHARL("GCKING"));
-  gcomad(PASSCHARD("GCKIN2"),(int*&) fGckin2  PASSCHARL("GCKIN2"));
-  gcomad(PASSCHARD("GCKIN3"),(int*&) fGckin3  PASSCHARL("GCKIN3"));
-  gcomad(PASSCHARD("GCMATE"),(int*&) fGcmate  PASSCHARL("GCMATE"));
-  gcomad(PASSCHARD("GCTMED"),(int*&) fGctmed  PASSCHARL("GCTMED"));
-  gcomad(PASSCHARD("GCTRAK"),(int*&) fGctrak  PASSCHARL("GCTRAK"));
-  gcomad(PASSCHARD("GCTPOL"),(int*&) fGctpol  PASSCHARL("GCTPOL"));
-  gcomad(PASSCHARD("GCVOLU"),(int*&) fGcvolu  PASSCHARL("GCVOLU"));
-  gcomad(PASSCHARD("GCNUM"), (int*&) fGcnum   PASSCHARL("GCNUM"));
-  gcomad(PASSCHARD("GCSETS"),(int*&) fGcsets  PASSCHARL("GCSETS"));
-  gcomad(PASSCHARD("GCPHYS"),(int*&) fGcphys  PASSCHARL("GCPHYS"));
-  gcomad(PASSCHARD("GCPHLT"),(int*&) fGcphlt  PASSCHARL("GCPHLT"));
-  gcomad(PASSCHARD("GCOPTI"),(int*&) fGcopti  PASSCHARL("GCOPTI"));
-  gcomad(PASSCHARD("GCTLIT"),(int*&) fGctlit  PASSCHARL("GCTLIT"));
-  gcomad(PASSCHARD("GCVDMA"),(int*&) fGcvdma  PASSCHARL("GCVDMA"));
-
-  // Commons for GEANE
-  gcomad(PASSCHARD("ERTRIO"),(int*&) fErtrio  PASSCHARL("ERTRIO"));
-  gcomad(PASSCHARD("EROPTS"),(int*&) fEropts  PASSCHARL("EROPTS"));
-  gcomad(PASSCHARD("EROPTC"),(int*&) fEroptc  PASSCHARL("EROPTC"));
-  gcomad(PASSCHARD("ERWORK"),(int*&) fErwork  PASSCHARL("ERWORK"));
-
-  // Variables for ZEBRA store
-  gcomad(PASSCHARD("IQ"), addr  PASSCHARL("IQ"));
-  fZiq = addr;
-  gcomad(PASSCHARD("LQ"), addr  PASSCHARL("LQ"));
-  fZlq = addr;
-  fZq       = (float*)fZiq; 
+   Int_t *addr;
+   gcomad(PASSCHARD("QUEST"), (int*&) fQuest PASSCHARL("QUEST"));
+   gcomad(PASSCHARD("GCBANK"),(int*&) fGcbank  PASSCHARL("GCBANK"));
+   gcomad(PASSCHARD("GCLINK"),(int*&) fGclink  PASSCHARL("GCLINK"));
+   gcomad(PASSCHARD("GCCUTS"),(int*&) fGccuts  PASSCHARL("GCCUTS"));
+   gcomad(PASSCHARD("GCMULO"),(int*&) fGcmulo  PASSCHARL("GCMULO"));
+   gcomad(PASSCHARD("GCFLAG"),(int*&) fGcflag  PASSCHARL("GCFLAG"));
+   gcomad(PASSCHARD("GCKINE"),(int*&) fGckine  PASSCHARL("GCKINE"));
+   gcomad(PASSCHARD("GCKING"),(int*&) fGcking  PASSCHARL("GCKING"));
+   gcomad(PASSCHARD("GCKIN2"),(int*&) fGckin2  PASSCHARL("GCKIN2"));
+   gcomad(PASSCHARD("GCKIN3"),(int*&) fGckin3  PASSCHARL("GCKIN3"));
+   gcomad(PASSCHARD("GCMATE"),(int*&) fGcmate  PASSCHARL("GCMATE"));
+   gcomad(PASSCHARD("GCTMED"),(int*&) fGctmed  PASSCHARL("GCTMED"));
+   gcomad(PASSCHARD("GCTRAK"),(int*&) fGctrak  PASSCHARL("GCTRAK"));
+   gcomad(PASSCHARD("GCTPOL"),(int*&) fGctpol  PASSCHARL("GCTPOL"));
+   gcomad(PASSCHARD("GCVOLU"),(int*&) fGcvolu  PASSCHARL("GCVOLU"));
+   gcomad(PASSCHARD("GCNUM"), (int*&) fGcnum   PASSCHARL("GCNUM"));
+   gcomad(PASSCHARD("GCSETS"),(int*&) fGcsets  PASSCHARL("GCSETS"));
+   gcomad(PASSCHARD("GCPHYS"),(int*&) fGcphys  PASSCHARL("GCPHYS"));
+   gcomad(PASSCHARD("GCPHLT"),(int*&) fGcphlt  PASSCHARL("GCPHLT"));
+   gcomad(PASSCHARD("GCOPTI"),(int*&) fGcopti  PASSCHARL("GCOPTI"));
+   gcomad(PASSCHARD("GCTLIT"),(int*&) fGctlit  PASSCHARL("GCTLIT"));
+   gcomad(PASSCHARD("GCVDMA"),(int*&) fGcvdma  PASSCHARL("GCVDMA"));
+   
+   // Commons for GEANE
+   gcomad(PASSCHARD("ERTRIO"),(int*&) fErtrio  PASSCHARL("ERTRIO"));
+   gcomad(PASSCHARD("EROPTS"),(int*&) fEropts  PASSCHARL("EROPTS"));
+   gcomad(PASSCHARD("EROPTC"),(int*&) fEroptc  PASSCHARL("EROPTC"));
+   gcomad(PASSCHARD("ERWORK"),(int*&) fErwork  PASSCHARL("ERWORK"));
+
+   // Variables for ZEBRA store
+   gcomad(PASSCHARD("IQ"), addr  PASSCHARL("IQ"));
+   fZiq = addr;
+   gcomad(PASSCHARD("LQ"), addr  PASSCHARL("LQ"));
+   fZlq = addr;
+   fZq       = (float*)fZiq; 
 } 
 
 //_____________________________________________________________________________
@@ -884,6 +918,7 @@ void TGeant3::DefineParticles()
   Gspart(38, "ANTI D 0", 3, 1.865, 0., 4.2e-13);
   fPDGCode[fNPDGCodes++]=-421;  // 38 = D0 bar
 
+
   fPDGCode[fNPDGCodes++]=-99;  // 39 = unassigned
 
   fPDGCode[fNPDGCodes++]=-99;  // 40 = unassigned
@@ -909,381 +944,95 @@ void TGeant3::DefineParticles()
 
   const Int_t kspe=50000000;
 
-  TDatabasePDG *pdgDB = TDatabasePDG::Instance();
-
-  const Double_t kAu2Gev=0.9314943228;
-  const Double_t khSlash = 1.0545726663e-27;
-  const Double_t kErg2Gev = 1/1.6021773349e-3;
-  const Double_t khShGev = khSlash*kErg2Gev;
-  const Double_t kYear2Sec = 3600*24*365.25;
 //
-// Bottom mesons
-// mass and life-time from PDG
-  pdgDB->AddParticle("B(s)*0","B(s)*0",
-                    5.4163, kTRUE, 0.047, +0.,"Meson",  533);
-
-  pdgDB->AddParticle("B(s)*0 bar","B(s)*0 bar",
-                    5.4163, kTRUE, 0.047, -0.,"Meson", -533);
-
-// Charmed baryons
-// 
-// value for mass used by Hijing
-  pdgDB->AddParticle("Sigma(c)*+","Sigma(c)*+",
-                    2.4536, kTRUE, -1., +1.,"Baryon",  4214);
-
-  pdgDB->AddParticle("Sigma(c)*-","Sigma(c)*-",
-                    2.4536, kTRUE, -1., -1.,"Baryon", -4214);
-// equivalent to 4312 ? Hijing uses m=2.55
-  pdgDB->AddParticle("Xsi(c)0","Xsi(c)0",
-                    2.4703, kTRUE, -1., +0.,"Baryon",  4132);
-
-  pdgDB->AddParticle("Xsi(c)0 bar","Xsi(c)0 bar",
-                    2.4703, kTRUE, -1., -0.,"Baryon", -4132);
-// equivalent to 4322 ? Hijing uses m=2.55
-  pdgDB->AddParticle("Xi(c)+","Xi(c)+",
-                    2.4656, kFALSE, -1., +1.,"Baryon",  4232);
-  
-  pdgDB->AddParticle("Xi(c)-","Xi(c)-",
-                    2.4656, kFALSE, -1., -1.,"Baryon", -4232);
-// mass values from Hijing
-
-  pdgDB->AddParticle("Xsi(c)*0","Xsi(c)*0",
-                    2.63, kTRUE, -1., +0.,"Baryon",  4314);
-
-  pdgDB->AddParticle("Xsi(c)*0 bar","Xsi(c)*0 bar",
-                    2.63, kTRUE, -1., -0.,"Baryon", -4314);
-
-  pdgDB->AddParticle("Xsi(c)*+","Xsi(c)*+",
-                    2.63, kTRUE, -1., +1.,"Baryon",  4324);
-
-  pdgDB->AddParticle("Xsi(c)*-","Xsi(c)*-",
-                    2.63, kTRUE, -1., -1.,"Baryon", -4324);
-
-// pdg mass value, Hijing uses m=2.73.
-  pdgDB->AddParticle("Omega(c)0","Omega(c)0",
-                    2.7040, kFALSE, khShGev/0.064e-12, +0.,"Baryon",  4332);
-  
-  pdgDB->AddParticle("Omega(c)0 bar","Omega(c)0 bar",
-                    2.7040, kFALSE, khShGev/0.064e-12, -0.,"Baryon", -4332);
-// mass value from Hijing
-  pdgDB->AddParticle("Omega(c)*0","Omega(c)*0",
-                    2.8000, kFALSE, -1., +0.,"Baryon",  4334);
-  
-  pdgDB->AddParticle("Omega(c)*0 bar","Omega(c)*0",
-                    2.8000, kFALSE, -1., -0.,"Baryon", -4334);
-
-
-// Xi(cc)
-
-  pdgDB->AddParticle("Xsi(cc)+","Xsi(cc)+",
-                    3.60, kTRUE, -1., +1.,"Baryon",  4412);
-
-  pdgDB->AddParticle("Xsi(cc) bar-","Xsi(cc) bar-",
-                    3.60, kTRUE, -1., -1.,"Baryon", -4412);
-
-  pdgDB->AddParticle("Xsi*(cc)+","Xsi*(cc)+",
-                    3.66, kTRUE, -1., +1.,"Baryon",  4414);
-
-  pdgDB->AddParticle("Xsi*(cc) bar-","Xsi*(cc) bar-",
-                    3.66, kTRUE, -1., -1.,"Baryon", -4414);
-
-
-  pdgDB->AddParticle("Xsi(cc)++","Xsi(cc)++",
-                    3.60, kTRUE, -1., +2.,"Baryon",  4422);
-
-  pdgDB->AddParticle("Xsi(cc) bar--","Xsi(cc) bar--",
-                    3.60, kTRUE, -1., -2.,"Baryon", -4422);
-
-
-  pdgDB->AddParticle("Xsi*(cc)++","Xsi*(cc)++",
-                    3.66, kTRUE, -1., +2.,"Baryon",  4424);
-
-  pdgDB->AddParticle("Xsi*(cc) bar-","Xsi*(cc) bar-",
-                    3.66, kTRUE, -1., -2.,"Baryon", -4424);
-
-  pdgDB->AddParticle("Omega(cc)+","Omega(cc)+",
-                    3.78, kTRUE, -1., +1.,"Baryon",  4432);
-
-  pdgDB->AddParticle("Omega(cc) bar-","Omega(cc) bar-",
-                    3.78, kTRUE, -1., -1.,"Baryon", -4432);
-
-  pdgDB->AddParticle("Omega*(cc)+","Omega*(cc)+",
-                    3.82, kTRUE, -1., +1.,"Baryon",  4434);
-
-  pdgDB->AddParticle("Omega*(cc) bar-","Omega*(cc) bar-",
-                    3.82, kTRUE, -1., -1.,"Baryon", -4434);
-
-
-  pdgDB->AddParticle("Omega*(ccc)+","Omega*(cc)++",
-                    4.91, kTRUE, -1., +2.,"Baryon",  4444);
-
-  pdgDB->AddParticle("Omega*(ccc) bar--","Omega*(cc) bar--",
-                    4.91, kTRUE, -1., -2.,"Baryon", -4444);
-
-
-
-// Bottom baryons
-//
-// mass value from Hijing
-  pdgDB->AddParticle("Sigma(b)*+","Sigma(b)*+",
-                    5.8100, kFALSE, -1., +1.,"Baryon", 5224);
-
-  pdgDB->AddParticle("Sigma(b)*-","Sigma(b)*-",
-                    5.8100, kFALSE, -1., -1.,"Baryon", -5224);
-
-
-  pdgDB->AddParticle("Xi(b)0","Xi(b)0",
-                    5.8400, kFALSE, -1., +0.,"Baryon", 5232);
-
-  pdgDB->AddParticle("Xi(b)0 bar","Xi(b)0 bar",
-                    5.8100, kFALSE, -1., -0.,"Baryon", -5232);
-
-// B(s) 
-  pdgDB->AddParticle("Xi'(b)-","Xi'(b)-",
-                    5.9600, kFALSE, -1., -1.,"Baryon", 5312);
-
-  pdgDB->AddParticle("Xi'(b) bar+","Xi'(b) bar+",
-                    5.9600, kFALSE, -1.,  1.,"Baryon", -5312);
-
-  pdgDB->AddParticle("Xi*(b)-","Xi*(b)-",
-                    5.9700, kFALSE, -1., -1.,"Baryon", 5314);
-
-  pdgDB->AddParticle("Xi*(b) bar+","Xi*(b) bar+",
-                    5.9700, kFALSE, -1.,  1.,"Baryon", -5314);
-
-  pdgDB->AddParticle("Xi'(b)0","Xi'(b)0",
-                    5.9600, kFALSE, -1., -0.,"Baryon", 5322);
-
-  pdgDB->AddParticle("Xi'(b) bar0","Xi'(b) bar0",
-                    5.9600, kFALSE, -1.,  0.,"Baryon", -5322);
-
-  pdgDB->AddParticle("Xi*(b)0","Xi*(b)0",
-                    5.9700, kFALSE, -1., -0.,"Baryon", 5324);
-
-  pdgDB->AddParticle("Xi*(b) bar0","Xi*(b) bar0",
-                    5.9700, kFALSE, -1.,  0.,"Baryon", -5324);
-
-  pdgDB->AddParticle("Omega(b)-","Omega(b)-",
-                    6.1200, kFALSE, -1., -1.,"Baryon", 5332);
-
-  pdgDB->AddParticle("Omega(b) bar+","Omega(b) bar+",
-                    6.1200, kFALSE, -1.,  1.,"Baryon", -5332);
-
-  pdgDB->AddParticle("Omega*(b)-","Omega*(b)-",
-                    6.1300, kFALSE, -1., -1.,"Baryon", 5334);
-
-  pdgDB->AddParticle("Omega*(b) bar+","Omega*(b) bar+",
-                    6.1300, kFALSE, -1.,  1.,"Baryon", -5334);
-
-
-  pdgDB->AddParticle("Omega*(b)-","Omega*(b)-",
-                    6.1300, kFALSE, -1., -1.,"Baryon", 5334);
-
-  pdgDB->AddParticle("Omega*(b) bar+","Omega*(b) bar+",
-                    6.1300, kFALSE, -1.,  1.,"Baryon", -5334);
-
-// B(c) 
-
-  pdgDB->AddParticle("Omega(bc)0","Omega(bc)0",
-                    7.1900, kFALSE, -1., -0.,"Baryon", 5342);
-
-  pdgDB->AddParticle("Omega(bc) bar0","Omega(bc) bar0",
-                    7.1900, kFALSE, -1.,  0.,"Baryon", -5342);
-
-  pdgDB->AddParticle("Xi'(bc)0","Xi'(bc)0",
-                    7.0400, kFALSE, -1., -0.,"Baryon", 5412);
-
-  pdgDB->AddParticle("Xi'(bc) bar0","Xi'(bc) bar0",
-                    7.0400, kFALSE, -1.,  0.,"Baryon", -5412);
-
-  pdgDB->AddParticle("Xi*(bc)0","Xi*(bc)0",
-                    7.0500, kFALSE, -1., -0.,"Baryon", 5414);
-
-  pdgDB->AddParticle("Xi*(bc) bar0","Xi*(bc) bar0",
-                    7.0500, kFALSE, -1.,  0.,"Baryon", -5414);
-
-  pdgDB->AddParticle("Xi'(bc)+","Xi'(bc)+",
-                    7.0400, kFALSE, -1., +1.,"Baryon", 5422);
-
-  pdgDB->AddParticle("Xi'(bc) bar-","Xi'(bc) bar-",
-                    7.0400, kFALSE, -1., -1.,"Baryon", -5422);
-
-  pdgDB->AddParticle("Xi*(bc)+","Xi*(bc)+",
-                    7.0500, kFALSE, -1., +1.,"Baryon", 5424);
-
-  pdgDB->AddParticle("Xi*(bc) bar-","Xi*(bc) bar-",
-                    7.0500, kFALSE, -1., -1.,"Baryon", -5424);
-
-  pdgDB->AddParticle("Omega'(bc)0","Omega'(bc)0",
-                    7.2100, kFALSE, -1., -0.,"Baryon", 5432);
+// Ions 
 
-  pdgDB->AddParticle("Omega'(bc) bar0","Omega'(bc) bar0",
-                    7.2100, kFALSE, -1.,  0.,"Baryon", -5432);
-
-  pdgDB->AddParticle("Omega*(bc)0","Omega*(bc)0",
-                    7.2200, kFALSE, -1., -0.,"Baryon", 5434);
-
-  pdgDB->AddParticle("Omega*(bc) bar0","Omega*(bc) bar0",
-                    7.2200, kFALSE, -1.,  0.,"Baryon", -5434);
-// B(bcc)
-  pdgDB->AddParticle("Omega(bcc)+","Omega(bcc)+",
-                    8.3100, kFALSE, -1., +1.,"Baryon", 5442);
-
-  pdgDB->AddParticle("Omega(bcc) bar-","Omega(bcc) bar-",
-                    8.3100, kFALSE, -1., -1.,"Baryon", -5442);
-
-  pdgDB->AddParticle("Omega*(bcc)+","Omega*(bcc)+",
-                   8.3100, kFALSE, -1., +1.,"Baryon", 5444);
-
-  pdgDB->AddParticle("Omega*(bcc) bar-","Omega*(bcc) bar-",
-                    8.3100, kFALSE, -1., -1.,"Baryon", -5444);
-
-
-
-
-// B(bb)
-
-  pdgDB->AddParticle("Xsi(bb)-","Xsi(bb)-",
-                    10.4200, kFALSE, -1., -1.,"Baryon", 5512);
-  
-  pdgDB->AddParticle("Xsi(bb) bar+","Xsi(bb) bar+",
-                    10.4200, kFALSE, -1., +1.,"Baryon", -5512);
-
-  pdgDB->AddParticle("Xsi*(bb)-","Xsi*(bb)-",
-                    10.4400, kFALSE, -1., -1.,"Baryon", 5514);
-  
-  pdgDB->AddParticle("Xsi*(bb) bar+","Xsi*(bb) bar+",
-                    10.4400, kFALSE, -1., +1.,"Baryon", -5514);
-
-  pdgDB->AddParticle("Xsi(bb)0","Xsi(bb)0",
-                    10.4200, kFALSE, -1., -0.,"Baryon", 5522);
-  
-  pdgDB->AddParticle("Xsi(bb) bar0","Xsi(bb) bar0",
-                    10.4200, kFALSE, -1., +0.,"Baryon", -5522);
-
-  pdgDB->AddParticle("Xsi*(bb)0","Xsi*(bb)0",
-                    10.4400, kFALSE, -1., -0.,"Baryon", 5524);
-  
-  pdgDB->AddParticle("Xsi*(bb) bar0","Xsi*(bb) bar0",
-                    10.4400, kFALSE, -1., +0.,"Baryon", -5524);
-
-  pdgDB->AddParticle("Omega*(bb)-","Omega(bb)-",
-                    10.6000, kFALSE, -1., -1.,"Baryon", 5532);
-
-  pdgDB->AddParticle("Omega(bb) bar+","Omega(bb) bar+",
-                    10.6000, kFALSE, -1., +1.,"Baryon", -5532);
-
-  pdgDB->AddParticle("Omega*(bb)-","Omega*(bb)-",
-                    10.6000, kFALSE, -1., -1.,"Baryon", 5534);
-
-  pdgDB->AddParticle("Omega*(bb) bar+","Omega*(bb) bar+",
-                    10.6000, kFALSE, -1., +1.,"Baryon", -5534);
-
-// B(bbc)
-
-  pdgDB->AddParticle("Omega(bbc)0","Omega(bbc)0",
-                    11.7100, kFALSE, -1., -0.,"Baryon", 5542);
-
-  pdgDB->AddParticle("Omega(bbc) bar0","Omega(bbc) bar0",
-                    11.7100, kFALSE, -1., +0.,"Baryon", -5542);
-
-  pdgDB->AddParticle("Omega*(bbc)0","Omega*(bbc)0",
-                    11.7100, kFALSE, -1., -0.,"Baryon", 5544);
-
-  pdgDB->AddParticle("Omega*(bbc) bar0","Omega*(bbc) bar0",
-                    11.7100, kFALSE, -1., +0.,"Baryon", -5544);
-// B(bbb)
-
-  pdgDB->AddParticle("Omega*(bbb)-","Omega*(bbb)-",
-                    15.1000, kFALSE, -1., -1.,"Baryon", 5544);
-
-  pdgDB->AddParticle("Omega*(bbb) bar+","Omega*(bbb) bar+",
-                    15.100, kFALSE, -1., +1.,"Baryon", -5544);
-
-//
-//
-  pdgDB->AddParticle("Deuteron","Deuteron",2*kAu2Gev+8.071e-3,kTRUE,
-                    0,1,"Ion",kion+10020);
   fPDGCode[fNPDGCodes++]=kion+10020;   // 45 = Deuteron
 
-  pdgDB->AddParticle("Triton","Triton",3*kAu2Gev+14.931e-3,kFALSE,
-                    khShGev/(12.33*kYear2Sec),1,"Ion",kion+10030);
   fPDGCode[fNPDGCodes++]=kion+10030;   // 46 = Triton
 
-  pdgDB->AddParticle("Alpha","Alpha",4*kAu2Gev+2.424e-3,kTRUE,
-                    khShGev/(12.33*kYear2Sec),2,"Ion",kion+20040);
   fPDGCode[fNPDGCodes++]=kion+20040;   // 47 = Alpha
 
-  fPDGCode[fNPDGCodes++]=0;   // 48 = geantino mapped to rootino
+  fPDGCode[fNPDGCodes++]=0;            // 48 = geantino mapped to rootino
 
-  pdgDB->AddParticle("HE3","HE3",3*kAu2Gev+14.931e-3,kFALSE,
-                    0,2,"Ion",kion+20030);
   fPDGCode[fNPDGCodes++]=kion+20030;   // 49 = HE3
 
-  pdgDB->AddParticle("Cherenkov","Cherenkov",0,kFALSE,
-                    0,0,"Special",kspe+50);
-  fPDGCode[fNPDGCodes++]=kspe+50;   // 50 = Cherenkov
-
+  fPDGCode[fNPDGCodes++]=kspe+50;      // 50 = Cherenkov
+// special 
   Gspart(51, "FeedbackPhoton", 7, 0., 0.,1.e20 );
-  pdgDB->AddParticle("FeedbackPhoton","FeedbackPhoton",0,kFALSE,
-                    0,0,"Special",kspe+51);
-  fPDGCode[fNPDGCodes++]=kspe+51;   // 51 = FeedbackPhoton
+  fPDGCode[fNPDGCodes++]=kspe+51;      // 51 = FeedbackPhoton
+//
   Gspart(52, "Lambda_c+", 4, 2.2849, +1., 2.06e-13);
-  fPDGCode[fNPDGCodes++]=4122;   //52 = Lambda_c+
+  fPDGCode[fNPDGCodes++]=4122;         //52 = Lambda_c+
 
   Gspart(53, "Lambda_c-", 4, 2.2849, -1., 2.06e-13);
-  fPDGCode[fNPDGCodes++]=-4122; //53 = Lambda_c-  
+  fPDGCode[fNPDGCodes++]=-4122;        //53 = Lambda_c-  
 
   Gspart(54, "D_s+", 4, 1.9685, +1., 4.67e-13);
-  fPDGCode[fNPDGCodes++]=431;   //54 = D_s+
+  fPDGCode[fNPDGCodes++]=431;          //54 = D_s+
 
   Gspart(55, "D_s-", 4, 1.9685, -1., 4.67e-13);
-  fPDGCode[fNPDGCodes++]=-431; //55 = D_s-
+  fPDGCode[fNPDGCodes++]=-431;         //55 = D_s-
 
   Gspart(56, "Tau+", 5, 1.77705, +1., 2.9e-13);
-  fPDGCode[fNPDGCodes++]=15;   //56 = Tau+
+  fPDGCode[fNPDGCodes++]=15;           //56 = Tau+
 
   Gspart(57, "Tau-", 5, 1.77705, -1., 2.9e-13);
-  fPDGCode[fNPDGCodes++]=-15;  //57 = Tau-  
+  fPDGCode[fNPDGCodes++]=-15;          //57 = Tau-  
 
   Gspart(58, "B0",     3, 5.2792, +0., 1.56e-12);
-  fPDGCode[fNPDGCodes++]=511;   //58 = B0
+  fPDGCode[fNPDGCodes++]=511;          //58 = B0
 
   Gspart(59, "B0 bar", 3, 5.2792, -0., 1.56e-12);
-  fPDGCode[fNPDGCodes++]=-511;  //58 = B0bar
+  fPDGCode[fNPDGCodes++]=-511;         //58 = B0bar
 
   Gspart(60, "B+",     4, 5.2789, +1., 1.65e-12);
-  fPDGCode[fNPDGCodes++]=521;   //60 = B+
+  fPDGCode[fNPDGCodes++]=521;          //60 = B+
 
   Gspart(61, "B-",     4, 5.2789, -1., 1.65e-12);
-  fPDGCode[fNPDGCodes++]=-521;  //61 = B-
+  fPDGCode[fNPDGCodes++]=-521;         //61 = B-
 
   Gspart(62, "Bs",     3, 5.3693, +0., 1.54e-12);
-  fPDGCode[fNPDGCodes++]=521;   //62 = B_s
+  fPDGCode[fNPDGCodes++]=531;          //62 = B_s
 
   Gspart(63, "Bs bar", 3, 5.3693, -0., 1.54e-12);
-  fPDGCode[fNPDGCodes++]=-521;  //63 = B_s bar
+  fPDGCode[fNPDGCodes++]=-531;         //63 = B_s bar
 
   Gspart(64, "Lambda_b",     3, 5.624, +0., 1.24e-12);
-  fPDGCode[fNPDGCodes++]=5122;   //64 = Lambda_b
+  fPDGCode[fNPDGCodes++]=5122;         //64 = Lambda_b
 
   Gspart(65, "Lambda_b bar", 3, 5.624, -0., 1.24e-12);
-  fPDGCode[fNPDGCodes++]=-5122;  //65 = Lambda_b bar
+  fPDGCode[fNPDGCodes++]=-5122;        //65 = Lambda_b bar
+
+  Gspart(66, "J/Psi",       3, 3.09688, 0., 0.);
+  fPDGCode[fNPDGCodes++]=443;          // 66 = J/Psi
+
+  Gspart(67, "Psi Prime",   3, 3.686,   0., 0.);
+  fPDGCode[fNPDGCodes++]=20443;        // 67 = Psi prime
+
+  Gspart(68, "Upsilon(1S)", 3, 9.46037, 0., 0.);
+  fPDGCode[fNPDGCodes++]=553;          // 68 = Upsilon(1S)
+
+  Gspart(69, "Upsilon(2S)", 3, 10.0233, 0., 0.);
+  fPDGCode[fNPDGCodes++]=20553;        // 69 = Upsilon(2S)
 
-  Gspart(66, "J/Psi", 3.09688, 3, 0., 0.);
-  fPDGCode[fNPDGCodes++]=443;       // 66 = J/Psi
+  Gspart(70, "Upsilon(3S)", 3, 10.3553, 0., 0.);
+  fPDGCode[fNPDGCodes++]=30553;        // 70 = Upsilon(3S)
 
-  Gspart(67, "Psi Prime", 3, 3.686, 0., 0.);
-  fPDGCode[fNPDGCodes++]=20443;    // 67 = Psi prime
+  Gspart(71, "Anti Neutrino (e)",       3, 0., 0., 1.e20);
+  fPDGCode[fNPDGCodes++]=-12;          // 71 = anti electron neutrino 
 
-  Gspart(68, "Upsilon(1S)", 9.46037, 3, 0., 0.);
-  fPDGCode[fNPDGCodes++]=553;       // 68 = Upsilon(1S)
+  Gspart(72, "Neutrino (mu)",           3, 0., 0., 1.e20);
+  fPDGCode[fNPDGCodes++]=14;           // 72 = muon neutrino 
 
-  Gspart(69, "Upsilon(2S)", 10.0233, 3, 0., 0.);
-  fPDGCode[fNPDGCodes++]=20553;       // 69 = Upsilon(2S)
+  Gspart(73, "Anti Neutrino (mu)", 3, 0., 0., 1.e20);
+  fPDGCode[fNPDGCodes++]=-14;          // 73 = anti muon neutrino
 
-  Gspart(70, "Upsilon(3S)", 10.3553, 3, 0., 0.);
-  fPDGCode[fNPDGCodes++]=30553;       // 70 = Upsilon(3S)
+  Gspart(74, "Neutrino (tau)",     3, 0., 0., 1.e20);
+  fPDGCode[fNPDGCodes++]=16;           // 74 = tau neutrino 
+
+  Gspart(75, "Anti Neutrino (tau)",3, 0., 0., 1.e20);
+  fPDGCode[fNPDGCodes++]=-16;          // 75 = anti tau neutrino
 
 /* --- Define additional decay modes --- */
 /* --- omega(783) --- */
@@ -1426,7 +1175,8 @@ void TGeant3::DefineParticles()
     ipa = 115;
     Gsdk(ipa, bratio, mode);
     */
-
+//
+    AliPDG::AddParticlesToPdgDataBase();
 }
 
 //_____________________________________________________________________________
@@ -1486,9 +1236,9 @@ void    TGeant3::SetCut(const char* cutName, Float_t cutValue)
   //
   if(!strcmp(cutName,"CUTGAM")) 
     fGccuts->cutgam=cutValue; 
-  else if(!strcmp(cutName,"CUTGAM")) 
-    fGccuts->cutele=cutValue; 
   else if(!strcmp(cutName,"CUTELE")) 
+    fGccuts->cutele=cutValue; 
+  else if(!strcmp(cutName,"CUTNEU")) 
     fGccuts->cutneu=cutValue; 
   else if(!strcmp(cutName,"CUTHAD")) 
     fGccuts->cuthad=cutValue; 
@@ -1718,14 +1468,13 @@ Int_t   TGeant3::CurrentEvent() const
 }
 
 //_____________________________________________________________________________
-AliMCProcess TGeant3::ProdProcess() const
+AliMCProcess TGeant3::ProdProcess(Int_t ) const
 {
   //
   // Name of the process that has produced the secondary particles
   // in the current step
   //
-  const Int_t kIpMec[13] = { 5,6,7,8,9,10,11,12,21,23,25,105,108 };
-  const Int_t kIpProc[13] = { kPDecay, kPPair, kPCompton, 
+  const AliMCProcess kIpProc[13] = { kPDecay, kPPair, kPCompton, 
                              kPPhotoelectric, kPBrem, kPDeltaRay,
                              kPAnnihilation, kPHadronic, 
                              kPMuonNuclear, kPPhotoFission,
@@ -1735,12 +1484,56 @@ AliMCProcess TGeant3::ProdProcess() const
   if(fGcking->ngkine>0) 
     for (km = 0; km < fGctrak->nmec; ++km) 
       for (im = 0; im < 13; ++im) 
-       if (fGctrak->lmec[km] == kIpMec[im]) 
-           return (AliMCProcess) kIpProc[im];
+       if (G3toVMC(fGctrak->lmec[km]) == kIpProc[im]) 
+           return kIpProc[im];
   //  
-  return (AliMCProcess) kPNoProcess;
+  return kPNoProcess;
 }
 
+//_____________________________________________________________________________
+Int_t TGeant3::StepProcesses(TArrayI &proc) const
+{
+  //
+  // Return processes active in the current step
+  //
+  Int_t i;
+  Int_t nproc=Gctrak()->nmec;
+  //
+  proc.Set(nproc);
+  Int_t nvproc=0;
+  //
+  for (i=0; i<nproc; ++i) 
+    if((proc[nvproc]=G3toVMC(Gctrak()->lmec[i]))!=kPNoProcess) nvproc++;
+  //
+  proc.Set(nvproc);
+  //
+  return nvproc;
+}
+
+//_____________________________________________________________________________
+AliMCProcess TGeant3::G3toVMC(Int_t iproc) const
+{
+  //
+  // Conversion between GEANT and AliMC processes
+  //
+  
+  const AliMCProcess kPG2MC1[30] = {kPNoProcess, kPMultipleScattering, kPEnergyLoss, kPMagneticFieldL, kPDecay, 
+                            kPPair, kPCompton, kPPhotoelectric, kPBrem, kPDeltaRay,
+                            kPAnnihilation, kPHadronic, kPNoProcess, kPEvaporation, kPNuclearFission, 
+                            kPNuclearAbsorption, kPPbarAnnihilation, kPNCapture, kPHElastic, kPHInhelastic,
+                            kPMuonNuclear, kPTOFlimit, kPPhotoFission, kPNoProcess, kPRayleigh,
+                            kPNoProcess, kPNoProcess, kPNoProcess, kPNull, kPStop};
+  
+  const AliMCProcess kPG2MC2[9] = {kPLightAbsorption, kPLightScattering, kStepMax, kPNoProcess, kPCerenkov,
+                           kPLightReflection, kPLightRefraction, kPSynchrotron, kPNoProcess};
+
+  AliMCProcess proc=kPNoProcess;
+  if(1<iproc && iproc<=30) proc= kPG2MC1[iproc-1];
+  else if(101<=iproc && iproc<=109) proc= kPG2MC2[iproc-100-1];
+  return proc;
+}
+
+
 //_____________________________________________________________________________
 void    TGeant3::GetSecondary(Int_t isec, Int_t& ipart, 
                              TLorentzVector &x, TLorentzVector &p)
@@ -2372,7 +2165,29 @@ void  TGeant3::Gstmed(Int_t numed, const char *name, Int_t nmat, Int_t isvol,
  
 //_____________________________________________________________________________
 void  TGeant3::Gsckov(Int_t itmed, Int_t npckov, Float_t *ppckov,
-                     Float_t *absco, Float_t *effic, Float_t *rindex)
+                          Float_t *absco, Float_t *effic, Float_t *rindex)
+{ 
+  //
+  //    Stores the tables for UV photon tracking in medium ITMED 
+  //    Please note that it is the user's responsability to 
+  //    provide all the coefficients:
+  //
+  //
+  //       ITMED       Tracking medium number
+  //       NPCKOV      Number of bins of each table
+  //       PPCKOV      Value of photon momentum (in GeV)
+  //       ABSCO       Absorbtion coefficients 
+  //                   dielectric: absorbtion length in cm
+  //                   metals    : absorbtion fraction (0<=x<=1)
+  //       EFFIC       Detection efficiency for UV photons 
+  //       RINDEX      Refraction index (if=0 metal)
+  //
+  gsckov(itmed,npckov,ppckov,absco,effic,rindex);
+}
+
+//_____________________________________________________________________________
+void  TGeant3::SetCerenkov(Int_t itmed, Int_t npckov, Float_t *ppckov,
+                          Float_t *absco, Float_t *effic, Float_t *rindex)
 { 
   //
   //    Stores the tables for UV photon tracking in medium ITMED 
@@ -4076,7 +3891,7 @@ void TGeant3::WriteEuclid(const char* filnam, const char* topvol,
   Float_t zc, densc, radlc, abslc, c0, tmaxfd;
   Int_t nparc, numb;
   Int_t iomate[100], iotmed[100];
-  Float_t par[50], att[20], ubuf[50];
+  Float_t par[100], att[20], ubuf[50];
   Float_t *qws;
   Int_t   *iws;
   Int_t level, ndiv, iaxe;