Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Data Format for hadronic showers in muon system #35836

Merged
merged 2 commits into from Nov 30, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
65 changes: 65 additions & 0 deletions DataFormats/MuonReco/interface/MuonRecHitCluster.h
@@ -0,0 +1,65 @@
#ifndef DataFormats_MuonReco_MuonRecHitCluster_h
#define DataFormats_MuonReco_MuonRecHitCluster_h

#include <vector>
#include "DataFormats/Math/interface/Vector3D.h"

namespace reco {

class MuonRecHitCluster {
public:
//default constructor
MuonRecHitCluster() = default;

MuonRecHitCluster(const math::RhoEtaPhiVectorF position,
const int size,
const int nStation,
const float avgStation,
const float time,
const float timeSpread,
const int nME11,
const int nME12,
const int nME41,
const int nME42,
const int nMB1,
const int nMB2);

//
~MuonRecHitCluster() = default;

float eta() const { return position_.Eta(); }
float phi() const { return position_.Phi(); }
float x() const { return position_.X(); }
float y() const { return position_.Y(); }
float z() const { return position_.Z(); }
float r() const { return position_.Rho(); }
int size() const { return size_; }
int nStation() const { return nStation_; }
float avgStation() const { return avgStation_; }
int nMB1() const { return nMB1_; }
int nMB2() const { return nMB2_; }
int nME11() const { return nME11_; }
int nME12() const { return nME12_; }
int nME41() const { return nME41_; }
int nME42() const { return nME42_; }
float time() const { return time_; }
float timeSpread() const { return timeSpread_; }

private:
math::RhoEtaPhiVectorF position_;
int size_;
kakwok marked this conversation as resolved.
Show resolved Hide resolved
int nStation_;
float avgStation_;
float time_;
float timeSpread_;
int nME11_;
int nME12_;
int nME41_;
int nME42_;
int nMB1_;
int nMB2_;
};

typedef std::vector<MuonRecHitCluster> MuonRecHitClusterCollection;
} // namespace reco
#endif
26 changes: 26 additions & 0 deletions DataFormats/MuonReco/src/MuonRecHitCluster.cc
@@ -0,0 +1,26 @@
#include "DataFormats/MuonReco/interface/MuonRecHitCluster.h"

reco::MuonRecHitCluster::MuonRecHitCluster(const math::RhoEtaPhiVectorF position,
const int size,
const int nStation,
const float avgStation,
const float time,
const float timeSpread,
const int nME11,
const int nME12,
const int nME41,
const int nME42,
const int nMB1,
const int nMB2)
: position_(position),
size_(size),
nStation_(nStation),
avgStation_(avgStation),
time_(time),
timeSpread_(timeSpread),
nME11_(nME11),
nME12_(nME12),
nME41_(nME41),
nME42_(nME42),
nMB1_(nMB1),
nMB2_(nMB2) {}
1 change: 1 addition & 0 deletions DataFormats/MuonReco/src/classes.h
Expand Up @@ -20,6 +20,7 @@
#include "DataFormats/MuonReco/interface/MuonQuality.h"
#include "DataFormats/MuonReco/interface/MuonCosmicCompatibility.h"
#include "DataFormats/MuonReco/interface/MuonShower.h"
#include "DataFormats/MuonReco/interface/MuonRecHitCluster.h"
#include "DataFormats/MuonReco/interface/MuonToMuonMap.h"
#include "DataFormats/TrackReco/interface/Track.h"
#include "DataFormats/Common/interface/AssociationMap.h"
Expand Down
6 changes: 6 additions & 0 deletions DataFormats/MuonReco/src/classes_def.xml
Expand Up @@ -164,6 +164,12 @@ initial version number of a class which has never been stored before.
</class>
<class name="edm::Wrapper<edm::ValueMap<reco::MuonShower> >"/>

<class name="reco::MuonRecHitCluster" ClassVersion="3">
<version ClassVersion="3" checksum="2080298867"/>
</class>
<class name="std::vector<reco::MuonRecHitCluster>"/>
<class name="edm::Wrapper<std::vector<reco::MuonRecHitCluster>>"/>

<class name="std::vector<reco::MuonRef>"/>
<class name="std::vector<reco::MuonRef>::const_iterator"/>
<class name="edm::ValueMap<reco::MuonRef>"/>
Expand Down
1 change: 1 addition & 0 deletions HLTrigger/special/plugins/BuildFile.xml
Expand Up @@ -25,6 +25,7 @@
<use name="DataFormats/METReco"/>
<use name="DataFormats/Math"/>
<use name="DataFormats/MuonDetId"/>
<use name="DataFormats/MuonReco"/>
<use name="DataFormats/RecoCandidate"/>
<use name="DataFormats/TCDS"/>
<use name="DataFormats/TrackReco"/>
Expand Down
106 changes: 106 additions & 0 deletions HLTrigger/special/plugins/HLTMuonRecHitClusterFilter.cc
@@ -0,0 +1,106 @@
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/Framework/interface/global/EDFilter.h"
#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
#include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
#include "FWCore/Utilities/interface/EDGetToken.h"
#include "FWCore/Utilities/interface/InputTag.h"
#include "FWCore/Utilities/interface/StreamID.h"
#include "DataFormats/MuonReco/interface/MuonRecHitCluster.h"

