CMS 3D CMS Logo

BeamHaloAnalyzer.cc
Go to the documentation of this file.
3 
4 //author : Ronny Remington, University of Florida
5 //date : 11/11/09
6 
7 using namespace edm;
8 using namespace reco;
9 
10 int Phi_To_iPhi(float phi)
11 {
12  phi = phi < 0 ? phi + 2.*TMath::Pi() : phi ;
13  float phi_degrees = phi * (360.) / ( 2. * TMath::Pi() ) ;
14  int iPhi = (int) ( ( phi_degrees/5. ) + 1.);
15 
16  return iPhi < 73 ? iPhi : 73 ;
17 }
18 
19 
21 {
22  OutputFileName = iConfig.getParameter<std::string>("OutputFile");
23  TextFileName = iConfig.getParameter<std::string>("TextFile");
24 
25  if(!TextFileName.empty())
26  out = new std::ofstream(TextFileName.c_str() );
27 
28 
29  if( iConfig.exists("StandardDQM") ) // If StandardDQM == true , coarse binning is used on selected (important) histograms
30  StandardDQM = iConfig.getParameter<bool>("StandardDQM");
31  else
32  StandardDQM = false;
33 
34  //Get Input Tags
35  //Digi Level
36  IT_L1MuGMTReadout = iConfig.getParameter<edm::InputTag>("L1MuGMTReadoutLabel");
37 
38  //RecHit Level
39  IT_CSCRecHit = consumes<CSCRecHit2DCollection > (iConfig.getParameter<edm::InputTag>("CSCRecHitLabel"));
40  IT_EBRecHit = consumes<EBRecHitCollection > (iConfig.getParameter<edm::InputTag>("EBRecHitLabel"));
41  IT_EERecHit = consumes<EERecHitCollection > (iConfig.getParameter<edm::InputTag>("EERecHitLabel"));
42  IT_ESRecHit = consumes<ESRecHitCollection > (iConfig.getParameter<edm::InputTag>("ESRecHitLabel"));
43  IT_HBHERecHit = consumes<HBHERecHitCollection > (iConfig.getParameter<edm::InputTag>("HBHERecHitLabel"));
44  IT_HFRecHit = consumes<HFRecHitCollection > (iConfig.getParameter<edm::InputTag>("HFRecHitLabel"));
45  IT_HORecHit = consumes<HORecHitCollection > (iConfig.getParameter<edm::InputTag>("HORecHitLabel"));
46 
47  //Higher Level Reco
48  IT_CSCSegment = consumes<CSCSegmentCollection > (iConfig.getParameter<edm::InputTag>("CSCSegmentLabel"));
49  IT_CosmicStandAloneMuon = consumes<reco::MuonCollection > (iConfig.getParameter<edm::InputTag>("CosmicStandAloneMuonLabel"));
50  IT_BeamHaloMuon = consumes<reco::MuonCollection > (iConfig.getParameter<edm::InputTag>("BeamHaloMuonLabel"));
51  IT_CollisionMuon = consumes<reco::MuonCollection > (iConfig.getParameter<edm::InputTag>("CollisionMuonLabel"));
52  IT_CollisionStandAloneMuon = consumes<reco::MuonCollection > (iConfig.getParameter<edm::InputTag>("CollisionStandAloneMuonLabel"));
53  IT_met = consumes<reco::CaloMETCollection > (iConfig.getParameter<edm::InputTag>("metLabel"));
54  IT_CaloTower = consumes<edm::View<reco::Candidate> > (iConfig.getParameter<edm::InputTag>("CaloTowerLabel"));
55  IT_SuperCluster = consumes<SuperClusterCollection > (iConfig.getParameter<edm::InputTag>("SuperClusterLabel"));
56  IT_Photon = consumes<reco::PhotonCollection > (iConfig.getParameter<edm::InputTag>("PhotonLabel"));
57 
58  //Halo Data
59  IT_CSCHaloData = consumes<reco::CSCHaloData > (iConfig.getParameter<edm::InputTag> ("CSCHaloDataLabel"));
60  IT_EcalHaloData = consumes<reco::EcalHaloData > (iConfig.getParameter<edm::InputTag>("EcalHaloDataLabel"));
61  IT_HcalHaloData = consumes<reco::HcalHaloData > (iConfig.getParameter<edm::InputTag>("HcalHaloDataLabel"));
62  IT_GlobalHaloData = consumes<reco::GlobalHaloData > (iConfig.getParameter<edm::InputTag>("GlobalHaloDataLabel"));
63  IT_BeamHaloSummary = consumes<BeamHaloSummary > (iConfig.getParameter<edm::InputTag>("BeamHaloSummaryLabel"));
64 
65  edm::InputTag CosmicSAMuonLabel = iConfig.getParameter<edm::InputTag>("CosmicStandAloneMuonLabel");
66  IT_CSCTimeMapToken = consumes<reco::MuonTimeExtraMap > (edm::InputTag(CosmicSAMuonLabel.label(),std::string("csc")));
67  FolderName = iConfig.getParameter<std::string>("folderName");
68  DumpMET = iConfig.getParameter<double>("DumpMET");
69 
70  //Muon to Segment Matching
71  edm::ParameterSet matchParameters = iConfig.getParameter<edm::ParameterSet>("MatchParameters");
72  edm::ConsumesCollector iC = consumesCollector();
73  TheMatcher = new MuonSegmentMatcher(matchParameters, iC);
74 
75 }
76 
77 
79  edm::Run const & iRun,
80  edm::EventSetup const & )
81  {
82 
83  // EcalHaloData
84  ibooker.setCurrentFolder(FolderName+"/EcalHaloData");
85  if(StandardDQM)
86  {
87  hEcalHaloData_PhiWedgeMultiplicity = ibooker.book1D("EcalHaloData_PhiWedgeMultiplicity","",20, -0.5, 19.5);
88  hEcalHaloData_PhiWedgeConstituents = ibooker.book1D("EcalHaloData_PhiWedgeConstituents","",20,-0.5, 19.5);
89  // hEcalHaloData_PhiWedgeiPhi = ibooker.book1D("EcalHaloData_PhiWedgeiPhi","", 360, 0.5, 360.5) ;
90  hEcalHaloData_PhiWedgeZDirectionConfidence = ibooker.book1D("EcalHaloData_ZDirectionConfidence","", 120, -1.2, 1.2);
91  hEcalHaloData_SuperClusterShowerShapes = ibooker.book2D("EcalHaloData_SuperClusterShowerShapes","", 30, 0, 3.2, 25,0.0, 2.0);
92  hEcalHaloData_SuperClusterEnergy = ibooker.book1D("EcalHaloData_SuperClusterEnergy","",50,-0.5,99.5);
93  hEcalHaloData_SuperClusterNHits = ibooker.book1D("EcalHaloData_SuperClusterNHits", "", 20, -0.5, 19.5);
94  }
95  else
96  {
97  hEcalHaloData_PhiWedgeMultiplicity = ibooker.book1D("EcalHaloData_PhiWedgeMultiplicity","",20, -0.5, 19.5);
98  hEcalHaloData_PhiWedgeEnergy = ibooker.book1D("EcalHaloData_PhiWedgeEnergy","", 50,-0.5,199.5);
99  hEcalHaloData_PhiWedgeConstituents = ibooker.book1D("EcalHaloData_PhiWedgeConstituents","",20,-0.5, 19.5);
100  hEcalHaloData_PhiWedgeMinTime = ibooker.book1D("EcalHaloData_PhiWedgeMinTime","", 100, -225.0, 225.0);
101  hEcalHaloData_PhiWedgeMaxTime = ibooker.book1D("EcalHaloData_PhiWedgeMaxTime","", 100, -225.0, 225.0);
102  hEcalHaloData_PhiWedgeiPhi = ibooker.book1D("EcalHaloData_PhiWedgeiPhi","", 360, 0.5, 360.5) ;
103  hEcalHaloData_PhiWedgePlusZDirectionConfidence = ibooker.book1D("EcalHaloData_PlusZDirectionConfidence","", 50, 0., 1.0);
104  hEcalHaloData_PhiWedgeZDirectionConfidence = ibooker.book1D("EcalHaloData_ZDirectionConfidence","", 120, -1.2, 1.2);
105  hEcalHaloData_PhiWedgeMinVsMaxTime = ibooker.book2D("EcalHaloData_PhiWedgeMinVsMaxTime","", 50,-100.0, 100.0, 50, -100.0, 100.0);
106  hEcalHaloData_SuperClusterShowerShapes = ibooker.book2D("EcalHaloData_SuperClusterShowerShapes","", 30, 0, 3.2, 25,0.0, 2.0);
107  hEcalHaloData_SuperClusterEnergy = ibooker.book1D("EcalHaloData_SuperClusterEnergy","",100,-0.5,99.5);
108  hEcalHaloData_SuperClusterNHits = ibooker.book1D("EcalHaloData_SuperClusterNHits", "", 20, -0.5, 19.5);
109  hEcalHaloData_SuperClusterPhiVsEta = ibooker.book2D("EcalHaloData_SuperClusterPhiVsEta","",60, -3.0, 3.0, 60, -3.2, 3.2);
110  }
111 
112  // HcalHaloData
113  ibooker.setCurrentFolder(FolderName+"/HcalHaloData");
114  if( StandardDQM )
115  {
116  hHcalHaloData_PhiWedgeMultiplicity = ibooker.book1D("HcalHaloData_PhiWedgeMultiplicity","", 20, -0.5, 19.5);
117  hHcalHaloData_PhiWedgeConstituents = ibooker.book1D("HcalHaloData_PhiWedgeConstituents","", 20,-0.5, 19.5);
118  //hHcalHaloData_PhiWedgeiPhi = ibooker.book1D("HcalHaloData_PhiWedgeiPhi","", 72, 0.5,72.5);
119  hHcalHaloData_PhiWedgeZDirectionConfidence = ibooker.book1D("HcalHaloData_ZDirectionConfidence","", 120, -1.2, 1.2);
120  }
121  else
122  {
123  hHcalHaloData_PhiWedgeMultiplicity = ibooker.book1D("HcalHaloData_PhiWedgeMultiplicity","", 20, -0.5, 19.5);
124  hHcalHaloData_PhiWedgeEnergy = ibooker.book1D("HcalHaloData_PhiWedgeEnergy", "", 50,-0.5,199.5);
125  hHcalHaloData_PhiWedgeConstituents = ibooker.book1D("HcalHaloData_PhiWedgeConstituents","", 20,-0.5, 19.5);
126  hHcalHaloData_PhiWedgeiPhi = ibooker.book1D("HcalHaloData_PhiWedgeiPhi","", 72, 0.5,72.5);
127  hHcalHaloData_PhiWedgeMinTime = ibooker.book1D("HcalHaloData_PhiWedgeMinTime", "", 50, -100.0, 100.0);
128  hHcalHaloData_PhiWedgeMaxTime = ibooker.book1D("HcalHaloData_PhiWedgeMaxTime", "", 50, -100.0, 100.0);
129  hHcalHaloData_PhiWedgePlusZDirectionConfidence = ibooker.book1D("HcalHaloData_PlusZDirectionConfidence","", 50, 0., 1.0);
130  hHcalHaloData_PhiWedgeZDirectionConfidence = ibooker.book1D("HcalHaloData_ZDirectionConfidence","", 120, -1.2, 1.2);
131  hHcalHaloData_PhiWedgeMinVsMaxTime = ibooker.book2D("HcalHaloData_PhiWedgeMinVsMaxTime","" , 50,-100.0, 100.0, 50, -100.0, 100.0);
132  }
133 
134  // CSCHaloData
135  ibooker.setCurrentFolder(FolderName+"/CSCHaloData");
136  if( StandardDQM )
137  {
138  hCSCHaloData_TrackMultiplicity = ibooker.book1D("CSCHaloData_TrackMultiplicity", "", 15, -0.5, 14.5);
139  hCSCHaloData_TrackMultiplicityMEPlus = ibooker.book1D("CSCHaloData_TrackMultiplicityMEPlus", "", 15, -0.5, 14.5);
140  hCSCHaloData_TrackMultiplicityMEMinus = ibooker.book1D("CSCHaloData_TrackMultiplicityMEMinus", "", 15, -0.5, 14.5);
141  hCSCHaloData_InnerMostTrackHitR = ibooker.book1D("CSCHaloData_InnerMostTrackHitR", "", 70, 99.5, 799.5);
142  hCSCHaloData_InnerMostTrackHitPhi = ibooker.book1D("CSCHaloData_InnerMostTrackHitPhi","", 60, -3.2, 3.2);
143  hCSCHaloData_L1HaloTriggersMEPlus = ibooker.book1D("CSCHaloData_L1HaloTriggersMEPlus", "", 10, -0.5, 9.5);
144  hCSCHaloData_L1HaloTriggersMEMinus = ibooker.book1D("CSCHaloData_L1HaloTriggersMEMinus", "" , 10, -0.5, 9.5);
145  hCSCHaloData_L1HaloTriggers = ibooker.book1D("CSCHaloData_L1HaloTriggers", "", 10, -0.5, 9.5);
146  hCSCHaloData_HLHaloTriggers = ibooker.book1D("CSCHaloData_HLHaloTriggers", "", 2, -0.5, 1.5);
147  hCSCHaloData_NOutOfTimeTriggersvsL1HaloExists = ibooker.book2D("CSCHaloData_NOutOfTimeTriggersvsL1HaloExists", "", 20, -0.5, 19.5, 2, -0.5, 1.5);
148  hCSCHaloData_NOutOfTimeTriggersMEPlus = ibooker.book1D("CSCHaloData_NOutOfTimeTriggersMEPlus", "", 20, -0.5, 19.5);
149  hCSCHaloData_NOutOfTimeTriggersMEMinus = ibooker.book1D("CSCHaloData_NOutOfTimeTriggersMEMinus", "", 20, -0.5, 19.5);
150  hCSCHaloData_NOutOfTimeTriggers = ibooker.book1D("CSCHaloData_NOutOfTimeTriggers", "", 20, -0.5, 19.5);
151  hCSCHaloData_NOutOfTimeHits = ibooker.book1D("CSCHaloData_NOutOfTimeHits", "", 60, -0.5, 59.5);
152  hCSCHaloData_NTracksSmalldT = ibooker.book1D("CSCHaloData_NTracksSmalldT", "", 15, -0.5, 14.5);
153  hCSCHaloData_NTracksSmallBeta = ibooker.book1D("CSCHaloData_NTracksSmallBeta", "", 15, -0.5, 14.5);
154  hCSCHaloData_NTracksSmallBetaAndSmalldT = ibooker.book1D("CSCHaloData_NTracksSmallBetaAndSmalldT", "", 15, -0.5, 14.5);
155  hCSCHaloData_NTracksSmalldTvsNHaloTracks = ibooker.book2D("CSCHaloData_NTracksSmalldTvsNHaloTracks","",15, -0.5, 14.5,15, -0.5, 14.5);
156  hCSCHaloData_SegmentdT = ibooker.book1D("CSCHaloData_SegmentdT","",100,-100,100);
157  hCSCHaloData_FreeInverseBeta = ibooker.book1D("CSCHaloData_FreeInverseBeta","",80,-4,4);
158  hCSCHaloData_FreeInverseBetaVsSegmentdT = ibooker.book2D("CSCHaloData_FreeInverseBetaVsSegmentdT","",100,-100,100,80,-4,4);
159  // MLR
160  hCSCHaloData_NFlatHaloSegments = ibooker.book1D("CSCHaloData_NFlatHaloSegments","",20,0,20);
161  hCSCHaloData_SegmentsInBothEndcaps = ibooker.book1D("CSCHaloData_SegmentsInBothEndcaps","",2,0,2);
162  hCSCHaloData_NFlatSegmentsInBothEndcaps = ibooker.book1D("CSCHaloData_NFlatSegmentsInBothEndcaps","",20,0,20);
163  // End MLR
164  }
165  else
166  {
167  hCSCHaloData_TrackMultiplicity = ibooker.book1D("CSCHaloData_TrackMultiplicity", "", 15, -0.5, 14.5);
168  hCSCHaloData_TrackMultiplicityMEPlus = ibooker.book1D("CSCHaloData_TrackMultiplicityMEPlus", "", 15, -0.5, 14.5);
169  hCSCHaloData_TrackMultiplicityMEMinus = ibooker.book1D("CSCHaloData_TrackMultiplicityMEMinus", "", 15, -0.5, 14.5);
170  hCSCHaloData_InnerMostTrackHitXY = ibooker.book2D("CSCHaloData_InnerMostTrackHitXY","", 100,-700,700,100, -700,700);
171  hCSCHaloData_InnerMostTrackHitR = ibooker.book1D("CSCHaloData_InnerMostTrackHitR", "", 400, -0.5, 799.5);
172  hCSCHaloData_InnerMostTrackHitRPlusZ = ibooker.book2D("CSCHaloData_InnerMostTrackHitRPlusZ","", 400 , 400, 1200, 400, -0.5, 799.5 );
173  hCSCHaloData_InnerMostTrackHitRMinusZ = ibooker.book2D("CSCHaloData_InnerMostTrackHitRMinusZ","", 400 , -1200, -400, 400, -0.5, 799.5 );
174  hCSCHaloData_InnerMostTrackHitiPhi = ibooker.book1D("CSCHaloData_InnerMostTrackHitiPhi","", 72, 0.5, 72.5);
175  hCSCHaloData_InnerMostTrackHitPhi = ibooker.book1D("CSCHaloData_InnerMostTrackHitPhi","", 60, -3.2, 3.2);
176  hCSCHaloData_L1HaloTriggersMEPlus = ibooker.book1D("CSCHaloData_L1HaloTriggersMEPlus", "", 10, -0.5, 9.5);
177  hCSCHaloData_L1HaloTriggersMEMinus = ibooker.book1D("CSCHaloData_L1HaloTriggersMEMinus", "" , 10, -0.5, 9.5);
178  hCSCHaloData_L1HaloTriggers = ibooker.book1D("CSCHaloData_L1HaloTriggers", "", 10, -0.5, 9.5);
179  hCSCHaloData_HLHaloTriggers = ibooker.book1D("CSCHaloData_HLHaloTriggers", "", 2, -0.5, 1.5);
180  hCSCHaloData_NOutOfTimeTriggersvsL1HaloExists = ibooker.book2D("CSCHaloData_NOutOfTimeTriggersvsL1HaloExists", "", 20, -0.5, 19.5, 2, -0.5, 1.5);
181  hCSCHaloData_NOutOfTimeTriggers = ibooker.book1D("CSCHaloData_NOutOfTimeTriggers", "", 20, -0.5, 19.5);
182  hCSCHaloData_NOutOfTimeHits = ibooker.book1D("CSCHaloData_NOutOfTimeHits", "", 60, -0.5, 59.5);
183  hCSCHaloData_NTracksSmalldT = ibooker.book1D("CSCHaloData_NTracksSmalldT", "", 15, -0.5, 14.5);
184  hCSCHaloData_NTracksSmallBeta = ibooker.book1D("CSCHaloData_NTracksSmallBeta", "", 15, -0.5, 14.5);
185  hCSCHaloData_NTracksSmallBetaAndSmalldT = ibooker.book1D("CSCHaloData_NTracksSmallBetaAndSmalldT", "", 15, -0.5, 14.5);
186  hCSCHaloData_NTracksSmalldTvsNHaloTracks = ibooker.book2D("CSCHaloData_NTracksSmalldTvsNHaloTracks","",15, -0.5, 14.5,15, -0.5, 14.5);
187  hCSCHaloData_SegmentdT = ibooker.book1D("CSCHaloData_SegmentdT","",100,-100,100);
188  hCSCHaloData_FreeInverseBeta = ibooker.book1D("CSCHaloData_FreeInverseBeta","",80,-4,4);
189  hCSCHaloData_FreeInverseBetaVsSegmentdT = ibooker.book2D("CSCHaloData_FreeInverseBetaVsSegmentdT","",100,-100,100,80,-4,4);
190  // MLR
191  hCSCHaloData_NFlatHaloSegments = ibooker.book1D("CSCHaloData_NFlatHaloSegments","",20,0,20);
192  hCSCHaloData_SegmentsInBothEndcaps = ibooker.book1D("CSCHaloData_SegmentsInBothEndcaps","",2,0,2);
193  hCSCHaloData_NFlatSegmentsInBothEndcaps = ibooker.book1D("CSCHaloData_NFlatSegmentsInBothEndcaps","",20,0,20);
194  // End MLR
195  }
196 
197  // GlobalHaloData
198  ibooker.setCurrentFolder(FolderName+"/GlobalHaloData");
199  if(!StandardDQM)
200  {
201  hGlobalHaloData_MExCorrection = ibooker.book1D("GlobalHaloData_MExCorrection", "" , 200, -200., 200.);
202  hGlobalHaloData_MEyCorrection = ibooker.book1D("GlobalHaloData_MEyCorrection", "" , 200, -200., 200.);
203  hGlobalHaloData_SumEtCorrection = ibooker.book1D("GlobalHaloData_SumEtCorrection", "" , 200, -0.5, 399.5);
204  hGlobalHaloData_HaloCorrectedMET = ibooker.book1D("GlobalHaloData_HaloCorrectedMET", "" , 500, -0.5, 1999.5);
205  hGlobalHaloData_RawMETMinusHaloCorrectedMET = ibooker.book1D("GlobalHaloData_RawMETMinusHaloCorrectedMET","" , 250, -500., 500.);
206  hGlobalHaloData_RawMETOverSumEt = ibooker.book1D("GlobalHaloData_RawMETOverSumEt","" , 100, 0.0, 1.0);
207  hGlobalHaloData_MatchedHcalPhiWedgeMultiplicity = ibooker.book1D("GlobalHaloData_MatchedHcalPhiWedgeMultiplicity","", 15, -0.5, 14.5);
208  hGlobalHaloData_MatchedHcalPhiWedgeEnergy = ibooker.book1D("GlobalHaloData_MatchedHcalPhiWedgeEnergy", "", 50,-0.5,199.5);
209  hGlobalHaloData_MatchedHcalPhiWedgeConstituents = ibooker.book1D("GlobalHaloData_MatchedHcalPhiWedgeConstituents","", 20,-0.5, 19.5);
210  hGlobalHaloData_MatchedHcalPhiWedgeiPhi = ibooker.book1D("GlobalHaloData_MatchedHcalPhiWedgeiPhi","", 1, 0.5,72.5);
211  hGlobalHaloData_MatchedHcalPhiWedgeMinTime = ibooker.book1D("GlobalHaloData_MatchedHcalPhiWedgeMinTime", "", 50, -100.0, 100.0);
212  hGlobalHaloData_MatchedHcalPhiWedgeMaxTime = ibooker.book1D("GlobalHaloData_MatchedHcalPhiWedgeMaxTime", "", 50, -100.0, 100.0);
213  hGlobalHaloData_MatchedHcalPhiWedgeZDirectionConfidence = ibooker.book1D("GlobalHaloData_MatchedHcalPhiWedgeZDirectionConfidence","", 120, -1.2, 1.2);
214  hGlobalHaloData_MatchedEcalPhiWedgeMultiplicity = ibooker.book1D("GlobalHaloData_MatchedEcalPhiWedgeMultiplicity","", 15, -0.5, 14.5);
215  hGlobalHaloData_MatchedEcalPhiWedgeEnergy = ibooker.book1D("GlobalHaloData_MatchedEcalPhiWedgeEnergy", "", 50,-0.5,199.5);
216  hGlobalHaloData_MatchedEcalPhiWedgeConstituents = ibooker.book1D("GlobalHaloData_MatchedEcalPhiWedgeConstituents","", 20,-0.5, 19.5);
217  hGlobalHaloData_MatchedEcalPhiWedgeiPhi = ibooker.book1D("GlobalHaloData_MatchedEcalPhiWedgeiPhi","", 360, 0.5,360.5);
218  hGlobalHaloData_MatchedEcalPhiWedgeMinTime = ibooker.book1D("GlobalHaloData_MatchedEcalPhiWedgeMinTime", "", 50, -100.0, 100.0);
219  hGlobalHaloData_MatchedEcalPhiWedgeMaxTime = ibooker.book1D("GlobalHaloData_MatchedEcalPhiWedgeMaxTime", "", 50, -100.0, 100.0);
220  hGlobalHaloData_MatchedEcalPhiWedgeZDirectionConfidence = ibooker.book1D("GlobalHaloData_MatchedEcalPhiWedgeZDirectionConfidence","", 120, 1.2, 1.2);
221  }
222  // BeamHaloSummary
223  ibooker.setCurrentFolder(FolderName+"/BeamHaloSummary");
224 
225  hBeamHaloSummary_Id = ibooker.book1D("BeamHaloSumamry_Id", "", 11, 0.5,11.5);
226  hBeamHaloSummary_Id ->setBinLabel(1,"CSC Loose");
227  hBeamHaloSummary_Id ->setBinLabel(2,"CSC Tight");
228  hBeamHaloSummary_Id ->setBinLabel(3,"Ecal Loose");
229  hBeamHaloSummary_Id ->setBinLabel(4,"Ecal Tight");
230  hBeamHaloSummary_Id ->setBinLabel(5,"Hcal Loose");
231  hBeamHaloSummary_Id ->setBinLabel(6,"Hcal Tight");
232  hBeamHaloSummary_Id ->setBinLabel(7,"Global Loose");
233  hBeamHaloSummary_Id ->setBinLabel(8,"Global Tight");
234  hBeamHaloSummary_Id ->setBinLabel(9,"Event Loose");
235  hBeamHaloSummary_Id ->setBinLabel(10,"Event Tight");
236  hBeamHaloSummary_Id ->setBinLabel(11,"Nothing");
237  if(!StandardDQM)
238  {
239  hBeamHaloSummary_BXN = ibooker.book2D("BeamHaloSummary_BXN", "",11, 0.5, 11.5, 4000, -0.5,3999.5);
240  hBeamHaloSummary_BXN ->setBinLabel(1,"CSC Loose");
241  hBeamHaloSummary_BXN ->setBinLabel(2,"CSC Tight");
242  hBeamHaloSummary_BXN ->setBinLabel(3,"Ecal Loose");
243  hBeamHaloSummary_BXN ->setBinLabel(4,"Ecal Tight");
244  hBeamHaloSummary_BXN ->setBinLabel(5,"Hcal Loose");
245  hBeamHaloSummary_BXN ->setBinLabel(6,"Hcal Tight");
246  hBeamHaloSummary_BXN ->setBinLabel(7,"Global Loose");
247  hBeamHaloSummary_BXN ->setBinLabel(8,"Global Tight");
248  hBeamHaloSummary_BXN ->setBinLabel(9,"Event Loose");
249  hBeamHaloSummary_BXN ->setBinLabel(10,"Event Tight");
250  hBeamHaloSummary_BXN ->setBinLabel(11,"Nothing");
251  }
252  // Extra
253  ibooker.setCurrentFolder(FolderName+"/ExtraHaloData");
254  if(StandardDQM)
255  {
256  hExtra_CSCTrackInnerOuterDPhi = ibooker.book1D("Extra_CSCTrackInnerOuterDPhi","", 30, 0, 3.2);
257  hExtra_CSCTrackInnerOuterDEta = ibooker.book1D("Extra_CSCTrackInnerOuterDEta","", 100, 0, 3.0 );
258  hExtra_CSCTrackChi2Ndof = ibooker.book1D("Extra_CSCTrackChi2Ndof","", 25, 0, 10);
259  hExtra_CSCTrackNHits = ibooker.book1D("Extra_CSCTrackNHits","", 75,0, 75);
260  hExtra_CSCActivityWithMET= ibooker.book2D("Extra_CSCActivityWithMET", "", 4, 0.5, 4.5, 4, 0.5, 4.5);
261  hExtra_CSCActivityWithMET->setBinLabel(1,"Track",1);
262  hExtra_CSCActivityWithMET->setBinLabel(1,"Track",2);
263  hExtra_CSCActivityWithMET->setBinLabel(2, "Segments",1);
264  hExtra_CSCActivityWithMET->setBinLabel(2, "Segments",2);
265  hExtra_CSCActivityWithMET->setBinLabel(3, "RecHits", 1);
266  hExtra_CSCActivityWithMET->setBinLabel(3, "RecHits", 2);
267  hExtra_CSCActivityWithMET->setBinLabel(4, "Nothing", 1);
268  hExtra_CSCActivityWithMET->setBinLabel(4, "Nothing", 2);
269  hExtra_InnerMostTrackHitR = ibooker.book1D("Extra_InnerMostTrackHitR", "", 70, 99.5, 799.5);
270  hExtra_InnerMostTrackHitPhi = ibooker.book1D("Extra_InnerMostTrackHitPhi","", 60, -3.2, 3.2);
271  }
272  else
273  {
274  hExtra_CSCActivityWithMET= ibooker.book2D("Extra_CSCActivityWithMET", "", 4, 0.5, 4.5, 4, 0.5, 4.5);
275  hExtra_CSCActivityWithMET->setBinLabel(1,"Track",1);
276  hExtra_CSCActivityWithMET->setBinLabel(1,"Track",2);
277  hExtra_CSCActivityWithMET->setBinLabel(2, "Segments",1);
278  hExtra_CSCActivityWithMET->setBinLabel(2, "Segments",2);
279  hExtra_CSCActivityWithMET->setBinLabel(3, "RecHits", 1);
280  hExtra_CSCActivityWithMET->setBinLabel(3, "RecHits", 2);
281  hExtra_CSCActivityWithMET->setBinLabel(4, "Nothing", 1);
282  hExtra_CSCActivityWithMET->setBinLabel(4, "Nothing", 2);
283  hExtra_HcalToF = ibooker.book2D("Extra_HcalToF","" , 83,-41.5,41.5 , 1000, -125., 125.);
284  hExtra_HcalToF_HaloId = ibooker.book2D("Extra_HcalToF_HaloId","", 83,-41.5,41.5 , 1000, -125., 125.);
285  hExtra_EcalToF = ibooker.book2D("Extra_EcalToF","", 171,-85.5,85.5 , 2000, -225., 225.);
286  hExtra_EcalToF_HaloId = ibooker.book2D("Extra_EcalToF_HaloId","", 171,-85.5,85.5 , 2000, -225., 225.);
287  hExtra_CSCTrackInnerOuterDPhi = ibooker.book1D("Extra_CSCTrackInnerOuterDPhi","", 30, 0, 3.2);
288  hExtra_CSCTrackInnerOuterDEta = ibooker.book1D("Extra_CSCTrackInnerOuterDEta","", 30, 0, 3.2);
289  hExtra_CSCTrackChi2Ndof = ibooker.book1D("Extra_CSCTrackChi2Ndof","", 100, 0, 10);
290  hExtra_CSCTrackNHits = ibooker.book1D("Extra_CSCTrackNHits","", 75,0, 75);
291  hExtra_InnerMostTrackHitXY = ibooker.book2D("Extra_InnerMostTrackHitXY","", 100,-700,700,100, -700,700);
292  hExtra_InnerMostTrackHitR = ibooker.book1D("Extra_InnerMostTrackHitR", "", 400, -0.5, 799.5);
293  hExtra_InnerMostTrackHitRPlusZ = ibooker.book2D("Extra_InnerMostTrackHitRPlusZ","", 400 , 400, 1200, 400, -0.5, 799.5 );
294  hExtra_InnerMostTrackHitRMinusZ = ibooker.book2D("Extra_InnerMostTrackHitRMinusZ","", 400 , -1200, -400, 400, -0.5, 799.5 );
295  hExtra_InnerMostTrackHitiPhi = ibooker.book1D("Extra_InnerMostTrackHitiPhi","", 72, 0.5, 72.5);
296  hExtra_InnerMostTrackHitPhi = ibooker.book1D("Extra_InnerMostTrackHitPhi","", 60, -3.2, 3.2);
297  hExtra_BXN = ibooker.book1D("Extra_BXN", "BXN Occupancy", 4000, 0.5, 4000.5);
298  }
299 }
300 
302 {
303  EventID TheEvent = iEvent.id();
304  int BXN = iEvent.bunchCrossing() ;
305  bool Dump = !TextFileName.empty();
306  edm::EventNumber_t TheEventNumber = TheEvent.event();
308  edm::RunNumber_t Run = iEvent.run();
309 
310  //Get CSC Geometry
311  edm::ESHandle<CSCGeometry> TheCSCGeometry;
312  iSetup.get<MuonGeometryRecord>().get(TheCSCGeometry);
313 
314  //Get CaloGeometry
315  edm::ESHandle<CaloGeometry> TheCaloGeometry;
316  iSetup.get<CaloGeometryRecord>().get(TheCaloGeometry);
317 
318  //Get Stand-alone Muons from Cosmic Muon Reconstruction
320  iEvent.getByToken(IT_CosmicStandAloneMuon, TheCosmics);
322  iEvent.getByToken(IT_CSCTimeMapToken,TheCSCTimeMap);
323  bool CSCTrackPlus = false; bool CSCTrackMinus = false;
324  int imucount=0;
325  if( TheCosmics.isValid() )
326  {
327  for( reco::MuonCollection::const_iterator iMuon = TheCosmics->begin() ; iMuon != TheCosmics->end() ; iMuon++, imucount++ )
328  {
329  reco::TrackRef Track = iMuon->outerTrack();
330  if(!Track) continue;
331 
332  if( !CSCTrackPlus || !CSCTrackMinus )
333  {
334  if( Track->eta() > 0 || Track->outerPosition().z() > 0 || Track->innerPosition().z() > 0 ) CSCTrackPlus = true ;
335  else if( Track->eta() < 0 || Track->outerPosition().z() < 0 || Track->innerPosition().z() < 0) CSCTrackMinus = true;
336  }
337 
338  float innermost_phi = 0.;
339  float outermost_phi = 0.;
340  float innermost_z = 99999.;
341  float outermost_z = 0.;
342  float innermost_eta = 0.;
343  float outermost_eta = 0.;
344  float innermost_x =0.;
345  float innermost_y =0.;
346  float innermost_r =0.;
347  for(unsigned int j = 0 ; j < Track->extra()->recHitsSize(); j++ )
348  {
349  auto hit = Track->extra()->recHitRef(j);
350  DetId TheDetUnitId(hit->geographicalId());
351  if( TheDetUnitId.det() != DetId::Muon ) continue;
352  if( TheDetUnitId.subdetId() != MuonSubdetId::CSC ) continue;
353 
354  const GeomDetUnit *TheUnit = TheCSCGeometry->idToDetUnit(TheDetUnitId);
355  LocalPoint TheLocalPosition = hit->localPosition();
356  const BoundPlane& TheSurface = TheUnit->surface();
357  const GlobalPoint TheGlobalPosition = TheSurface.toGlobal(TheLocalPosition);
358 
359  float z = TheGlobalPosition.z();
360  if( TMath::Abs(z) < innermost_z )
361  {
362  innermost_phi = TheGlobalPosition.phi();
363  innermost_eta = TheGlobalPosition.eta();
364  innermost_z = TheGlobalPosition.z();
365  innermost_x = TheGlobalPosition.x();
366  innermost_y = TheGlobalPosition.y();
367  innermost_r = TMath::Sqrt( innermost_x*innermost_x + innermost_y*innermost_y );
368  }
369  if( TMath::Abs(z) > outermost_z)
370  {
371  outermost_phi = TheGlobalPosition.phi() ;
372  outermost_eta = TheGlobalPosition.eta() ;
373  outermost_z = TheGlobalPosition.z();
374  }
375  }
376  float dphi = TMath::Abs( outermost_phi - innermost_phi );
377  float deta = TMath::Abs( outermost_eta - innermost_eta );
378  hExtra_CSCTrackInnerOuterDPhi -> Fill( dphi );
379  hExtra_CSCTrackInnerOuterDEta -> Fill( deta );
380  hExtra_CSCTrackChi2Ndof -> Fill(Track->normalizedChi2() );
381  hExtra_CSCTrackNHits -> Fill(Track->numberOfValidHits() );
382  hExtra_InnerMostTrackHitR ->Fill(innermost_r);
383  hExtra_InnerMostTrackHitPhi ->Fill(innermost_phi);
384  if( !StandardDQM )
385  {
386  hExtra_InnerMostTrackHitXY ->Fill(innermost_x, innermost_y);
387  hExtra_InnerMostTrackHitiPhi ->Fill(Phi_To_iPhi(innermost_phi));
388  if(innermost_z > 0 )
389  hExtra_InnerMostTrackHitRPlusZ ->Fill(innermost_z, innermost_r);
390  else
391  hExtra_InnerMostTrackHitRMinusZ ->Fill(innermost_z, innermost_r);
392  }
393 
394  std::vector<const CSCSegment*> MatchedSegments = TheMatcher->matchCSC(*Track,iEvent);
395  // Find the inner and outer segments separately in case they don't agree completely with recHits
396  // Plan for the possibility segments in both endcaps
397  float InnerSegmentTime[2] = {0,0};
398  float OuterSegmentTime[2] = {0,0};
399  float innermost_seg_z[2] = {1500,1500};
400  float outermost_seg_z[2] = {0,0};
401  for (std::vector<const CSCSegment*>::const_iterator segment =MatchedSegments.begin();
402  segment != MatchedSegments.end(); ++segment)
403  {
404  CSCDetId TheCSCDetId((*segment)->cscDetId());
405  const CSCChamber* TheCSCChamber = TheCSCGeometry->chamber(TheCSCDetId);
406  LocalPoint TheLocalPosition = (*segment)->localPosition();
407  const GlobalPoint TheGlobalPosition = TheCSCChamber->toGlobal(TheLocalPosition);
408  float z = TheGlobalPosition.z();
409  int TheEndcap = TheCSCDetId.endcap();
410  if( TMath::Abs(z) < innermost_seg_z[TheEndcap-1] )
411  {
412  innermost_seg_z[TheEndcap-1] = TMath::Abs(z);
413  InnerSegmentTime[TheEndcap-1] = (*segment)->time();
414  }
415  if( TMath::Abs(z) > outermost_seg_z[TheEndcap-1] )
416  {
417  outermost_seg_z[TheEndcap-1] = TMath::Abs(z);
418  OuterSegmentTime[TheEndcap-1] = (*segment)->time();
419  }
420  }
421 
422  float dT_Segment = 0; // default safe value, looks like collision muon
423  if( innermost_seg_z[0] < outermost_seg_z[0]) // two segments in ME+
424  dT_Segment = OuterSegmentTime[0]-InnerSegmentTime[0];
425  if( innermost_seg_z[1] < outermost_seg_z[1]) // two segments in ME-
426  {
427  // replace the measurement if there weren't segments in ME+ or
428  // if the track in ME- has timing more consistent with an incoming particle
429  if (dT_Segment == 0.0 || OuterSegmentTime[1]-InnerSegmentTime[1] < dT_Segment)
430  dT_Segment = OuterSegmentTime[1]-InnerSegmentTime[1] ;
431  }
432  hCSCHaloData_SegmentdT->Fill(dT_Segment);
433 
434  // Analyze the MuonTimeExtra information
435  reco::MuonRef muonR(TheCosmics,imucount);
436  if (TheCSCTimeMap.isValid()){
437  const reco::MuonTimeExtraMap & timeMapCSC = *TheCSCTimeMap;
438  reco::MuonTimeExtra timecsc = timeMapCSC[muonR];
439  float freeInverseBeta = timecsc.freeInverseBeta();
440  hCSCHaloData_FreeInverseBeta->Fill(freeInverseBeta);
441  hCSCHaloData_FreeInverseBetaVsSegmentdT->Fill(dT_Segment,freeInverseBeta);
442  }
443 
444  }
445  }
446 
447  //Get CSC Segments
448  edm::Handle<CSCSegmentCollection> TheCSCSegments;
449  iEvent.getByToken(IT_CSCSegment, TheCSCSegments);
450 
451  // Group segments according to endcaps
452  std::vector< CSCSegment> vCSCSegments_Plus;
453  std::vector< CSCSegment> vCSCSegments_Minus;
454 
455  bool CSCSegmentPlus = false;
456  bool CSCSegmentMinus=false;
457  if( TheCSCSegments.isValid() )
458  {
459  for(CSCSegmentCollection::const_iterator iSegment = TheCSCSegments->begin(); iSegment != TheCSCSegments->end(); iSegment++)
460  {
461  const std::vector<CSCRecHit2D> vCSCRecHits = iSegment->specificRecHits();
462  CSCDetId iDetId = (CSCDetId)(*iSegment).cscDetId();
463 
464  if ( iDetId.endcap() == 1 ) vCSCSegments_Plus.push_back( *iSegment );
465  else vCSCSegments_Minus.push_back( *iSegment );
466  }
467  }
468 
469  // Are there segments on the plus/minus side?
470  if( !vCSCSegments_Plus.empty() ) CSCSegmentPlus = true;
471  if( !vCSCSegments_Minus.empty() ) CSCSegmentMinus = true;
472 
473  //Get CSC RecHits
474  Handle<CSCRecHit2DCollection> TheCSCRecHits;
475  iEvent.getByToken(IT_CSCRecHit, TheCSCRecHits);
476  bool CSCRecHitPlus = false;
477  bool CSCRecHitMinus = false;
478  if( TheCSCRecHits.isValid() )
479  {
480  for(CSCRecHit2DCollection::const_iterator iCSCRecHit = TheCSCRecHits->begin(); iCSCRecHit != TheCSCRecHits->end(); iCSCRecHit++ )
481  {
482  DetId TheDetUnitId(iCSCRecHit->geographicalId());
483  const GeomDetUnit *TheUnit = (*TheCSCGeometry).idToDetUnit(TheDetUnitId);
484  LocalPoint TheLocalPosition = iCSCRecHit->localPosition();
485  const BoundPlane& TheSurface = TheUnit->surface();
486  GlobalPoint TheGlobalPosition = TheSurface.toGlobal(TheLocalPosition);
487 
488  //Are there hits on the plus/minus side?
489  if ( TheGlobalPosition.z() > 0 ) CSCRecHitPlus = true;
490  else CSCRecHitMinus = true;
491  }
492  }
493 
494  //Get EB RecHits
495  edm::Handle<EBRecHitCollection> TheEBRecHits;
496  iEvent.getByToken(IT_EBRecHit, TheEBRecHits);
497  int EBHits=0;
498  if( TheEBRecHits.isValid() )
499  {
500  for( EBRecHitCollection::const_iterator iEBRecHit = TheEBRecHits->begin() ; iEBRecHit != TheEBRecHits->end(); iEBRecHit++)
501  {
502  if( iEBRecHit->energy() < 0.5 ) continue;
503  DetId id = DetId( iEBRecHit->id() ) ;
504  EBDetId EcalId ( id.rawId() );
505  int ieta = EcalId.ieta() ;
506  if(!StandardDQM)
507  hExtra_EcalToF ->Fill(ieta, iEBRecHit->time() );
508  EBHits++;
509  }
510  }
511 
512 
513  //Get HB/HE RecHits
514  edm::Handle<HBHERecHitCollection> TheHBHERecHits;
515  iEvent.getByToken(IT_HBHERecHit, TheHBHERecHits);
516  if( TheHBHERecHits.isValid() )
517  {
518  for( HBHERecHitCollection::const_iterator iHBHERecHit = TheHBHERecHits->begin(); iHBHERecHit != TheHBHERecHits->end(); iHBHERecHit++)
519  {
520  if( iHBHERecHit->energy() < 1.) continue;
521  HcalDetId id = HcalDetId( iHBHERecHit->id() );
522  if(!StandardDQM)
523  hExtra_HcalToF->Fill( id.ieta(), iHBHERecHit->time() ) ;
524  }
525  }
526 
527  //Get MET
529  iEvent.getByToken(IT_met, TheCaloMET);
530 
531  //Get CSCHaloData
532  edm::Handle<reco::CSCHaloData> TheCSCDataHandle;
533  iEvent.getByToken(IT_CSCHaloData,TheCSCDataHandle);
534  int TheHaloOrigin = 0;
535  if (TheCSCDataHandle.isValid())
536  {
537  const CSCHaloData CSCData = (*TheCSCDataHandle.product());
539  TheHaloOrigin = 1;
541  TheHaloOrigin = -1 ;
542 
543  for( std::vector<GlobalPoint>::const_iterator i=CSCData.GetCSCTrackImpactPositions().begin(); i != CSCData.GetCSCTrackImpactPositions().end() ; i++ )
544  {
545  float r = TMath::Sqrt( i->x()*i->x() + i->y()*i->y() );
546  if( !StandardDQM )
547  {
548  hCSCHaloData_InnerMostTrackHitXY->Fill( i->x(), i->y() );
549  hCSCHaloData_InnerMostTrackHitiPhi ->Fill( Phi_To_iPhi( i->phi()));
550  if( i->z() > 0 )
551  hCSCHaloData_InnerMostTrackHitRPlusZ ->Fill(i->z(), r) ;
552  else
553  hCSCHaloData_InnerMostTrackHitRMinusZ ->Fill(i->z(), r) ;
554  }
555  hCSCHaloData_InnerMostTrackHitR ->Fill(r);
556  hCSCHaloData_InnerMostTrackHitPhi ->Fill( i->phi());
557  }
558  hCSCHaloData_L1HaloTriggersMEPlus -> Fill ( CSCData.NumberOfHaloTriggers(HaloData::plus) );
559  hCSCHaloData_L1HaloTriggersMEMinus -> Fill ( CSCData.NumberOfHaloTriggers(HaloData::minus));
560  hCSCHaloData_L1HaloTriggers -> Fill ( CSCData.NumberOfHaloTriggers(HaloData::both));
561  hCSCHaloData_HLHaloTriggers -> Fill ( CSCData.CSCHaloHLTAccept());
562  hCSCHaloData_TrackMultiplicityMEPlus ->Fill ( CSCData.NumberOfHaloTracks(HaloData::plus) );
563  hCSCHaloData_TrackMultiplicityMEMinus ->Fill ( CSCData.NumberOfHaloTracks(HaloData::minus) );
564  hCSCHaloData_TrackMultiplicity->Fill( CSCData.GetTracks().size() );
565  hCSCHaloData_NOutOfTimeTriggersMEPlus->Fill( CSCData.NOutOfTimeTriggers(HaloData::plus) );
566  hCSCHaloData_NOutOfTimeTriggersMEMinus->Fill( CSCData.NOutOfTimeTriggers(HaloData::minus) );
567  hCSCHaloData_NOutOfTimeTriggers->Fill( CSCData.NOutOfTimeTriggers(HaloData::both) );
568  hCSCHaloData_NOutOfTimeHits->Fill( CSCData.NOutOfTimeHits() );
569  hCSCHaloData_NOutOfTimeTriggersvsL1HaloExists->Fill( CSCData.NOutOfTimeTriggers(HaloData::both), CSCData.NumberOfHaloTriggers(HaloData::both) >0 );
570  hCSCHaloData_NTracksSmalldT ->Fill( CSCData.NTracksSmalldT() );
571  hCSCHaloData_NTracksSmallBeta ->Fill( CSCData.NTracksSmallBeta() );
572  hCSCHaloData_NTracksSmallBetaAndSmalldT->Fill( CSCData.NTracksSmallBetaAndSmalldT());
573  hCSCHaloData_NTracksSmalldTvsNHaloTracks->Fill( CSCData.GetTracks().size(), CSCData.NTracksSmalldT() );
574  // MLR
575  hCSCHaloData_NFlatHaloSegments->Fill(CSCData.NFlatHaloSegments());
576  hCSCHaloData_SegmentsInBothEndcaps->Fill(CSCData.GetSegmentsInBothEndcaps());
577  if (CSCData.GetSegmentsInBothEndcaps())
578  hCSCHaloData_NFlatSegmentsInBothEndcaps->Fill(CSCData.NFlatHaloSegments());
579  // End MLR
580  }
581 
582  //Get EcalHaloData
583  edm::Handle<reco::EcalHaloData> TheEcalHaloData;
584  iEvent.getByToken(IT_EcalHaloData, TheEcalHaloData );
585  if( TheEcalHaloData.isValid() )
586  {
587  const EcalHaloData EcalData = (*TheEcalHaloData.product());
588  std::vector<PhiWedge> EcalWedges = EcalData.GetPhiWedges();
589  for(std::vector<PhiWedge>::const_iterator iWedge = EcalWedges.begin() ; iWedge != EcalWedges.end(); iWedge ++ )
590  {
591  if(!StandardDQM )
592  {
593  hEcalHaloData_PhiWedgeEnergy->Fill( iWedge->Energy() );
594  hEcalHaloData_PhiWedgeMinTime ->Fill( iWedge->MinTime() );
595  hEcalHaloData_PhiWedgeMaxTime ->Fill( iWedge->MaxTime() );
596  hEcalHaloData_PhiWedgeMinVsMaxTime->Fill(iWedge->MinTime() , iWedge->MaxTime() ) ;
597  hEcalHaloData_PhiWedgePlusZDirectionConfidence->Fill( iWedge->PlusZDirectionConfidence() );
598  hEcalHaloData_PhiWedgeiPhi->Fill(iWedge->iPhi() ) ;
599  }
600  hEcalHaloData_PhiWedgeZDirectionConfidence ->Fill( iWedge->ZDirectionConfidence() );
601  hEcalHaloData_PhiWedgeConstituents->Fill( iWedge->NumberOfConstituents() ) ;
602  }
603 
604  hEcalHaloData_PhiWedgeMultiplicity->Fill( EcalWedges.size() );
605 
606  edm::ValueMap<float> vm_Angle = EcalData.GetShowerShapesAngle();
607  edm::ValueMap<float> vm_Roundness = EcalData.GetShowerShapesRoundness();
608  //Access selected SuperClusters
609  for(unsigned int n = 0 ; n < EcalData.GetSuperClusters().size() ; n++ )
610  {
612  float angle = vm_Angle[cluster];
613  float roundness = vm_Roundness[cluster];
614  hEcalHaloData_SuperClusterShowerShapes->Fill(angle, roundness);
615  hEcalHaloData_SuperClusterNHits->Fill( cluster->size() );
616  hEcalHaloData_SuperClusterEnergy->Fill(cluster->energy() );
617 
618  if(!StandardDQM)
619  {
620  hEcalHaloData_SuperClusterPhiVsEta->Fill(cluster->eta() ,cluster->phi() );
621  }
622  }
623  }
624 
625  //Get HcalHaloData
626  edm::Handle<reco::HcalHaloData> TheHcalHaloData;
627  iEvent.getByToken(IT_HcalHaloData ,TheHcalHaloData );
628  if( TheHcalHaloData.isValid( ) )
629  {
630  const HcalHaloData HcalData = (*TheHcalHaloData.product());
631  std::vector<PhiWedge> HcalWedges = HcalData.GetPhiWedges();
632  hHcalHaloData_PhiWedgeMultiplicity ->Fill( HcalWedges.size() );
633  for(std::vector<PhiWedge>::const_iterator iWedge = HcalWedges.begin() ; iWedge != HcalWedges.end(); iWedge ++ )
634  {
635  if( !StandardDQM )
636  {
637  hHcalHaloData_PhiWedgeEnergy ->Fill( iWedge->Energy() );
638  hHcalHaloData_PhiWedgeMinTime ->Fill( iWedge->MinTime() );
639  hHcalHaloData_PhiWedgeMaxTime ->Fill( iWedge->MaxTime() );
640  hHcalHaloData_PhiWedgePlusZDirectionConfidence ->Fill( iWedge->PlusZDirectionConfidence() );
641  hHcalHaloData_PhiWedgeMinVsMaxTime ->Fill( iWedge->MinTime() , iWedge->MaxTime() );
642  hHcalHaloData_PhiWedgeiPhi ->Fill( iWedge->iPhi() );
643  }
644 
645  hHcalHaloData_PhiWedgeConstituents ->Fill( iWedge->NumberOfConstituents() );
646  hHcalHaloData_PhiWedgeZDirectionConfidence ->Fill( iWedge->ZDirectionConfidence() );
647  }
648  }
649 
650 
651  if(!StandardDQM)
652  {
653  //Get GlobalHaloData
654  edm::Handle<reco::GlobalHaloData> TheGlobalHaloData;
655  iEvent.getByToken(IT_GlobalHaloData, TheGlobalHaloData );
656  if( TheGlobalHaloData.isValid() )
657  {
658  const GlobalHaloData GlobalData =(*TheGlobalHaloData.product());
659  if( TheCaloMET.isValid() )
660  {
661  // Get Raw Uncorrected CaloMET
662  const CaloMETCollection *calometcol = TheCaloMET.product();
663  const CaloMET *RawMET = &(calometcol->front());
664 
665  // Get BeamHalo Corrected CaloMET
666  const CaloMET CorrectedMET = GlobalData.GetCorrectedCaloMET(*RawMET);
667  hGlobalHaloData_MExCorrection ->Fill( GlobalData.DeltaMEx() );
668  hGlobalHaloData_MEyCorrection ->Fill( GlobalData.DeltaMEy() );
669  hGlobalHaloData_HaloCorrectedMET->Fill(CorrectedMET.pt() );
670  hGlobalHaloData_RawMETMinusHaloCorrectedMET ->Fill( RawMET->pt() - CorrectedMET.pt() );
671  if( RawMET->sumEt() )
672  hGlobalHaloData_RawMETOverSumEt ->Fill( RawMET->pt() / RawMET->sumEt() );
673 
674  }
675 
676  // Get Matched Hcal Phi Wedges
677  std::vector<PhiWedge> HcalWedges = GlobalData.GetMatchedHcalPhiWedges();
678  hGlobalHaloData_MatchedHcalPhiWedgeMultiplicity ->Fill(HcalWedges.size());
679  // Loop over Matched Hcal Phi Wedges
680  for( std::vector<PhiWedge>::const_iterator iWedge = HcalWedges.begin() ; iWedge != HcalWedges.end() ; iWedge ++ )
681  {
682  hGlobalHaloData_MatchedHcalPhiWedgeEnergy ->Fill( iWedge->Energy() );
683  hGlobalHaloData_MatchedHcalPhiWedgeConstituents ->Fill( iWedge->NumberOfConstituents());
684  hGlobalHaloData_MatchedHcalPhiWedgeiPhi ->Fill( iWedge->iPhi() );
685  hGlobalHaloData_MatchedHcalPhiWedgeMinTime ->Fill( iWedge->MinTime() );
686  hGlobalHaloData_MatchedHcalPhiWedgeMaxTime ->Fill( iWedge->MaxTime() );
687  hGlobalHaloData_MatchedHcalPhiWedgeZDirectionConfidence ->Fill( iWedge->ZDirectionConfidence() ) ;
688  if( TheHBHERecHits.isValid() )
689  {
690  for( HBHERecHitCollection::const_iterator iHBHERecHit = TheHBHERecHits->begin(); iHBHERecHit != TheHBHERecHits->end(); iHBHERecHit++)
691  {
692  HcalDetId id = HcalDetId( iHBHERecHit->id() ) ;
693  int iphi = id.iphi() ;
694  if( iphi != iWedge->iPhi() ) continue;
695  if( iHBHERecHit->energy() < 1.0) continue; // Otherwise there are thousands of hits per event (even with negative energies)
696 
697  float time = iHBHERecHit->time();
698  int ieta = id.ieta();
699  hExtra_HcalToF_HaloId ->Fill( ieta, time );
700  }
701  }
702  }
703 
704  // Get Matched Hcal Phi Wedges
705  std::vector<PhiWedge> EcalWedges = GlobalData.GetMatchedEcalPhiWedges();
706  hGlobalHaloData_MatchedEcalPhiWedgeMultiplicity ->Fill(EcalWedges.size());
707  for( std::vector<PhiWedge>::const_iterator iWedge = EcalWedges.begin() ; iWedge != EcalWedges.end() ; iWedge ++ )
708  {
709  hGlobalHaloData_MatchedEcalPhiWedgeEnergy ->Fill(iWedge->Energy());
710  hGlobalHaloData_MatchedEcalPhiWedgeConstituents ->Fill(iWedge->NumberOfConstituents());
711  hGlobalHaloData_MatchedEcalPhiWedgeiPhi ->Fill(iWedge->iPhi());
712  hGlobalHaloData_MatchedEcalPhiWedgeMinTime ->Fill(iWedge->MinTime());
713  hGlobalHaloData_MatchedEcalPhiWedgeMaxTime ->Fill(iWedge->MaxTime());
714  hGlobalHaloData_MatchedEcalPhiWedgeZDirectionConfidence ->Fill( iWedge->ZDirectionConfidence() ) ;
715  if( TheEBRecHits.isValid() )
716  {
717  for( EBRecHitCollection::const_iterator iEBRecHit = TheEBRecHits->begin() ; iEBRecHit != TheEBRecHits->end(); iEBRecHit++ )
718  {
719  if( iEBRecHit->energy() < 0.5 ) continue;
720  DetId id = DetId( iEBRecHit->id() ) ;
721  EBDetId EcalId ( id.rawId() );
722  int iPhi = EcalId.iphi() ;
723  iPhi = (iPhi-1)/5 + 1;
724  if( iPhi != iWedge->iPhi() ) continue;
725  hExtra_EcalToF_HaloId ->Fill(EcalId.ieta(), iEBRecHit->time() );
726  }
727  }
728  }
729  }
730  }
731 
732 
733  // Get BeamHaloSummary
734  edm::Handle<BeamHaloSummary> TheBeamHaloSummary ;
735  iEvent.getByToken(IT_BeamHaloSummary, TheBeamHaloSummary) ;
736  if( TheBeamHaloSummary.isValid() )
737  {
738  const BeamHaloSummary TheSummary = (*TheBeamHaloSummary.product() );
739  if( TheSummary.CSCLooseHaloId() )
740  {
741  hBeamHaloSummary_Id ->Fill(1);
742  if(!StandardDQM) hBeamHaloSummary_BXN -> Fill( 1, BXN );
743  if(Dump)*out << std::setw(15) << "CSCLoose" << std::setw(15) << Run << std::setw(15) << Lumi << std::setw(15) << TheEventNumber << std::endl;
744  }
745  if( TheSummary.CSCTightHaloId() )
746  {
747  hBeamHaloSummary_Id ->Fill(2);
748  if(!StandardDQM)hBeamHaloSummary_BXN -> Fill( 2, BXN );
749  }
750  if( TheSummary.EcalLooseHaloId() )
751  {
752  hBeamHaloSummary_Id ->Fill(3);
753  if(!StandardDQM) hBeamHaloSummary_BXN -> Fill( 3, BXN );
754  if(Dump) *out << std::setw(15) << "EcalLoose" << std::setw(15) << Run << std::setw(15) << Lumi << std::setw(15) << TheEventNumber << std::endl;
755  }
756  if( TheSummary.EcalTightHaloId() )
757  {
758  hBeamHaloSummary_Id ->Fill(4);
759  if(!StandardDQM)hBeamHaloSummary_BXN -> Fill( 4, BXN );
760  }
761  if( TheSummary.HcalLooseHaloId() )
762  {
763  hBeamHaloSummary_Id ->Fill(5);
764  if(!StandardDQM) hBeamHaloSummary_BXN -> Fill( 5, BXN );
765  if(Dump) *out << std::setw(15) << "HcalLoose" << std::setw(15) << Run << std::setw(15) << Lumi << std::setw(15) << TheEventNumber << std::endl;
766  }
767  if( TheSummary.HcalTightHaloId() )
768  {
769  hBeamHaloSummary_Id ->Fill(6);
770  if(!StandardDQM)hBeamHaloSummary_BXN -> Fill( 6, BXN );
771  }
772  if( TheSummary.GlobalLooseHaloId())
773  {
774  hBeamHaloSummary_Id ->Fill(7);
775  if(!StandardDQM)hBeamHaloSummary_BXN -> Fill( 7, BXN );
776  if(Dump) *out << std::setw(15) << "GlobalLoose" << std::setw(15) << Run << std::setw(15) << Lumi << std::setw(15) << TheEventNumber << std::endl;
777  }
778  if( TheSummary.GlobalTightHaloId() )
779  {
780  hBeamHaloSummary_Id ->Fill(8);
781  if(!StandardDQM)hBeamHaloSummary_BXN -> Fill( 8, BXN );
782  }
783  if( TheSummary.LooseId() )
784  {
785  hBeamHaloSummary_Id ->Fill(9);
786  if(!StandardDQM)hBeamHaloSummary_BXN -> Fill( 9, BXN );
787  }
788  if( TheSummary.TightId() )
789  {
790  hBeamHaloSummary_Id ->Fill(10);
791  if(!StandardDQM)hBeamHaloSummary_BXN -> Fill( 10, BXN );
792  }
793  if( !TheSummary.EcalLooseHaloId() && !TheSummary.HcalLooseHaloId() && !TheSummary.CSCLooseHaloId() && !TheSummary.GlobalLooseHaloId() )
794  {
795  hBeamHaloSummary_Id ->Fill(11);
796  if(!StandardDQM)hBeamHaloSummary_BXN -> Fill( 11, BXN );
797  }
798  }
799 
800  if( TheCaloMET.isValid() )
801  {
802  const CaloMETCollection *calometcol = TheCaloMET.product();
803  const CaloMET *calomet = &(calometcol->front());
804 
805  if( calomet->pt() > DumpMET )
806  if(Dump) *out << std::setw(15) << "HighMET" << std::setw(15) << Run << std::setw(15) << Lumi << std::setw(15) << TheEventNumber << std::endl;
807 
808  //Fill CSC Activity Plot
809  if( calomet->pt() > 15.0 )
810  {
811  if( TheHaloOrigin > 0 )
812  {
813  if( CSCTrackPlus && CSCTrackMinus )
814  hExtra_CSCActivityWithMET->Fill(1,1);
815  else if( CSCTrackPlus && CSCSegmentMinus)
816  hExtra_CSCActivityWithMET->Fill(1,2);
817  else if( CSCTrackPlus && CSCRecHitMinus )
818  hExtra_CSCActivityWithMET->Fill(1,3);
819  else if( CSCTrackPlus )
820  hExtra_CSCActivityWithMET->Fill(1,4);
821  else if( CSCSegmentPlus && CSCTrackMinus )
822  hExtra_CSCActivityWithMET->Fill(2,1);
823  else if( CSCSegmentPlus && CSCSegmentMinus )
824  hExtra_CSCActivityWithMET-> Fill(2,2);
825  else if( CSCSegmentPlus && CSCRecHitMinus )
826  hExtra_CSCActivityWithMET-> Fill(2,3);
827  else if( CSCSegmentPlus )
828  hExtra_CSCActivityWithMET->Fill(2,4 );
829  else if( CSCRecHitPlus && CSCTrackMinus )
830  hExtra_CSCActivityWithMET->Fill(3,1);
831  else if( CSCRecHitPlus && CSCSegmentMinus )
832  hExtra_CSCActivityWithMET->Fill(3,2);
833  else if( CSCRecHitPlus && CSCRecHitMinus )
834  hExtra_CSCActivityWithMET->Fill(3,3);
835  else if( CSCRecHitPlus )
836  hExtra_CSCActivityWithMET->Fill(3,4);
837  else
838  hExtra_CSCActivityWithMET->Fill(4,4);
839  }
840  else if( TheHaloOrigin < 0 )
841  {
842  if( CSCTrackMinus && CSCTrackPlus )
843  hExtra_CSCActivityWithMET->Fill(1,1);
844  else if( CSCTrackMinus && CSCSegmentPlus)
845  hExtra_CSCActivityWithMET->Fill(1,2);
846  else if( CSCTrackMinus && CSCRecHitPlus )
847  hExtra_CSCActivityWithMET->Fill(1,3);
848  else if( CSCTrackMinus )
849  hExtra_CSCActivityWithMET->Fill(1,4);
850  else if( CSCSegmentMinus && CSCTrackPlus)
851  hExtra_CSCActivityWithMET->Fill(2,1);
852  else if( CSCSegmentMinus && CSCSegmentPlus )
853  hExtra_CSCActivityWithMET->Fill(2,2 );
854  else if( CSCSegmentMinus && CSCRecHitPlus )
855  hExtra_CSCActivityWithMET->Fill(2,3);
856  else if( CSCSegmentMinus )
857  hExtra_CSCActivityWithMET->Fill(2,4);
858  else if( CSCRecHitMinus && CSCTrackPlus )
859  hExtra_CSCActivityWithMET->Fill(3,1 );
860  else if( CSCRecHitMinus && CSCSegmentPlus )
861  hExtra_CSCActivityWithMET->Fill(3,2 );
862  else if( CSCRecHitMinus && CSCRecHitPlus )
863  hExtra_CSCActivityWithMET->Fill(3,3);
864  else if( CSCRecHitMinus )
865  hExtra_CSCActivityWithMET->Fill(3,4);
866  else hExtra_CSCActivityWithMET->Fill(4,4);
867  }
868  }
869  }
870 
871 }
872 
874 }
875 
876 //DEFINE_FWK_MODULE(CMSEventAnalyzer);
877 
878 
879 
880 
short int NOutOfTimeTriggers(HaloData::Endcap z=HaloData::both) const
Definition: CSCHaloData.h:46
const double Pi
string OutputFileName
const bool EcalTightHaloId() const
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:41
~BeamHaloAnalyzer() override
int NumberOfHaloTracks(HaloData::Endcap z=HaloData::both) const
Definition: CSCHaloData.cc:65
edm::ValueMap< float > & GetShowerShapesRoundness()
Definition: EcalHaloData.h:43
const bool HcalTightHaloId() const
const bool GlobalLooseHaloId() const
const std::vector< PhiWedge > & GetPhiWedges() const
Definition: EcalHaloData.h:34
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:519
edm::RefVector< reco::SuperClusterCollection > & GetSuperClusters()
Definition: EcalHaloData.h:38
const bool LooseId() const
edm::ValueMap< float > & GetShowerShapesAngle()
Definition: EcalHaloData.h:46
bool CSCHaloHLTAccept() const
Definition: CSCHaloData.h:42
short int NTracksSmallBetaAndSmalldT() const
Definition: CSCHaloData.h:53
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
std::vector< EcalRecHit >::const_iterator const_iterator
T y() const
Definition: PV3DBase.h:63
bool exists(std::string const &parameterName) const
checks if a parameter exists
int bunchCrossing() const
Definition: EventBase.h:66
unsigned long long EventNumber_t
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)
edm::LuminosityBlockNumber_t luminosityBlock() const
Definition: EventBase.h:63
short int NumberOfOutOfTimeTriggers(HaloData::Endcap z=HaloData::both) const
Definition: CSCHaloData.cc:55
double pt() const final
transverse momentum
const bool TightId() const
const bool GlobalTightHaloId() const
std::vector< PhiWedge > & GetMatchedEcalPhiWedges()
short int NFlatHaloSegments() const
Definition: CSCHaloData.h:56
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:42
unsigned int LuminosityBlockNumber_t
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
bool GetSegmentsInBothEndcaps() const
Definition: CSCHaloData.h:57
const bool HcalLooseHaloId() const
int endcap() const
Definition: CSCDetId.h:93
Collection of Calo MET.
const bool CSCTightHaloId() const
int Phi_To_iPhi(float phi)
short int NTracksSmallBeta() const
Definition: CSCHaloData.h:52
int iEvent
Definition: GenABIO.cc:230
double sumEt() const
Definition: MET.h:56
static const int CSC
Definition: MuonSubdetId.h:13
float DeltaMEx() const
float DeltaMEy() const
short int NTracksSmalldT() const
Definition: CSCHaloData.h:51
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
T z() const
Definition: PV3DBase.h:64
T Abs(T a)
Definition: MathUtil.h:49
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:118
RunNumber_t run() const
Definition: Event.h:108
const std::vector< GlobalPoint > & GetCSCTrackImpactPositions() const
Definition: CSCHaloData.h:88
void analyze(const edm::Event &, const edm::EventSetup &) override
short int NOutOfTimeHits() const
Definition: CSCHaloData.h:49
bool isValid() const
Definition: HandleBase.h:74
int NumberOfHaloTriggers(HaloData::Endcap z=HaloData::both) const
Definition: CSCHaloData.cc:32
reco::CaloMET GetCorrectedCaloMET(const reco::CaloMET &RawMET) const
const_iterator end() const
int iphi() const
get the cell iphi
Definition: HcalDetId.cc:103
Definition: DetId.h:18
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:279
T const * product() const
Definition: Handle.h:81
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:136
const T & get() const
Definition: EventSetup.h:58
const CSCChamber * chamber(CSCDetId id) const
Return the chamber corresponding to given DetId.
Definition: CSCGeometry.cc:118
std::string const & label() const
Definition: InputTag.h:36
T eta() const
Definition: PV3DBase.h:76
const GeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
Definition: CSCGeometry.cc:93
const bool CSCLooseHaloId() const
edm::EventID id() const
Definition: EventBase.h:60
fixed size matrix
HLT enums.
float freeInverseBeta() const
Definition: MuonTimeExtra.h:36
std::vector< PhiWedge > & GetMatchedHcalPhiWedges()
size_type size() const
Size of the RefVector.
Definition: RefVector.h:107
const std::vector< PhiWedge > & GetPhiWedges() const
Definition: HcalHaloData.h:48
unsigned int RunNumber_t
T x() const
Definition: PV3DBase.h:62
BeamHaloAnalyzer(const edm::ParameterSet &)
const bool EcalLooseHaloId() const
const_iterator begin() const
Definition: Run.h:43
edm::RefVector< reco::TrackCollection > & GetTracks()
Definition: CSCHaloData.h:69
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
Definition: angle.h:11