]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TFluka/endraw.cxx
1) Added "Makefile support": LinkDef + pkg file, made header files compliant
[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"
5#include "TFlukaCerenkov.h"
a7bb59a2 6
fa3d1cc7 7#include "TFluka.h"
d566901f 8#include "TFlukaCodes.h"
a7bb59a2 9
7dac99f1 10#include "Fdimpar.h" //(DIMPAR) fluka include
11#include "Ftrackr.h" //(TRACKR) fluka common
d566901f 12#include "Fltclcm.h" //(LTCLCM) fluka common
13#include "Fpaprop.h" //(PAPROP) fluka common
fa3d1cc7 14#ifndef WIN32
15# define endraw endraw_
16#else
17# define endraw ENDRAW
18#endif
19extern "C" {
20void endraw(Int_t& icode, Int_t& mreg, Double_t& rull, Double_t& xsco, Double_t& ysco, Double_t& zsco)
21{
4b81a588 22 TFluka* fluka = (TFluka*) gMC;
d566901f 23 // nothing to do if particle in dummy region
24 if (mreg == fluka->GetDummyRegion()) return;
2bc4c610 25 Int_t verbosityLevel = fluka->GetVerbosityLevel();
2bc78182 26 Bool_t debug = (verbosityLevel >= 3)? kTRUE : kFALSE;
d566901f 27 Int_t mlttc = LTCLCM.mlatm1;
28 fluka->SetCaller(kENDRAW);
4b81a588 29 fluka->SetRull(rull);
30 fluka->SetXsco(xsco);
31 fluka->SetYsco(ysco);
32 fluka->SetZsco(zsco);
d566901f 33 fluka->SetMreg(mreg, mlttc);
022d4275 34
35 Float_t edep = rull;
36
d566901f 37 if (icode == kKASKADinelarecoil) {
2bc4c610 38 if (debug) cout << " For icode=" << icode << " Stepping is NOT called" << endl;
4b81a588 39 return;
40 }
d566901f 41
df14e7fb 42 if (TRACKR.jtrack == -1) {
43// Handle quantum efficiency the G3 way
2bc4c610 44 if (debug) printf("endraw: Cerenkov photon depositing energy: %d %e\n", mreg, rull);
df14e7fb 45 TGeoMaterial* material = (gGeoManager->GetCurrentVolume())->GetMaterial();
df14e7fb 46 TFlukaCerenkov* cerenkov = dynamic_cast<TFlukaCerenkov*> (material->GetCerenkovProperties());
47 if (cerenkov) {
48 Double_t eff = (cerenkov->GetQuantumEfficiency(rull));
49 if (gRandom->Rndm() > eff) {
022d4275 50 edep = 0.;
df14e7fb 51 }
52 }
53 }
2bc78182 54
d566901f 55 if (icode != kEMFSCOstopping1 && icode != kEMFSCOstopping2) {
56 fluka->SetIcode((FlukaProcessCode_t)icode);
022d4275 57 fluka->SetRull(edep);
58 (TVirtualMCApplication::Instance())->Stepping();
59 } else {
2bc78182 60 //
d566901f 61 // For icode 21,22 the particle has fallen below thresshold.
2bc78182 62 // This has to be signalled to the StepManager()
63 //
a5b73d69 64 fluka->SetRull(edep);
d566901f 65 fluka->SetIcode((FlukaProcessCode_t) icode);
022d4275 66 (TVirtualMCApplication::Instance())->Stepping();
67 fluka->SetTrackIsNew(kFALSE);
d566901f 68 fluka->SetIcode((FlukaProcessCode_t)icode);
a5b73d69 69 fluka->SetRull(0.);
022d4275 70 (TVirtualMCApplication::Instance())->Stepping();
71 }
fa3d1cc7 72} // end of endraw
73} // end of extern "C"
74