class HLTMuonRecHitClusterFilter : public edm::global::EDFilter<> {
public:
explicit HLTMuonRecHitClusterFilter(const edm::ParameterSet&);
~HLTMuonRecHitClusterFilter() override = default;
static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);

private:
bool filter(edm::StreamID, edm::Event&, edm::EventSetup const&) const override;
const edm::EDGetTokenT<reco::MuonRecHitClusterCollection> cluster_token_;
const int min_N_;
const int min_Size_;
const int min_SizeMinusMB1_;
const int max_nMB1_;
const int max_nMB2_;
const int max_nME11_;
const int max_nME12_;
const int max_nME41_;
const int max_nME42_;
const int min_Nstation_;
const double min_AvgStation_;
const double min_Time_;
const double max_Time_;
const double min_Eta_;
const double max_Eta_;
const double max_TimeSpread_;
};
//
// constructors and destructor
//
HLTMuonRecHitClusterFilter::HLTMuonRecHitClusterFilter(const edm::ParameterSet& iConfig)
: cluster_token_(consumes<reco::MuonRecHitClusterCollection>(iConfig.getParameter<edm::InputTag>("ClusterTag"))),
min_N_(iConfig.getParameter<int>("MinN")),
min_Size_(iConfig.getParameter<int>("MinSize")),
min_SizeMinusMB1_(iConfig.getParameter<int>("MinSizeMinusMB1")),
max_nMB1_(iConfig.getParameter<int>("Max_nMB1")),
max_nMB2_(iConfig.getParameter<int>("Max_nMB2")),
max_nME11_(iConfig.getParameter<int>("Max_nME11")),
max_nME12_(iConfig.getParameter<int>("Max_nME12")),
max_nME41_(iConfig.getParameter<int>("Max_nME41")),
max_nME42_(iConfig.getParameter<int>("Max_nME42")),
min_Nstation_(iConfig.getParameter<int>("MinNstation")),
min_AvgStation_(iConfig.getParameter<double>("MinAvgStation")),
min_Time_(iConfig.getParameter<double>("MinTime")),
max_Time_(iConfig.getParameter<double>("MaxTime")),
min_Eta_(iConfig.getParameter<double>("MinEta")),
max_Eta_(iConfig.getParameter<double>("MaxEta")),
max_TimeSpread_(iConfig.getParameter<double>("MaxTimeSpread")) {}

void HLTMuonRecHitClusterFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
edm::ParameterSetDescription desc;
desc.add<edm::InputTag>("ClusterTag", edm::InputTag("hltCSCrechitClusters"));
desc.add<int>("MinN", 1);
desc.add<int>("MinSize", 50);
desc.add<int>("MinSizeMinusMB1", 0);
desc.add<int>("Max_nMB1", 0);
desc.add<int>("Max_nMB2", 0);
desc.add<int>("Max_nME11", 0);
desc.add<int>("Max_nME12", 0);
desc.add<int>("Max_nME41", 0);
desc.add<int>("Max_nME42", 0);
desc.add<int>("MinNstation", 0);
desc.add<double>("MinAvgStation", 0.0);
desc.add<double>("MinTime", -999);
desc.add<double>("MaxTime", 999);
desc.add<double>("MinEta", -1.0);
desc.add<double>("MaxEta", -1.0);
desc.add<double>("MaxTimeSpread", 999);
descriptions.addWithDefaultLabel(desc);
}

//
// member functions
//

// ------------ method called on each new Event ------------
bool HLTMuonRecHitClusterFilter::filter(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const {
int nClusterPassed = 0;

auto const& rechitClusters = iEvent.get(cluster_token_);

for (auto const& cluster : rechitClusters) {
if ((cluster.size() >= min_Size_) && ((cluster.size() - cluster.nMB1()) >= min_SizeMinusMB1_) &&
(cluster.nMB1() <= max_nMB1_) && (cluster.nMB2() <= max_nMB2_) && (cluster.nME11() <= max_nME11_) &&
(cluster.nME12() <= max_nME12_) && (cluster.nME41() <= max_nME41_) && (cluster.nME42() <= max_nME42_) &&
(cluster.nStation() >= min_Nstation_) && (cluster.avgStation() >= min_AvgStation_) &&
((min_Eta_ < 0.0) || (std::abs(cluster.eta()) >= min_Eta_)) &&
((max_Eta_ < 0.0) || (std::abs(cluster.eta()) <= max_Eta_)) && (cluster.time() > min_Time_) &&
(cluster.time() <= max_Time_) && (cluster.timeSpread() <= max_TimeSpread_)) {
nClusterPassed++;
}
}

return (nClusterPassed >= min_N_);
}

DEFINE_FWK_MODULE(HLTMuonRecHitClusterFilter);
9 changes: 9 additions & 0 deletions RecoMuon/MuonRechitClusterProducer/plugins/BuildFile.xml
@@ -0,0 +1,9 @@
<use name="FWCore/Framework"/>
<use name="FWCore/PluginManager"/>
<use name="FWCore/ParameterSet"/>
<use name="Geometry/CSCGeometry"/>
<use name="Geometry/DTGeometry"/>
<use name="Geometry/Records"/>
<use name="DataFormats/MuonReco"/>
<use name="fastjet"/>
<flags EDM_PLUGIN="1"/>