From 5c40c4c8e8c2b6f7e40d2202612266e771f416ad Mon Sep 17 00:00:00 2001
From: Raees Khan <rak177@pitt.edu>
Date: Mon, 27 Jun 2022 07:57:04 -0400
Subject: [PATCH] user action changes

---
 FSL/src/fsl_mainwindow.cpp                    |  75 +++++---
 FSL/src/fsl_mainwindow.h                      |  33 ++--
 FSL/src/fsl_mainwindow.ui                     | 176 +++---------------
 FullSimLight/fullSimLight.cc                  |  14 +-
 .../include/FSLActionInitialization.hh        |  18 +-
 FullSimLight/include/FSLConfigurator.hh       |   6 +-
 FullSimLight/src/FSLActionInitialization.cc   |  48 -----
 7 files changed, 107 insertions(+), 263 deletions(-)

diff --git a/FSL/src/fsl_mainwindow.cpp b/FSL/src/fsl_mainwindow.cpp
index a6152abe0..f0f07fb8a 100644
--- a/FSL/src/fsl_mainwindow.cpp
+++ b/FSL/src/fsl_mainwindow.cpp
@@ -52,7 +52,7 @@ FSLMainWindow::FSLMainWindow(QWidget *parent)
 
     //Setting up the User Actions Display
     user_action_model = new QStandardItemModel(this);
-    user_action_horizontalHeader.append("Type of Action");
+   // user_action_horizontalHeader.append("Type of Action");
     user_action_horizontalHeader.append("File");
     user_action_model->setHorizontalHeaderLabels(user_action_horizontalHeader);
     ui->user_action_table->setModel(user_action_model);
@@ -85,11 +85,12 @@ FSLMainWindow::FSLMainWindow(QWidget *parent)
    // connect(ui->pB_del_shape_ext_file, &QPushButton::released, this, &FSLMainWindow::del_shape_ext);
 
 
-    connect(ui->pB_run_actions, &QPushButton::released, this, &FSLMainWindow::assign_run_actions_file);
-    connect(ui->pB_event_actions, &QPushButton::released, this, &FSLMainWindow::assign_event_actions_file);
-    connect(ui->pB_stepping_actions, &QPushButton::released, this, &FSLMainWindow::assign_stepping_actions_file);
-    connect(ui->pB_stacking_actions, &QPushButton::released, this, &FSLMainWindow::assign_stacking_actions_file);
-    connect(ui->pB_tracking_actions, &QPushButton::released, this, &FSLMainWindow::assign_tracking_actions_file);
+  //  connect(ui->pB_run_actions, &QPushButton::released, this, &FSLMainWindow::assign_run_actions_file);
+  //  connect(ui->pB_event_actions, &QPushButton::released, this, &FSLMainWindow::assign_event_actions_file);
+  //  connect(ui->pB_stepping_actions, &QPushButton::released, this, &FSLMainWindow::assign_stepping_actions_file);
+  //  connect(ui->pB_stacking_actions, &QPushButton::released, this, &FSLMainWindow::assign_stacking_actions_file);
+  //  connect(ui->pB_tracking_actions, &QPushButton::released, this, &FSLMainWindow::assign_tracking_actions_file);
+    connect(ui->pB_add_user_action, &QPushButton::released, this, &FSLMainWindow::add_user_action);
     connect(ui->pB_del_user_action, &QPushButton::released, this, &FSLMainWindow::del_user_action);
 
     connect(ui->actionQuit, &QAction::triggered, qApp, &QApplication::quit);
@@ -442,6 +443,7 @@ std::vector<std::string> FSLMainWindow::parse_froot_string(std::string input_fro
 
 }
 
