00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <iostream>
00012 #include <sstream>
00013 #include <iomanip>
00014
00015 #include "FWCore/ServiceRegistry/interface/Service.h"
00016 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00017
00018 #include "DQMServices/Core/interface/MonitorElement.h"
00019
00020 #include "DQMServices/Core/interface/DQMStore.h"
00021
00022 #include "DataFormats/EcalRawData/interface/EcalRawDataCollections.h"
00023 #include "DataFormats/EcalDetId/interface/EBDetId.h"
00024 #include "DataFormats/EcalRecHit/interface/EcalUncalibratedRecHit.h"
00025 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00026
00027 #include "TBDataFormats/EcalTBObjects/interface/EcalTBCollections.h"
00028
00029 #include "DQM/EcalCommon/interface/Numbers.h"
00030
00031 #include "DQM/EcalEndcapMonitorTasks/interface/EEBeamHodoTask.h"
00032
00033 EEBeamHodoTask::EEBeamHodoTask(const edm::ParameterSet& ps){
00034
00035 init_ = false;
00036
00037 dqmStore_ = edm::Service<DQMStore>().operator->();
00038
00039 prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00040
00041 enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00042
00043 mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns", false);
00044
00045 EcalTBEventHeader_ = ps.getParameter<edm::InputTag>("EcalTBEventHeader");
00046 EcalRawDataCollection_ = ps.getParameter<edm::InputTag>("EcalRawDataCollection");
00047 EcalUncalibratedRecHitCollection_ = ps.getParameter<edm::InputTag>("EcalUncalibratedRecHitCollection");
00048 EcalTBTDCRawInfo_ = ps.getParameter<edm::InputTag>("EcalTBTDCRawInfo");
00049 EcalTBHodoscopeRawInfo_ = ps.getParameter<edm::InputTag>("EcalTBHodoscopeRawInfo");
00050 EcalTBTDCRecInfo_ = ps.getParameter<edm::InputTag>("EcalTBTDCRecInfo");
00051 EcalTBHodoscopeRecInfo_ = ps.getParameter<edm::InputTag>("EcalTBHodoscopeRecInfo");
00052
00053 tableIsMoving_ = false;
00054 cryInBeam_ =0;
00055 previousCryInBeam_ = -99999;
00056
00057
00058 for (int i=0; i<4; i++) {
00059 meHodoOcc_[i] =0;
00060 meHodoRaw_[i] =0;
00061 }
00062 meTDCRec_ =0;
00063
00064
00065 meHodoPosRecX_ =0;
00066 meHodoPosRecY_ =0;
00067 meHodoPosRecXY_ =0;
00068 meHodoSloXRec_ =0;
00069 meHodoSloYRec_ =0;
00070 meHodoQuaXRec_ =0;
00071 meHodoQuaYRec_ =0;
00072 meHodoPosXMinusCaloPosXVsCry_ =0;
00073 meHodoPosYMinusCaloPosYVsCry_ =0;
00074 meTDCTimeMinusCaloTimeVsCry_ =0;
00075 meMissingCollections_ =0;
00076
00077 meEvsXRecProf_ =0;
00078 meEvsYRecProf_ =0;
00079 meEvsXRecHis_ =0;
00080 meEvsYRecHis_ =0;
00081
00082
00083 meCaloVsHodoXPos_ =0;
00084 meCaloVsHodoYPos_ =0;
00085 meCaloVsTDCTime_ =0;
00086
00087 }
00088
00089 EEBeamHodoTask::~EEBeamHodoTask(){
00090
00091 }
00092
00093 void EEBeamHodoTask::beginJob(void){
00094
00095 ievt_ = 0;
00096
00097 LV1_ = 0;
00098 cryInBeamCounter_ =0;
00099 resetNow_ =false;
00100
00101 if ( dqmStore_ ) {
00102 dqmStore_->setCurrentFolder(prefixME_ + "/EEBeamHodoTask");
00103 dqmStore_->rmdir(prefixME_ + "/EEBeamHodoTask");
00104 }
00105
00106 }
00107
00108 void EEBeamHodoTask::beginRun(const edm::Run& r, const edm::EventSetup& c) {
00109
00110 Numbers::initGeometry(c, false);
00111
00112 if ( ! mergeRuns_ ) this->reset();
00113
00114 }
00115
00116 void EEBeamHodoTask::endRun(const edm::Run& r, const edm::EventSetup& c) {
00117
00118 }
00119
00120 void EEBeamHodoTask::reset(void) {
00121
00122 for (int i=0; i<4; i++) {
00123 if ( meHodoOcc_[i] ) meHodoOcc_[i]->Reset();
00124 if ( meHodoRaw_[i] ) meHodoRaw_[i]->Reset();
00125 }
00126
00127 if ( meHodoPosRecX_ ) meHodoPosRecX_->Reset();
00128 if ( meHodoPosRecY_ ) meHodoPosRecY_->Reset();
00129 if ( meHodoPosRecXY_ ) meHodoPosRecXY_->Reset();
00130 if ( meHodoSloXRec_ ) meHodoSloXRec_->Reset();
00131 if ( meHodoSloYRec_ ) meHodoSloYRec_->Reset();
00132 if ( meHodoQuaXRec_ ) meHodoQuaXRec_->Reset();
00133 if ( meHodoQuaYRec_ ) meHodoQuaYRec_->Reset();
00134 if ( meTDCRec_ ) meTDCRec_->Reset();
00135 if ( meEvsXRecProf_ ) meEvsXRecProf_->Reset();
00136 if ( meEvsYRecProf_ ) meEvsYRecProf_->Reset();
00137 if ( meEvsXRecHis_ ) meEvsXRecHis_->Reset();
00138 if ( meEvsYRecHis_ ) meEvsYRecHis_->Reset();
00139 if ( meCaloVsHodoXPos_ ) meCaloVsHodoXPos_->Reset();
00140 if ( meCaloVsHodoYPos_ ) meCaloVsHodoYPos_->Reset();
00141 if ( meCaloVsTDCTime_ ) meCaloVsTDCTime_->Reset();
00142 if ( meHodoPosXMinusCaloPosXVsCry_ ) meHodoPosXMinusCaloPosXVsCry_->Reset();
00143 if ( meHodoPosYMinusCaloPosYVsCry_ ) meHodoPosYMinusCaloPosYVsCry_->Reset();
00144 if ( meTDCTimeMinusCaloTimeVsCry_ ) meTDCTimeMinusCaloTimeVsCry_->Reset();
00145 if ( meMissingCollections_ ) meMissingCollections_->Reset();
00146
00147 }
00148
00149 void EEBeamHodoTask::setup(void){
00150
00151 init_ = true;
00152
00153 smId =1;
00154
00155 std::string name;
00156 std::stringstream ss;
00157
00158 if ( dqmStore_ ) {
00159 dqmStore_->setCurrentFolder(prefixME_ + "/EEBeamHodoTask");
00160
00161
00162
00163
00164
00165 for (int i=0; i<4; i++) {
00166 ss.str("");
00167 ss << std::setw(2) << std::setfill('0') << i+1;
00168
00169 name = "EEBHT occup " + Numbers::sEE(smId) + " " + ss.str();
00170 meHodoOcc_[i] = dqmStore_->book1D(name, name, 30, 0., 30.);
00171 meHodoOcc_[i]->setAxisTitle("hits per event", 1);
00172
00173 name = "EEBHT raw " + Numbers::sEE(smId) + " " + ss.str();
00174 meHodoRaw_[i] = dqmStore_->book1D(name, name, 64, 0., 64.);
00175 meHodoRaw_[i]->setAxisTitle("hodo fiber number", 1);
00176 }
00177
00178 name = "EEBHT PosX rec " + Numbers::sEE(smId);
00179 meHodoPosRecX_ = dqmStore_->book1D(name, name, 100, -20, 20);
00180 meHodoPosRecX_->setAxisTitle("reconstructed position (mm)", 1);
00181
00182 name = "EEBHT PosY rec " + Numbers::sEE(smId);
00183 meHodoPosRecY_ = dqmStore_->book1D(name, name, 100, -20, 20);
00184 meHodoPosRecY_->setAxisTitle("reconstructed position (mm)", 1);
00185
00186 name = "EEBHT PosYX rec " + Numbers::sEE(smId);
00187 meHodoPosRecXY_ = dqmStore_->book2D(name, name, 100, -20, 20,100, -20, 20);
00188 meHodoPosRecXY_->setAxisTitle("reconstructed X position (mm)", 1);
00189 meHodoPosRecXY_->setAxisTitle("reconstructed Y position (mm)", 2);
00190
00191 name = "EEBHT SloX " + Numbers::sEE(smId);
00192 meHodoSloXRec_ = dqmStore_->book1D(name, name, 50, -0.005, 0.005);
00193 meHodoSloXRec_->setAxisTitle("reconstructed track slope", 1);
00194
00195 name = "EEBHT SloY " + Numbers::sEE(smId);
00196 meHodoSloYRec_ = dqmStore_->book1D(name, name, 50, -0.005, 0.005);
00197 meHodoSloYRec_->setAxisTitle("reconstructed track slope", 1);
00198
00199 name = "EEBHT QualX " + Numbers::sEE(smId);
00200 meHodoQuaXRec_ = dqmStore_->book1D(name, name, 50, 0, 5);
00201 meHodoQuaXRec_->setAxisTitle("track fit quality", 1);
00202
00203 name = "EEBHT QualY " + Numbers::sEE(smId);
00204 meHodoQuaYRec_ = dqmStore_->book1D(name, name, 50, 0, 5);
00205 meHodoQuaYRec_->setAxisTitle("track fit quality", 1);
00206
00207 name = "EEBHT TDC rec " + Numbers::sEE(smId);
00208 meTDCRec_ = dqmStore_->book1D(name, name, 25, 0, 1);
00209 meTDCRec_->setAxisTitle("offset", 1);
00210
00211 name = "EEBHT Hodo-Calo X vs Cry " + Numbers::sEE(smId);
00212 meHodoPosXMinusCaloPosXVsCry_ = dqmStore_->book1D(name, name, 50, 0, 50);
00213 meHodoPosXMinusCaloPosXVsCry_->setAxisTitle("scan step number", 1);
00214 meHodoPosXMinusCaloPosXVsCry_->setAxisTitle("PosX_{hodo} - PosX_{calo} (mm)", 2);
00215
00216 name = "EEBHT Hodo-Calo Y vs Cry " + Numbers::sEE(smId);
00217 meHodoPosYMinusCaloPosYVsCry_ = dqmStore_->book1D(name, name, 50, 0, 50);
00218 meHodoPosYMinusCaloPosYVsCry_->setAxisTitle("scan step number", 1);
00219 meHodoPosYMinusCaloPosYVsCry_->setAxisTitle("PosY_{hodo} - PosY_{calo} (mm)", 2);
00220
00221 name = "EEBHT TDC-Calo vs Cry " + Numbers::sEE(smId);
00222 meTDCTimeMinusCaloTimeVsCry_ = dqmStore_->book1D(name, name, 50, 0, 50);
00223 meTDCTimeMinusCaloTimeVsCry_->setAxisTitle("scan step number", 1);
00224 meTDCTimeMinusCaloTimeVsCry_->setAxisTitle("Time_{TDC} - Time_{calo} (sample)", 2);
00225
00226 name = "EEBHT Missing Collections " + Numbers::sEE(smId);
00227 meMissingCollections_ = dqmStore_->book1D(name, name, 7, 0, 7);
00228 meMissingCollections_->setAxisTitle("missing collection", 1);
00229
00230
00231
00232
00233
00234 name = "EEBHT prof E1 vs X " + Numbers::sEE(smId);
00235 meEvsXRecProf_ = dqmStore_-> bookProfile(name, name, 100, -20, 20, 500, 0, 5000, "s");
00236 meEvsXRecProf_->setAxisTitle("PosX (mm)", 1);
00237 meEvsXRecProf_->setAxisTitle("E1 (ADC)", 2);
00238
00239 name = "EEBHT prof E1 vs Y " + Numbers::sEE(smId);
00240 meEvsYRecProf_ = dqmStore_-> bookProfile(name, name, 100, -20, 20, 500, 0, 5000, "s");
00241 meEvsYRecProf_->setAxisTitle("PosY (mm)", 1);
00242 meEvsYRecProf_->setAxisTitle("E1 (ADC)", 2);
00243
00244 name = "EEBHT his E1 vs X " + Numbers::sEE(smId);
00245 meEvsXRecHis_ = dqmStore_-> book2D(name, name, 100, -20, 20, 500, 0, 5000);
00246 meEvsXRecHis_->setAxisTitle("PosX (mm)", 1);
00247 meEvsXRecHis_->setAxisTitle("E1 (ADC)", 2);
00248
00249 name = "EEBHT his E1 vs Y " + Numbers::sEE(smId);
00250 meEvsYRecHis_ = dqmStore_-> book2D(name, name, 100, -20, 20, 500, 0, 5000);
00251 meEvsYRecHis_->setAxisTitle("PosY (mm)", 1);
00252 meEvsYRecHis_->setAxisTitle("E1 (ADC)", 2);
00253
00254 name = "EEBHT PosX Hodo-Calo " + Numbers::sEE(smId);
00255 meCaloVsHodoXPos_ = dqmStore_->book1D(name, name, 40, -20, 20);
00256 meCaloVsHodoXPos_->setAxisTitle("PosX_{hodo} - PosX_{calo} (mm)", 1);
00257
00258 name = "EEBHT PosY Hodo-Calo " + Numbers::sEE(smId);
00259 meCaloVsHodoYPos_ = dqmStore_->book1D(name, name, 40, -20, 20);
00260 meCaloVsHodoYPos_->setAxisTitle("PosY_{hodo} - PosY_{calo} (mm)", 1);
00261
00262 name = "EEBHT TimeMax TDC-Calo " + Numbers::sEE(smId);
00263 meCaloVsTDCTime_ = dqmStore_->book1D(name, name, 100, -1, 1);
00264 meCaloVsTDCTime_->setAxisTitle("Time_{TDC} - Time_{calo} (samples)", 1);
00265
00266 }
00267
00268 }
00269
00270 void EEBeamHodoTask::cleanup(void){
00271
00272 if ( ! init_ ) return;
00273
00274 if ( dqmStore_ ) {
00275 dqmStore_->setCurrentFolder(prefixME_ + "/EEBeamHodoTask");
00276
00277 for (int i=0; i<4; i++) {
00278 if ( meHodoOcc_[i] ) dqmStore_->removeElement( meHodoOcc_[i]->getName() );
00279 meHodoOcc_[i] = 0;
00280 if ( meHodoRaw_[i] ) dqmStore_->removeElement( meHodoRaw_[i]->getName() );
00281 meHodoRaw_[i] = 0;
00282 }
00283
00284 if ( meHodoPosRecX_ ) dqmStore_->removeElement( meHodoPosRecX_->getName() );
00285 meHodoPosRecX_ = 0;
00286 if ( meHodoPosRecY_ ) dqmStore_->removeElement( meHodoPosRecY_->getName() );
00287 meHodoPosRecY_ = 0;
00288 if ( meHodoPosRecXY_ ) dqmStore_->removeElement( meHodoPosRecXY_->getName() );
00289 meHodoPosRecXY_ = 0;
00290 if ( meHodoSloXRec_ ) dqmStore_->removeElement( meHodoSloXRec_->getName() );
00291 meHodoSloXRec_ = 0;
00292 if ( meHodoSloYRec_ ) dqmStore_->removeElement( meHodoSloYRec_->getName() );
00293 meHodoSloYRec_ = 0;
00294 if ( meHodoQuaXRec_ ) dqmStore_->removeElement( meHodoQuaXRec_->getName() );
00295 meHodoQuaXRec_ = 0;
00296 if ( meHodoQuaYRec_ ) dqmStore_->removeElement( meHodoQuaYRec_->getName() );
00297 meHodoQuaYRec_ = 0;
00298 if ( meTDCRec_ ) dqmStore_->removeElement( meTDCRec_->getName() );
00299 meTDCRec_ = 0;
00300 if ( meEvsXRecProf_ ) dqmStore_->removeElement( meEvsXRecProf_->getName() );
00301 meEvsXRecProf_ = 0;
00302 if ( meEvsYRecProf_ ) dqmStore_->removeElement( meEvsYRecProf_->getName() );
00303 meEvsYRecProf_ = 0;
00304 if ( meEvsXRecHis_ ) dqmStore_->removeElement( meEvsXRecHis_->getName() );
00305 meEvsXRecHis_ = 0;
00306 if ( meEvsYRecHis_ ) dqmStore_->removeElement( meEvsYRecHis_->getName() );
00307 meEvsYRecHis_ = 0;
00308 if ( meCaloVsHodoXPos_ ) dqmStore_->removeElement( meCaloVsHodoXPos_->getName() );
00309 meCaloVsHodoXPos_ = 0;
00310 if ( meCaloVsHodoYPos_ ) dqmStore_->removeElement( meCaloVsHodoYPos_->getName() );
00311 meCaloVsHodoYPos_ = 0;
00312 if ( meCaloVsTDCTime_ ) dqmStore_->removeElement( meCaloVsTDCTime_->getName() );
00313 meCaloVsTDCTime_ = 0;
00314 if ( meHodoPosXMinusCaloPosXVsCry_ ) dqmStore_->removeElement( meHodoPosXMinusCaloPosXVsCry_->getName() );
00315 meHodoPosXMinusCaloPosXVsCry_ = 0;
00316 if ( meHodoPosYMinusCaloPosYVsCry_ ) dqmStore_->removeElement( meHodoPosYMinusCaloPosYVsCry_->getName() );
00317 meHodoPosYMinusCaloPosYVsCry_ = 0;
00318 if ( meTDCTimeMinusCaloTimeVsCry_ ) dqmStore_->removeElement( meTDCTimeMinusCaloTimeVsCry_->getName() );
00319 meTDCTimeMinusCaloTimeVsCry_ = 0;
00320 if ( meMissingCollections_ ) dqmStore_->removeElement( meMissingCollections_->getName() );
00321 meMissingCollections_ = 0;
00322
00323 }
00324
00325 init_ = false;
00326
00327 }
00328
00329 void EEBeamHodoTask::endJob(void){
00330
00331 edm::LogInfo("EEBeamHodoTask") << "analyzed " << ievt_ << " events";
00332
00333 if ( enableCleanup_ ) this->cleanup();
00334
00335 }
00336
00337 void EEBeamHodoTask::analyze(const edm::Event& e, const edm::EventSetup& c){
00338
00339 bool enable = false;
00340 edm::Handle<EcalTBEventHeader> pHeader;
00341 const EcalTBEventHeader* Header =0;
00342
00343 if ( e.getByLabel(EcalTBEventHeader_, pHeader) ) {
00344 Header = pHeader.product();
00345 if (!Header) {
00346 edm::LogWarning("EEBeamHodoTask") << "Event header not found. Returning. ";
00347 meMissingCollections_-> Fill(0);
00348 return;
00349 }
00350 tableIsMoving_ = Header->tableIsMoving();
00351 cryInBeam_ = Header->crystalInBeam();
00352 if (previousCryInBeam_ == -99999 )
00353 { previousCryInBeam_ = cryInBeam_ ; }
00354
00355 LogDebug("EEBeamHodoTask") << "event: " << ievt_ << " event header found ";
00356 if (tableIsMoving_){
00357 LogDebug("EEBeamHodoTask") << "Table is moving. "; }
00358 else
00359 { LogDebug("EEBeamHodoTask") << "Table is not moving. "; }
00360 } else {
00361 edm::LogWarning("EEBeamHodoTask") << "Event header not found (exception caught). Returning. ";
00362 return;
00363 }
00364
00365 edm::Handle<EcalRawDataCollection> dcchs;
00366
00367 if ( e.getByLabel(EcalRawDataCollection_, dcchs) ) {
00368
00369 for ( EcalRawDataCollection::const_iterator dcchItr = dcchs->begin(); dcchItr != dcchs->end(); ++dcchItr ) {
00370
00371 if ( Numbers::subDet( *dcchItr ) != EcalEndcap ) continue;
00372
00373 if ( dcchItr->getRunType() == EcalDCCHeaderBlock::BEAMH4 ||
00374 dcchItr->getRunType() == EcalDCCHeaderBlock::BEAMH2 ) enable = true;
00375 }
00376
00377 } else {
00378 edm::LogWarning("EcalBeamTask") << EcalRawDataCollection_ << " not available";
00379 meMissingCollections_-> Fill(1);
00380 return;
00381
00382 }
00383
00384 if ( ! enable ) return;
00385 if ( ! init_ ) this->setup();
00386 ievt_++;
00387
00388 LV1_ = Header->eventNumber();
00389
00390 edm::Handle<EcalUncalibratedRecHitCollection> pUncalRH;
00391 const EcalUncalibratedRecHitCollection* uncalRecH =0;
00392
00393 if ( e.getByLabel(EcalUncalibratedRecHitCollection_, pUncalRH) ) {
00394 uncalRecH = pUncalRH.product();
00395 int neh = pUncalRH->size();
00396 LogDebug("EEBeamHodoTask") << EcalUncalibratedRecHitCollection_ << " found in event " << ievt_ << "; hits collection size " << neh;
00397 } else {
00398 edm::LogWarning("EEBeamHodoTask") << EcalUncalibratedRecHitCollection_ << " not available";
00399 meMissingCollections_-> Fill(2);
00400 return;
00401 }
00402
00403 edm::Handle<EcalTBTDCRawInfo> pTDCRaw;
00404 const EcalTBTDCRawInfo* rawTDC=0;
00405
00406 if ( e.getByLabel(EcalTBTDCRawInfo_, pTDCRaw) ) {
00407 rawTDC = pTDCRaw.product();
00408 } else {
00409 edm::LogError("EcalBeamTask") << "Error! Can't get the product EcalTBTDCRawInfo. Returning.";
00410 meMissingCollections_-> Fill(4);
00411 return;
00412 }
00413
00414 edm::Handle<EcalTBHodoscopeRawInfo> pHodoRaw;
00415 const EcalTBHodoscopeRawInfo* rawHodo=0;
00416
00417 if ( e.getByLabel(EcalTBHodoscopeRawInfo_, pHodoRaw) ) {
00418 rawHodo = pHodoRaw.product();
00419 if(rawHodo->planes() ){
00420 LogDebug("EcalBeamTask") << "hodoscopeRaw: num planes: " << rawHodo->planes()
00421 << " channels in plane 1: " << rawHodo->channels(0);
00422 }
00423 } else {
00424 edm::LogError("EcalBeamTask") << "Error! Can't get the product EcalTBHodoscopeRawInfo. Returning";
00425 meMissingCollections_-> Fill(3);
00426 return;
00427 }
00428
00429 if ( !rawTDC ||!rawHodo || !uncalRecH || !( rawHodo->planes() )) {
00430 edm::LogWarning("EcalBeamTask") << "analyze: missing a needed collection or hodo collection empty. Returning.";
00431 return;
00432 }
00433 LogDebug("EEBeamHodoTask") << " TDC raw, Hodo raw, uncalRecH and DCCheader found.";
00434
00435
00436
00437
00438
00439
00440 if (cryInBeam_ != previousCryInBeam_ ) {
00441 previousCryInBeam_ = cryInBeam_ ;
00442 cryInBeamCounter_++;
00443 resetNow_ = true;
00444
00445
00446
00447
00448
00449 LogDebug("EcalBeamTask") << "At event number : " << LV1_ << " switching table status: from moving to still. "
00450 << " cry in beam is: " << cryInBeam_ << ", step being: " << cryInBeamCounter_ ;
00451
00452
00453 float HodoPosXMinusCaloPosXVsCry_mean =0;
00454 float HodoPosXMinusCaloPosXVsCry_rms =0;
00455 float HodoPosYMinusCaloPosYVsCry_mean =0;
00456 float HodoPosYMinusCaloPosYVsCry_rms =0;
00457 float TDCTimeMinusCaloTimeVsCry_mean =0;
00458 float TDCTimeMinusCaloTimeVsCry_rms =0;
00459
00460
00461
00462
00463
00464 if (meCaloVsHodoXPos_-> getEntries() > 10){
00465 HodoPosXMinusCaloPosXVsCry_mean = meCaloVsHodoXPos_-> getMean(1);
00466 HodoPosXMinusCaloPosXVsCry_rms = meCaloVsHodoXPos_-> getRMS(1);
00467 meHodoPosXMinusCaloPosXVsCry_-> setBinContent( cryInBeamCounter_, HodoPosXMinusCaloPosXVsCry_mean);
00468 meHodoPosXMinusCaloPosXVsCry_-> setBinError( cryInBeamCounter_, HodoPosXMinusCaloPosXVsCry_rms);
00469 LogDebug("EcalBeamTask") << "At event number: " << LV1_ << " step: " << cryInBeamCounter_
00470 << " DeltaPosX is: " << (meCaloVsHodoXPos_-> getMean(1))
00471 << " +-" << ( meCaloVsHodoXPos_-> getRMS(1));
00472 }
00473 if (meCaloVsHodoYPos_-> getEntries() > 10){
00474 HodoPosYMinusCaloPosYVsCry_mean = meCaloVsHodoYPos_-> getMean(1);
00475 HodoPosYMinusCaloPosYVsCry_rms = meCaloVsHodoYPos_-> getRMS(1);
00476 meHodoPosYMinusCaloPosYVsCry_-> setBinContent( cryInBeamCounter_, HodoPosYMinusCaloPosYVsCry_mean);
00477 meHodoPosYMinusCaloPosYVsCry_-> setBinError( cryInBeamCounter_, HodoPosYMinusCaloPosYVsCry_rms);
00478 LogDebug("EcalBeamTask") << "At event number: " << LV1_ << " step: " << cryInBeamCounter_
00479 << " DeltaPosY is: " << (meCaloVsHodoYPos_-> getMean(1))
00480 << " +-" << ( meCaloVsHodoYPos_-> getRMS(1));
00481 }
00482 if (meCaloVsTDCTime_-> getEntries() > 10){
00483 TDCTimeMinusCaloTimeVsCry_mean = meCaloVsTDCTime_-> getMean(1);
00484 TDCTimeMinusCaloTimeVsCry_rms = meCaloVsTDCTime_-> getRMS(1);
00485 meTDCTimeMinusCaloTimeVsCry_-> setBinContent(cryInBeamCounter_, TDCTimeMinusCaloTimeVsCry_mean);
00486 meTDCTimeMinusCaloTimeVsCry_-> setBinError(cryInBeamCounter_, TDCTimeMinusCaloTimeVsCry_rms);
00487 LogDebug("EcalBeamTask") << "At event number: " << LV1_ << " step: " << cryInBeamCounter_
00488 << " DeltaT is: " << (meCaloVsTDCTime_-> getMean(1))
00489 << " +-" << ( meCaloVsTDCTime_-> getRMS(1));
00490 }
00491
00492 LogDebug("EcalBeamTask") << "At event number: " << LV1_ << " trace histos filled ( cryInBeamCounter_="
00493 << cryInBeamCounter_ << ")";
00494
00495 }
00496
00497
00498
00499
00500
00501 if (resetNow_)
00502 {
00503 meEvsXRecProf_->Reset();
00504 meEvsYRecProf_->Reset();
00505 meEvsXRecHis_->Reset();
00506 meEvsYRecHis_->Reset();
00507 meCaloVsHodoXPos_->Reset();
00508 meCaloVsHodoYPos_->Reset();
00509 meCaloVsTDCTime_->Reset();
00510
00511 resetNow_ = false;
00512 }
00513
00514
00515
00516
00517
00518
00519
00520 for (unsigned int planeId=0; planeId <4; planeId++){
00521
00522 const EcalTBHodoscopePlaneRawHits& planeRaw = rawHodo->getPlaneRawHits(planeId);
00523 LogDebug("EcalBeamTask") << "\t plane: " << (planeId+1)
00524 << "\t number of fibers: " << planeRaw.channels()
00525 << "\t number of hits: " << planeRaw.numberOfFiredHits();
00526 meHodoOcc_[planeId]-> Fill( planeRaw.numberOfFiredHits() );
00527
00528 for (unsigned int i=0;i<planeRaw.channels();i++)
00529 {
00530 if (planeRaw.isChannelFired(i))
00531 {
00532 edm::LogInfo("EcalBeamTask")<< " channel " << (i+1) << " has fired";
00533 meHodoRaw_[planeId]-> Fill(i+0.5);
00534 }
00535 }
00536 }
00537
00538
00539
00540 edm::Handle<EcalTBTDCRecInfo> pTDC;
00541 const EcalTBTDCRecInfo* recTDC=0;
00542
00543 if ( e.getByLabel(EcalTBTDCRecInfo_, pTDC) ) {
00544 recTDC = pTDC.product();
00545 LogDebug("EEBeamHodoTask") << " TDC offset is: " << recTDC->offset();
00546 } else {
00547 edm::LogError("EcalBeamTask") << "Error! Can't get the product EcalTBTDCRecInfo. Returning";
00548 meMissingCollections_-> Fill(5);
00549 return;
00550 }
00551
00552 edm::Handle<EcalTBHodoscopeRecInfo> pHodo;
00553 const EcalTBHodoscopeRecInfo* recHodo=0;
00554
00555 if ( e.getByLabel(EcalTBHodoscopeRecInfo_, pHodo) ) {
00556 recHodo = pHodo.product();
00557 LogDebug("EcalBeamTask") << "hodoscopeReco: x: " << recHodo->posX()
00558 << "\ty: " << recHodo->posY()
00559 << "\t sx: " << recHodo->slopeX() << "\t qualx: " << recHodo->qualX()
00560 << "\t sy: " << recHodo->slopeY() << "\t qualy: " << recHodo->qualY();
00561 } else {
00562 edm::LogError("EcalBeamTask") << "Error! Can't get the product EcalTBHodoscopeRecInfo";
00563 meMissingCollections_-> Fill(6);
00564 return;
00565 }
00566
00567 if ( (!recHodo) || (!recTDC) ) {
00568 edm::LogWarning("EcalBeamTask") << "analyze: missing a needed collection, recHodo or recTDC. Returning.";
00569 return;
00570 }
00571 LogDebug("EEBeamHodoTask") << " Hodo reco and TDC reco found.";
00572
00573 meTDCRec_->Fill( recTDC->offset());
00574
00575 meHodoPosRecXY_->Fill( recHodo->posX(), recHodo->posY() );
00576 meHodoPosRecX_->Fill( recHodo->posX());
00577 meHodoPosRecY_->Fill( recHodo->posY() );
00578 meHodoSloXRec_->Fill( recHodo->slopeX());
00579 meHodoSloYRec_->Fill( recHodo->slopeY());
00580 meHodoQuaXRec_->Fill( recHodo->qualX());
00581 meHodoQuaYRec_->Fill( recHodo->qualY());
00582
00583
00584
00585
00586
00587 if (tableIsMoving_) {
00588 LogDebug("EcalBeamTask")<< "At event number:" << LV1_ << " table is moving. Not filling concerned monitoring elements. ";
00589 return;
00590 } else {
00591 LogDebug("EcalBeamTask")<< "At event number:" << LV1_ << " table is not moving - thus filling alos monitoring elements requiring so.";
00592 }
00593
00594 float maxE =0;
00595 EBDetId maxHitId(0);
00596 for ( EEUncalibratedRecHitCollection::const_iterator uncalHitItr = pUncalRH->begin(); uncalHitItr!= pUncalRH->end(); uncalHitItr++ ) {
00597 double e = (*uncalHitItr).amplitude();
00598 if ( e <= 0. ) e = 0.0;
00599 if ( e > maxE ) {
00600 maxE = e;
00601 maxHitId = (*uncalHitItr).id();
00602 }
00603 }
00604 if ( maxHitId == EBDetId(0) ) {
00605 edm::LogError("EEBeamHodoTask") << "No positive UncalRecHit found in ECAL in event " << ievt_ << " - returning.";
00606 return;
00607 }
00608
00609 meEvsXRecProf_-> Fill(recHodo->posX(), maxE);
00610 meEvsYRecProf_-> Fill(recHodo->posY(), maxE);
00611 meEvsXRecHis_-> Fill(recHodo->posX(), maxE);
00612 meEvsYRecHis_-> Fill(recHodo->posY(), maxE);
00613
00614 edm::LogInfo("EcalBeamTask")<< " channel with max is " << maxHitId;
00615
00616 bool mat5x5 =true;
00617 int ietaMax = maxHitId.ieta();
00618 int iphiMax = (maxHitId.iphi() % 20);
00619 if (ietaMax ==1 || ietaMax ==2 || ietaMax ==84 || ietaMax == 85 ||
00620 iphiMax ==1 || iphiMax ==2 || iphiMax ==19 || iphiMax == 20 )
00621 {mat5x5 =false;}
00622
00623 if (!mat5x5) return;
00624
00625 EBDetId Xtals5x5[25];
00626 double ene5x5[25];
00627 double e25 =0;
00628 for (unsigned int icry=0;icry<25;icry++)
00629 {
00630 unsigned int row = icry / 5;
00631 unsigned int column= icry %5;
00632 if ( EBDetId::validDetId(maxHitId.ieta()+column-2,maxHitId.iphi()+row-2) ) {
00633 Xtals5x5[icry]=EBDetId(maxHitId.ieta()+column-2,maxHitId.iphi()+row-2,EBDetId::ETAPHIMODE);
00634 double e = ( *pUncalRH->find( Xtals5x5[icry] ) ).amplitude();
00635 if ( e <= 0. ) e = 0.0;
00636 ene5x5[icry] =e;
00637 e25 +=e;
00638 } else {
00639 LogDebug("EcalBeamTask")<< "Cannot construct 5x5 matrix around EBDetId " << maxHitId;
00640 mat5x5 =false;
00641 }
00642 }
00643
00644 if (!mat5x5) return;
00645 LogDebug("EcalBeamTask")<< "Could construct 5x5 matrix around EBDetId " << maxHitId;
00646
00647
00648 float sideX =24.06;
00649 float sideY =22.02;
00650 float caloX =0;
00651 float caloY =0;
00652 float weight=0;
00653 float sumWeight=0;
00654
00655 for (unsigned int icry=0;icry<25;icry++)
00656 {
00657 weight = log( ene5x5[icry] / e25) + 3.8;
00658 if (weight>0)
00659 {
00660 unsigned int row = icry / 5;
00661 unsigned int column = icry %5;
00662 caloX += (column-2) * sideX * weight;
00663 caloY -= (row-2) * sideY * weight;
00664 sumWeight += weight;
00665 }
00666 }
00667 caloX /=sumWeight;
00668 caloY /=sumWeight;
00669
00670 meCaloVsHodoXPos_->Fill( recHodo->posX()-caloX );
00671 meCaloVsHodoYPos_->Fill( recHodo->posY()-caloY );
00672 meCaloVsTDCTime_->Fill( (*pUncalRH->find( maxHitId ) ).jitter() - recTDC->offset() - 3);
00673 LogDebug("EcalBeamTask")<< "jiitter from uncalRecHit: " << (*pUncalRH->find( maxHitId ) ).jitter();
00674
00675 }
00676