Skip to content

Commit d3bc719

Browse files
Merge pull request #224 from sophiemiddleton/Mu2eDisplay
Reopening previous PR
2 parents 82d7973 + 9a3baf8 commit d3bc719

21 files changed

+319
-25
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ If you are working with an ntuple, you may not know all the commands to figure o
3232
```
3333

3434
where the run, subrun and event numbers are identified from your analysis to be an event of interest in that root file.
35+
36+
37+
3538
# Tutorial
3639

3740
We are in the process of updating our Analysis Tools Tutorial material. In the meantime, please see: https://mu2ewiki.fnal.gov/wiki/EventDisplayTutorial

examples/nominal_example.fcl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ physics :
1919
}
2020
# geometry options
2121
physics.analyzers.Mu2eEventDisplay.showCRV : true
22+
2223
physics.analyzers.Mu2eEventDisplay.showPS : false
2324
physics.analyzers.Mu2eEventDisplay.showTS : false
2425
physics.analyzers.Mu2eEventDisplay.showDS : false
25-
physics.analyzers.Mu2eEventDisplay.addCRVBars : true
26+
physics.analyzers.Mu2eEventDisplay.addCRVBars : false
27+
2628
physics.analyzers.Mu2eEventDisplay.addKalInter : true
2729
physics.analyzers.Mu2eEventDisplay.addCrystalHits : true
2830
physics.analyzers.Mu2eEventDisplay.filler.addHelixSeeds : false
@@ -32,6 +34,7 @@ physics.analyzers.Mu2eEventDisplay.filler.addHits : false # adds ComboHits
3234
physics.analyzers.Mu2eEventDisplay.filler.addCrvClusters : true
3335
physics.analyzers.Mu2eEventDisplay.filler.addCrvHits : true
3436
physics.analyzers.Mu2eEventDisplay.filler.addTimeClusters : false
37+
physics.analyzers.Mu2eEventDisplay.filler.addSimParts : false
3538
physics.analyzers.Mu2eEventDisplay.addTrkStrawHits : true
3639
physics.analyzers.Mu2eEventDisplay.filler.addCosmicTrackSeeds : false
3740
physics.analyzers.Mu2eEventDisplay.filler.addMCTraj : true

fcl/prolog.fcl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,18 @@ Mu2eEventDisplay : {
2222
filler : {
2323
diagLevel : 0
2424
ComboHitCollection : ["makeSH"]
25-
CrvRecoPulseCollection : ["SelectReco"]
26-
CrvCoincidenceClusterCollection : ["SelectReco:CrvCoincidenceClusterFinder" ]
25+
CrvRecoPulseCollection : ["SelectRecoMC"]
26+
CrvCoincidenceClusterCollection : ["SelectRecoMC:CrvCoincidenceClusterFinder" ]
2727
TimeClusterCollection : ["MHDeM"]
28-
CaloDigiCollection : ["CaloDigi"]
28+
CaloDigiCollection : ["CaloDigiMaker"]
2929
CaloClusterCollection : ["CaloClusterMaker"]
30-
KalSeedPtrCollection : ["KKDmuH"]
30+
KalSeedPtrCollection : ["MergeKK"]
3131
HelixSeedCollection : ["MHFinderDe"]
3232
CosmicTrackSeedCollection : "CosmicTrackFinderTimeFit"
33-
MCTrajectoryCollection : ["compressDigiMCs"]
33+
MCTrajectoryCollection : ["compressRecoMCs"]
3434
# SurfaceStepCollection : ["compressRecoMCs"]
3535
SurfaceStepCollection : []
36+
SimParticleCollection : ["compressSTMDet"]
3637
addHits : false
3738
addCrvHits : false
3839
addCrvClusters : false
@@ -44,6 +45,7 @@ Mu2eEventDisplay : {
4445
addCosmicTrackSeeds : false
4546
addMCTraj : true
4647
addSurfSteps : true
48+
addSimParts : true
4749
FillAll : false
4850
}
4951
particles : [11,13,2212,2112,211,22,212]

inc/CollectionFiller.hh

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
namespace mu2e{
1919

2020
enum RecoDataProductName {ComboHits, CrvRecoPulses, TimeClusters, CaloClusters, HelixSeeds, KalSeeds, CosmicTrackSeeds, TrkHits, CrvCoincidenceCluster, CaloDigis};
21-
enum MCDataProductName {MCTrajectories, SurfaceSteps};
21+
enum MCDataProductName {MCTrajectories, SurfaceSteps, SimParticles};
2222
class CollectionFiller
2323
{
2424
public:
@@ -37,6 +37,7 @@ namespace mu2e{
3737
fhicl::Atom<art::InputTag>cosmicTrackSeedTag{Name("CosmicTrackSeedCollection"),Comment("cosmicTrackSeedTag")};
3838
fhicl::Sequence<art::InputTag>MCTrajTag{Name("MCTrajectoryCollection"),Comment("MCTrajTag")};
3939
fhicl::Sequence<art::InputTag>SurfStepsTag{Name("SurfaceStepCollection"),Comment("SurfaceSteps Collection Tag")};
40+
fhicl::Sequence<art::InputTag>SimTag{Name("SimParticleCollection"),Comment("SimTag")};
4041
fhicl::Atom<bool> addHits{Name("addHits"), Comment("set to add the hits"),false};
4142
fhicl::Atom<bool> addCrvHits{Name("addCrvHits"), Comment("set to add crv hits"),false};
4243
fhicl::Atom<bool> addCrvClusters{Name("addCrvClusters"), Comment("set to add crv clusters"),false};
@@ -49,6 +50,7 @@ namespace mu2e{
4950
fhicl::Atom<bool> addCosmicTrackSeeds{Name("addCosmicTrackSeeds"), Comment("set to add cosmic track seeds"),false};
5051
fhicl::Atom<bool> addMCTraj{Name("addMCTraj"), Comment("set to add MCTrajectories"),false};
5152
fhicl::Atom<bool> addSurfSteps{Name("addSurfSteps"), Comment("set to add SurfaceStep MC"),false};
53+
fhicl::Atom<bool> addSimParts{Name("addSimParts"), Comment("set to add SimParticles MC"),false};
5254
fhicl::Atom<bool> FillAll{Name("FillAll"), Comment("to see all available products"), false};
5355
};
5456

@@ -67,10 +69,11 @@ namespace mu2e{
6769
art::InputTag cosmicTrackSeedTag_;
6870
std::vector<art::InputTag> MCTrajTag_;
6971
std::vector<art::InputTag> SurfStepsTag_;
72+
std::vector<art::InputTag> SimTag_;
7073
art::Event *_event;
7174
art::Run *_run;
7275
bool addHits_, addCrvHits_, addCrvClusters_, addTimeClusters_, addTrkHits_, addCaloDigis_, addClusters_, addHelixSeeds_, addKalSeeds_, addCosmicTrackSeeds_, addMCTraj_,
73-
addSurfSteps_, FillAll_;
76+
addSurfSteps_, addSimParts_, FillAll_;
7477
void FillRecoCollections(const art::Event& evt, DataCollections &data, RecoDataProductName code);
7578
void FillMCCollections(const art::Event& evt, DataCollections &data, MCDataProductName code);
7679
//template <class L> void test(const L& item);

inc/DataCollections.hh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "Offline/RecoDataProducts/inc/CosmicTrackSeed.hh"
1111
#include "Offline/MCDataProducts/inc/MCTrajectoryPoint.hh"
1212
#include "Offline/MCDataProducts/inc/MCTrajectoryCollection.hh"
13+
#include "Offline/MCDataProducts/inc/SimParticle.hh"
1314
#include "Offline/MCDataProducts/inc/SurfaceStep.hh"
1415
//Art/FCL:
1516
#include "art/Framework/Principal/Event.h"
@@ -44,6 +45,7 @@ namespace mu2e{
4445
const mu2e::KalSeedPtrCollection* kalSeedcol = 0;
4546
const mu2e::CosmicTrackSeedCollection* CosmicTrackSeedcol = 0;
4647
const mu2e::MCTrajectoryCollection *mctrajcol = 0;
48+
const mu2e::SimParticleCollection *simcol = 0;
4749
const mu2e::SurfaceStepCollection *surfstepcol = 0;
4850
//lists:
4951
std::vector<const mu2e::HelixSeedCollection*> helix_list;
@@ -55,6 +57,7 @@ namespace mu2e{
5557
std::vector<const mu2e::CrvCoincidenceClusterCollection*> crvcoin_list;
5658
std::vector<const mu2e::TimeClusterCollection*> timecluster_list;
5759
std::vector<const mu2e::MCTrajectoryCollection*> mctrack_list;
60+
std::vector<const mu2e::SimParticleCollection*> sim_list;
5861
std::vector<const mu2e::SurfaceStepCollection*> surfstep_list;
5962
//Input Tag Labels:
6063
std::vector<std::string> helix_labels;
@@ -66,6 +69,7 @@ namespace mu2e{
6669
std::vector<std::string> combohit_labels;
6770
std::vector<std::string> crvpulse_labels;
6871
std::vector<std::string> crvcoin_labels;
72+
std::vector<std::string> sim_labels;
6973
std::vector<std::string> timecluster_labels;
7074
//Link Labels and Lists:
7175
std::tuple<std::vector<std::string>, std::vector<const mu2e::HelixSeedCollection*>> helix_tuple;
@@ -77,6 +81,7 @@ namespace mu2e{
7781
std::tuple<std::vector<std::string>, std::vector<const mu2e::CrvCoincidenceClusterCollection*>> crvcoin_tuple;
7882
std::tuple<std::vector<std::string>, std::vector<const mu2e::TimeClusterCollection*>> timecluster_tuple;
7983
std::tuple<std::vector<std::string>, std::vector<const mu2e::MCTrajectoryCollection*>> mctrack_tuple;
84+
std::tuple<std::vector<std::string>, std::vector<const mu2e::SimParticleCollection*>> sim_tuple;
8085
std::tuple<std::vector<std::string>, std::vector<const mu2e::SurfaceStepCollection*>> surfstep_tuple;
8186

8287
void Reset(){
@@ -89,6 +94,7 @@ namespace mu2e{
8994
this->crvcoin_list.clear();
9095
this->timecluster_list.clear();
9196
this->mctrack_list.clear();
97+
this->sim_list.clear();
9298

9399
this->track_labels.clear();
94100
this->calodigi_labels.clear();
@@ -99,6 +105,7 @@ namespace mu2e{
99105
this->helix_labels.clear();
100106
this->crvcoin_labels.clear();
101107
this->timecluster_labels.clear();
108+
this->sim_labels.clear();
102109
}
103110

104111
virtual ~DataCollections(){};

inc/MCInterface.hh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "Offline/MCDataProducts/inc/MCTrajectoryPoint.hh"
1313
#include "Offline/MCDataProducts/inc/MCTrajectoryCollection.hh"
1414
#include "Offline/MCDataProducts/inc/SurfaceStep.hh"
15+
#include "Offline/MCDataProducts/inc/SimParticle.hh"
1516
#include "Offline/MCDataProducts/inc/MCRelationship.hh"
1617
#include <TApplication.h>
1718
#include <TEvePad.h>
@@ -41,6 +42,7 @@ namespace mu2e{
4142
void toExtracted(CLHEP::Hep3Vector& Pos);
4243
void AddMCTrajectoryCollection(REX::REveManager *&eveMng,bool firstloop, std::tuple<std::vector<std::string>, std::vector<const MCTrajectoryCollection*>> track_tuple, REX::REveElement* &scene, std::vector<int> particles, bool extracted );
4344
void AddSurfaceStepCollection(REX::REveManager *&eveMng,bool firstloop, std::tuple<std::vector<std::string>, std::vector<const SurfaceStepCollection*>> track_tuple, REX::REveElement* &scene, std::vector<int> particles, bool extracted );
45+
void AddSimParticleCollection(REX::REveManager *&eveMng,bool firstloop, std::tuple<std::vector<std::string>, std::vector<const SimParticleCollection*>> track_tuple, REX::REveElement* &scene, std::vector<int> particles, bool extracted );
4446
#endif
4547
ClassDef(MCInterface, 0);
4648
};

inc/MainWindow.hh

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,13 @@ namespace mu2e {
128128
bool addTrkHits = false; // legacy
129129
bool addMCTrajectories = false;
130130
bool addSurfaceSteps = false;
131+
bool addSimParts = false;
131132
bool addTrkErrBar = true;
132133
bool addCrystalDraw = false;
133134
bool addCRVBars = true;
134135
DrawOptions(){};
135-
DrawOptions(bool cosmictracks, bool helices, bool tracks, bool calodigis, bool clusters, bool combohits, bool crv, bool crvclu, bool timeclusters, bool trkhits, bool mctraj, bool surfsteps, bool errbar, bool crys, bool crvbars)
136-
: addCosmicTracks(cosmictracks), addHelices(helices), addTracks(tracks), addCaloDigis(calodigis), addClusters(clusters), addComboHits(combohits), addCRVInfo(crv), addCRVClusters(crvclu), addTimeClusters(timeclusters), addTrkHits(trkhits), addMCTrajectories(mctraj), addSurfaceSteps(surfsteps), addTrkErrBar(errbar), addCrystalDraw(crys), addCRVBars(crvbars) {};
136+
DrawOptions(bool cosmictracks, bool helices, bool tracks, bool calodigis, bool clusters, bool combohits, bool crv, bool crvclu, bool timeclusters, bool trkhits, bool mctraj, bool surfsteps, bool simparts, bool errbar, bool crys, bool crvbars)
137+
: addCosmicTracks(cosmictracks), addHelices(helices), addTracks(tracks), addCaloDigis(calodigis), addClusters(clusters), addComboHits(combohits), addCRVInfo(crv), addCRVClusters(crvclu), addTimeClusters(timeclusters), addTrkHits(trkhits), addMCTrajectories(mctraj), addSurfaceSteps(surfsteps), addSimParts(simparts), addTrkErrBar(errbar), addCrystalDraw(crys), addCRVBars(crvbars) {};
137138
};
138139

139140
class MainWindow : public REX::REveElement {

inc/PrintInfo.hh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "Offline/RecoDataProducts/inc/CaloCluster.hh"
66
#include "Offline/MCDataProducts/inc/MCTrajectoryPoint.hh"
77
#include "Offline/MCDataProducts/inc/MCTrajectoryCollection.hh"
8+
#include "Offline/MCDataProducts/inc/SimParticle.hh"
89
#include "Offline/RecoDataProducts/inc/KalSeed.hh"
910
#include "Offline/RecoDataProducts/inc/CrvCoincidenceCluster.hh"
1011

@@ -30,6 +31,11 @@ class PrintInfo : public ROOT::Experimental::REveElement
3031
std::vector<const mu2e::MCTrajectoryCollection*> mctrack_list;
3132
std::vector<std::string> mctrack_labels;
3233
std::tuple<std::vector<std::string>, std::vector<const mu2e::MCTrajectoryCollection*>> fmctrack_tuple;
34+
35+
const mu2e::SimParticleCollection *simcol = 0;
36+
std::vector<const mu2e::SimParticleCollection*> sim_list;
37+
std::vector<std::string> sim_labels;
38+
std::tuple<std::vector<std::string>, std::vector<const mu2e::SimParticleCollection*>> fsim_tuple;
3339

3440
const mu2e::KalSeedPtrCollection* kalSeedcol = 0;
3541
std::vector<const mu2e::KalSeedPtrCollection*> track_list;

src/CollectionFiller.cc

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ namespace mu2e{
1919
cosmicTrackSeedTag_(conf.cosmicTrackSeedTag()),
2020
MCTrajTag_(conf.MCTrajTag()),
2121
SurfStepsTag_(conf.SurfStepsTag()),
22+
SimTag_(conf.SimTag()),
2223
addHits_(conf.addHits()),
2324
addCrvHits_(conf.addCrvHits()),
2425
addCrvClusters_(conf.addCrvClusters()),
@@ -31,6 +32,7 @@ namespace mu2e{
3132
addCosmicTrackSeeds_(conf.addCosmicTrackSeeds()),
3233
addMCTraj_(conf.addMCTraj()),
3334
addSurfSteps_(conf.addSurfSteps()),
35+
addSimParts_(conf.addSimParts()),
3436
FillAll_(conf.FillAll())
3537
{}
3638

@@ -108,7 +110,7 @@ namespace mu2e{
108110
std::cout<<"Plotting CaloDigi Instance: "<<name<<std::endl;
109111
data.calodigi_labels.push_back(name);
110112
}
111-
data.calodigi_tuple = std::make_tuple(data.calodigi_labels,data.calodigi_list);
113+
data.calocluster_tuple = std::make_tuple(data.calocluster_labels,data.calocluster_list);
112114
}
113115
if(FillAll_ or (CollectionName == CaloClusters)){
114116
for(const auto &tag : cluTag_){
@@ -190,6 +192,22 @@ namespace mu2e{
190192
data.surfstep_tuple = std::make_tuple(data.surfstep_labels,data.surfstep_list);
191193

192194
}
195+
196+
if(FillAll_ or (CollectionName==SimParticles)){
197+
198+
for(const auto &tag : SimTag_){
199+
auto chH = evt.getValidHandle<mu2e::SimParticleCollection>(tag);
200+
data.simcol = chH.product();
201+
data.sim_list.push_back(data.simcol);
202+
203+
std::string name = TurnNameToString(tag);
204+
std::cout<<"Plotting SimParticle Instance: "<<name<<std::endl;
205+
data.sim_labels.push_back(name);
206+
207+
}
208+
data.sim_tuple = std::make_tuple(data.sim_labels,data.sim_list);
209+
210+
}
193211

194212
}
195213

src/MCInterface.cc

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,3 +210,80 @@ void MCInterface::AddSurfaceStepCollection(REX::REveManager *&eveMng, bool first
210210
}
211211
}
212212
}
213+
214+
void MCInterface::AddSimParticleCollection(REX::REveManager *&eveMng, bool firstloop, std::tuple<std::vector<std::string>, std::vector<const SimParticleCollection *>> sim_tuple, REX::REveElement* &scene, std::vector<int> particleIds, bool extracted){
215+
std::cout<<"[ REveMCInterface::AddSimParticleCollection() ]"<<std::endl;
216+
std::vector<const SimParticleCollection*> sim_list = std::get<1>(sim_tuple);
217+
std::vector<std::string> names = std::get<0>(sim_tuple);
218+
219+
if(sim_list.size() !=0){
220+
for(unsigned int i=0; i < sim_list.size(); i++){
221+
std::string comptitle = "SimParticleCollection" + names[i];
222+
223+
// make compund object to store hits
224+
std::string drawfilename("EventDisplay/config/drawutils.txt");
225+
SimpleConfig drawconfig(drawfilename);
226+
227+
// eXtract the track and input tag:
228+
std::vector<const SimParticleCollection*> sim_list = std::get<1>(sim_tuple);
229+
std::vector<std::string> names = std::get<0>(sim_tuple);
230+
231+
// Loop over SimParticle
232+
//for(unsigned int j=0; j< sim_list.size(); j++){
233+
const SimParticleCollection* simcol = sim_list[i];
234+
235+
if(simcol!=0){
236+
auto SimCollection = new REX::REveCompound("SimParticles","SimParticles",1);
237+
for( auto const& simpair : *simcol) {
238+
// Check user defined list of particles to plot
239+
const mu2e::SimParticle& simpart = simpair.second;
240+
auto pdgid = simpart.pdgId();
241+
auto startCode = simpart.creationCode().name() ;
242+
auto stopCode = simpart.stoppingCode().name() ;
243+
int x = Contains(particleIds,pdgid);
244+
GeomHandle<DetectorSystem> det;
245+
246+
247+
if(x == 1){
248+
// Make label
249+
//std::string momentum = 0;//std::to_string(simpart.startMomentum().R());
250+
std::string edep = std::to_string(simpart.endKineticEnergy());
251+
CLHEP::Hep3Vector StartPos = det->toDetector(simpart.startPosition());
252+
CLHEP::Hep3Vector EndPos = det->toDetector(simpart.endPosition());
253+
double momentum = sqrt(simpart.startMomentum().x()*simpart.startMomentum().x()+simpart.startMomentum().y()*simpart.startMomentum().y() + simpart.startMomentum().z()*simpart.startMomentum().z());
254+
std::string mctitle_start = " SimParticle PDGid " + std::to_string(simpart.pdgId()) + '\n'
255+
+ " Creation code " + (startCode) + " Stopping code " + (stopCode) + '\n'
256+
+ " Start Position: " + '\n'
257+
+ " x " + std::to_string(StartPos.x())
258+
+ " y " + std::to_string(StartPos.y())
259+
+ " z " + std::to_string(StartPos.z())
260+
+ " time :" + std::to_string(simpart.startGlobalTime() )+ '\n'
261+
+ " Start Momentum " + std::to_string(momentum) + " Start Energy " + std::to_string(simpart.startMomentum().e()) + '\n'
262+
+ " End Position: " + '\n'
263+
+ " x " + std::to_string( EndPos.x())
264+
+ " y " + std::to_string( EndPos.y())
265+
+ " z " + std::to_string( EndPos.z())
266+
+ " time :" + std::to_string(simpart.endGlobalTime() );
267+
268+
// add point
269+
270+
// add point
271+
//auto simpoint_start = new REX::REvePointSet(mctitle_start,mctitle_start,1);
272+
// create line with the above label
273+
auto simpart_line = new REX::REveLine(mctitle_start,mctitle_start,1);
274+
simpart_line->SetNextPoint(pointmmTocm(StartPos.x()), pointmmTocm(StartPos.y()),pointmmTocm(StartPos.z()));
275+
simpart_line->SetNextPoint(pointmmTocm(EndPos.x()), pointmmTocm(EndPos.y()),pointmmTocm(EndPos.z()));
276+
// set line colour
277+
SetLineColorPID(pdgid, simpart_line );
278+
simpart_line->SetLineWidth(drawconfig.getInt("TrackLineWidth"));
279+
SimCollection->AddElement(simpart_line);
280+
281+
282+
}
283+
// }
284+
}
285+
scene->AddElement(SimCollection);
286+
}
287+
}
288+
}
289+
}

0 commit comments

Comments
 (0)