+/*
 //Function to add a Run actions file
 void FSLMainWindow::assign_run_actions_file()
 {
@@ -511,6 +513,20 @@ void FSLMainWindow::assign_tracking_actions_file()
     ui->user_action_table->model()->setData(ui->user_action_table->model()->index(rows,1),q_tracking_file_name);
     }
 }
+*/
+
+//Function to add a user action file
+void FSLMainWindow::add_user_action()
+{
+    QString q_user_file_name =  QString::fromUtf8((this->get_file_name()).c_str());
+
+    if(q_user_file_name!="")
+    {
+    int rows = ui->user_action_table->model()->rowCount();
+    ui->user_action_table->model()->insertRows(rows,1);
+    ui->user_action_table->model()->setData(ui->user_action_table->model()->index(rows,0),q_user_file_name);
+    }
+} 
 
 //Function to add a delete a user actions file
 void FSLMainWindow::del_user_action()
@@ -526,19 +542,19 @@ void FSLMainWindow::del_user_action()
 //Function to add user actions to respective lists.
 void FSLMainWindow::configure_actions()
 {
-    run_actions.clear();
-    event_actions.clear();
-    stepping_actions.clear();
-    stacking_actions.clear();
-    tracking_actions.clear();
+   // run_actions.clear();
+   // event_actions.clear();
+   // stepping_actions.clear();
+   // stacking_actions.clear();
+   // tracking_actions.clear();
     user_action_extensions.clear();
 
     for(int row = 0 ; row < ui->user_action_table->model()->rowCount(); ++row )
     {
-        std::string type_of_action = ((ui->user_action_table->model()->index(row,0)).data().toString()).toStdString();
-        std::string associated_file = ((ui->user_action_table->model()->index(row,1)).data().toString()).toStdString();
+      //  std::string type_of_action = ((ui->user_action_table->model()->index(row,0)).data().toString()).toStdString();
+        std::string associated_file = ((ui->user_action_table->model()->index(row,0)).data().toString()).toStdString();
 
-        if(type_of_action == "Run")
+      /*  if(type_of_action == "Run")
         {
             run_actions.push_back(associated_file);
         }
@@ -562,6 +578,9 @@ void FSLMainWindow::configure_actions()
         {
             tracking_actions.push_back(associated_file);
         }
+        */
+
+        user_action_extensions.push_back(associated_file);
 
     }
 
@@ -1220,7 +1239,7 @@ void FSLMainWindow::load_configuration()
 
     }
 
-    user_action_model->removeRows(0,user_action_model->rowCount());
+   /* user_action_model->removeRows(0,user_action_model->rowCount());
     for(const auto& element : j_load["Run Actions"])
     {
         std::string run_file = element;
@@ -1275,6 +1294,7 @@ void FSLMainWindow::load_configuration()
         ui->user_action_table->model()->setData(ui->user_action_table->model()->index(rows,1),q_tracking_file);
 
     }
+    */
 
    /* shape_model->removeRows(0,shape_model->rowCount());
     for(const auto& element : j_load["Shape Extensions"] )
@@ -1285,9 +1305,20 @@ void FSLMainWindow::load_configuration()
         QModelIndex shape_index = shape_model->index(shape_model->rowCount()-1);
         shape_model->setData(shape_index, q_element);
     }*/
-    }
+    
+
+    user_action_model->removeRows(0,user_action_model->rowCount());
+    for(const auto& element : j_load["User Action Extensions"])
+    {
+        std::string run_file = element;
+        QString q_run_file = QString::fromUtf8(run_file.c_str());
+        int rows = ui->user_action_table->model()->rowCount();
+        ui->user_action_table->model()->insertRows(rows,1);
+        ui->user_action_table->model()->setData(ui->user_action_table->model()->index(rows,0),q_run_file);
 
+    }
 
+}
 
 }
 
@@ -1329,13 +1360,13 @@ void FSLMainWindow::create_configuration()
     j["Magnetic Field Plugin"] = magnetic_field_plugin_file;
 
     this->configure_actions();
