gAlice replaced by TVirtualMCApplication::Instance()
[u/mrichter/AliRoot.git] / TFluka / mgdraw.cxx
index 5d1d4dc172d84b77c8feb1f1b5600f4091949341..da179f486178397065726474a140cb61eec86fd0 100644 (file)
@@ -1,5 +1,5 @@
 #include <Riostream.h>
-#include "AliRun.h"
+#include "TVirtualMCApplication.h"
 #include "TFluka.h"
 #ifndef WIN32
 # define mgdraw mgdraw_
 extern "C" {
 void mgdraw(Int_t& icode, Int_t& mreg)
 {
-  ((TFluka*) gMC)->SetIcode(icode);
-  ((TFluka*) gMC)->SetMreg(mreg);
-  cout << endl << " !!! I am in mgdraw - calling gAlice->Stepping()" << endl;
-  ((TFluka*) gMC)->FutoTest();
-//  gAlice->Stepping();
+    Int_t oldreg = ((TFluka*) gMC)->GetMreg();
+    if (oldreg != mreg) {
+//
+//  Boundary Crossing
+//
+       ((TFluka*) gMC)->SetNewreg(mreg);
+       if (oldreg == -1) 
+           ((TFluka*) gMC)->SetMreg(mreg);
+       printf("Boundary Crossing %d %d \n", oldreg, mreg);
+    } else {
+       ((TFluka*) gMC)->SetMreg(mreg);
+       ((TFluka*) gMC)->SetNewreg(mreg);
+       printf("Normal step %d %d \n", oldreg, mreg);
+    }
+    ((TFluka*) gMC)->SetIcode(icode);
+    cout << endl << " !!! I am in mgdraw - calling Stepping()" << endl;
+    ((TFluka*) gMC)->FutoTest();
+
+    if (oldreg != mreg) {
+//
+//  Double step for boundary crossing
+//
+       ((TFluka*) gMC)->SetTrackIsExiting();
+       (TVirtualMCApplication::Instance())->Stepping();
+       ((TFluka*) gMC)->SetMreg(mreg);
+       ((TFluka*) gMC)->SetTrackIsEntering();
+       (TVirtualMCApplication::Instance())->Stepping();
+       ((TFluka*) gMC)->SetTrackIsInside();
+    } else {
+       (TVirtualMCApplication::Instance())->Stepping();
+    }
 } // end of mgdraw
 } // end of extern "C"