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
1 change: 1 addition & 0 deletions examples/extracted_MDC2020.fcl
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
physics.analyzers.Mu2eEventDisplay.gdmlname :"Offline/gen/gdml/mu2e_extracted_MDC2020.gdml"
services.TFileService.fileName: "/dev/null"
services.GeometryService.inputFile: "Offline/Mu2eG4/geom/geom_common_extracted_MDC2020.txt"
physics.analyzers.Mu2eEventDisplay.geometry : "extracted_2020"

physics.EndPath : [ @sequence::REveDis.seqBase]
physics.REvePath : @local::REvePath
Expand Down
39 changes: 38 additions & 1 deletion examples/extracted_MDC2025.fcl
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,47 @@
#include "Offline/fcl/minimalMessageService.fcl"
#include "Offline/fcl/standardProducers.fcl"
#include "Offline/fcl/standardServices.fcl"
#include "EventDisplay/fcl/prolog.fcl"
#include "EventDisplay/fcl/extracted.fcl"


physics.analyzers.Mu2eEventDisplay.gdmlname :"Offline/gen/gdml/mu2e_extracted.gdml"
services : @local::Services.Reco

process_name : Nominal

source : { module_type : RootInput }

physics :
{
analyzers : { @table::REveDis.analyzers}
producers : { @table::REveDis.producers }
filters : { @table::REveDis.filters }
}

# print statements
physics.analyzers.Mu2eEventDisplay.diagLevel : 10

# the path
physics.EndPath : [ @sequence::REveDis.seqBase]
physics.REvePath : @local::REvePath
physics.trigger_paths : ["REvePath" ]
physics.analyzers.Mu2eEventDisplay.SelectEvents : ["REvePath" ]


source.inputCommands: ["keep *",
"drop mu2e::CaloClusters_CaloClusterFast_*_*"
]

# useless file name
services.TFileService.fileName: "/dev/null"

physics.analyzers.Mu2eEventDisplay.gdmlname :"Offline/gen/gdml/mu2e_extracted.gdml"
physics.analyzers.Mu2eEventDisplay.geometry : "extracted_2025"
physics.analyzers.Mu2eEventDisplay.filler.addCrvClusters : false
physics.analyzers.Mu2eEventDisplay.filler.addCrvRecoPulse : true
physics.analyzers.Mu2eEventDisplay.filler.addCaloDigis : true
physics.analyzers.Mu2eEventDisplay.filler.addClusters : false
physics.analyzers.Mu2eEventDisplay.filler.addKalSeeds : false
physics.analyzers.Mu2eEventDisplay.extracted : true
services.TFileService.fileName: "/dev/null"
services.GeometryService.inputFile: "Offline/Mu2eG4/geom/geom_common_extracted.txt"
1 change: 1 addition & 0 deletions examples/nominal_MDC2020.fcl
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ physics :

# print statements
physics.analyzers.Mu2eEventDisplay.diagLevel : 10
physics.analyzers.Mu2eEventDisplay.geometry : "nominal_2020"

# the path
physics.EndPath : [ @sequence::REveDis.seqBase]
Expand Down
6 changes: 5 additions & 1 deletion examples/nominal_MDC2025.fcl
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@ physics :

# print statements
physics.analyzers.Mu2eEventDisplay.diagLevel : 10

physics.analyzers.Mu2eEventDisplay.geometry : "nominal_2025"
physics.analyzers.Mu2eEventDisplay.filler.addCrvClusters : true
physics.analyzers.Mu2eEventDisplay.filler.addCrvRecoPulse : true
physics.analyzers.Mu2eEventDisplay.filler.addSimParts : true
physics.analyzers.Mu2eEventDisplay.filler.addCaloDigis : true
# the path
physics.EndPath : [ @sequence::REveDis.seqBase]
physics.REvePath : @local::REvePath
Expand Down
63 changes: 37 additions & 26 deletions fcl/extracted.fcl
Original file line number Diff line number Diff line change
@@ -1,29 +1,40 @@
#include "EventDisplay/fcl/prolog.fcl"
# author : Sophie Middleton
# purpose : example fo nominal geometry i.e. not extracted

services : @local::Services.Reco
process_name : Extracted
source : { module_type : RootInput }
physics :
{
analyzers : { @table::REveDis.analyzers}
producers : { @table::REveDis.producers }
filters : { @table::REveDis.filters }
}
# geometry options
Mu2eEventDisplay.showCrv : true
Mu2eEventDisplay.showPS : false
Mu2eEventDisplay.showTS : false
Mu2eEventDisplay.showDS : false
Mu2eEventDisplay.addCrvBars : true
Mu2eEventDisplay.addKalInter : true
Mu2eEventDisplay.addCrystalHits : true
Mu2eEventDisplay.filler.addHelixSeeds : false
Mu2eEventDisplay.filler.addKalSeeds : true
Mu2eEventDisplay.filler.addClusters : true
Mu2eEventDisplay.filler.addHits : false # adds ComboHits
Mu2eEventDisplay.filler.addCrvClusters : true
Mu2eEventDisplay.filler.addCrvRecoPulse : true
Mu2eEventDisplay.filler.addTimeClusters : false
Mu2eEventDisplay.filler.addSimParts : false
Mu2eEventDisplay.addTrkStrawHits : true
Mu2eEventDisplay.addTrkCaloHits : true
Mu2eEventDisplay.filler.addCosmicTrackSeeds : false
Mu2eEventDisplay.filler.addMCTraj : true
Mu2eEventDisplay.filler.addHelixSeeds : false
Mu2eEventDisplay.specifyTag : false

