]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TFluka/endraw.cxx
Update of the class ESDMuonFilter. New marcros for creating AOD with muon information...
[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
87ad3c3e 15#include "Fopphst.h" //(OPPHST) fluka common
18e0cabb 16
fa3d1cc7 17#ifndef WIN32
18# define endraw endraw_
19#else
20# define endraw ENDRAW
21#endif
22extern "C" {
23void endraw(Int_t& icode, Int_t& mreg, Double_t& rull, Double_t& xsco, Double_t& ysco, Double_t& zsco)
24{
4b81a588 25 TFluka* fluka = (TFluka*) gMC;
d566901f 26 // nothing to do if particle in dummy region
27 if (mreg == fluka->GetDummyRegion()) return;
2bc4c610 28 Int_t verbosityLevel = fluka->GetVerbosityLevel();
2bc78182 29 Bool_t debug = (verbosityLevel >= 3)? kTRUE : kFALSE;
4aba9d66 30 Int_t mlttc = (icode==kKASKADinelarecoil) ? TRACKR.lt2trk : TRACKR.lt1trk; //LTCLCM.mlatm1;
d566901f 31 fluka->SetCaller(kENDRAW);
4b81a588 32 fluka->SetRull(rull);
33 fluka->SetXsco(xsco);
34 fluka->SetYsco(ysco);
35 fluka->SetZsco(zsco);
d566901f 36 fluka->SetMreg(mreg, mlttc);
4aba9d66 37
022d4275 38 Float_t edep = rull;
69e406a7 39 Int_t ipt = fluka->PDGFromId(TRACKR.jtrack);
40 if (ipt == -1) {
41 if (debug) printf("Unknown particle %5d %5d \n", TRACKR.jtrack, icode);
42 return;
43 }
44
df14e7fb 45 if (TRACKR.jtrack == -1) {
18e0cabb 46 // Handle quantum efficiency the G3 way
2bc4c610 47 if (debug) printf("endraw: Cerenkov photon depositing energy: %d %e\n", mreg, rull);
df14e7fb 48 TGeoMaterial* material = (gGeoManager->GetCurrentVolume())->GetMaterial();
df14e7fb 49 TFlukaCerenkov* cerenkov = dynamic_cast<TFlukaCerenkov*> (material->GetCerenkovProperties());
50 if (cerenkov) {
18e0cabb 51 Double_t eff = (cerenkov->GetQuantumEfficiency(rull));
52 if (gRandom->Rndm() > eff) {
53 edep = 0.;
54 }
df14e7fb 55 }
56 }
2bc78182 57
18e0cabb 58 TVirtualMCStack* cppstack = fluka->GetStack();
18e0cabb 59
60 if (debug) {
4aba9d66 61 cout << "ENDRAW For icode=" << icode
18e0cabb 62 << " track=" << TRACKR.ispusr[mkbmx2-1] << " pdg=" << fluka->PDGFromId(TRACKR.jtrack)
4aba9d66 63 << " edep="<< edep << " mreg=" << mreg << endl;
18e0cabb 64 }
65
4aba9d66 66 // check region lattice consistency (debug Ernesto)
67 // *****************************************************
68 Int_t nodeId;
69 Int_t volId = fluka->CurrentVolID(nodeId);
70 Int_t crtlttc = gGeoManager->GetCurrentNodeId()+1;
4b1c3976 71 if(debug && mreg != volId && !gGeoManager->IsOutside() ) {
4aba9d66 72 cout << " endraw: track=" << TRACKR.ispusr[mkbmx2-1] << " pdg=" << fluka->PDGFromId(TRACKR.jtrack)
73 << " icode=" << icode << " gNstep=" << fluka->GetNstep() << endl
74 << " fluka mreg=" << mreg << " mlttc=" << mlttc << endl
75 << " TGeo volId=" << volId << " crtlttc=" << crtlttc << endl
76 << " common TRACKR lt1trk=" << TRACKR.lt1trk << " lt2trk=" << TRACKR.lt2trk << endl
77 << " common LTCLCM newlat=" << LTCLCM.newlat << " mlatld=" << LTCLCM.mlatld << endl
78 << " mlatm1=" << LTCLCM.mlatm1 << " mltsen=" << LTCLCM.mltsen << endl
79 << " mltsm1=" << LTCLCM.mltsm1 << " mlattc=" << LTCLCM.mlattc << endl;
80 if( mlttc == crtlttc ) cout << " *************************************************************" << endl;
81 }
82 // *****************************************************
d566901f 83 if (icode != kEMFSCOstopping1 && icode != kEMFSCOstopping2) {
84 fluka->SetIcode((FlukaProcessCode_t)icode);
022d4275 85 fluka->SetRull(edep);
18e0cabb 86 if (icode == kKASKADelarecoil && TRACKR.ispusr[mkbmx2-5]) {
69e406a7 87 // Elastic recoil and in stuprf npprmr > 0,
88 // the secondary being loaded is actually still the interacting particle
89 cppstack->SetCurrentTrack( TRACKR.ispusr[mkbmx2-4] );
87ad3c3e 90 } else if (TRACKR.jtrack == -1) {
91 cppstack->SetCurrentTrack(OPPHST.louopp[OPPHST.lstopp]);
69e406a7 92 } else {
4aba9d66 93 cppstack->SetCurrentTrack(TRACKR.ispusr[mkbmx2-1] );
69e406a7 94 }
95
95bb1461 96 (TVirtualMCApplication::Instance())->Stepping();
69e406a7 97
022d4275 98 } else {
2bc78182 99 //
d566901f 100 // For icode 21,22 the particle has fallen below thresshold.
2bc78182 101 // This has to be signalled to the StepManager()
102 //
18e0cabb 103 cppstack->SetCurrentTrack( TRACKR.ispusr[mkbmx2-1] );
87ad3c3e 104
a5b73d69 105 fluka->SetRull(edep);
d566901f 106 fluka->SetIcode((FlukaProcessCode_t) icode);
022d4275 107 (TVirtualMCApplication::Instance())->Stepping();
108 fluka->SetTrackIsNew(kFALSE);
0375c7c5 109// fluka->SetIcode((FlukaProcessCode_t)icode);
110// fluka->SetRull(0.);
111// (TVirtualMCApplication::Instance())->Stepping();
022d4275 112 }
fa3d1cc7 113} // end of endraw
114} // end of extern "C"
115