Introduce SetUserDecay. The standard MC decay (if any) is bypassed and a
authorfca <fca@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 10 Jun 1999 17:02:58 +0000 (17:02 +0000)
committerfca <fca@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 10 Jun 1999 17:02:58 +0000 (17:02 +0000)
user decay routine is called. Still a function to set the user decay routine
is missing. Also added in TGeant3 a pointer to GCBANK to get access to the
IXCONS variable for ZEBRA.

TGeant3/TGeant3.cxx
TGeant3/TGeant3.h
TGeant3/TGeant3Dummy.cxx

index a501513..7027118 100644 (file)
 # define gckpar  gckpar_
 # define gckmat  gckmat_
 # define geditv  geditv_
+# define mzdrop  mzdrop_
  
 # define setbomb setbomb_
 # define setclip setclip_
 # define gckpar  GCKPAR
 # define gckmat  GCKMAT
 # define geditv  GEDITV
+# define mzdrop  MZDROP 
 
 # define setbomb SETBOMB
 # define setclip SETCLIP
-# define gcomad GCOMAD
+# define gcomad  GCOMAD
  
 #endif 
 
@@ -396,6 +398,8 @@ extern "C"
                           const int&, const int&, const int& DEFCHARL
                           DEFCHARL); 
 
+  void type_of_call mzdrop(Int_t&, Int_t&, DEFCHARD DEFCHARL);
+
   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); 
@@ -486,6 +490,7 @@ void TGeant3::LoadAddress()
   //
   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("GCFLAG"),(int*&) fGcflag  PASSCHARL("GCFLAG"));
@@ -2951,6 +2956,27 @@ void TGeant3::SetTRIG(Int_t nevents)
   fGcflag->nevent = nevents;
 }
  
+//_____________________________________________________________________________
+void TGeant3::SetUserDecay(Int_t ipart)
+{
+  //
+  // Force the decays of particles to be done with Pythia
+  // and not with the Geant routines. 
+  // just kill pointers doing mzdrop
+  //
+  Int_t jpart=fGclink->jpart;
+  Int_t jpa=fZlq[jpart-ipart];
+  //
+  if(jpart && jpa) {
+    Int_t jpa1=fZlq[jpa-1];
+    if(jpa1)
+      mzdrop(fGcbank->ixcons,jpa1,PASSCHARD(" ") PASSCHARL(" "));
+    Int_t jpa2=fZlq[jpa-2];
+    if(jpa2)
+      mzdrop(fGcbank->ixcons,jpa2,PASSCHARD(" ") PASSCHARL(" "));
+  }
+}
+
 //______________________________________________________________________________
 void TGeant3::Vname(const char *name, char *vname)
 {
index b993717..701ba60 100644 (file)
@@ -19,6 +19,21 @@ typedef struct {
   Int_t    iquest[100]; 
 } Quest_t; 
  
+//----------GCBANK
+//      COMMON/GCBANK/NZEBRA,GVERSN,ZVERSN,IXSTOR,IXDIV,IXCONS,FENDQ(16)
+//     +             ,LMAIN,LR1,WS(KWBANK)
+typedef struct {
+  Int_t nzebra;
+  Float_t gversn;
+  Float_t zversn;
+  Int_t ixstor;
+  Int_t ixdiv;
+  Int_t ixcons;
+  Float_t fendq[16];
+  Int_t lmain;
+  Int_t lr1;
+} Gcbank_t;
+
 //----------GCLINK 
 //      COMMON/GCLINK/JDIGI ,JDRAW ,JHEAD ,JHITS ,JKINE ,JMATE ,JPART 
 //     +      ,JROTM ,JRUNG ,JSET  ,JSTAK ,JGSTAT,JTMED ,JTRACK,JVERTX 
@@ -386,6 +401,7 @@ private:
   Float_t *fZq; 
 
   Quest_t  *fQuest; 
+  Gcbank_t *fGcbank;
   Gclink_t *fGclink; 
   Gccuts_t *fGccuts; 
   Gcmate_t *fGcmate; 
@@ -479,6 +495,7 @@ public:
   // access functions to commons
  
   virtual Quest_t* Quest() const {return fQuest;}
+  virtual Gcbank_t* Gcbank() const {return fGcbank;}
   virtual Gclink_t* Gclink() const {return fGclink;}
   virtual Gccuts_t* Gccuts() const {return fGccuts;}
   virtual Gcmate_t* Gcmate() const {return fGcmate;}
@@ -646,6 +663,7 @@ public:
    virtual  void  SetRAYL(Int_t par=1);
    virtual  void  SetSWIT(Int_t sw, Int_t val=1);
    virtual  void  SetTRIG(Int_t nevents=1);
+   virtual  void  SetUserDecay(Int_t ipart);
 
    virtual  void  Vname(const char *name, char *vname);
 
index f758fe5..37da746 100644 (file)
@@ -232,6 +232,7 @@ void TGeant3::SetPHOT(Int_t)  {}
 void TGeant3::SetRAYL(Int_t)  {}
 void TGeant3::SetSWIT(Int_t , Int_t)  {}
 void TGeant3::SetTRIG(Int_t)  {}
+void TGeant3::SetUserDecay(Int_t) {}
 void TGeant3::Vname(const char *, char *) {}
 void TGeant3::InitLego() {}