Skip to content
Snippets Groups Projects
Commit eaa3a2d9 authored by Raees Khan's avatar Raees Khan
Browse files

Adding user actions

parent ddb2cf7f
No related branches found
No related tags found
1 merge request!137Fsl user actions
......@@ -209,6 +209,14 @@ int main(int argc, char** argv) {
// 3. User action
FSLActionInitialization* actInit = new FSLActionInitialization(parIsPerformance);
actInit->SetActions(
simConfig::jf["Event Actions"],
simConfig::jf["Run Actions"],
simConfig::jf["Tracking Actions"],
simConfig::jf["Stepping Actions"],
simConfig::jf["Stacking Actions"]
);
// set the name of a region in which we are interested to see a very basic simulation
// stat e.g. "EMEC" (NOTE: only if the given region can be found and executed in
// non-perfomance mode)
......
......@@ -10,19 +10,41 @@ class FSLActionInitialization : public G4VUserActionInitialization {
public:
FSLActionInitialization(bool isperformance=false);
FSLActionInitialization(bool isperformance=false, bool customUserActions = false);
~FSLActionInitialization() override;
void BuildForMaster() const override;
void Build() const override;
void SetPerformanceModeFlag(bool val) { fIsPerformance = val; }
void SetSpecialScoringRegionName(const G4String& rname) { fSpecialScoringRegionName = rname; }
void SetSpecialScoringRegionName(const G4String& rname) { fSpecialScoringRegionName = rname; }
void SetActions(std::vector<std::string> &evtActions,
std::vector<std::string> &rActions,
std::vector<std::string> &trActions,
std::vector<std::string> &steActions,
std::vector<std::string> &staActions)
{
eventActions = evtActions;
runActions = rActions;
trackingActions = trActions;
steppingActions = steActions;
stackingActions = staActions;
};
private:
GeantinoMapsConfigurator* fGeantinoMapsConfig;
bool fIsPerformance;
bool fCustomUserActions;
G4String fSpecialScoringRegionName;
std::vector<std::string> eventActions;
std::vector<std::string> runActions;
std::vector<std::string> trackingActions;
std::vector<std::string> steppingActions;
std::vector<std::string> stackingActions;
};
......
#include "FSLActionInitialization.hh"
#include "GeoModelKernel/GeoPluginLoader.h"
#include "FSLPrimaryGeneratorAction.hh"
#include "FSLRunAction.hh"
#include "FSLEventAction.hh"
......@@ -22,8 +22,8 @@
//const G4AnalysisManager* FSLActionInitialization::fMasterAnalysisManager = nullptr;
FSLActionInitialization::FSLActionInitialization(bool isperformance)
: G4VUserActionInitialization(), fIsPerformance(isperformance),
FSLActionInitialization::FSLActionInitialization(bool isperformance, bool customuseractions)
: G4VUserActionInitialization(), fIsPerformance(isperformance),fCustomUserActions(customuseractions),
fSpecialScoringRegionName("") {
fGeantinoMapsConfig = GeantinoMapsConfigurator::getGeantinoMapsConf();
......@@ -35,10 +35,12 @@ FSLActionInitialization::~FSLActionInitialization() {}
// called in case of MT
void FSLActionInitialization::BuildForMaster() const {
FSLRunAction* masterRunAct = new FSLRunAction();
if(fCustomUserActions){}/*set run action from config file*/
else
{FSLRunAction* masterRunAct = new FSLRunAction();
masterRunAct->SetPerformanceFlag(fIsPerformance);
masterRunAct->SetSpecialScoringRegionName(fSpecialScoringRegionName);
#if USE_PYTHIA
if (use_pythia()) {
G4String str(get_pythia_config());
......@@ -47,6 +49,7 @@ void FSLActionInitialization::BuildForMaster() const {
#endif
SetUserAction(masterRunAct);
}
}
void FSLActionInitialization::Build() const {
......@@ -81,7 +84,7 @@ void FSLActionInitialization::Build() const {
}
#endif
// do not create Run,Event,Stepping and Tracking actions in case of perfomance mode
if (!fIsPerformance) {
if (!fIsPerformance && !fCustomUserActions) {
FSLRunAction* runact = new FSLRunAction();
SetUserAction(runact);
runact->SetSpecialScoringRegionName(fSpecialScoringRegionName);
......@@ -113,4 +116,61 @@ void FSLActionInitialization::Build() const {
#endif
//MultiEventActions?? TO DO?
}
else if(fCustomUserActions)
{
for (const auto& element : runActions)
{
GeoPluginLoader<FSLUserRunActionPlugin> loader;
const FSLUserRunActionPlugin * plugin = loader.load(element);
G4UserRunAction* runAct = plugin->getRunAction();
SetUserAction(runAct);
}
for (const auto& element : eventActions)
{
GeoPluginLoader<FSLUserEventActionPlugin> loader;
const FSLUserEventActionPlugin * plugin = loader.load(element);
G4UserEventAction* evtAct = plugin->getEventAction();
SetUserAction(evtAct);
}
for (const auto& element : steppingActions)
{
GeoPluginLoader<FSLUserSteppingActionPlugin> loader;
const FSLUserSteppingActionPlugin * plugin = loader.load(element);
G4UserSteppingAction* steAct = plugin->getSteppingAction();
SetUserAction(steAct);
}
for (const auto& element : trackingActions)
{
GeoPluginLoader<FSLUserTrackingActionPlugin> loader;
const FSLUserTrackingActionPlugin * plugin = loader.load(element);
G4UserTrackingAction* traAct = plugin->getTrackingAction();
SetUserAction(traAct);
}
for (const auto& element : stackingActions)
{
GeoPluginLoader<FSLUserStackingActionPlugin> loader;
const FSLUserStackingActionPlugin * plugin = loader.load(element);
G4UserStackingAction* staAct = plugin->getStackingAction();
SetUserAction(staAct);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment