Introduce wrappers for GEANE
[u/mrichter/AliRoot.git] / TGeant3 / TGeant3.cxx
index d16b14ab59e0ff0ea40ce85cc0d4124179435277..ac2f19bcab20ff686d4dfd33b0fedd98ccc8114c 100644 (file)
 # define gckmat  gckmat_
 # define geditv  geditv_
 # define mzdrop  mzdrop_
+
+# define ertrak  ertrak_
+# define ertrgo  ertrgo_
  
 # define setbomb setbomb_
 # define setclip setclip_
 # define geditv  GEDITV
 # define mzdrop  MZDROP 
 
+# define ertrak  ERTRAK
+# define ertrgo  ERTRGO
 # define setbomb SETBOMB
 # define setclip SETCLIP
 # define gcomad  GCOMAD
@@ -409,6 +415,12 @@ extern "C"
   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 ertrak(const Float_t *const x1, const Float_t *const p1,
+                          const Float_t *x2, const Float_t *p2,
+                          const Int_t &ipa, DEFCHARD DEFCHARL);
+
+  void type_of_call ertrgo();
 }
 
 //
@@ -557,50 +569,88 @@ Int_t TGeant3::NextVolUp(Text_t *name, Int_t &copy)
 }
 
 //_____________________________________________________________________________
-Int_t TGeant3::CurrentVol(Text_t *name, Int_t &copy) const
+Int_t TGeant3::CurrentVolID(Int_t &copy) const
 {
   //
-  // Returns the current volume ID, name and copy number
-  // if name=0 no name is returned
+  // Returns the current volume ID and copy number
   //
   Int_t i, gname;
   if( (i=fGcvolu->nlevel-1) < 0 ) {
-    printf("CurrentVol: stack depth %d\n",fGcvolu->nlevel);
+    Warning("CurrentVolID","Stack depth only %d\n",fGcvolu->nlevel);
   } else {
     gname=fGcvolu->names[i];
-    if(name) {
-      strncpy(name,(char *) &gname, 4);
-      name[4]='\0';
-    }
     copy=fGcvolu->number[i];
     i=fGcvolu->lvolum[i];   
     if(gname == fZiq[fGclink->jvolum+i]) return i;
-    else printf("CurrentVol: Volume %s not found in bank\n",name);
+    else Warning("CurrentVolID","Volume %4s not found\n",(char*)&gname);
   }
   return 0;
 }
 
 //_____________________________________________________________________________
-Int_t TGeant3::CurrentVolOff(Int_t off, Text_t *name, Int_t &copy) const
+Int_t TGeant3::CurrentVolOffID(Int_t off, Int_t &copy) const
 {
   //
   // Return the current volume "off" upward in the geometrical tree 
-  // ID, name and copy number
-  // if name=0 no name is returned
+  // ID and copy number
   //
   Int_t i, gname;
   if( (i=fGcvolu->nlevel-off-1) < 0 ) {
-    printf("CurrentVolOff: Offset requested %d but stack depth %d\n",off,fGcvolu->nlevel);
+    Warning("CurrentVolOffID","Offset requested %d but stack depth %d\n",
+           off,fGcvolu->nlevel);
   } else {
     gname=fGcvolu->names[i];
-    if(name) {
-      strncpy(name,(char *) &gname, 4);
-      name[4]='\0';
-    }
     copy=fGcvolu->number[i];          
     i=fGcvolu->lvolum[i];    
     if(gname == fZiq[fGclink->jvolum+i]) return i;
-    else printf("CurrentVolOff: Volume %s not found in bank\n",name);
+    else Warning("CurrentVolOffID","Volume %4s not found\n",(char*)&gname);
+  }
+  return 0;
+}
+
+//_____________________________________________________________________________
+const char* TGeant3::CurrentVolName() const
+{
+  //
+  // Returns the current volume name
+  //
+  Int_t i, gname;
+  char *name;
+  if( (i=fGcvolu->nlevel-1) < 0 ) {
+    Warning("CurrentVolName","Stack depth %d\n",fGcvolu->nlevel);
+  } else {
+    gname=fGcvolu->names[i];
+    name = new char[5];
+    strncpy(name,(char *) &gname, 4);
+    name[4]='\0';
+    i=fGcvolu->lvolum[i];   
+    if(gname == fZiq[fGclink->jvolum+i]) return name;
+    else Warning("CurrentVolName","Volume %4s not found\n",name);
+  }
+  return 0;
+}
+
+//_____________________________________________________________________________
+const char* TGeant3::CurrentVolOffName(Int_t off) const
+{
+  //
+  // Return the current volume "off" upward in the geometrical tree 
+  // ID, name and copy number
+  // if name=0 no name is returned
+  //
+  Int_t i, gname;
+  char *name;
+  if( (i=fGcvolu->nlevel-off-1) < 0 ) {
+    Warning("CurrentVolOffName",
+           "Offset requested %d but stack depth %d\n",off,fGcvolu->nlevel);
+  } else {
+    gname=fGcvolu->names[i];
+    name = new char[5];
+    strncpy(name,(char *) &gname, 4);
+    name[4]='\0';
+    i=fGcvolu->lvolum[i];    
+    if(gname == fZiq[fGclink->jvolum+i]) return name;
+    else Warning("CurrentVolOffName","Volume %4s not found\n",name);
   }
   return 0;
 }
