CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
CSCEfficiency Class Reference

#include <CSCEfficiency.h>

Inheritance diagram for CSCEfficiency:
edm::one::EDFilter<> edm::one::EDFilterBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Classes

struct  ChamberHistos
 
struct  StationHistos
 

Public Member Functions

 CSCEfficiency (const edm::ParameterSet &pset)
 Constructor. More...
 
 ~CSCEfficiency () override
 Destructor. More...
 
- Public Member Functions inherited from edm::one::EDFilter<>
 EDFilter ()=default
 
 EDFilter (const EDFilter &)=delete
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDFilteroperator= (const EDFilter &)=delete
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () const final
 
- Public Member Functions inherited from edm::one::EDFilterBase
 EDFilterBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () const
 
 ~EDFilterBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
std::vector< bool > const & recordProvenanceList () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
TypeLabelList const & typeLabelList () const
 used by the fwk to register the list of products of this module More...
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESResolverIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESResolverIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::array< std::vector< ModuleDescription const *> *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const *> const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
void selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProductResolverIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

bool applyTrigger (edm::Handle< edm::TriggerResults > &hltR, const edm::TriggerNames &triggerNames)
 
void chamberCandidates (int station, int ring, float phi, std::vector< int > &coupleOfChambers)
 
bool checkLocal (double yLocal, double yBoundary, int station, int ring)
 
void chooseDirection (CLHEP::Hep3Vector &innerPosition, CLHEP::Hep3Vector &outerPosition)
 
bool efficienciesPerChamber (CSCDetId &id, const CSCChamber *cscChamber, FreeTrajectoryState &ftsChamber)
 
double extrapolate1D (double initPosition, double initDirection, double parameterOfTheLine)
 
void fillDigiInfo (edm::Handle< CSCALCTDigiCollection > &alcts, edm::Handle< CSCCLCTDigiCollection > &clcts, edm::Handle< CSCCorrelatedLCTDigiCollection > &correlatedlcts, edm::Handle< CSCWireDigiCollection > &wires, edm::Handle< CSCStripDigiCollection > &strips, edm::Handle< edm::PSimHitContainer > &simhits, edm::Handle< CSCRecHit2DCollection > &rechits, edm::Handle< CSCSegmentCollection > &segments, edm::ESHandle< CSCGeometry > &cscGeom)
 
void fillLCT_info (edm::Handle< CSCALCTDigiCollection > &alcts, edm::Handle< CSCCLCTDigiCollection > &clcts, edm::Handle< CSCCorrelatedLCTDigiCollection > &correlatedlcts)
 
void fillRechitsSegments_info (edm::Handle< CSCRecHit2DCollection > &rechits, edm::Handle< CSCSegmentCollection > &segments, edm::ESHandle< CSCGeometry > &cscGeom)
 
void fillSimhit_info (edm::Handle< edm::PSimHitContainer > &simHits)
 
void fillStrips_info (edm::Handle< CSCStripDigiCollection > &strips)
 
void fillWG_info (edm::Handle< CSCWireDigiCollection > &wires, edm::ESHandle< CSCGeometry > &cscGeom)
 
bool filter (edm::Event &event, const edm::EventSetup &eventSetup) override
 
FreeTrajectoryState getFromCLHEP (const CLHEP::Hep3Vector &p3, const CLHEP::Hep3Vector &r3, int charge, const AlgebraicSymMatrix66 &cov, const MagneticField *field)
 
void getFromFTS (const FreeTrajectoryState &fts, CLHEP::Hep3Vector &p3, CLHEP::Hep3Vector &r3, int &charge, AlgebraicSymMatrix66 &cov)
 
bool inSensitiveLocalRegion (double xLocal, double yLocal, int station, int ring)
 
void linearExtrapolation (GlobalPoint initialPosition, GlobalVector initialDirection, float zSurface, std::vector< float > &posZY)
 
double lineParameter (double initZPosition, double destZPosition, double initZDirection)
 
TrajectoryStateOnSurface propagate (FreeTrajectoryState &ftsStart, const BoundPlane &bp)
 
const Propagatorpropagator (std::string propagatorName) const
 
bool recHitSegment_Efficiencies (CSCDetId &cscDetId, const CSCChamber *cscChamber, FreeTrajectoryState &ftsChamber)
 
bool recSimHitEfficiency (CSCDetId &id, FreeTrajectoryState &ftsChamber)
 
void returnTypes (CSCDetId &id, int &ec, int &st, int &rg, int &ch, int &secondRing)
 
void ringCandidates (int station, float absEta, std::map< std::string, bool > &chamberTypes)
 
bool stripWire_Efficiencies (CSCDetId &cscDetId, FreeTrajectoryState &ftsChamber)
 

Private Attributes

edm::EDGetTokenT< CSCALCTDigiCollectional_token
 
TH1F * ALCTPerEvent
 
bool allALCT [2][4][4][(36 - 1+1)]
 
bool allCLCT [2][4][4][(36 - 1+1)]
 
bool allCorrLCT [2][4][4][(36 - 1+1)]
 
std::vector< std::pair< LocalPoint, bool > > allRechits [2][4][4][(36 - 1+1)][6]
 
std::vector< std::pair< LocalPoint, LocalVector > > allSegments [2][4][4][(36 - 1+1)]
 
std::vector< std::pair< LocalPoint, int > > allSimhits [2][4][4][(36 - 1+1)][6]
 
std::vector< std::pair< int, float > > allStrips [2][4][4][(36 - 1+1)][6]
 
std::vector< std::pair< std::pair< int, float >, int > > allWG [2][4][4][(36 - 1+1)][6]
 
bool alongZ
 
bool andOr
 
bool applyIPangleCuts
 
struct CSCEfficiency::ChamberHistos ChHist [2][4][3][36 - 1+1]
 
edm::EDGetTokenT< CSCCLCTDigiCollectioncl_token
 
TH1F * CLCTPerEvent
 
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollectionco_token
 
TH1F * DataFlow
 
double distanceFromDeadZone
 
bool emptyChambers [2][4][4][(36 - 1+1)]
 
edm::ESGetToken< CSCGeometry, MuonGeometryRecordgeomToken_
 
bool getAbsoluteEfficiency
 
edm::EDGetTokenT< edm::TriggerResultsht_token
 
bool isBeamdata
 
bool isData
 
bool isIPdata
 
double local_DX_DZ_Max
 
double local_DY_DZ_Max
 
double local_DY_DZ_Min
 
bool magField
 
double maxNormChi2
 
double maxP
 
double minP
 
unsigned int minTrackHits
 
std::vector< std::string > myTriggers
 
int nEventsAnalyzed
 
bool passTheEvent
 
std::vector< int > pointToTriggers
 
bool printalot
 
unsigned int printout_NEvents
 
TH1F * recHitsPerEvent
 
edm::EDGetTokenT< CSCRecHit2DCollectionrh_token
 
std::string rootFileName
 
edm::EDGetTokenT< CSCStripDigiCollectionsd_token
 
edm::EDGetTokenT< CSCSegmentCollectionse_token
 
TH1F * segmentsPerEvent
 
edm::EDGetTokenT< edm::PSimHitContainersh_token
 
struct CSCEfficiency::StationHistos StHist [2][4]
 
TFile * theFile
 
MuonServiceProxytheService
 
edm::EDGetTokenT< edm::View< reco::Track > > tk_token
 
TH1F * TriggersFired
 
bool useDigis
 
bool useTrigger
 
edm::EDGetTokenT< CSCWireDigiCollectionwd_token
 

Additional Inherited Members

- Public Types inherited from edm::one::EDFilterBase
typedef EDFilterBase ModuleType
 
- Public Types inherited from edm::ProducerBase
template<typename T >
using BranchAliasSetterT = ProductRegistryHelper::BranchAliasSetterT< T >
 
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex > >
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::one::EDFilterBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::ProducerBase
template<Transition Tr = Transition::Event>
auto produces (std::string instanceName) noexcept
 declare what type of product will make and with which optional label More...
 
template<Transition B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<BranchType B>
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
BranchAliasSetter produces (const TypeID &id, std::string instanceName=std::string(), bool recordProvenance=true)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces ()
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , BranchType B>
BranchAliasSetterT< ProductType > produces ()
 
template<class ProductType >
BranchAliasSetterT< ProductType > produces (std::string instanceName)
 
template<typename ProductType , Transition B>
BranchAliasSetterT< ProductType > produces ()
 
template<Transition Tr = Transition::Event>
auto produces () noexcept
 
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< Bconsumes (edm::InputTag tag) noexcept
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes ()
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag)
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
void resetItemsToGetFrom (BranchType iType)
 

Detailed Description

Efficiency calculations Stoyan Stoynev, Northwestern University

Definition at line 95 of file CSCEfficiency.h.

Constructor & Destructor Documentation

◆ CSCEfficiency()

CSCEfficiency::CSCEfficiency ( const edm::ParameterSet pset)

Constructor.

Definition at line 1639 of file CSCEfficiency.cc.

References ALCARECOTkAlV0s_cff::andOr, FirstCh, createfilelist::int, HLTBitAnalyser_cfi::isData, MuonMETValueMapProducer_cff::maxNormChi2, RecoMuonValidator_cfi::maxP, alignBH_cfg::minP, HLT_2023v12_cff::minTrackHits, MuonServiceProxy_cff::MuonServiceProxy, NumCh, mps_fire::Path, muonDTDigis_cfi::pset, CSCSkim_cfi::rootFileName, AlCaHLTBitMon_QueryRunRegistry::string, and makeListRunsInFiles::theFile.