-    j["Run Actions"] = run_actions;
-    j["Event Actions"] = event_actions;
-    j["Stepping Actions"] = stepping_actions;
-    j["Stacking Actions"] = stacking_actions;
-    j["Tracking Actions"] = tracking_actions;
+  //  j["Run Actions"] = run_actions;
+  //  j["Event Actions"] = event_actions;
+  //  j["Stepping Actions"] = stepping_actions;
+  //  j["Stacking Actions"] = stacking_actions;
+  //  j["Tracking Actions"] = tracking_actions;
 
-  //  j["User Action Extensions"] = user_action_extensions;
+    j["User Action Extensions"] = user_action_extensions;
 
     this->configure_regions();
     j["Regions data"] = regions;
diff --git a/FSL/src/fsl_mainwindow.h b/FSL/src/fsl_mainwindow.h
index 7fef95ec7..cc0b284ef 100644
--- a/FSL/src/fsl_mainwindow.h
+++ b/FSL/src/fsl_mainwindow.h
@@ -91,11 +91,11 @@ public:
     std::string magnetic_field_map = "";
 
     //Parameters associated with the User Actions tab
-    std::vector<std::string> run_actions;
-    std::vector<std::string> event_actions;
-    std::vector<std::string> stepping_actions;
-    std::vector<std::string> stacking_actions;
-    std::vector<std::string> tracking_actions;
+  //  std::vector<std::string> run_actions;
+  //  std::vector<std::string> event_actions;
+  //  std::vector<std::string> stepping_actions;
+  //  std::vector<std::string> stacking_actions;
+  //  std::vector<std::string> tracking_actions;
     std::vector<std::string> user_action_extensions;
 
     //Parameters associated with the g4ui commands tab
@@ -145,6 +145,7 @@ public:
     std::vector<std::string> parse_froot_string(std::string input_froot_string);
     void configure_regions();
 
+    void add_user_action();
     void del_user_action();
     void configure_actions();
 
@@ -159,17 +160,17 @@ public:
     void assign_magnetic_field_map();
    //void assign_shape_ext_file();
 
-    void assign_run_actions_file();
-    void assign_event_actions_file();
-    void assign_stepping_actions_file();
-    void assign_stacking_actions_file();
-    void assign_tracking_actions_file();
-
-    void run_actions_file();
-    void event_actions_file();
-    void stepping_actions_file();
-    void stacking_actions_file();
-    void tracking_actions_file();
+ //   void assign_run_actions_file();
+ //   void assign_event_actions_file();
+ //   void assign_stepping_actions_file();
+ //   void assign_stacking_actions_file();
+ //   void assign_tracking_actions_file();
+
+ //   void run_actions_file();
+ //   void event_actions_file();
+ //   void stepping_actions_file();
+ //   void stacking_actions_file();
+ //   void tracking_actions_file();
 
     void configure_magnetic_field();
 
diff --git a/FSL/src/fsl_mainwindow.ui b/FSL/src/fsl_mainwindow.ui
index 38ef789c5..b2b042003 100644
--- a/FSL/src/fsl_mainwindow.ui
+++ b/FSL/src/fsl_mainwindow.ui
@@ -1278,8 +1278,8 @@
        <attribute name="title">
         <string>User Actions</string>
        </attribute>
-       <layout class="QGridLayout" name="gridLayout_6">
-        <item row="0" column="0">
+       <layout class="QGridLayout" name="gridLayout_4">
+        <item row="0" column="1">
          <spacer name="horizontalSpacer_2">
           <property name="orientation">
            <enum>Qt::Horizontal</enum>
@@ -1292,7 +1292,7 @@
           </property>
          </spacer>
         </item>
-        <item row="0" column="1">
+        <item row="0" column="2">
          <widget class="QLabel" name="label_25">
           <property name="font">
            <font>
@@ -1304,7 +1304,7 @@
           </property>
          </widget>
         </item>
-        <item row="0" column="2">
+        <item row="0" column="3">
          <spacer name="horizontalSpacer_3">
           <property name="orientation">
            <enum>Qt::Horizontal</enum>
@@ -1317,163 +1317,39 @@
           </property>
          </spacer>
         </item>
