Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 2 additions & 19 deletions fairroot/base/sim/FairDetector.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

#include "FairGeoNode.h" // for FairGeoNode
#include "FairRootManager.h"
#include "FairRunSim.h"
#include "FairVolume.h" // for FairVolume

#include <TFolder.h> // for TFolder
Expand Down Expand Up @@ -93,25 +94,7 @@ void FairDetector::Initialize()
DefineSensitiveVolumes();
}

Int_t fMCid;
FairGeoNode* fN;
TString cutName;
TString copysign = "#";
for (auto aVol : fAllSensitiveVolumes) {
cutName = aVol->GetName();
Ssiz_t pos = cutName.Index(copysign, 1);
if (pos > 1) {
cutName.Resize(pos);
}
if (aVol->getModId() == GetModId()) {
fMCid = TVirtualMC::GetMC()->VolId(cutName.Data());
aVol->setMCid(fMCid);
fN = aVol->getGeoNode();
if (fN) {
fN->setMCid(fMCid);
}
}
}
GetRunSim().UpdateSensitiveVolumesForModule(*this);

// Initialize cached pointer to MC (on master in sequential mode)
fMC = TVirtualMC::GetMC();
Expand Down
2 changes: 1 addition & 1 deletion fairroot/base/sim/FairMCApplication.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -880,7 +880,7 @@ void FairMCApplication::InitGeometry()
fMCEventHeader->SetRunID(runId);

// Fill sensitive volumes in fVolMap
for (auto fv : FairModule::fAllSensitiveVolumes) {
for (auto fv : fRun->RangeAllSensitiveVolumes()) {
if (!fv) {
continue;
}
Expand Down
6 changes: 3 additions & 3 deletions fairroot/base/sim/FairModule.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,6 @@
#include <memory>
#include <tuple> // for std::ignore

thread_local std::vector<FairVolume*> FairModule::fAllSensitiveVolumes;

void FairModule::ConstructGeometry()
{
LOG(warn)
Expand Down Expand Up @@ -216,9 +214,10 @@ void FairModule::SetGeometryFileName(TString fname, TString)

void FairModule::RegisterSensitiveVolume(FairVolume& vol)
{
assert(fRunSim);
vol.setModId(fModId);
vol.SetModule(this);
fAllSensitiveVolumes.push_back(&vol);
fRunSim->RegisterSensitiveVolume(vol);
++fNbOfSensitiveVol;
}

Expand Down Expand Up @@ -277,6 +276,7 @@ void FairModule::ProcessNodes(TList* nodes)

void FairModule::AddSensitiveVolume(TGeoVolume* vol)
{
assert(vol);
auto volName = vol->GetName();
LOG(debug2) << "AddSensitiveVolume " << volName;

Expand Down
16 changes: 11 additions & 5 deletions fairroot/base/sim/FairModule.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
#include <TList.h> // for TList (ptr only), TListIter
#include <TNamed.h> // for TNamed
#include <TObjArray.h> // for TObjArray
#include <TRefArray.h> // for TRefArray
#include <TString.h> // for TString, operator!=
#include <TVirtualMC.h>
#include <cassert>
#include <fairlogger/Logger.h>
#include <string>
#include <type_traits>
Expand Down Expand Up @@ -144,10 +144,6 @@ class FairModule : public TNamed
static thread_local inline FairVolumeList* vList{nullptr}; //!
/**total number of volumes in a simulaion session*/
static thread_local inline Int_t fNbOfVolumes{0}; //!
/**
* For internal use only: list of all sensitive volumes in a simulaion session
*/
static thread_local std::vector<FairVolume*> fAllSensitiveVolumes; //!

TString fMotherVolumeName{""}; //!
/**
Expand Down Expand Up @@ -195,6 +191,16 @@ class FairModule : public TNamed
*/
FairRootManager& GetRootManager();

/**
* \brief Get RunSim of this Module
* \note Only valid after being added to a RunSim
*/
FairRunSim& GetRunSim()
{
assert(fRunSim);
return *fRunSim;
}

/**
* \brief Get Geometry Loader
* \note Only valid during ConstructGeometry
Expand Down
22 changes: 22 additions & 0 deletions fairroot/base/steer/FairRunSim.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "FairRunIdGenerator.h" // for FairRunIdGenerator
#include "FairRuntimeDb.h" // for FairRuntimeDb
#include "FairTask.h" // for FairTask
#include "FairVolume.h"

#include <TCollection.h> // for TIter
#include <TGeoManager.h> // for gGeoManager
Expand Down Expand Up @@ -431,3 +432,24 @@ void FairRunSim::ls(Option_t* option) const
}

TMCThreadLocal FairRunSim* FairRunSim::fginstance = nullptr;

void FairRunSim::UpdateSensitiveVolumesForModule(FairModule& mod)
{
TString copysign = "#";
for (auto aVol : fAllSensitiveVolumes) {
if (aVol->getModId() != mod.GetModId()) {
continue;
}
TString cutName{aVol->GetName()};
Ssiz_t pos = cutName.Index(copysign, 1);
if (pos > 1) {
cutName.Resize(pos);
}
Int_t mcid = TVirtualMC::GetMC()->VolId(cutName.Data());
aVol->setMCid(mcid);
FairGeoNode* node = aVol->getGeoNode();
if (node) {
node->setMCid(mcid);
}
}
}
21 changes: 21 additions & 0 deletions fairroot/base/steer/FairRunSim.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,15 @@
#include <functional>
#include <memory>
#include <utility>
#include <vector>

class FairField;
class FairGeoLoader;
class FairMCEventHeader;
class FairMesh;
class FairModule;
class FairPrimaryGenerator;
class FairVolume;

/**
* \brief Configure the Simulation session
Expand Down Expand Up @@ -223,6 +225,20 @@ class FairRunSim : public FairRun

void ls(Option_t* option = "") const override;

/**
* \brief Internal: Add Sensitive Volume
*/
void RegisterSensitiveVolume(FairVolume& vol) { fAllSensitiveVolumes.push_back(&vol); }
/**
* \brief Internal: Iterate over all sensitive Volumes
*/
auto const& RangeAllSensitiveVolumes() const { return fAllSensitiveVolumes; }

/**
* \brief Internal helper for FairDetector
*/
void UpdateSensitiveVolumesForModule(FairModule& mod);

private:
FairRunSim(const FairRunSim& M);
FairRunSim& operator=(const FairRunSim&) { return *this; }
Expand All @@ -239,6 +255,11 @@ class FairRunSim : public FairRun

std::unique_ptr<FairGeoLoader> fGeoLoader; //!

/**
* For internal use only: list of all sensitive volumes in a simulaion session
*/
std::vector<FairVolume*> fAllSensitiveVolumes; //!

protected:
Int_t count{0}; //!< Internal counter
FairMCApplication* fApp{nullptr}; //!< Main VMC application
Expand Down