]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - TFluka/endraw.cxx
Added SetPatchModules() function to set number of manus per patch module
[u/mrichter/AliRoot.git] / TFluka / endraw.cxx
... / ...
CommitLineData
1#include <Riostream.h>
2#include "TVirtualMCApplication.h"
3#include "TGeoMaterial.h"
4#include "TGeoManager.h"
5#include <TParticle.h>
6#include "TFlukaCerenkov.h"
7
8#include "TFluka.h"
9#include "TFlukaCodes.h"
10
11#include "Fdimpar.h" //(DIMPAR) fluka include
12#include "Ftrackr.h" //(TRACKR) fluka common
13#include "Fltclcm.h" //(LTCLCM) fluka common
14#include "Fpaprop.h" //(PAPROP) fluka common
15
16#ifndef WIN32
17# define endraw endraw_
18#else
19# define endraw ENDRAW
20#endif
21extern "C" {
22void endraw(Int_t& icode, Int_t& mreg, Double_t& rull, Double_t& xsco, Double_t& ysco, Double_t& zsco)
23{
24 TFluka* fluka = (TFluka*) gMC;
25 // nothing to do if particle in dummy region
26 if (mreg == fluka->GetDummyRegion()) return;
27 Int_t verbosityLevel = fluka->GetVerbosityLevel();
28 Bool_t debug = (verbosityLevel >= 3)? kTRUE : kFALSE;
29 Int_t mlttc = (icode==kKASKADinelarecoil) ? TRACKR.lt2trk : TRACKR.lt1trk; //LTCLCM.mlatm1;
30 fluka->SetCaller(kENDRAW);
31 fluka->SetRull(rull);
32 fluka->SetXsco(xsco);
33 fluka->SetYsco(ysco);
34 fluka->SetZsco(zsco);
35 fluka->SetMreg(mreg, mlttc);
36
37 Float_t edep = rull;
38
39 if (TRACKR.jtrack == -1) {
40 // Handle quantum efficiency the G3 way
41 if (debug) printf("endraw: Cerenkov photon depositing energy: %d %e\n", mreg, rull);
42 TGeoMaterial* material = (gGeoManager->GetCurrentVolume())->GetMaterial();
43 TFlukaCerenkov* cerenkov = dynamic_cast<TFlukaCerenkov*> (material->GetCerenkovProperties());
44 if (cerenkov) {
45 Double_t eff = (cerenkov->GetQuantumEfficiency(rull));
46 if (gRandom->Rndm() > eff) {
47 edep = 0.;
48 }
49 }
50 }
51
52 TVirtualMCStack* cppstack = fluka->GetStack();
53
54 if (debug) {
55 cout << "ENDRAW For icode=" << icode
56 << " track=" << TRACKR.ispusr[mkbmx2-1] << " pdg=" << fluka->PDGFromId(TRACKR.jtrack)
57 << " edep="<< edep << " mreg=" << mreg << endl;
58 }
59
60 // check region lattice consistency (debug Ernesto)
61 // *****************************************************
62 Int_t nodeId;
63 Int_t volId = fluka->CurrentVolID(nodeId);
64 Int_t crtlttc = gGeoManager->GetCurrentNodeId()+1;
65 if(debug && mreg != volId && !gGeoManager->IsOutside() ) {
66 cout << " endraw: track=" << TRACKR.ispusr[mkbmx2-1] << " pdg=" << fluka->PDGFromId(TRACKR.jtrack)
67 << " icode=" << icode << " gNstep=" << fluka->GetNstep() << endl
68 << " fluka mreg=" << mreg << " mlttc=" << mlttc << endl
69 << " TGeo volId=" << volId << " crtlttc=" << crtlttc << endl
70 << " common TRACKR lt1trk=" << TRACKR.lt1trk << " lt2trk=" << TRACKR.lt2trk << endl
71 << " common LTCLCM newlat=" << LTCLCM.newlat << " mlatld=" << LTCLCM.mlatld << endl
72 << " mlatm1=" << LTCLCM.mlatm1 << " mltsen=" << LTCLCM.mltsen << endl
73 << " mltsm1=" << LTCLCM.mltsm1 << " mlattc=" << LTCLCM.mlattc << endl;
74 if( mlttc == crtlttc ) cout << " *************************************************************" << endl;
75 }
76 // *****************************************************
77
78
79 if (icode != kEMFSCOstopping1 && icode != kEMFSCOstopping2) {
80 fluka->SetIcode((FlukaProcessCode_t)icode);
81 fluka->SetRull(edep);
82 if (icode == kKASKADelarecoil && TRACKR.ispusr[mkbmx2-5]) {
83 // Elastic recoil and in stuprf npprmr > 0,
84 // the secondary being loaded is actually still the interacting particle
85 cppstack->SetCurrentTrack( TRACKR.ispusr[mkbmx2-4] );
86 // cout << "endraw elastic recoil track=" << TRACKR.ispusr[mkbmx2-1] << " parent=" << TRACKR.ispusr[mkbmx2-4]
87 // << endl;
88 }
89 else
90 cppstack->SetCurrentTrack(TRACKR.ispusr[mkbmx2-1] );
91 (TVirtualMCApplication::Instance())->Stepping();
92 } else {
93 //
94 // For icode 21,22 the particle has fallen below thresshold.
95 // This has to be signalled to the StepManager()
96 //
97 cppstack->SetCurrentTrack( TRACKR.ispusr[mkbmx2-1] );
98 fluka->SetRull(edep);
99 fluka->SetIcode((FlukaProcessCode_t) icode);
100 (TVirtualMCApplication::Instance())->Stepping();
101 fluka->SetTrackIsNew(kFALSE);
102 fluka->SetIcode((FlukaProcessCode_t)icode);
103 fluka->SetRull(0.);
104 (TVirtualMCApplication::Instance())->Stepping();
105// cppstack->SetCurrentTrack( saveTrackId );
106
107 }
108} // end of endraw
109} // end of extern "C"
110