00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <memory>
00022
00023
00024 #include "TH1F.h"
00025 #include "TProfile.h"
00026
00027 #include "FWCore/Framework/interface/Frameworkfwd.h"
00028 #include "FWCore/Framework/interface/EDAnalyzer.h"
00029
00030 #include "FWCore/Framework/interface/Event.h"
00031 #include "FWCore/Framework/interface/MakerMacros.h"
00032 #include "FWCore/Framework/interface/Run.h"
00033
00034 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00035
00036 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00037
00038 #include "FWCore/ServiceRegistry/interface/Service.h"
00039 #include "CommonTools/UtilAlgos/interface/TFileService.h"
00040
00041 #include "FWCore/Utilities/interface/InputTag.h"
00042
00043 #include "DPGAnalysis/SiStripTools/interface/APVCyclePhaseCollection.h"
00044
00045
00046
00047
00048
00049 class APVCyclePhaseMonitor : public edm::EDAnalyzer {
00050 public:
00051 explicit APVCyclePhaseMonitor(const edm::ParameterSet&);
00052 ~APVCyclePhaseMonitor();
00053
00054
00055 private:
00056 virtual void beginJob() ;
00057 virtual void beginRun(const edm::Run&, const edm::EventSetup&) ;
00058 virtual void endRun(const edm::Run&, const edm::EventSetup&) ;
00059 virtual void analyze(const edm::Event&, const edm::EventSetup&);
00060 virtual void endJob() ;
00061
00062
00063
00064 const edm::InputTag _apvphasecollection;
00065 std::vector<std::string> _selectedparts;
00066 std::vector<std::string> _selectedvectorparts;
00067 std::map<std::string,TH1F*> _hphases;
00068 std::map<std::string,TH1F*> _hselectedphases;
00069 std::map<std::string,TH1F*> _hselectedphasesvector;
00070 std::map<std::string,TH1F*> _hselectedphasessize;
00071 std::map<std::string,TProfile*> _hphasevsorbit;
00072 std::map<std::string,TProfile*> _hselectedphasevsorbit;
00073 std::map<std::string,TProfile*> _hselectedphasevectorvsorbit;
00074 unsigned int _nevents;
00075 };
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088 APVCyclePhaseMonitor::APVCyclePhaseMonitor(const edm::ParameterSet& iConfig):
00089 _apvphasecollection(iConfig.getParameter<edm::InputTag>("apvCyclePhaseCollection")),
00090 _selectedparts(iConfig.getUntrackedParameter<std::vector<std::string> >("selectedPartitions",std::vector<std::string>())),
00091 _selectedvectorparts(iConfig.getUntrackedParameter<std::vector<std::string> >("selectedVectorPartitions",std::vector<std::string>())),
00092 _hphases(),_hselectedphases(),_hselectedphasesvector(),_hselectedphasessize(),
00093 _hphasevsorbit(),_hselectedphasevsorbit(),_hselectedphasevectorvsorbit(),
00094 _nevents(0)
00095 {
00096
00097
00098 edm::LogInfo("UsedAPVCyclePhaseCollection") << " APVCyclePhaseCollection " << _apvphasecollection << " used";
00099
00100 }
00101
00102
00103 APVCyclePhaseMonitor::~APVCyclePhaseMonitor()
00104 {
00105
00106
00107
00108
00109 }
00110
00111
00112
00113
00114
00115
00116
00117 void
00118 APVCyclePhaseMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00119 {
00120 using namespace edm;
00121
00122 _nevents++;
00123
00124 edm::Handle<APVCyclePhaseCollection> apvphases;
00125 iEvent.getByLabel(_apvphasecollection,apvphases);
00126
00127
00128
00129 edm::Service<TFileService> tfserv;
00130
00131 for(std::map<std::string,int>::const_iterator phase = apvphases->get().begin(); phase != apvphases->get().end(); ++phase) {
00132
00133 if(_hphases.find(phase->first)==_hphases.end()) {
00134 char dirname[300];
00135 sprintf(dirname,"run_%d",iEvent.run());
00136 TFileDirectory subrun = tfserv->mkdir(dirname);
00137
00138 char hname[300];
00139
00140 sprintf(hname,"phase_%s",phase->first.c_str());
00141 edm::LogInfo("TH1FBeingBooked") << "TH1F " << hname << " being booked" ;
00142 _hphases[phase->first] = subrun.make<TH1F>(hname,hname,70,-0.5,69.5);
00143 _hphases[phase->first]->GetXaxis()->SetTitle("BX mod 70"); _hphases[phase->first]->GetYaxis()->SetTitle("Events");
00144
00145 sprintf(hname,"phasevsorbit_%s",phase->first.c_str());
00146 edm::LogInfo("TProfileBeingBooked") << "TProfile " << hname << " being booked" ;
00147 _hphasevsorbit[phase->first] = subrun.make<TProfile>(hname,hname,1800,0.,1800*11223);
00148 _hphasevsorbit[phase->first]->SetBit(TH1::kCanRebin);
00149 _hphasevsorbit[phase->first]->GetXaxis()->SetTitle("time [orbit#]"); _hphasevsorbit[phase->first]->GetYaxis()->SetTitle("Phase");
00150
00151 }
00152 _hphases[phase->first]->Fill(phase->second);
00153 _hphasevsorbit[phase->first]->Fill(iEvent.orbitNumber(),phase->second);
00154 }
00155
00156
00157
00158 for(std::vector<std::string>::const_iterator part=_selectedparts.begin();part!=_selectedparts.end();++part) {
00159 if(_hselectedphases.find(*part)!=_hselectedphases.end()) {
00160 _hselectedphases[*part]->Fill(apvphases->getPhase(*part));
00161 }
00162 if(_hselectedphasevsorbit.find(*part)!=_hselectedphasevsorbit.end()) {
00163 _hselectedphasevsorbit[*part]->Fill(iEvent.orbitNumber(),apvphases->getPhase(*part));
00164 }
00165 }
00166
00167 for(std::vector<std::string>::const_iterator part=_selectedvectorparts.begin();
00168 part!=_selectedvectorparts.end();++part) {
00169
00170 const std::vector<int> phases = apvphases->getPhases(*part);
00171
00172 if(_hselectedphasessize.find(*part)!=_hselectedphasessize.end()) {
00173 _hselectedphasessize[*part]->Fill(phases.size());
00174 }
00175
00176 for(std::vector<int>::const_iterator phase=phases.begin();phase!=phases.end();++phase) {
00177 if(_hselectedphasesvector.find(*part)!=_hselectedphasesvector.end()) {
00178 _hselectedphasesvector[*part]->Fill(*phase);
00179 }
00180 if(_hselectedphasevectorvsorbit.find(*part)!=_hselectedphasevectorvsorbit.end()) {
00181 _hselectedphasevectorvsorbit[*part]->Fill(iEvent.orbitNumber(),*phase);
00182 }
00183 }
00184
00185 }
00186 }
00187
00188 void
00189 APVCyclePhaseMonitor::beginRun(const edm::Run& iRun, const edm::EventSetup&)
00190 {
00191
00192 _hphases.clear();
00193 _hselectedphases.clear();
00194 _hselectedphasesvector.clear();
00195 _hselectedphasessize.clear();
00196 _hphasevsorbit.clear();
00197 _hselectedphasevsorbit.clear();
00198 _hselectedphasevectorvsorbit.clear();
00199
00200 edm::Service<TFileService> tfserv;
00201
00202 char dirname[300];
00203 sprintf(dirname,"run_%d",iRun.run());
00204 TFileDirectory subrun = tfserv->mkdir(dirname);
00205
00206 for(std::vector<std::string>::const_iterator part=_selectedparts.begin();part!=_selectedparts.end();++part) {
00207
00208 char hname[300];
00209
00210 sprintf(hname,"selected_phase_%s",part->c_str());
00211 edm::LogInfo("SelectedTH1FBeingBooked") << "TH1F " << hname << " being booked" ;
00212 _hselectedphases[*part] = subrun.make<TH1F>(hname,hname,70,-0.5,69.5);
00213 _hselectedphases[*part]->GetXaxis()->SetTitle("BX mod 70"); _hselectedphases[*part]->GetYaxis()->SetTitle("Events");
00214
00215 sprintf(hname,"selected_phasevsorbit_%s",part->c_str());
00216 edm::LogInfo("SelectedTProfileBeingBooked") << "TProfile " << hname << " being booked" ;
00217 _hselectedphasevsorbit[*part] = subrun.make<TProfile>(hname,hname,1800,0.,1800*11223);
00218 _hselectedphasevsorbit[*part]->SetBit(TH1::kCanRebin);
00219 _hselectedphasevsorbit[*part]->GetXaxis()->SetTitle("time [orbit#]");
00220 _hselectedphasevsorbit[*part]->GetYaxis()->SetTitle("Phase");
00221 }
00222
00223 for(std::vector<std::string>::const_iterator part=_selectedvectorparts.begin();
00224 part!=_selectedvectorparts.end();++part) {
00225
00226 char hname[300];
00227
00228 sprintf(hname,"selected_phase_vector_%s",part->c_str());
00229 edm::LogInfo("SelectedVectTH1FBeingBooked") << "TH1F " << hname << " being booked" ;
00230 _hselectedphasesvector[*part] = subrun.make<TH1F>(hname,hname,70,-0.5,69.5);
00231 _hselectedphasesvector[*part]->GetXaxis()->SetTitle("BX mod 70");
00232 _hselectedphasesvector[*part]->GetYaxis()->SetTitle("Events");
00233
00234 sprintf(hname,"selected_phase_size_%s",part->c_str());
00235 edm::LogInfo("SelectedVectSizeTH1FBeingBooked") << "TH1F " << hname << " being booked" ;
00236 _hselectedphasessize[*part] = subrun.make<TH1F>(hname,hname,10,-0.5,9.5);
00237 _hselectedphasessize[*part]->GetXaxis()->SetTitle("Number of Phases");
00238 _hselectedphasessize[*part]->GetYaxis()->SetTitle("Events");
00239
00240 sprintf(hname,"selected_phasevectorvsorbit_%s",part->c_str());
00241 edm::LogInfo("SelectedVectTProfileBeingBooked") << "TProfile " << hname << " being booked" ;
00242 _hselectedphasevectorvsorbit[*part] = subrun.make<TProfile>(hname,hname,1800,0.,1800*11223);
00243 _hselectedphasevectorvsorbit[*part]->SetBit(TH1::kCanRebin);
00244 _hselectedphasevectorvsorbit[*part]->GetXaxis()->SetTitle("time [orbit#]");
00245 _hselectedphasevectorvsorbit[*part]->GetYaxis()->SetTitle("Phase");
00246 }
00247 }
00248
00249 void
00250 APVCyclePhaseMonitor::endRun(const edm::Run& iRun, const edm::EventSetup&)
00251 {
00252 }
00253
00254
00255
00256 void
00257 APVCyclePhaseMonitor::beginJob()
00258 {
00259
00260 }
00261
00262
00263 void
00264 APVCyclePhaseMonitor::endJob() {
00265
00266 edm::LogInfo("EndOfJob") << _nevents << " analyzed events";
00267
00268 }
00269
00270
00271
00272 DEFINE_FWK_MODULE(APVCyclePhaseMonitor);