+ Int_t med = FLKMAT.medium[mreg - 1]; // Medium
+ Int_t msd = DPDXCM.msdpdx[med - 1]; // Iionisation model
+
+ if (!TRACKR.ispusr[mkbmx2 - 2]) {
+ if (verbosityLevel >= 3) {
+ cout << endl << "mgdraw: energy deposition for:" << trackId
+ << " icode=" << icode
+ << " pdg=" << fluka->PDGFromId(TRACKR.jtrack)
+ << " flukaid="<< TRACKR.jtrack
+ << " mreg=" << mreg
+ << " np =" << ALLDLT.nalldl
+ << endl;
+
+ }
+
+ if (msd > 0) {
+//
+// Primary ionsiations
+ Int_t nprim = ALLDLT.nalldl;
+// Protection against nprim > mxalld
+ if (nprim >= mxalld) {
+ nprim = mxalld;
+ Warning("mgdraw", "nprim > mxalld, nprim: %6d pdg: %6d mreg %6d p %13.3f step %13.3f\n",
+ ALLDLT.nalldl,
+ fluka->PDGFromId(TRACKR.jtrack),
+ mreg,
+ TRACKR.ptrack,
+ TRACKR.ctrack);
+
+ }
+// Multiple steps for nprim > 0
+ if (nprim > 0) {
+ for (Int_t i = 0; i < nprim; i++) {
+ fluka->SetCurrentPrimaryElectronIndex(i);
+ (TVirtualMCApplication::Instance())->Stepping();
+ if (i == 0) fluka->SetTrackIsNew(kFALSE);
+ }
+ } else {
+ // No primary electron ionisation
+ // Call Stepping anyway but flag nprim = 0 as index = -2
+ fluka->SetCurrentPrimaryElectronIndex(-2);
+ (TVirtualMCApplication::Instance())->Stepping();
+ }
+ // Reset the index
+ fluka->SetCurrentPrimaryElectronIndex(-1);
+ } else {
+ // Single step
+ (TVirtualMCApplication::Instance())->Stepping();
+ fluka->SetTrackIsNew(kFALSE);
+ }
+
+ } else {
+ //
+ // Tracking is being resumed after secondary tracking
+ //
+ if (verbosityLevel >= 3) {
+ cout << endl << "mgdraw: resuming Stepping(): " << trackId << endl;
+ }
+
+ fluka->SetTrackIsNew(kTRUE);
+ fluka->SetCaller(kMGResumedTrack);
+ (TVirtualMCApplication::Instance())->Stepping();
+
+ // Reset flag and stored values
+ TRACKR.ispusr[mkbmx2 - 2] = 0;
+ for (Int_t i = 0; i < 9; i++) TRACKR.spausr[i] = -1.;
+
+
+ if (verbosityLevel >= 3) {
+ cout << endl << " !!! I am in mgdraw - first Stepping() after resume: " << icode << endl;
+ cout << " Track= " << trackId << " region = " << mreg << endl;
+ }
+
+ fluka->SetTrackIsNew(kFALSE);
+ fluka->SetCaller(kMGDRAW);
+ if (msd > 0) fluka->SetCurrentPrimaryElectronIndex(-2);
+ (TVirtualMCApplication::Instance())->Stepping();
+ if (msd > 0) fluka->SetCurrentPrimaryElectronIndex(-1);
+ }