]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Track properties are saved when transport has been interupted and
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 14 Jan 2005 12:19:56 +0000 (12:19 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 14 Jan 2005 12:19:56 +0000 (12:19 +0000)
restored when transport is resumed. Resuming is signaled with
caller == 40.

TFluka/TFluka.cxx
TFluka/mgdraw.cxx
TFluka/usdraw.cxx

index 1292572963de82428410018990b47a8342c3b625..eb0d3ebe3aaca6b83769a29e9a5f381f65bca504 100644 (file)
@@ -1132,6 +1132,11 @@ void TFluka::TrackPosition(TLorentzVector& position) const
     position.SetY(TRACKR.ytrack[TRACKR.ntrack]);
     position.SetZ(TRACKR.ztrack[TRACKR.ntrack]);
     position.SetT(0);
+  } else if (caller == 40) { // mgdraw resuming transport
+    position.SetX(TRACKR.spausr[0]);
+    position.SetY(TRACKR.spausr[1]);
+    position.SetZ(TRACKR.spausr[2]);
+    position.SetT(TRACKR.spausr[3]);
   }
   else
     Warning("TrackPosition","position not available");
@@ -1157,6 +1162,11 @@ void TFluka::TrackPosition(Double_t& x, Double_t& y, Double_t& z) const
     y = TRACKR.ytrack[TRACKR.ntrack];
     z = TRACKR.ztrack[TRACKR.ntrack];
   }
+  else if (caller == 40) { // mgdraw resuming transport
+    x = TRACKR.spausr[0];
+    y = TRACKR.spausr[1];
+    z = TRACKR.spausr[2];
+  }
   else
     Warning("TrackPosition","position not available");
 }
@@ -1189,6 +1199,12 @@ void TFluka::TrackMomentum(TLorentzVector& momentum) const
       momentum.SetE(TRACKR.etrack);
       return;
     }
+  } else if  (caller == 40) { // mgdraw resuming transport
+    momentum.SetPx(TRACKR.spausr[4]);
+    momentum.SetPy(TRACKR.spausr[5]);
+    momentum.SetPz(TRACKR.spausr[6]);
+    momentum.SetE (TRACKR.spausr[7]);
+    return;
   }
   else
     Warning("TrackMomentum","momentum not available");
@@ -1222,6 +1238,11 @@ void TFluka::TrackMomentum(Double_t& px, Double_t& py, Double_t& pz, Double_t& e
       e = TRACKR.etrack;
       return;
     }
+  } else if (caller == 40) { // mgdraw resuming transport
+      px = TRACKR.spausr[4];
+      py = TRACKR.spausr[5];
+      pz = TRACKR.spausr[6];
+      e  = TRACKR.spausr[7];
   }
   else
     Warning("TrackMomentum","momentum not available");
@@ -1233,7 +1254,7 @@ Double_t TFluka::TrackStep() const
 // Return the length in centimeters of the current step
 // TRACKR.ctrack = total curved path
   Int_t caller = GetCaller();
-  if (caller == 11 || caller==12 || caller == 3 || caller == 6 || caller == 50) //bxdraw,endraw,usdraw, ckov
+  if (caller == 11 || caller==12 || caller == 3 || caller == 6 || caller == 50 || caller == 40) //bxdraw,endraw,usdraw, ckov
     return 0.0;
   else if (caller == 4) //mgdraw
     return TRACKR.ctrack;
@@ -1250,6 +1271,8 @@ Double_t TFluka::TrackLength() const
   Int_t caller = GetCaller();
   if (caller == 11 || caller==12 || caller == 3 || caller == 4 || caller == 6 || caller == 50) //bxdraw,endraw,mgdraw,usdraw,ckov
     return TRACKR.cmtrck;
