CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
CSCOfflineMonitor Class Reference

#include <CSCOfflineMonitor.h>

Inheritance diagram for CSCOfflineMonitor:
DQMEDAnalyzer edm::stream::EDAnalyzer< edm::RunSummaryCache< dqmDetails::NoCache >, edm::LuminosityBlockSummaryCache< dqmDetails::NoCache > > edm::stream::EDAnalyzerBase edm::EDConsumerBase

Public Types

enum  AxisType { X =1, Y =2, Z =3 }
 
enum  LabelType { SMALL, EXTENDED }
 
- Public Types inherited from edm::stream::EDAnalyzer< edm::RunSummaryCache< dqmDetails::NoCache >, edm::LuminosityBlockSummaryCache< dqmDetails::NoCache > >
typedef CacheContexts< T...> CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T...> HasAbility
 
typedef
CacheTypes::LuminosityBlockCache 
LuminosityBlockCache
 
typedef
LuminosityBlockContextT
< LuminosityBlockCache,
RunCache, GlobalCache
LuminosityBlockContext
 
typedef
CacheTypes::LuminosityBlockSummaryCache 
LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache,
GlobalCache
RunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDAnalyzerBase
typedef EDAnalyzerAdaptorBase ModuleType
 

Public Member Functions

 CSCOfflineMonitor (const edm::ParameterSet &pset)
 
virtual ~CSCOfflineMonitor ()
 
- Public Member Functions inherited from DQMEDAnalyzer
virtual void beginRun (edm::Run const &, edm::EventSetup const &) final
 
virtual void beginStream (edm::StreamID id) final
 
virtual void dqmBeginRun (edm::Run const &, edm::EventSetup const &)
 
 DQMEDAnalyzer (void)
 
virtual void endLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &, dqmDetails::NoCache *) const final
 
virtual void endRunSummary (edm::Run const &, edm::EventSetup const &, dqmDetails::NoCache *) const final
 
uint32_t streamId () const
 
- Public Member Functions inherited from edm::stream::EDAnalyzer< edm::RunSummaryCache< dqmDetails::NoCache >, edm::LuminosityBlockSummaryCache< dqmDetails::NoCache > >
 EDAnalyzer ()=default
 
- Public Member Functions inherited from edm::stream::EDAnalyzerBase
 EDAnalyzerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDAnalyzerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
ProductHolderIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductHolderIndexAndSkipBit > &) const
 
std::vector
< ProductHolderIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesDependentUpon (const std::string &iProcessName, std::vector< const char * > &oModuleLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
bool registeredToConsume (ProductHolderIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductHolderIndexHelper const &)
 
virtual ~EDConsumerBase ()
 

Protected Member Functions

void analyze (const edm::Event &event, const edm::EventSetup &eventSetup)
 
void bookHistograms (DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
 
- Protected Member Functions inherited from edm::stream::EDAnalyzerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
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 ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
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)
 

Private Member Functions

void applyCSClabels (MonitorElement *meHisto, LabelType t, AxisType a)
 
int chamberSerial (CSCDetId id)
 
void doBXMonitor (edm::Handle< CSCALCTDigiCollection > alcts, edm::Handle< CSCCLCTDigiCollection > clcts, const edm::Event &event, const edm::EventSetup &eventSetup)
 
void doEfficiencies (edm::Handle< CSCWireDigiCollection > wires, edm::Handle< CSCStripDigiCollection > strips, edm::Handle< CSCRecHit2DCollection > recHits, edm::Handle< CSCSegmentCollection > cscSegments, edm::ESHandle< CSCGeometry > cscGeom)
 
void doOccupancies (edm::Handle< CSCStripDigiCollection > strips, edm::Handle< CSCWireDigiCollection > wires, edm::Handle< CSCRecHit2DCollection > recHits, edm::Handle< CSCSegmentCollection > cscSegments, edm::Handle< CSCCLCTDigiCollection > clcts)
 
void doPedestalNoise (edm::Handle< CSCStripDigiCollection > strips, edm::ESHandle< CSCGeometry > cscGeom)
 
void doRecHits (edm::Handle< CSCRecHit2DCollection > recHits, edm::Handle< CSCStripDigiCollection > strips, edm::ESHandle< CSCGeometry > cscGeom)
 
void doResolution (edm::Handle< CSCSegmentCollection > cscSegments, edm::ESHandle< CSCGeometry > cscGeom)
 
void doSegments (edm::Handle< CSCSegmentCollection > cscSegments, edm::ESHandle< CSCGeometry > cscGeom)
 
void doStripDigis (edm::Handle< CSCStripDigiCollection > strips)
 
void doWireDigis (edm::Handle< CSCWireDigiCollection > wires)
 
double extrapolate1D (double initPosition, double initDirection, double parameterOfTheLine)
 
void fillEfficiencyHistos (int bin, int flag)
 
float fitX (const CLHEP::HepMatrix &sp, const CLHEP::HepMatrix &ep)
 
float getSignal (const CSCStripDigiCollection &stripdigis, CSCDetId idRH, int centerStrip)
 
double lineParametrization (double z1Position, double z2Position, double z1Direction)
 
int typeIndex (CSCDetId id, int flag=1)
 
bool withinSensitiveRegion (LocalPoint localPos, const std::array< const float, 4 > &layerBounds, int station, int ring, float shiftFromEdge, float shiftFromDeadZone)
 

Private Attributes

edm::EDGetTokenT
< CSCALCTDigiCollection
al_token
 
edm::EDGetTokenT
< CSCCLCTDigiCollection
cl_token
 
MonitorElementhALCTgetBX
 
MonitorElementhALCTgetBX2Denominator
 
MonitorElementhALCTgetBX2DNumerator
 
MonitorElementhALCTgetBXSerial
 
MonitorElementhALCTMatch
 
MonitorElementhALCTMatch2Denominator
 
MonitorElementhALCTMatch2DNumerator
 
MonitorElementhALCTMatchSerial
 
MonitorElementhCLCTL1A
 
MonitorElementhCLCTL1A2Denominator
 
MonitorElementhCLCTL1A2DNumerator
 
MonitorElementhCLCTL1ASerial
 
MonitorElementhCSCOccupancy
 
MonitorElementhEffDenominator
 
MonitorElementhORecHits
 
MonitorElementhORecHitsSerial
 
MonitorElementhOSegments
 
MonitorElementhOSegmentsSerial
 
MonitorElementhOStrips
 
MonitorElementhOStripsAndWiresAndCLCT
 
MonitorElementhOStripSerial
 
MonitorElementhOWires
 
MonitorElementhOWiresAndCLCT
 
MonitorElementhOWireSerial
 
MonitorElementhRHden
 
std::vector< MonitorElement * > hRHGlobal
 
MonitorElementhRHnrechits
 
MonitorElementhRHnum
 
std::vector< MonitorElement * > hRHRatioQ
 
MonitorElementhRHSTE2
 
std::vector< MonitorElement * > hRHsterr
 
std::vector< MonitorElement * > hRHstpos
 
std::vector< MonitorElement * > hRHSumQ
 
std::vector< MonitorElement * > hRHTiming
 
std::vector< MonitorElement * > hRHTimingAnode
 
std::vector< MonitorElement * > hSChiSq
 
MonitorElementhSChiSqAll
 
std::vector< MonitorElement * > hSChiSqProb
 
MonitorElementhSChiSqProbAll
 
MonitorElementhSden
 
MonitorElementhSensitiveAreaEvt
 
MonitorElementhSGlobalPhi
 
MonitorElementhSGlobalTheta
 
std::vector< MonitorElement * > hSnhits
 
MonitorElementhSnhitsAll
 
MonitorElementhSnSegments
 
MonitorElementhSnum
 
std::vector< MonitorElement * > hSResid
 
MonitorElementhSSTE2
 
MonitorElementhSTimeCathode
 
MonitorElementhSTimeCombined
 
MonitorElementhSTimeVsTOF
 
MonitorElementhSTimeVsZ
 
MonitorElementhStripNFired
 
std::vector< MonitorElement * > hStripNumber
 
std::vector< MonitorElement * > hStripPed
 
MonitorElementhStripSTE2
 
MonitorElementhWirenGroupsTotal
 
std::vector< MonitorElement * > hWireNumber
 
MonitorElementhWireSTE2
 
std::vector< MonitorElement * > hWireTBin
 
edm::ParameterSet param
 
edm::EDGetTokenT
< FEDRawDataCollection
rd_token
 
edm::EDGetTokenT
< CSCRecHit2DCollection
rh_token
 
edm::EDGetTokenT
< CSCStripDigiCollection
sd_token
 
edm::EDGetTokenT
< CSCSegmentCollection
se_token
 
edm::EDGetTokenT
< CSCWireDigiCollection
wd_token
 

Additional Inherited Members

- Static Public Member Functions inherited from DQMEDAnalyzer
static std::shared_ptr
< dqmDetails::NoCache
globalBeginLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &, LuminosityBlockContext const *)
 
static std::shared_ptr
< dqmDetails::NoCache
globalBeginRunSummary (edm::Run const &, edm::EventSetup const &, RunContext const *)
 
static void globalEndLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &, LuminosityBlockContext const *, dqmDetails::NoCache *)
 
static void globalEndRunSummary (edm::Run const &, edm::EventSetup const &, RunContext const *, dqmDetails::NoCache *)
 
- Static Public Member Functions inherited from edm::stream::EDAnalyzerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Detailed Description

Simple package for offline CSC DQM based on RecoLocalMuon/CSCValidation: digis, rechits, segments

Andrew Kubik, Northwestern University, Oct 2008

Definition at line 72 of file CSCOfflineMonitor.h.

Member Enumeration Documentation

Enumerator
X 
Y 
Z 

Definition at line 80 of file CSCOfflineMonitor.h.

Enumerator
SMALL 
EXTENDED 

Definition at line 79 of file CSCOfflineMonitor.h.

Constructor & Destructor Documentation

CSCOfflineMonitor::CSCOfflineMonitor ( const edm::ParameterSet pset)

Definition at line 13 of file CSCOfflineMonitor.cc.

References edm::ParameterSet::getParameter().

14 {
15 
16  rd_token = consumes<FEDRawDataCollection>( pset.getParameter<edm::InputTag>("FEDRawDataCollectionTag") );
17  sd_token = consumes<CSCStripDigiCollection>( pset.getParameter<edm::InputTag>("stripDigiTag") );
18  wd_token = consumes<CSCWireDigiCollection>( pset.getParameter<edm::InputTag>("wireDigiTag") );
19  al_token = consumes<CSCALCTDigiCollection>( pset.getParameter<edm::InputTag>("alctDigiTag") );
20  cl_token = consumes<CSCCLCTDigiCollection>( pset.getParameter<edm::InputTag>("clctDigiTag") );
21  rh_token = consumes<CSCRecHit2DCollection>( pset.getParameter<edm::InputTag>("cscRecHitTag") );
22  se_token = consumes<CSCSegmentCollection>( pset.getParameter<edm::InputTag>("cscSegTag") );
23 
24 }
edm::EDGetTokenT< CSCALCTDigiCollection > al_token
T getParameter(std::string const &) const
edm::EDGetTokenT< CSCWireDigiCollection > wd_token
edm::EDGetTokenT< FEDRawDataCollection > rd_token
edm::EDGetTokenT< CSCCLCTDigiCollection > cl_token
edm::EDGetTokenT< CSCSegmentCollection > se_token
edm::EDGetTokenT< CSCStripDigiCollection > sd_token
edm::EDGetTokenT< CSCRecHit2DCollection > rh_token
virtual CSCOfflineMonitor::~CSCOfflineMonitor ( )
inlinevirtual

Definition at line 77 of file CSCOfflineMonitor.h.

77 { };

Member Function Documentation

void CSCOfflineMonitor::analyze ( const edm::Event event,
const edm::EventSetup eventSetup 
)
protectedvirtual

Implements edm::stream::EDAnalyzerBase.

Definition at line 470 of file CSCOfflineMonitor.cc.

References HLT_25ns14e33_v1_cff::cscSegments, edm::EventSetup::get(), HLT_25ns14e33_v3_cff::recHits, and RecoTauPiZeroBuilderPlugins_cfi::strips.

470  {
471 
476  event.getByToken( sd_token, strips );
477  event.getByToken( wd_token, wires );
478  event.getByToken( al_token, alcts );
479  event.getByToken( cl_token, clcts );
480 
481  // Get the CSC Geometry :
483  eventSetup.get<MuonGeometryRecord>().get(cscGeom);
484 
485  // Get the RecHits collection :
487  event.getByToken( rh_token, recHits );
488 
489  // get CSC segment collection
491  event.getByToken( se_token, cscSegments );
492 
493  doOccupancies(strips,wires,recHits,cscSegments,clcts);
494  doStripDigis(strips);
495  doWireDigis(wires);
496  doRecHits(recHits,strips,cscGeom);
497  doSegments(cscSegments,cscGeom);
498  doResolution(cscSegments,cscGeom);
499  doPedestalNoise(strips, cscGeom);
500  doEfficiencies(wires,strips, recHits, cscSegments,cscGeom);
501  doBXMonitor(alcts, clcts, event, eventSetup);
502 }
edm::EDGetTokenT< CSCALCTDigiCollection > al_token
void doResolution(edm::Handle< CSCSegmentCollection > cscSegments, edm::ESHandle< CSCGeometry > cscGeom)
edm::EDGetTokenT< CSCWireDigiCollection > wd_token
edm::EDGetTokenT< CSCCLCTDigiCollection > cl_token
edm::EDGetTokenT< CSCSegmentCollection > se_token
edm::EDGetTokenT< CSCStripDigiCollection > sd_token
void doSegments(edm::Handle< CSCSegmentCollection > cscSegments, edm::ESHandle< CSCGeometry > cscGeom)
void doWireDigis(edm::Handle< CSCWireDigiCollection > wires)
const T & get() const
Definition: EventSetup.h:55
void doBXMonitor(edm::Handle< CSCALCTDigiCollection > alcts, edm::Handle< CSCCLCTDigiCollection > clcts, const edm::Event &event, const edm::EventSetup &eventSetup)
void doStripDigis(edm::Handle< CSCStripDigiCollection > strips)
void doPedestalNoise(edm::Handle< CSCStripDigiCollection > strips, edm::ESHandle< CSCGeometry > cscGeom)
edm::EDGetTokenT< CSCRecHit2DCollection > rh_token
void doEfficiencies(edm::Handle< CSCWireDigiCollection > wires, edm::Handle< CSCStripDigiCollection > strips, edm::Handle< CSCRecHit2DCollection > recHits, edm::Handle< CSCSegmentCollection > cscSegments, edm::ESHandle< CSCGeometry > cscGeom)
void doOccupancies(edm::Handle< CSCStripDigiCollection > strips, edm::Handle< CSCWireDigiCollection > wires, edm::Handle< CSCRecHit2DCollection > recHits, edm::Handle< CSCSegmentCollection > cscSegments, edm::Handle< CSCCLCTDigiCollection > clcts)
void doRecHits(edm::Handle< CSCRecHit2DCollection > recHits, edm::Handle< CSCStripDigiCollection > strips, edm::ESHandle< CSCGeometry > cscGeom)
void CSCOfflineMonitor::applyCSClabels ( MonitorElement meHisto,
LabelType  t,
AxisType  a 
)
private

Definition at line 1800 of file CSCOfflineMonitor.cc.

References NULL, MonitorElement::setAxisTitle(), MonitorElement::setBinLabel(), and SMALL.

1800  {
1801  if (me != NULL)
1802  {
1803  me->setAxisTitle("Chamber #");
1804  if (t == EXTENDED)
1805  {
1806  me->setBinLabel(1,"ME -4/2",a);
1807  me->setBinLabel(2,"ME -4/1",a);
1808  me->setBinLabel(3,"ME -3/2",a);
1809  me->setBinLabel(4,"ME -3/1",a);
1810  me->setBinLabel(5,"ME -2/2",a);
1811  me->setBinLabel(6,"ME -2/1",a);
1812  me->setBinLabel(7,"ME -1/3",a);
1813  me->setBinLabel(8,"ME -1/2",a);
1814  me->setBinLabel(9,"ME -1/1b",a);
1815  me->setBinLabel(10,"ME -1/1a",a);
1816  me->setBinLabel(11,"ME +1/1a",a);
1817  me->setBinLabel(12,"ME +1/1b",a);
1818  me->setBinLabel(13,"ME +1/2",a);
1819  me->setBinLabel(14,"ME +1/3",a);
1820  me->setBinLabel(15,"ME +2/1",a);
1821  me->setBinLabel(16,"ME +2/2",a);
1822  me->setBinLabel(17,"ME +3/1",a);
1823  me->setBinLabel(18,"ME +3/2",a);
1824  me->setBinLabel(19,"ME +4/1",a);
1825  me->setBinLabel(20,"ME +4/2",a);
1826  }
1827  else if (t == SMALL)
1828  {
1829  me->setBinLabel(1,"ME -4/1",a);
1830  me->setBinLabel(2,"ME -3/2",a);
1831  me->setBinLabel(3,"ME -3/1",a);
1832  me->setBinLabel(4,"ME -2/2",a);
1833  me->setBinLabel(5,"ME -2/1",a);
1834  me->setBinLabel(6,"ME -1/3",a);
1835  me->setBinLabel(7,"ME -1/2",a);
1836  me->setBinLabel(8,"ME -1/1b",a);
1837  me->setBinLabel(9,"ME -1/1a",a);
1838  me->setBinLabel(10,"ME +1/1a",a);
1839  me->setBinLabel(11,"ME +1/1b",a);
1840  me->setBinLabel(12,"ME +1/2",a);
1841  me->setBinLabel(13,"ME +1/3",a);
1842  me->setBinLabel(14,"ME +2/1",a);
1843  me->setBinLabel(15,"ME +2/2",a);
1844  me->setBinLabel(16,"ME +3/1",a);
1845  me->setBinLabel(17,"ME +3/2",a);
1846  me->setBinLabel(18,"ME +4/1",a);
1847  }
1848  }
1849 }
#define NULL
Definition: scimark2.h:8
double a
Definition: hdecay.h:121
void CSCOfflineMonitor::bookHistograms ( DQMStore::IBooker ibooker,
edm::Run const &  iRun,
edm::EventSetup const &   
)
overrideprotectedvirtual

Implements DQMEDAnalyzer.

Definition at line 26 of file CSCOfflineMonitor.cc.

References DQMStore::IBooker::book1D(), DQMStore::IBooker::book2D(), DQMStore::IBooker::cd(), MonitorElement::setAxisTitle(), MonitorElement::setBinLabel(), DQMStore::IBooker::setCurrentFolder(), and X.

