X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=sidebyside;f=TFluka%2Fbxdraw.cxx;h=315ec664ebf5a24d4d0a3b6c8272e09d3673ac55;hb=6253e09bd9e26c4e080b0f98958ac06b73ca3e55;hp=625eb4120b4bfd673551315c969e27ffe7871631;hpb=a7bb59a2807d18623297d38deb794356a893a61a;p=u%2Fmrichter%2FAliRoot.git diff --git a/TFluka/bxdraw.cxx b/TFluka/bxdraw.cxx index 625eb4120b4..315ec664ebf 100644 --- a/TFluka/bxdraw.cxx +++ b/TFluka/bxdraw.cxx @@ -1,46 +1,119 @@ #include -#ifndef WITH_ROOT #include "TFluka.h" -#else -#include "TFlukaGeo.h" -#endif - +#include "TFlukaCodes.h" +#include "TFlukaMCGeometry.h" #include "Fdimpar.h" //(DIMPAR) fluka include #include "Ftrackr.h" //(TRACKR) fluka common +#include "Fltclcm.h" //(LTCLCM) fluka common +#include "Fopphst.h" //(OPPHST) fluka common + #ifndef WIN32 # define bxdraw bxdraw_ #else # define bxdraw BXDRAW #endif + + +#include "TGeoManager.h" + + extern "C" { void bxdraw(Int_t& icode, Int_t& mreg, Int_t& newreg, Double_t& xsco, Double_t& ysco, Double_t& zsco) { TFluka* fluka = (TFluka*) gMC; - - fluka->SetIcode(icode); - fluka->SetNewreg(newreg); + Int_t oldlttc = TRACKR.lt1trk; //LTCLCM.mlatm1; + Int_t newlttc = LTCLCM.newlat; + fluka->SetIcode((FlukaProcessCode_t)icode); +// fluka->SetNewreg(newreg,newlttc); fluka->SetXsco(xsco); fluka->SetYsco(ysco); fluka->SetZsco(zsco); + Int_t verbosityLevel = fluka->GetVerbosityLevel(); + Bool_t debug = (verbosityLevel>=3)?kTRUE:kFALSE; + // nothing to do if particle is crossing a dummy region + if (mreg == fluka->GetDummyRegion() || + newreg == fluka->GetDummyRegion() || + oldlttc == TFlukaMCGeometry::kLttcVirtual || + newlttc == TFlukaMCGeometry::kLttcVirtual + ) return; + // // Double step for boundary crossing // - printf("bxdraw (ex) \n"); - fluka->SetTrackIsExiting(); - fluka->SetCaller(12); - fluka->SetMreg(mreg); - (TVirtualMCApplication::Instance())->Stepping(); - fluka->SetCaller(11); - fluka->SetTrackIsEntering(); - printf("bxdraw (en) mreg=%d newreg=%d \n",mreg,newreg); - fluka->SetMreg(newreg); - (TVirtualMCApplication::Instance())->Stepping(); -// fluka->SetCaller(1); -// fluka->SetTrackIsInside(); -// printf("bxdraw (st) \n"); -// (TVirtualMCApplication::Instance())->Stepping(); + fluka->SetTrackIsNew(kFALSE); // has to be called BEFORE Stepping() + if (mreg != fluka->GetDummyRegion() && newreg != fluka->GetDummyRegion()) { + if (debug) printf("bxdraw (ex) \n"); + fluka->SetTrackIsExiting(); + fluka->SetCaller(kBXExiting); + fluka->SetMreg(mreg,oldlttc); + + // check region lattice consistency (debug Ernesto) + // ***************************************************** + Int_t nodeId; + Int_t volId = fluka->CurrentVolID(nodeId); + Int_t crtlttc = gGeoManager->GetCurrentNodeId()+1; + if(debug && mreg != volId && !gGeoManager->IsOutside()) { + cout << " bxdraw: track=" << TRACKR.ispusr[mkbmx2-1]<< " pdg=" << fluka->PDGFromId(TRACKR.jtrack) + << " icode=" << icode << " gNstep=" << fluka->GetNstep() << endl + << " fluka mreg=" << mreg << " oldlttc=" << oldlttc << " newreg=" << newreg << " newlttc=" << newlttc << endl + << " TGeo volId=" << volId << " crtlttc=" << crtlttc << endl + << " common TRACKR lt1trk=" << TRACKR.lt1trk << " lt2trk=" << TRACKR.lt2trk << endl + << " common LTCLCM newlat=" << LTCLCM.newlat << " mlatld=" << LTCLCM.mlatld << endl + << " mlatm1=" << LTCLCM.mlatm1 << " mltsen=" << LTCLCM.mltsen << endl + << " mltsm1=" << LTCLCM.mltsm1 << " mlattc=" << LTCLCM.mlattc << endl; + if( oldlttc == crtlttc ) cout << " **************************** Exit *********************************" << endl; + } + // ***************************************************** + + + + TVirtualMCStack* cppstack = fluka->GetStack(); + + if (TRACKR.jtrack == -1) { + cppstack->SetCurrentTrack(OPPHST.louopp[OPPHST.lstopp]); + } else { + cppstack->SetCurrentTrack( TRACKR.ispusr[mkbmx2-1] ); + } + + (TVirtualMCApplication::Instance())->Stepping(); + } + if (newreg != fluka->GetDummyRegion()) { + if (debug) printf("bxdraw (en) \n"); + fluka->SetCaller(kBXEntering); + fluka->SetTrackIsEntering(); + if (fluka->GetDummyBoundary() == 1) fluka->SetDummyBoundary(2); + fluka->SetMreg(newreg,newlttc); + + // check region lattice consistency (debug Ernesto) + // ***************************************************** + Int_t nodeId; + Int_t volId = fluka->CurrentVolID(nodeId); + Int_t crtlttc = gGeoManager->GetCurrentNodeId()+1; + if(debug && newreg != volId && !gGeoManager->IsOutside()) { + cout << " bxdraw: track=" << TRACKR.ispusr[mkbmx2-1] << " pdg=" << fluka->PDGFromId(TRACKR.jtrack) + << " icode=" << icode << " gNstep=" << fluka->GetNstep() << endl + << " fluka mreg=" << mreg << " oldlttc=" << oldlttc << " newreg=" << newreg << " newlttc=" << newlttc << endl + << " TGeo volId=" << volId << " crtlttc=" << crtlttc << endl + << " common TRACKR lt1trk=" << TRACKR.lt1trk << " lt2trk=" << TRACKR.lt2trk << endl + << " common LTCLCM newlat=" << LTCLCM.newlat << " mlatld=" << LTCLCM.mlatld << endl + << " mlatm1=" << LTCLCM.mlatm1 << " mltsen=" << LTCLCM.mltsen << endl + << " mltsm1=" << LTCLCM.mltsm1 << " mlattc=" << LTCLCM.mlattc << endl; + if( newlttc == crtlttc ) cout << " ******************************** Enter *****************************" << endl; + } + // ***************************************************** + + TVirtualMCStack* cppstack = fluka->GetStack(); + if (TRACKR.jtrack == -1) { + cppstack->SetCurrentTrack(OPPHST.louopp[OPPHST.lstopp]); + } else { + cppstack->SetCurrentTrack( TRACKR.ispusr[mkbmx2-1] ); + } + + (TVirtualMCApplication::Instance())->Stepping(); + } + } // end of bxdraw } // end of extern "C"