-        <item row="1" column="0" colspan="5">
-         <widget class="QTableView" name="user_action_table"/>
-        </item>
-        <item row="2" column="0" rowspan="2" colspan="2">
-         <widget class="QGroupBox" name="groupBox">
-          <property name="font">
-           <font>
-            <pointsize>15</pointsize>
-           </font>
-          </property>
-          <property name="title">
-           <string/>
-          </property>
-          <layout class="QGridLayout" name="gridLayout_11">
-           <item row="0" column="0">
-            <widget class="QLabel" name="label_37">
-             <property name="font">
-              <font>
-               <pointsize>16</pointsize>
-              </font>
-             </property>
-             <property name="text">
-              <string>Run Actions</string>
-             </property>
-            </widget>
-           </item>
-           <item row="0" column="1">
-            <widget class="QPushButton" name="pB_run_actions">
-             <property name="text">
-              <string>Browse Files</string>
-             </property>
-            </widget>
-           </item>
-           <item row="0" column="2">
-            <widget class="QLabel" name="label_38">
-             <property name="font">
-              <font>
-               <pointsize>16</pointsize>
-              </font>
-             </property>
-             <property name="text">
-              <string>Event Actions</string>
-             </property>
-            </widget>
-           </item>
-           <item row="0" column="3">
-            <widget class="QPushButton" name="pB_event_actions">
-             <property name="text">
-              <string>Browse Files</string>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="0">
-            <widget class="QLabel" name="label_39">
-             <property name="font">
-              <font>
-               <pointsize>16</pointsize>
-              </font>
-             </property>
-             <property name="text">
-              <string>Stepping Actions</string>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="1">
-            <widget class="QPushButton" name="pB_stepping_actions">
-             <property name="text">
-              <string>Browse Files</string>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="2">
-            <widget class="QLabel" name="label_40">
-             <property name="font">
-              <font>
-               <pointsize>16</pointsize>
-              </font>
-             </property>
-             <property name="text">
-              <string>Stacking Actions</string>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="3">
-            <widget class="QPushButton" name="pB_stacking_actions">
-             <property name="text">
-              <string>Browse Files</string>
-             </property>
-            </widget>
-           </item>
-           <item row="2" column="0">
-            <widget class="QLabel" name="label_41">
-             <property name="font">
-              <font>
-               <pointsize>16</pointsize>
-              </font>
-             </property>
-             <property name="text">
-              <string>Tracking Actions</string>
-             </property>
-            </widget>
-           </item>
-           <item row="2" column="1">
-            <widget class="QPushButton" name="pB_tracking_actions">
-             <property name="text">
-              <string>Browse Files</string>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </widget>
-        </item>
-        <item row="2" column="2" rowspan="2">
-         <spacer name="verticalSpacer_2">
-          <property name="orientation">
-           <enum>Qt::Vertical</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>20</width>
-            <height>225</height>
-           </size>
-          </property>
-         </spacer>
+        <item row="2" column="0">
+         <layout class="QHBoxLayout" name="horizontalLayout_12">
+          <item>
+           <widget class="QPushButton" name="pB_add_user_action">
+            <property name="text">
+             <string>+</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QPushButton" name="pB_del_user_action">
+            <property name="text">
+             <string>−</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
         </item>
-        <item row="2" column="3">
-         <spacer name="horizontalSpacer">
+        <item row="2" column="1" colspan="3">
+         <spacer name="horizontalSpacer_24">
           <property name="orientation">
            <enum>Qt::Horizontal</enum>
           </property>
           <property name="sizeHint" stdset="0">
            <size>
-            <width>144</width>
+            <width>1077</width>
             <height>20</height>
            </size>
           </property>
          </spacer>
         </item>
-        <item row="2" column="4">
-         <widget class="QPushButton" name="pB_del_user_action">
-          <property name="text">
-           <string>Delete</string>
-          </property>
-         </widget>
-        </item>
-        <item row="3" column="4">
-         <spacer name="verticalSpacer">
-          <property name="orientation">
-           <enum>Qt::Vertical</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>20</width>
-            <height>188</height>
-           </size>
-          </property>
-         </spacer>
+        <item row="1" column="0" colspan="4">
+         <widget class="QTableView" name="user_action_table"/>
         </item>
        </layout>
       </widget>
