00001
00002
00003
00004
00005
00006 #include "DQM/Physics/src/QcdUeDQM.h"
00007 #include "DataFormats/Common/interface/TriggerResults.h"
00008 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00009 #include "DataFormats/GeometryVector/interface/LocalPoint.h"
00010 #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h"
00011 #include "DataFormats/VertexReco/interface/VertexFwd.h"
00012 #include "DataFormats/VertexReco/interface/Vertex.h"
00013 #include "DQMServices/Core/interface/DQMStore.h"
00014 #include "DQMServices/Core/interface/MonitorElement.h"
00015 #include "FWCore/Framework/interface/Event.h"
00016 #include "FWCore/Framework/interface/EventSetup.h"
00017 #include "FWCore/Framework/interface/ESHandle.h"
00018 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00019 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00020 #include "FWCore/ServiceRegistry/interface/Service.h"
00021 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
00022 #include "CommonTools/RecoAlgos/src/TrackToRefCandidate.h"
00023 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
00024 #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetType.h"
00025 #include "Geometry/TrackerGeometryBuilder/interface/PixelGeomDetUnit.h"
00026 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
00027 #include "Geometry/TrackerGeometryBuilder/interface/RectangularPixelTopology.h"
00028 #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
00029 #include "AnalysisDataFormats/TrackInfo/interface/TrackInfo.h"
00030 #include "AnalysisDataFormats/TrackInfo/interface/TrackInfoTrackAssociation.h"
00031 #include "DataFormats/TrackReco/interface/Track.h"
00032 #include "DataFormats/Candidate/interface/CandidateFwd.h"
00033 #include "DataFormats/Candidate/interface/CandMatchMap.h"
00034 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00035 #include "DataFormats/Math/interface/deltaPhi.h"
00036 #include <TString.h>
00037 #include <TMath.h>
00038 #include <TH1F.h>
00039 #include <TH2F.h>
00040 #include <TH3F.h>
00041 #include <TProfile.h>
00042 using namespace std;
00043 using namespace edm;
00044
00045 #define CP(level) \
00046 if (level>=verbose_)
00047
00048 struct deleter {
00049 void operator()(TH3F *&h) { delete h; h=0;}
00050 };
00051
00052
00053
00054 QcdUeDQM::QcdUeDQM(const ParameterSet ¶meters) :
00055 hltResName_(parameters.getUntrackedParameter<string>("hltTrgResults")),
00056 verbose_(parameters.getUntrackedParameter<int>("verbose",3)),
00057 tgeo_(0),
00058 theDbe_(0),
00059 repSumMap_(0),
00060 repSummary_(0),
00061 h2TrigCorr_(0),
00062 ptMin_(parameters.getParameter<double>("ptMin")),
00063 minRapidity_(parameters.getParameter<double>("minRapidity")),
00064 maxRapidity_(parameters.getParameter<double>("maxRapidity")),
00065 tip_(parameters.getParameter<double>("tip")),
00066 lip_(parameters.getParameter<double>("lip")),
00067 diffvtxbs_(parameters.getParameter<double>("diffvtxbs")),
00068 ptErr_pt_(parameters.getParameter<double>("ptErr_pt")),
00069 vtxntk_(parameters.getParameter<double>("vtxntk")),
00070 minHit_(parameters.getParameter<int>("minHit")),
00071 pxlLayerMinCut_(parameters.getParameter<double>("pxlLayerMinCut")),
00072 requirePIX1_(parameters.getParameter<bool>("requirePIX1")),
00073 min3DHit_(parameters.getParameter<int>("min3DHit")),
00074 maxChi2_(parameters.getParameter<double>("maxChi2")),
00075 bsuse_(parameters.getParameter<bool>("bsuse")),
00076 allowTriplets_(parameters.getParameter<bool>("allowTriplets")),
00077 bsPos_(parameters.getParameter<double>("bsPos")),
00078 caloJetLabel_(parameters.getUntrackedParameter<edm::InputTag>("caloJetTag")),
00079 chargedJetLabel_(parameters.getUntrackedParameter<edm::InputTag>("chargedJetTag")),
00080 trackLabel_(parameters.getUntrackedParameter<edm::InputTag>("trackTag")),
00081 vtxLabel_(parameters.getUntrackedParameter<edm::InputTag>("vtxTag")),
00082 bsLabel_(parameters.getParameter<edm::InputTag>("beamSpotTag"))
00083 {
00084
00085 std::vector<std::string> quality = parameters.getParameter<std::vector<std::string> >("quality");
00086 for (unsigned int j=0;j<quality.size();j++) quality_.push_back(reco::TrackBase::qualityByName(quality[j]));
00087 std::vector<std::string> algorithm = parameters.getParameter<std::vector<std::string> >("algorithm");
00088 for (unsigned int j=0;j<algorithm.size();j++) algorithm_.push_back(reco::TrackBase::algoByName(algorithm[j]));
00089
00090 if (parameters.exists("hltTrgNames"))
00091 hltTrgNames_ = parameters.getUntrackedParameter<vector<string> >("hltTrgNames");
00092
00093 if (parameters.exists("hltProcNames"))
00094 hltProcNames_ = parameters.getUntrackedParameter<vector<string> >("hltProcNames");
00095 else {
00096
00097 hltProcNames_.push_back("HLT");
00098 }
00099
00100 isHltConfigSuccessful_ = false;
00101
00102 }
00103
00104
00105 QcdUeDQM::~QcdUeDQM()
00106 {
00107
00108
00109
00110 }
00111
00112
00113 void QcdUeDQM::analyze(const Event &iEvent, const EventSetup &iSetup)
00114 {
00115 if( ! isHltConfigSuccessful_ ) return;
00116
00117
00118
00119 edm::Handle<reco::BeamSpot> beamSpot;
00120 bool ValidBS_ = iEvent.getByLabel(bsLabel_,beamSpot);
00121 if(!ValidBS_)return;
00122
00123 edm::Handle<reco::TrackCollection>tracks ;
00124 bool ValidTrack_ = iEvent.getByLabel(trackLabel_,tracks);
00125 if(!ValidTrack_)return;
00126
00127
00128
00129
00130
00131 edm::Handle< reco::TrackJetCollection > trkJets ;
00132 bool ValidTrackJet_ = iEvent.getByLabel(chargedJetLabel_,trkJets );
00133 if(!ValidTrackJet_)return;
00134
00135
00136 edm::Handle<reco::CaloJetCollection> calJets;
00137 bool ValidCaloJet_ = iEvent.getByLabel (caloJetLabel_,calJets);
00138 if(!ValidCaloJet_)return;
00139
00140 edm::Handle< reco::VertexCollection > vertexColl;
00141 bool ValidVtxColl_ = iEvent.getByLabel (vtxLabel_, vertexColl);
00142 if(!ValidVtxColl_)return;
00143
00144 reco::TrackCollection tracks_sort = *tracks;
00145 std::sort(tracks_sort.begin(), tracks_sort.end(), PtSorter());
00146
00147
00148
00149
00150
00151
00152
00153 selected_.clear();
00154 fillHltBits(iEvent,iSetup);
00155
00156 if(fillVtxPlots(beamSpot.product(),vertexColl))
00157 {
00158 fill1D(hNevts_,1);
00159 for(reco::TrackCollection::const_iterator Trk = tracks_sort.begin(); Trk != tracks_sort.end(); ++Trk)
00160 {
00161
00162 if ( trackSelection(*Trk,beamSpot.product(),vtx1,vertexColl->size()) ) selected_.push_back( & * Trk );
00163 }
00164
00165
00166 fillpTMaxRelated(selected_);
00167 fillChargedJetSpectra(trkJets);
00168
00169 fillUE_with_MaxpTtrack(selected_);
00170 if(trkJets->size() > 0)fillUE_with_ChargedJets(selected_,trkJets);
00171
00172
00173 }
00174
00175 }
00176
00177
00178 void QcdUeDQM::beginJob()
00179 {
00180
00181
00182 theDbe_ = Service<DQMStore>().operator->();
00183 if (!theDbe_)return;
00184
00185
00186
00187 }
00188
00189
00190 void QcdUeDQM::beginLuminosityBlock(const LuminosityBlock &l,
00191 const EventSetup &iSetup)
00192 {
00193 if( ! isHltConfigSuccessful_ ) return;
00194
00195
00196 }
00197
00198
00199 void QcdUeDQM::beginRun(const Run &run, const EventSetup &iSetup)
00200 {
00201
00202
00203
00204 bool isHltCfgChange = false;
00205 isHltConfigSuccessful_ = false;
00206
00207 string teststr;
00208 for(size_t i=0; i<hltProcNames_.size(); ++i) {
00209 if (i>0)
00210 teststr += ", ";
00211 teststr += hltProcNames_.at(i);
00212 if ( hltConfig.init( run, iSetup, hltProcNames_.at(i), isHltCfgChange ) ) {
00213 isHltConfigSuccessful_ = true;
00214 hltUsedResName_ = hltResName_;
00215 if (hltResName_.find(':')==string::npos)
00216 hltUsedResName_ += "::";
00217 else
00218 hltUsedResName_ += ":";
00219 hltUsedResName_ += hltProcNames_.at(i);
00220 break;
00221 }
00222 }
00223
00224 if ( ! isHltConfigSuccessful_ )return;
00225
00226
00227 hltTrgBits_.clear();
00228 hltTrgBits_.push_back(-1);
00229 hltTrgDeci_.clear();
00230 hltTrgDeci_.push_back(true);
00231 hltTrgUsedNames_.clear();
00232 hltTrgUsedNames_.push_back("Any");
00233
00234
00235 for(size_t i=0;i<hltTrgNames_.size();++i) {
00236 const string &n1(hltTrgNames_.at(i));
00237
00238
00239 bool found = 0;
00240 for(size_t j=0;j<hltConfig.size();++j) {
00241 const string &n2(hltConfig.triggerName(j));
00242 if (n2==n1) {
00243 hltTrgBits_.push_back(j);
00244 hltTrgUsedNames_.push_back(n1);
00245 hltTrgDeci_.push_back(false);
00246 found = 1;
00247 break;
00248 }
00249 }
00250 if (!found) {
00251 CP(2) cout<<"Could not find trigger bit"<<endl ;
00252 }
00253 }
00254
00255
00256 createHistos();
00257 isHltConfigSuccessful_ = true;
00258
00259 }
00260
00261
00262 void QcdUeDQM::book1D(std::vector<MonitorElement*> &mes,
00263 const std::string &name, const std::string &title,
00264 int nx, double x1, double x2, bool sumw2, bool sbox)
00265 {
00266
00267
00268 for(size_t i=0;i<hltTrgUsedNames_.size();++i) {
00269 std::string folderName = "Physics/QcdUe/" + hltTrgUsedNames_.at(i);
00270 theDbe_->setCurrentFolder(folderName);
00271 MonitorElement *e = theDbe_->book1D(Form("%s_%s",name.c_str(),hltTrgUsedNames_.at(i).c_str()),
00272 Form("%s: %s",hltTrgUsedNames_.at(i).c_str(), title.c_str()),
00273 nx, x1, x2);
00274 TH1 *h1 = e->getTH1();
00275 if (sumw2) {
00276 if( 0 == h1->GetSumw2N() ) {
00277 h1->Sumw2();
00278 }
00279 }
00280 h1->SetStats(sbox);
00281 mes.push_back(e);
00282 }
00283 }
00284
00285
00286 void QcdUeDQM::book2D(std::vector<MonitorElement*> &mes,
00287 const std::string &name, const std::string &title,
00288 int nx, double x1, double x2, int ny, double y1, double y2,
00289 bool sumw2, bool sbox)
00290 {
00291
00292
00293 for(size_t i=0;i<hltTrgUsedNames_.size();++i) {
00294 std::string folderName = "Physics/QcdUe/" + hltTrgUsedNames_.at(i);
00295 theDbe_->setCurrentFolder(folderName);
00296 MonitorElement *e = theDbe_->book2D(Form("%s_%s",name.c_str(),hltTrgUsedNames_.at(i).c_str()),
00297 Form("%s: %s",hltTrgUsedNames_.at(i).c_str(), title.c_str()),
00298 nx, x1, x2, ny, y1, y2);
00299 TH1 *h1 = e->getTH1();
00300 if (sumw2) {
00301 if( 0 == h1->GetSumw2N() ) {
00302 h1->Sumw2();
00303 }
00304 }
00305 h1->SetStats(sbox);
00306 mes.push_back(e);
00307 }
00308 }
00309
00310
00311 void QcdUeDQM::bookProfile(std::vector<MonitorElement*> &mes,
00312 const std::string &name, const std::string &title,
00313 int nx, double x1, double x2, double y1, double y2,
00314 bool sumw2, bool sbox)
00315 {
00316
00317
00318 for(size_t i=0;i<hltTrgUsedNames_.size();++i) {
00319 std::string folderName = "Physics/QcdUe/" + hltTrgUsedNames_.at(i);
00320 theDbe_->setCurrentFolder(folderName);
00321 MonitorElement *e = theDbe_->bookProfile(Form("%s_%s",name.c_str(),hltTrgUsedNames_.at(i).c_str()),
00322 Form("%s: %s",hltTrgUsedNames_.at(i).c_str(), title.c_str()),
00323 nx, x1, x2, y1, y2," ");
00324 mes.push_back(e);
00325 }
00326 }
00327
00328 void QcdUeDQM::createHistos()
00329 {
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339 theDbe_->setCurrentFolder("Physics/QcdUe");
00340
00341 if (1) {
00342 const int Nx = hltTrgUsedNames_.size();
00343 const double x1 = -0.5;
00344 const double x2 = Nx-0.5;
00345 h2TrigCorr_ = theDbe_->book2D("h2TriCorr","Trigger bit x vs y;y&&!x;x&&y",Nx,x1,x2,Nx,x1,x2);
00346 for(size_t i=1;i<=hltTrgUsedNames_.size();++i) {
00347 h2TrigCorr_->setBinLabel(i,hltTrgUsedNames_.at(i-1),1);
00348 h2TrigCorr_->setBinLabel(i,hltTrgUsedNames_.at(i-1),2);
00349 }
00350 TH1 *h = h2TrigCorr_->getTH1();
00351 if (h)
00352 h->SetStats(0);
00353 }
00354 book1D(hNevts_,"hNevts","number of events",2,0,2);
00355 book1D(hNtrackerLayer_,"hNtrackerLayer","number of tracker layers;multiplicity",20,-0.5,19.5 );
00356 book1D(hNtrackerPixelLayer_,"hNtrackerPixelLayer","number of pixel layers;multiplicity",10,-0.5,9.5 );
00357 book1D(hNtrackerStripPixelLayer_,"hNtrackerStripPixelLayer","number of strip + pixel layers;multiplicity",30,-0.5,39.5 );
00358 book1D(hRatioPtErrorPt_,"hRatioPtErrorPt","ratio of pT error and track pT",25,0.,5.);
00359 book1D(hTrkPt_,"hTrkPt","pT of all tracks",50,0.,50.);
00360 book1D(hTrkEta_,"hTrkEta","eta of all tracks",40,-4.,4.);
00361 book1D(hTrkPhi_,"hTrkPhi","phi of all tracks",40,-4.,4.);
00362 book1D(hRatioDxySigmaDxyBS_,"hRatioDxySigmaDxyBS","ratio of transverse impact parameter and its significance wrt beam spot",60,-10.,10);
00363 book1D(hRatioDxySigmaDxyPV_,"hRatioDxySigmaDxyPV","ratio of transverse impact parameter and its significance wrt PV",60,-10.,10);
00364 book1D(hRatioDzSigmaDzBS_,"hRatioDzSigmaDzBS","ratio of longitudinal impact parameter and its significance wrt beam spot",80,-20.,20);
00365 book1D(hRatioDzSigmaDzPV_,"hRatioDzSigmaDzPV","ratio of longitudinal impact parameter and its significance wrt PV",80,-20.,20);
00366 book1D(hTrkChi2_,"hTrkChi2","track chi2",30,0.,30);
00367 book1D(hTrkNdof_,"hTrkNdof","track NDOF",100,0,100);
00368
00369 book1D(hNgoodTrk_,"hNgoodTrk","number of good tracks",50,-0.5,49.5);
00370
00371 book1D(hGoodTrkPt500_,"hGoodTrkPt500","pT of all good tracks with pT > 500 MeV",50,0.,50.);
00372 book1D(hGoodTrkEta500_,"hGoodTrkEta500","eta of all good tracks pT > 500 MeV",40,-4.,4.);
00373 book1D(hGoodTrkPhi500_,"hGoodTrkPhi500","phi of all good tracks pT > 500 MeV",40,-4.,4.);
00374
00375 book1D(hGoodTrkPt900_,"hGoodTrkPt900","pT of all good tracks with pT > 900 MeV",50,0.,50.);
00376 book1D(hGoodTrkEta900_,"hGoodTrkEta900","eta of all good tracks pT > 900 MeV",40,-4.,4.);
00377 book1D(hGoodTrkPhi900_,"hGoodTrkPhi900","phi of all good tracks pT > 900 MeV",40,-4.,4.);
00378
00379 book1D(hNvertices_,"hNvertices","number of vertices",5,-0.5,4.5);
00380 book1D(hVertex_z_,"hVertex_z","z position of vertex; z[cm]",200,-50,50);
00381 book1D(hVertex_y_,"hVertex_y","y position of vertex; y[cm]",100,-5,5);
00382 book1D(hVertex_x_,"hVertex_x","x position of vertex; x[cm]",100,-5,5);
00383 book1D(hVertex_ndof_,"hVertex_ndof","ndof of vertex",100,0,100);
00384 book1D(hVertex_rho_,"hVertex_rho","rho of vertex",100,0,5);
00385 book1D(hVertex_z_bs_,"hVertex_z_bs","z position of vertex from beamspot; z[cm]",200,-50,50);
00386
00387 book1D(hBeamSpot_z_,"hBeamSpot_z","z position of beamspot; z[cm]",100,-20,20);
00388 book1D(hBeamSpot_y_,"hBeamSpot_y","y position of beamspot; y[cm]",50,-10,10);
00389 book1D(hBeamSpot_x_,"hBeamSpot_x","x position of beamspot; x[cm]",50,-10,10);
00390
00391
00392 if (1) {
00393 const int Nx = 25;
00394 const double x1 = 0.0;
00395 const double x2 = 50.0;
00396 book1D(hLeadingTrack_pTSpectrum_,"hLeadingTrack_pTSpectrum","pT spectrum of leading track;pT(GeV/c)",Nx,x1,x2);
00397
00398 book1D(hLeadingChargedJet_pTSpectrum_,"hLeadingChargedJet_pTSpectrum","pT spectrum of leading track jet;pT(GeV/c)",Nx,x1,x2);
00399
00400 }
00401
00402 if (1) {
00403 const int Nx = 24;
00404 const double x1 = -4.;
00405 const double x2 = 4.;
00406 book1D(hLeadingTrack_phiSpectrum_,"hLeadingTrack_phiSpectrum","#phi spectrum of leading track;#phi",Nx,x1,x2);
00407
00408 book1D(hLeadingChargedJet_phiSpectrum_,"hLeadingChargedJet_phiSpectrum","#phi spectrum of leading track jet;#phi",Nx,x1,x2);
00409
00410 }
00411
00412 if (1) {
00413 const int Nx = 24;
00414 const double x1 = -4.;
00415 const double x2 = 4.;
00416 book1D(hLeadingTrack_etaSpectrum_,"hLeadingTrack_etaSpectrum","#eta spectrum of leading track;#eta",Nx,x1,x2);
00417
00418 book1D(hLeadingChargedJet_etaSpectrum_,"hLeadingChargedJet_etaSpectrum","#eta spectrum of leading track jet;#eta",Nx,x1,x2);
00419
00420 }
00421
00422
00423 if (1) {
00424 const int Nx = 75;
00425 const double x1 = 0.0;
00426 const double x2 = 75.0;
00427 const double y1 = 0.;
00428 const double y2 = 10.;
00429 bookProfile(hdNdEtadPhi_pTMax_Toward500_,"hdNdEtadPhi_pTMax_Toward500",
00430 "Average number of tracks (pT > 500 MeV) in toward region vs leading track pT;pT(GeV/c);dN/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00431 bookProfile(hdNdEtadPhi_pTMax_Transverse500_,"hdNdEtadPhi_pTMax_Transverse500",
00432 "Average number of tracks (pT > 500 MeV) in transverse region vs leading track pT;pT(GeV/c);dN/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00433 bookProfile(hdNdEtadPhi_pTMax_Away500_,"hdNdEtadPhi_pTMax_Away500",
00434 "Average number of tracks (pT > 500 MeV) in away region vs leading track pT;pT(GeV/c);dN/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444 bookProfile(hdNdEtadPhi_trackJet_Toward500_,"hdNdEtadPhi_trackJet_Toward500",
00445 "Average number of tracks (pT > 500 MeV) in toward region vs leading track jet pT;pT(GeV/c);dN/d#eta d#phi",Nx,x1,x2,y1,y2);
00446 bookProfile(hdNdEtadPhi_trackJet_Transverse500_,"hdNdEtadPhi_trackJet_Transverse500",
00447 "Average number of tracks (pT > 500 MeV) in transverse region vs leading track jet pT;pT(GeV/c);dN/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00448 bookProfile(hdNdEtadPhi_trackJet_Away500_,"hdNdEtadPhi_trackJet_Away500",
00449 "Average number of tracks (pT > 500 MeV) in away region vs leading track jet pT;pT(GeV/c);dN/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00450
00451
00452
00453 bookProfile(hpTSumdEtadPhi_pTMax_Toward500_,"hpTSumdEtadPhi_pTMax_Toward500",
00454 "Average number of tracks (pT > 500 MeV) in toward region vs leading track pT;pT(GeV/c);dpTSum/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00455 bookProfile(hpTSumdEtadPhi_pTMax_Transverse500_,"hpTSumdEtadPhi_pTMax_Transverse500",
00456 "Average number of tracks (pT > 500 MeV) in transverse region vs leading track pT;pT(GeV/c);dpTSum/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00457 bookProfile(hpTSumdEtadPhi_pTMax_Away500_,"hpTSumdEtadPhi_pTMax_Away500",
00458 "Average number of tracks (pT > 500 MeV) in away region vs leading track pT;pT(GeV/c);dpTSum/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468 bookProfile(hpTSumdEtadPhi_trackJet_Toward500_,"hpTSumdEtadPhi_trackJet_Toward500",
00469 "Average number of tracks (pT > 500 MeV) in toward region vs leading track jet pT;pT(GeV/c);dpTSum/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00470 bookProfile(hpTSumdEtadPhi_trackJet_Transverse500_,"hpTSumdEtadPhi_trackJet_Transverse500",
00471 "Average number of tracks (pT > 500 MeV) in transverse region vs leading track jet pT;pT(GeV/c);dpTSum/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00472 bookProfile(hpTSumdEtadPhi_trackJet_Away500_,"hpTSumdEtadPhi_trackJet_Away500",
00473 "Average number of tracks (pT > 500 MeV) in away region vs leading track jet pT;pT(GeV/c);dpTSum/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00474
00475
00476 bookProfile(hdNdEtadPhi_pTMax_Toward900_,"hdNdEtadPhi_pTMax_Toward900",
00477 "Average number of tracks (pT > 900 MeV) in toward region vs leading track pT;pT(GeV/c);dN/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00478 bookProfile(hdNdEtadPhi_pTMax_Transverse900_,"hdNdEtadPhi_pTMax_Transverse900",
00479 "Average number of tracks (pT > 900 MeV) in transverse region vs leading track pT;pT(GeV/c);dN/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00480 bookProfile(hdNdEtadPhi_pTMax_Away900_,"hdNdEtadPhi_pTMax_Away900",
00481 "Average number of tracks (pT > 900 MeV) in away region vs leading track pT;pT(GeV/c);dN/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491 bookProfile(hdNdEtadPhi_trackJet_Toward900_,"hdNdEtadPhi_trackJet_Toward900",
00492 "Average number of tracks (pT > 900 MeV) in toward region vs leading track jet pT;pT(GeV/c);dN/d#eta d#phi",Nx,x1,x2,y1,y2);
00493 bookProfile(hdNdEtadPhi_trackJet_Transverse900_,"hdNdEtadPhi_trackJet_Transverse900",
00494 "Average number of tracks (pT > 900 MeV) in transverse region vs leading track jet pT;pT(GeV/c);dN/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00495 bookProfile(hdNdEtadPhi_trackJet_Away900_,"hdNdEtadPhi_trackJet_Away900",
00496 "Average number of tracks (pT > 900 MeV) in away region vs leading track jet pT;pT(GeV/c);dN/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00497
00498
00499
00500 bookProfile(hpTSumdEtadPhi_pTMax_Toward900_,"hpTSumdEtadPhi_pTMax_Toward900",
00501 "Average number of tracks (pT > 900 MeV) in toward region vs leading track pT;pT(GeV/c);dpTSum/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00502 bookProfile(hpTSumdEtadPhi_pTMax_Transverse900_,"hpTSumdEtadPhi_pTMax_Transverse900",
00503 "Average number of tracks (pT > 900 MeV) in transverse region vs leading track pT;pT(GeV/c);dpTSum/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00504 bookProfile(hpTSumdEtadPhi_pTMax_Away900_,"hpTSumdEtadPhi_pTMax_Away900",
00505 "Average number of tracks (pT > 900 MeV) in away region vs leading track pT;pT(GeV/c);dpTSum/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00506
00507
00508
00509
00510
00511
00512
00513
00514 bookProfile(hpTSumdEtadPhi_trackJet_Toward900_,"hpTSumdEtadPhi_trackJet_Toward900",
00515 "Average number of tracks (pT > 900 MeV) in toward region vs leading track jet pT;pT(GeV/c);dpTSum/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00516 bookProfile(hpTSumdEtadPhi_trackJet_Transverse900_,"hpTSumdEtadPhi_trackJet_Transverse900",
00517 "Average number of tracks (pT > 900 MeV) in transverse region vs leading track jet pT;pT(GeV/c);dpTSum/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00518 bookProfile(hpTSumdEtadPhi_trackJet_Away900_,"hpTSumdEtadPhi_trackJet_Away900",
00519 "Average number of tracks (pT > 900 MeV) in away region vs leading track jet pT;pT(GeV/c);dpTSum/d#eta d#phi",Nx,x1,x2,y1,y2,0,0);
00520
00521
00522 }
00523
00524 if (1) {
00525 const int Nx = 20;
00526 const double x1 = 0.0;
00527 const double x2 = 20.0;
00528
00529 book1D(hChargedJetMulti_,"hChargedJetMulti","Charged jet multiplicity;multiplicities",Nx,x1,x2);
00530
00531
00532 }
00533
00534
00535 if (1) {
00536 const int Nx = 60;
00537 const double x1 = -180.0;
00538 const double x2 = 180.0;
00539
00540 book1D(hdPhi_maxpTTrack_tracks_,"hdPhi_maxpTTrack_tracks","delta phi between leading tracks and other tracks;#Delta#phi(leading track-track)",Nx,x1,x2);
00541
00542 book1D(hdPhi_chargedJet_tracks_,"hdPhi_chargedJet_tracks","delta phi between leading charged jet and tracks;#Delta#phi(leading charged jet-track)",Nx,x1,x2);
00543
00544 }
00545
00546
00547 }
00548
00549
00550 void QcdUeDQM::endJob(void)
00551 {
00552 }
00553
00554
00555
00556 void QcdUeDQM::endLuminosityBlock(const LuminosityBlock &l,
00557 const EventSetup &iSetup)
00558 {
00559 if( ! isHltConfigSuccessful_ ) return;
00560
00561
00562
00563
00564
00565
00566 }
00567
00568
00569
00570 void QcdUeDQM::endRun(const Run &, const EventSetup &)
00571 {
00572 if( ! isHltConfigSuccessful_ ) return;
00573
00574
00575
00576 }
00577
00578
00579 void QcdUeDQM::fill1D(std::vector<TH1F*> &hs, double val, double w)
00580 {
00581
00582
00583 for(size_t i=0;i<hs.size();++i) {
00584 if (!hltTrgDeci_.at(i))
00585 continue;
00586 hs.at(i)->Fill(val,w);
00587 }
00588 }
00589
00590
00591 void QcdUeDQM::fill1D(std::vector<MonitorElement*> &mes, double val, double w)
00592 {
00593
00594
00595 for(size_t i=0;i<mes.size();++i) {
00596 if (!hltTrgDeci_.at(i))
00597 continue;
00598 mes.at(i)->Fill(val,w);
00599 }
00600 }
00601
00602
00603 void QcdUeDQM::setLabel1D(std::vector<MonitorElement*> &mes)
00604 {
00605
00606 string cut[5] = {"Nevt","vtx!=bmspt","Zvtx<10cm","pT>1GeV","trackFromVtx"};
00607 for(size_t i=0;i<mes.size();++i) {
00608 if (!hltTrgDeci_.at(i))
00609 continue;
00610 for(size_t j = 1;j < 6;j++)mes.at(i)->setBinLabel(j,cut[j-1],1);
00611 }
00612 }
00613
00614
00615 void QcdUeDQM::fill2D(std::vector<TH2F*> &hs, double valx, double valy, double w)
00616 {
00617
00618
00619 for(size_t i=0;i<hs.size();++i) {
00620 if (!hltTrgDeci_.at(i))
00621 continue;
00622 hs.at(i)->Fill(valx, valy ,w);
00623 }
00624 }
00625
00626
00627 void QcdUeDQM::fill2D(std::vector<MonitorElement*> &mes, double valx, double valy, double w)
00628 {
00629
00630
00631 for(size_t i=0;i<mes.size();++i) {
00632 if (!hltTrgDeci_.at(i))
00633 continue;
00634 mes.at(i)->Fill(valx, valy ,w);
00635 }
00636 }
00637
00638 void QcdUeDQM::fillProfile(std::vector<TProfile*> &hs, double valx, double valy, double w)
00639 {
00640
00641
00642 for(size_t i=0;i<hs.size();++i) {
00643 if (!hltTrgDeci_.at(i))
00644 continue;
00645 hs.at(i)->Fill(valx, valy ,w);
00646 }
00647 }
00648
00649
00650 void QcdUeDQM::fillProfile(std::vector<MonitorElement*> &mes, double valx, double valy, double w)
00651 {
00652
00653
00654 for(size_t i=0;i<mes.size();++i) {
00655 if (!hltTrgDeci_.at(i))
00656 continue;
00657 const double y = valy*w;
00658 mes.at(i)->Fill(valx, y);
00659 }
00660 }
00661
00662
00663 bool QcdUeDQM::trackSelection(const reco::Track &trk, const reco::BeamSpot* bs, const reco::Vertex& vtx, int sizevtx )
00664 {
00665
00666
00667
00668
00669
00670 bool goodTrk = false;
00671
00672 if(sizevtx!=1) return 0;
00673
00674
00675 fill1D(hNtrackerLayer_,trk.hitPattern().trackerLayersWithMeasurement());
00676 fill1D(hNtrackerPixelLayer_,trk.hitPattern().pixelLayersWithMeasurement());
00677 fill1D(hNtrackerStripPixelLayer_,(trk.hitPattern().pixelLayersWithMeasurement() + trk.hitPattern().numberOfValidStripLayersWithMonoAndStereo()));
00678 fill1D(hRatioPtErrorPt_,(trk.ptError()/trk.pt()));
00679 fill1D(hTrkPt_,trk.pt());
00680 fill1D(hTrkEta_,trk.eta());
00681 fill1D(hTrkPhi_,trk.phi());
00682 fill1D(hRatioDxySigmaDxyBS_,(trk.dxy(bs->position())/trk.dxyError()));
00683 fill1D(hRatioDxySigmaDxyPV_,(trk.dxy(vtx.position())/trk.dxyError()));
00684 fill1D(hRatioDzSigmaDzBS_,(trk.dz(bs->position())/trk.dzError()));
00685 fill1D(hRatioDzSigmaDzPV_,(trk.dz(vtx.position())/trk.dzError()));
00686 fill1D(hTrkChi2_,trk.normalizedChi2());
00687 fill1D(hTrkNdof_,trk.ndof());
00688
00689 fill1D(hBeamSpot_x_,bs->x0());
00690 fill1D(hBeamSpot_y_,bs->y0());
00691 fill1D(hBeamSpot_z_,bs->z0());
00692
00693
00694 bool layerMinCutbool=false;
00695 if (trk.hitPattern().trackerLayersWithMeasurement() >= minHit_ ||
00696 (trk.hitPattern().trackerLayersWithMeasurement()==3 && trk.hitPattern().pixelLayersWithMeasurement()==3 && allowTriplets_))
00697 layerMinCutbool=true;
00698
00699
00700
00701 bool pxlLayerMinCutbool=false;
00702 if (trk.hitPattern().pixelLayersWithMeasurement() >=pxlLayerMinCut_) pxlLayerMinCutbool=true;
00703
00704
00705
00706 bool hasPIX1 = false;
00707 if (requirePIX1_) {
00708 const reco::HitPattern& p = trk.hitPattern();
00709 for (int i=0; i<p.numberOfHits(); i++) {
00710 uint32_t hit = p.getHitPattern(i);
00711 if (p.validHitFilter(hit) && p.pixelHitFilter(hit) && p.getLayer(hit)==1) hasPIX1 = true;
00712 }
00713 }else hasPIX1 = true;
00714
00715
00716 bool ptErrorbool=false;
00717 if (trk.ptError()/trk.pt() < ptErr_pt_ ||
00718 (trk.hitPattern().trackerLayersWithMeasurement()==3 && trk.hitPattern().pixelLayersWithMeasurement()==3 && allowTriplets_)) ptErrorbool=true;
00719
00720 bool quality_ok = true;
00721 if (quality_.size()!=0) {
00722 quality_ok = false;
00723 for (unsigned int i = 0; i<quality_.size();++i) {
00724 if (trk.quality(quality_[i])){
00725 quality_ok = true;
00726 break;
00727 }
00728 }
00729 }
00730
00731 bool algo_ok = true;
00732 if (algorithm_.size()!=0) {
00733 if (std::find(algorithm_.begin(),algorithm_.end(),trk.algo())==algorithm_.end()) algo_ok = false;
00734 }
00735
00736
00737 if(bsuse_==1)
00738 {
00739 if(hasPIX1 && pxlLayerMinCutbool && layerMinCutbool && (trk.hitPattern().pixelLayersWithMeasurement() + trk.hitPattern().numberOfValidStripLayersWithMonoAndStereo()) >= min3DHit_ && ptErrorbool && fabs(trk.pt()) >= ptMin_ && trk.eta() >= minRapidity_ && trk.eta() <= maxRapidity_ && fabs(trk.dxy(bs->position())/trk.dxyError()) < tip_ && fabs(trk.dz(bs->position())/trk.dzError()) < lip_ && trk.normalizedChi2()<=maxChi2_ && quality_ok && algo_ok)goodTrk=true ;
00740 }
00741
00742 if(bsuse_==0)
00743 {
00744 if(hasPIX1 && pxlLayerMinCutbool && layerMinCutbool && (trk.hitPattern().pixelLayersWithMeasurement() + trk.hitPattern().numberOfValidStripLayersWithMonoAndStereo()) >= min3DHit_ && ptErrorbool && fabs(trk.pt()) >= ptMin_ && trk.eta() >= minRapidity_ && trk.eta() <= maxRapidity_ && fabs(trk.dxy(vtx.position())/trk.dxyError()) < tip_ && fabs(trk.dz(vtx.position())/trk.dzError()) < lip_ && trk.normalizedChi2()<=maxChi2_ && quality_ok && algo_ok)goodTrk=true;
00745
00746 }
00747
00748 return goodTrk;
00749
00750 }
00751
00752
00753
00754 bool QcdUeDQM::fillVtxPlots( const reco::BeamSpot* bs, const edm::Handle< reco::VertexCollection > vtxColl)
00755 {
00756 const reco::VertexCollection theVertices = *(vtxColl.product());
00757 bool goodVtx = false;
00758 fill1D(hNvertices_,theVertices.size());
00759 for (reco::VertexCollection::const_iterator vertexIt = theVertices.begin(); vertexIt != theVertices.end(); ++vertexIt)
00760 {
00761 fill1D(hVertex_z_,vertexIt->z());
00762 fill1D(hVertex_y_,vertexIt->y());
00763 fill1D(hVertex_x_,vertexIt->x());
00764 fill1D(hVertex_ndof_,vertexIt->ndof());
00765 fill1D(hVertex_rho_,vertexIt->position().rho());
00766 fill1D(hVertex_z_bs_,(vertexIt->z() -bs->z0()));
00767
00768 if(fabs(vertexIt->z() -bs->z0()) < diffvtxbs_ && vertexIt->ndof() >= 4 && vertexIt->position().rho()<= 2.0)
00769 {
00770 goodVtx = true;
00771 vtx1=(*vertexIt);
00772
00773 break;
00774 }
00775 }
00776 return goodVtx;
00777 }
00778
00779 void QcdUeDQM::fillpTMaxRelated(const std::vector<const reco::Track *> &track)
00780 {
00781 fill1D(hNgoodTrk_,track.size());
00782 if(track.size()>0)
00783 {
00784 fill1D(hLeadingTrack_pTSpectrum_,track[0]->pt());
00785 fill1D(hLeadingTrack_phiSpectrum_,track[0]->phi());
00786 fill1D(hLeadingTrack_etaSpectrum_,track[0]->eta());
00787 }
00788 for(size_t i = 0; i < track.size(); i++)
00789 {
00790 fill1D(hGoodTrkPt500_,track[i]->pt());
00791 fill1D(hGoodTrkEta500_,track[i]->eta());
00792 fill1D(hGoodTrkPhi500_,track[i]->phi());
00793 if(track[i]->pt() > 0.9)
00794 {
00795 fill1D(hGoodTrkPt900_,track[i]->pt());
00796 fill1D(hGoodTrkEta900_,track[i]->eta());
00797 fill1D(hGoodTrkPhi900_,track[i]->phi());
00798 }
00799 }
00800
00801 }
00802
00803
00804 void QcdUeDQM::fillChargedJetSpectra(const edm::Handle<reco::TrackJetCollection> trackJets)
00805 {
00806 fill1D(hChargedJetMulti_,trackJets->size());
00807 for( reco::TrackJetCollection::const_iterator f = trackJets->begin(); f != trackJets->end(); f++)
00808 {
00809 if(f != trackJets->begin())continue;
00810 fill1D(hLeadingChargedJet_pTSpectrum_,f->pt());
00811 fill1D(hLeadingChargedJet_etaSpectrum_,f->eta());
00812 fill1D(hLeadingChargedJet_phiSpectrum_,f->phi());
00813 }
00814
00815 }
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835
00836
00837
00838
00839
00840
00841 void QcdUeDQM::fillUE_with_MaxpTtrack(const std::vector<const reco::Track*> &track)
00842 {
00843 double w = 0.119;
00844
00845 double nTrk500_TransReg = 0;
00846 double nTrk500_AwayReg = 0;
00847 double nTrk500_TowardReg = 0;
00848
00849 double pTSum500_TransReg = 0;
00850 double pTSum500_AwayReg = 0;
00851 double pTSum500_TowardReg = 0;
00852
00853
00854 double nTrk900_TransReg = 0;
00855 double nTrk900_AwayReg = 0;
00856 double nTrk900_TowardReg = 0;
00857
00858 double pTSum900_TransReg = 0;
00859 double pTSum900_AwayReg = 0;
00860 double pTSum900_TowardReg = 0;
00861 if(track.size() > 0)
00862 {
00863 if(track[0]->pt() > 1.)
00864 {
00865 for(size_t i = 1; i < track.size();i++)
00866 {
00867
00868 double dphi = (180./PI)*(deltaPhi(track[0]->phi(),track[i]->phi()));
00869 fill1D(hdPhi_maxpTTrack_tracks_,dphi);
00870 if(fabs(dphi)>60. && fabs(dphi)<120.)
00871 {
00872 pTSum500_TransReg = pTSum500_TransReg + track[i]->pt();
00873 nTrk500_TransReg++;
00874 if(track[i]->pt() > 0.9)
00875 {
00876 pTSum900_TransReg = pTSum900_TransReg + track[i]->pt();
00877 nTrk900_TransReg++;
00878 }
00879 }
00880
00881 if(fabs(dphi)>120. && fabs(dphi)<180.)
00882 {
00883 pTSum500_AwayReg = pTSum500_AwayReg + track[i]->pt();
00884 nTrk500_AwayReg++;
00885 if(track[i]->pt() > 0.9)
00886 {
00887 pTSum900_AwayReg = pTSum900_AwayReg + track[i]->pt();
00888 nTrk900_AwayReg++;
00889
00890 }
00891 }
00892
00893 if(fabs(dphi)<60.)
00894 {
00895 pTSum500_TowardReg = pTSum500_TowardReg + track[i]->pt();
00896 nTrk500_TowardReg++;
00897 if(track[i]->pt() > 0.9)
00898 {
00899 pTSum900_TowardReg = pTSum900_TowardReg + track[i]->pt();
00900 nTrk900_TowardReg++;
00901 }
00902 }
00903 }
00904 }
00905
00906 fillProfile(hdNdEtadPhi_pTMax_Toward500_, track[0]->pt(),nTrk500_TowardReg,w);
00907 fillProfile(hdNdEtadPhi_pTMax_Transverse500_, track[0]->pt(),nTrk500_TransReg,w);
00908 fillProfile(hdNdEtadPhi_pTMax_Away500_, track[0]->pt(),nTrk500_AwayReg,w);
00909
00910 fillProfile(hpTSumdEtadPhi_pTMax_Toward500_,track[0]->pt() ,pTSum500_TowardReg,w);
00911 fillProfile(hpTSumdEtadPhi_pTMax_Transverse500_,track[0]->pt(),pTSum500_TransReg,w);
00912 fillProfile(hpTSumdEtadPhi_pTMax_Away500_, track[0]->pt(),pTSum500_AwayReg,w);
00913
00914 fillProfile(hdNdEtadPhi_pTMax_Toward900_, track[0]->pt(),nTrk900_TowardReg,w);
00915 fillProfile(hdNdEtadPhi_pTMax_Transverse900_, track[0]->pt(),nTrk900_TransReg,w);
00916 fillProfile(hdNdEtadPhi_pTMax_Away900_, track[0]->pt(),nTrk900_AwayReg,w);
00917
00918 fillProfile(hpTSumdEtadPhi_pTMax_Toward900_,track[0]->pt() ,pTSum900_TowardReg,w);
00919 fillProfile(hpTSumdEtadPhi_pTMax_Transverse900_,track[0]->pt(),pTSum900_TransReg,w);
00920 fillProfile(hpTSumdEtadPhi_pTMax_Away900_, track[0]->pt(),pTSum900_AwayReg,w);
00921 }
00922 }
00923
00924 void QcdUeDQM::fillUE_with_ChargedJets(const std::vector<const reco::Track *> &track, const edm::Handle<reco::TrackJetCollection> &trackJets)
00925 {
00926 double w = 0.119;
00927 double nTrk500_TransReg = 0;
00928 double nTrk500_AwayReg = 0;
00929 double nTrk500_TowardReg = 0;
00930
00931 double pTSum500_TransReg = 0;
00932 double pTSum500_AwayReg = 0;
00933 double pTSum500_TowardReg = 0;
00934
00935
00936 double nTrk900_TransReg = 0;
00937 double nTrk900_AwayReg = 0;
00938 double nTrk900_TowardReg = 0;
00939
00940 double pTSum900_TransReg = 0;
00941 double pTSum900_AwayReg = 0;
00942 double pTSum900_TowardReg = 0;
00943
00944 if(!(trackJets->empty()) && (trackJets->begin())->pt() > 1.)
00945 {
00946 double jetPhi = (trackJets->begin())->phi();
00947 for(size_t i = 0; i < track.size();i++)
00948 {
00949 double dphi = (180./PI)*(deltaPhi(jetPhi,track[i]->phi()));
00950 fill1D(hdPhi_chargedJet_tracks_,dphi);
00951 if(fabs(dphi)>60. && fabs(dphi)<120.)
00952 {
00953 pTSum500_TransReg = pTSum500_TransReg + track[i]->pt();
00954 nTrk500_TransReg++;
00955 if(track[i]->pt() > 0.9)
00956 {
00957 pTSum900_TransReg = pTSum900_TransReg + track[i]->pt();
00958 nTrk900_TransReg++;
00959 }
00960 }
00961
00962 if(fabs(dphi)>120. && fabs(dphi)<180.)
00963 {
00964 pTSum500_AwayReg = pTSum500_AwayReg + track[i]->pt();
00965 nTrk500_AwayReg++;
00966 if(track[i]->pt() > 0.9)
00967 {
00968 pTSum900_AwayReg = pTSum900_AwayReg + track[i]->pt();
00969 nTrk900_AwayReg++;
00970 }
00971 }
00972 if(fabs(dphi)<60.)
00973 {
00974 pTSum500_TowardReg = pTSum500_TowardReg + track[i]->pt();
00975 nTrk500_TowardReg++;
00976 if(track[i]->pt() > 0.9)
00977 {
00978 pTSum900_TowardReg = pTSum900_TowardReg + track[i]->pt();
00979 nTrk900_TowardReg++;
00980 }
00981 }
00982 }
00983
00984 }
00985
00986 fillProfile(hdNdEtadPhi_trackJet_Toward500_, (trackJets->begin())->pt(),nTrk500_TowardReg,w);
00987 fillProfile(hdNdEtadPhi_trackJet_Transverse500_, (trackJets->begin())->pt(),nTrk500_TransReg,w);
00988 fillProfile(hdNdEtadPhi_trackJet_Away500_, (trackJets->begin())->pt(),nTrk500_AwayReg,w);
00989
00990 fillProfile(hpTSumdEtadPhi_trackJet_Toward500_, (trackJets->begin())->pt(),pTSum500_TowardReg,w);
00991 fillProfile(hpTSumdEtadPhi_trackJet_Transverse500_, (trackJets->begin())->pt(),pTSum500_TransReg,w);
00992 fillProfile(hpTSumdEtadPhi_trackJet_Away500_, (trackJets->begin())->pt(),pTSum500_AwayReg,w);
00993
00994 fillProfile(hdNdEtadPhi_trackJet_Toward900_, (trackJets->begin())->pt(),nTrk900_TowardReg,w);
00995 fillProfile(hdNdEtadPhi_trackJet_Transverse900_, (trackJets->begin())->pt(),nTrk900_TransReg,w);
00996 fillProfile(hdNdEtadPhi_trackJet_Away900_, (trackJets->begin())->pt(),nTrk900_AwayReg,w);
00997
00998 fillProfile(hpTSumdEtadPhi_trackJet_Toward900_, (trackJets->begin())->pt(),pTSum900_TowardReg,w);
00999 fillProfile(hpTSumdEtadPhi_trackJet_Transverse900_, (trackJets->begin())->pt(),pTSum900_TransReg,w);
01000 fillProfile(hpTSumdEtadPhi_trackJet_Away900_, (trackJets->begin())->pt(),pTSum900_AwayReg,w);
01001 }
01002
01003
01004
01005
01006
01007
01008
01009
01010
01011
01012
01013
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023
01024
01025
01026
01027
01028
01029
01030
01031
01032
01033
01034
01035
01036
01037
01038
01039
01040
01041
01042
01043
01044
01045
01046
01047
01048
01049
01050
01051
01052
01053
01054
01055
01056
01057
01058
01059
01060
01061
01062
01063
01064
01065
01066
01067
01068
01069
01070
01071
01072
01073
01074
01075
01076
01077
01078
01079
01080
01081
01082 void QcdUeDQM::fillHltBits(const Event &iEvent,const EventSetup &iSetup)
01083 {
01084
01085
01086 Handle<TriggerResults> triggerResultsHLT;
01087 getProduct(hltUsedResName_, triggerResultsHLT, iEvent);
01088
01089
01090
01091
01092
01093
01094
01095
01096
01097
01098
01099
01100
01101
01102
01103
01104
01105
01106
01107 for(size_t i=0;i<hltTrgBits_.size();++i) {
01108 if (hltTrgBits_.at(i)<0)
01109 continue;
01110 size_t tbit = hltTrgBits_.at(i);
01111 if (tbit<triggerResultsHLT->size()) {
01112 hltTrgDeci_[i] = triggerResultsHLT->accept(tbit);
01113 }
01114 }
01115
01116 for(size_t i=0;i<hltTrgBits_.size();++i) {
01117 if (hltTrgDeci_.at(i))
01118 h2TrigCorr_->Fill(i,i);
01119 for(size_t j=i+1;j<hltTrgBits_.size();++j) {
01120 if (hltTrgDeci_.at(i) && hltTrgDeci_.at(j))
01121 h2TrigCorr_->Fill(i,j);
01122 if (hltTrgDeci_.at(i) && !hltTrgDeci_.at(j))
01123 h2TrigCorr_->Fill(j,i);
01124 }
01125 }
01126 }
01127
01128
01129
01130
01131