Media handling added
authoriglez2 <iglez2@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 21 Nov 2002 18:40:06 +0000 (18:40 +0000)
committeriglez2 <iglez2@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 21 Nov 2002 18:40:06 +0000 (18:40 +0000)
TFluka/TFluka.cxx
TFluka/TFluka.h

index 2eda454fd564ca3150060a9997c39b7d0c144098..2d6cd10ee2f408e889d91308e1c69f9f4e0d35fa 100644 (file)
@@ -15,6 +15,9 @@
 
 /*
 $Log$
+Revision 1.5  2002/11/07 17:59:10  iglez2
+Included the geometry through geant4_vmc/FLUGG
+
 Revision 1.4  2002/11/04 16:00:46  iglez2
 The conversion between ID and PDG now uses Fluka routines and arrays which is more consistent.
 
@@ -110,7 +113,8 @@ TFluka::TFluka()
   :TVirtualMC(),
    fVerbosityLevel(0),
    fInputFileName(""),
-   fDetector(0)
+   fDetector(0),
+   fCurrentFlukaRegion(-1)
 { 
   //
   // Default constructor
@@ -121,7 +125,8 @@ TFluka::TFluka(const char *title, Int_t verbosity)
   :TVirtualMC("TFluka",title),
    fVerbosityLevel(verbosity),
    fInputFileName(""),
-   fDetector(0)
+   fDetector(0),
+   fCurrentFlukaRegion(-1)
 {
   if (fVerbosityLevel >=3)
     cout << "==> TFluka::TFluka(" << title << ") constructor called." << endl;
@@ -193,6 +198,15 @@ void TFluka::FinishGeometry() {
 
   fGeometryManager->Ggclos();
 
+  FGeometryInit* flugg = FGeometryInit::GetInstance();
+  map<TString, Int_t, less<TString> >::iterator i;
+  for (fVolumeMediaMap.begin(); i != fVolumeMediaMap.end(); i++) {
+    TString volName = (*i).first;
+    Int_t   media   = (*i).second;
+    Int_t   region  = flugg->GetRegionFromName(volName);
+    fMediaByRegion[region] = media;
+  }
+  
   if (fVerbosityLevel >=3)
     cout << "<== TFluka::FinishGeometry() called." << endl;
 } 
@@ -316,6 +330,7 @@ void TFluka::Gstpar(Int_t itmed, const char *param, Double_t parval) {
 Int_t TFluka::Gsvolu(const char *name, const char *shape, Int_t nmed,  
                     Float_t *upar, Int_t np)  {
 //
+  fVolumeMediaMap[TString(name)] = nmed;
   return fGeometryManager->Gsvolu(name, shape, nmed, upar, np); 
 }
 Int_t TFluka::Gsvolu(const char *name, const char *shape, Int_t nmed,  
@@ -398,6 +413,12 @@ void TFluka::WriteEuclid(const char* fileName, const char* topVol,
 
 
 
+//_____________________________________________________________________________
+// methods needed by the stepping
+//____________________________________________________________________________ 
+Int_t TFluka::GetMedium() const {
+  return fMediaByRegion[fCurrentFlukaRegion];
+}
 
 
 
index c1211639aebb0109970ddfedd9ad8f23c32259de..31da47ba3052eba812a61cbb05db650dae549bb7 100644 (file)
@@ -8,7 +8,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 //                                                                           //
 //                                                                           //
-// FLUKA implementation of the TVirtualMC Interface                          //
+// FLUKA implementation of the AliMC Interface                               //
 //                                                                           //
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
@@ -17,6 +17,9 @@
 #include "TVirtualMC.h"
 #include "TMCProcess.h" 
 
+#include <map>
+#include <vector>
+
 //Forward declaration
 class TG4GeometryManager;
 class TG4DetConstruction;
@@ -184,8 +187,7 @@ class TFluka : public TVirtualMC {
     {printf("WARNING: MaxStep not yet implemented !\n"); return -1.;}
   virtual Int_t    GetMaxNStep() const
     {printf("WARNING: GetMaxNStep not yet implemented !\n"); return -1;}
-  virtual Int_t    GetMedium() const
-    {printf("WARNING: GetMedium not yet implemented !\n"); return -1;}
+  virtual Int_t    GetMedium() const;
   
   // tracking particle 
   // dynamic properties
@@ -293,6 +295,8 @@ class TFluka : public TVirtualMC {
   // - Verbosity level
   Int_t GetVerbosityLevel() const {return fVerbosityLevel;}
   void SetVerbosityLevel(Int_t l) {fVerbosityLevel = l;}
+  void SetCurrentFlukaRegion(Int_t reg) {fCurrentFlukaRegion=reg;}
+  Int_t GetCurrentFlukaRegion() const {return fCurrentFlukaRegion;}
 
  private:
   TFluka(const TFluka &mc){}
@@ -300,7 +304,7 @@ class TFluka : public TVirtualMC {
 
  protected:
   Int_t   fVerbosityLevel; //Verbosity level (0 lowest - 3 highest)
-  TString fInputFileName; //Name of the input file (f.e. mu.inp)
+  TString fInputFileName; //Name of the input file (f.e. alice.inp)
   
 
 
@@ -308,6 +312,13 @@ class TFluka : public TVirtualMC {
   TG4GeometryManager*  fGeometryManager; //geometry manager
   TG4DetConstruction*  fDetector;        //Detector
 
+  //Index of fluka region at each step
+  Int_t fCurrentFlukaRegion;
+  //Map between volume name and media indices
+  map<TString, Int_t, less<TString> > fVolumeMediaMap;
+  //Map between region and media indices
+  vector<Int_t> fMediaByRegion;
+
 
   ClassDef(TFluka,1)  //C++ interface to Fluka montecarlo
 };