diff --git a/FullSimLight/fullSimLight.cc b/FullSimLight/fullSimLight.cc
index e5a7737c1..3d80abab7 100644
--- a/FullSimLight/fullSimLight.cc
+++ b/FullSimLight/fullSimLight.cc
@@ -209,22 +209,14 @@ int main(int argc, char** argv) {
     if (activateRegions)    detector->SetAddRegions(true);
     
     // 3. User action
-    if(!isBatch)
-    {
-    if(simConfig::fsl.eventActions.size()>0 || simConfig::fsl.runActions.size()>0 ||
-       simConfig::fsl.trackingActions.size()>0 || simConfig::fsl.steppingActions.size()>0 ||
-       simConfig::fsl.stackingActions.size()>0) parIsCustomUserActions = true;
-    }
+    if(!isBatch && simConfig::fsl.userActions.size()>0) parIsCustomUserActions = true;
+    
     
     FSLActionInitialization* actInit = new FSLActionInitialization(parIsPerformance,parIsCustomUserActions);
     
     if(parIsCustomUserActions){
     actInit->SetActions(
-                        simConfig::fsl.eventActions,
-                        simConfig::fsl.runActions,
-                        simConfig::fsl.trackingActions,
-                        simConfig::fsl.steppingActions,
-                        simConfig::fsl.stackingActions
+                        simConfig::fsl.userActions
                        );
 
     }
diff --git a/FullSimLight/include/FSLActionInitialization.hh b/FullSimLight/include/FSLActionInitialization.hh
index 0d042396f..a0de04222 100644
--- a/FullSimLight/include/FSLActionInitialization.hh
+++ b/FullSimLight/include/FSLActionInitialization.hh
@@ -19,17 +19,9 @@ public:
   void SetPerformanceModeFlag(bool val) { fIsPerformance = val; }
   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)
+  void SetActions(std::vector<std::string> &usrActions)
     {
-        eventActions = evtActions;
-        runActions = rActions;
-        trackingActions = trActions;
-        steppingActions = steActions;
-        stackingActions = staActions;
+      userActions = usrActions;
     };
     
 private:
@@ -39,11 +31,7 @@ private:
   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;
+    std::vector<std::string> userActions;
     
 
 
diff --git a/FullSimLight/include/FSLConfigurator.hh b/FullSimLight/include/FSLConfigurator.hh
index 5bc22fc95..150f673b5 100644
--- a/FullSimLight/include/FSLConfigurator.hh
+++ b/FullSimLight/include/FSLConfigurator.hh
@@ -66,6 +66,8 @@ struct fslConfig{
     std::vector<std::string> steppingActions;
     std::vector<std::string> stackingActions;
     std::vector<std::string> trackingActions;
+    std::vector<std::string> userActions;
+
 
     std::vector<std::string> g4UiCommands;
 };