1639  {
1640  // const float Xmin = -70;
1641  //const float Xmax = 70;
1642  //const int nXbins = int(4.*(Xmax - Xmin));
1643  const float Ymin = -165;
1644  const float Ymax = 165;
1645  const int nYbins = int((Ymax - Ymin) / 2);
1646  const float Layer_min = -0.5;
1647  const float Layer_max = 9.5;
1648  const int nLayer_bins = int(Layer_max - Layer_min);
1649  //
1650 
1651  //---- Get the input parameters
1652  printout_NEvents = pset.getUntrackedParameter<unsigned int>("printout_NEvents", 0);
1653  rootFileName = pset.getUntrackedParameter<string>("rootFileName", "cscHists.root");
1654 
1655  isData = pset.getUntrackedParameter<bool>("runOnData", true); //
1656  isIPdata = pset.getUntrackedParameter<bool>("IPdata", false); //
1657  isBeamdata = pset.getUntrackedParameter<bool>("Beamdata", false); //
1658  getAbsoluteEfficiency = pset.getUntrackedParameter<bool>("getAbsoluteEfficiency", true); //
1659  useDigis = pset.getUntrackedParameter<bool>("useDigis", true); //
1660  distanceFromDeadZone = pset.getUntrackedParameter<double>("distanceFromDeadZone", 10.); //
1661  minP = pset.getUntrackedParameter<double>("minP", 20.); //
1662  maxP = pset.getUntrackedParameter<double>("maxP", 100.); //
1663  maxNormChi2 = pset.getUntrackedParameter<double>("maxNormChi2", 3.); //
1664  minTrackHits = pset.getUntrackedParameter<unsigned int>("minTrackHits", 10); //
1665 
1666  applyIPangleCuts = pset.getUntrackedParameter<bool>("applyIPangleCuts", false); //
1667  local_DY_DZ_Max = pset.getUntrackedParameter<double>("local_DY_DZ_Max", -0.1); //
1668  local_DY_DZ_Min = pset.getUntrackedParameter<double>("local_DY_DZ_Min", -0.8); //
1669  local_DX_DZ_Max = pset.getUntrackedParameter<double>("local_DX_DZ_Max", 0.2); //
1670 
1671  sd_token = consumes<CSCStripDigiCollection>(pset.getParameter<edm::InputTag>("stripDigiTag"));
1672  wd_token = consumes<CSCWireDigiCollection>(pset.getParameter<edm::InputTag>("wireDigiTag"));
1673  al_token = consumes<CSCALCTDigiCollection>(pset.getParameter<edm::InputTag>("alctDigiTag"));
1674  cl_token = consumes<CSCCLCTDigiCollection>(pset.getParameter<edm::InputTag>("clctDigiTag"));
1675  co_token = consumes<CSCCorrelatedLCTDigiCollection>(pset.getParameter<edm::InputTag>("corrlctDigiTag"));
1676  rh_token = consumes<CSCRecHit2DCollection>(pset.getParameter<edm::InputTag>("rechitTag"));
1677  se_token = consumes<CSCSegmentCollection>(pset.getParameter<edm::InputTag>("segmentTag"));
1678  tk_token = consumes<edm::View<reco::Track> >(pset.getParameter<edm::InputTag>("tracksTag"));
1679  sh_token = consumes<edm::PSimHitContainer>(pset.getParameter<edm::InputTag>("simHitTag"));
1680 
1681  geomToken_ = esConsumes<CSCGeometry, MuonGeometryRecord>();
1682 
1683  edm::ParameterSet serviceParameters = pset.getParameter<edm::ParameterSet>("ServiceParameters");
1684  // maybe use the service for getting magnetic field, propagators, etc. ...
1685  theService = new MuonServiceProxy(serviceParameters, consumesCollector());
1686 
1687  // Trigger
1688  useTrigger = pset.getUntrackedParameter<bool>("useTrigger", false);
1689 
1690  ht_token = consumes<edm::TriggerResults>(pset.getParameter<edm::InputTag>("HLTriggerResults"));
1691 
1692  myTriggers = pset.getParameter<std::vector<std::string> >("myTriggers");
1693  andOr = pset.getUntrackedParameter<bool>("andOr");
1694  pointToTriggers.clear();
1695 
1696  //---- set counter to zero
1697  nEventsAnalyzed = 0;
1698  //---- set presence of magnetic field
1699  magField = true;
1700  //
1701  std::string Path = "AllChambers/";
1702  std::string FullName;
1703  //---- File with output histograms
1704  theFile = new TFile(rootFileName.c_str(), "RECREATE");
1705  theFile->cd();
1706  //---- Book histograms for the analysis
1707  char SpecName[60];
1708 
1709  sprintf(SpecName, "DataFlow");
1710  DataFlow = new TH1F(SpecName, "Data flow;condition number;entries", 40, -0.5, 39.5);
1711  //
1712  sprintf(SpecName, "TriggersFired");
1713  TriggersFired = new TH1F(SpecName, "Triggers fired;trigger number;entries", 140, -0.5, 139.5);
1714  //
1715  int Chan = 50;
1716  float minChan = -0.5;
1717  float maxChan = 49.5;
1718  //
1719  sprintf(SpecName, "ALCTPerEvent");
1720  ALCTPerEvent = new TH1F(SpecName, "ALCTs per event;N digis;entries", Chan, minChan, maxChan);
1721  //
1722  sprintf(SpecName, "CLCTPerEvent");
1723  CLCTPerEvent = new TH1F(SpecName, "CLCTs per event;N digis;entries", Chan, minChan, maxChan);
1724  //
1725  sprintf(SpecName, "recHitsPerEvent");
1726  recHitsPerEvent = new TH1F(SpecName, "RecHits per event;N digis;entries", 150, -0.5, 149.5);
1727  //
1728  sprintf(SpecName, "segmentsPerEvent");
1729  segmentsPerEvent = new TH1F(SpecName, "segments per event;N digis;entries", Chan, minChan, maxChan);
1730  //
1731  //---- Book groups of histograms (for any chamber)
1732 
1733  map<std::string, bool>::iterator iter;
1734  for (int ec = 0; ec < 2; ++ec) {
1735  for (int st = 0; st < 4; ++st) {
1736  theFile->cd();
1737  sprintf(SpecName, "Stations__E%d_S%d", ec + 1, st + 1);
1738  theFile->mkdir(SpecName);
1739  theFile->cd(SpecName);
1740 
1741  //
1742  sprintf(SpecName, "segmentChi2_ndf_St%d", st + 1);
1743  StHist[ec][st].segmentChi2_ndf = new TH1F(SpecName, "Chi2/ndf of a segment;chi2/ndf;entries", 100, 0., 20.);
1744  //
1745  sprintf(SpecName, "hitsInSegment_St%d", st + 1);
1746  StHist[ec][st].hitsInSegment = new TH1F(SpecName, "Number of hits in a segment;nHits;entries", 7, -0.5, 6.5);
1747  //
1748  Chan = 170;
1749  minChan = 0.85;
1750  maxChan = 2.55;
1751  //
1752  sprintf(SpecName, "AllSegments_eta_St%d", st + 1);
1753  StHist[ec][st].AllSegments_eta = new TH1F(SpecName, "All segments in eta;eta;entries", Chan, minChan, maxChan);
1754  //
1755  sprintf(SpecName, "EfficientSegments_eta_St%d", st + 1);
1756  StHist[ec][st].EfficientSegments_eta =
1757  new TH1F(SpecName, "Efficient segments in eta;eta;entries", Chan, minChan, maxChan);
1758  //
1759  sprintf(SpecName, "ResidualSegments_St%d", st + 1);
1760  StHist[ec][st].ResidualSegments = new TH1F(SpecName, "Residual (segments);residual,cm;entries", 75, 0., 15.);
1761  //
1762  Chan = 200;
1763  minChan = -800.;
1764  maxChan = 800.;
1765  int Chan2 = 200;
1766  float minChan2 = -800.;
1767  float maxChan2 = 800.;
1768 
1769  sprintf(SpecName, "EfficientSegments_XY_St%d", st + 1);
1770  StHist[ec][st].EfficientSegments_XY =
1771  new TH2F(SpecName, "Efficient segments in XY;X;Y", Chan, minChan, maxChan, Chan2, minChan2, maxChan2);
1772  sprintf(SpecName, "InefficientSegments_XY_St%d", st + 1);
1773  StHist[ec][st].InefficientSegments_XY =
1774  new TH2F(SpecName, "Inefficient segments in XY;X;Y", Chan, minChan, maxChan, Chan2, minChan2, maxChan2);
1775  //
1776  Chan = 80;
1777  minChan = 0;
1778  maxChan = 3.2;
1779  sprintf(SpecName, "EfficientALCT_momTheta_St%d", st + 1);
1780  StHist[ec][st].EfficientALCT_momTheta =
1781  new TH1F(SpecName, "Efficient ALCT in theta (momentum);theta, rad;entries", Chan, minChan, maxChan);
1782  //
1783  sprintf(SpecName, "InefficientALCT_momTheta_St%d", st + 1);
1785  new TH1F(SpecName, "Inefficient ALCT in theta (momentum);theta, rad;entries", Chan, minChan, maxChan);
1786  //
1787  Chan = 160;
1788  minChan = -3.2;
1789  maxChan = 3.2;
1790  sprintf(SpecName, "EfficientCLCT_momPhi_St%d", st + 1);
1791  StHist[ec][st].EfficientCLCT_momPhi =
1792  new TH1F(SpecName, "Efficient CLCT in phi (momentum);phi, rad;entries", Chan, minChan, maxChan);
1793  //
1794  sprintf(SpecName, "InefficientCLCT_momPhi_St%d", st + 1);
1795  StHist[ec][st].InefficientCLCT_momPhi =
1796  new TH1F(SpecName, "Inefficient CLCT in phi (momentum);phi, rad;entries", Chan, minChan, maxChan);
1797  //
1798  theFile->cd();
1799  for (int rg = 0; rg < 3; ++rg) {
1800  if (0 != st && rg > 1) {
1801  continue;
1802  } else if (1 == rg && 3 == st) {
1803  continue;
1804  }
1805  for (int iChamber = FirstCh; iChamber < FirstCh + NumCh; iChamber++) {
1806  if (0 != st && 0 == rg && iChamber > 18) {
1807  continue;
1808  }
1809  theFile->cd();
1810  sprintf(SpecName, "Chambers__E%d_S%d_R%d_Chamber_%d", ec + 1, st + 1, rg + 1, iChamber);
1811  theFile->mkdir(SpecName);
1812  theFile->cd(SpecName);
1813  //
1814 
1815  sprintf(SpecName, "EfficientRechits_inSegment_Ch%d", iChamber);
1816  ChHist[ec][st][rg][iChamber - FirstCh].EfficientRechits_inSegment = new TH1F(
1817  SpecName, "Existing RecHit given a segment;layers (1-6);entries", nLayer_bins, Layer_min, Layer_max);
1818  //
1819  sprintf(SpecName, "InefficientSingleHits_Ch%d", iChamber);
1820  ChHist[ec][st][rg][iChamber - FirstCh].InefficientSingleHits = new TH1F(
1821  SpecName, "Single RecHits not in the segment;layers (1-6);entries ", nLayer_bins, Layer_min, Layer_max);
1822  //
1823  sprintf(SpecName, "AllSingleHits_Ch%d", iChamber);
1824  ChHist[ec][st][rg][iChamber - FirstCh].AllSingleHits = new TH1F(
1825  SpecName, "Single RecHits given a segment; layers (1-6);entries", nLayer_bins, Layer_min, Layer_max);
1826  //
1827  sprintf(SpecName, "digiAppearanceCount_Ch%d", iChamber);
1828  ChHist[ec][st][rg][iChamber - FirstCh].digiAppearanceCount =
1829  new TH1F(SpecName,
1830  "Digi appearance (no-yes): segment(0,1), ALCT(2,3), CLCT(4,5), CorrLCT(6,7); digi type;entries",
1831  8,
1832  -0.5,
1833  7.5);
1834  //
1835  Chan = 100;
1836  minChan = -1.1;
1837  maxChan = 0.9;
1838  sprintf(SpecName, "EfficientALCT_dydz_Ch%d", iChamber);
1839  ChHist[ec][st][rg][iChamber - FirstCh].EfficientALCT_dydz =
1840  new TH1F(SpecName, "Efficient ALCT; local dy/dz (ME 3 and 4 flipped);entries", Chan, minChan, maxChan);
1841  //
1842  sprintf(SpecName, "InefficientALCT_dydz_Ch%d", iChamber);
1843  ChHist[ec][st][rg][iChamber - FirstCh].InefficientALCT_dydz =
1844  new TH1F(SpecName, "Inefficient ALCT; local dy/dz (ME 3 and 4 flipped);entries", Chan, minChan, maxChan);
1845  //
1846  Chan = 100;
1847  minChan = -1.;
1848  maxChan = 1.0;
1849  sprintf(SpecName, "EfficientCLCT_dxdz_Ch%d", iChamber);
1850  ChHist[ec][st][rg][iChamber - FirstCh].EfficientCLCT_dxdz =
1851  new TH1F(SpecName, "Efficient CLCT; local dxdz;entries", Chan, minChan, maxChan);
1852  //
1853  sprintf(SpecName, "InefficientCLCT_dxdz_Ch%d", iChamber);
1854  ChHist[ec][st][rg][iChamber - FirstCh].InefficientCLCT_dxdz =
1855  new TH1F(SpecName, "Inefficient CLCT; local dxdz;entries", Chan, minChan, maxChan);
1856  //
1857  sprintf(SpecName, "EfficientRechits_good_Ch%d", iChamber);
1858  ChHist[ec][st][rg][iChamber - FirstCh].EfficientRechits_good = new TH1F(
1859  SpecName, "Existing RecHit - sensitive area only;layers (1-6);entries", nLayer_bins, Layer_min, Layer_max);
1860  //
1861  sprintf(SpecName, "EfficientStrips_Ch%d", iChamber);
1862  ChHist[ec][st][rg][iChamber - FirstCh].EfficientStrips =
1863  new TH1F(SpecName, "Existing strip;layer (1-6); entries", nLayer_bins, Layer_min, Layer_max);
1864  //
1865  sprintf(SpecName, "EfficientWireGroups_Ch%d", iChamber);
1866  ChHist[ec][st][rg][iChamber - FirstCh].EfficientWireGroups =
1867  new TH1F(SpecName, "Existing WireGroups;layer (1-6); entries ", nLayer_bins, Layer_min, Layer_max);
1868  //
1869  sprintf(SpecName, "StripWiresCorrelations_Ch%d", iChamber);
1870  ChHist[ec][st][rg][iChamber - FirstCh].StripWiresCorrelations =
1871  new TH1F(SpecName, "StripWire correlations;; entries ", 5, 0.5, 5.5);
1872  //
1873  Chan = 80;
1874  minChan = 0;
1875  maxChan = 3.2;
1876  sprintf(SpecName, "NoWires_momTheta_Ch%d", iChamber);
1877  ChHist[ec][st][rg][iChamber - FirstCh].NoWires_momTheta =
1878  new TH1F(SpecName,
1879  "No wires (all strips present) - in theta (momentum);theta, rad;entries",
1880  Chan,
1881  minChan,
1882  maxChan);
1883  //
1884  Chan = 160;
1885  minChan = -3.2;
1886  maxChan = 3.2;
1887  sprintf(SpecName, "NoStrips_momPhi_Ch%d", iChamber);
1888  ChHist[ec][st][rg][iChamber - FirstCh].NoStrips_momPhi = new TH1F(
1889  SpecName, "No strips (all wires present) - in phi (momentum);phi, rad;entries", Chan, minChan, maxChan);
1890  //
1891  for (int iLayer = 0; iLayer < 6; iLayer++) {
1892  sprintf(SpecName, "Y_InefficientRecHits_inSegment_Ch%d_L%d", iChamber, iLayer);
1893  ChHist[ec][st][rg][iChamber - FirstCh].Y_InefficientRecHits_inSegment.push_back(
1894  new TH1F(SpecName,
1895  "Missing RecHit/layer in a segment (local system, whole chamber);Y, cm; entries",
1896  nYbins,
1897  Ymin,
1898  Ymax));
1899  //
1900  sprintf(SpecName, "Y_EfficientRecHits_inSegment_Ch%d_L%d", iChamber, iLayer);
1901  ChHist[ec][st][rg][iChamber - FirstCh].Y_EfficientRecHits_inSegment.push_back(
1902  new TH1F(SpecName,
1903  "Efficient (extrapolated from the segment) RecHit/layer in a segment (local system, whole "
1904  "chamber);Y, cm; entries",
1905  nYbins,
1906  Ymin,
1907  Ymax));
1908  //
1909  Chan = 200;
1910  minChan = -0.2;
1911  maxChan = 0.2;
1912  sprintf(SpecName, "Phi_InefficientRecHits_inSegment_Ch%d_L%d", iChamber, iLayer);
1913  ChHist[ec][st][rg][iChamber - FirstCh].Phi_InefficientRecHits_inSegment.push_back(
1914  new TH1F(SpecName,
1915  "Missing RecHit/layer in a segment (local system, whole chamber);Phi, rad; entries",
1916  Chan,
1917  minChan,
1918  maxChan));
1919  //
1920  sprintf(SpecName, "Phi_EfficientRecHits_inSegment_Ch%d_L%d", iChamber, iLayer);
1921  ChHist[ec][st][rg][iChamber - FirstCh].Phi_EfficientRecHits_inSegment.push_back(
1922  new TH1F(SpecName,
1923  "Efficient (extrapolated from the segment) in a segment (local system, whole chamber);Phi, "
1924  "rad; entries",
1925  Chan,
1926  minChan,
1927  maxChan));
1928  }
1929  //
1930  sprintf(SpecName, "Sim_Rechits_Ch%d", iChamber);
1931  ChHist[ec][st][rg][iChamber - FirstCh].SimRechits =
1932  new TH1F(SpecName, "Existing RecHit (Sim);layers (1-6);entries", nLayer_bins, Layer_min, Layer_max);
1933  //
1934  sprintf(SpecName, "Sim_Simhits_Ch%d", iChamber);
1935  ChHist[ec][st][rg][iChamber - FirstCh].SimSimhits =
1936  new TH1F(SpecName, "Existing SimHit (Sim);layers (1-6);entries", nLayer_bins, Layer_min, Layer_max);
1937  //
1938  /*
1939  sprintf(SpecName,"Sim_Rechits_each_Ch%d",iChamber);
1940  ChHist[ec][st][rg][iChamber-FirstCh].SimRechits_each =
1941  new TH1F(SpecName,"Existing RecHit (Sim), each;layers (1-6);entries",nLayer_bins,Layer_min,Layer_max);
1942  //
1943  sprintf(SpecName,"Sim_Simhits_each_Ch%d",iChamber);
1944  ChHist[ec][st][rg][iChamber-FirstCh].SimSimhits_each =
1945  new TH1F(SpecName,"Existing SimHit (Sim), each;layers (1-6);entries",nLayer_bins,Layer_min,Layer_max);
1946  */
1947  theFile->cd();
1948  }
1949  }
1950  }
1951  }
1952 }
std::string rootFileName
edm::EDGetTokenT< CSCStripDigiCollection > sd_token
TH1F * CLCTPerEvent
std::vector< TH1F * > Y_InefficientRecHits_inSegment
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollection > co_token
edm::EDGetTokenT< CSCCLCTDigiCollection > cl_token
double local_DX_DZ_Max
bool getAbsoluteEfficiency
edm::EDGetTokenT< CSCSegmentCollection > se_token
std::vector< std::string > myTriggers
std::vector< TH1F * > Phi_InefficientRecHits_inSegment
double local_DY_DZ_Max
std::vector< TH1F * > Y_EfficientRecHits_inSegment
edm::ESGetToken< CSCGeometry, MuonGeometryRecord > geomToken_
edm::EDGetTokenT< edm::PSimHitContainer > sh_token
MuonServiceProxy * theService
edm::EDGetTokenT< CSCWireDigiCollection > wd_token
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
struct CSCEfficiency::ChamberHistos ChHist[2][4][3][36 - 1+1]
double distanceFromDeadZone
std::vector< TH1F * > Phi_EfficientRecHits_inSegment
double maxNormChi2
double local_DY_DZ_Min
edm::EDGetTokenT< CSCRecHit2DCollection > rh_token
#define FirstCh
Definition: CSCEfficiency.h:81
unsigned int printout_NEvents
TH1F * TriggersFired
TH1F * segmentsPerEvent
struct CSCEfficiency::StationHistos StHist[2][4]
TH1F * recHitsPerEvent
std::vector< int > pointToTriggers
TH1F * ALCTPerEvent
#define NumCh
Definition: CSCEfficiency.h:82
unsigned int minTrackHits
edm::EDGetTokenT< CSCALCTDigiCollection > al_token
edm::EDGetTokenT< edm::TriggerResults > ht_token
edm::EDGetTokenT< edm::View< reco::Track > > tk_token

◆ ~CSCEfficiency()

CSCEfficiency::~CSCEfficiency ( )
override

Destructor.

Definition at line 1955 of file CSCEfficiency.cc.

References trigObjTnPSource_cfi::bins, gather_cfg::cout, PixelTestBeamValidation_cfi::Efficiency, FirstCh, NumCh, and makeListRunsInFiles::theFile.

1955  {
1956  if (theService)
1957  delete theService;
1958  // Write the histos to a file
1959  theFile->cd();
1960  //
1961  char SpecName[60];
1962  std::vector<float> bins, Efficiency, EffError;
1963  std::vector<float> eff(2);
1964 
1965  //---- loop over chambers
1966  std::map<std::string, bool> chamberTypes;
1967  chamberTypes["ME11"] = false;
1968  chamberTypes["ME12"] = false;
1969  chamberTypes["ME13"] = false;
1970  chamberTypes["ME21"] = false;
1971  chamberTypes["ME22"] = false;
1972  chamberTypes["ME31"] = false;
1973  chamberTypes["ME32"] = false;
1974  chamberTypes["ME41"] = false;
1975 
1976  map<std::string, bool>::iterator iter;
1977  std::cout << " Writing proper histogram structure (patience)..." << std::endl;
1978  for (int ec = 0; ec < 2; ++ec) {
1979  for (int st = 0; st < 4; ++st) {
1980  snprintf(SpecName, sizeof(SpecName), "Stations__E%d_S%d", ec + 1, st + 1);
1981  theFile->cd(SpecName);
1982  StHist[ec][st].segmentChi2_ndf->Write();
1983  StHist[ec][st].hitsInSegment->Write();
1984  StHist[ec][st].AllSegments_eta->Write();
1985  StHist[ec][st].EfficientSegments_eta->Write();
1986  StHist[ec][st].ResidualSegments->Write();
1987  StHist[ec][st].EfficientSegments_XY->Write();
1988  StHist[ec][st].InefficientSegments_XY->Write();
1989  StHist[ec][st].EfficientALCT_momTheta->Write();
1990  StHist[ec][st].InefficientALCT_momTheta->Write();
1991  StHist[ec][st].EfficientCLCT_momPhi->Write();
1992  StHist[ec][st].InefficientCLCT_momPhi->Write();
1993  for (int rg = 0; rg < 3; ++rg) {
1994  if (0 != st && rg > 1) {
1995  continue;
1996  } else if (1 == rg && 3 == st) {
1997  continue;
1998  }
1999  for (int iChamber = FirstCh; iChamber < FirstCh + NumCh; iChamber++) {
2000  if (0 != st && 0 == rg && iChamber > 18) {
2001  continue;
2002  }
2003  snprintf(SpecName, sizeof(SpecName), "Chambers__E%d_S%d_R%d_Chamber_%d", ec + 1, st + 1, rg + 1, iChamber);
2004  theFile->cd(SpecName);
2005 
2006  ChHist[ec][st][rg][iChamber - FirstCh].EfficientRechits_inSegment->Write();
2007  ChHist[ec][st][rg][iChamber - FirstCh].AllSingleHits->Write();
2008  ChHist[ec][st][rg][iChamber - FirstCh].digiAppearanceCount->Write();
2009  ChHist[ec][st][rg][iChamber - FirstCh].EfficientALCT_dydz->Write();
2010  ChHist[ec][st][rg][iChamber - FirstCh].InefficientALCT_dydz->Write();
2011  ChHist[ec][st][rg][iChamber - FirstCh].EfficientCLCT_dxdz->Write();
2012  ChHist[ec][st][rg][iChamber - FirstCh].InefficientCLCT_dxdz->Write();
2013  ChHist[ec][st][rg][iChamber - FirstCh].InefficientSingleHits->Write();
2014  ChHist[ec][st][rg][iChamber - FirstCh].EfficientRechits_good->Write();
2015  ChHist[ec][st][rg][iChamber - FirstCh].EfficientStrips->Write();
2016  ChHist[ec][st][rg][iChamber - FirstCh].StripWiresCorrelations->Write();
2017  ChHist[ec][st][rg][iChamber - FirstCh].NoWires_momTheta->Write();
2018  ChHist[ec][st][rg][iChamber - FirstCh].NoStrips_momPhi->Write();
2019  ChHist[ec][st][rg][iChamber - FirstCh].EfficientWireGroups->Write();
2020  for (unsigned int iLayer = 0; iLayer < 6; iLayer++) {
2021  ChHist[ec][st][rg][iChamber - FirstCh].Y_InefficientRecHits_inSegment[iLayer]->Write();
2022  ChHist[ec][st][rg][iChamber - FirstCh].Y_EfficientRecHits_inSegment[iLayer]->Write();
2023  ChHist[ec][st][rg][iChamber - FirstCh].Phi_InefficientRecHits_inSegment[iLayer]->Write();
2024  ChHist[ec][st][rg][iChamber - FirstCh].Phi_EfficientRecHits_inSegment[iLayer]->Write();
2025  }
2026  ChHist[ec][st][rg][iChamber - FirstCh].SimRechits->Write();
2027  ChHist[ec][st][rg][iChamber - FirstCh].SimSimhits->Write();
2028  /*
2029  ChHist[ec][st][rg][iChamber-FirstCh].SimRechits_each->Write();
2030  ChHist[ec][st][rg][iChamber-FirstCh].SimSimhits_each->Write();
2031  */
2032  //
2033  theFile->cd(SpecName);
2034  theFile->cd();
2035  }
2036  }
2037  }
2038  }
2039  //
2040  snprintf(SpecName, sizeof(SpecName), "AllChambers");
2041  theFile->mkdir(SpecName);
2042  theFile->cd(SpecName);
2043  DataFlow->Write();
2044  TriggersFired->Write();
2045  ALCTPerEvent->Write();
2046  CLCTPerEvent->Write();
2047  recHitsPerEvent->Write();
2048  segmentsPerEvent->Write();
2049  //
2050  theFile->cd(SpecName);
2051  //---- Close the file
2052  theFile->Close();
2053 }
TH1F * CLCTPerEvent
std::vector< TH1F * > Y_InefficientRecHits_inSegment
std::vector< TH1F * > Phi_InefficientRecHits_inSegment
std::vector< TH1F * > Y_EfficientRecHits_inSegment
MuonServiceProxy * theService
struct CSCEfficiency::ChamberHistos ChHist[2][4][3][36 - 1+1]
std::vector< TH1F * > Phi_EfficientRecHits_inSegment
#define FirstCh
Definition: CSCEfficiency.h:81
TH1F * TriggersFired
TH1F * segmentsPerEvent
struct CSCEfficiency::StationHistos StHist[2][4]
TH1F * recHitsPerEvent
TH1F * ALCTPerEvent
#define NumCh
Definition: CSCEfficiency.h:82

