From 7ac3f11b4b307a37acc059871e192dd2e0a85bab Mon Sep 17 00:00:00 2001 From: fca Date: Thu, 10 Jun 1999 17:02:58 +0000 Subject: [PATCH] Introduce SetUserDecay. The standard MC decay (if any) is bypassed and a 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 | 28 +++++++++++++++++++++++++++- TGeant3/TGeant3.h | 18 ++++++++++++++++++ TGeant3/TGeant3Dummy.cxx | 1 + 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/TGeant3/TGeant3.cxx b/TGeant3/TGeant3.cxx index a501513c37f..702711836f9 100644 --- a/TGeant3/TGeant3.cxx +++ b/TGeant3/TGeant3.cxx @@ -101,6 +101,7 @@ # define gckpar gckpar_ # define gckmat gckmat_ # define geditv geditv_ +# define mzdrop mzdrop_ # define setbomb setbomb_ # define setclip setclip_ @@ -191,10 +192,11 @@ # 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) { diff --git a/TGeant3/TGeant3.h b/TGeant3/TGeant3.h index b9937175943..701ba60e88d 100644 --- a/TGeant3/TGeant3.h +++ b/TGeant3/TGeant3.h @@ -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); diff --git a/TGeant3/TGeant3Dummy.cxx b/TGeant3/TGeant3Dummy.cxx index f758fe5caca..37da74605c1 100644 --- a/TGeant3/TGeant3Dummy.cxx +++ b/TGeant3/TGeant3Dummy.cxx @@ -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() {} -- 2.43.0