@@ -920,7 +970,7 @@ const char* TGeant3::VolName(Int_t id) const
 }
 
 //_____________________________________________________________________________
-void TGeant3::TrackPosition(Float_t *xyz) const
+void TGeant3::TrackPosition(TLorentzVector &xyz) const
 {
   //
   // Return the current position in the master reference frame of the
@@ -929,6 +979,7 @@ void TGeant3::TrackPosition(Float_t *xyz) const
   xyz[0]=fGctrak->vect[0];
   xyz[1]=fGctrak->vect[1];
   xyz[2]=fGctrak->vect[2];
+  xyz[3]=fGctrak->tofg;
 }
 
 //_____________________________________________________________________________
@@ -941,16 +992,17 @@ Float_t TGeant3::TrackTime() const
 }
 
 //_____________________________________________________________________________
-void TGeant3::TrackMomentum(Float_t *xyz) const
+void TGeant3::TrackMomentum(TLorentzVector &xyz) const
 {
   //
   // Return the direction and the momentum (GeV/c) of the track
   // currently being transported
   //
-  xyz[0]=fGctrak->vect[3];
-  xyz[1]=fGctrak->vect[4];
-  xyz[2]=fGctrak->vect[5];
-  xyz[3]=fGctrak->vect[6];  
+  Double_t ptot=fGctrak->vect[6];
+  xyz[0]=fGctrak->vect[3]*ptot;
+  xyz[1]=fGctrak->vect[4]*ptot;
+  xyz[2]=fGctrak->vect[5]*ptot;
+  xyz[3]=fGctrak->getot;
 }
 
 //_____________________________________________________________________________
@@ -977,7 +1029,7 @@ Int_t TGeant3::TrackPid() const
   //
   // Return the id of the particle transported
   //
-  return fGckine->ipart;
+  return PDGFromId(fGckine->ipart);
 }
 
 //_____________________________________________________________________________
@@ -999,7 +1051,7 @@ Float_t TGeant3::TrackLength() const
 }
 
 //_____________________________________________________________________________
-Bool_t TGeant3::TrackInside() const
+Bool_t TGeant3::IsTrackInside() const
 {
   //
   // True if the track is not at the boundary of the current volume
@@ -1008,7 +1060,7 @@ Bool_t TGeant3::TrackInside() const
 }
 
 //_____________________________________________________________________________
-Bool_t TGeant3::TrackEntering() const
+Bool_t TGeant3::IsTrackEntering() const
 {
   //
   // True if this is the first step of the track in the current volume
@@ -1017,7 +1069,7 @@ Bool_t TGeant3::TrackEntering() const
 }
 
 //_____________________________________________________________________________