Member Function Documentation

◆ applyTrigger()

bool CSCEfficiency::applyTrigger ( edm::Handle< edm::TriggerResults > &  hltR,
const edm::TriggerNames triggerNames 
)
private

Definition at line 1560 of file CSCEfficiency.cc.

References edm::HLTGlobalStatus::accept(), ALCARECOTkAlV0s_cff::andOr, gather_cfg::cout, edm::HLTGlobalStatus::error(), edm::HandleBase::isValid(), L1TEGammaOffline_cfi::triggerNames, and edm::HLTGlobalStatus::wasrun().

1560  {
1561  bool triggerPassed = true;
1562  std::vector<std::string> hlNames = triggerNames.triggerNames();
1563  pointToTriggers.clear();
1564  for (size_t imyT = 0; imyT < myTriggers.size(); ++imyT) {
1565  for (size_t iT = 0; iT < hlNames.size(); ++iT) {
1566  //std::cout<<" iT = "<<iT<<" hlNames[iT] = "<<hlNames[iT]<<
1567  //" : wasrun = "<<hltR->wasrun(iT)<<" accept = "<<
1568  // hltR->accept(iT)<<" !error = "<<
1569  // !hltR->error(iT)<<std::endl;
1570  if (!imyT) {
1571  if (hltR->wasrun(iT) && hltR->accept(iT) && !hltR->error(iT)) {
1572  TriggersFired->Fill(iT);
1573  }
1574  }
1575  if (hlNames[iT] == myTriggers[imyT]) {
1576  pointToTriggers.push_back(iT);
1577  if (imyT) {
1578  break;
1579  }
1580  }
1581  }
1582  }
1583  if (pointToTriggers.size() != myTriggers.size()) {
1584  pointToTriggers.clear();
1585  if (printalot) {
1586  std::cout << " Not all trigger names found - all trigger specifications will be ignored. Check your cfg file!"
1587  << std::endl;
1588  }
1589  } else {
1590  if (!pointToTriggers.empty()) {
1591  if (printalot) {
1592  std::cout << "The following triggers will be required in the event: " << std::endl;
1593  for (size_t imyT = 0; imyT < pointToTriggers.size(); ++imyT) {
1594  std::cout << " " << hlNames[pointToTriggers[imyT]];
1595  }
1596  std::cout << std::endl;
1597  std::cout << " in condition (AND/OR) : " << !andOr << "/" << andOr << std::endl;
1598  }
1599  }
1600  }
1601 
1602  if (hltR.isValid()) {
1603  if (pointToTriggers.empty()) {
1604  if (printalot) {
1605  std::cout
1606  << " No triggers specified in the configuration or all ignored - no trigger information will be considered"
1607  << std::endl;
1608  }
1609  }
1610  for (size_t imyT = 0; imyT < pointToTriggers.size(); ++imyT) {
1611  if (hltR->wasrun(pointToTriggers[imyT]) && hltR->accept(pointToTriggers[imyT]) &&
1612  !hltR->error(pointToTriggers[imyT])) {
1613  triggerPassed = true;
1614  if (andOr) {
1615  break;
1616  }
1617  } else {
1618  triggerPassed = false;
1619  if (!andOr) {
1620  triggerPassed = false;
1621  break;
1622  }
1623  }
1624  }
1625  } else {
1626  if (printalot) {
1627  std::cout << " TriggerResults handle returns invalid state?! No trigger information will be considered"
1628  << std::endl;
1629  }
1630  }
1631  if (printalot) {
1632  std::cout << " Trigger passed: " << triggerPassed << std::endl;
1633  }
1634  return triggerPassed;
1635 }
bool accept() const
Has at least one path accepted the event?
bool error() const
Has any path encountered an error (exception)
bool wasrun() const
Was at least one path run?
std::vector< std::string > myTriggers
TH1F * TriggersFired
bool isValid() const
Definition: HandleBase.h:70
std::vector< int > pointToTriggers

◆ chamberCandidates()

void CSCEfficiency::chamberCandidates ( int  station,
int  ring,
float  phi,
std::vector< int > &  coupleOfChambers 
)
private

Definition at line 1010 of file CSCEfficiency.cc.

References gather_cfg::cout, createfilelist::int, M_PI, relativeConstraints::ring, and relativeConstraints::station.

1010  {
1011  coupleOfChambers.clear();
1012  // -pi< phi<+pi
1013  float phi_zero = 0.; // check! the phi at the "edge" of Ch 1
1014  float phi_const = 2. * M_PI / 36.;
1015  int last_chamber = 36;
1016  int first_chamber = 1;
1017  if (1 != station && 1 == ring) { // 18 chambers in the ring
1018  phi_const *= 2;
1019  last_chamber /= 2;
1020  }
1021  if (phi < 0.) {
1022  if (printalot)
1023  std::cout << " info: negative phi = " << phi << std::endl;
1024  phi += 2 * M_PI;
1025  }
1026  float chamber_float = (phi - phi_zero) / phi_const;
1027  int chamber_int = int(chamber_float);
1028  if (chamber_float - float(chamber_int) - 0.5 < 0.) {
1029  if (0 != chamber_int) {
1030  coupleOfChambers.push_back(chamber_int);
1031  } else {
1032  coupleOfChambers.push_back(last_chamber);
1033  }
1034  coupleOfChambers.push_back(chamber_int + 1);
1035 
1036  } else {
1037  coupleOfChambers.push_back(chamber_int + 1);
1038  if (last_chamber != chamber_int + 1) {
1039  coupleOfChambers.push_back(chamber_int + 2);
1040  } else {
1041  coupleOfChambers.push_back(first_chamber);
1042  }
1043  }
1044  if (printalot)
1045  std::cout << " phi = " << phi << " phi_zero = " << phi_zero << " phi_const = " << phi_const
1046  << " candidate chambers: first ch = " << coupleOfChambers[0] << " second ch = " << coupleOfChambers[1]
1047  << std::endl;
1048 }
#define M_PI

◆ checkLocal()

bool CSCEfficiency::checkLocal ( double  yLocal,
double  yBoundary,
int  station,
int  ring 
)
private

Definition at line 604 of file CSCEfficiency.cc.

References relativeConstraints::ring, and relativeConstraints::station.

604  {
605  //---- check if it is in a good local region (sensitive area - geometrical and HV boundaries excluded)
606  bool pass = false;
607  std::vector<float> deadZoneCenter(6);
608  const float deadZoneHalf = 0.32 * 7 / 2; // wire spacing * (wires missing + 1)/2
609  float cutZone = deadZoneHalf + distanceFromDeadZone; //cm
610  //---- hardcoded... not good
611  if (station > 1 && station < 5) {
612  if (2 == ring) {
613  deadZoneCenter[0] = -162.48;
614  deadZoneCenter[1] = -81.8744;
615  deadZoneCenter[2] = -21.18165;
616  deadZoneCenter[3] = 39.51105;
617  deadZoneCenter[4] = 100.2939;
618  deadZoneCenter[5] = 160.58;
619 
620  if (yLocal > yBoundary && ((yLocal > deadZoneCenter[0] + cutZone && yLocal < deadZoneCenter[1] - cutZone) ||
621  (yLocal > deadZoneCenter[1] + cutZone && yLocal < deadZoneCenter[2] - cutZone) ||
622  (yLocal > deadZoneCenter[2] + cutZone && yLocal < deadZoneCenter[3] - cutZone) ||
623  (yLocal > deadZoneCenter[3] + cutZone && yLocal < deadZoneCenter[4] - cutZone) ||
624  (yLocal > deadZoneCenter[4] + cutZone && yLocal < deadZoneCenter[5] - cutZone))) {
625  pass = true;
626  }
627  } else if (1 == ring) {
628  if (2 == station) {
629  deadZoneCenter[0] = -95.94;
630  deadZoneCenter[1] = -27.47;
631  deadZoneCenter[2] = 33.67;
632  deadZoneCenter[3] = 93.72;
633  } else if (3 == station) {
634  deadZoneCenter[0] = -85.97;
635  deadZoneCenter[1] = -36.21;
636  deadZoneCenter[2] = 23.68;
637  deadZoneCenter[3] = 84.04;
638  } else if (4 == station) {
639  deadZoneCenter[0] = -75.82;
640  deadZoneCenter[1] = -26.14;
641  deadZoneCenter[2] = 23.85;
642  deadZoneCenter[3] = 73.91;
643  }
644  if (yLocal > yBoundary && ((yLocal > deadZoneCenter[0] + cutZone && yLocal < deadZoneCenter[1] - cutZone) ||
645  (yLocal > deadZoneCenter[1] + cutZone && yLocal < deadZoneCenter[2] - cutZone) ||
646  (yLocal > deadZoneCenter[2] + cutZone && yLocal < deadZoneCenter[3] - cutZone))) {
647  pass = true;
648  }
649  }
650  } else if (1 == station) {
651  if (3 == ring) {
652  deadZoneCenter[0] = -83.155;
653  deadZoneCenter[1] = -22.7401;
654  deadZoneCenter[2] = 27.86665;
655  deadZoneCenter[3] = 81.005;
656  if (yLocal > yBoundary && ((yLocal > deadZoneCenter[0] + cutZone && yLocal < deadZoneCenter[1] - cutZone) ||
657  (yLocal > deadZoneCenter[1] + cutZone && yLocal < deadZoneCenter[2] - cutZone) ||
658  (yLocal > deadZoneCenter[2] + cutZone && yLocal < deadZoneCenter[3] - cutZone))) {
659  pass = true;
660  }
661  } else if (2 == ring) {
662  deadZoneCenter[0] = -86.285;
663  deadZoneCenter[1] = -32.88305;
664  deadZoneCenter[2] = 32.867423;
665  deadZoneCenter[3] = 88.205;
666  if (yLocal > (yBoundary) && ((yLocal > deadZoneCenter[0] + cutZone && yLocal < deadZoneCenter[1] - cutZone) ||
667  (yLocal > deadZoneCenter[1] + cutZone && yLocal < deadZoneCenter[2] - cutZone) ||
668  (yLocal > deadZoneCenter[2] + cutZone && yLocal < deadZoneCenter[3] - cutZone))) {
669  pass = true;
670  }
671  } else {
672  deadZoneCenter[0] = -81.0;
673  deadZoneCenter[1] = 81.0;
674  if (yLocal > (yBoundary) && ((yLocal > deadZoneCenter[0] + cutZone && yLocal < deadZoneCenter[1] - cutZone))) {
675  pass = true;
676  }
677  }
678  }
679  return pass;
680 }
double distanceFromDeadZone

◆ chooseDirection()

void CSCEfficiency::chooseDirection ( CLHEP::Hep3Vector &  innerPosition,
CLHEP::Hep3Vector &  outerPosition 
)
private

Definition at line 1506 of file CSCEfficiency.cc.

References PVValHelper::dy, and PVValHelper::dz.

1506  {
1507  //---- Be careful with trigger conditions too
1508  if (!isIPdata) {
1509  float dy = outerPosition.y() - innerPosition.y();
1510  float dz = outerPosition.z() - innerPosition.z();
1511  if (isBeamdata) {
1512  if (dz > 0) {
1513  alongZ = true;
1514  } else {
1515  alongZ = false;
1516  }
1517  } else { //cosmics
1518  if (dy / dz > 0) {
1519  alongZ = false;
1520  } else {
1521  alongZ = true;
1522  }
1523  }
1524  }
1525 }

◆ efficienciesPerChamber()

bool CSCEfficiency::efficienciesPerChamber ( CSCDetId id,
const CSCChamber cscChamber,
FreeTrajectoryState ftsChamber 
)
private

Definition at line 1051 of file CSCEfficiency.cc.

References gather_cfg::cout, dxdz, dydz, FreeTrajectoryState::momentum(), MillePedeFileConverter_cfg::out, PV3DBase< T, PVType, FrameType >::phi(), PV3DBase< T, PVType, FrameType >::theta(), GeomDet::toLocal(), funct::true, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

1053  {
1054  int ec, st, rg, ch, secondRing;
1055  returnTypes(id, ec, st, rg, ch, secondRing);
1056 
1057  LocalVector localDir = cscChamber->toLocal(ftsChamber.momentum());
1058  if (printalot) {
1059  std::cout << " global dir = " << ftsChamber.momentum() << std::endl;
1060  std::cout << " local dir = " << localDir << std::endl;
1061  std::cout << " local theta = " << localDir.theta() << std::endl;
1062  }
1063  float dxdz = localDir.x() / localDir.z();
1064  float dydz = localDir.y() / localDir.z();
1065  if (2 == st || 3 == st) {
1066  if (printalot) {
1067  std::cout << "st 3 or 4 ... flip dy/dz" << std::endl;
1068  }
1069  dydz = -dydz;
1070  }
1071  if (printalot) {
1072  std::cout << "dy/dz = " << dydz << std::endl;
1073  }
1074  // Apply angle cut
1075  bool out = true;
1076  if (applyIPangleCuts) {
1077  if (dydz > local_DY_DZ_Max || dydz < local_DY_DZ_Min || fabs(dxdz) > local_DX_DZ_Max) {
1078  out = false;
1079  }
1080  }
1081 
1082  // Segments
1083  bool firstCondition = !allSegments[ec][st][rg][ch].empty() ? true : false;
1084  bool secondCondition = false;
1085  //---- ME1 is special as usual - ME1a and ME1b are actually one chamber
1086  if (secondRing > -1) {
1087  secondCondition = !allSegments[ec][st][secondRing][ch].empty() ? true : false;
1088  }
1089  if (firstCondition || secondCondition) {
1090  if (out) {
1091  ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(1);
1092  }
1093  } else {
1094  if (out) {
1095  ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(0);
1096  }
1097  }
1098 
1099  if (useDigis) {
1100  // ALCTs
1101  firstCondition = allALCT[ec][st][rg][ch];
1102  secondCondition = false;
1103  if (secondRing > -1) {
1104  secondCondition = allALCT[ec][st][secondRing][ch];
1105  }
1106  if (firstCondition || secondCondition) {
1107  if (out) {
1108  ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(3);
1109  }
1110  // always apply partial angle cuts for this kind of histos
1111  if (fabs(dxdz) < local_DX_DZ_Max) {
1112  StHist[ec][st].EfficientALCT_momTheta->Fill(ftsChamber.momentum().theta());
1113  ChHist[ec][st][rg][ch].EfficientALCT_dydz->Fill(dydz);
1114  }
1115  } else {
1116  if (out) {
1117  ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(2);
1118  }
1119  if (fabs(dxdz) < local_DX_DZ_Max) {
1120  StHist[ec][st].InefficientALCT_momTheta->Fill(ftsChamber.momentum().theta());
1121  ChHist[ec][st][rg][ch].InefficientALCT_dydz->Fill(dydz);
1122  }
1123  if (printalot) {
1124  std::cout << " missing ALCT (dy/dz = " << dydz << ")";
1125  printf("\t\tendcap/station/ring/chamber: %i/%i/%i/%i\n", ec + 1, st + 1, rg + 1, ch + 1);
1126  }
1127  }
1128 
1129  // CLCTs
1130  firstCondition = allCLCT[ec][st][rg][ch];
1131  secondCondition = false;
1132  if (secondRing > -1) {
1133  secondCondition = allCLCT[ec][st][secondRing][ch];
1134  }
1135  if (firstCondition || secondCondition) {
1136  if (out) {
1137  ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(5);
1138  }
1139  if (dydz < local_DY_DZ_Max && dydz > local_DY_DZ_Min) {
1140  StHist[ec][st].EfficientCLCT_momPhi->Fill(ftsChamber.momentum().phi()); // - phi chamber...
1141  ChHist[ec][st][rg][ch].EfficientCLCT_dxdz->Fill(dxdz);
1142  }
1143  } else {
1144  if (out) {
1145  ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(4);
1146  }
1147  if (dydz < local_DY_DZ_Max && dydz > local_DY_DZ_Min) {
1148  StHist[ec][st].InefficientCLCT_momPhi->Fill(ftsChamber.momentum().phi()); // - phi chamber...
1149  ChHist[ec][st][rg][ch].InefficientCLCT_dxdz->Fill(dxdz);
1150  }
1151  if (printalot) {
1152  std::cout << " missing CLCT (dx/dz = " << dxdz << ")";
1153  printf("\t\tendcap/station/ring/chamber: %i/%i/%i/%i\n", ec + 1, st + 1, rg + 1, ch + 1);
1154  }
1155  }
1156  if (out) {
1157  // CorrLCTs
1158  firstCondition = allCorrLCT[ec][st][rg][ch];
1159  secondCondition = false;
1160  if (secondRing > -1) {
1161  secondCondition = allCorrLCT[ec][st][secondRing][ch];
1162  }
1163  if (firstCondition || secondCondition) {
1164  ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(7);
1165  } else {
1166  ChHist[ec][st][rg][ch].digiAppearanceCount->Fill(6);
1167  }
1168  }
1169  }
1170  return out;
1171 }
bool allCorrLCT[2][4][4][(36 - 1+1)]
float dydz
bool allALCT[2][4][4][(36 - 1+1)]
float dxdz
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:58
T z() const
Definition: PV3DBase.h:61
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
bool allCLCT[2][4][4][(36 - 1+1)]
double local_DX_DZ_Max
void returnTypes(CSCDetId &id, int &ec, int &st, int &rg, int &ch, int &secondRing)
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
double local_DY_DZ_Max
GlobalVector momentum() const
struct CSCEfficiency::ChamberHistos ChHist[2][4][3][36 - 1+1]
double local_DY_DZ_Min
std::vector< std::pair< LocalPoint, LocalVector > > allSegments[2][4][4][(36 - 1+1)]
struct CSCEfficiency::StationHistos StHist[2][4]
Geom::Theta< T > theta() const
Definition: PV3DBase.h:72

