#include <Riostream.h>
-#ifndef WITH_ROOT
#include "TFluka.h"
-#else
-#include "TFlukaGeo.h"
-#endif
-
+#include "TFlukaCodes.h"
+#include "TFlukaMCGeometry.h"
#include "Fdimpar.h" //(DIMPAR) fluka include
#include "Ftrackr.h" //(TRACKR) fluka common
+#include "Fltclcm.h" //(LTCLCM) fluka common
#ifndef WIN32
# define bxdraw bxdraw_
#else
Double_t& xsco, Double_t& ysco, Double_t& zsco)
{
TFluka* fluka = (TFluka*) gMC;
-
- fluka->SetIcode(icode);
- fluka->SetNewreg(newreg);
+ Int_t oldlttc = LTCLCM.mlatm1;
+ Int_t newlttc = LTCLCM.newlat;
+ fluka->SetIcode((FlukaProcessCode_t)icode);
+ fluka->SetNewreg(newreg,newlttc);
fluka->SetXsco(xsco);
fluka->SetYsco(ysco);
fluka->SetZsco(zsco);
+ Int_t verbosityLevel = fluka->GetVerbosityLevel();
+ Bool_t debug = (verbosityLevel>=3)?kTRUE:kFALSE;
//
// Double step for boundary crossing
//
- printf("bxdraw (ex) \n");
- fluka->SetTrackIsExiting();
- fluka->SetCaller(12);
- fluka->SetMreg(mreg);
- (TVirtualMCApplication::Instance())->Stepping();
- printf("bxdraw (en) \n");
- fluka->SetCaller(11);
- fluka->SetTrackIsEntering();
- fluka->SetMreg(newreg);
- (TVirtualMCApplication::Instance())->Stepping();
- fluka->SetTrackIsNew(kFALSE);
+ fluka->SetTrackIsNew(kFALSE); // has to be called BEFORE Stepping()
+ if (mreg != fluka->GetDummyRegion()) {
+ if (debug) printf("bxdraw (ex) \n");
+ fluka->SetTrackIsExiting();
+ fluka->SetCaller(kBXExiting);
+ fluka->SetMreg(mreg,oldlttc);
+ TVirtualMCStack* cppstack = fluka->GetStack();
+ cppstack->SetCurrentTrack( TRACKR.ispusr[mkbmx2-1] );
+ (TVirtualMCApplication::Instance())->Stepping();
+ }
+ if (newreg != fluka->GetDummyRegion()) {
+ if (debug) printf("bxdraw (en) \n");
+ fluka->SetCaller(kBXEntering);
+ fluka->SetTrackIsEntering();
+ if (fluka->GetDummyBoundary() == 1) fluka->SetDummyBoundary(2);
+ fluka->SetMreg(newreg,newlttc);
+ TVirtualMCStack* cppstack = fluka->GetStack();
+ cppstack->SetCurrentTrack( TRACKR.ispusr[mkbmx2-1] );
+ (TVirtualMCApplication::Instance())->Stepping();
+ }
+
} // end of bxdraw
} // end of extern "C"