@@ -75,7 +77,7 @@ regionConfig rc;
 json jf;
 
 inline void to_json(json& j, const fslConfig& p) {
-    j = json{{"Geometry", p.geometry},{"Physics list name", p.physicsList},{"Number of events", p.nEvents},{"Magnetic Field Intensity", p.magFieldIntensity},{"Generator", p.eventGeneratorName},{"Event input file", p.eventInputFile},{"Type of event", p.typeOfEvent},{"Sensitive Detector Extensions", p.sensitiveDetectors},{"Output Hits file", p.outputHitsFile},{"Output Histo file", p.outputHistoFile},{"Magnetic Field Type", p.magFieldType},{"Magnetic Field Map", p.magFieldMap},{"Magnetic Field Plugin", p.magFieldPlugin},{"Run Actions", p.runActions},{"Event Actions", p.eventActions},{"Stepping Actions", p.steppingActions},{"Stacking Actions", p.stackingActions},{"Tracking Actions", p.trackingActions},{"g4ui_commands", p.g4UiCommands}};
+    j = json{{"Geometry", p.geometry},{"Physics list name", p.physicsList},{"Number of events", p.nEvents},{"Magnetic Field Intensity", p.magFieldIntensity},{"Generator", p.eventGeneratorName},{"Event input file", p.eventInputFile},{"Type of event", p.typeOfEvent},{"Sensitive Detector Extensions", p.sensitiveDetectors},{"Output Hits file", p.outputHitsFile},{"Output Histo file", p.outputHistoFile},{"Magnetic Field Type", p.magFieldType},{"Magnetic Field Map", p.magFieldMap},{"Magnetic Field Plugin", p.magFieldPlugin},{"Run Actions", p.runActions},{"Event Actions", p.eventActions},{"Stepping Actions", p.steppingActions},{"Stacking Actions", p.stackingActions},{"Tracking Actions", p.trackingActions},{"User Action Extensions", p.userActions},{"g4ui_commands", p.g4UiCommands}};
     
 }
 inline void to_json(json& j, const regionConfig& r) {
@@ -100,6 +102,8 @@ inline void from_json(const json& j, fslConfig& p) {
     p.steppingActions=j.at("Stepping Actions").get<std::vector<std::string>>();
     p.stackingActions=j.at("Stacking Actions").get<std::vector<std::string>>();
     p.trackingActions=j.at("Tracking Actions").get<std::vector<std::string>>();
+    p.userActions=j.at("User Action Extensions").get<std::vector<std::string>>();
+
     p.g4UiCommands=j.at("g4ui_commands").get<std::vector<std::string>>();
     
 }
diff --git a/FullSimLight/src/FSLActionInitialization.cc b/FullSimLight/src/FSLActionInitialization.cc
index 8028853d2..4476321e4 100644
--- a/FullSimLight/src/FSLActionInitialization.cc
+++ b/FullSimLight/src/FSLActionInitialization.cc
@@ -126,54 +126,6 @@ void FSLActionInitialization::Build() const {
     
   else if(fCustomUserActions)
   {
-      for (const auto& element : runActions)
-      {
-          GeoPluginLoader<FSLUserRunActionPlugin> loader;
-          const FSLUserRunActionPlugin * plugin = loader.load(element);
-          G4UserRunAction*  runAct = plugin->getUserRunAction();
-          SetUserAction(runAct);
-          
-      }
-      
-      for (const auto& element : eventActions)
-      {
-          GeoPluginLoader<FSLUserEventActionPlugin> loader;
-          const FSLUserEventActionPlugin * plugin = loader.load(element);
-          G4UserEventAction*  evtAct = plugin->getUserEventAction();
-          SetUserAction(evtAct);
-          
-      }
-      
-      for (const auto& element : steppingActions)
-      {
-          GeoPluginLoader<FSLUserSteppingActionPlugin> loader;
-          const FSLUserSteppingActionPlugin * plugin = loader.load(element);
-          G4UserSteppingAction*  steAct = plugin->getUserSteppingAction();
-          SetUserAction(steAct);
-          
-      }
-      
-      
-      for (const auto& element : trackingActions)
-      {
-          GeoPluginLoader<FSLUserTrackingActionPlugin> loader;
-          const FSLUserTrackingActionPlugin * plugin = loader.load(element);
-          G4UserTrackingAction*  traAct = plugin->getUserTrackingAction();
-          SetUserAction(traAct);
-          
-      }
-      
-      for (const auto& element : stackingActions)
-      {
-          GeoPluginLoader<FSLUserStackingActionPlugin> loader;
-          const FSLUserStackingActionPlugin * plugin = loader.load(element);
-          G4UserStackingAction*  staAct = plugin->getUserStackingAction();
-          SetUserAction(staAct);
-          
-      }
-      
-      
-      
       
       
       
-- 
GitLab