◆ extrapolate1D()

double CSCEfficiency::extrapolate1D ( double  initPosition,
double  initDirection,
double  parameterOfTheLine 
)
private

Definition at line 1496 of file CSCEfficiency.cc.

1496  {
1497  double extrapolatedPosition = initPosition + initDirection * parameterOfTheLine;
1498  return extrapolatedPosition;
1499 }

◆ fillDigiInfo()

void CSCEfficiency::fillDigiInfo ( edm::Handle< CSCALCTDigiCollection > &  alcts,
edm::Handle< CSCCLCTDigiCollection > &  clcts,
edm::Handle< CSCCorrelatedLCTDigiCollection > &  correlatedlcts,
edm::Handle< CSCWireDigiCollection > &  wires,
edm::Handle< CSCStripDigiCollection > &  strips,
edm::Handle< edm::PSimHitContainer > &  simhits,
edm::Handle< CSCRecHit2DCollection > &  rechits,
edm::Handle< CSCSegmentCollection > &  segments,
edm::ESHandle< CSCGeometry > &  cscGeom 
)
private

Definition at line 682 of file CSCEfficiency.cc.

References HLTBitAnalyser_cfi::isData, NumCh, HI_PhotonSkim_cff::rechits, HLTBitAnalyser_cfi::simhits, DigiDM_cff::strips, and DigiDM_cff::wires.

690  {
691  for (int iE = 0; iE < 2; iE++) {
692  for (int iS = 0; iS < 4; iS++) {
693  for (int iR = 0; iR < 4; iR++) {
694  for (int iC = 0; iC < NumCh; iC++) {
695  allSegments[iE][iS][iR][iC].clear();
696  allCLCT[iE][iS][iR][iC] = allALCT[iE][iS][iR][iC] = allCorrLCT[iE][iS][iR][iC] = false;
697  for (int iL = 0; iL < 6; iL++) {
698  allStrips[iE][iS][iR][iC][iL].clear();
699  allWG[iE][iS][iR][iC][iL].clear();
700  allRechits[iE][iS][iR][iC][iL].clear();
701  allSimhits[iE][iS][iR][iC][iL].clear();
702  }
703  }
704  }
705  }
706  }
707  //
708  if (useDigis) {
709  fillLCT_info(alcts, clcts, correlatedlcts);
710  fillWG_info(wires, cscGeom);
712  }
713  fillRechitsSegments_info(rechits, segments, cscGeom);
714  if (!isData) {
716  }
717 }
bool allCorrLCT[2][4][4][(36 - 1+1)]
bool allALCT[2][4][4][(36 - 1+1)]
void fillWG_info(edm::Handle< CSCWireDigiCollection > &wires, edm::ESHandle< CSCGeometry > &cscGeom)
bool allCLCT[2][4][4][(36 - 1+1)]
std::vector< std::pair< LocalPoint, int > > allSimhits[2][4][4][(36 - 1+1)][6]
std::vector< std::pair< std::pair< int, float >, int > > allWG[2][4][4][(36 - 1+1)][6]
void fillLCT_info(edm::Handle< CSCALCTDigiCollection > &alcts, edm::Handle< CSCCLCTDigiCollection > &clcts, edm::Handle< CSCCorrelatedLCTDigiCollection > &correlatedlcts)
void fillRechitsSegments_info(edm::Handle< CSCRecHit2DCollection > &rechits, edm::Handle< CSCSegmentCollection > &segments, edm::ESHandle< CSCGeometry > &cscGeom)
std::vector< std::pair< LocalPoint, LocalVector > > allSegments[2][4][4][(36 - 1+1)]
std::vector< std::pair< LocalPoint, bool > > allRechits[2][4][4][(36 - 1+1)][6]
void fillSimhit_info(edm::Handle< edm::PSimHitContainer > &simHits)
strips
#turn off noise in all subdetectors simHcalUnsuppressedDigis.doNoise = False mix.digitizers.hcal.doNoise = False simEcalUnsuppressedDigis.doNoise = False mix.digitizers.ecal.doNoise = False simEcalUnsuppressedDigis.doESNoise = False simSiPixelDigis.AddNoise = False mix.digitizers.pixel.AddNoise = False simSiStripDigis.Noise = False mix.digitizers.strip.AddNoise = False
Definition: DigiDM_cff.py:32
#define NumCh
Definition: CSCEfficiency.h:82
std::vector< std::pair< int, float > > allStrips[2][4][4][(36 - 1+1)][6]
void fillStrips_info(edm::Handle< CSCStripDigiCollection > &strips)

◆ fillLCT_info()

void CSCEfficiency::fillLCT_info ( edm::Handle< CSCALCTDigiCollection > &  alcts,
edm::Handle< CSCCLCTDigiCollection > &  clcts,
edm::Handle< CSCCorrelatedLCTDigiCollection > &  correlatedlcts 
)
private

Definition at line 719 of file CSCEfficiency.cc.

References FirstCh, dqmiolumiharvest::j, dqmdumpme::last, and FastTimerService_cff::range.

721  {
722  //---- ALCTDigis
723  int nSize = 0;
724  for (CSCALCTDigiCollection::DigiRangeIterator j = alcts->begin(); j != alcts->end(); j++) {
725  ++nSize;
726  const CSCDetId &id = (*j).first;
727  const CSCALCTDigiCollection::Range &range = (*j).second;
728  for (CSCALCTDigiCollection::const_iterator digiIt = range.first; digiIt != range.second; ++digiIt) {
729  // Valid digi in the chamber (or in neighbouring chamber)
730  if ((*digiIt).isValid()) {
731  allALCT[id.endcap() - 1][id.station() - 1][id.ring() - 1][id.chamber() - FirstCh] = true;
732  }
733  } // for digis in layer
734  } // end of for (j=...
735  ALCTPerEvent->Fill(nSize);
736  //---- CLCTDigis
737  nSize = 0;
738  for (CSCCLCTDigiCollection::DigiRangeIterator j = clcts->begin(); j != clcts->end(); j++) {
739  ++nSize;
740  const CSCDetId &id = (*j).first;
741  std::vector<CSCCLCTDigi>::const_iterator digiIt = (*j).second.first;
742  std::vector<CSCCLCTDigi>::const_iterator last = (*j).second.second;
743  for (; digiIt != last; ++digiIt) {
744  // Valid digi in the chamber (or in neighbouring chamber)
745  if ((*digiIt).isValid()) {
746  allCLCT[id.endcap() - 1][id.station() - 1][id.ring() - 1][id.chamber() - FirstCh] = true;
747  }
748  }
749  }
750  CLCTPerEvent->Fill(nSize);
751  //---- CorrLCTDigis
752  for (CSCCorrelatedLCTDigiCollection::DigiRangeIterator j = correlatedlcts->begin(); j != correlatedlcts->end(); j++) {
753  const CSCDetId &id = (*j).first;
754  std::vector<CSCCorrelatedLCTDigi>::const_iterator digiIt = (*j).second.first;
755  std::vector<CSCCorrelatedLCTDigi>::const_iterator last = (*j).second.second;
756  for (; digiIt != last; ++digiIt) {
757  // Valid digi in the chamber (or in neighbouring chamber)
758  if ((*digiIt).isValid()) {
759  allCorrLCT[id.endcap() - 1][id.station() - 1][id.ring() - 1][id.chamber() - FirstCh] = true;
760  }
761  }
762  }
763 }
bool allCorrLCT[2][4][4][(36 - 1+1)]
bool allALCT[2][4][4][(36 - 1+1)]
TH1F * CLCTPerEvent
bool allCLCT[2][4][4][(36 - 1+1)]
#define FirstCh
Definition: CSCEfficiency.h:81
std::pair< const_iterator, const_iterator > Range
std::vector< DigiType >::const_iterator const_iterator
TH1F * ALCTPerEvent

◆ fillRechitsSegments_info()

void CSCEfficiency::fillRechitsSegments_info ( edm::Handle< CSCRecHit2DCollection > &  rechits,
edm::Handle< CSCSegmentCollection > &  segments,
edm::ESHandle< CSCGeometry > &  cscGeom 
)
private

Definition at line 837 of file CSCEfficiency.cc.

References relativeConstraints::chamber, CSCDetId::chamber(), gather_cfg::cout, relativeConstraints::empty, CSCDetId::endcap(), makeMuonMisalignmentScenario::endcap, FirstCh, ALPAKA_ACCELERATOR_NAMESPACE::vertexFinder::it, CSCDetId::layer(), CSCGeometry::layer(), NumCh, HI_PhotonSkim_cff::rechits, CSCDetId::ring(), relativeConstraints::ring, relativeConstraints::station, CSCDetId::station(), GeomDet::toGlobal(), PV3DBase< T, PVType, FrameType >::x(), LocalError::xx(), LocalError::xy(), PV3DBase< T, PVType, FrameType >::y(), LocalError::yy(), and PV3DBase< T, PVType, FrameType >::z().

839  {
840  //---- RECHITS AND SEGMENTS
841  //---- Loop over rechits
842  if (printalot) {
843  //printf("\tGet the recHits collection.\t ");
844  printf(" The size of the rechit collection is %i\n", int(rechits->size()));
845  //printf("\t...start loop over rechits...\n");
846  }
847  recHitsPerEvent->Fill(rechits->size());
848  //---- Build iterator for rechits and loop :
850  for (recIt = rechits->begin(); recIt != rechits->end(); recIt++) {
851  //---- Find chamber with rechits in CSC
852  CSCDetId id = (CSCDetId)(*recIt).cscDetId();
853  if (printalot) {
854  const CSCLayer *csclayer = cscGeom->layer(id);
855  LocalPoint rhitlocal = (*recIt).localPosition();
856  LocalError rerrlocal = (*recIt).localPositionError();
857  GlobalPoint rhitglobal = csclayer->toGlobal(rhitlocal);
858  printf("\t\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
859  id.endcap(),
860  id.station(),
861  id.ring(),
862  id.chamber(),
863  id.layer());
864  printf("\t\tx,y,z: %f, %f, %f\texx,eey,exy: %f, %f, %f\tglobal x,y,z: %f, %f, %f \n",
865  rhitlocal.x(),
866  rhitlocal.y(),
867  rhitlocal.z(),
868  rerrlocal.xx(),
869  rerrlocal.yy(),
870  rerrlocal.xy(),
871  rhitglobal.x(),
872  rhitglobal.y(),
873  rhitglobal.z());
874  }
875  std::pair<LocalPoint, bool> recHitPos((*recIt).localPosition(), false);
876  allRechits[id.endcap() - 1][id.station() - 1][id.ring() - 1][id.chamber() - FirstCh][id.layer() - 1].push_back(
877  recHitPos);
878  }
879  //---- "Empty" chambers
880  for (int iE = 0; iE < 2; iE++) {
881  for (int iS = 0; iS < 4; iS++) {
882  for (int iR = 0; iR < 4; iR++) {
883  for (int iC = 0; iC < NumCh; iC++) {
884  int numLayers = 0;
885  for (int iL = 0; iL < 6; iL++) {
886  if (!allRechits[iE][iS][iR][iC][iL].empty()) {
887  ++numLayers;
888  }
889  }
890  if (numLayers > 1) {
891  emptyChambers[iE][iS][iR][iC] = false;
892  } else {
893  emptyChambers[iE][iS][iR][iC] = true;
894  }
895  }
896  }
897  }
898  }
899 
900  //
901  if (printalot) {
902  printf(" The size of the segment collection is %i\n", int(segments->size()));
903  //printf("\t...start loop over segments...\n");
904  }
905  segmentsPerEvent->Fill(segments->size());
906  for (CSCSegmentCollection::const_iterator it = segments->begin(); it != segments->end(); it++) {
907  CSCDetId id = (CSCDetId)(*it).cscDetId();
908  StHist[id.endcap() - 1][id.station() - 1].segmentChi2_ndf->Fill((*it).chi2() / (*it).degreesOfFreedom());
909  StHist[id.endcap() - 1][id.station() - 1].hitsInSegment->Fill((*it).nRecHits());
910  if (printalot) {
911  printf("\tendcap/station/ring/chamber: %i %i %i %i\n", id.endcap(), id.station(), id.ring(), id.chamber());
912  std::cout << "\tposition(loc) = " << (*it).localPosition() << " error(loc) = " << (*it).localPositionError()
913  << std::endl;
914  std::cout << "\t chi2/ndf = " << (*it).chi2() / (*it).degreesOfFreedom() << " nhits = " << (*it).nRecHits()
915  << std::endl;
916  }
917  allSegments[id.endcap() - 1][id.station() - 1][id.ring() - 1][id.chamber() - FirstCh].push_back(
918  make_pair((*it).localPosition(), (*it).localDirection()));
919 
920  //---- try to get the CSC recHits that contribute to this segment.
921  //if (printalot) printf("\tGet the recHits for this segment.\t");
922  std::vector<CSCRecHit2D> theseRecHits = (*it).specificRecHits();
923  int nRH = (*it).nRecHits();
924  if (printalot) {
925  printf("\tGet the recHits for this segment.\t");
926  printf(" nRH = %i\n", nRH);
927  }
928  //---- Find which of the rechits in the chamber is in the segment
929  int layerRH = 0;
930  for (vector<CSCRecHit2D>::const_iterator iRH = theseRecHits.begin(); iRH != theseRecHits.end(); iRH++) {
931  ++layerRH;
932  CSCDetId idRH = (CSCDetId)(*iRH).cscDetId();
933  if (printalot) {
934  printf("\t%i RH\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
935  layerRH,
936  idRH.endcap(),
937  idRH.station(),
938  idRH.ring(),
939  idRH.chamber(),
940  idRH.layer());
941  }
942  for (size_t jRH = 0;
943  jRH <
944  allRechits[idRH.endcap() - 1][idRH.station() - 1][idRH.ring() - 1][idRH.chamber() - FirstCh][idRH.layer() - 1]
945  .size();
946  ++jRH) {
947  float xDiff = iRH->localPosition().x() - allRechits[idRH.endcap() - 1][idRH.station() - 1][idRH.ring() - 1]
948  [idRH.chamber() - FirstCh][idRH.layer() - 1][jRH]
949  .first.x();
950  float yDiff = iRH->localPosition().y() - allRechits[idRH.endcap() - 1][idRH.station() - 1][idRH.ring() - 1]
951  [idRH.chamber() - FirstCh][idRH.layer() - 1][jRH]
952  .first.y();
953  if (fabs(xDiff) < 0.0001 && fabs(yDiff) < 0.0001) {
954  std::pair<LocalPoint, bool> recHitPos(allRechits[idRH.endcap() - 1][idRH.station() - 1][idRH.ring() - 1]
955  [idRH.chamber() - FirstCh][idRH.layer() - 1][jRH]
956  .first,
957  true);
958  allRechits[idRH.endcap() - 1][idRH.station() - 1][idRH.ring() - 1][idRH.chamber() - FirstCh][idRH.layer() - 1]
959  [jRH] = recHitPos;
960  if (printalot) {
961  std::cout << " number of the rechit (from zero) in the segment = " << jRH << std::endl;
962  }
963  }
964  }
965  }
966  }
967 }
T z() const
Definition: PV3DBase.h:61
bool emptyChambers[2][4][4][(36 - 1+1)]
int layer() const
Definition: CSCDetId.h:56
C::const_iterator const_iterator
constant access iterator type
Definition: RangeMap.h:43
float yy() const
Definition: LocalError.h:24
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
int chamber() const
Definition: CSCDetId.h:62
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
float xy() const
Definition: LocalError.h:23
int station() const
Definition: CSCDetId.h:79
#define FirstCh
Definition: CSCEfficiency.h:81
std::vector< std::pair< LocalPoint, LocalVector > > allSegments[2][4][4][(36 - 1+1)]
int endcap() const
Definition: CSCDetId.h:85
TH1F * segmentsPerEvent
struct CSCEfficiency::StationHistos StHist[2][4]
TH1F * recHitsPerEvent
std::vector< std::pair< LocalPoint, bool > > allRechits[2][4][4][(36 - 1+1)][6]
int ring() const
Definition: CSCDetId.h:68
#define NumCh
Definition: CSCEfficiency.h:82
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to given DetId.
Definition: CSCGeometry.cc:105
float xx() const
Definition: LocalError.h:22

◆ fillSimhit_info()

void CSCEfficiency::fillSimhit_info ( edm::Handle< edm::PSimHitContainer > &  simHits)
private

Definition at line 825 of file CSCEfficiency.cc.

References CSCDetId::chamber(), CSCDetId::endcap(), FirstCh, CSCDetId::layer(), CSCDetId::ring(), HLTBitAnalyser_cfi::simhits, and CSCDetId::station().

825  {
826  //---- SIMHITS
827  edm::PSimHitContainer::const_iterator dSHsimIter;
828  for (dSHsimIter = simhits->begin(); dSHsimIter != simhits->end(); dSHsimIter++) {
829  // Get DetID for this simHit:
830  CSCDetId sId = (CSCDetId)(*dSHsimIter).detUnitId();
831  std::pair<LocalPoint, int> simHitPos((*dSHsimIter).localPosition(), (*dSHsimIter).particleType());
832  allSimhits[sId.endcap() - 1][sId.station() - 1][sId.ring() - 1][sId.chamber() - FirstCh][sId.layer() - 1].push_back(
833  simHitPos);
834  }
835 }
int layer() const
Definition: CSCDetId.h:56
std::vector< std::pair< LocalPoint, int > > allSimhits[2][4][4][(36 - 1+1)][6]
int chamber() const
Definition: CSCDetId.h:62
int station() const
Definition: CSCDetId.h:79
#define FirstCh
Definition: CSCEfficiency.h:81
int endcap() const
Definition: CSCDetId.h:85
int ring() const
Definition: CSCDetId.h:68

◆ fillStrips_info()

void CSCEfficiency::fillStrips_info ( edm::Handle< CSCStripDigiCollection > &  strips)
private

