]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TFluka/mgdraw.cxx
Edep and Position for primary ionisations (preliminary solution).
[u/mrichter/AliRoot.git] / TFluka / mgdraw.cxx
CommitLineData
fa3d1cc7 1#include <Riostream.h>
8fd1d27e 2#include "TVirtualMCApplication.h"
b1b2005d 3#include "TVirtualMCStack.h"
a7bb59a2 4
fa3d1cc7 5#include "TFluka.h"
d566901f 6#include "TFlukaCodes.h"
b1b2005d 7// Fluka include
8#include "Fdimpar.h" //(DIMPAR) fluka include
9#include "Fdblprc.h" //(DBLPRC) fluka common
10#include "Ftrackr.h" //(TRACKR) fluka common
3a625972 11#include "Fopphst.h" //(OPPHST) fluka common
81f1d030 12#include "Fflkstk.h" //(FLKSTK) fluka common
d566901f 13#include "Fltclcm.h" //(LTCLCM) fluka common
14#include "Fpaprop.h" //(PAPROP) fluka common
b1b2005d 15
fa3d1cc7 16#ifndef WIN32
17# define mgdraw mgdraw_
18#else
19# define mgdraw MGDRAW
20#endif
21
4aba9d66 22
23#include "TGeoManager.h" // <- delete
24
fa3d1cc7 25extern "C" {
26void mgdraw(Int_t& icode, Int_t& mreg)
27{
b1b2005d 28 TFluka* fluka = (TFluka*) gMC;
d566901f 29 if (mreg == fluka->GetDummyRegion()) return;
b1b2005d 30//
31// Make sure that stack has currrent track Id
57dc5a4a 32//
3a625972 33 Int_t trackId = -1;
b1b2005d 34 TVirtualMCStack* cppstack = fluka->GetStack();
3a625972 35
36 if (TRACKR.jtrack == -1) {
18e0cabb 37 trackId = OPPHST.louopp[OPPHST.lstopp];
38 if (trackId == 0) {
39 trackId = FLKSTK.ispark[FLKSTK.npflka][mkbmx2-1];
40 }
3a625972 41 } else {
18e0cabb 42 trackId = TRACKR.ispusr[mkbmx2-1];
43 }
44
45 Int_t verbosityLevel = fluka->GetVerbosityLevel();
46
47 if (TRACKR.jtrack < -6) {
4aba9d66 48 // from -7 to -12 = "heavy" fragment
49 // assing parent id
18e0cabb 50 // id < -6 was skipped in stuprf => if (kpart < -6) return;
51 if (verbosityLevel >= 3) {
4aba9d66 52 cout << "mgdraw: (heavy fragment) jtrack < -6 =" << TRACKR.jtrack
18e0cabb 53 << " assign parent pdg=" << fluka->PDGFromId(TRACKR.ispusr[mkbmx2 - 3]) << endl;
54 }
55 TRACKR.jtrack = TRACKR.ispusr[mkbmx2 - 3];
3a625972 56 }
57
b1b2005d 58 cppstack->SetCurrentTrack(trackId);
59//
60//
4aba9d66 61 Int_t mlttc = TRACKR.lt1trk; // LTCLCM.mlatm1;
d566901f 62 fluka->SetMreg(mreg, mlttc);
4aba9d66 63// fluka->SetNewreg(mreg, mlttc); // dont used!!
d566901f 64 fluka->SetIcode((FlukaProcessCode_t) icode);
65 fluka->SetCaller(kMGDRAW);
57dc5a4a 66
4aba9d66 67 Int_t nodeId;
68 Int_t volId = fluka->CurrentVolID(nodeId);
69 Int_t crtlttc = gGeoManager->GetCurrentNodeId()+1;
70
71//
72// if( (fluka->GetNstep() > 43912170 && fluka->GetNstep() < 43912196 ) ||
73// (fluka->GetNstep() > 47424560 && fluka->GetNstep() < 47424581 ) ||
74// (fluka->GetNstep() > 54388266 && fluka->GetNstep() < 54388319 )
75// ) fluka->SetVerbosityLevel(3);
76// else fluka->SetVerbosityLevel(0);
77
78 // check region lattice consistency (debug Ernesto)
79 // *****************************************************
80 if( mreg != volId && !gGeoManager->IsOutside() ) {
81 cout << " mgdraw: track=" << trackId << " pdg=" << fluka->PDGFromId(TRACKR.jtrack)
82 << " icode=" << icode << " gNstep=" << fluka->GetNstep() << endl
83 << " fluka mreg=" << mreg << " mlttc=" << mlttc << endl
84 << " TGeo volId=" << volId << " crtlttc=" << crtlttc << endl
85 << " common TRACKR lt1trk=" << TRACKR.lt1trk << " lt2trk=" << TRACKR.lt2trk << endl
86 << " common LTCLCM newlat=" << LTCLCM.newlat << " mlatld=" << LTCLCM.mlatld << endl
87 << " mlatm1=" << LTCLCM.mlatm1 << " mltsen=" << LTCLCM.mltsen << endl
88 << " mltsm1=" << LTCLCM.mltsm1 << " mlattc=" << LTCLCM.mlattc << endl;
89 if( mlttc == crtlttc ) cout << " *************************************************************" << endl;
90 }
91 // *****************************************************
92
57dc5a4a 93 if (!TRACKR.ispusr[mkbmx2 - 2]) {
18e0cabb 94 //
95 // Single step
96 if (verbosityLevel >= 3) {
97 cout << endl << "mgdraw: energy deposition for:" << trackId
98 << " icode=" << icode
4aba9d66 99 << " pdg=" << fluka->PDGFromId(TRACKR.jtrack)
100 << " flukaid="<< TRACKR.jtrack
101 << " mreg=" << mreg << endl;
18e0cabb 102 }
103 (TVirtualMCApplication::Instance())->Stepping();
104 fluka->SetTrackIsNew(kFALSE);
57dc5a4a 105 } else {
18e0cabb 106 //
107 // Tracking is being resumed after secondary tracking
108 //
109 if (verbosityLevel >= 3) {
110 cout << endl << "mgdraw: resuming Stepping(): " << trackId << endl;
111 }
d566901f 112
18e0cabb 113 fluka->SetTrackIsNew(kTRUE);
114 fluka->SetCaller(kMGResumedTrack);
115 (TVirtualMCApplication::Instance())->Stepping();
5d80a015 116
18e0cabb 117 // Reset flag and stored values
118 TRACKR.ispusr[mkbmx2 - 2] = 0;
119 for (Int_t i = 0; i < 9; i++) TRACKR.spausr[i] = -1.;
5d80a015 120
57dc5a4a 121
18e0cabb 122 if (verbosityLevel >= 3) {
123 cout << endl << " !!! I am in mgdraw - first Stepping() after resume: " << icode << endl;
124 cout << " Track= " << trackId << " region = " << mreg << endl;
125 }
5d80a015 126
18e0cabb 127 fluka->SetTrackIsNew(kFALSE);
128 fluka->SetCaller(kMGDRAW);
129 (TVirtualMCApplication::Instance())->Stepping();
57dc5a4a 130 }
fa3d1cc7 131} // end of mgdraw
132} // end of extern "C"
133