+  else if (caller == 40) // mgdraw resuming transport
+    return TRACKR.spausr[8];
   else {
     Warning("TrackLength", "track length not available");
     return 0.0;
@@ -1264,6 +1287,8 @@ Double_t TFluka::TrackTime() const
   Int_t caller = GetCaller();
   if (caller == 11 || caller==12 || caller == 3 || caller == 4 || caller == 6 || caller == 50) //bxdraw,endraw,mgdraw,usdraw,ckov
     return TRACKR.atrack;
+  else if (caller == 40)
+    return TRACKR.spausr[3];
   else {
     Warning("TrackTime", "track time not available");
     return 0.0;
@@ -1287,7 +1312,7 @@ Double_t TFluka::Edep() const
   // If coming from usdraw we just signal particle production - no edep
   // If just first time after resuming, no edep for the primary
   Int_t caller = GetCaller();
-  if (caller == 11 || caller==12 || caller==6) return 0.0;
+  if (caller == 11 || caller==12 || caller==6 || caller == 40) return 0.0;
   Double_t sum = 0;
   for ( Int_t j=0;j<TRACKR.mtrack;j++) {
     sum +=TRACKR.dtrack[j];  
index f7515e5fc8b5da8cf3ba84fde5839ed0fa170e40..3dbe4f36294c8a5e00d95c5d02e98946ded3a598 100644 (file)
@@ -52,28 +52,33 @@ void mgdraw(Int_t& icode, Int_t& mreg)
            cout << endl << " !!! I am in mgdraw - calling Stepping(): " << icode << endl;
            cout << endl << " Track Id = " << trackId << " region = " << mreg << endl;
        }
+      
        (TVirtualMCApplication::Instance())->Stepping();
        fluka->SetTrackIsNew(kFALSE);
     } else {
        //
        // Tracking is being resumed after secondary tracking
        //
-       // Reset flag
-       TRACKR.ispusr[mkbmx2 - 2] = 0;
-//
-       fluka->SetTrackIsNew(kTRUE);
-
        if (verbosityLevel >= 3) {
            cout << endl << " !!! I am in mgdraw - resuming Stepping(): " << trackId << endl;
        }
-
+       
+       fluka->SetTrackIsNew(kTRUE);
+       fluka->SetCaller(40);
        (TVirtualMCApplication::Instance())->Stepping();
-       fluka->SetTrackIsNew(kFALSE);
+
+       // 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 << endl << " Track Id = " << trackId << " region = " << mreg << endl;
        }
+
+       fluka->SetTrackIsNew(kFALSE);
+       fluka->SetCaller(4);
        (TVirtualMCApplication::Instance())->Stepping();
     }
     
index 94c9615690fb37b87dc8ad6d213c388d27bc2f41..1335e549c421e10e2dc346490b4a4ccfff0e60e6 100644 (file)
@@ -1,6 +1,7 @@
 #include <Riostream.h>
 #include "TVirtualMCApplication.h"
 #include "TFluka.h"
+#include <TLorentzVector.h>
 #include "Fdimpar.h"  //(DIMPAR) fluka include
 #include "Ftrackr.h"  //(TRACKR) fluka common
 #ifndef WIN32
@@ -20,6 +21,19 @@ void usdraw(Int_t& icode, Int_t& mreg,
 
   if (fluka->IsTrackDisappeared()) {
       TRACKR.ispusr[mkbmx2 - 2] = 1;
+// Save properties at point where particle disappears in case this is only an interruption
+      TLorentzVector p;
+      gMC->TrackMomentum(p);
+      
+      TRACKR.spausr[0] = xsco;               // x
+      TRACKR.spausr[1] = ysco;               // y
+      TRACKR.spausr[2] = zsco;               // z
+      TRACKR.spausr[3] = gMC->TrackTime();   // t
+      TRACKR.spausr[4] = p[0];               // px
+      TRACKR.spausr[5] = p[1];               // py
+      TRACKR.spausr[6] = p[2];               // pz
+      TRACKR.spausr[7] = p[3];               // e
+      TRACKR.spausr[8] = gMC->TrackLength(); // Length 
   }
 
   fluka->SetMreg(mreg);
@@ -27,7 +41,7 @@ void usdraw(Int_t& icode, Int_t& mreg,
   fluka->SetYsco(ysco);
   fluka->SetZsco(zsco);
 
-  if (debug) printf("USDRAW: Number of track segments:%d %d %d\n", TRACKR.ntrack, TRACKR.mtrack, icode);
+  if (debug) printf("USDRAW: Number of track segments:%6d %6d %6d %10.3e\n", TRACKR.ntrack, TRACKR.mtrack, icode, TRACKR.atrack);
 
   (TVirtualMCApplication::Instance())->Stepping();
   fluka->SetTrackIsNew(kFALSE);