Definition at line 791 of file CSCEfficiency.cc.

References change_name::diff, nano_mu_digi_cff::float, cms::cuda::for(), dqmiolumiharvest::j, dqmdumpme::last, DigiDM_cff::strips, and DiMuonV_cfg::threshold.

791  {
792  //---- STRIPS
793  const float threshold = 13.3;
794  for (CSCStripDigiCollection::DigiRangeIterator j = strips->begin(); j != strips->end(); j++) {
795  CSCDetId id = (CSCDetId)(*j).first;
796  int largestADCValue = -1;
797  std::vector<CSCStripDigi>::const_iterator digiItr = (*j).second.first;
798  std::vector<CSCStripDigi>::const_iterator last = (*j).second.second;
799  for (; digiItr != last; ++digiItr) {
800  int maxADC = largestADCValue;
801  int myStrip = digiItr->getStrip();
802  std::vector<int> myADCVals = digiItr->getADCCounts();
803  float thisPedestal = 0.5 * (float)(myADCVals[0] + myADCVals[1]);
804  float peakADC = -1000.;
805  for (int myADCVal : myADCVals) {
806  float diff = (float)myADCVal - thisPedestal;
807  if (diff > threshold) {
808  if (myADCVal > largestADCValue)
809  largestADCValue = myADCVal;
810  if (diff > peakADC)
811  peakADC = diff;
812  }
813  }
814  if (largestADCValue > maxADC) { // FIX IT!!!
815  std::pair<int, float> LayerSignal(myStrip, peakADC);
816  //---- AllStrips contains basic information about strips
817  //---- (strip number and peak signal for most significant strip in the layer)
818  allStrips[id.endcap() - 1][id.station() - 1][id.ring() - 1][id.chamber() - 1][id.layer() - 1].clear();
819  allStrips[id.endcap() - 1][id.station() - 1][id.ring() - 1][id.chamber() - 1][id.layer() - 1].push_back(
820  LayerSignal);
821  }
822  }
823  }
824 }
for(int i=first, nt=offsets[nh];i< nt;i+=gridDim.x *blockDim.x)
strips
#turn off noise in all subdetectors simHcalUnsuppressedDigis.doNoise = False mix.digitizers.hcal.doNoise = False simEcalUnsuppressedDigis.doNoise = False mix.digitizers.ecal.doNoise = False simEcalUnsuppressedDigis.doESNoise = False simSiPixelDigis.AddNoise = False mix.digitizers.pixel.AddNoise = False simSiStripDigis.Noise = False mix.digitizers.strip.AddNoise = False
Definition: DigiDM_cff.py:32
std::vector< std::pair< int, float > > allStrips[2][4][4][(36 - 1+1)][6]

◆ fillWG_info()

void CSCEfficiency::fillWG_info ( edm::Handle< CSCWireDigiCollection > &  wires,
edm::ESHandle< CSCGeometry > &  cscGeom 
)
private

Definition at line 765 of file CSCEfficiency.cc.

References FirstCh, dqmiolumiharvest::j, dqmdumpme::last, CSCGeometry::layer(), DigiDM_cff::wires, and CSCLayerGeometry::yOfWireGroup().

765  {
766  //---- WIRE GROUPS
767  for (CSCWireDigiCollection::DigiRangeIterator j = wires->begin(); j != wires->end(); j++) {
768  CSCDetId id = (CSCDetId)(*j).first;
769  const CSCLayer *layer_p = cscGeom->layer(id);
770  const CSCLayerGeometry *layerGeom = layer_p->geometry();
771  //
772  std::vector<CSCWireDigi>::const_iterator digiItr = (*j).second.first;
773  std::vector<CSCWireDigi>::const_iterator last = (*j).second.second;
774  //
775  for (; digiItr != last; ++digiItr) {
776  std::pair<int, float> WG_pos(digiItr->getWireGroup(), layerGeom->yOfWireGroup(digiItr->getWireGroup()));
777  std::pair<std::pair<int, float>, int> LayerSignal(WG_pos, digiItr->getTimeBin());
778 
779  //---- AllWG contains basic information about WG (WG number and Y-position, time bin)
780  allWG[id.endcap() - 1][id.station() - 1][id.ring() - 1][id.chamber() - FirstCh][id.layer() - 1].push_back(
781  LayerSignal);
782  if (printalot) {
783  //std::cout<<" WG check : "<<std::endl;
784  //printf("\t\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",id.endcap(),id.station(),id.ring(),id.chamber(),id.layer());
785  //std::cout<<" WG size = "<<allWG[id.endcap()-1][id.station()-1][id.ring()-1][id.chamber()-FirstCh]
786  //[id.layer()-1].size()<<std::endl;
787  }
788  }
789  }
790 }
float yOfWireGroup(int wireGroup, float x=0.) const
std::vector< std::pair< std::pair< int, float >, int > > allWG[2][4][4][(36 - 1+1)][6]
#define FirstCh
Definition: CSCEfficiency.h:81
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to given DetId.
Definition: CSCGeometry.cc:105

◆ filter()

bool CSCEfficiency::filter ( edm::Event event,
const edm::EventSetup eventSetup 
)
overrideprivatevirtual

Implements edm::one::EDFilterBase.

Definition at line 22 of file CSCEfficiency.cc.

References muon::caloCompatibility(), relativeConstraints::chamber, CSCGeometry::chamber(), ALCARECOTkAlJpsiMuMu_cff::charge, reco::TrackBase::confirmed, gather_cfg::cout, debug, PbPb_ZMuSkimMuonDPG_cff::deltaR, hcalRecHitTable_cff::detId, PVValHelper::dz, MillePedeFileConverter_cfg::e, makeMuonMisalignmentScenario::endcap, PV3DBase< T, PVType, FrameType >::eta(), options_cfi::eventSetup, JetMETHLTOfflineSource_cfi::feta, FirstCh, TrajectoryStateOnSurface::freeState(), GeomDet::geographicalId(), reco::TrackBase::goodIterative, reco::TrackBase::highPurity, mps_fire::i, CSCGeometry::idToDet(), iEvent, createfilelist::int, HLTBitAnalyser_cfi::isData, TrajectoryStateOnSurface::isValid(), reco::TrackBase::loose, MuonMETValueMapProducer_cff::maxNormChi2, RecoMuonValidator_cfi::maxP, alignBH_cfg::minP, HLT_2023v12_cff::minTrackHits, HLT_2023v12_cff::muon, DiMuonV_cfg::muons, reco::Track::outerPosition(), PV3DBase< T, PVType, FrameType >::phi(), GloballyPositioned< T >::position(), reco::BeamSpot::position(), FreeTrajectoryState::position(), funct::pow(), edm::Handle< T >::product(), reco::TrackBase::qualitySize, HI_PhotonSkim_cff::rechits, relativeConstraints::ring, reco::Muon::SegmentAndTrackArbitration, HLTBitAnalyser_cfi::simhits, mathSSE::sqrt(), relativeConstraints::station, DigiDM_cff::strips, GeomDet::surface(), reco::TrackBase::tight, HLT_2023v12_cff::track, JetHT_cfg::trackCollection, L1TEGammaOffline_cfi::triggerNames, reco::TrackBase::undefQuality, DigiDM_cff::wires, PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

