diff --git a/DPGAnalysis/MuonTools/plugins/MuNtupleCSCALCTDigiFiller.cc b/DPGAnalysis/MuonTools/plugins/MuNtupleCSCALCTDigiFiller.cc new file mode 100644 index 0000000000000..e75a46a195bd4 --- /dev/null +++ b/DPGAnalysis/MuonTools/plugins/MuNtupleCSCALCTDigiFiller.cc @@ -0,0 +1,89 @@ +/** \class MuDPGAnalysis/MuonDPGNtuples/plugins/MuNtupleCSCALCTDigiFiller.cc + * + * Helper class : the digi filler for CSC ALCT digis + * (used in ZeroBias Analysis for Background Studies) + * + * \author P. Verwilligen (INFN BA) + * + * + */ + +#include "DPGAnalysis/MuonTools/plugins/MuNtupleCSCALCTDigiFiller.h" + +MuNtupleCSCALCTDigiFiller::MuNtupleCSCALCTDigiFiller(const edm::ParameterSet& config) + : MuNtupleBaseFiller{config}, m_token{config, consumesCollector(), "cscALCTDigiTag"} { + produces(); +} + +void MuNtupleCSCALCTDigiFiller::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + + desc.add("label", "cscALCTDigis"); + desc.add("cscALCTDigiTag", edm::InputTag{"muonCSCDigis", "MuonCSCALCTDigi"}); + + descriptions.addWithDefaultLabel(desc); +} + +void MuNtupleCSCALCTDigiFiller::fill(edm::Event& ev) { + unsigned int nDigis{0}; + + std::vector endcap; + std::vector station; + std::vector ring; + std::vector chamber; + std::vector layer; + std::vector valid; + std::vector quality; + std::vector accelbit; + std::vector colpattb; + std::vector keywiregroup; + std::vector alctbx; + + auto cscALCTDigis = m_token.conditionalGet(ev); + + if (cscALCTDigis.isValid()) { + auto cscDetIdIt = cscALCTDigis->begin(); + auto cscDetIdEnd = cscALCTDigis->end(); + + for (; cscDetIdIt != cscDetIdEnd; ++cscDetIdIt) { + const auto& [cscDetId, range] = (*cscDetIdIt); + + for (auto digi = range.first; digi != range.second; ++digi) { + endcap.push_back(cscDetId.endcap()); + station.push_back(cscDetId.station()); + ring.push_back(cscDetId.ring()); + chamber.push_back(cscDetId.chamber()); + layer.push_back(cscDetId.layer()); + keywiregroup.push_back(digi->getKeyWG()); // Fundamental + valid.push_back(digi->isValid()); // Interesting for future study ... can be dropped + quality.push_back(digi->getQuality()); // Interesting for future study ... can be dropped + accelbit.push_back(digi->getAccelerator()); // Interesting for future study ... can be dropped + colpattb.push_back(digi->getCollisionB()); // Interesting for future study ... can be dropped + alctbx.push_back(digi->getBX()); // should keep this for redundancy ??? + + ++nDigis; + } + } + } + + auto table = std::make_unique(nDigis, m_label, false, false); // CB check those falses + + addColumn(table, "endcap", endcap, ""); // CB has to be documented + addColumn(table, "station", station, ""); // CB has to be documented + addColumn(table, "ring", ring, ""); // CB has to be documented + addColumn(table, "chamber", chamber, ""); // CB has to be documented + addColumn(table, "layer", layer, ""); // CB has to be documented + addColumn(table, "keywiregroup", keywiregroup, ""); // CB has to be documented + addColumn(table, "valid", valid, ""); // CB has to be documented + addColumn(table, "quality", quality, ""); // CB has to be documented + addColumn(table, "accelerator", accelbit, ""); // CB has to be documented + addColumn(table, "patternB", colpattb, ""); // CB has to be documented + addColumn(table, "alctbx", alctbx, ""); // CB has to be documented + + ev.put(std::move(table)); +} + +#include "FWCore/PluginManager/interface/ModuleDef.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +DEFINE_FWK_MODULE(MuNtupleCSCALCTDigiFiller); diff --git a/DPGAnalysis/MuonTools/plugins/MuNtupleCSCALCTDigiFiller.h b/DPGAnalysis/MuonTools/plugins/MuNtupleCSCALCTDigiFiller.h new file mode 100644 index 0000000000000..4da9c39af25c9 --- /dev/null +++ b/DPGAnalysis/MuonTools/plugins/MuNtupleCSCALCTDigiFiller.h @@ -0,0 +1,28 @@ +#ifndef MuNtuple_MuNtupleCSCALCTDigiFiller_h +#define MuNtuple_MuNtupleCSCALCTDigiFiller_h + +#include "DPGAnalysis/MuonTools/src/MuNtupleBaseFiller.h" + +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +#include "DataFormats/CSCDigi/interface/CSCALCTDigiCollection.h" + +class MuNtupleCSCALCTDigiFiller : public MuNtupleBaseFiller { +public: + //Constructor + MuNtupleCSCALCTDigiFiller(const edm::ParameterSet&); + + /// Fill descriptors + static void fillDescriptions(edm::ConfigurationDescriptions&); + +protected: + /// Fill tree branches for a given events + virtual void fill(edm::Event&) final; + +private: + /// The digi token + nano_mu::EDTokenHandle m_token; +}; + +#endif diff --git a/DPGAnalysis/MuonTools/plugins/MuNtupleCSCWireDigiFiller.cc b/DPGAnalysis/MuonTools/plugins/MuNtupleCSCWireDigiFiller.cc new file mode 100644 index 0000000000000..71365b07330af --- /dev/null +++ b/DPGAnalysis/MuonTools/plugins/MuNtupleCSCWireDigiFiller.cc @@ -0,0 +1,80 @@ +/** \class MuDPGAnalysis/MuonDPGNtuples/plugins/MuNtupleCSCWireDigiFiller.cc + * + * Helper class : the digi filler for CSC Wire digis + * (used in ZeroBias Analysis for Background Studies) + * + * \author P. Verwilligen (INFN BA) + * + * + */ + +#include "DPGAnalysis/MuonTools//plugins/MuNtupleCSCWireDigiFiller.h" + +MuNtupleCSCWireDigiFiller::MuNtupleCSCWireDigiFiller(const edm::ParameterSet& config) + : MuNtupleBaseFiller{config}, m_token{config, consumesCollector(), "cscWireDigiTag"} { + produces(); +} + +void MuNtupleCSCWireDigiFiller::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + + desc.add("label", "cscWireDigis"); + desc.add("cscWireDigiTag", edm::InputTag{"muonCSCDigis", "MuonCSCWireDigi"}); + + descriptions.addWithDefaultLabel(desc); +} + +void MuNtupleCSCWireDigiFiller::fill(edm::Event& ev) { + unsigned int nDigis{0}; + + std::vector endcap; + std::vector station; + std::vector ring; + std::vector chamber; + std::vector layer; + std::vector wiregroup; + std::vector wgtimebin; + std::vector wgbx; + + auto cscWireDigis = m_token.conditionalGet(ev); + + if (cscWireDigis.isValid()) { + auto cscDetIdIt = cscWireDigis->begin(); + auto cscDetIdEnd = cscWireDigis->end(); + + for (; cscDetIdIt != cscDetIdEnd; ++cscDetIdIt) { + const auto& [cscDetId, range] = (*cscDetIdIt); + + for (auto digi = range.first; digi != range.second; ++digi) { + endcap.push_back(cscDetId.endcap()); + station.push_back(cscDetId.station()); + ring.push_back(cscDetId.ring()); + chamber.push_back(cscDetId.chamber()); + layer.push_back(cscDetId.layer()); + wiregroup.push_back(digi->getWireGroup()); + wgtimebin.push_back(digi->getTimeBin()); + wgbx.push_back(digi->getWireGroupBX()); + + ++nDigis; + } + } + } + + auto table = std::make_unique(nDigis, m_label, false, false); // CB check those falses + + addColumn(table, "endcap", endcap, ""); // CB has to be documented + addColumn(table, "station", station, ""); // CB has to be documented + addColumn(table, "ring", ring, ""); // CB has to be documented + addColumn(table, "chamber", chamber, ""); // CB has to be documented + addColumn(table, "layer", layer, ""); // CB has to be documented + addColumn(table, "wiregroup", wiregroup, ""); // CB has to be documented + addColumn(table, "wiregrouptimebin", wgtimebin, ""); // CB has to be documented + addColumn(table, "wiregroupbx", wgbx, ""); // CB has to be documented + + ev.put(std::move(table)); +} + +#include "FWCore/PluginManager/interface/ModuleDef.h" +#include "FWCore/Framework/interface/MakerMacros.h" + +DEFINE_FWK_MODULE(MuNtupleCSCWireDigiFiller); diff --git a/DPGAnalysis/MuonTools/plugins/MuNtupleCSCWireDigiFiller.h b/DPGAnalysis/MuonTools/plugins/MuNtupleCSCWireDigiFiller.h new file mode 100644 index 0000000000000..3f588702fd0e5 --- /dev/null +++ b/DPGAnalysis/MuonTools/plugins/MuNtupleCSCWireDigiFiller.h @@ -0,0 +1,28 @@ +#ifndef MuNtuple_MuNtupleCSCWireDigiFiller_h +#define MuNtuple_MuNtupleCSCWireDigiFiller_h + +#include "DPGAnalysis/MuonTools/src/MuNtupleBaseFiller.h" + +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +#include "DataFormats/CSCDigi/interface/CSCWireDigiCollection.h" + +class MuNtupleCSCWireDigiFiller : public MuNtupleBaseFiller { +public: + //Constructor + MuNtupleCSCWireDigiFiller(const edm::ParameterSet&); + + /// Fill descriptors + static void fillDescriptions(edm::ConfigurationDescriptions&); + +protected: + /// Fill tree branches for a given events + virtual void fill(edm::Event&) final; + +private: + /// The digi token + nano_mu::EDTokenHandle m_token; +}; + +#endif