]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TFluka/endraw.cxx
Include files added.
[u/mrichter/AliRoot.git] / TFluka / endraw.cxx
CommitLineData
fa3d1cc7 1#include <Riostream.h>
8fd1d27e 2#include "TVirtualMCApplication.h"
df14e7fb 3#include "TGeoMaterial.h"
4#include "TGeoManager.h"
18e0cabb 5#include <TParticle.h>
df14e7fb 6#include "TFlukaCerenkov.h"
a7bb59a2 7
fa3d1cc7 8#include "TFluka.h"
d566901f 9#include "TFlukaCodes.h"
a7bb59a2 10
7dac99f1 11#include "Fdimpar.h" //(DIMPAR) fluka include
12#include "Ftrackr.h" //(TRACKR) fluka common
d566901f 13#include "Fltclcm.h" //(LTCLCM) fluka common
14#include "Fpaprop.h" //(PAPROP) fluka common
18e0cabb 15
fa3d1cc7 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{
4b81a588 24 TFluka* fluka = (TFluka*) gMC;
d566901f 25 // nothing to do if particle in dummy region
26 if (mreg == fluka->GetDummyRegion()) return;
2bc4c610 27 Int_t verbosityLevel = fluka->GetVerbosityLevel();
2bc78182 28 Bool_t debug = (verbosityLevel >= 3)? kTRUE : kFALSE;
d566901f 29 Int_t mlttc = LTCLCM.mlatm1;
30 fluka->SetCaller(kENDRAW);
4b81a588 31 fluka->SetRull(rull);
32 fluka->SetXsco(xsco);
33 fluka->SetYsco(ysco);
34 fluka->SetZsco(zsco);
d566901f 35 fluka->SetMreg(mreg, mlttc);
022d4275 36
37 Float_t edep = rull;
38
df14e7fb 39 if (TRACKR.jtrack == -1) {
18e0cabb 40 // Handle quantum efficiency the G3 way
2bc4c610 41 if (debug) printf("endraw: Cerenkov photon depositing energy: %d %e\n", mreg, rull);
df14e7fb 42 TGeoMaterial* material = (gGeoManager->GetCurrentVolume())->GetMaterial();
df14e7fb 43 TFlukaCerenkov* cerenkov = dynamic_cast<TFlukaCerenkov*> (material->GetCerenkovProperties());
44 if (cerenkov) {
18e0cabb 45 Double_t eff = (cerenkov->GetQuantumEfficiency(rull));
46 if (gRandom->Rndm() > eff) {
47 edep = 0.;
48 }
df14e7fb 49 }
50 }
2bc78182 51
18e0cabb 52 TVirtualMCStack* cppstack = fluka->GetStack();
53 Int_t saveTrackId = cppstack->GetCurrentTrackNumber();
54
55 if (debug) {
56 cout << "ENDRAW For icode=" << icode << " stacktrack=" << saveTrackId
57 << " track=" << TRACKR.ispusr[mkbmx2-1] << " pdg=" << fluka->PDGFromId(TRACKR.jtrack)
58 << " edep="<< edep <<endl;
59 }
60
d566901f 61 if (icode != kEMFSCOstopping1 && icode != kEMFSCOstopping2) {
62 fluka->SetIcode((FlukaProcessCode_t)icode);
022d4275 63 fluka->SetRull(edep);
18e0cabb 64 if (icode == kKASKADelarecoil && TRACKR.ispusr[mkbmx2-5]) {
65 // Elastic recoil and in stuprf npprmr > 0,
66 // the secondary being loaded is actually still the interacting particle
67 cppstack->SetCurrentTrack( TRACKR.ispusr[mkbmx2-4] );
68 // cout << "endraw elastic recoil track=" << TRACKR.ispusr[mkbmx2-1] << " parent=" << TRACKR.ispusr[mkbmx2-4]
69 // << endl;
70 }
71 else
72 cppstack->SetCurrentTrack(TRACKR.ispusr[mkbmx2-1] );
022d4275 73 (TVirtualMCApplication::Instance())->Stepping();
18e0cabb 74
75// cppstack->SetCurrentTrack( saveTrackId );
022d4275 76 } else {
2bc78182 77 //
d566901f 78 // For icode 21,22 the particle has fallen below thresshold.
2bc78182 79 // This has to be signalled to the StepManager()
80 //
18e0cabb 81 cppstack->SetCurrentTrack( TRACKR.ispusr[mkbmx2-1] );
a5b73d69 82 fluka->SetRull(edep);
d566901f 83 fluka->SetIcode((FlukaProcessCode_t) icode);
022d4275 84 (TVirtualMCApplication::Instance())->Stepping();
85 fluka->SetTrackIsNew(kFALSE);
d566901f 86 fluka->SetIcode((FlukaProcessCode_t)icode);
a5b73d69 87 fluka->SetRull(0.);
022d4275 88 (TVirtualMCApplication::Instance())->Stepping();
18e0cabb 89// cppstack->SetCurrentTrack( saveTrackId );
90
022d4275 91 }
fa3d1cc7 92} // end of endraw
93} // end of extern "C"
94