22  {
23  passTheEvent = false;
24  DataFlow->Fill(0.);
26 
27  //---- increment counter
29  // printalot debug output
31  edm::RunNumber_t const iRun = event.id().run();
32  edm::EventNumber_t const iEvent = event.id().event();
33  if (0 == fmod(double(nEventsAnalyzed), double(1000))) {
34  if (printalot) {
35  printf("\n==enter==CSCEfficiency===== run %u\tevent %llu\tn Analyzed %i\n", iRun, iEvent, nEventsAnalyzed);
36  }
37  }
38  theService->update(eventSetup);
39  //---- These declarations create handles to the types of records that you want
40  //---- to retrieve from event "e".
41  if (printalot)
42  printf("\tget handles for digi collections\n");
43 
44  //---- Pass the handle to the method "getByType", which is used to retrieve
45  //---- one and only one instance of the type in question out of event "e". If
46  //---- zero or more than one instance exists in the event an exception is thrown.
47  if (printalot)
48  printf("\tpass handles\n");
56  edm::Handle<edm::View<reco::Track> > trackCollectionH;
58 
59  if (useDigis) {
60  event.getByToken(wd_token, wires);
61  event.getByToken(sd_token, strips);
62  event.getByToken(al_token, alcts);
63  event.getByToken(cl_token, clcts);
64  event.getByToken(co_token, correlatedlcts);
65  }
66  if (!isData) {
67  event.getByToken(sh_token, simhits);
68  }
69  event.getByToken(rh_token, rechits);
70  event.getByToken(se_token, segments);
71  event.getByToken(tk_token, trackCollectionH);
72  const edm::View<reco::Track> trackCollection = *(trackCollectionH.product());
73 
74  //---- Get the CSC Geometry :
75  if (printalot)
76  printf("\tget the CSC geometry.\n");
78 
79  // use theTrackingGeometry instead of cscGeom?
80  //edm::ESHandle<GlobalTrackingGeometry> theTrackingGeometry = eventSetup.getHandle(trackingGeomToken_);
81 
82  bool triggerPassed = true;
83  if (useTrigger) {
84  // access the trigger information
85  // trigger names can be find in HLTrigger/Configuration/python/HLT_2E30_cff.py (or?)
86  // get hold of TriggerResults
88  event.getByToken(ht_token, hltR);
89  const edm::TriggerNames &triggerNames = event.triggerNames(*hltR);
90  triggerPassed = applyTrigger(hltR, triggerNames);
91  }
92  if (!triggerPassed) {
93  return triggerPassed;
94  }
95  DataFlow->Fill(1.);
96  GlobalPoint gpZero(0., 0., 0.);
97  if (theService->magneticField()->inTesla(gpZero).mag2() < 0.1) {
98  magField = false;
99  } else {
100  magField = true;
101  }
102 
103  //---- store info from digis
104  fillDigiInfo(alcts, clcts, correlatedlcts, wires, strips, simhits, rechits, segments, cscGeom);
105  //
107  edm::InputTag muonTag_("muons");
108  event.getByLabel(muonTag_, muons);
109 
110  edm::Handle<reco::BeamSpot> beamSpotHandle;
111  event.getByLabel("offlineBeamSpot", beamSpotHandle);
112  reco::BeamSpot vertexBeamSpot = *beamSpotHandle;
113  //
114  std::vector<reco::MuonCollection::const_iterator> goodMuons_it;
115  unsigned int nPositiveZ = 0;
116  unsigned int nNegativeZ = 0;
117  float muonOuterZPosition = -99999.;
118  if (isIPdata) {
119  if (printalot)
120  std::cout << " muons.size() = " << muons->size() << std::endl;
121  for (reco::MuonCollection::const_iterator muon = muons->begin(); muon != muons->end(); ++muon) {
122  DataFlow->Fill(31.);
123  if (printalot) {
124  std::cout << " iMuon = " << muon - muons->begin() << " charge = " << muon->charge() << " p = " << muon->p()
125  << " pt = " << muon->pt() << " eta = " << muon->eta() << " phi = " << muon->phi()
126  << " matches = " << muon->matches().size()
127  << " matched Seg = " << muon->numberOfMatches(reco::Muon::SegmentAndTrackArbitration)
128  << " GLB/TR/STA = " << muon->isGlobalMuon() << "/" << muon->isTrackerMuon() << "/"
129  << muon->isStandAloneMuon() << std::endl;
130  }
131  if (!(muon->isTrackerMuon() && muon->isGlobalMuon())) {
132  continue;
133  }
134  DataFlow->Fill(32.);
135  double relISO =
136  (muon->isolationR03().sumPt + muon->isolationR03().emEt + muon->isolationR03().hadEt) / muon->track()->pt();
137  if (printalot) {
138  std::cout << " relISO = " << relISO << " emVetoEt = " << muon->isolationR03().emVetoEt
139  << " caloComp = " << muon::caloCompatibility(*(muon))
140  << " dxy = " << fabs(muon->track()->dxy(vertexBeamSpot.position())) << std::endl;
141  }
142  if (
143  //relISO>0.1 || muon::caloCompatibility(*(muon))<.90 ||
144  fabs(muon->track()->dxy(vertexBeamSpot.position())) > 0.2 || muon->pt() < 6.) {
145  continue;
146  }
147  DataFlow->Fill(33.);
148  if (muon->track()->hitPattern().numberOfValidPixelHits() < 1 ||
149  muon->track()->hitPattern().numberOfValidTrackerHits() < 11 ||
150  muon->combinedMuon()->hitPattern().numberOfValidMuonHits() < 1 ||
151  muon->combinedMuon()->normalizedChi2() > 10. || muon->numberOfMatches() < 2) {
152  continue;
153  }
154  DataFlow->Fill(34.);
155  float zOuter = muon->combinedMuon()->outerPosition().z();
156  float rhoOuter = muon->combinedMuon()->outerPosition().rho();
157  bool passDepth = true;
158  // barrel region
159  //if ( fabs(zOuter) < 660. && rhoOuter > 400. && rhoOuter < 480.){
160  if (fabs(zOuter) < 660. && rhoOuter > 400. && rhoOuter < 540.) {
161  passDepth = false;
162  }
163  // endcap region
164  //else if( fabs(zOuter) > 550. && fabs(zOuter) < 650. && rhoOuter < 300.){
165  else if (fabs(zOuter) > 550. && fabs(zOuter) < 650. && rhoOuter < 300.) {
166  passDepth = false;
167  }
168  // overlap region
169  //else if ( fabs(zOuter) > 680. && fabs(zOuter) < 730. && rhoOuter < 480.){
170  else if (fabs(zOuter) > 680. && fabs(zOuter) < 880. && rhoOuter < 540.) {
171  passDepth = false;
172  }
173  if (!passDepth) {
174  continue;
175  }
176  DataFlow->Fill(35.);
177  goodMuons_it.push_back(muon);
178  if (muon->track()->momentum().z() > 0.) {
179  ++nPositiveZ;
180  }
181  if (muon->track()->momentum().z() < 0.) {
182  ++nNegativeZ;
183  }
184  }
185  }
186 
187  //
188 
189  if (printalot)
190  std::cout << "Start track loop over " << trackCollection.size() << " tracks" << std::endl;
191  for (edm::View<reco::Track>::size_type i = 0; i < trackCollection.size(); ++i) {
192  DataFlow->Fill(2.);
193  edm::RefToBase<reco::Track> track(trackCollectionH, i);
194  //std::cout<<" iTR = "<<i<<" eta = "<<track->eta()<<" phi = "<<track->phi()<<std::cout<<" pt = "<<track->pt()<<std::endl;
195  if (isIPdata) {
196  if (printalot) {
197  std::cout << " nNegativeZ = " << nNegativeZ << " nPositiveZ = " << nPositiveZ << std::endl;
198  }
199  if (nNegativeZ > 1 || nPositiveZ > 1) {
200  break;
201  }
202  bool trackOK = false;
203  if (printalot) {
204  std::cout << " goodMuons_it.size() = " << goodMuons_it.size() << std::endl;
205  }
206  for (size_t iM = 0; iM < goodMuons_it.size(); ++iM) {
207  //std::cout<<" iM = "<<iM<<" eta = "<<goodMuons_it[iM]->track()->eta()<<
208  //" phi = "<<goodMuons_it[iM]->track()->phi()<<
209  //" pt = "<<goodMuons_it[iM]->track()->pt()<<std::endl;
210  float deltaR = pow(track->phi() - goodMuons_it[iM]->track()->phi(), 2) +
211  pow(track->eta() - goodMuons_it[iM]->track()->eta(), 2);
212  deltaR = sqrt(deltaR);
213  if (printalot) {
214  std::cout << " TR mu match to a tr: deltaR = " << deltaR
215  << " dPt = " << track->pt() - goodMuons_it[iM]->track()->pt() << std::endl;
216  }
217  if (deltaR > 0.01 || fabs(track->pt() - goodMuons_it[iM]->track()->pt()) > 0.1) {
218  continue;
219  } else {
220  trackOK = true;
221  if (printalot) {
222  std::cout << " trackOK " << std::endl;
223  }
224  muonOuterZPosition = goodMuons_it[iM]->combinedMuon()->outerPosition().z();
225  break;
226  //++nChosenTracks;
227  }
228  }
229  if (!trackOK) {
230  if (printalot) {
231  std::cout << " failed: trackOK " << std::endl;
232  }
233  continue;
234  }
235  } else {
236  //---- Do we need a better "clean track" definition?
237  if (trackCollection.size() > 2) {
238  break;
239  }
240  DataFlow->Fill(3.);
241  if (!i && 2 == trackCollection.size()) {
243  edm::RefToBase<reco::Track> trackTwo(trackCollectionH, tType);
244  if (track->outerPosition().z() * trackTwo->outerPosition().z() > 0) { // in one and the same "endcap"
245  break;
246  }
247  }
248  }
249  DataFlow->Fill(4.);
250  if (printalot) {
251  std::cout << "i track = " << i << " P = " << track->p() << " chi2/ndf = " << track->normalizedChi2()
252  << " nSeg = " << segments->size() << std::endl;
253  std::cout << "quality undef/loose/tight/high/confirmed/goodIt/size " << track->quality(reco::Track::undefQuality)
254  << "/" << track->quality(reco::Track::loose) << "/" << track->quality(reco::Track::tight) << "/"
255  << track->quality(reco::Track::highPurity) << "/" << track->quality(reco::Track::confirmed) << "/"
256  << track->quality(reco::Track::goodIterative) << "/" << track->quality(reco::Track::qualitySize)
257  << std::endl;
258  std::cout << " pt = " << track->pt() << " +-" << track->ptError() << " q/pt = " << track->qoverp() << " +- "
259  << track->qoverpError() << std::endl;
260  //std::cout<<" const Pmin = "<<minTrackMomentum<<" pMax = "<<maxTrackMomentum<<" maxNormChi2 = "<<maxNormChi2<<std::endl;
261  std::cout << " track inner position = " << track->innerPosition()
262  << " outer position = " << track->outerPosition() << std::endl;
263  std::cout << "track eta (outer) = " << track->outerPosition().eta()
264  << " phi (outer) = " << track->outerPosition().phi() << std::endl;
265  if (fabs(track->innerPosition().z()) > 500.) {
266  DetId innerDetId(track->innerDetId());
267  std::cout << " dump inner state MUON detid = " << debug.dumpMuonId(innerDetId) << std::endl;
268  }
269  if (fabs(track->outerPosition().z()) > 500.) {
270  DetId outerDetId(track->outerDetId());
271  std::cout << " dump outer state MUON detid = " << debug.dumpMuonId(outerDetId) << std::endl;
272  }
273 
274  std::cout << " nHits = " << track->found() << std::endl;
275  /*
276  trackingRecHit_iterator rhbegin = track->recHitsBegin();
277  trackingRecHit_iterator rhend = track->recHitsEnd();
278  int iRH = 0;
279  for(trackingRecHit_iterator recHit = rhbegin; recHit != rhend; ++recHit){
280  const GeomDet* geomDet = theTrackingGeometry->idToDet((*recHit)->geographicalId());
281  std::cout<<"hit "<<iRH<<" loc pos = " <<(*recHit)->localPosition()<<
282  " glob pos = " <<geomDet->toGlobal((*recHit)->localPosition())<<std::endl;
283  ++iRH;
284  }
285  */
286  }
287  float dpT_ov_pT = 0.;
288  if (fabs(track->pt()) > 0.001) {
289  dpT_ov_pT = track->ptError() / track->pt();
290  }
291  //---- These define a "good" track
292  if (track->normalizedChi2() > maxNormChi2) { // quality
293  break;
294  }
295  DataFlow->Fill(5.);
296  if (track->found() < minTrackHits) { // enough data points
297  break;
298  }
299  DataFlow->Fill(6.);
300  if (!segments->size()) { // better have something in the CSC
301  break;
302  }
303  DataFlow->Fill(7.);
304  if (magField && (track->p() < minP || track->p() > maxP)) { // proper energy range
305  break;
306  }
307  DataFlow->Fill(8.);
308  if (magField && (dpT_ov_pT > 0.5)) { // not too crazy uncertainty
309  break;
310  }
311  DataFlow->Fill(9.);
312 
313  passTheEvent = true;
314  if (printalot)
315  std::cout << "good Track" << std::endl;
316  CLHEP::Hep3Vector r3T_inner(track->innerPosition().x(), track->innerPosition().y(), track->innerPosition().z());
317  CLHEP::Hep3Vector r3T(track->outerPosition().x(), track->outerPosition().y(), track->outerPosition().z());
318  chooseDirection(r3T_inner, r3T); // for non-IP
319 
320  CLHEP::Hep3Vector p3T(track->outerMomentum().x(), track->outerMomentum().y(), track->outerMomentum().z());
321  CLHEP::Hep3Vector p3_propagated, r3_propagated;
322  AlgebraicSymMatrix66 cov_propagated, covT;
323  covT *= 1e-20;
324  cov_propagated *= 1e-20;
325  int charge = track->charge();
326  FreeTrajectoryState ftsStart = getFromCLHEP(p3T, r3T, charge, covT, &*(theService->magneticField()));
327  if (printalot) {
328  std::cout << " p = " << track->p() << " norm chi2 = " << track->normalizedChi2() << std::endl;
329  std::cout << " dump the very first FTS = " << debug.dumpFTS(ftsStart) << std::endl;
330  }
331  TrajectoryStateOnSurface tSOSDest;
332  int endcap = 0;
333  //---- which endcap to look at
334  if (track->outerPosition().z() > 0) {
335  endcap = 1;
336  } else {
337  endcap = 2;
338  }
339  int chamber = 1;
340  //---- a "refference" CSCDetId for each ring
341  std::vector<CSCDetId> refME;
342  for (int iS = 1; iS < 5; ++iS) {
343  for (int iR = 1; iR < 4; ++iR) {
344  if (1 != iS && iR > 2) {
345  continue;
346  } else if (4 == iS && iR > 1) {
347  continue;
348  }
349  refME.push_back(CSCDetId(endcap, iS, iR, chamber));
350  }
351  }
352  //---- loop over the "refference" CSCDetIds
353  for (size_t iSt = 0; iSt < refME.size(); ++iSt) {
354  if (printalot) {
355  std::cout << "loop iStatation = " << iSt << std::endl;
356  std::cout << "refME[iSt]: st = " << refME[iSt].station() << " rg = " << refME[iSt].ring() << std::endl;
357  }
358  std::map<std::string, bool> chamberTypes;
359  chamberTypes["ME11"] = false;
360  chamberTypes["ME12"] = false;
361  chamberTypes["ME13"] = false;
362  chamberTypes["ME21"] = false;
363  chamberTypes["ME22"] = false;
364  chamberTypes["ME31"] = false;
365  chamberTypes["ME32"] = false;
366  chamberTypes["ME41"] = false;
367  const CSCChamber *cscChamber_base = cscGeom->chamber(refME[iSt].chamberId());
368  DetId detId = cscChamber_base->geographicalId();
369  if (printalot) {
370  std::cout << " base iStation : eta = " << cscGeom->idToDet(detId)->surface().position().eta()
371  << " phi = " << cscGeom->idToDet(detId)->surface().position().phi()
372  << " y = " << cscGeom->idToDet(detId)->surface().position().y() << std::endl;
373  std::cout << " dump base iStation detid = " << debug.dumpMuonId(detId) << std::endl;
374  std::cout << " dump FTS start = " << debug.dumpFTS(ftsStart) << std::endl;
375  }
376  //---- propagate to this ME
377  tSOSDest = propagate(ftsStart, cscGeom->idToDet(detId)->surface());
378  if (tSOSDest.isValid()) {
379  ftsStart = *tSOSDest.freeState();
380  if (printalot)
381  std::cout << " dump FTS end = " << debug.dumpFTS(ftsStart) << std::endl;
382  getFromFTS(ftsStart, p3_propagated, r3_propagated, charge, cov_propagated);
383  float feta = fabs(r3_propagated.eta());
384  float phi = r3_propagated.phi();
385  //---- which rings are (possibly) penetrated
386  ringCandidates(refME[iSt].station(), feta, chamberTypes);
387 
388  map<std::string, bool>::iterator iter;
389  int iterations = 0;
390  //---- loop over ring candidates
391  for (iter = chamberTypes.begin(); iter != chamberTypes.end(); iter++) {
392  ++iterations;
393  //---- is this ME a machinig candidate station
394  if (iter->second && (iterations - 1) == int(iSt)) {
395  if (printalot) {
396  std::cout << " Chamber type " << iter->first << " is a candidate..." << std::endl;
397  std::cout << " station() = " << refME[iSt].station() << " ring() = " << refME[iSt].ring()
398  << " iSt = " << iSt << std::endl;
399  }
400  std::vector<int> coupleOfChambers;
401  //---- which chamber (and its closes neighbor) is penetrated by the track - candidates
402  chamberCandidates(refME[iSt].station(), refME[iSt].ring(), phi, coupleOfChambers);
403  //---- loop over the two chamber candidates
404  for (size_t iCh = 0; iCh < coupleOfChambers.size(); ++iCh) {
405  DataFlow->Fill(11.);
406  if (printalot)
407  std::cout << " Check chamber N = " << coupleOfChambers.at(iCh) << std::endl;
408  ;
409  if ((!getAbsoluteEfficiency) &&
410  (true == emptyChambers[refME[iSt].endcap() - 1][refME[iSt].station() - 1][refME[iSt].ring() - 1]
411  [coupleOfChambers.at(iCh) - FirstCh])) {
412  continue;
413  }
414  CSCDetId theCSCId(refME[iSt].endcap(), refME[iSt].station(), refME[iSt].ring(), coupleOfChambers.at(iCh));
415  const CSCChamber *cscChamber = cscGeom->chamber(theCSCId.chamberId());
416  const BoundPlane bpCh = cscGeom->idToDet(cscChamber->geographicalId())->surface();
417  float zFTS = ftsStart.position().z();
418  float dz = fabs(bpCh.position().z() - zFTS);
419  float zDistInner = track->innerPosition().z() - bpCh.position().z();
420  float zDistOuter = track->outerPosition().z() - bpCh.position().z();
421  //---- only detectors between the inner and outer points of the track are considered for non IP-data
422  if (printalot) {
423  std::cout << " zIn = " << track->innerPosition().z() << " zOut = " << track->outerPosition().z()
424  << " zSurf = " << bpCh.position().z() << std::endl;
425  }
426  if (!isIPdata && (zDistInner * zDistOuter > 0. || fabs(zDistInner) < 15. ||
427  fabs(zDistOuter) < 15.)) { // for non IP-data
428  if (printalot) {
429  std::cout << " Not an intermediate (as defined) point... Skip." << std::endl;
430  }
431  continue;
432  }
433  if (isIPdata && fabs(track->eta()) < 1.8) {
434  if (fabs(muonOuterZPosition) - fabs(bpCh.position().z()) < 0 ||
435  fabs(muonOuterZPosition - bpCh.position().z()) < 15.) {
436  continue;
437  }
438  }
439  DataFlow->Fill(13.);
440  //---- propagate to the chamber (from this ME) if it is a different surface (odd/even chambers)
441  if (dz > 0.1) { // i.e. non-zero (float 0 check is bad)
442  //if(fabs(zChanmber - zFTS ) > 0.1){
443  tSOSDest = propagate(ftsStart, cscGeom->idToDet(cscChamber->geographicalId())->surface());
444  if (tSOSDest.isValid()) {
445  ftsStart = *tSOSDest.freeState();
446  } else {
447  if (printalot)
448  std::cout << "TSOS not valid! Break." << std::endl;
449  break;
450  }
451  } else {
452  if (printalot)
453  std::cout << " info: dz<0.1" << std::endl;
454  }
455  DataFlow->Fill(15.);
456  FreeTrajectoryState ftsInit = ftsStart;
457  bool inDeadZone = false;
458  //---- loop over the 6 layers
459  for (int iLayer = 0; iLayer < 6; ++iLayer) {
460  bool extrapolationPassed = true;
461  if (printalot) {
462  std::cout << " iLayer = " << iLayer << " dump FTS init = " << debug.dumpFTS(ftsInit) << std::endl;
463  std::cout << " dump detid = " << debug.dumpMuonId(cscChamber->geographicalId()) << std::endl;
464  std::cout << "Surface to propagate to: pos = " << cscChamber->layer(iLayer + 1)->surface().position()
465  << " eta = " << cscChamber->layer(iLayer + 1)->surface().position().eta()
466  << " phi = " << cscChamber->layer(iLayer + 1)->surface().position().phi() << std::endl;
467  }
468  //---- propagate to this layer
469  tSOSDest = propagate(ftsInit, cscChamber->layer(iLayer + 1)->surface());
470  if (tSOSDest.isValid()) {
471  ftsInit = *tSOSDest.freeState();
472  if (printalot)
473  std::cout << " Propagation between layers successful: dump FTS end = " << debug.dumpFTS(ftsInit)
474  << std::endl;
475  getFromFTS(ftsInit, p3_propagated, r3_propagated, charge, cov_propagated);
476  } else {
477  if (printalot)
478  std::cout << "Propagation between layers not successful - notValid TSOS" << std::endl;
479  extrapolationPassed = false;
480  inDeadZone = true;
481  }
482  //}
483  //---- Extrapolation passed? For each layer?
484  if (extrapolationPassed) {
485  GlobalPoint theExtrapolationPoint(r3_propagated.x(), r3_propagated.y(), r3_propagated.z());
486  LocalPoint theLocalPoint = cscChamber->layer(iLayer + 1)->toLocal(theExtrapolationPoint);
487  //std::cout<<" Candidate chamber: extrapolated LocalPoint = "<<theLocalPoint<<std::endl;
488  inDeadZone = (inDeadZone ||
490  theLocalPoint.x(), theLocalPoint.y(), refME[iSt].station(), refME[iSt].ring()));
491  if (printalot) {
492  std::cout << " Candidate chamber: extrapolated LocalPoint = " << theLocalPoint
493  << "inDeadZone = " << inDeadZone << std::endl;
494  }
495  //---- break if in dead zone for any layer ("clean" tracks)
496  if (inDeadZone) {
497  break;
498  }
499  } else {
500  break;
501  }
502  }
503  DataFlow->Fill(17.);
504  //---- Is a track in a sensitive area for each layer?
505  if (!inDeadZone) { //---- for any layer
506  DataFlow->Fill(19.);
507  if (printalot)
508  std::cout << "Do efficiencies..." << std::endl;
509  //---- Do efficiencies
510  // angle cuts applied (if configured)
511  bool angle_flag = true;
512  angle_flag = efficienciesPerChamber(theCSCId, cscChamber, ftsStart);
513  if (useDigis && angle_flag) {
514  stripWire_Efficiencies(theCSCId, ftsStart);
515  }
516  if (angle_flag) {
517  recHitSegment_Efficiencies(theCSCId, cscChamber, ftsStart);
518  if (!isData) {
519  recSimHitEfficiency(theCSCId, ftsStart);
520  }
521  }
522  } else {
523  if (printalot)
524  std::cout << " Not in active area for all layers" << std::endl;
525  }
526  }
527  if (tSOSDest.isValid()) {
528  ftsStart = *tSOSDest.freeState();
529  }
530  }
531  }
532  } else {
533  if (printalot)
534  std::cout << " TSOS not valid..." << std::endl;
535  }
536  }
537  }
538  //---- End
539  if (printalot)
540  printf("==exit===CSCEfficiency===== run %u\tevent %llu\n\n", iRun, iEvent);
541  return passTheEvent;
542 }
unsigned int size_type
Definition: View.h:92
bool applyTrigger(edm::Handle< edm::TriggerResults > &hltR, const edm::TriggerNames &triggerNames)
edm::EDGetTokenT< CSCStripDigiCollection > sd_token
const CSCChamber * chamber(CSCDetId id) const
Return the chamber corresponding to given DetId.
Definition: CSCGeometry.cc:100
const Point & position() const
position
Definition: BeamSpot.h:59
T z() const
Definition: PV3DBase.h:61
void chooseDirection(CLHEP::Hep3Vector &innerPosition, CLHEP::Hep3Vector &outerPosition)
void ringCandidates(int station, float absEta, std::map< std::string, bool > &chamberTypes)
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
T eta() const
Definition: PV3DBase.h:73
T const * product() const
Definition: Handle.h:70
unsigned long long EventNumber_t
edm::EDGetTokenT< CSCCorrelatedLCTDigiCollection > co_token
bool recSimHitEfficiency(CSCDetId &id, FreeTrajectoryState &ftsChamber)
edm::EDGetTokenT< CSCCLCTDigiCollection > cl_token
bool emptyChambers[2][4][4][(36 - 1+1)]
muons
the two sets of parameters below are mutually exclusive, depending if RECO or ALCARECO is used the us...
Definition: DiMuonV_cfg.py:212
bool getAbsoluteEfficiency
float caloCompatibility(const reco::Muon &muon)
edm::EDGetTokenT< CSCSegmentCollection > se_token
FreeTrajectoryState getFromCLHEP(const CLHEP::Hep3Vector &p3, const CLHEP::Hep3Vector &r3, int charge, const AlgebraicSymMatrix66 &cov, const MagneticField *field)
GlobalPoint position() const
T y() const
Definition: PV3DBase.h:60
int iEvent
Definition: GenABIO.cc:224
edm::ESGetToken< CSCGeometry, MuonGeometryRecord > geomToken_
edm::EDGetTokenT< edm::PSimHitContainer > sh_token
MuonServiceProxy * theService
edm::EDGetTokenT< CSCWireDigiCollection > wd_token
T sqrt(T t)
Definition: SSEVec.h:19
void getFromFTS(const FreeTrajectoryState &fts, CLHEP::Hep3Vector &p3, CLHEP::Hep3Vector &r3, int &charge, AlgebraicSymMatrix66 &cov)
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:64
trackCollection
Definition: JetHT_cfg.py:51
bool efficienciesPerChamber(CSCDetId &id, const CSCChamber *cscChamber, FreeTrajectoryState &ftsChamber)
void chamberCandidates(int station, int ring, float phi, std::vector< int > &coupleOfChambers)
double maxNormChi2
bool stripWire_Efficiencies(CSCDetId &cscDetId, FreeTrajectoryState &ftsChamber)
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66
edm::EDGetTokenT< CSCRecHit2DCollection > rh_token
Definition: DetId.h:17
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
#define debug
Definition: HDRShower.cc:19
void fillDigiInfo(edm::Handle< CSCALCTDigiCollection > &alcts, edm::Handle< CSCCLCTDigiCollection > &clcts, edm::Handle< CSCCorrelatedLCTDigiCollection > &correlatedlcts, edm::Handle< CSCWireDigiCollection > &wires, edm::Handle< CSCStripDigiCollection > &strips, edm::Handle< edm::PSimHitContainer > &simhits, edm::Handle< CSCRecHit2DCollection > &rechits, edm::Handle< CSCSegmentCollection > &segments, edm::ESHandle< CSCGeometry > &cscGeom)
const PositionType & position() const
#define FirstCh
Definition: CSCEfficiency.h:81
bool recHitSegment_Efficiencies(CSCDetId &cscDetId, const CSCChamber *cscChamber, FreeTrajectoryState &ftsChamber)
unsigned int printout_NEvents
bool inSensitiveLocalRegion(double xLocal, double yLocal, int station, int ring)
FreeTrajectoryState const * freeState(bool withErrors=true) const
strips
#turn off noise in all subdetectors simHcalUnsuppressedDigis.doNoise = False mix.digitizers.hcal.doNoise = False simEcalUnsuppressedDigis.doNoise = False mix.digitizers.ecal.doNoise = False simEcalUnsuppressedDigis.doESNoise = False simSiPixelDigis.AddNoise = False mix.digitizers.pixel.AddNoise = False simSiStripDigis.Noise = False mix.digitizers.strip.AddNoise = False
Definition: DigiDM_cff.py:32
unsigned int RunNumber_t
unsigned int minTrackHits
edm::EDGetTokenT< CSCALCTDigiCollection > al_token
edm::EDGetTokenT< edm::TriggerResults > ht_token
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
TrajectoryStateOnSurface propagate(FreeTrajectoryState &ftsStart, const BoundPlane &bp)
edm::EDGetTokenT< edm::View< reco::Track > > tk_token
const GeomDet * idToDet(DetId) const override
Definition: CSCGeometry.cc:91