-Bool_t TGeant3::TrackExiting() const
+Bool_t TGeant3::IsTrackExiting() const
 {
   //
   // True if this is the last step of the track in the current volume
@@ -1026,7 +1078,7 @@ Bool_t TGeant3::TrackExiting() const
 }
 
 //_____________________________________________________________________________
-Bool_t TGeant3::TrackOut() const
+Bool_t TGeant3::IsTrackOut() const
 {
   //
   // True if the track is out of the setup
@@ -1035,7 +1087,7 @@ Bool_t TGeant3::TrackOut() const
 }
 
 //_____________________________________________________________________________
-Bool_t TGeant3::TrackStop() const
+Bool_t TGeant3::IsTrackStop() const
 {
   //
   // True if the track energy has fallen below the threshold 
@@ -1121,7 +1173,7 @@ void TGeant3::InitLego()
 }
 
 //_____________________________________________________________________________
-Bool_t TGeant3::TrackDisappear() const
+Bool_t TGeant3::IsTrackDisappeared() const
 {
   //
   // True if the current particle has disappered
@@ -1132,7 +1184,7 @@ Bool_t TGeant3::TrackDisappear() const
 }
 
 //_____________________________________________________________________________
-Bool_t TGeant3::TrackAlive() const
+Bool_t TGeant3::IsTrackAlive() const
 {
   //
   // True if the current particle is alive and will continue to be
@@ -1371,31 +1423,6 @@ void TGeant3::Matrix(Int_t& krot, Float_t thex, Float_t phix, Float_t they,
   gsrotm(krot, thex, phix, they, phiy, thez, phiz);
 }
 
-//_____________________________________________________________________________
-void TGeant3::GetParticle(const Int_t pdg, char *name, Float_t &mass) const
-{
-  Int_t ipart = IdFromPDG(pdg);
-  if(ipart<0) {
-    printf("Particle %d not in geant\n",pdg);
-    name=new char[7];
-    strcpy(name,"Unknown");
-    mass=-1;
-    return;
-  }
-  //
-  // Return name and mass of particle code ipart
-  // Geant321 conventions
-  //
-  Int_t hname[6];
-  Int_t jpart=fGclink->jpart;
-  Int_t jpa=fZlq[jpart-ipart];
-  //
-  for(Int_t i=1; i<6; i++) hname[i-1]=fZiq[jpa+i];
-  hname[5]=0;
-  strncpy(name,(char *)hname, 21);
-  mass=fZq[jpa+7];
-}
-
 //_____________________________________________________________________________
 Int_t TGeant3::GetMedium() const
 {
@@ -1605,7 +1632,8 @@ void  TGeant3::Gfpart(Int_t ipart, char *name, Int_t &itrtyp,
   //
   Float_t *ubuf=0; 
   Int_t   nbuf; 
-  gfpart(ipart, PASSCHARD(name), itrtyp, amass, charge, tlife, ubuf, nbuf
+  Int_t igpart = IdFromPDG(ipart);
+  gfpart(igpart, PASSCHARD(name), itrtyp, amass, charge, tlife, ubuf, nbuf
         PASSCHARL(name)); 
 } 
  
@@ -3297,6 +3325,20 @@ void TGeant3::Vname(const char *name, char *vname)
   vname[4] = 0;      
 }
  
+//______________________________________________________________________________
+void TGeant3::Ertrgo()
+{
+  ertrgo();
+}
+
+//______________________________________________________________________________
+void TGeant3::Ertrak(const Float_t *const x1, const Float_t *const p1, 
+                       const Float_t *x2, const Float_t *p2,
+                       Int_t ipa,  Option_t *chopt)
+{
+  ertrak(x1,p1,x2,p2,ipa,PASSCHARD(chopt) PASSCHARL(chopt));
+}
+        
 //_____________________________________________________________________________
 void TGeant3::WriteEuclid(const char* filnam, const char* topvol,
                          Int_t number, Int_t nlevel)