29 {
30  // occupancies
31  ibooker.cd();
32  ibooker.setCurrentFolder("CSC/CSCOfflineMonitor/Occupancy");
33 
34  hCSCOccupancy = ibooker.book1D("hCSCOccupancy","overall CSC occupancy",13,-0.5,12.5);
35  hCSCOccupancy->setBinLabel(2,"Total Events");
36  hCSCOccupancy->setBinLabel(4,"# Events with Wires");
37  hCSCOccupancy->setBinLabel(6,"# Events with Strips");
38  hCSCOccupancy->setBinLabel(8,"# Events with Wires&Strips");
39  hCSCOccupancy->setBinLabel(10,"# Events with Rechits");
40  hCSCOccupancy->setBinLabel(12,"# Events with Segments");
41  hOWiresAndCLCT = ibooker.book2D("hOWiresAndCLCT","Wire and CLCT Digi Occupancy ",36,0.5,36.5,20,0.5,20.5);
42  hOWires = ibooker.book2D("hOWires","Wire Digi Occupancy",36,0.5,36.5,20,0.5,20.5);
43  hOWireSerial = ibooker.book1D("hOWireSerial","Wire Occupancy by Chamber Serial",601,-0.5,600.5);
44  hOWireSerial->setAxisTitle("Chamber Serial Number");
45  hOStrips = ibooker.book2D("hOStrips","Strip Digi Occupancy",36,0.5,36.5,20,0.5,20.5);
46  hOStripSerial = ibooker.book1D("hOStripSerial","Strip Occupancy by Chamber Serial",601,-0.5,600.5);
47  hOStripSerial->setAxisTitle("Chamber Serial Number");
48  hOStripsAndWiresAndCLCT = ibooker.book2D("hOStripsAndWiresAndCLCT","Strip And Wire And CLCT Digi Occupancy",36,0.5,36.5,20,0.5,20.5);
50  hORecHits = ibooker.book2D("hORecHits","RecHit Occupancy",36,0.5,36.5,20,0.5,20.5);
51  hORecHitsSerial = ibooker.book1D("hORecHitSerial","RecHit Occupancy by Chamber Serial",601,-0.5,600.5);
52  hORecHitsSerial->setAxisTitle("Chamber Serial Number");
53  hOSegments = ibooker.book2D("hOSegments","Segment Occupancy",36,0.5,36.5,20,0.5,20.5);
54  hOSegmentsSerial = ibooker.book1D("hOSegmentSerial","Segment Occupancy by Chamber Serial",601,-0.5,600.5);
55  hOSegmentsSerial->setAxisTitle("Chamber Serial Number");
56 
57  // wire digis
58  ibooker.setCurrentFolder("CSC/CSCOfflineMonitor/Digis");
59 
60  hWirenGroupsTotal = ibooker.book1D("hWirenGroupsTotal","Fired Wires per Event; # Wiregroups Fired",200,-0.5,199.5);
61  hWireTBin.push_back(ibooker.book1D("hWireTBin_m42","Wire TBin Fired (ME -4/2); Time Bin (25ns)",17,-0.5,16.5));
62  hWireTBin.push_back(ibooker.book1D("hWireTBin_m41","Wire TBin Fired (ME -4/1); Time Bin (25ns)",17,-0.5,16.5));
63  hWireTBin.push_back(ibooker.book1D("hWireTBin_m32","Wire TBin Fired (ME -3/2); Time Bin (25ns)",17,-0.5,16.5));
64  hWireTBin.push_back(ibooker.book1D("hWireTBin_m31","Wire TBin Fired (ME -3/1); Time Bin (25ns)",17,-0.5,16.5));
65  hWireTBin.push_back(ibooker.book1D("hWireTBin_m22","Wire TBin Fired (ME -2/2); Time Bin (25ns)",17,-0.5,16.5));
66  hWireTBin.push_back(ibooker.book1D("hWireTBin_m21","Wire TBin Fired (ME -2/1); Time Bin (25ns)",17,-0.5,16.5));
67  hWireTBin.push_back(ibooker.book1D("hWireTBin_m11a","Wire TBin Fired (ME -1/1a); Time Bin (25ns)",17,-0.5,16.5));
68  hWireTBin.push_back(ibooker.book1D("hWireTBin_m13","Wire TBin Fired (ME -1/3); Time Bin (25ns)",17,-0.5,16.5));
69  hWireTBin.push_back(ibooker.book1D("hWireTBin_m12","Wire TBin Fired (ME -1/2); Time Bin (25ns)",17,-0.5,16.5));
70  hWireTBin.push_back(ibooker.book1D("hWireTBin_m11b","Wire TBin Fired (ME -1/1b); Time Bin (25ns)",17,-0.5,16.5));
71  hWireTBin.push_back(ibooker.book1D("hWireTBin_p11b","Wire TBin Fired (ME +1/1b); Time Bin (25ns)",17,-0.5,16.5));
72  hWireTBin.push_back(ibooker.book1D("hWireTBin_p12","Wire TBin Fired (ME +1/2); Time Bin (25ns)",17,-0.5,16.5));
73  hWireTBin.push_back(ibooker.book1D("hWireTBin_p13","Wire TBin Fired (ME +1/3); Time Bin (25ns)",17,-0.5,16.5));
74  hWireTBin.push_back(ibooker.book1D("hWireTBin_p11a","Wire TBin Fired (ME +1/1a); Time Bin (25ns)",17,-0.5,16.5));
75  hWireTBin.push_back(ibooker.book1D("hWireTBin_p21","Wire TBin Fired (ME +2/1); Time Bin (25ns)",17,-0.5,16.5));
76  hWireTBin.push_back(ibooker.book1D("hWireTBin_p22","Wire TBin Fired (ME +2/2); Time Bin (25ns)",17,-0.5,16.5));
77  hWireTBin.push_back(ibooker.book1D("hWireTBin_p31","Wire TBin Fired (ME +3/1); Time Bin (25ns)",17,-0.5,16.5));
78  hWireTBin.push_back(ibooker.book1D("hWireTBin_p32","Wire TBin Fired (ME +3/2); Time Bin (25ns)",17,-0.5,16.5));
79  hWireTBin.push_back(ibooker.book1D("hWireTBin_p41","Wire TBin Fired (ME +4/1); Time Bin (25ns)",17,-0.5,16.5));
80  hWireTBin.push_back(ibooker.book1D("hWireTBin_p42","Wire TBin Fired (ME +4/2); Time Bin (25ns)",17,-0.5,16.5));
81  hWireNumber.push_back(ibooker.book1D("hWireNumber_m42","Wiregroup Number Fired (ME -4/2); Wiregroup #",113,-0.5,112.5));
82  hWireNumber.push_back(ibooker.book1D("hWireNumber_m41","Wiregroup Number Fired (ME -4/1); Wiregroup #",113,-0.5,112.5));
83  hWireNumber.push_back(ibooker.book1D("hWireNumber_m32","Wiregroup Number Fired (ME -3/2); Wiregroup #",113,-0.5,112.5));
84  hWireNumber.push_back(ibooker.book1D("hWireNumber_m31","Wiregroup Number Fired (ME -3/1); Wiregroup #",113,-0.5,112.5));
85  hWireNumber.push_back(ibooker.book1D("hWireNumber_m22","Wiregroup Number Fired (ME -2/2); Wiregroup #",113,-0.5,112.5));
86  hWireNumber.push_back(ibooker.book1D("hWireNumber_m21","Wiregroup Number Fired (ME -2/1); Wiregroup #",113,-0.5,112.5));
87  hWireNumber.push_back(ibooker.book1D("hWireNumber_m11a","Wiregroup Number Fired (ME -1/1a); Wiregroup #",113,-0.5,112.5));
88  hWireNumber.push_back(ibooker.book1D("hWireNumber_m13","Wiregroup Number Fired (ME -1/3); Wiregroup #",113,-0.5,112.5));
89  hWireNumber.push_back(ibooker.book1D("hWireNumber_m12","Wiregroup Number Fired (ME -1/2); Wiregroup #",113,-0.5,112.5));
90  hWireNumber.push_back(ibooker.book1D("hWireNumber_m11b","Wiregroup Number Fired (ME -1/1b); Wiregroup #",113,-0.5,112.5));
91  hWireNumber.push_back(ibooker.book1D("hWireNumber_p11b","Wiregroup Number Fired (ME +1/1b); Wiregroup #",113,-0.5,112.5));
92  hWireNumber.push_back(ibooker.book1D("hWireNumber_p12","Wiregroup Number Fired (ME +1/2); Wiregroup #",113,-0.5,112.5));
93  hWireNumber.push_back(ibooker.book1D("hWireNumber_p13","Wiregroup Number Fired (ME +1/3); Wiregroup #",113,-0.5,112.5));
94  hWireNumber.push_back(ibooker.book1D("hWireNumber_p11a","Wiregroup Number Fired (ME +1/1a); Wiregroup #",113,-0.5,112.5));
95  hWireNumber.push_back(ibooker.book1D("hWireNumber_p21","Wiregroup Number Fired (ME +2/1); Wiregroup #",113,-0.5,112.5));
96  hWireNumber.push_back(ibooker.book1D("hWireNumber_p22","Wiregroup Number Fired (ME +2/2); Wiregroup #",113,-0.5,112.5));
97  hWireNumber.push_back(ibooker.book1D("hWireNumber_p31","Wiregroup Number Fired (ME +3/1); Wiregroup #",113,-0.5,112.5));
98  hWireNumber.push_back(ibooker.book1D("hWireNumber_p32","Wiregroup Number Fired (ME +3/2); Wiregroup #",113,-0.5,112.5));
99  hWireNumber.push_back(ibooker.book1D("hWireNumber_p41","Wiregroup Number Fired (ME +4/1); Wiregroup #",113,-0.5,112.5));
100  hWireNumber.push_back(ibooker.book1D("hWireNumber_p42","Wiregroup Number Fired (ME +4/2); Wiregroup #",113,-0.5,112.5));
101 
102  // strip digis
103  hStripNFired = ibooker.book1D("hStripNFired","Fired Strips per Event; # Strips Fired (above 13 ADC)",300,-0.5,299.5);
104  hStripNumber.push_back(ibooker.book1D("hStripNumber_m42","Strip Number Fired (ME -4/2); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
105  hStripNumber.push_back(ibooker.book1D("hStripNumber_m41","Strip Number Fired (ME -4/1); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
106  hStripNumber.push_back(ibooker.book1D("hStripNumber_m32","Strip Number Fired (ME -3/2); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
107  hStripNumber.push_back(ibooker.book1D("hStripNumber_m31","Strip Number Fired (ME -3/1); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
108  hStripNumber.push_back(ibooker.book1D("hStripNumber_m22","Strip Number Fired (ME -2/2); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
109  hStripNumber.push_back(ibooker.book1D("hStripNumber_m21","Strip Number Fired (ME -2/1); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
110  hStripNumber.push_back(ibooker.book1D("hStripNumber_m11a","Strip Number Fired (ME -1/1a); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
111  hStripNumber.push_back(ibooker.book1D("hStripNumber_m13","Strip Number Fired (ME -1/3); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
112  hStripNumber.push_back(ibooker.book1D("hStripNumber_m12","Strip Number Fired (ME -1/2); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
113  hStripNumber.push_back(ibooker.book1D("hStripNumber_m11b","Strip Number Fired (ME -1/1b); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
114  hStripNumber.push_back(ibooker.book1D("hStripNumber_p11b","Strip Number Fired (ME +1/1b); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
115  hStripNumber.push_back(ibooker.book1D("hStripNumber_p12","Strip Number Fired (ME +1/2); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
116  hStripNumber.push_back(ibooker.book1D("hStripNumber_p13","Strip Number Fired (ME +1/3); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
117  hStripNumber.push_back(ibooker.book1D("hStripNumber_p11a","Strip Number Fired (ME +1/1a); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
118  hStripNumber.push_back(ibooker.book1D("hStripNumber_p21","Strip Number Fired (ME +2/1); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
119  hStripNumber.push_back(ibooker.book1D("hStripNumber_p22","Strip Number Fired (ME +2/2); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
120  hStripNumber.push_back(ibooker.book1D("hStripNumber_p31","Strip Number Fired (ME +3/1); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
121  hStripNumber.push_back(ibooker.book1D("hStripNumber_p32","Strip Number Fired (ME +3/2); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
122  hStripNumber.push_back(ibooker.book1D("hStripNumber_p41","Strip Number Fired (ME +4/1); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
123  hStripNumber.push_back(ibooker.book1D("hStripNumber_p42","Stripgroup Number Fired (ME +4/2); Strip # Fired (above 13 ADC)",81,-0.5,80.5));
124 
125  // pedestal noise
126  ibooker.setCurrentFolder("CSC/CSCOfflineMonitor/PedestalNoise");
127 
128  hStripPed.push_back(ibooker.book1D("hStripPedMEm42","Pedestal Noise Distribution Chamber ME -4/2; ADC Counts",50,-25.,25.));
129  hStripPed.push_back(ibooker.book1D("hStripPedMEm41","Pedestal Noise Distribution Chamber ME -4/1; ADC Counts",50,-25.,25.));
130  hStripPed.push_back(ibooker.book1D("hStripPedMEm32","Pedestal Noise Distribution Chamber ME -3/2; ADC Counts",50,-25.,25.));
131  hStripPed.push_back(ibooker.book1D("hStripPedMEm31","Pedestal Noise Distribution Chamber ME -3/1; ADC Counts",50,-25.,25.));
132  hStripPed.push_back(ibooker.book1D("hStripPedMEm22","Pedestal Noise Distribution Chamber ME -2/2; ADC Counts",50,-25.,25.));
133  hStripPed.push_back(ibooker.book1D("hStripPedMEm21","Pedestal Noise Distribution Chamber ME -2/1; ADC Counts",50,-25.,25.));
134  hStripPed.push_back(ibooker.book1D("hStripPedMEm11a","Pedestal Noise Distribution Chamber ME -1/1; ADC Counts",50,-25.,25.));
135  hStripPed.push_back(ibooker.book1D("hStripPedMEm13","Pedestal Noise Distribution Chamber ME -1/3; ADC Counts",50,-25.,25.));
136  hStripPed.push_back(ibooker.book1D("hStripPedMEm12","Pedestal Noise Distribution Chamber ME -1/2; ADC Counts",50,-25.,25.));
137  hStripPed.push_back(ibooker.book1D("hStripPedMEm11b","Pedestal Noise Distribution Chamber ME -1/1; ADC Counts",50,-25.,25.));
138  hStripPed.push_back(ibooker.book1D("hStripPedMEp11b","Pedestal Noise Distribution Chamber ME +1/1; ADC Counts",50,-25.,25.));
139  hStripPed.push_back(ibooker.book1D("hStripPedMEp12","Pedestal Noise Distribution Chamber ME +1/2; ADC Counts",50,-25.,25.));
140  hStripPed.push_back(ibooker.book1D("hStripPedMEp13","Pedestal Noise Distribution Chamber ME +1/3; ADC Counts",50,-25.,25.));
141  hStripPed.push_back(ibooker.book1D("hStripPedMEp11a","Pedestal Noise Distribution Chamber ME +1/1; ADC Counts",50,-25.,25.));
142  hStripPed.push_back(ibooker.book1D("hStripPedMEp21","Pedestal Noise Distribution Chamber ME +2/1; ADC Counts",50,-25.,25.));
143  hStripPed.push_back(ibooker.book1D("hStripPedMEp22","Pedestal Noise Distribution Chamber ME +2/2; ADC Counts",50,-25.,25.));
144  hStripPed.push_back(ibooker.book1D("hStripPedMEp31","Pedestal Noise Distribution Chamber ME +3/1; ADC Counts",50,-25.,25.));
145  hStripPed.push_back(ibooker.book1D("hStripPedMEp32","Pedestal Noise Distribution Chamber ME +3/2; ADC Counts",50,-25.,25.));
146  hStripPed.push_back(ibooker.book1D("hStripPedMEp41","Pedestal Noise Distribution Chamber ME +4/1; ADC Counts",50,-25.,25.));
147  hStripPed.push_back(ibooker.book1D("hStripPedMEp42","Pedestal Noise Distribution Chamber ME +4/2; ADC Counts",50,-25.,25.));
148 
149  // rechits
150  ibooker.setCurrentFolder("CSC/CSCOfflineMonitor/recHits");
151 
152  hRHnrechits = ibooker.book1D("hRHnrechits","recHits per Event (all chambers); # of RecHits",200,-0.50,199.5);
153  hRHGlobal.push_back(ibooker.book2D("hRHGlobalp1","recHit global X,Y station +1; Global X (cm); Global Y (cm)",100,-800.,800.,100,-800.,800.));
154  hRHGlobal.push_back(ibooker.book2D("hRHGlobalp2","recHit global X,Y station +2; Global X (cm); Global Y (cm)",100,-800.,800.,100,-800.,800.));
155  hRHGlobal.push_back(ibooker.book2D("hRHGlobalp3","recHit global X,Y station +3; Global X (cm); Global Y (cm)",100,-800.,800.,100,-800.,800.));
156  hRHGlobal.push_back(ibooker.book2D("hRHGlobalp4","recHit global X,Y station +4; Global X (cm); Global Y (cm)",100,-800.,800.,100,-800.,800.));
157  hRHGlobal.push_back(ibooker.book2D("hRHGlobalm1","recHit global X,Y station -1; Global X (cm); Global Y (cm)",100,-800.,800.,100,-800.,800.));
158  hRHGlobal.push_back(ibooker.book2D("hRHGlobalm2","recHit global X,Y station -2; Global X (cm); Global Y (cm)",100,-800.,800.,100,-800.,800.));
159  hRHGlobal.push_back(ibooker.book2D("hRHGlobalm3","recHit global X,Y station -3; Global X (cm); Global Y (cm)",100,-800.,800.,100,-800.,800.));
160  hRHGlobal.push_back(ibooker.book2D("hRHGlobalm4","recHit global X,Y station -4; Global X (cm); Global Y (cm)",100,-800.,800.,100,-800.,800.));
161  hRHSumQ.push_back(ibooker.book1D("hRHSumQm42","Sum 3x3 recHit Charge (ME -4/2); ADC counts",100,0,2000));
162  hRHSumQ.push_back(ibooker.book1D("hRHSumQm41","Sum 3x3 recHit Charge (ME -4/1); ADC counts",100,0,2000));
163  hRHSumQ.push_back(ibooker.book1D("hRHSumQm32","Sum 3x3 recHit Charge (ME -3/2); ADC counts",100,0,2000));
164  hRHSumQ.push_back(ibooker.book1D("hRHSumQm31","Sum 3x3 recHit Charge (ME -3/1); ADC counts",100,0,2000));
165  hRHSumQ.push_back(ibooker.book1D("hRHSumQm22","Sum 3x3 recHit Charge (ME -2/2); ADC counts",100,0,2000));
166  hRHSumQ.push_back(ibooker.book1D("hRHSumQm21","Sum 3x3 recHit Charge (ME -2/1); ADC counts",100,0,2000));
167  hRHSumQ.push_back(ibooker.book1D("hRHSumQm11a","Sum 3x3 recHit Charge (ME -1/1a); ADC counts",100,0,4000));
168  hRHSumQ.push_back(ibooker.book1D("hRHSumQm13","Sum 3x3 recHit Charge (ME -1/3); ADC counts",100,0,2000));
169  hRHSumQ.push_back(ibooker.book1D("hRHSumQm12","Sum 3x3 recHit Charge (ME -1/2); ADC counts",100,0,2000));
170  hRHSumQ.push_back(ibooker.book1D("hRHSumQm11b","Sum 3x3 recHit Charge (ME -1/1b); ADC counts",100,0,4000));
171  hRHSumQ.push_back(ibooker.book1D("hRHSumQp11b","Sum 3x3 recHit Charge (ME +1/1b); ADC counts",100,0,4000));
172  hRHSumQ.push_back(ibooker.book1D("hRHSumQp12","Sum 3x3 recHit Charge (ME +1/2); ADC counts",100,0,2000));
173  hRHSumQ.push_back(ibooker.book1D("hRHSumQp13","Sum 3x3 recHit Charge (ME +1/3); ADC counts",100,0,2000));
174  hRHSumQ.push_back(ibooker.book1D("hRHSumQp11a","Sum 3x3 recHit Charge (ME +1/1a); ADC counts",100,0,4000));
175  hRHSumQ.push_back(ibooker.book1D("hRHSumQp21","Sum 3x3 recHit Charge (ME +2/1); ADC counts",100,0,2000));
176  hRHSumQ.push_back(ibooker.book1D("hRHSumQp22","Sum 3x3 recHit Charge (ME +2/2); ADC counts",100,0,2000));
177  hRHSumQ.push_back(ibooker.book1D("hRHSumQp31","Sum 3x3 recHit Charge (ME +3/1); ADC counts",100,0,2000));
178  hRHSumQ.push_back(ibooker.book1D("hRHSumQp32","Sum 3x3 recHit Charge (ME +3/2); ADC counts",100,0,2000));
179  hRHSumQ.push_back(ibooker.book1D("hRHSumQp41","Sum 3x3 recHit Charge (ME +4/1); ADC counts",100,0,2000));
180  hRHSumQ.push_back(ibooker.book1D("hRHSumQp42","Sum 3x3 recHit Charge (ME +4/2); ADC counts",100,0,2000));
181  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQm42","Charge Ratio (Ql+Qr)/Qt (ME -4/2); (Ql+Qr)/Qt",100,-0.1,1.1));
182  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQm41","Charge Ratio (Ql+Qr)/Qt (ME -4/1); (Ql+Qr)/Qt",100,-0.1,1.1));
183  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQm32","Charge Ratio (Ql+Qr)/Qt (ME -3/2); (Ql+Qr)/Qt",100,-0.1,1.1));
184  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQm31","Charge Ratio (Ql+Qr)/Qt (ME -3/1); (Ql+Qr)/Qt",100,-0.1,1.1));
185  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQm22","Charge Ratio (Ql+Qr)/Qt (ME -2/2); (Ql+Qr)/Qt",100,-0.1,1.1));
186  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQm21","Charge Ratio (Ql+Qr)/Qt (ME -2/1); (Ql+Qr)/Qt",100,-0.1,1.1));
187  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQm11a","Charge Ratio (Ql+Qr)/Qt (ME -1/1a); (Ql+Qr)/Qt",100,-0.1,1.1));
188  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQm13","Charge Ratio (Ql+Qr)/Qt (ME -1/3); (Ql+Qr)/Qt",100,-0.1,1.1));
189  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQm12","Charge Ratio (Ql+Qr)/Qt (ME -1/2); (Ql+Qr)/Qt",100,-0.1,1.1));
190  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQm11b","Charge Ratio (Ql+Qr)/Qt (ME -1/1b); (Ql+Qr)/Qt",100,-0.1,1.1));
191  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQp11b","Charge Ratio (Ql+Qr)/Qt (ME +1/1b); (Ql+Qr)/Qt",100,-0.1,1.1));
192  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQp12","Charge Ratio (Ql+Qr)/Qt (ME +1/2); (Ql+Qr)/Qt",100,-0.1,1.1));
193  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQp13","Charge Ratio (Ql+Qr)/Qt (ME +1/3); (Ql+Qr)/Qt",100,-0.1,1.1));
194  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQp11a","Charge Ratio (Ql+Qr)/Qt (ME +1/1a); (Ql+Qr)/Qt",100,-0.1,1.1));
195  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQp21","Charge Ratio (Ql+Qr)/Qt (ME +2/1); (Ql+Qr)/Qt",100,-0.1,1.1));
196  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQp22","Charge Ratio (Ql+Qr)/Qt (ME +2/2); (Ql+Qr)/Qt",100,-0.1,1.1));
197  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQp31","Charge Ratio (Ql+Qr)/Qt (ME +3/1); (Ql+Qr)/Qt",100,-0.1,1.1));
198  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQp32","Charge Ratio (Ql+Qr)/Qt (ME +3/2); (Ql+Qr)/Qt",100,-0.1,1.1));
199  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQp41","Charge Ratio (Ql+Qr)/Qt (ME +4/1); (Ql+Qr)/Qt",100,-0.1,1.1));
200  hRHRatioQ.push_back(ibooker.book1D("hRHRatioQp42","Charge Ratio (Ql+Qr)/Qt (ME +4/2); (Ql+Qr)/Qt",100,-0.1,1.1));
201  hRHTiming.push_back(ibooker.book1D("hRHTimingm42","recHit Time (ME -4/2); ns",200,-500.,500.));
202  hRHTiming.push_back(ibooker.book1D("hRHTimingm41","recHit Time (ME -4/1); ns",200,-500.,500.));
203  hRHTiming.push_back(ibooker.book1D("hRHTimingm32","recHit Time (ME -3/2); ns",200,-500.,500.));
204  hRHTiming.push_back(ibooker.book1D("hRHTimingm31","recHit Time (ME -3/1); ns",200,-500.,500.));
205  hRHTiming.push_back(ibooker.book1D("hRHTimingm22","recHit Time (ME -2/2); ns",200,-500.,500.));
206  hRHTiming.push_back(ibooker.book1D("hRHTimingm21","recHit Time (ME -2/1); ns",200,-500.,500.));
207  hRHTiming.push_back(ibooker.book1D("hRHTimingm11a","recHit Time (ME -1/1a); ns",200,-500.,500.));
208  hRHTiming.push_back(ibooker.book1D("hRHTimingm13","recHit Time (ME -1/3); ns",200,-500.,500.));
209  hRHTiming.push_back(ibooker.book1D("hRHTimingm12","recHit Time (ME -1/2); ns",200,-500.,500.));
210  hRHTiming.push_back(ibooker.book1D("hRHTimingm11b","recHit Time (ME -1/1b); ns",200,-500.,500.));
211  hRHTiming.push_back(ibooker.book1D("hRHTimingp11b","recHit Time (ME +1/1b); ns",200,-500.,500.));
212  hRHTiming.push_back(ibooker.book1D("hRHTimingp12","recHit Time (ME +1/2); ns",200,-500.,500.));
213  hRHTiming.push_back(ibooker.book1D("hRHTimingp13","recHit Time (ME +1/3); ns",200,-500.,500.));
214  hRHTiming.push_back(ibooker.book1D("hRHTimingp11a","recHit Time (ME +1/1a); ns",200,-500.,500.));
215  hRHTiming.push_back(ibooker.book1D("hRHTimingp21","recHit Time (ME +2/1); ns",200,-500.,500.));
216  hRHTiming.push_back(ibooker.book1D("hRHTimingp22","recHit Time (ME +2/2); ns",200,-500.,500.));
217  hRHTiming.push_back(ibooker.book1D("hRHTimingp31","recHit Time (ME +3/1); ns",200,-500.,500.));
218  hRHTiming.push_back(ibooker.book1D("hRHTimingp32","recHit Time (ME +3/2); ns",200,-500.,500.));
219  hRHTiming.push_back(ibooker.book1D("hRHTimingp41","recHit Time (ME +4/1); ns",200,-500.,500.));
220  hRHTiming.push_back(ibooker.book1D("hRHTimingp42","recHit Time (ME +4/2); ns",200,-500.,500.));
221  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodem42","Anode recHit Time (ME -4/2); ns",80,-500.,500.));
222  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodem41","Anode recHit Time (ME -4/1); ns",80,-500.,500.));
223  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodem32","Anode recHit Time (ME -3/2); ns",80,-500.,500.));
224  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodem31","Anode recHit Time (ME -3/1); ns",80,-500.,500.));
225  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodem22","Anode recHit Time (ME -2/2); ns",80,-500.,500.));
226  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodem21","Anode recHit Time (ME -2/1); ns",80,-500.,500.));
227  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodem11a","Anode recHit Time (ME -1/1a); ns",80,-500.,500.));
228  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodem13","Anode recHit Time (ME -1/3); ns",80,-500.,500.));
229  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodem12","Anode recHit Time (ME -1/2); ns",80,-500.,500.));
230  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodem11b","Anode recHit Time (ME -1/1b); ns",80,-500.,500.));
231  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodep11b","Anode recHit Time (ME +1/1b); ns",80,-500.,500.));
232  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodep12","Anode recHit Time (ME +1/2); ns",80,-500.,500.));
233  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodep13","Anode recHit Time (ME +1/3); ns",80,-500.,500.));
234  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodep11a","Anode recHit Time (ME +1/1a); ns",80,-500.,500.));
235  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodep21","Anode recHit Time (ME +2/1); ns",80,-500.,500.));
236  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodep22","Anode recHit Time (ME +2/2); ns",80,-500.,500.));
237  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodep31","Anode recHit Time (ME +3/1); ns",80,-500.,500.));
238  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodep32","Anode recHit Time (ME +3/2); ns",80,-500.,500.));
239  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodep41","Anode recHit Time (ME +4/1); ns",80,-500.,500.));
240  hRHTimingAnode.push_back(ibooker.book1D("hRHTimingAnodep42","Anode recHit Time (ME +4/2); ns",80,-500.,500.));
241  hRHstpos.push_back(ibooker.book1D("hRHstposm42","Reconstructed Position on Strip (ME -4/2); Strip Widths",120,-0.6,0.6));
242  hRHstpos.push_back(ibooker.book1D("hRHstposm41","Reconstructed Position on Strip (ME -4/1); Strip Widths",120,-0.6,0.6));
243  hRHstpos.push_back(ibooker.book1D("hRHstposm32","Reconstructed Position on Strip (ME -3/2); Strip Widths",120,-0.6,0.6));
244  hRHstpos.push_back(ibooker.book1D("hRHstposm31","Reconstructed Position on Strip (ME -3/1); Strip Widths",120,-0.6,0.6));
245  hRHstpos.push_back(ibooker.book1D("hRHstposm22","Reconstructed Position on Strip (ME -2/2); Strip Widths",120,-0.6,0.6));
246  hRHstpos.push_back(ibooker.book1D("hRHstposm21","Reconstructed Position on Strip (ME -2/1); Strip Widths",120,-0.6,0.6));
247  hRHstpos.push_back(ibooker.book1D("hRHstposm11a","Reconstructed Position on Strip (ME -1/1a); Strip Widths",120,-0.6,0.6));
248  hRHstpos.push_back(ibooker.book1D("hRHstposm13","Reconstructed Position on Strip (ME -1/3); Strip Widths",120,-0.6,0.6));
249  hRHstpos.push_back(ibooker.book1D("hRHstposm12","Reconstructed Position on Strip (ME -1/2); Strip Widths",120,-0.6,0.6));
250  hRHstpos.push_back(ibooker.book1D("hRHstposm11b","Reconstructed Position on Strip (ME -1/1b); Strip Widths",120,-0.6,0.6));
251  hRHstpos.push_back(ibooker.book1D("hRHstposp11b","Reconstructed Position on Strip (ME +1/1b); Strip Widths",120,-0.6,0.6));
252  hRHstpos.push_back(ibooker.book1D("hRHstposp12","Reconstructed Position on Strip (ME +1/2); Strip Widths",120,-0.6,0.6));
253  hRHstpos.push_back(ibooker.book1D("hRHstposp13","Reconstructed Position on Strip (ME +1/3); Strip Widths",120,-0.6,0.6));
254  hRHstpos.push_back(ibooker.book1D("hRHstposp11a","Reconstructed Position on Strip (ME +1/1a); Strip Widths",120,-0.6,0.6));
255  hRHstpos.push_back(ibooker.book1D("hRHstposp21","Reconstructed Position on Strip (ME +2/1); Strip Widths",120,-0.6,0.6));
256  hRHstpos.push_back(ibooker.book1D("hRHstposp22","Reconstructed Position on Strip (ME +2/2); Strip Widths",120,-0.6,0.6));
257  hRHstpos.push_back(ibooker.book1D("hRHstposp31","Reconstructed Position on Strip (ME +3/1); Strip Widths",120,-0.6,0.6));
258  hRHstpos.push_back(ibooker.book1D("hRHstposp32","Reconstructed Position on Strip (ME +3/2); Strip Widths",120,-0.6,0.6));
259  hRHstpos.push_back(ibooker.book1D("hRHstposp41","Reconstructed Position on Strip (ME +4/1); Strip Widths",120,-0.6,0.6));
260  hRHstpos.push_back(ibooker.book1D("hRHstposp42","Reconstructed Position on Strip (ME +4/2); Strip Widths",120,-0.6,0.6));
261  hRHsterr.push_back(ibooker.book1D("hRHsterrm42","Estimated Error on Strip Measurement (ME -4/2); Strip Widths",75,-0.01,0.24));
262  hRHsterr.push_back(ibooker.book1D("hRHsterrm41","Estimated Error on Strip Measurement (ME -4/1); Strip Widths",75,-0.01,0.24));
263  hRHsterr.push_back(ibooker.book1D("hRHsterrm32","Estimated Error on Strip Measurement (ME -3/2); Strip Widths",75,-0.01,0.24));
264  hRHsterr.push_back(ibooker.book1D("hRHsterrm31","Estimated Error on Strip Measurement (ME -3/1); Strip Widths",75,-0.01,0.24));
265  hRHsterr.push_back(ibooker.book1D("hRHsterrm22","Estimated Error on Strip Measurement (ME -2/2); Strip Widths",75,-0.01,0.24));
266  hRHsterr.push_back(ibooker.book1D("hRHsterrm21","Estimated Error on Strip Measurement (ME -2/1); Strip Widths",75,-0.01,0.24));
267  hRHsterr.push_back(ibooker.book1D("hRHsterrm11a","Estimated Error on Strip Measurement (ME -1/1a); Strip Widths",75,-0.01,0.24));
268  hRHsterr.push_back(ibooker.book1D("hRHsterrm13","Estimated Error on Strip Measurement (ME -1/3); Strip Widths",75,-0.01,0.24));
269  hRHsterr.push_back(ibooker.book1D("hRHsterrm12","Estimated Error on Strip Measurement (ME -1/2); Strip Widths",75,-0.01,0.24));
270  hRHsterr.push_back(ibooker.book1D("hRHsterrm11b","Estimated Error on Strip Measurement (ME -1/1b); Strip Widths",75,-0.01,0.24));
271  hRHsterr.push_back(ibooker.book1D("hRHsterrp11b","Estimated Error on Strip Measurement (ME +1/1b); Strip Widths",75,-0.01,0.24));
272  hRHsterr.push_back(ibooker.book1D("hRHsterrp12","Estimated Error on Strip Measurement (ME +1/2); Strip Widths",75,-0.01,0.24));
273  hRHsterr.push_back(ibooker.book1D("hRHsterrp13","Estimated Error on Strip Measurement (ME +1/3); Strip Widths",75,-0.01,0.24));
274  hRHsterr.push_back(ibooker.book1D("hRHsterrp11a","Estimated Error on Strip Measurement (ME +1/1a); Strip Widths",75,-0.01,0.24));
275  hRHsterr.push_back(ibooker.book1D("hRHsterrp21","Estimated Error on Strip Measurement (ME +2/1); Strip Widths",75,-0.01,0.24));
276  hRHsterr.push_back(ibooker.book1D("hRHsterrp22","Estimated Error on Strip Measurement (ME +2/2); Strip Widths",75,-0.01,0.24));
277  hRHsterr.push_back(ibooker.book1D("hRHsterrp31","Estimated Error on Strip Measurement (ME +3/1); Strip Widths",75,-0.01,0.24));
278  hRHsterr.push_back(ibooker.book1D("hRHsterrp32","Estimated Error on Strip Measurement (ME +3/2); Strip Widths",75,-0.01,0.24));
279  hRHsterr.push_back(ibooker.book1D("hRHsterrp41","Estimated Error on Strip Measurement (ME +4/1); Strip Widths",75,-0.01,0.24));
280  hRHsterr.push_back(ibooker.book1D("hRHsterrp42","Estimated Error on Strip Measurement (ME +4/2); Strip Widths",75,-0.01,0.24));
281 
282  // segments
283  ibooker.setCurrentFolder("CSC/CSCOfflineMonitor/Segments");
284 
285  hSnSegments = ibooker.book1D("hSnSegments","Number of Segments per Event; # of Segments",26,-0.5,25.5);
286  hSnhitsAll = ibooker.book1D("hSnhits","N hits on Segments; # of hits",8,-0.5,7.5);
287  hSnhits.push_back(ibooker.book1D("hSnhitsm42","# of hits on Segments (ME -4/2); # of hits",8,-0.5,7.5));
288  hSnhits.push_back(ibooker.book1D("hSnhitsm41","# of hits on Segments (ME -4/1); # of hits",8,-0.5,7.5));
289  hSnhits.push_back(ibooker.book1D("hSnhitsm32","# of hits on Segments (ME -3/2); # of hits",8,-0.5,7.5));
290  hSnhits.push_back(ibooker.book1D("hSnhitsm31","# of hits on Segments (ME -3/1); # of hits",8,-0.5,7.5));
291  hSnhits.push_back(ibooker.book1D("hSnhitsm22","# of hits on Segments (ME -2/2); # of hits",8,-0.5,7.5));
292  hSnhits.push_back(ibooker.book1D("hSnhitsm21","# of hits on Segments (ME -2/1); # of hits",8,-0.5,7.5));
293  hSnhits.push_back(ibooker.book1D("hSnhitsm11a","# of hits on Segments (ME -1/1a); # of hits",8,-0.5,7.5));
294  hSnhits.push_back(ibooker.book1D("hSnhitsm13","# of hits on Segments (ME -1/3); # of hits",8,-0.5,7.5));
295  hSnhits.push_back(ibooker.book1D("hSnhitsm12","# of hits on Segments (ME -1/2); # of hits",8,-0.5,7.5));
296  hSnhits.push_back(ibooker.book1D("hSnhitsm11b","# of hits on Segments (ME -1/1b); # of hits",8,-0.5,7.5));
297  hSnhits.push_back(ibooker.book1D("hSnhitsp11b","# of hits on Segments (ME +1/1b); # of hits",8,-0.5,7.5));
298  hSnhits.push_back(ibooker.book1D("hSnhitsp12","# of hits on Segments (ME +1/2); # of hits",8,-0.5,7.5));
299  hSnhits.push_back(ibooker.book1D("hSnhitsp13","# of hits on Segments (ME +1/3); # of hits",8,-0.5,7.5));
300  hSnhits.push_back(ibooker.book1D("hSnhitsp11a","# of hits on Segments (ME +1/1a); # of hits",8,-0.5,7.5));
301  hSnhits.push_back(ibooker.book1D("hSnhitsp21","# of hits on Segments (ME +2/1); # of hits",8,-0.5,7.5));
302  hSnhits.push_back(ibooker.book1D("hSnhitsp22","# of hits on Segments (ME +2/2); # of hits",8,-0.5,7.5));
303  hSnhits.push_back(ibooker.book1D("hSnhitsp31","# of hits on Segments (ME +3/1); # of hits",8,-0.5,7.5));
304  hSnhits.push_back(ibooker.book1D("hSnhitsp32","# of hits on Segments (ME +3/2); # of hits",8,-0.5,7.5));
305  hSnhits.push_back(ibooker.book1D("hSnhitsp41","# of hits on Segments (ME +4/1); # of hits",8,-0.5,7.5));
306  hSnhits.push_back(ibooker.book1D("hSnhitsp42","# of hits on Segments (ME +4/2); # of hits",8,-0.5,7.5));
307  hSChiSqAll = ibooker.book1D("hSChiSq","Segment Normalized Chi2; Chi2/ndof",110,-0.05,10.5);
308  hSChiSq.push_back(ibooker.book1D("hSChiSqm42","Segment Normalized Chi2 (ME -4/2); Chi2/ndof",110,-0.05,10.5));
309  hSChiSq.push_back(ibooker.book1D("hSChiSqm41","Segment Normalized Chi2 (ME -4/1); Chi2/ndof",110,-0.05,10.5));
310  hSChiSq.push_back(ibooker.book1D("hSChiSqm32","Segment Normalized Chi2 (ME -3/2); Chi2/ndof",110,-0.05,10.5));
311  hSChiSq.push_back(ibooker.book1D("hSChiSqm31","Segment Normalized Chi2 (ME -3/1); Chi2/ndof",110,-0.05,10.5));
312  hSChiSq.push_back(ibooker.book1D("hSChiSqm22","Segment Normalized Chi2 (ME -2/2); Chi2/ndof",110,-0.05,10.5));
313  hSChiSq.push_back(ibooker.book1D("hSChiSqm21","Segment Normalized Chi2 (ME -2/1); Chi2/ndof",110,-0.05,10.5));
314  hSChiSq.push_back(ibooker.book1D("hSChiSqm11a","Segment Normalized Chi2 (ME -1/1a); Chi2/ndof",110,-0.05,10.5));
315  hSChiSq.push_back(ibooker.book1D("hSChiSqm13","Segment Normalized Chi2 (ME -1/3); Chi2/ndof",110,-0.05,10.5));
316  hSChiSq.push_back(ibooker.book1D("hSChiSqm12","Segment Normalized Chi2 (ME -1/2); Chi2/ndof",110,-0.05,10.5));
317  hSChiSq.push_back(ibooker.book1D("hSChiSqm11b","Segment Normalized Chi2 (ME -1/1b); Chi2/ndof",110,-0.05,10.5));
318  hSChiSq.push_back(ibooker.book1D("hSChiSqp11b","Segment Normalized Chi2 (ME +1/1b); Chi2/ndof",110,-0.05,10.5));
319  hSChiSq.push_back(ibooker.book1D("hSChiSqp12","Segment Normalized Chi2 (ME +1/2); Chi2/ndof",110,-0.05,10.5));
320  hSChiSq.push_back(ibooker.book1D("hSChiSqp13","Segment Normalized Chi2 (ME +1/3); Chi2/ndof",110,-0.05,10.5));
321  hSChiSq.push_back(ibooker.book1D("hSChiSqp11a","Segment Normalized Chi2 (ME +1/1a); Chi2/ndof",110,-0.05,10.5));
322  hSChiSq.push_back(ibooker.book1D("hSChiSqp21","Segment Normalized Chi2 (ME +2/1); Chi2/ndof",110,-0.05,10.5));
323  hSChiSq.push_back(ibooker.book1D("hSChiSqp22","Segment Normalized Chi2 (ME +2/2); Chi2/ndof",110,-0.05,10.5));
324  hSChiSq.push_back(ibooker.book1D("hSChiSqp31","Segment Normalized Chi2 (ME +3/1); Chi2/ndof",110,-0.05,10.5));
325  hSChiSq.push_back(ibooker.book1D("hSChiSqp32","Segment Normalized Chi2 (ME +3/2); Chi2/ndof",110,-0.05,10.5));
326  hSChiSq.push_back(ibooker.book1D("hSChiSqp41","Segment Normalized Chi2 (ME +4/1); Chi2/ndof",110,-0.05,10.5));
327  hSChiSq.push_back(ibooker.book1D("hSChiSqp42","Segment Normalized Chi2 (ME +4/2); Chi2/ndof",110,-0.05,10.5));
328  hSChiSqProbAll = ibooker.book1D("hSChiSqProb","Segment chi2 Probability; Probability",110,-0.05,1.05);
329  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbm42","Segment chi2 Probability (ME -4/2); Probability",110,-0.05,1.05));
330  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbm41","Segment chi2 Probability (ME -4/1); Probability",110,-0.05,1.05));
331  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbm32","Segment chi2 Probability (ME -3/2); Probability",110,-0.05,1.05));
332  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbm31","Segment chi2 Probability (ME -3/1); Probability",110,-0.05,1.05));
333  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbm22","Segment chi2 Probability (ME -2/2); Probability",110,-0.05,1.05));
334  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbm21","Segment chi2 Probability (ME -2/1); Probability",110,-0.05,1.05));
335  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbm11a","Segment chi2 Probability (ME -1/1a); Probability",110,-0.05,1.05));
336  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbm13","Segment chi2 Probability (ME -1/3); Probability",110,-0.05,1.05));
337  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbm12","Segment chi2 Probability (ME -1/2); Probability",110,-0.05,1.05));
338  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbm11b","Segment chi2 Probability (ME -1/1b); Probability",110,-0.05,1.05));
339  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbp11b","Segment chi2 Probability (ME +1/1b); Probability",110,-0.05,1.05));
340  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbp12","Segment chi2 Probability (ME +1/2); Probability",110,-0.05,1.05));
341  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbp13","Segment chi2 Probability (ME +1/3); Probability",110,-0.05,1.05));
342  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbp11a","Segment chi2 Probability (ME +1/1a); Probability",110,-0.05,1.05));
343  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbp21","Segment chi2 Probability (ME +2/1); Probability",110,-0.05,1.05));
344  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbp22","Segment chi2 Probability (ME +2/2); Probability",110,-0.05,1.05));
345  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbp31","Segment chi2 Probability (ME +3/1); Probability",110,-0.05,1.05));
346  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbp32","Segment chi2 Probability (ME +3/2); Probability",110,-0.05,1.05));
347  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbp41","Segment chi2 Probability (ME +4/1); Probability",110,-0.05,1.05));
348  hSChiSqProb.push_back(ibooker.book1D("hSChiSqProbp42","Segment chi2 Probability (ME +4/2); Probability",110,-0.05,1.05));
349  hSGlobalTheta = ibooker.book1D("hSGlobalTheta","Segment Direction (Global Theta); Global Theta (radians)",136,-0.1,3.3);
350  hSGlobalPhi = ibooker.book1D("hSGlobalPhi","Segment Direction (Global Phi); Global Phi (radians)", 128,-3.2,3.2);
351  hSTimeCathode = ibooker.book1D("hSTimeCathode", "Cathode Only Segment Time [ns]",200,-200,200);
352  hSTimeCombined = ibooker.book1D("hSTimeCombined", "Segment Time (anode+cathode times) [ns]",200,-200,200);
353  hSTimeVsZ = ibooker.book2D("hSTimeVsZ","Segment Time vs. Z; [ns] vs. [cm]",200,-1200,1200,200,-200,200);
354  hSTimeVsTOF = ibooker.book2D("hSTimeVsTOF","Segment Time vs. Distance from IP; [ns] vs. [cm]",180,500,1400, 200,-200,200);
355 
356  // resolution
357  ibooker.setCurrentFolder("CSC/CSCOfflineMonitor/Resolution");
358 
359  hSResid.push_back(ibooker.book1D("hSResidm42","Fitted Position on Strip - Reconstructed for Layer 3 (ME -4/2); Strip Widths",100,-0.5,0.5));
360  hSResid.push_back(ibooker.book1D("hSResidm41","Fitted Position on Strip - Reconstructed for Layer 3 (ME -4/1); Strip Widths",100,-0.5,0.5));
361  hSResid.push_back(ibooker.book1D("hSResidm32","Fitted Position on Strip - Reconstructed for Layer 3 (ME -3/2); Strip Widths",100,-0.5,0.5));
362  hSResid.push_back(ibooker.book1D("hSResidm31","Fitted Position on Strip - Reconstructed for Layer 3 (ME -3/1); Strip Widths",100,-0.5,0.5));
363  hSResid.push_back(ibooker.book1D("hSResidm22","Fitted Position on Strip - Reconstructed for Layer 3 (ME -2/2); Strip Widths",100,-0.5,0.5));
364  hSResid.push_back(ibooker.book1D("hSResidm21","Fitted Position on Strip - Reconstructed for Layer 3 (ME -2/1); Strip Widths",100,-0.5,0.5));
365  hSResid.push_back(ibooker.book1D("hSResidm11a","Fitted Position on Strip - Reconstructed for Layer 3 (ME -1/1a); Strip Widths",100,-0.5,0.5));
366  hSResid.push_back(ibooker.book1D("hSResidm13","Fitted Position on Strip - Reconstructed for Layer 3 (ME -1/3); Strip Widths",100,-0.5,0.5));
367  hSResid.push_back(ibooker.book1D("hSResidm12","Fitted Position on Strip - Reconstructed for Layer 3 (ME -1/2); Strip Widths",100,-0.5,0.5));
368  hSResid.push_back(ibooker.book1D("hSResidm11b","Fitted Position on Strip - Reconstructed for Layer 3 (ME -1/1b); Strip Widths",100,-0.5,0.5));
369  hSResid.push_back(ibooker.book1D("hSResidp11b","Fitted Position on Strip - Reconstructed for Layer 3 (ME +1/1b); Strip Widths",100,-0.5,0.5));
370  hSResid.push_back(ibooker.book1D("hSResidp12","Fitted Position on Strip - Reconstructed for Layer 3 (ME +1/2); Strip Widths",100,-0.5,0.5));
371  hSResid.push_back(ibooker.book1D("hSResidp13","Fitted Position on Strip - Reconstructed for Layer 3 (ME +1/3); Strip Widths",100,-0.5,0.5));
372  hSResid.push_back(ibooker.book1D("hSResidp11a","Fitted Position on Strip - Reconstructed for Layer 3 (ME +1/1a); Strip Widths",100,-0.5,0.5));
373  hSResid.push_back(ibooker.book1D("hSResidp21","Fitted Position on Strip - Reconstructed for Layer 3 (ME +2/1); Strip Widths",100,-0.5,0.5));
374  hSResid.push_back(ibooker.book1D("hSResidp22","Fitted Position on Strip - Reconstructed for Layer 3 (ME +2/2); Strip Widths",100,-0.5,0.5));
375  hSResid.push_back(ibooker.book1D("hSResidp31","Fitted Position on Strip - Reconstructed for Layer 3 (ME +3/1); Strip Widths",100,-0.5,0.5));
376  hSResid.push_back(ibooker.book1D("hSResidp32","Fitted Position on Strip - Reconstructed for Layer 3 (ME +3/2); Strip Widths",100,-0.5,0.5));
377  hSResid.push_back(ibooker.book1D("hSResidp41","Fitted Position on Strip - Reconstructed for Layer 3 (ME +4/1); Strip Widths",100,-0.5,0.5));
378  hSResid.push_back(ibooker.book1D("hSResidp42","Fitted Position on Strip - Reconstructed for Layer 3 (ME +4/2); Strip Widths",100,-0.5,0.5));
379 
380  // efficiency
381  ibooker.setCurrentFolder("CSC/CSCOfflineMonitor/Efficiency");
382 
383  // hSSTE = ibooker.book1D("hSSTE","hSSTE",40,0.5,40.5);
384  // hRHSTE = ibooker.book1D("hRHSTE","hRHSTE",40,0.5,40.5);
385  hSnum = ibooker.book1D("hSnum", "CSC w rechits in 2+ layers && segment(s)", 20, 0.5, 20.5);
386  hSden = ibooker.book1D("hSden", "CSC w rechits in 2+ layers", 20, 0.5, 20.5);
387  hRHnum = ibooker.book1D("hRHnum", "CSC w segment(s) && rechits in 6 layers", 20, 0.5, 20.5);
388  hRHden = ibooker.book1D("hRHden", "CSC w segment(s)", 20, 0.5, 20.5);
393 
394  // hSEff = ibooker.book1D("hSEff","Segment Efficiency",20,0.5,20.5);
395  // hRHEff = ibooker.book1D("hRHEff","recHit Efficiency",20,0.5,20.5);
396  hSSTE2 = ibooker.book2D("hSSTE2","hSSTE2",36,0.5,36.5, 20, 0.5, 20.5);
397  hRHSTE2 = ibooker.book2D("hRHSTE2","hRHSTE2",36,0.5,36.5, 20, 0.5, 20.5);
398  hStripSTE2 = ibooker.book2D("hStripSTE2","hStripSTE2",36,0.5,36.5, 20, 0.5, 20.5);
399  hWireSTE2 = ibooker.book2D("hWireSTE2","hWireSTE2",36,0.5,36.5, 20, 0.5, 20.5);
400  hEffDenominator = ibooker.book2D("hEffDenominator","hEffDenominator",36,0.5,36.5, 20, 0.5, 20.5);
401  // hSEff2 = ibooker.book2D("hSEff2","Segment Efficiency 2D",36,0.5,36.5, 18, 0.5, 18.5);
402  // hRHEff2 = ibooker.book2D("hRHEff2","recHit Efficiency 2D",36,0.5,36.5, 18, 0.5, 18.5);
403  // hStripReadoutEff2 = ibooker.book2D("hStripReadoutEff2","strip readout ratio [(strip+clct+wires)/(clct+wires)] 2D",36,0.5,36.5, 20, 0.5, 20.5);
404  // hStripReadoutEff2->setAxisTitle("Chamber #");
405  // hStripEff2 = ibooker.book2D("hStripEff2","strip Efficiency 2D",36,0.5,36.5, 18, 0.5, 18.5);
406  // hWireEff2 = ibooker.book2D("hWireEff2","wire Efficiency 2D",36,0.5,36.5, 18, 0.5, 18.5);
407  hSensitiveAreaEvt = ibooker.book2D("hSensitiveAreaEvt","Events Passing Selection for Efficiency",36,0.5,36.5, 20, 0.5, 20.5);
408 
409  // bx monitor for trigger synchronization
410  ibooker.setCurrentFolder("CSC/CSCOfflineMonitor/BXMonitor");
411 
412  hALCTgetBX = ibooker.book1D("hALCTgetBX","ALCT position in ALCT-L1A match window [BX]",7,-0.5,6.5);
413  // hALCTgetBXChamberMeans = ibooker.book1D("hALCTgetBXChamberMeans","Chamber Mean ALCT position in ALCT-L1A match window [BX]",60,0,6);
414  hALCTgetBXSerial = ibooker.book2D("hALCTgetBXSerial","ALCT position in ALCT-L1A match window [BX]",601,-0.5,600.5,7,-0.5,6.5);
415  hALCTgetBXSerial->setAxisTitle("Chamber Serial Number");
416  hALCTgetBX2DNumerator = ibooker.book2D("hALCTgetBX2DNumerator","ALCT position in ALCT-L1A match window [BX] (sum)",36,0.5,36.5,20,0.5,20.5);
417  // hALCTgetBX2DMeans = ibooker.book2D("hALCTgetBX2DMeans","ALCT position in ALCT-L1A match window [BX]",36,0.5,36.5,20,0.5,20.5);
418  hALCTgetBX2Denominator = ibooker.book2D("hALCTgetBX2Denominator","Number of ALCT Digis checked",36,0.5,36.5,20,0.5,20.5);
419  // hALCTgetBX2DMeans->setAxisTitle("Chamber #");
420  hALCTgetBX2Denominator->setAxisTitle("Chamber #");
421  hALCTMatch = ibooker.book1D("hALCTMatch","ALCT position in ALCT-CLCT match window [BX]",7,-0.5,6.5);
422  // hALCTMatchChamberMeans = ibooker.book1D("hALCTMatchChamberMeans","Chamber Mean ALCT position in ALCT-CLCT match window [BX]",60,0,6);
423  hALCTMatchSerial = ibooker.book2D("hALCTMatchSerial","ALCT position in ALCT-CLCT match window [BX]",601,-0.5,600.5,7,-0.5,6.5);
424  hALCTMatchSerial->setAxisTitle("Chamber Serial Number");
425  hALCTMatch2DNumerator = ibooker.book2D("hALCTMatch2DNumerator","ALCT position in ALCT-CLCT match window [BX] (sum)",36,0.5,36.5,20,0.5,20.5);
426  // hALCTMatch2DMeans = ibooker.book2D("hALCTMatch2DMeans","ALCT position in ALCT-CLCT match window [BX]",36,0.5,36.5,20,0.5,20.5);
427  hALCTMatch2Denominator = ibooker.book2D("hALCTMatch2Denominator","Number of ALCT-CLCT matches checked",36,0.5,36.5,20,0.5,20.5);
428  // hALCTMatch2DMeans->setAxisTitle("Chamber #");
429  hALCTMatch2Denominator->setAxisTitle("Chamber #");
430  hCLCTL1A = ibooker.book1D("hCLCTL1A","L1A - CLCTpreTrigger at TMB [BX]",40,149.5,189.5);
431  // hCLCTL1AChamberMeans = ibooker.book1D("hCLCTL1AChamberMeans","Chamber Mean L1A - CLCTpreTrigger at TMB [BX]",90,150,159);
432  hCLCTL1ASerial = ibooker.book2D("hCLCTL1ASerial","L1A - CLCTpreTrigger at TMB [BX]",601,-0.5,600.5,40,149.5,189.5);
433  hCLCTL1ASerial->setAxisTitle("Chamber Serial Number");
434  hCLCTL1A2DNumerator = ibooker.book2D("hCLCTL1A2DNumerator","L1A - CLCTpreTrigger at TMB [BX] (sum)",36,0.5,36.5,20,0.5,20.5);
435  // hCLCTL1A2DMeans = ibooker.book2D("hCLCTL1A2DMeans","L1A - CLCTpreTrigger at TMB [BX]",36,0.5,36.5,20,0.5,20.5);
436  hCLCTL1A2Denominator = ibooker.book2D("hCLCTL1A2Denominator","Number of TMB CLCTs checked",36,0.5,36.5,20,0.5,20.5);
437 
438 
439  // labels
446  // applyCSClabels(hSEff, EXTENDED, X);
447  // applyCSClabels(hRHEff, EXTENDED, X);
448  // applyCSClabels(hSEff2, SMALL, Y);
451  // applyCSClabels(hRHEff2, SMALL, Y);
453  // applyCSClabels(hStripReadoutEff2, EXTENDED, Y);
454  // applyCSClabels(hStripEff2, SMALL, Y);
456  // applyCSClabels(hWireEff2, SMALL, Y);
459  // applyCSClabels(hALCTgetBX2DMeans, EXTENDED, Y);
461  // applyCSClabels(hALCTMatch2DMeans, EXTENDED, Y);
463  // applyCSClabels(hCLCTL1A2DMeans, EXTENDED, Y);
465 }
MonitorElement * hEffDenominator
MonitorElement * hOSegmentsSerial
MonitorElement * hRHden
MonitorElement * hOWireSerial
MonitorElement * hSensitiveAreaEvt
MonitorElement * hOStrips
MonitorElement * hORecHits
MonitorElement * hStripSTE2
void cd(void)
Definition: DQMStore.cc:266
MonitorElement * hALCTMatch2DNumerator
std::vector< MonitorElement * > hRHGlobal
MonitorElement * hORecHitsSerial
void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
std::vector< MonitorElement * > hSChiSq
MonitorElement * hWirenGroupsTotal
MonitorElement * hCLCTL1ASerial
MonitorElement * hOStripSerial
MonitorElement * hSSTE2
std::vector< MonitorElement * > hWireNumber
MonitorElement * hWireSTE2
MonitorElement * hSGlobalPhi
std::vector< MonitorElement * > hSnhits
MonitorElement * hOWires
MonitorElement * hSnSegments
std::vector< MonitorElement * > hRHSumQ
MonitorElement * hOStripsAndWiresAndCLCT
MonitorElement * hOSegments
std::vector< MonitorElement * > hStripPed
MonitorElement * hALCTMatchSerial
MonitorElement * hSnhitsAll
std::vector< MonitorElement * > hRHTiming
MonitorElement * hALCTgetBX
MonitorElement * hALCTMatch
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
MonitorElement * hSGlobalTheta
MonitorElement * hSTimeCombined
MonitorElement * hOWiresAndCLCT
std::vector< MonitorElement * > hRHsterr
MonitorElement * hSden
MonitorElement * hCLCTL1A2Denominator
MonitorElement * hALCTgetBX2Denominator
MonitorElement * hSTimeVsZ
MonitorElement * hRHSTE2
MonitorElement * hSChiSqAll
MonitorElement * hCSCOccupancy
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
MonitorElement * hCLCTL1A2DNumerator
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:133
MonitorElement * hALCTgetBX2DNumerator
std::vector< MonitorElement * > hStripNumber
MonitorElement * hALCTMatch2Denominator
std::vector< MonitorElement * > hWireTBin
MonitorElement * hCLCTL1A
MonitorElement * hSTimeCathode
std::vector< MonitorElement * > hRHstpos
MonitorElement * hStripNFired
std::vector< MonitorElement * > hSResid
MonitorElement * hALCTgetBXSerial
MonitorElement * hSTimeVsTOF
MonitorElement * hRHnrechits
MonitorElement * hSnum
std::vector< MonitorElement * > hSChiSqProb
std::vector< MonitorElement * > hRHTimingAnode
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
MonitorElement * hRHnum
MonitorElement * hSChiSqProbAll
std::vector< MonitorElement * > hRHRatioQ
void applyCSClabels(MonitorElement *meHisto, LabelType t, AxisType a)
int CSCOfflineMonitor::chamberSerial ( CSCDetId  id)
private

Definition at line 1780 of file CSCOfflineMonitor.cc.

1780  {
1781  int st = id.station();
1782  int ri = id.ring();
1783  int ch = id.chamber();
1784  int ec = id.endcap();
1785  int kSerial = ch;
1786  if (st == 1 && ri == 1) kSerial = ch;
1787  if (st == 1 && ri == 2) kSerial = ch + 36;
1788  if (st == 1 && ri == 3) kSerial = ch + 72;
1789  if (st == 1 && ri == 4) kSerial = ch;
1790  if (st == 2 && ri == 1) kSerial = ch + 108;
1791  if (st == 2 && ri == 2) kSerial = ch + 126;
1792  if (st == 3 && ri == 1) kSerial = ch + 162;
1793  if (st == 3 && ri == 2) kSerial = ch + 180;
1794  if (st == 4 && ri == 1) kSerial = ch + 216;
1795  if (st == 4 && ri == 2) kSerial = ch + 234; // from 2014
1796  if (ec == 2) kSerial = kSerial + 300;
1797  return kSerial;
1798 }
void CSCOfflineMonitor::doBXMonitor ( edm::Handle< CSCALCTDigiCollection alcts,
edm::Handle< CSCCLCTDigiCollection clcts,
const edm::Event event,
const edm::EventSetup eventSetup 
)
private

uncomment this for regional unpacking if (id!=SOME_ID) continue;

Take a reference to this FED's data

if fed has data then unpack it

get a pointer to data and pass it to constructor for unpacking

get a reference to dduData

set default detid to that for E=+z, S=1, R=1, C=1, L=1

skip the DDU if its data has serious errors define a mask for serious errors

get a reference to chamber data

first process chamber-wide digis such as LCT

default value for all digis not related to cfebs

layer=0 flags entire chamber

check alct data integrity

check tmb data integrity

Definition at line 1443 of file CSCOfflineMonitor.cc.

References CSCTMBHeader::ALCTMatchTime(), CSCTMBHeader::BXNCount(), CSCDetId::chamber(), DDVectorGetter::check(), CSCDCCExaminer::check(), CSCDCCExaminer::crcALCT(), CSCDCCExaminer::crcCFEB(), CSCDCCExaminer::crcTMB(), CSCDetId, FEDRawData::data(), data, CSCDCCEventData::dduData(), CSCCrateMap::detId(), CSCDetId::endcap(), CSCDCCExaminer::errors(), edm::EventSetup::get(), edm::Event::getByToken(), i, j, LogTrace, FEDNumbering::MAXCSCDDUFEDID, FEDNumbering::MAXCSCFEDID, FEDNumbering::MINCSCDDUFEDID, FEDNumbering::MINCSCFEDID, NULL, edm::ESHandle< class >::product(), lumiPlot::rawdata, DetId::rawId(), CSCDetId::ring(), CSCDCCExaminer::setMask(), FEDRawData::size(), and CSCDetId::station().

1444  {
1445 
1446  // Loop over ALCTDigis
1447 
1448  for (CSCALCTDigiCollection::DigiRangeIterator j=alcts->begin(); j!=alcts->end(); j++) {
1449  const CSCDetId& idALCT = (*j).first;
1450  const CSCALCTDigiCollection::Range& range =(*j).second;
1451  for (CSCALCTDigiCollection::const_iterator digiIt = range.first; digiIt!=range.second; ++digiIt){
1452  // Valid digi in the chamber (or in neighbouring chamber)
1453  if((*digiIt).isValid()){
1454  hALCTgetBX->Fill((*digiIt).getBX());
1455  hALCTgetBXSerial->Fill(chamberSerial(idALCT),(*digiIt).getBX());
1456  hALCTgetBX2DNumerator->Fill(idALCT.chamber(),typeIndex(idALCT,2),(*digiIt).getBX());
1457  hALCTgetBX2Denominator->Fill(idALCT.chamber(),typeIndex(idALCT,2));
1458  }
1459  }
1460  }// end ALCT Digi loop
1461 
1462 
1463  // Loop over raw data to get TMBHeader information
1464  // Taking code from EventFilter/CSCRawToDigis/CSCDCCUnpacker.cc
1466  eventSetup.get<CSCCrateMapRcd>().get(hcrate);
1467  const CSCCrateMap* pcrate = hcrate.product();
1468 
1469 
1470  // Try to get raw data
1472  if ( !( event.getByToken( rd_token, rawdata ) ) ){
1473  edm::LogWarning("CSCOfflineMonitor") << " FEDRawDataCollection not available";
1474  return;
1475  }
1476 
1477 
1478 
1479  bool goodEvent = false;
1480  unsigned long dccBinCheckMask = 0x06080016;
1481  unsigned int examinerMask = 0x1FEBF3F6;
1482  unsigned int errorMask = 0x0;
1483 
1484  // For new CSC readout layout, which doesn't include DCCs need to loop over DDU FED IDs.
1485  // DCC IDs are included for backward compatibility with old data
1486  std::vector<unsigned int> cscFEDids;
1487 
1488  for (unsigned int id=FEDNumbering::MINCSCFEDID;
1489  id<=FEDNumbering::MAXCSCFEDID; ++id) // loop over DCCs
1490  {
1491  cscFEDids.push_back(id);
1492  }
1493 
1494  for (unsigned int id=FEDNumbering::MINCSCDDUFEDID;
1495  id<=FEDNumbering::MAXCSCDDUFEDID; ++id) // loop over DDUs
1496  {
1497  cscFEDids.push_back(id);
1498  }
1499 
1500  for (unsigned int i=0; i<cscFEDids.size(); i++) // loop over all CSC FEDs (DCCs and DDUs)
1501  {
1502  unsigned int id = cscFEDids[i];
1503  bool isDDU_FED = ((id >= FEDNumbering::MINCSCDDUFEDID) && (id <= FEDNumbering::MAXCSCDDUFEDID))?true:false;
1504 
1507 
1509  const FEDRawData& fedData = rawdata->FEDData(id);
1510  unsigned long length = fedData.size();
1511 
1512  if (length>=32){
1513  CSCDCCExaminer* examiner = NULL;
1514  std::stringstream examiner_out, examiner_err;
1515  goodEvent = true;
1516  examiner = new CSCDCCExaminer();
1517  if( examinerMask&0x40000 ) examiner->crcCFEB(1);
1518  if( examinerMask&0x8000 ) examiner->crcTMB (1);
1519  if( examinerMask&0x0400 ) examiner->crcALCT(1);
1520  examiner->setMask(examinerMask);
1521  const short unsigned int *data = (short unsigned int *)fedData.data();
1522 
1523  int res = examiner->check(data,long(fedData.size()/2));
1524  if( res < 0 ) {
1525  goodEvent=false;
1526  }
1527  else {
1528  goodEvent=!(examiner->errors()&dccBinCheckMask);
1529  }
1530 
1531 
1532  if (goodEvent) {
1534 
1535  CSCDCCExaminer * ptrExaminer = examiner;
1536 
1537  std::vector<CSCDDUEventData> fed_Data;
1538  std::vector<CSCDDUEventData>* ptr_fedData = &fed_Data;
1539 
1540 
1541  if (isDDU_FED) // Use new DDU FED readout mode
1542  {
1543 
1544  CSCDDUEventData single_dduData((short unsigned int *) fedData.data(), ptrExaminer);
1545  fed_Data.push_back(single_dduData);
1546 
1547  }
1548  else // Use old DCC FED readout mode
1549  {
1550  CSCDCCEventData dccData((short unsigned int *) fedData.data(), ptrExaminer);
1551  fed_Data = dccData.dduData();
1552  }
1553 
1555  const std::vector<CSCDDUEventData> & dduData = *ptr_fedData;
1556 
1558  CSCDetId layer(1, 1, 1, 1, 1);
1559  for (unsigned int iDDU=0; iDDU<dduData.size(); ++iDDU) { // loop over DDUs
1562  if (dduData[iDDU].trailer().errorstat()&errorMask) {
1563  LogTrace("CSCDCCUnpacker|CSCRawToDigi") << "DDU# " << iDDU << " has serious error - no digis unpacked! " <<
1564  std::hex << dduData[iDDU].trailer().errorstat();
1565  continue; // to next iteration of DDU loop
1566  }
1567 
1569  const std::vector<CSCEventData> & cscData = dduData[iDDU].cscData();
1570 
1571 
1572  for (unsigned int iCSC=0; iCSC<cscData.size(); ++iCSC) { // loop over CSCs
1573 
1575  int vmecrate = cscData[iCSC].dmbHeader()->crateID();
1576  int dmb = cscData[iCSC].dmbHeader()->dmbID();
1577 
1578  int icfeb = 0;
1579  int ilayer = 0;
1580 
1581  if ((vmecrate>=1)&&(vmecrate<=60) && (dmb>=1)&&(dmb<=10)&&(dmb!=6)) {
1582  layer = pcrate->detId(vmecrate, dmb,icfeb,ilayer );
1583  }
1584  else{
1585  LogTrace ("CSCOfflineMonitor") << " detID input out of range!!! ";
1586  LogTrace ("CSCOfflineMonitor")
1587  << " skipping chamber vme= " << vmecrate << " dmb= " << dmb;
1588  continue; // to next iteration of iCSC loop
1589  }
1590 
1591 
1593  int nalct = cscData[iCSC].dmbHeader()->nalct();
1594  bool goodALCT=false;
1595  //if (nalct&&(cscData[iCSC].dataPresent>>6&0x1)==1) {
1596  if (nalct&&cscData[iCSC].alctHeader()) {
1597  if (cscData[iCSC].alctHeader()->check()){
1598  goodALCT=true;
1599  }
1600  }
1601 
1603  int nclct = cscData[iCSC].dmbHeader()->nclct();
1604  bool goodTMB=false;
1605  if (nclct&&cscData[iCSC].tmbData()) {
1606  if (cscData[iCSC].tmbHeader()->check()){
1607  if (cscData[iCSC].clctData()->check()) goodTMB=true;
1608  }
1609  }
1610 
1611  if (goodTMB && goodALCT) {
1612  const CSCTMBHeader *tmbHead = cscData[iCSC].tmbHeader();
1613  std::vector<CSCCLCTDigi> clcts = cscData[iCSC].tmbHeader()->CLCTDigis(layer.rawId());
1614  if (clcts.size()==0 || !(clcts[0].isValid()))
1615  continue;
1616  // Check if the CLCT was in ME11a (ring 4)
1617  if(layer.station()==1 && layer.ring() ==1 && clcts[0].getKeyStrip()>128){
1618  layer = CSCDetId(layer.endcap(),layer.station(),4, layer.chamber());
1619  }
1620  hALCTMatch->Fill(tmbHead->ALCTMatchTime());
1621  hALCTMatchSerial->Fill(chamberSerial(layer),tmbHead->ALCTMatchTime());
1622  // Only fill big 2D display if ALCTMatchTime !=6, since this bin is polluted by the CLCT only triggers
1623  // One will have to look at the serial plots to see if the are a lot of entries here
1624  if(tmbHead->ALCTMatchTime()!=6){
1625  hALCTMatch2DNumerator->Fill(layer.chamber(),typeIndex(layer,2),tmbHead->ALCTMatchTime());
1626  hALCTMatch2Denominator->Fill(layer.chamber(),typeIndex(layer,2));
1627  }
1628 
1629  int TMB_CLCTpre_rel_L1A = tmbHead->BXNCount()-clcts[0].getFullBX();
1630  if (TMB_CLCTpre_rel_L1A > 3563)
1631  TMB_CLCTpre_rel_L1A = TMB_CLCTpre_rel_L1A - 3564;
1632  if (TMB_CLCTpre_rel_L1A < 0)
1633  TMB_CLCTpre_rel_L1A = TMB_CLCTpre_rel_L1A + 3564;
1634 
1635  hCLCTL1A->Fill(TMB_CLCTpre_rel_L1A);
1636  hCLCTL1ASerial->Fill(chamberSerial(layer),TMB_CLCTpre_rel_L1A);
1637  hCLCTL1A2DNumerator->Fill(layer.chamber(),typeIndex(layer,2),TMB_CLCTpre_rel_L1A);
1638  hCLCTL1A2Denominator->Fill(layer.chamber(),typeIndex(layer,2));
1639 
1640  }// end if goodTMB and goodALCT
1641  }// end loop CSCData
1642  }// end loop DDU
1643  }// end if good event
1644  if (examiner!=NULL) delete examiner;
1645  }// end if non-zero fed data
1646  }// end DCC loop for NON-REFERENCE
1647 
1648  return;
1649 
1650 }
uint16_t BXNCount() const
Definition: CSCTMBHeader.h:41
01/20/05 A.Tumanov
int chamber() const
Definition: CSCDetId.h:81
void crcCFEB(bool enable)
int i
Definition: DBlmapReader.cc:9
int chamberSerial(CSCDetId id)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:449
CSCDetId detId(int vme, int dmb, int cfeb, int layer=0) const
Definition: CSCCrateMap.cc:11
MonitorElement * hALCTMatch2DNumerator
const std::vector< CSCDDUEventData > & dduData() const
accessor to dduData
#define NULL
Definition: scimark2.h:8
MonitorElement * hCLCTL1ASerial
ExaminerStatusType errors(void) const
void crcALCT(bool enable)
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:47
void Fill(long long x)
edm::EDGetTokenT< FEDRawDataCollection > rd_token
bool check(const std::string &)
MonitorElement * hALCTMatchSerial
int typeIndex(CSCDetId id, int flag=1)
MonitorElement * hALCTgetBX
MonitorElement * hALCTMatch
void crcTMB(bool enable)
int j
Definition: DBlmapReader.cc:9
MonitorElement * hCLCTL1A2Denominator
MonitorElement * hALCTgetBX2Denominator
#define LogTrace(id)
uint16_t ALCTMatchTime() const
Definition: CSCTMBHeader.h:44
MonitorElement * hCLCTL1A2DNumerator
MonitorElement * hALCTgetBX2DNumerator
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:86
MonitorElement * hALCTMatch2Denominator
std::vector< CSCALCTDigi >::const_iterator const_iterator
MonitorElement * hCLCTL1A
int32_t check(const uint16_t *&buffer, int32_t length)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
std::pair< const_iterator, const_iterator > Range
MonitorElement * hALCTgetBXSerial
dictionary rawdata
Definition: lumiPlot.py:393
void setMask(ExaminerMaskType mask)
void CSCOfflineMonitor::doEfficiencies ( edm::Handle< CSCWireDigiCollection wires,
edm::Handle< CSCStripDigiCollection strips,
edm::Handle< CSCRecHit2DCollection recHits,
edm::Handle< CSCSegmentCollection cscSegments,
edm::ESHandle< CSCGeometry cscGeom 
)
private

Definition at line 1142 of file CSCOfflineMonitor.cc.

References newFWLiteAna::bin, CSCDetId::chamber(), CSCChamberSpecs::chamberTypeName(), CSCDetId, diffTreeTool::diff, CSCDetId::endcap(), plotBeamSpotDB::first, CSCLayer::geometry(), CSCChamber::id(), CSCChamber::layer(), CSCDetId::layer(), CSCSegment::localDirection(), CSCSegment::localPosition(), TrapezoidalPlaneBounds::parameters(), CSCDetId::ring(), CSCChamber::specs(), CSCDetId::station(), dtDQMClient_cfg::threshold, GeomDet::toGlobal(), GeomDet::toLocal(), histoStyle::weight, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

1144  {
1145 
1146  bool allWires[2][4][4][36][6];
1147  bool allStrips[2][4][4][36][6];
1148  bool AllRecHits[2][4][4][36][6];
1149  bool AllSegments[2][4][4][36];
1150 
1151  //bool MultiSegments[2][4][4][36];
1152  for(int iE = 0;iE<2;iE++){
1153  for(int iS = 0;iS<4;iS++){
1154  for(int iR = 0; iR<4;iR++){
1155  for(int iC =0;iC<36;iC++){
1156  AllSegments[iE][iS][iR][iC] = false;
1157  //MultiSegments[iE][iS][iR][iC] = false;
1158  for(int iL=0;iL<6;iL++){
1159  allWires[iE][iS][iR][iC][iL] = false;
1160  allStrips[iE][iS][iR][iC][iL] = false;
1161  AllRecHits[iE][iS][iR][iC][iL] = false;
1162  }
1163  }
1164  }
1165  }
1166  }
1167 
1168 
1169  // Wires
1170  for (CSCWireDigiCollection::DigiRangeIterator dWDiter=wires->begin(); dWDiter!=wires->end(); dWDiter++) {
1171  CSCDetId idrec = (CSCDetId)(*dWDiter).first;
1172  std::vector<CSCWireDigi>::const_iterator wireIter = (*dWDiter).second.first;
1173  std::vector<CSCWireDigi>::const_iterator lWire = (*dWDiter).second.second;
1174  for( ; wireIter != lWire; ++wireIter) {
1175  allWires[idrec.endcap() -1][idrec.station() -1][idrec.ring() -1][idrec.chamber() -1][idrec.layer() -1] = true;
1176  break;
1177  }
1178  }
1179 
1180  //---- STRIPS
1181  for (CSCStripDigiCollection::DigiRangeIterator dSDiter=strips->begin(); dSDiter!=strips->end(); dSDiter++) {
1182  CSCDetId idrec = (CSCDetId)(*dSDiter).first;
1183  std::vector<CSCStripDigi>::const_iterator stripIter = (*dSDiter).second.first;
1184  std::vector<CSCStripDigi>::const_iterator lStrip = (*dSDiter).second.second;
1185  for( ; stripIter != lStrip; ++stripIter) {
1186  std::vector<int> myADCVals = stripIter->getADCCounts();
1187  bool thisStripFired = false;
1188  float thisPedestal = 0.5*(float)(myADCVals[0]+myADCVals[1]);
1189  float threshold = 13.3 ;
1190  float diff = 0.;
1191  for (unsigned int iCount = 0; iCount < myADCVals.size(); iCount++) {
1192  diff = (float)myADCVals[iCount]-thisPedestal;
1193  if (diff > threshold) {
1194  thisStripFired = true;
1195  break;
1196  }
1197  }
1198  if(thisStripFired){
1199  allStrips[idrec.endcap() -1][idrec.station() -1][idrec.ring() -1][idrec.chamber() -1][idrec.layer() -1] = true;
1200  break;
1201  }
1202  }
1203  }
1204 
1205  // Rechits
1206  for (CSCRecHit2DCollection::const_iterator recEffIt = recHits->begin(); recEffIt != recHits->end(); recEffIt++) {
1207  //CSCDetId idrec = (CSCDetId)(*recIt).cscDetId();
1208  CSCDetId idrec = (CSCDetId)(*recEffIt).cscDetId();
1209  AllRecHits[idrec.endcap() -1][idrec.station() -1][idrec.ring() -1][idrec.chamber() -1][idrec.layer() -1] = true;
1210 
1211  }
1212 
1213  std::vector <uint> seg_ME2(2,0) ;
1214  std::vector <uint> seg_ME3(2,0) ;
1215  std::vector < pair <CSCDetId, CSCSegment> > theSegments(4);
1216  // Segments
1217  for(CSCSegmentCollection::const_iterator segEffIt=cscSegments->begin(); segEffIt != cscSegments->end(); segEffIt++) {
1218  CSCDetId idseg = (CSCDetId)(*segEffIt).cscDetId();
1219  //if(AllSegments[idrec.endcap() -1][idrec.station() -1][idrec.ring() -1][idrec.chamber()]){
1220  //MultiSegments[idrec.endcap() -1][idrec.station() -1][idrec.ring() -1][idrec.chamber()] = true;
1221  //}
1222  AllSegments[idseg.endcap() -1][idseg.station() -1][idseg.ring() -1][idseg.chamber() -1] = true;
1223  // "Intrinsic" efficiency measurement relies on "good" segment extrapolation - we need the pre-selection below
1224  // station 2 "good" segment will be used for testing efficiencies in ME1 and ME3
1225  // station 3 "good" segment will be used for testing efficiencies in ME2 and ME4
1226  if(2==idseg.station() || 3==idseg.station()){
1227  uint seg_tmp ;
1228  if(2==idseg.station()){
1229  ++seg_ME2[idseg.endcap() -1];
1230  seg_tmp = seg_ME2[idseg.endcap() -1];
1231  }
1232  else{
1233  ++seg_ME3[idseg.endcap() -1];
1234  seg_tmp = seg_ME3[idseg.endcap() -1];
1235  }
1236  // is the segment good
1237  if(1== seg_tmp&& 6==(*segEffIt).nRecHits() && (*segEffIt).chi2()/(*segEffIt).degreesOfFreedom()<3.){
1238  pair <CSCDetId, CSCSegment> specSeg = make_pair( (CSCDetId)(*segEffIt).cscDetId(),*segEffIt);
1239  theSegments[2*(idseg.endcap()-1)+(idseg.station() -2)] = specSeg;
1240  }
1241  }
1242  /*
1243  if(2==idseg.station()){
1244  ++seg_ME2[idseg.endcap() -1];
1245  if(1==seg_ME2[idseg.endcap() -1] && 6==(*segEffIt).nRecHits() && (*segEffIt).chi2()/(*segEffIt).degreesOfFreedom()<3.){
1246  pair <CSCDetId, CSCSegment> specSeg = make_pair( (CSCDetId)(*segEffIt).cscDetId(),*segEffIt);
1247  theSegments[2*(idseg.endcap()-1)+(idseg.station() -2)] = specSeg;
1248  }
1249  }
1250  else if(3==idseg.station()){
1251  ++seg_ME3[idseg.endcap() -1];
1252  if(1==seg_ME3[idseg.endcap() -1] && 6==(*segEffIt).nRecHits() && (*segEffIt).chi2()/(*segEffIt).degreesOfFreedom()<3.){
1253  pair <CSCDetId, CSCSegment> specSeg = make_pair( (CSCDetId)(*segEffIt).cscDetId(),*segEffIt);
1254  theSegments[2*(idseg.endcap()-1)+(idseg.station() -2)] = specSeg;
1255  }
1256  }
1257  */
1258 
1259  }
1260  // Simple efficiency calculations
1261  for(int iE = 0;iE<2;iE++){
1262  for(int iS = 0;iS<4;iS++){
1263  for(int iR = 0; iR<4;iR++){
1264  for(int iC =0;iC<36;iC++){
1265  int NumberOfLayers = 0;
1266  for(int iL=0;iL<6;iL++){
1267  if(AllRecHits[iE][iS][iR][iC][iL]){
1268  NumberOfLayers++;
1269  }
1270  }
1271  int bin = 0;
1272  if (iS==0) bin = iR+1+(iE*10);
1273  else bin = (iS+1)*2 + (iR+1) + (iE*10);
1274  if(NumberOfLayers>1){
1275  //if(!(MultiSegments[iE][iS][iR][iC])){
1276  if(AllSegments[iE][iS][iR][iC]){
1277  //---- Efficient segment evenents
1278  hSnum->Fill(bin);
1279  }
1280  //---- All segment events (normalization)
1281  hSden->Fill(bin);
1282  //}
1283  }
1284  if(AllSegments[iE][iS][iR][iC]){
1285  if(NumberOfLayers==6){
1286  //---- Efficient rechit events
1287  hRHnum->Fill(bin);;
1288  }
1289  //---- All rechit events (normalization)
1290  hRHden->Fill(bin);;
1291  }
1292  }
1293  }
1294  }
1295  }
1296 
1297  // pick a segment only if there are no others in the station
1298  std::vector < pair <CSCDetId, CSCSegment> * > theSeg;
1299  if(1==seg_ME2[0]) theSeg.push_back(&theSegments[0]);
1300  if(1==seg_ME3[0]) theSeg.push_back(&theSegments[1]);
1301  if(1==seg_ME2[1]) theSeg.push_back(&theSegments[2]);
1302  if(1==seg_ME3[1]) theSeg.push_back(&theSegments[3]);
1303 
1304  // Needed for plots
1305  // at the end the chamber types will be numbered as 1 to 20
1306  // (ME-4./2, ME-4/1, -ME3/2, -ME3/1, ..., +ME3/1, +ME3/2, ME+4/1, ME+4/2)
1307  std::map <std::string, float> chamberTypes;
1308  chamberTypes["ME1/a"] = 0.5;
1309  chamberTypes["ME1/b"] = 1.5;
1310  chamberTypes["ME1/2"] = 2.5;
1311  chamberTypes["ME1/3"] = 3.5;
1312  chamberTypes["ME2/1"] = 4.5;
1313  chamberTypes["ME2/2"] = 5.5;
1314  chamberTypes["ME3/1"] = 6.5;
1315  chamberTypes["ME3/2"] = 7.5;
1316  chamberTypes["ME4/1"] = 8.5;
1317  chamberTypes["ME4/2"] = 9.5;
1318 
1319  if(theSeg.size()){
1320  std::map <int , GlobalPoint> extrapolatedPoint;
1321  std::map <int , GlobalPoint>::iterator it;
1322  const CSCGeometry::ChamberContainer& ChamberContainer = cscGeom->chambers();
1323  // Pick which chamber with which segment to test
1324  for(unsigned int nCh=0;nCh<ChamberContainer.size();nCh++){
1325  const CSCChamber *cscchamber = ChamberContainer[nCh];
1326  pair <CSCDetId, CSCSegment> * thisSegment = 0;
1327  for(uint iSeg =0;iSeg<theSeg.size();++iSeg ){
1328  if(cscchamber->id().endcap() == theSeg[iSeg]->first.endcap()){
1329  if(1==cscchamber->id().station() || 3==cscchamber->id().station() ){
1330  if(2==theSeg[iSeg]->first.station()){
1331  thisSegment = theSeg[iSeg];
1332  }
1333  }
1334  else if (2==cscchamber->id().station() || 4==cscchamber->id().station()){
1335  if(3==theSeg[iSeg]->first.station()){
1336  thisSegment = theSeg[iSeg];
1337  }
1338  }
1339  }
1340  }
1341  // this chamber is to be tested with thisSegment
1342  if(thisSegment){
1343  CSCSegment * seg = &(thisSegment->second);
1344  const CSCChamber *segChamber = cscGeom->chamber(thisSegment->first);
1345  LocalPoint localCenter(0.,0.,0);
1346  GlobalPoint cscchamberCenter = cscchamber->toGlobal(localCenter);
1347  // try to save some time (extrapolate a segment to a certain position only once)
1348  it = extrapolatedPoint.find(int(cscchamberCenter.z()));
1349  if(it==extrapolatedPoint.end()){
1350  GlobalPoint segPos = segChamber->toGlobal(seg->localPosition());
1351  GlobalVector segDir = segChamber->toGlobal(seg->localDirection());
1352  double paramaterLine = lineParametrization(segPos.z(),cscchamberCenter.z() , segDir.z());
1353  double xExtrapolated = extrapolate1D(segPos.x(),segDir.x(), paramaterLine);
1354  double yExtrapolated = extrapolate1D(segPos.y(),segDir.y(), paramaterLine);
1355  GlobalPoint globP (xExtrapolated, yExtrapolated, cscchamberCenter.z());
1356  extrapolatedPoint[int(cscchamberCenter.z())] = globP;
1357  }
1358  // Where does the extrapolated point lie in the (tested) chamber local frame? Here:
1359  LocalPoint extrapolatedPointLocal = cscchamber->toLocal(extrapolatedPoint[int(cscchamberCenter.z())]);
1360  const CSCLayer *layer_p = cscchamber->layer(1);//layer 1
1361  const CSCLayerGeometry *layerGeom = layer_p->geometry ();
1362  const std::array<const float, 4> & layerBounds = layerGeom->parameters ();
1363  float shiftFromEdge = 15.;//cm
1364  float shiftFromDeadZone = 10.;
1365  // is the extrapolated point within a sensitive region
1366  bool pass = withinSensitiveRegion(extrapolatedPointLocal, layerBounds,
1367  cscchamber->id().station(), cscchamber->id().ring(),
1368  shiftFromEdge, shiftFromDeadZone);
1369  if(pass){// the extrapolation point of the segment lies within sensitive region of that chamber
1370  // how many rechit layers are there in the chamber?
1371  // 0 - maybe the muon died or is deflected at large angle? do not use that case
1372  // 1 - could be noise...
1373  // 2 or more - this is promissing; this is our definition of a reliable signal; use it below
1374  // is other definition better?
1375  int nRHLayers = 0;
1376  for(int iL =0;iL<6;++iL){
1377  if(AllRecHits[cscchamber->id().endcap()-1]
1378  [cscchamber->id().station()-1]
1379  [cscchamber->id().ring()-1][cscchamber->id().chamber()-1][iL]){
1380  ++nRHLayers;
1381  }
1382  }
1383  //std::cout<<" nRHLayers = "<<nRHLayers<<std::endl;
1384  float verticalScale = chamberTypes[cscchamber->specs()->chamberTypeName()];
1385  if(cscchamberCenter.z()<0){
1386  verticalScale = - verticalScale;
1387  }
1388  verticalScale += 10.5;
1389  hSensitiveAreaEvt->Fill(float(cscchamber->id().chamber()),verticalScale);
1390  if(nRHLayers>1){// this chamber contains a reliable signal
1391  //chamberTypes[cscchamber->specs()->chamberTypeName()];
1392  // "intrinsic" efficiencies
1393  //std::cout<<" verticalScale = "<<verticalScale<<" chType = "<<cscchamber->specs()->chamberTypeName()<<std::endl;
1394  // this is the denominator forr all efficiencies
1395  hEffDenominator->Fill(float(cscchamber->id().chamber()),verticalScale);
1396  // Segment efficiency
1397  if(AllSegments[cscchamber->id().endcap()-1]
1398  [cscchamber->id().station()-1]
1399  [cscchamber->id().ring()-1][cscchamber->id().chamber()-1]){
1400  hSSTE2->Fill(float(cscchamber->id().chamber()),float(verticalScale));
1401  }
1402 
1403  for(int iL =0;iL<6;++iL){
1404  float weight = 1./6.;
1405  // one shold account for the weight in the efficiency...
1406  // Rechit efficiency
1407  if(AllRecHits[cscchamber->id().endcap()-1]
1408  [cscchamber->id().station()-1]
1409  [cscchamber->id().ring()-1][cscchamber->id().chamber()-1][iL]){
1410  hRHSTE2->Fill(float(cscchamber->id().chamber()),float(verticalScale),weight);
1411  }
1412  // Wire efficiency
1413  if(allWires[cscchamber->id().endcap()-1]
1414  [cscchamber->id().station()-1]
1415  [cscchamber->id().ring()-1][cscchamber->id().chamber()-1][iL]){
1416  // one shold account for the weight in the efficiency...
1417  hWireSTE2->Fill(float(cscchamber->id().chamber()),float(verticalScale),weight);
1418  }
1419  // Strip efficiency
1420  if(allStrips[cscchamber->id().endcap()-1]
1421  [cscchamber->id().station()-1]
1422  [cscchamber->id().ring()-1][cscchamber->id().chamber()-1][iL]){
1423  // one shold account for the weight in the efficiency...
1424  hStripSTE2->Fill(float(cscchamber->id().chamber()),float(verticalScale),weight);
1425  }
1426  }
1427  }
1428  }
1429  }
1430  }
1431  }
1432  //
1433 
1434 
1435 }
MonitorElement * hEffDenominator
int chamber() const
Definition: CSCDetId.h:81
MonitorElement * hRHden
MonitorElement * hSensitiveAreaEvt
virtual const std::array< const float, 4 > parameters() const
CSCDetId id() const
Get the (concrete) DetId.
Definition: CSCChamber.h:37
MonitorElement * hStripSTE2
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:52
T y() const
Definition: PV3DBase.h:63
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:67
MonitorElement * hSSTE2
MonitorElement * hWireSTE2
int layer() const
Definition: CSCDetId.h:74
void Fill(long long x)
std::string chamberTypeName() const
int endcap() const
Definition: CSCDetId.h:106
LocalPoint localPosition() const
Definition: CSCSegment.h:38
LocalVector localDirection() const
Local direction.
Definition: CSCSegment.h:41
const CSCChamberSpecs * specs() const
Definition: CSCChamber.h:42
T z() const
Definition: PV3DBase.h:64
const CSCLayer * layer(CSCDetId id) const
Return the layer corresponding to the given id.
Definition: CSCChamber.cc:39
MonitorElement * hSden
int ring() const
Definition: CSCDetId.h:88
MonitorElement * hRHSTE2
bool withinSensitiveRegion(LocalPoint localPos, const std::array< const float, 4 > &layerBounds, int station, int ring, float shiftFromEdge, float shiftFromDeadZone)
std::vector< const CSCChamber * > ChamberContainer
Definition: CSCGeometry.h:32
int station() const
Definition: CSCDetId.h:99
int weight
Definition: histoStyle.py:50
MonitorElement * hSnum
double extrapolate1D(double initPosition, double initDirection, double parameterOfTheLine)
double lineParametrization(double z1Position, double z2Position, double z1Direction)
T x() const
Definition: PV3DBase.h:62
MonitorElement * hRHnum
const CSCLayerGeometry * geometry() const
Definition: CSCLayer.h:47
void CSCOfflineMonitor::doOccupancies ( edm::Handle< CSCStripDigiCollection strips,
edm::Handle< CSCWireDigiCollection wires,
edm::Handle< CSCRecHit2DCollection recHits,
edm::Handle< CSCSegmentCollection cscSegments,
edm::Handle< CSCCLCTDigiCollection clcts 
)
private

Definition at line 510 of file CSCOfflineMonitor.cc.

References EnergyCorrector::c, CSCDetId::chamber(), CSCDetId, diffTreeTool::diff, alignCSCRings::e, CSCDetId::endcap(), j, alignCSCRings::r, CSCDetId::ring(), alignCSCRings::s, CSCDetId::station(), and dtDQMClient_cfg::threshold.

512  {
513 
514  bool clcto[2][4][4][36];
515  bool wireo[2][4][4][36];
516  bool stripo[2][4][4][36];
517  bool rechito[2][4][4][36];
518  bool segmento[2][4][4][36];
519 
520  bool hasWires = false;
521  bool hasStrips = false;
522  bool hasRecHits = false;
523  bool hasSegments = false;
524 
525  for (int e = 0; e < 2; e++){
526  for (int s = 0; s < 4; s++){
527  for (int r = 0; r < 4; r++){
528  for (int c = 0; c < 36; c++){
529  clcto[e][s][r][c] = false;
530  wireo[e][s][r][c] = false;
531  stripo[e][s][r][c] = false;
532  rechito[e][s][r][c] = false;
533  segmento[e][s][r][c] = false;
534  }
535  }
536  }
537  }
538 
539  //clcts
540  for (CSCCLCTDigiCollection::DigiRangeIterator j=clcts->begin(); j!=clcts->end(); j++) {
541  CSCDetId id = (CSCDetId)(*j).first;
542  int kEndcap = id.endcap();
543  int kRing = id.ring();
544  int kStation = id.station();
545  int kChamber = id.chamber();
546  const CSCCLCTDigiCollection::Range& range =(*j).second;
547  for (CSCCLCTDigiCollection::const_iterator digiIt = range.first; digiIt!=range.second; ++digiIt){
548  // Valid digi in the chamber (or in neighbouring chamber)
549  if((*digiIt).isValid()){
550  //Check whether this CLCT came from ME11a
551  if( kStation ==1 && kRing==1 && (*digiIt).getKeyStrip()>128)
552  kRing = 4;
553  clcto[kEndcap-1][kStation-1][kRing-1][kChamber-1] = true;
554  }
555  }
556  }
557 
558  //wires
559  for (CSCWireDigiCollection::DigiRangeIterator wi=wires->begin(); wi!=wires->end(); wi++) {
560  CSCDetId id = (CSCDetId)(*wi).first;
561  int kEndcap = id.endcap();
562  int kRing = id.ring();
563  int kStation = id.station();
564  int kChamber = id.chamber();
565  std::vector<CSCWireDigi>::const_iterator wireIt = (*wi).second.first;
566  std::vector<CSCWireDigi>::const_iterator lastWire = (*wi).second.second;
567  for( ; wireIt != lastWire; ++wireIt){
568  if (!wireo[kEndcap-1][kStation-1][kRing-1][kChamber-1]){
569  wireo[kEndcap-1][kStation-1][kRing-1][kChamber-1] = true;
570  hOWires->Fill(kChamber,typeIndex(id,2));
572  hasWires = true;
573  if( clcto[kEndcap-1][kStation-1][kRing-1][kChamber-1])
574  hOWiresAndCLCT->Fill(kChamber,typeIndex(id,2));
575  //Also check for a CLCT in ME11a if you're in ME11 already
576  if (kStation==1 && kRing==1 && clcto[kEndcap-1][kStation-1][3][kChamber-1]){
577  CSCDetId idME11a = CSCDetId(kEndcap, kStation, 4, kChamber);
578  hOWiresAndCLCT->Fill(kChamber,typeIndex(idME11a,2));
579  }
580  }
581  }//end for loop
582  }
583 
584  //strips
585  for (CSCStripDigiCollection::DigiRangeIterator si=strips->begin(); si!=strips->end(); si++) {
586  CSCDetId id = (CSCDetId)(*si).first;
587  int kEndcap = id.endcap();
588  int kRing = id.ring();
589  int kStation = id.station();
590  int kChamber = id.chamber();
591  std::vector<CSCStripDigi>::const_iterator stripIt = (*si).second.first;
592  std::vector<CSCStripDigi>::const_iterator lastStrip = (*si).second.second;
593  for( ; stripIt != lastStrip; ++stripIt) {
594  std::vector<int> myADCVals = stripIt->getADCCounts();
595  bool thisStripFired = false;
596  float thisPedestal = 0.5*(float)(myADCVals[0]+myADCVals[1]);
597  float threshold = 13.3 ;
598  float diff = 0.;
599  for (unsigned int iCount = 0; iCount < myADCVals.size(); iCount++) {
600  diff = (float)myADCVals[iCount]-thisPedestal;
601  if (diff > threshold) { thisStripFired = true; }
602  }
603  if (thisStripFired) {
604  if (!stripo[kEndcap-1][kStation-1][kRing-1][kChamber-1]){
605  stripo[kEndcap-1][kStation-1][kRing-1][kChamber-1] = true;
606  hOStrips->Fill(kChamber,typeIndex(id,2));
608  hasStrips = true;
609  if (clcto[kEndcap-1][kStation-1][kRing-1][kChamber-1]){
610  // check if there is a wire digi in this chamber too
611  // for ME 1/4 check for a wire in ME 1/1
612  if(wireo[kEndcap-1][kStation-1][kRing-1][kChamber-1] || (kRing==4 && wireo[kEndcap-1][kStation-1][0][kChamber-1]) ){
613  hOStripsAndWiresAndCLCT->Fill(kChamber,typeIndex(id,2));
614  }
615  }//end clct and wire digi check
616  }
617  }//end if (thisStripFired)
618  }
619  }
620 
621  //rechits
623  for (recIt = recHits->begin(); recIt != recHits->end(); recIt++) {
624  CSCDetId idrec = (CSCDetId)(*recIt).cscDetId();
625  int kEndcap = idrec.endcap();
626  int kRing = idrec.ring();
627  int kStation = idrec.station();
628  int kChamber = idrec.chamber();
629  if (!rechito[kEndcap-1][kStation-1][kRing-1][kChamber-1]){
630  rechito[kEndcap-1][kStation-1][kRing-1][kChamber-1] = true;
632  hORecHits->Fill(kChamber,typeIndex(idrec,2));
633  hasRecHits = true;
634  }
635  }
636 
637  //segments
638  for(CSCSegmentCollection::const_iterator segIt=cscSegments->begin(); segIt != cscSegments->end(); segIt++) {
639  CSCDetId id = (CSCDetId)(*segIt).cscDetId();
640  int kEndcap = id.endcap();
641  int kRing = id.ring();
642  int kStation = id.station();
643  int kChamber = id.chamber();
644  if (!segmento[kEndcap-1][kStation-1][kRing-1][kChamber-1]){
645  segmento[kEndcap-1][kStation-1][kRing-1][kChamber-1] = true;
647  hOSegments->Fill(kChamber,typeIndex(id,2));
648  hasSegments = true;
649  }
650  }
651 
652  //Overall CSC Occupancy
653  hCSCOccupancy->Fill(1);
654  if (hasWires) hCSCOccupancy->Fill(3);
655  if (hasStrips) hCSCOccupancy->Fill(5);
656  if (hasWires && hasStrips) hCSCOccupancy->Fill(7);
657  if (hasRecHits) hCSCOccupancy->Fill(9);
658  if (hasSegments) hCSCOccupancy->Fill(11);
659 
660 
661  }
MonitorElement * hOSegmentsSerial
int chamber() const
Definition: CSCDetId.h:81
MonitorElement * hOWireSerial
MonitorElement * hOStrips
int chamberSerial(CSCDetId id)
MonitorElement * hORecHits
MonitorElement * hORecHitsSerial
MonitorElement * hOStripSerial
void Fill(long long x)
MonitorElement * hOWires
int endcap() const
Definition: CSCDetId.h:106
MonitorElement * hOStripsAndWiresAndCLCT
MonitorElement * hOSegments
int typeIndex(CSCDetId id, int flag=1)
int j
Definition: DBlmapReader.cc:9
MonitorElement * hOWiresAndCLCT
int ring() const
Definition: CSCDetId.h:88
MonitorElement * hCSCOccupancy
std::vector< CSCCLCTDigi >::const_iterator const_iterator
int station() const
Definition: CSCDetId.h:99
std::pair< const_iterator, const_iterator > Range
void CSCOfflineMonitor::doPedestalNoise ( edm::Handle< CSCStripDigiCollection strips,
edm::ESHandle< CSCGeometry cscGeom 
)
private

Definition at line 741 of file CSCOfflineMonitor.cc.

References CSCDetId, CSCDetId::station(), and dtDQMClient_cfg::threshold.

742  {
743 
744  for (CSCStripDigiCollection::DigiRangeIterator dPNiter=strips->begin(); dPNiter!=strips->end(); dPNiter++) {
745  CSCDetId id = (CSCDetId)(*dPNiter).first;
746  int kStation = id.station();
747  int kRing = id.ring();
748  std::vector<CSCStripDigi>::const_iterator pedIt = (*dPNiter).second.first;
749  std::vector<CSCStripDigi>::const_iterator lStrip = (*dPNiter).second.second;
750  for( ; pedIt != lStrip; ++pedIt) {
751  int myStrip = pedIt->getStrip();
752  std::vector<int> myADCVals = pedIt->getADCCounts();
753  float TotalADC = getSignal(*strips, id, myStrip);
754  bool thisStripFired = false;
755  float thisPedestal = 0.5*(float)(myADCVals[0]+myADCVals[1]);
756  float thisSignal = (1./6)*(myADCVals[2]+myADCVals[3]+myADCVals[4]+myADCVals[5]+myADCVals[6]+myADCVals[7]);
757  float threshold = 13.3;
758 
759  // Why is this code block even here? Doesn't use myStrip after setting it (converts channel to strip
760  // for ganged ME11A
761  if( (kStation == 1 && kRing == 4) && cscGeom->gangedStrips() )
762  {
763  kRing = 1;
764  if(myStrip <= 16) myStrip += 64; // no trapping for any bizarreness
765  }
766 
767  if (TotalADC > threshold) { thisStripFired = true;}
768  if (!thisStripFired){
769  float ADC = thisSignal - thisPedestal;
770  hStripPed[typeIndex(id)-1]->Fill(ADC);
771  }
772  }
773  }
774 
775 }
float getSignal(const CSCStripDigiCollection &stripdigis, CSCDetId idRH, int centerStrip)
std::vector< MonitorElement * > hStripPed
int typeIndex(CSCDetId id, int flag=1)
int station() const
Definition: CSCDetId.h:99
void CSCOfflineMonitor::doRecHits ( edm::Handle< CSCRecHit2DCollection recHits,
edm::Handle< CSCStripDigiCollection strips,
edm::ESHandle< CSCGeometry cscGeom 
)
private

Find the charge associated with this hit

Definition at line 784 of file CSCOfflineMonitor.cc.

References CSCDetId, CSCDetId::endcap(), i, j, CSCDetId::station(), GeomDet::toGlobal(), PV3DBase< T, PVType, FrameType >::x(), and PV3DBase< T, PVType, FrameType >::y().

786  {
787 
788  // Get the RecHits collection :
789  int nRecHits = recHits->size();
790 
791  // ---------------------
792  // Loop over rechits
793  // ---------------------
794  // Build iterator for rechits and loop :
796  for (dRHIter = recHits->begin(); dRHIter != recHits->end(); dRHIter++) {
797 
798  // Find chamber with rechits in CSC
799  CSCDetId idrec = (CSCDetId)(*dRHIter).cscDetId();
800 
801  // Store rechit as a Local Point:
802  LocalPoint rhitlocal = (*dRHIter).localPosition();
803  //float xreco = rhitlocal.x();
804  //float yreco = rhitlocal.y();
805 
806  // Get the reconstucted strip position and error
807  float stpos = (*dRHIter).positionWithinStrip();
808  float sterr = (*dRHIter).errorWithinStrip();
809 
811 
812  int adcsize = dRHIter->nStrips()*dRHIter->nTimeBins();
813  float rHSumQ = 0;
814  float sumsides = 0;
815  for (unsigned int i = 0; i < dRHIter->nStrips(); i++){
816  for (unsigned int j=0; j<dRHIter->nTimeBins()-1; j++) {
817  rHSumQ+=dRHIter->adcs(i,j);
818  if ( i != 1 ) sumsides += dRHIter->adcs(i,j); // skip central strip
819  }
820  }
821 
822  float rHratioQ = sumsides/rHSumQ;
823  if (adcsize != 12) rHratioQ = -99;
824 
825  // Get the signal timing of this hit
826  float rHtime = (*dRHIter).tpeak(); //calculated from cathode SCA bins
827  float rHtimeAnode = (*dRHIter).wireTime(); // calculated from anode wire bx
828 
829  // Get pointer to the layer:
830  const CSCLayer* csclayer = cscGeom->layer( idrec );
831 
832  // Transform hit position from local chamber geometry to global CMS geom
833  GlobalPoint rhitglobal= csclayer->toGlobal(rhitlocal);
834  float grecx = rhitglobal.x();
835  float grecy = rhitglobal.y();
836 
837  // Fill some histograms
838  int sIndex = idrec.station() + ((idrec.endcap()-1) * 4);
839  int tIndex = typeIndex(idrec);
840  hRHSumQ[tIndex-1]->Fill(rHSumQ);
841  hRHRatioQ[tIndex-1]->Fill(rHratioQ);
842  hRHstpos[tIndex-1]->Fill(stpos);
843  hRHsterr[tIndex-1]->Fill(sterr);
844  hRHTiming[tIndex-1]->Fill(rHtime);
845  hRHTimingAnode[tIndex-1]->Fill(rHtimeAnode);
846  hRHGlobal[sIndex-1]->Fill(grecx,grecy);
847 
848  } //end rechit loop
849 
850  // if (nRecHits == 0) nRecHits = -1; // I see no point in doing this
851  hRHnrechits->Fill(nRecHits);
852 
853 }
int i
Definition: DBlmapReader.cc:9
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:52
std::vector< MonitorElement * > hRHGlobal
T y() const
Definition: PV3DBase.h:63
void Fill(long long x)
int endcap() const
Definition: CSCDetId.h:106
std::vector< MonitorElement * > hRHSumQ
int typeIndex(CSCDetId id, int flag=1)
std::vector< MonitorElement * > hRHTiming
int j
Definition: DBlmapReader.cc:9
std::vector< MonitorElement * > hRHsterr
std::vector< MonitorElement * > hRHstpos
int station() const
Definition: CSCDetId.h:99
MonitorElement * hRHnrechits
std::vector< MonitorElement * > hRHTimingAnode
T x() const
Definition: PV3DBase.h:62
std::vector< MonitorElement * > hRHRatioQ
void CSCOfflineMonitor::doResolution ( edm::Handle< CSCSegmentCollection cscSegments,
edm::ESHandle< CSCGeometry cscGeom 
)
private

Find the strip containing this hit

Definition at line 974 of file CSCOfflineMonitor.cc.

References CSCDetId, kLayer(), CSCDetId::layer(), CSCDetId::ring(), and CSCDetId::station().

975  {
976 
977  for(CSCSegmentCollection::const_iterator dSiter=cscSegments->begin(); dSiter != cscSegments->end(); dSiter++) {
978  CSCDetId id = (CSCDetId)(*dSiter).cscDetId();
979  //
980  // try to get the CSC recHits that contribute to this segment.
981  std::vector<CSCRecHit2D> theseRecHits = (*dSiter).specificRecHits();
982  int nRH = (*dSiter).nRecHits();
983  int jRH = 0;
984  CLHEP::HepMatrix sp(6,1);
985  CLHEP::HepMatrix se(6,1);
986  for ( vector<CSCRecHit2D>::const_iterator iRH = theseRecHits.begin(); iRH != theseRecHits.end(); iRH++) {
987  jRH++;
988  CSCDetId idRH = (CSCDetId)(*iRH).cscDetId();
989  //int kEndcap = idRH.endcap();
990  int kRing = idRH.ring();
991  int kStation = idRH.station();
992  //int kChamber = idRH.chamber();
993  int kLayer = idRH.layer();
994 
996  int centerid = iRH->nStrips()/2 + 1;
997  int centerStrip = iRH->channels(centerid - 1);
998 
999  // If this segment has 6 hits, find the position of each hit on the strip in units of stripwidth and store values
1000  if (nRH == 6){
1001  float stpos = (*iRH).positionWithinStrip();
1002  se(kLayer,1) = (*iRH).errorWithinStrip();
1003  // Take into account half-strip staggering of layers (ME1/1 has no staggering)
1004  if (kStation == 1 && (kRing == 1 || kRing == 4)) sp(kLayer,1) = stpos + centerStrip;
1005  else{
1006  if (kLayer == 1 || kLayer == 3 || kLayer == 5) sp(kLayer,1) = stpos + centerStrip;
1007  if (kLayer == 2 || kLayer == 4 || kLayer == 6) sp(kLayer,1) = stpos - 0.5 + centerStrip;
1008  }
1009  }
1010 
1011  }
1012 
1013 
1014 
1015  // Fit all points except layer 3, then compare expected value for layer 3 to reconstructed value
1016  // float residual = -99.; // used to fill always
1017  if (nRH == 6){
1018  float expected = fitX(sp,se);
1019  float residual = expected - sp(3,1);
1020 
1021  hSResid[typeIndex(id)-1]->Fill(residual); // fill here so stats make sense
1022  }
1023 
1024  // hSResid[typeIndex(id)-1]->Fill(residual); // used to fill here but then stats distorted by underflows
1025 
1026  } // end segment loop
1027 
1028 
1029 
1030 }
int layer() const
Definition: CSCDetId.h:74
int typeIndex(CSCDetId id, int flag=1)
float fitX(const CLHEP::HepMatrix &sp, const CLHEP::HepMatrix &ep)
static const std::string kLayer("layer")
int ring() const
Definition: CSCDetId.h:88
std::vector< MonitorElement * > hSResid
int station() const
Definition: CSCDetId.h:99
void CSCOfflineMonitor::doSegments ( edm::Handle< CSCSegmentCollection cscSegments,
edm::ESHandle< CSCGeometry cscGeom 
)
private

Definition at line 862 of file CSCOfflineMonitor.cc.

References ChiSquaredProbability(), CSCDetId, i, j, PV3DBase< T, PVType, FrameType >::phi(), mathSSE::sqrt(), PV3DBase< T, PVType, FrameType >::theta(), GeomDet::toGlobal(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

863  {
864 
865  // get CSC segment collection
866  int nSegments = cscSegments->size();
867 
868  for(CSCSegmentCollection::const_iterator dSiter=cscSegments->begin(); dSiter != cscSegments->end(); dSiter++) {
869  CSCDetId id = (CSCDetId)(*dSiter).cscDetId();
870  float chisq = (*dSiter).chi2();
871  int nhits = (*dSiter).nRecHits();
872  int nDOF = 2*nhits-4;
873  float nChi2 = chisq/nDOF;
874  double chisqProb = ChiSquaredProbability( (double)chisq, nDOF );
875  LocalPoint localPos = (*dSiter).localPosition();
876  LocalVector segDir = (*dSiter).localDirection();
877 
878  // prepare to calculate segment times
879  float timeCathode = 0; //average from cathode information alone
880  float timeAnode = 0; //average from pruned anode information alone
881  float timeCombined = 0; //average from cathode hits and pruned anode list
882  std::vector<float> cathodeTimes;
883  std::vector<float> anodeTimes;
884  // Get the CSC recHits that contribute to this segment.
885  std::vector<CSCRecHit2D> theseRecHits = (*dSiter).specificRecHits();
886  for ( vector<CSCRecHit2D>::const_iterator iRH = theseRecHits.begin(); iRH != theseRecHits.end(); iRH++) {
887  if ( !((*iRH).isValid()) ) continue; // only interested in valid hits
888  cathodeTimes.push_back((*iRH).tpeak());
889  anodeTimes.push_back((*iRH).wireTime());
890  }//end rechit loop
891 
892  // Calculate cathode average
893  for (unsigned int i=0; i<cathodeTimes.size(); i++)
894  timeCathode+=cathodeTimes[i]/cathodeTimes.size();
895 
896  // Prune the anode list to deal with the late tail
897  float anodeMaxDiff;
898  bool modified = false;
899  std::vector<float>::iterator anodeMaxHit;
900  do {
901  if (anodeTimes.size()==0) continue;
902  timeAnode=0;
903  anodeMaxDiff=0;
904  modified=false;
905 
906  // Find the average
907  for (unsigned int j=0; j<anodeTimes.size(); j++) timeAnode+=anodeTimes[j]/anodeTimes.size();
908 
909  // Find the maximum outlier hit
910  for (unsigned int j=0; j<anodeTimes.size(); j++) {
911  if (fabs(anodeTimes[j]-timeAnode)>anodeMaxDiff) {
912  anodeMaxHit=anodeTimes.begin()+j;
913  anodeMaxDiff=fabs(anodeTimes[j]-timeAnode);
914  }
915  }
916 
917  // Cut hit if its greater than some time away
918  if (anodeMaxDiff>26) {
919  modified=true;
920  anodeTimes.erase(anodeMaxHit);
921  }
922  } while (modified);
923 
924  // Calculate combined anode and cathode time average
925  if(cathodeTimes.size()+anodeTimes.size() >0 )
926  timeCombined = (timeCathode*cathodeTimes.size() + timeAnode*anodeTimes.size())/(cathodeTimes.size()+anodeTimes.size());
927 
928  // global transformation
929  float globX = 0.;
930  float globY = 0.;
931  float globZ = 0.;
932  float globTOF = 0.;
933  float globTheta = 0.;
934  float globPhi = 0.;
935  const CSCChamber* cscchamber = cscGeom->chamber(id);
936  if (cscchamber) {
937  GlobalPoint globalPosition = cscchamber->toGlobal(localPos);
938  globX = globalPosition.x();
939  globY = globalPosition.y();
940  globZ = globalPosition.z();
941  globTOF = sqrt(globX*globX+globY*globY+globZ*globZ);
942  GlobalVector globalDirection = cscchamber->toGlobal(segDir);
943  globTheta = globalDirection.theta();
944  globPhi = globalDirection.phi();
945  }
946 
947  // Fill histos
948  int tIndex = typeIndex(id);
949  hSnhitsAll->Fill(nhits);
950  hSnhits[tIndex-1]->Fill(nhits);
951  hSChiSqAll->Fill(nChi2);
952  hSChiSq[tIndex-1]->Fill(nChi2);
953  hSChiSqProbAll->Fill(chisqProb);
954  hSChiSqProb[tIndex-1]->Fill(chisqProb);
955  hSGlobalTheta->Fill(globTheta);
956  hSGlobalPhi->Fill(globPhi);
957  hSTimeCathode->Fill(timeCathode);
958  hSTimeCombined->Fill(timeCombined);
959  hSTimeVsZ->Fill(globZ, timeCombined);
960  hSTimeVsTOF->Fill(globTOF, timeCombined);
961 
962  } // end segment loop
963 
964  // if (nSegments == 0) nSegments = -1; // I see no point in doing this
965  hSnSegments->Fill(nSegments);
966 
967 }
int i
Definition: DBlmapReader.cc:9
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:52
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
T y() const
Definition: PV3DBase.h:63
std::vector< MonitorElement * > hSChiSq
MonitorElement * hSGlobalPhi
void Fill(long long x)
std::vector< MonitorElement * > hSnhits
Geom::Theta< T > theta() const
Definition: PV3DBase.h:75
MonitorElement * hSnSegments
int typeIndex(CSCDetId id, int flag=1)
MonitorElement * hSnhitsAll
T sqrt(T t)
Definition: SSEVec.h:48
T z() const
Definition: PV3DBase.h:64
MonitorElement * hSGlobalTheta
int j
Definition: DBlmapReader.cc:9
float ChiSquaredProbability(double chiSquared, double nrDOF)
MonitorElement * hSTimeCombined
MonitorElement * hSTimeVsZ
MonitorElement * hSChiSqAll
MonitorElement * hSTimeCathode
MonitorElement * hSTimeVsTOF
std::vector< MonitorElement * > hSChiSqProb
T x() const
Definition: PV3DBase.h:62
MonitorElement * hSChiSqProbAll
void CSCOfflineMonitor::doStripDigis ( edm::Handle< CSCStripDigiCollection strips)
private

Definition at line 700 of file CSCOfflineMonitor.cc.

References CSCDetId, diffTreeTool::diff, and dtDQMClient_cfg::threshold.

700  {
701 
702  int nStripsFired = 0;
703  for (CSCStripDigiCollection::DigiRangeIterator dSDiter=strips->begin(); dSDiter!=strips->end(); dSDiter++) {
704  CSCDetId id = (CSCDetId)(*dSDiter).first;
705  std::vector<CSCStripDigi>::const_iterator stripIter = (*dSDiter).second.first;
706  std::vector<CSCStripDigi>::const_iterator lStrip = (*dSDiter).second.second;
707  for( ; stripIter != lStrip; ++stripIter) {
708  int myStrip = stripIter->getStrip();
709  std::vector<int> myADCVals = stripIter->getADCCounts();
710  bool thisStripFired = false;
711  float thisPedestal = 0.5*(float)(myADCVals[0]+myADCVals[1]);
712  float threshold = 13.3 ;
713  float diff = 0.;
714  for (unsigned int iCount = 0; iCount < myADCVals.size(); iCount++) {
715  diff = (float)myADCVals[iCount]-thisPedestal;
716  if (diff > threshold) { thisStripFired = true; }
717  }
718  if (thisStripFired) {
719  nStripsFired++;
720  hStripNumber[typeIndex(id)-1]->Fill(myStrip);
721  }
722  }
723  } // end strip loop
724 
725  // this way you can zero suppress but still store info on # events with no digis
726  // Tim: I guess the above comment means 'zero suppress' because the hist range is from -0.5.
727  // But doing this means the hist statistics are broken. If the zero bin is high, just apply log scale?
728  // if (nStripsFired == 0) nStripsFired = -1;
729  hStripNFired->Fill(nStripsFired);
730  // fill n per event
731 
732 }
void Fill(long long x)
int typeIndex(CSCDetId id, int flag=1)
std::vector< MonitorElement * > hStripNumber
MonitorElement * hStripNFired
void CSCOfflineMonitor::doWireDigis ( edm::Handle< CSCWireDigiCollection wires)
private

Definition at line 670 of file CSCOfflineMonitor.cc.

References CSCDetId.

670  {
671 
672  int nWireGroupsTotal = 0;
673  for (CSCWireDigiCollection::DigiRangeIterator dWDiter=wires->begin(); dWDiter!=wires->end(); dWDiter++) {
674  CSCDetId id = (CSCDetId)(*dWDiter).first;
675  std::vector<CSCWireDigi>::const_iterator wireIter = (*dWDiter).second.first;
676  std::vector<CSCWireDigi>::const_iterator lWire = (*dWDiter).second.second;
677  for( ; wireIter != lWire; ++wireIter) {
678  int myWire = wireIter->getWireGroup();
679  int myTBin = wireIter->getTimeBin();
680  nWireGroupsTotal++;
681  hWireTBin[typeIndex(id)-1]->Fill(myTBin);
682  hWireNumber[typeIndex(id)-1]->Fill(myWire);
683  }
684  } // end wire loop
685 
686  // this way you can zero suppress but still store info on # events with no digis
687  // Tim: I'm unhappy with that since it breaks hist statistics
688  // if (nWireGroupsTotal == 0) nWireGroupsTotal = -1;
689  hWirenGroupsTotal->Fill(nWireGroupsTotal);
690 
691 }
MonitorElement * hWirenGroupsTotal
std::vector< MonitorElement * > hWireNumber
void Fill(long long x)
int typeIndex(CSCDetId id, int flag=1)
std::vector< MonitorElement * > hWireTBin
double CSCOfflineMonitor::extrapolate1D ( double  initPosition,
double  initDirection,
double  parameterOfTheLine 
)
inlineprivate

Definition at line 134 of file CSCOfflineMonitor.h.

134  {
135  double extrapolatedPosition = initPosition + initDirection*parameterOfTheLine;
136  return extrapolatedPosition;
137  }
void CSCOfflineMonitor::fillEfficiencyHistos ( int  bin,
int  flag 
)
private
float CSCOfflineMonitor::fitX ( const CLHEP::HepMatrix &  sp,
const CLHEP::HepMatrix &  ep 
)
private

Definition at line 1038 of file CSCOfflineMonitor.cc.

References delta, benchmark_cfg::errors, i, S(), and slope.

1038  {
1039 
1040  float S = 0;
1041  float Sx = 0;
1042  float Sy = 0;
1043  float Sxx = 0;
1044  float Sxy = 0;
1045  float sigma2 = 0;
1046 
1047  for (int i=1;i<7;i++){
1048  if (i != 3){
1049  sigma2 = errors(i,1)*errors(i,1);
1050  S = S + (1/sigma2);
1051  Sy = Sy + (points(i,1)/sigma2);
1052  Sx = Sx + ((i)/sigma2);
1053  Sxx = Sxx + (i*i)/sigma2;
1054  Sxy = Sxy + (((i)*points(i,1))/sigma2);
1055  }
1056  }
1057 
1058  float delta = S*Sxx - Sx*Sx;
1059  float intercept = (Sxx*Sy - Sx*Sxy)/delta;
1060  float slope = (S*Sxy - Sx*Sy)/delta;
1061 
1062  return (intercept + slope*3);
1063 
1064 }
dbl * delta
Definition: mlp_gen.cc:36
int i
Definition: DBlmapReader.cc:9
static const double slope[3]
double S(const TLorentzVector &, const TLorentzVector &)
Definition: Particle.cc:99
float CSCOfflineMonitor::getSignal ( const CSCStripDigiCollection stripdigis,
CSCDetId  idRH,
int  centerStrip 
)
private

Definition at line 1073 of file CSCOfflineMonitor.cc.

References CSCDetId, if(), and prof2calltree::last.

1074  {
1075 
1076  float SigADC[5];
1077  float TotalADC = 0;
1078  SigADC[0] = 0;
1079  SigADC[1] = 0;
1080  SigADC[2] = 0;
1081  SigADC[3] = 0;
1082  SigADC[4] = 0;
1083 
1084 
1085  // Loop over strip digis
1087 
1088  for (sIt = stripdigis.begin(); sIt != stripdigis.end(); sIt++){
1089  CSCDetId id = (CSCDetId)(*sIt).first;
1090  if (id == idCS){
1091 
1092  // First, find the Signal-Pedestal for center strip
1093  vector<CSCStripDigi>::const_iterator digiItr = (*sIt).second.first;
1094  vector<CSCStripDigi>::const_iterator last = (*sIt).second.second;
1095  for ( ; digiItr != last; ++digiItr ) {
1096  int thisStrip = digiItr->getStrip();
1097  if (thisStrip == (centerStrip)){
1098  std::vector<int> myADCVals = digiItr->getADCCounts();
1099  float thisPedestal = 0.5*(float)(myADCVals[0]+myADCVals[1]);
1100  float thisSignal = (myADCVals[2]+myADCVals[3]+myADCVals[4]+myADCVals[5]+myADCVals[6]+myADCVals[7]);
1101  SigADC[0] = thisSignal - 6*thisPedestal;
1102  }
1103  // Now,find the Signal-Pedestal for neighbouring 4 strips
1104  if (thisStrip == (centerStrip+1)){
1105  std::vector<int> myADCVals = digiItr->getADCCounts();
1106  float thisPedestal = 0.5*(float)(myADCVals[0]+myADCVals[1]);
1107  float thisSignal = (myADCVals[2]+myADCVals[3]+myADCVals[4]+myADCVals[5]+myADCVals[6]+myADCVals[7]);
1108  SigADC[1] = thisSignal - 6*thisPedestal;
1109  }
1110  if (thisStrip == (centerStrip+2)){
1111  std::vector<int> myADCVals = digiItr->getADCCounts();
1112  float thisPedestal = 0.5*(float)(myADCVals[0]+myADCVals[1]);
1113  float thisSignal = (myADCVals[2]+myADCVals[3]+myADCVals[4]+myADCVals[5]+myADCVals[6]+myADCVals[7]);
1114  SigADC[2] = thisSignal - 6*thisPedestal;
1115  }
1116  if (thisStrip == (centerStrip-1)){
1117  std::vector<int> myADCVals = digiItr->getADCCounts();
1118  float thisPedestal = 0.5*(float)(myADCVals[0]+myADCVals[1]);
1119  float thisSignal = (myADCVals[2]+myADCVals[3]+myADCVals[4]+myADCVals[5]+myADCVals[6]+myADCVals[7]);
1120  SigADC[3] = thisSignal - 6*thisPedestal;
1121  }
1122  if (thisStrip == (centerStrip-2)){
1123  std::vector<int> myADCVals = digiItr->getADCCounts();
1124  float thisPedestal = 0.5*(float)(myADCVals[0]+myADCVals[1]);
1125  float thisSignal = (myADCVals[2]+myADCVals[3]+myADCVals[4]+myADCVals[5]+myADCVals[6]+myADCVals[7]);
1126  SigADC[4] = thisSignal - 6*thisPedestal;
1127  }
1128  }
1129  TotalADC = 0.2*(SigADC[0]+SigADC[1]+SigADC[2]+SigADC[3]+SigADC[4]);
1130  }
1131  }
1132  return TotalADC;
1133 }
if(conf.exists("allCellsPositionCalc"))
double CSCOfflineMonitor::lineParametrization ( double  z1Position,
double  z2Position,
double  z1Direction 
)
inlineprivate

Definition at line 129 of file CSCOfflineMonitor.h.

129  {
130  double parameterLine = (z2Position-z1Position)/z1Direction;
131  return parameterLine;
132  }
int CSCOfflineMonitor::typeIndex ( CSCDetId  id,
int  flag = 1 
)
private

Definition at line 1753 of file CSCOfflineMonitor.cc.

References Reference_intrackfit_cff::endcap, cmsHarvester::index, relativeConstraints::ring, and relativeConstraints::station.

1753  {
1754 
1755  // linearized index based on endcap, station, and ring
1756 
1757  if (flag == 1){
1758  int index = 0;
1759  if (id.station() == 1) index = id.ring();
1760  else index = id.station()*2 + id.ring();
1761  if (id.endcap() == 1) index = index + 10;
1762  if (id.endcap() == 2) index = 11 - index;
1763  return index;
1764  }
1765 
1766  else if (flag == 2){
1767  int index = 0;
1768  if (id.station() == 1 && id.ring() != 4) index = id.ring()+1;
1769  if (id.station() == 1 && id.ring() == 4) index = 1;
1770  if (id.station() != 1) index = id.station()*2 + id.ring();
1771  if (id.endcap() == 1) index = index + 10;
1772  if (id.endcap() == 2) index = 11 - index;
1773  return index;
1774  }
1775 
1776  else return 0;
1777 
1778 }
bool CSCOfflineMonitor::withinSensitiveRegion ( LocalPoint  localPos,
const std::array< const float, 4 > &  layerBounds,
int  station,
int  ring,
float  shiftFromEdge,
float  shiftFromDeadZone 
)
private

Definition at line 1652 of file CSCOfflineMonitor.cc.

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

1653  {
1654 //---- check if it is in a good local region (sensitive area - geometrical and HV boundaries excluded)
1655  bool pass = false;
1656 
1657  float y_center = 0.;
1658  double yUp = layerBounds[3] + y_center;
1659  double yDown = - layerBounds[3] + y_center;
1660  double xBound1Shifted = layerBounds[0] - shiftFromEdge;//
1661  double xBound2Shifted = layerBounds[1] - shiftFromEdge;//
1662  double lineSlope = (yUp - yDown)/(xBound2Shifted-xBound1Shifted);
1663  double lineConst = yUp - lineSlope*xBound2Shifted;
1664  double yBorder = lineSlope*abs(localPos.x()) + lineConst;
1665 
1666  //bool withinChamberOnly = false;// false = "good region"; true - boundaries only
1667  std::vector <float> deadZoneCenter(6);
1668  float cutZone = shiftFromDeadZone;//cm
1669  //---- hardcoded... not good
1670  if(station>1 && station<5){
1671  if(2==ring){
1672  deadZoneCenter[0]= -162.48 ;
1673  deadZoneCenter[1] = -81.8744;
1674  deadZoneCenter[2] = -21.18165;
1675  deadZoneCenter[3] = 39.51105;
1676  deadZoneCenter[4] = 100.2939;
1677  deadZoneCenter[5] = 160.58;
1678 
1679  if(localPos.y() >yBorder &&
1680  ((localPos.y()> deadZoneCenter[0] + cutZone && localPos.y()< deadZoneCenter[1] - cutZone) ||
1681  (localPos.y()> deadZoneCenter[1] + cutZone && localPos.y()< deadZoneCenter[2] - cutZone) ||
1682  (localPos.y()> deadZoneCenter[2] + cutZone && localPos.y()< deadZoneCenter[3] - cutZone) ||
1683  (localPos.y()> deadZoneCenter[3] + cutZone && localPos.y()< deadZoneCenter[4] - cutZone) ||
1684  (localPos.y()> deadZoneCenter[4] + cutZone && localPos.y()< deadZoneCenter[5] - cutZone))){
1685  pass = true;
1686  }
1687  }
1688  else if(1==ring){
1689  if(2==station){
1690  deadZoneCenter[0]= -95.80 ;
1691  deadZoneCenter[1] = -27.47;
1692  deadZoneCenter[2] = 33.67;
1693  deadZoneCenter[3] = 90.85;
1694  }
1695  else if(3==station){
1696  deadZoneCenter[0]= -89.305 ;
1697  deadZoneCenter[1] = -39.705;
1698  deadZoneCenter[2] = 20.195;
1699  deadZoneCenter[3] = 77.395;
1700  }
1701  else if(4==station){
1702  deadZoneCenter[0]= -75.645;
1703  deadZoneCenter[1] = -26.055;
1704  deadZoneCenter[2] = 23.855;
1705  deadZoneCenter[3] = 70.575;
1706  }
1707  if(localPos.y() >yBorder &&
1708  ((localPos.y()> deadZoneCenter[0] + cutZone && localPos.y()< deadZoneCenter[1] - cutZone) ||
1709  (localPos.y()> deadZoneCenter[1] + cutZone && localPos.y()< deadZoneCenter[2] - cutZone) ||
1710  (localPos.y()> deadZoneCenter[2] + cutZone && localPos.y()< deadZoneCenter[3] - cutZone))){
1711  pass = true;
1712  }
1713  }
1714  }
1715  else if(1==station){
1716  if(3==ring){
1717  deadZoneCenter[0]= -83.155 ;
1718  deadZoneCenter[1] = -22.7401;
1719  deadZoneCenter[2] = 27.86665;
1720  deadZoneCenter[3] = 81.005;
1721  if(localPos.y() > yBorder &&
1722  ((localPos.y()> deadZoneCenter[0] + cutZone && localPos.y()< deadZoneCenter[1] - cutZone) ||
1723  (localPos.y()> deadZoneCenter[1] + cutZone && localPos.y()< deadZoneCenter[2] - cutZone) ||
1724  (localPos.y()> deadZoneCenter[2] + cutZone && localPos.y()< deadZoneCenter[3] - cutZone))){
1725  pass = true;
1726  }
1727  }
1728  else if(2==ring){
1729  deadZoneCenter[0]= -86.285 ;
1730  deadZoneCenter[1] = -32.88305;
1731  deadZoneCenter[2] = 32.867423;
1732  deadZoneCenter[3] = 88.205;
1733  if(localPos.y() > (yBorder) &&
1734  ((localPos.y()> deadZoneCenter[0] + cutZone && localPos.y()< deadZoneCenter[1] - cutZone) ||
1735  (localPos.y()> deadZoneCenter[1] + cutZone && localPos.y()< deadZoneCenter[2] - cutZone) ||
1736  (localPos.y()> deadZoneCenter[2] + cutZone && localPos.y()< deadZoneCenter[3] - cutZone))){
1737  pass = true;
1738  }
1739  }
1740  else{
1741  deadZoneCenter[0]= -81.0;
1742  deadZoneCenter[1] = 81.0;
1743  if(localPos.y() > (yBorder) &&
1744  (localPos.y()> deadZoneCenter[0] + cutZone && localPos.y()< deadZoneCenter[1] - cutZone )){
1745  pass = true;
1746  }
1747  }
1748  }
1749  return pass;
1750 }
T y() const
Definition: PV3DBase.h:63
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
T x() const
Definition: PV3DBase.h:62

Member Data Documentation

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

Definition at line 93 of file CSCOfflineMonitor.h.

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

Definition at line 94 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hALCTgetBX
private

Definition at line 217 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hALCTgetBX2Denominator
private

Definition at line 221 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hALCTgetBX2DNumerator
private

Definition at line 222 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hALCTgetBXSerial
private

Definition at line 218 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hALCTMatch
private

Definition at line 224 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hALCTMatch2Denominator
private

Definition at line 228 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hALCTMatch2DNumerator
private

Definition at line 229 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hALCTMatchSerial
private

Definition at line 225 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hCLCTL1A
private

Definition at line 231 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hCLCTL1A2Denominator
private

Definition at line 235 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hCLCTL1A2DNumerator
private

Definition at line 236 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hCLCTL1ASerial
private

Definition at line 232 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hCSCOccupancy
private

Definition at line 195 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hEffDenominator
private

Definition at line 213 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hORecHits
private

Definition at line 189 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hORecHitsSerial
private

Definition at line 193 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hOSegments
private

Definition at line 190 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hOSegmentsSerial
private

Definition at line 194 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hOStrips
private

Definition at line 187 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hOStripsAndWiresAndCLCT
private

Definition at line 188 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hOStripSerial
private

Definition at line 192 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hOWires
private

Definition at line 185 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hOWiresAndCLCT
private

Definition at line 186 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hOWireSerial
private

Definition at line 191 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hRHden
private

Definition at line 201 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hRHGlobal
private

Definition at line 158 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hRHnrechits
private

Definition at line 157 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hRHnum
private

Definition at line 200 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hRHRatioQ
private

Definition at line 162 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hRHSTE2
private

Definition at line 205 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hRHsterr
private

Definition at line 164 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hRHstpos
private

Definition at line 163 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hRHSumQ
private

Definition at line 159 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hRHTiming
private

Definition at line 160 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hRHTimingAnode
private

Definition at line 161 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hSChiSq
private

Definition at line 171 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hSChiSqAll
private

Definition at line 170 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hSChiSqProb
private

Definition at line 173 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hSChiSqProbAll
private

Definition at line 172 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hSden
private

Definition at line 199 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hSensitiveAreaEvt
private

Definition at line 214 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hSGlobalPhi
private

Definition at line 175 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hSGlobalTheta
private

Definition at line 174 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hSnhits
private

Definition at line 169 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hSnhitsAll
private

Definition at line 168 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hSnSegments
private

Definition at line 167 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hSnum
private

Definition at line 198 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hSResid
private

Definition at line 182 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hSSTE2
private

Definition at line 204 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hSTimeCathode
private

Definition at line 176 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hSTimeCombined
private

Definition at line 177 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hSTimeVsTOF
private

Definition at line 179 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hSTimeVsZ
private

Definition at line 178 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hStripNFired
private

Definition at line 152 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hStripNumber
private

Definition at line 153 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hStripPed
private

Definition at line 154 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hStripSTE2
private

Definition at line 206 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hWirenGroupsTotal
private

Definition at line 147 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hWireNumber
private

Definition at line 149 of file CSCOfflineMonitor.h.

MonitorElement* CSCOfflineMonitor::hWireSTE2
private

Definition at line 207 of file CSCOfflineMonitor.h.

std::vector<MonitorElement*> CSCOfflineMonitor::hWireTBin
private

Definition at line 148 of file CSCOfflineMonitor.h.

edm::ParameterSet CSCOfflineMonitor::param
private

Definition at line 88 of file CSCOfflineMonitor.h.

edm::EDGetTokenT<FEDRawDataCollection> CSCOfflineMonitor::rd_token
private

Definition at line 90 of file CSCOfflineMonitor.h.

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

Definition at line 95 of file CSCOfflineMonitor.h.

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

Definition at line 92 of file CSCOfflineMonitor.h.

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

Definition at line 96 of file CSCOfflineMonitor.h.

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

Definition at line 91 of file CSCOfflineMonitor.h.