CMS 3D CMS Logo

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