◆ getFromCLHEP()

FreeTrajectoryState CSCEfficiency::getFromCLHEP ( const CLHEP::Hep3Vector &  p3,
const CLHEP::Hep3Vector &  r3,
int  charge,
const AlgebraicSymMatrix66 cov,
const MagneticField field 
)
private

◆ getFromFTS()

void CSCEfficiency::getFromFTS ( const FreeTrajectoryState fts,
CLHEP::Hep3Vector &  p3,
CLHEP::Hep3Vector &  r3,
int &  charge,
AlgebraicSymMatrix66 cov 
)
private

Definition at line 1455 of file CSCEfficiency.cc.

References FreeTrajectoryState::cartesianError(), ALCARECOTkAlJpsiMuMu_cff::charge, FreeTrajectoryState::charge(), FreeTrajectoryState::hasError(), CartesianTrajectoryError::matrix(), FreeTrajectoryState::momentum(), chargedHadronTrackResolutionFilter_cfi::p3, FreeTrajectoryState::position(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

1459  {
1460  GlobalVector p3GV = fts.momentum();
1461  GlobalPoint r3GP = fts.position();
1462 
1463  p3.set(p3GV.x(), p3GV.y(), p3GV.z());
1464  r3.set(r3GP.x(), r3GP.y(), r3GP.z());
1465 
1466  charge = fts.charge();
1467  cov = fts.hasError() ? fts.cartesianError().matrix() : AlgebraicSymMatrix66();
1468 }
CartesianTrajectoryError cartesianError() const
T z() const
Definition: PV3DBase.h:61
GlobalPoint position() const
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
TrackCharge charge() const
GlobalVector momentum() const
ROOT::Math::SMatrix< double, 6, 6, ROOT::Math::MatRepSym< double, 6 > > AlgebraicSymMatrix66
const AlgebraicSymMatrix66 & matrix() const

◆ inSensitiveLocalRegion()

bool CSCEfficiency::inSensitiveLocalRegion ( double  xLocal,
double  yLocal,
int  station,
int  ring 
)
private

Definition at line 545 of file CSCEfficiency.cc.

References funct::abs(), relativeConstraints::ring, and relativeConstraints::station.

545  {
546  //---- Good region means sensitive area of a chamber. "Local" stands for the local system
547  bool pass = false;
548  std::vector<double> chamberBounds(3); // the sensitive area
549  float y_center = 99999.;
550  //---- hardcoded... not good
551  if (station > 1 && station < 5) {
552  if (2 == ring) {
553  chamberBounds[0] = 66.46 / 2; // (+-)x1 shorter
554  chamberBounds[1] = 127.15 / 2; // (+-)x2 longer
555  chamberBounds[2] = 323.06 / 2;
556  y_center = -0.95;
557  } else {
558  if (2 == station) {
559  chamberBounds[0] = 54.00 / 2; // (+-)x1 shorter
560  chamberBounds[1] = 125.71 / 2; // (+-)x2 longer
561  chamberBounds[2] = 189.66 / 2;
562  y_center = -0.955;
563  } else if (3 == station) {
564  chamberBounds[0] = 61.40 / 2; // (+-)x1 shorter
565  chamberBounds[1] = 125.71 / 2; // (+-)x2 longer
566  chamberBounds[2] = 169.70 / 2;
567  y_center = -0.97;
568  } else if (4 == station) {
569  chamberBounds[0] = 69.01 / 2; // (+-)x1 shorter
570  chamberBounds[1] = 125.65 / 2; // (+-)x2 longer
571  chamberBounds[2] = 149.42 / 2;
572  y_center = -0.94;
573  }
574  }
575  } else if (1 == station) {
576  if (3 == ring) {
577  chamberBounds[0] = 63.40 / 2; // (+-)x1 shorter
578  chamberBounds[1] = 92.10 / 2; // (+-)x2 longer
579  chamberBounds[2] = 164.16 / 2;
580  y_center = -1.075;
581  } else if (2 == ring) {
582  chamberBounds[0] = 51.00 / 2; // (+-)x1 shorter
583  chamberBounds[1] = 83.74 / 2; // (+-)x2 longer
584  chamberBounds[2] = 174.49 / 2;
585  y_center = -0.96;
586  } else { // to be investigated
587  chamberBounds[0] = 30. / 2; //40./2; // (+-)x1 shorter
588  chamberBounds[1] = 60. / 2; //100./2; // (+-)x2 longer
589  chamberBounds[2] = 160. / 2; //142./2;
590  y_center = 0.;
591  }
592  }
593  double yUp = chamberBounds[2] + y_center;
594  double yDown = -chamberBounds[2] + y_center;
595  double xBound1Shifted = chamberBounds[0] - distanceFromDeadZone; //
596  double xBound2Shifted = chamberBounds[1] - distanceFromDeadZone; //
597  double lineSlope = (yUp - yDown) / (xBound2Shifted - xBound1Shifted);
598  double lineConst = yUp - lineSlope * xBound2Shifted;
599  double yBoundary = lineSlope * abs(xLocal) + lineConst;
600  pass = checkLocal(yLocal, yBoundary, station, ring);
601  return pass;
602 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double distanceFromDeadZone
bool checkLocal(double yLocal, double yBoundary, int station, int ring)

◆ linearExtrapolation()

void CSCEfficiency::linearExtrapolation ( GlobalPoint  initialPosition,
GlobalVector  initialDirection,
float  zSurface,
std::vector< float > &  posZY 
)
private

Definition at line 1484 of file CSCEfficiency.cc.

References PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

1487  {
1488  double paramLine = lineParameter(initialPosition.z(), zSurface, initialDirection.z());
1489  double xPosition = extrapolate1D(initialPosition.x(), initialDirection.x(), paramLine);
1490  double yPosition = extrapolate1D(initialPosition.y(), initialDirection.y(), paramLine);
1491  posZY.clear();
1492  posZY.push_back(xPosition);
1493  posZY.push_back(yPosition);
1494 }
T z() const
Definition: PV3DBase.h:61
double lineParameter(double initZPosition, double destZPosition, double initZDirection)
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
double extrapolate1D(double initPosition, double initDirection, double parameterOfTheLine)

◆ lineParameter()

double CSCEfficiency::lineParameter ( double  initZPosition,
double  destZPosition,
double  initZDirection 
)
private

Definition at line 1501 of file CSCEfficiency.cc.

1501  {
1502  double paramLine = (destZPosition - initZPosition) / initZDirection;
1503  return paramLine;
1504 }

◆ propagate()

TrajectoryStateOnSurface CSCEfficiency::propagate ( FreeTrajectoryState ftsStart,
const BoundPlane bp 
)
private

Definition at line 1532 of file CSCEfficiency.cc.

References TrackCandidateProducer_cfi::propagator, HLT_2023v12_cff::propagatorName, and AlCaHLTBitMon_QueryRunRegistry::string.

1532  {
1533  TrajectoryStateOnSurface tSOSDest;
1535  /*
1536 // it would work if cosmic muons had properly assigned direction...
1537  bool dzPositive = bpDest.position().z() - ftsStart.position().z() > 0 ? true : false;
1538  //---- Be careful with trigger conditions too
1539  if(!isIPdata){
1540  bool rightDirection = !(alongZ^dzPositive);
1541  if(rightDirection){
1542  if(printalot) std::cout<<" propagate along momentum"<<std::endl;
1543  propagatorName = "SteppingHelixPropagatorAlong";
1544  }
1545  else{
1546  if(printalot) std::cout<<" propagate opposite momentum"<<std::endl;
1547  propagatorName = "SteppingHelixPropagatorOpposite";
1548  }
1549  }
1550  else{
1551  if(printalot) std::cout<<" propagate any (momentum)"<<std::endl;
1552  propagatorName = "SteppingHelixPropagatorAny";
1553  }
1554 */
1555  propagatorName = "SteppingHelixPropagatorAny";
1556  tSOSDest = propagator(propagatorName)->propagate(ftsStart, bpDest);
1557  return tSOSDest;
1558 }
const Propagator * propagator(std::string propagatorName) const
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50

◆ propagator()

const Propagator * CSCEfficiency::propagator ( std::string  propagatorName) const
private

Definition at line 1527 of file CSCEfficiency.cc.

References HLT_2023v12_cff::propagatorName.

1527  {
1528  return &*theService->propagator(propagatorName);
1529 }
MuonServiceProxy * theService

◆ recHitSegment_Efficiencies()

bool CSCEfficiency::recHitSegment_Efficiencies ( CSCDetId cscDetId,
const CSCChamber cscChamber,
FreeTrajectoryState ftsChamber 
)
private

Definition at line 1308 of file CSCEfficiency.cc.

References relativeConstraints::chamber, gather_cfg::cout, makeMuonMisalignmentScenario::endcap, PV3DBase< T, PVType, FrameType >::eta(), dqmdumpme::first, FirstCh, CSCLayer::geometry(), CSCChamber::layer(), M_PI, CSCLayerGeometry::nearestStrip(), FreeTrajectoryState::position(), funct::pow(), relativeConstraints::ring, edm::second(), mathSSE::sqrt(), relativeConstraints::station, CSCLayerGeometry::stripAngle(), GeomDet::surface(), GeomDet::toGlobal(), GeomDet::toLocal(), funct::true, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

1310  {
1311  int ec, st, rg, ch, secondRing;
1312  returnTypes(id, ec, st, rg, ch, secondRing);
1313  bool firstCondition, secondCondition;
1314 
1315  std::vector<bool> missingLayers_rh(6);
1316  std::vector<int> usedInSegment(6);
1317  // Rechits
1318  if (printalot)
1319  std::cout << "RecHits eff" << std::endl;
1320  for (int iLayer = 0; iLayer < 6; ++iLayer) {
1321  firstCondition = !allRechits[ec][st][rg][ch][iLayer].empty() ? true : false;
1322  secondCondition = false;
1323  int thisRing = rg;
1324  if (secondRing > -1) {
1325  secondCondition = !allRechits[ec][st][secondRing][ch][iLayer].empty() ? true : false;
1326  if (secondCondition) {
1327  thisRing = secondRing;
1328  }
1329  }
1330  if (firstCondition || secondCondition) {
1331  ChHist[ec][st][rg][ch].EfficientRechits_good->Fill(iLayer + 1);
1332  for (size_t iR = 0; iR < allRechits[ec][st][thisRing][ch][iLayer].size(); ++iR) {
1333  if (allRechits[ec][st][thisRing][ch][iLayer][iR].second) {
1334  usedInSegment[iLayer] = 1;
1335  break;
1336  } else {
1337  usedInSegment[iLayer] = -1;
1338  }
1339  }
1340  } else {
1341  missingLayers_rh[iLayer] = true;
1342  if (printalot) {
1343  std::cout << "missing rechits ";
1344  printf("\t\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
1345  id.endcap(),
1346  id.station(),
1347  id.ring(),
1348  id.chamber(),
1349  iLayer + 1);
1350  }
1351  }
1352  }
1353  GlobalVector globalDir;
1354  GlobalPoint globalPos;
1355  // Segments
1356  firstCondition = !allSegments[ec][st][rg][ch].empty() ? true : false;
1357  secondCondition = false;
1358  int secondSize = 0;
1359  int thisRing = rg;
1360  if (secondRing > -1) {
1361  secondCondition = !allSegments[ec][st][secondRing][ch].empty() ? true : false;
1362  secondSize = allSegments[ec][st][secondRing][ch].size();
1363  if (secondCondition) {
1364  thisRing = secondRing;
1365  }
1366  }
1367  if (firstCondition || secondCondition) {
1368  if (printalot)
1369  std::cout << "segments - start ec = " << ec << " st = " << st << " rg = " << rg << " ch = " << ch << std::endl;
1370  StHist[ec][st].EfficientSegments_XY->Fill(ftsChamber.position().x(), ftsChamber.position().y());
1371  if (1 == allSegments[ec][st][rg][ch].size() + secondSize) {
1372  globalDir = cscChamber->toGlobal(allSegments[ec][st][thisRing][ch][0].second);
1373  globalPos = cscChamber->toGlobal(allSegments[ec][st][thisRing][ch][0].first);
1374  StHist[ec][st].EfficientSegments_eta->Fill(fabs(ftsChamber.position().eta()));
1375  double residual =
1376  sqrt(pow(ftsChamber.position().x() - globalPos.x(), 2) + pow(ftsChamber.position().y() - globalPos.y(), 2) +
1377  pow(ftsChamber.position().z() - globalPos.z(), 2));
1378  if (printalot)
1379  std::cout << " fts.position() = " << ftsChamber.position() << " segPos = " << globalPos << " res = " << residual
1380  << std::endl;
1381  StHist[ec][st].ResidualSegments->Fill(residual);
1382  }
1383  for (int iLayer = 0; iLayer < 6; ++iLayer) {
1384  if (printalot)
1385  std::cout << " iLayer = " << iLayer << " usedInSegment = " << usedInSegment[iLayer] << std::endl;
1386  if (0 != usedInSegment[iLayer]) {
1387  if (-1 == usedInSegment[iLayer]) {
1388  ChHist[ec][st][rg][ch].InefficientSingleHits->Fill(iLayer + 1);
1389  }
1390  ChHist[ec][st][rg][ch].AllSingleHits->Fill(iLayer + 1);
1391  }
1392  firstCondition = !allRechits[ec][st][rg][ch][iLayer].empty() ? true : false;
1393  secondCondition = false;
1394  if (secondRing > -1) {
1395  secondCondition = !allRechits[ec][st][secondRing][ch][iLayer].empty() ? true : false;
1396  }
1397  float stripAngle = 99999.;
1398  std::vector<float> posXY(2);
1399  bool oneSegment = false;
1400  if (1 == allSegments[ec][st][rg][ch].size() + secondSize) {
1401  oneSegment = true;
1402  const BoundPlane bp = cscChamber->layer(iLayer + 1)->surface();
1403  linearExtrapolation(globalPos, globalDir, bp.position().z(), posXY);
1404  GlobalPoint gp_extrapol(posXY.at(0), posXY.at(1), bp.position().z());
1405  const LocalPoint lp_extrapol = cscChamber->layer(iLayer + 1)->toLocal(gp_extrapol);
1406  posXY.at(0) = lp_extrapol.x();
1407  posXY.at(1) = lp_extrapol.y();
1408  int nearestStrip = cscChamber->layer(iLayer + 1)->geometry()->nearestStrip(lp_extrapol);
1409  stripAngle = cscChamber->layer(iLayer + 1)->geometry()->stripAngle(nearestStrip) - M_PI / 2.;
1410  }
1411  if (firstCondition || secondCondition) {
1412  ChHist[ec][st][rg][ch].EfficientRechits_inSegment->Fill(iLayer + 1);
1413  if (oneSegment) {
1414  ChHist[ec][st][rg][ch].Y_EfficientRecHits_inSegment[iLayer]->Fill(posXY.at(1));
1415  ChHist[ec][st][rg][ch].Phi_EfficientRecHits_inSegment[iLayer]->Fill(stripAngle);
1416  }
1417  } else {
1418  if (oneSegment) {
1419  ChHist[ec][st][rg][ch].Y_InefficientRecHits_inSegment[iLayer]->Fill(posXY.at(1));
1420  ChHist[ec][st][rg][ch].Phi_InefficientRecHits_inSegment[iLayer]->Fill(stripAngle);
1421  }
1422  }
1423  }
1424  } else {
1425  StHist[ec][st].InefficientSegments_XY->Fill(ftsChamber.position().x(), ftsChamber.position().y());
1426  if (printalot) {
1427  std::cout << "missing segment " << std::endl;
1428  printf("\t\tendcap/station/ring/chamber: %i/%i/%i/%i\n", id.endcap(), id.station(), id.ring(), id.chamber());
1429  std::cout << " fts.position() = " << ftsChamber.position() << std::endl;
1430  }
1431  }
1432  // Normalization
1433  ChHist[ec][st][rg][ch].EfficientRechits_good->Fill(8);
1434  if (allSegments[ec][st][rg][ch].size() + secondSize < 2) {
1435  StHist[ec][st].AllSegments_eta->Fill(fabs(ftsChamber.position().eta()));
1436  }
1437  ChHist[ec][st][rg][id.chamber() - FirstCh].EfficientRechits_inSegment->Fill(9);
1438 
1439  return true;
1440 }
size
Write out results.
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to the given id.
Definition: CSCChamber.cc:30
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:58
int nearestStrip(const LocalPoint &lp) const
T z() const
Definition: PV3DBase.h:61
std::vector< TH1F * > Y_InefficientRecHits_inSegment
T eta() const
Definition: PV3DBase.h:73
float stripAngle(int strip) const
void returnTypes(CSCDetId &id, int &ec, int &st, int &rg, int &ch, int &secondRing)
const CSCLayerGeometry * geometry() const
Definition: CSCLayer.h:44
GlobalPoint position() const
U second(std::pair< T, U > const &p)
std::vector< TH1F * > Phi_InefficientRecHits_inSegment
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
std::vector< TH1F * > Y_EfficientRecHits_inSegment
T sqrt(T t)
Definition: SSEVec.h:19
struct CSCEfficiency::ChamberHistos ChHist[2][4][3][36 - 1+1]
void linearExtrapolation(GlobalPoint initialPosition, GlobalVector initialDirection, float zSurface, std::vector< float > &posZY)
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
std::vector< TH1F * > Phi_EfficientRecHits_inSegment
#define M_PI
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
#define FirstCh
Definition: CSCEfficiency.h:81
std::vector< std::pair< LocalPoint, LocalVector > > allSegments[2][4][4][(36 - 1+1)]
struct CSCEfficiency::StationHistos StHist[2][4]
std::vector< std::pair< LocalPoint, bool > > allRechits[2][4][4][(36 - 1+1)][6]
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29

◆ recSimHitEfficiency()

bool CSCEfficiency::recSimHitEfficiency ( CSCDetId id,
FreeTrajectoryState ftsChamber 
)
private

Definition at line 1264 of file CSCEfficiency.cc.

References relativeConstraints::empty, edm::second(), and funct::true.

1264  {
1265  int ec, st, rg, ch, secondRing;
1266  returnTypes(id, ec, st, rg, ch, secondRing);
1267  bool firstCondition, secondCondition;
1268  for (int iLayer = 0; iLayer < 6; iLayer++) {
1269  firstCondition = !allSimhits[ec][st][rg][ch][iLayer].empty() ? true : false;
1270  secondCondition = false;
1271  int thisRing = rg;
1272  if (secondRing > -1) {
1273  secondCondition = !allSimhits[ec][st][secondRing][ch][iLayer].empty() ? true : false;
1274  if (secondCondition) {
1275  thisRing = secondRing;
1276  }
1277  }
1278  if (firstCondition || secondCondition) {
1279  for (size_t iSH = 0; iSH < allSimhits[ec][st][thisRing][ch][iLayer].size(); ++iSH) {
1280  if (13 == fabs(allSimhits[ec][st][thisRing][ch][iLayer][iSH].second)) {
1281  ChHist[ec][st][rg][ch].SimSimhits->Fill(iLayer + 1);
1282  if (!allRechits[ec][st][thisRing][ch][iLayer].empty()) {
1283  ChHist[ec][st][rg][ch].SimRechits->Fill(iLayer + 1);
1284  }
1285  break;
1286  }
1287  }
1288  //---- Next is not too usefull...
1289  /*
1290  for(unsigned int iSimHits=0;
1291  iSimHits<allSimhits[id.endcap()-1][id.station()-1][id.ring()-1][id.chamber()-FirstCh][iLayer].size();
1292  iSimHits++){
1293  ChHist[ec][st][rg][id.chamber()-FirstCh].SimSimhits_each->Fill(iLayer+1);
1294  }
1295  for(unsigned int iRecHits=0;
1296  iRecHits<allRechits[id.endcap()-1][id.station()-1][id.ring()-1][id.chamber()-FirstCh][iLayer].size();
1297  iRecHits++){
1298  ChHist[ec][st][rg][id.chamber()-FirstCh].SimRechits_each->Fill(iLayer+1);
1299  }
1300  */
1301  //
1302  }
1303  }
1304  return true;
1305 }
std::vector< std::pair< LocalPoint, int > > allSimhits[2][4][4][(36 - 1+1)][6]
void returnTypes(CSCDetId &id, int &ec, int &st, int &rg, int &ch, int &secondRing)
U second(std::pair< T, U > const &p)
struct CSCEfficiency::ChamberHistos ChHist[2][4][3][36 - 1+1]
std::vector< std::pair< LocalPoint, bool > > allRechits[2][4][4][(36 - 1+1)][6]

◆ returnTypes()

void CSCEfficiency::returnTypes ( CSCDetId id,
int &  ec,
int &  st,
int &  rg,
int &  ch,
int &  secondRing 
)
private

Definition at line 1442 of file CSCEfficiency.cc.

References FirstCh, relativeConstraints::ring, and relativeConstraints::station.

1442  {
1443  ec = id.endcap() - 1;
1444  st = id.station() - 1;
1445  rg = id.ring() - 1;
1446  secondRing = -1;
1447  if (1 == id.station() && (4 == id.ring() || 1 == id.ring())) {
1448  rg = 0;
1449  secondRing = 3;
1450  }
1451  ch = id.chamber() - FirstCh;
1452 }
#define FirstCh
Definition: CSCEfficiency.h:81

◆ ringCandidates()

void CSCEfficiency::ringCandidates ( int  station,
float  absEta,
std::map< std::string, bool > &  chamberTypes 
)
private

Definition at line 970 of file CSCEfficiency.cc.

References JetMETHLTOfflineSource_cfi::feta, and relativeConstraints::station.

970  {
971  // yeah, hardcoded again...
972  switch (station) {
973  case 1:
974  if (feta > 0.85 && feta < 1.18) { //ME13
975  chamberTypes["ME13"] = true;
976  }
977  if (feta > 1.18 && feta < 1.7) { //ME12
978  chamberTypes["ME12"] = true;
979  }
980  if (feta > 1.5 && feta < 2.45) { //ME11
981  chamberTypes["ME11"] = true;
982  }
983  break;
984  case 2:
985  if (feta > 0.95 && feta < 1.6) { //ME22
986  chamberTypes["ME22"] = true;
987  }
988  if (feta > 1.55 && feta < 2.45) { //ME21
989  chamberTypes["ME21"] = true;
990  }
991  break;
992  case 3:
993  if (feta > 1.08 && feta < 1.72) { //ME32
994  chamberTypes["ME32"] = true;
995  }
996  if (feta > 1.69 && feta < 2.45) { //ME31
997  chamberTypes["ME31"] = true;
998  }
999  break;
1000  case 4:
1001  if (feta > 1.78 && feta < 2.45) { //ME41
1002  chamberTypes["ME41"] = true;
1003  }
1004  break;
1005  default:
1006  break;
1007  }
1008 }

◆ stripWire_Efficiencies()

bool CSCEfficiency::stripWire_Efficiencies ( CSCDetId cscDetId,
FreeTrajectoryState ftsChamber 
)
private

Definition at line 1174 of file CSCEfficiency.cc.

References relativeConstraints::chamber, gather_cfg::cout, makeMuonMisalignmentScenario::endcap, FirstCh, FreeTrajectoryState::momentum(), relativeConstraints::ring, relativeConstraints::station, PV3DBase< T, PVType, FrameType >::theta(), and funct::true.

1174  {
1175  int ec, st, rg, ch, secondRing;
1176  returnTypes(id, ec, st, rg, ch, secondRing);
1177 
1178  bool firstCondition, secondCondition;
1179  int missingLayers_s = 0;
1180  int missingLayers_wg = 0;
1181  for (int iLayer = 0; iLayer < 6; iLayer++) {
1182  //----Strips
1183  if (printalot) {
1184  printf("\t%i swEff: \tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
1185  iLayer + 1,
1186  id.endcap(),
1187  id.station(),
1188  id.ring(),
1189  id.chamber(),
1190  iLayer + 1);
1191  std::cout << " size S = "
1192  << allStrips[id.endcap() - 1][id.station() - 1][id.ring() - 1][id.chamber() - FirstCh][iLayer].size()
1193  << "size W = "
1194  << allWG[id.endcap() - 1][id.station() - 1][id.ring() - 1][id.chamber() - FirstCh][iLayer].size()
1195  << std::endl;
1196  }
1197  firstCondition = !allStrips[ec][st][rg][ch][iLayer].empty() ? true : false;
1198  //allSegments[ec][st][rg][ch].size() ? true : false;
1199  secondCondition = false;
1200  if (secondRing > -1) {
1201  secondCondition = !allStrips[ec][st][secondRing][ch][iLayer].empty() ? true : false;
1202  }
1203  if (firstCondition || secondCondition) {
1204  ChHist[ec][st][rg][ch].EfficientStrips->Fill(iLayer + 1);
1205  } else {
1206  if (printalot) {
1207  std::cout << "missing strips ";
1208  printf("\t\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
1209  id.endcap(),
1210  id.station(),
1211  id.ring(),
1212  id.chamber(),
1213  iLayer + 1);
1214  }
1215  }
1216  // Wires
1217  firstCondition = !allWG[ec][st][rg][ch][iLayer].empty() ? true : false;
1218  secondCondition = false;
1219  if (secondRing > -1) {
1220  secondCondition = !allWG[ec][st][secondRing][ch][iLayer].empty() ? true : false;
1221  }
1222  if (firstCondition || secondCondition) {
1223  ChHist[ec][st][rg][ch].EfficientWireGroups->Fill(iLayer + 1);
1224  } else {
1225  if (printalot) {
1226  std::cout << "missing wires ";
1227  printf("\t\tendcap/station/ring/chamber/layer: %i/%i/%i/%i/%i\n",
1228  id.endcap(),
1229  id.station(),
1230  id.ring(),
1231  id.chamber(),
1232  iLayer + 1);
1233  }
1234  }
1235  }
1236  // Normalization
1237  if (6 != missingLayers_s) {
1238  ChHist[ec][st][rg][ch].EfficientStrips->Fill(8);
1239  }
1240  if (6 != missingLayers_wg) {
1241  ChHist[ec][st][rg][ch].EfficientWireGroups->Fill(8);
1242  }
1243  ChHist[ec][st][rg][ch].EfficientStrips->Fill(9);
1244  ChHist[ec][st][rg][ch].EfficientWireGroups->Fill(9);
1245  //
1246  ChHist[ec][st][rg][ch].StripWiresCorrelations->Fill(1);
1247  if (missingLayers_s != missingLayers_wg) {
1248  ChHist[ec][st][rg][ch].StripWiresCorrelations->Fill(2);
1249  if (6 == missingLayers_wg) {
1250  ChHist[ec][st][rg][ch].StripWiresCorrelations->Fill(3);
1251  ChHist[ec][st][rg][ch].NoWires_momTheta->Fill(ftsChamber.momentum().theta());
1252  }
1253  if (6 == missingLayers_s) {
1254  ChHist[ec][st][rg][ch].StripWiresCorrelations->Fill(4);
1255  ChHist[ec][st][rg][ch].NoStrips_momPhi->Fill(ftsChamber.momentum().theta());
1256  }
1257  } else if (6 == missingLayers_s) {
1258  ChHist[ec][st][rg][ch].StripWiresCorrelations->Fill(5);
1259  }
1260 
1261  return true;
1262 }
void returnTypes(CSCDetId &id, int &ec, int &st, int &rg, int &ch, int &secondRing)
GlobalVector momentum() const
struct CSCEfficiency::ChamberHistos ChHist[2][4][3][36 - 1+1]
std::vector< std::pair< std::pair< int, float >, int > > allWG[2][4][4][(36 - 1+1)][6]
#define FirstCh
Definition: CSCEfficiency.h:81
Geom::Theta< T > theta() const
Definition: PV3DBase.h:72
std::vector< std::pair< int, float > > allStrips[2][4][4][(36 - 1+1)][6]

Member Data Documentation

◆ al_token

edm::EDGetTokenT<CSCALCTDigiCollection> CSCEfficiency::al_token
private

Definition at line 115 of file CSCEfficiency.h.

◆ ALCTPerEvent

TH1F* CSCEfficiency::ALCTPerEvent
private

Definition at line 253 of file CSCEfficiency.h.

◆ allALCT

bool CSCEfficiency::allALCT[2][4][4][(36 - 1+1)]
private

Definition at line 170 of file CSCEfficiency.h.

◆ allCLCT

bool CSCEfficiency::allCLCT[2][4][4][(36 - 1+1)]
private

Definition at line 169 of file CSCEfficiency.h.

◆ allCorrLCT

bool CSCEfficiency::allCorrLCT[2][4][4][(36 - 1+1)]
private

Definition at line 171 of file CSCEfficiency.h.

◆ allRechits

std::vector<std::pair<LocalPoint, bool> > CSCEfficiency::allRechits[2][4][4][(36 - 1+1)][6]
private

Definition at line 185 of file CSCEfficiency.h.

◆ allSegments

std::vector<std::pair<LocalPoint, LocalVector> > CSCEfficiency::allSegments[2][4][4][(36 - 1+1)]
private

Definition at line 188 of file CSCEfficiency.h.

◆ allSimhits

std::vector<std::pair<LocalPoint, int> > CSCEfficiency::allSimhits[2][4][4][(36 - 1+1)][6]
private

Definition at line 181 of file CSCEfficiency.h.

◆ allStrips

std::vector<std::pair<int, float> > CSCEfficiency::allStrips[2][4][4][(36 - 1+1)][6]
private

Definition at line 174 of file CSCEfficiency.h.

◆ allWG

std::vector<std::pair<std::pair<int, float>, int> > CSCEfficiency::allWG[2][4][4][(36 - 1+1)][6]
private

Definition at line 177 of file CSCEfficiency.h.

◆ alongZ

bool CSCEfficiency::alongZ
private

Definition at line 163 of file CSCEfficiency.h.

◆ andOr

bool CSCEfficiency::andOr
private

Definition at line 150 of file CSCEfficiency.h.

◆ applyIPangleCuts

bool CSCEfficiency::applyIPangleCuts
private

Definition at line 141 of file CSCEfficiency.h.

◆ ChHist

struct CSCEfficiency::ChamberHistos CSCEfficiency::ChHist[2][4][3][ 36 - 1 + 1]
private

◆ cl_token

edm::EDGetTokenT<CSCCLCTDigiCollection> CSCEfficiency::cl_token
private

Definition at line 116 of file CSCEfficiency.h.

◆ CLCTPerEvent

TH1F* CSCEfficiency::CLCTPerEvent
private

Definition at line 254 of file CSCEfficiency.h.

◆ co_token

edm::EDGetTokenT<CSCCorrelatedLCTDigiCollection> CSCEfficiency::co_token
private

Definition at line 117 of file CSCEfficiency.h.

◆ DataFlow

TH1F* CSCEfficiency::DataFlow
private

Definition at line 250 of file CSCEfficiency.h.

◆ distanceFromDeadZone

double CSCEfficiency::distanceFromDeadZone
private

Definition at line 135 of file CSCEfficiency.h.

◆ emptyChambers

bool CSCEfficiency::emptyChambers[2][4][4][(36 - 1+1)]
private

Definition at line 191 of file CSCEfficiency.h.

◆ geomToken_

edm::ESGetToken<CSCGeometry, MuonGeometryRecord> CSCEfficiency::geomToken_
private

Definition at line 126 of file CSCEfficiency.h.

◆ getAbsoluteEfficiency

bool CSCEfficiency::getAbsoluteEfficiency
private

Definition at line 133 of file CSCEfficiency.h.

◆ ht_token

edm::EDGetTokenT<edm::TriggerResults> CSCEfficiency::ht_token
private

Definition at line 124 of file CSCEfficiency.h.

◆ isBeamdata

bool CSCEfficiency::isBeamdata
private

Definition at line 132 of file CSCEfficiency.h.

◆ isData

bool CSCEfficiency::isData
private

Definition at line 130 of file CSCEfficiency.h.

◆ isIPdata

bool CSCEfficiency::isIPdata
private

Definition at line 131 of file CSCEfficiency.h.

◆ local_DX_DZ_Max

double CSCEfficiency::local_DX_DZ_Max
private

Definition at line 144 of file CSCEfficiency.h.

◆ local_DY_DZ_Max

double CSCEfficiency::local_DY_DZ_Max
private

Definition at line 142 of file CSCEfficiency.h.

◆ local_DY_DZ_Min

double CSCEfficiency::local_DY_DZ_Min
private

Definition at line 143 of file CSCEfficiency.h.

◆ magField

bool CSCEfficiency::magField
private

Definition at line 161 of file CSCEfficiency.h.

◆ maxNormChi2

double CSCEfficiency::maxNormChi2
private

Definition at line 138 of file CSCEfficiency.h.

◆ maxP

double CSCEfficiency::maxP
private

Definition at line 137 of file CSCEfficiency.h.

◆ minP

double CSCEfficiency::minP
private

Definition at line 136 of file CSCEfficiency.h.

◆ minTrackHits

unsigned int CSCEfficiency::minTrackHits
private

Definition at line 139 of file CSCEfficiency.h.

◆ myTriggers

std::vector<std::string> CSCEfficiency::myTriggers
private

Definition at line 148 of file CSCEfficiency.h.

◆ nEventsAnalyzed

int CSCEfficiency::nEventsAnalyzed
private

Definition at line 159 of file CSCEfficiency.h.

◆ passTheEvent

bool CSCEfficiency::passTheEvent
private

Definition at line 165 of file CSCEfficiency.h.

◆ pointToTriggers

std::vector<int> CSCEfficiency::pointToTriggers
private

Definition at line 149 of file CSCEfficiency.h.

◆ printalot

bool CSCEfficiency::printalot
private

Definition at line 157 of file CSCEfficiency.h.

◆ printout_NEvents

unsigned int CSCEfficiency::printout_NEvents
private

Definition at line 129 of file CSCEfficiency.h.

◆ recHitsPerEvent

TH1F* CSCEfficiency::recHitsPerEvent
private

Definition at line 255 of file CSCEfficiency.h.

◆ rh_token

edm::EDGetTokenT<CSCRecHit2DCollection> CSCEfficiency::rh_token
private

Definition at line 118 of file CSCEfficiency.h.

◆ rootFileName

std::string CSCEfficiency::rootFileName
private

Definition at line 109 of file CSCEfficiency.h.

◆ sd_token

edm::EDGetTokenT<CSCStripDigiCollection> CSCEfficiency::sd_token
private

Definition at line 114 of file CSCEfficiency.h.

◆ se_token

edm::EDGetTokenT<CSCSegmentCollection> CSCEfficiency::se_token
private

Definition at line 119 of file CSCEfficiency.h.

◆ segmentsPerEvent

TH1F* CSCEfficiency::segmentsPerEvent
private

Definition at line 256 of file CSCEfficiency.h.

◆ sh_token

edm::EDGetTokenT<edm::PSimHitContainer> CSCEfficiency::sh_token
private

Definition at line 122 of file CSCEfficiency.h.

◆ StHist

struct CSCEfficiency::StationHistos CSCEfficiency::StHist[2][4]
private

◆ theFile

TFile* CSCEfficiency::theFile
private

Definition at line 155 of file CSCEfficiency.h.

◆ theService

MuonServiceProxy* CSCEfficiency::theService
private

Definition at line 153 of file CSCEfficiency.h.

◆ tk_token

edm::EDGetTokenT<edm::View<reco::Track> > CSCEfficiency::tk_token
private

Definition at line 121 of file CSCEfficiency.h.

◆ TriggersFired

TH1F* CSCEfficiency::TriggersFired
private

Definition at line 251 of file CSCEfficiency.h.

◆ useDigis

bool CSCEfficiency::useDigis
private

Definition at line 134 of file CSCEfficiency.h.

◆ useTrigger

bool CSCEfficiency::useTrigger
private

Definition at line 147 of file CSCEfficiency.h.

◆ wd_token

edm::EDGetTokenT<CSCWireDigiCollection> CSCEfficiency::wd_token
private

Definition at line 113 of file CSCEfficiency.h.