physics.analyzers.Mu2eEventDisplay.showCrv : true
physics.analyzers.Mu2eEventDisplay.showST: false
physics.analyzers.Mu2eEventDisplay.addCrvBars : true
physics.analyzers.Mu2eEventDisplay.filler.addCrvRecoPulse: true
physics.analyzers.Mu2eEventDisplay.filler.addCrvClusters : false
physics.analyzers.Mu2eEventDisplay.filler.addCosmicTrackSeeds : false
physics.analyzers.Mu2eEventDisplay.addCrystalHits : true
physics.analyzers.Mu2eEventDisplay.addKalInter : true
physics.analyzers.Mu2eEventDisplay.addTrkStrawHits : true
physics.analyzers.Mu2eEventDisplay.filler.addKalSeeds : true
physics.analyzers.Mu2eEventDisplay.filler.addTrkHits : false
physics.analyzers.Mu2eEventDisplay.filler.addClusters : false //CaloClusters
physics.analyzers.Mu2eEventDisplay.filler.addHits : false //ComboHits
physics.analyzers.Mu2eEventDisplay.filler.addSimParts : true
Mu2eEventDisplay.seqMode : true
Mu2eEventDisplay.strawdisplay : false

Mu2eEventDisplay.diagLevel : 10

# the path
physics.EndPath : [ @sequence::REveDis.seqBase]
physics.REvePath : @local::REvePath
physics.trigger_paths : ["REvePath" ]
Mu2eEventDisplay.SelectEvents : ["REvePath" ]

# useless file name
services.TFileService.fileName: "/dev/null"

physics.analyzers.Mu2eEventDisplay.extracted : true
physics.analyzers.Mu2eEventDisplay.seqMode : true
2 changes: 1 addition & 1 deletion fcl/nominal.fcl
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Mu2eEventDisplay.filler.addKalSeeds : true
Mu2eEventDisplay.filler.addClusters : true
Mu2eEventDisplay.filler.addHits : false # adds ComboHits
Mu2eEventDisplay.filler.addCrvClusters : true
Mu2eEventDisplay.filler.addCrvRecoPulse : false
Mu2eEventDisplay.filler.addCrvRecoPulse : true
Mu2eEventDisplay.filler.addTimeClusters : false
Mu2eEventDisplay.filler.addSimParts : false
Mu2eEventDisplay.addTrkStrawHits : true
Expand Down
33 changes: 29 additions & 4 deletions inc/EventDisplayManager.hh
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,13 @@
#include <mutex>
#include <stdexcept>
#include <iostream>
#include <map>
#include <string>
#include "EventDisplay/inc/GUI.hh"
#include "EventDisplay/inc/TextSelect.hh"
#include "nlohmann/json.hpp"
#include <ROOT/REveManager.hxx>
#include "Offline/ConfigTools/inc/SimpleConfig.hh"

namespace ROOT::Experimental {
class REveManager;
Expand All @@ -25,21 +28,24 @@ namespace mu2e {
* Inherits from ROOT::Experimental::REveElement to receive browser commands.
*/
class EventDisplayManager : public ROOT::Experimental::REveElement {
public:
// Default constructor required by ROOT's dictionary generation mechanism.
EventDisplayManager() = default;
private:
// Default constructor is private to prevent ROOT from creating uninitialized instances.
EventDisplayManager() = default;

public:
/**
* @brief Primary constructor for initializing thread synchronization and manager pointers.
* @param eveMgr The global REveManager instance.
* @param cv The condition variable for inter-thread signaling (notify/wait).
* @param m The mutex for protecting access and for condition variable use.
* @param fGui Pointer to the custom GUI element instance.
* @param geometry The initial geometry type (e.g., "2020", "2025").
*/
explicit EventDisplayManager(ROOT::Experimental::REveManager* eveMgr,
std::condition_variable& cv,
std::mutex& m,
GUI *fGui);
GUI *fGui,
const std::string& geometry = "2025");

// --- REve Command Methods (Invoked by browser buttons) ---

Expand Down Expand Up @@ -75,6 +81,19 @@ namespace mu2e {
* @param textId The assigned REve Element ID.
*/
void setTextSelectId(std::uint32_t textId);

/**
* @brief Set the current geometry type and update the corresponding TextSelect element ID.
* @param geomType The geometry type (e.g., "2020", "2025").
*/
void setGeometry(const std::string& geomType);

/**
* @brief Get the TextSelect element ID for the current geometry.
* @return The element ID corresponding to the current geometry type.
*/
std::uint32_t getTextSelectIdForGeometry() const;

int id_;
void setid(int id){ id_ = id;}
private:
Expand All @@ -95,6 +114,12 @@ namespace mu2e {
// this is kept for direct access if necessary (but is less robust).
TextSelect *fText_{nullptr};

// Current geometry type (e.g., "2020", "2025")
std::string currentGeometry_{"2025"};

// Mapping of geometry types to TextSelect element IDs
static const std::map<std::string, std::uint32_t> geometryToElementIdMap;

};
}

Expand Down
Loading