CMS 3D CMS Logo

EESelectiveReadoutTask.cc

Go to the documentation of this file.
00001 /*
00002  * \file EESelectiveReadoutTask.cc
00003  *
00004  * $Date: 2008/12/04 15:19:28 $
00005  * $Revision: 1.21 $
00006  * \author P. Gras
00007  * \author E. Di Marco
00008  *
00009 */
00010 
00011 #include <iostream>
00012 #include <fstream>
00013 #include <vector>
00014 #include <math.h>
00015 
00016 #include "FWCore/ServiceRegistry/interface/Service.h"
00017 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00018 
00019 #include "DQMServices/Core/interface/MonitorElement.h"
00020 
00021 #include "DQMServices/Core/interface/DQMStore.h"
00022 
00023 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00024 #include "DataFormats/EcalDetId/interface/EcalTrigTowerDetId.h"
00025 #include "DataFormats/EcalDetId/interface/EcalScDetId.h"
00026 
00027 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
00028 #include "DataFormats/EcalDigi/interface/EcalDigiCollections.h"
00029 
00030 #include <DQM/EcalCommon/interface/UtilsClient.h>
00031 #include <DQM/EcalCommon/interface/Numbers.h>
00032 
00033 #include <DQM/EcalEndcapMonitorTasks/interface/EESelectiveReadoutTask.h>
00034 
00035 using namespace cms;
00036 using namespace edm;
00037 using namespace std;
00038 
00039 EESelectiveReadoutTask::EESelectiveReadoutTask(const ParameterSet& ps){
00040 
00041   init_ = false;
00042 
00043   dqmStore_ = Service<DQMStore>().operator->();
00044 
00045   prefixME_ = ps.getUntrackedParameter<string>("prefixME", "");
00046 
00047   enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00048 
00049   mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns", false);
00050 
00051   // parameters...
00052   EEDigiCollection_ = ps.getParameter<edm::InputTag>("EEDigiCollection");
00053   EEUnsuppressedDigiCollection_ = ps.getParameter<edm::InputTag>("EEUsuppressedDigiCollection");
00054   EESRFlagCollection_ = ps.getParameter<edm::InputTag>("EESRFlagCollection");
00055   EcalTrigPrimDigiCollection_ = ps.getParameter<edm::InputTag>("EcalTrigPrimDigiCollection");
00056   FEDRawDataCollection_ = ps.getParameter<edm::InputTag>("FEDRawDataCollection");
00057 
00058   // histograms...
00059   EEDccEventSize_ = 0;
00060 
00061   EEReadoutUnitForcedBitMap_[0] = 0;
00062   EEFullReadoutSRFlagMap_[0] = 0;
00063   EEHighInterestTriggerTowerFlagMap_[0] = 0;
00064   EELowInterestTriggerTowerFlagMap_[0] = 0;
00065   EEEventSize_[0] = 0;
00066   EEHighInterestPayload_[0] = 0;
00067   EELowInterestPayload_[0] = 0;
00068 
00069   EEReadoutUnitForcedBitMap_[1] = 0;
00070   EEFullReadoutSRFlagMap_[1] = 0;
00071   EEHighInterestTriggerTowerFlagMap_[1] = 0;
00072   EELowInterestTriggerTowerFlagMap_[1] = 0;
00073   EEEventSize_[1] = 0;
00074   EEHighInterestPayload_[1] = 0;
00075   EELowInterestPayload_[1] = 0;
00076 
00077 }
00078 
00079 EESelectiveReadoutTask::~EESelectiveReadoutTask() {
00080 
00081 }
00082 
00083 void EESelectiveReadoutTask::beginJob(const EventSetup& c) {
00084 
00085   ievt_ = 0;
00086 
00087   if ( dqmStore_ ) {
00088     dqmStore_->setCurrentFolder(prefixME_ + "/EESelectiveReadoutTask");
00089     dqmStore_->rmdir(prefixME_ + "/EESelectiveReadoutTask");
00090   }
00091 
00092   Numbers::initGeometry(c, false);
00093 
00094 }
00095 
00096 void EESelectiveReadoutTask::setup(void) {
00097 
00098   init_ = true;
00099 
00100   char histo[200];
00101 
00102   if ( dqmStore_ ) {
00103     dqmStore_->setCurrentFolder(prefixME_ + "/EESelectiveReadoutTask");
00104 
00105     sprintf(histo, "EESRT DCC event size");
00106     EEDccEventSize_ = dqmStore_->bookProfile(histo, histo, 18, 1, 19, 100, 0., 200., "s");
00107     for (int i = 0; i < 18; i++) {
00108       EEDccEventSize_->setBinLabel(i+1, Numbers::sEE(i+1).c_str(), 1);
00109     }
00110 
00111     sprintf(histo, "EESRT readout unit with SR forced EE -");
00112     EEReadoutUnitForcedBitMap_[0] = dqmStore_->book2D(histo, histo, 100, 0., 100., 100, 0., 100.);
00113     EEReadoutUnitForcedBitMap_[0]->setAxisTitle("jx", 1);
00114     EEReadoutUnitForcedBitMap_[0]->setAxisTitle("jy", 2);
00115 
00116     sprintf(histo, "EESRT readout unit with SR forced EE +");
00117     EEReadoutUnitForcedBitMap_[1] = dqmStore_->book2D(histo, histo, 100, 0., 100., 100, 0., 100.);
00118     EEReadoutUnitForcedBitMap_[1]->setAxisTitle("jx", 1);
00119     EEReadoutUnitForcedBitMap_[1]->setAxisTitle("jy", 2);
00120 
00121     sprintf(histo, "EESRT full readout SR flags EE -");
00122     EEFullReadoutSRFlagMap_[0] = dqmStore_->book2D(histo, histo, 100, 0., 100., 100, 0., 100.);
00123     EEFullReadoutSRFlagMap_[0]->setAxisTitle("jx", 1);
00124     EEFullReadoutSRFlagMap_[0]->setAxisTitle("jy", 2);
00125 
00126     sprintf(histo, "EESRT full readout SR flags EE +");
00127     EEFullReadoutSRFlagMap_[1] = dqmStore_->book2D(histo, histo, 100, 0., 100., 100, 0., 100.);
00128     EEFullReadoutSRFlagMap_[1]->setAxisTitle("jx", 1);
00129     EEFullReadoutSRFlagMap_[1]->setAxisTitle("jy", 2);
00130 
00131     sprintf(histo, "EESRT high interest TT Flags EE -");
00132     EEHighInterestTriggerTowerFlagMap_[0] = dqmStore_->book2D(histo, histo, 100, 0., 100., 100, 0., 100.);
00133     EEHighInterestTriggerTowerFlagMap_[0]->setAxisTitle("jx", 1);
00134     EEHighInterestTriggerTowerFlagMap_[0]->setAxisTitle("jy", 2);
00135 
00136     sprintf(histo, "EESRT high interest TT Flags EE +");
00137     EEHighInterestTriggerTowerFlagMap_[1] = dqmStore_->book2D(histo, histo, 100, 0., 100., 100, 0., 100.);
00138     EEHighInterestTriggerTowerFlagMap_[1]->setAxisTitle("jx", 1);
00139     EEHighInterestTriggerTowerFlagMap_[1]->setAxisTitle("jy", 2);
00140 
00141     sprintf(histo, "EESRT low interest TT Flags EE -");
00142     EELowInterestTriggerTowerFlagMap_[0] = dqmStore_->book2D(histo, histo, 100, 0., 100., 100, 0., 100.);
00143     EELowInterestTriggerTowerFlagMap_[0]->setAxisTitle("jx", 1);
00144     EELowInterestTriggerTowerFlagMap_[0]->setAxisTitle("jy", 2);
00145 
00146     sprintf(histo, "EESRT low interest TT Flags EE +");
00147     EELowInterestTriggerTowerFlagMap_[1] = dqmStore_->book2D(histo, histo, 100, 0., 100., 100, 0., 100.);
00148     EELowInterestTriggerTowerFlagMap_[1]->setAxisTitle("jx", 1);
00149     EELowInterestTriggerTowerFlagMap_[1]->setAxisTitle("jy", 2);
00150 
00151     sprintf(histo, "EESRT event size EE -");
00152     EEEventSize_[0] = dqmStore_->book1D(histo, histo, 100, 0, 200);
00153     EEEventSize_[0]->setAxisTitle("event size (kB)",1);
00154 
00155     sprintf(histo, "EESRT event size EE +");
00156     EEEventSize_[1] = dqmStore_->book1D(histo, histo, 100, 0, 200);
00157     EEEventSize_[1]->setAxisTitle("event size (kB)",1);
00158 
00159     sprintf(histo, "EESRT high interest payload EE -");
00160     EEHighInterestPayload_[0] =  dqmStore_->book1D(histo, histo, 100, 0, 200);
00161     EEHighInterestPayload_[0]->setAxisTitle("event size (kB)",1);
00162 
00163     sprintf(histo, "EESRT high interest payload EE +");
00164     EEHighInterestPayload_[1] =  dqmStore_->book1D(histo, histo, 100, 0, 200);
00165     EEHighInterestPayload_[1]->setAxisTitle("event size (kB)",1);
00166 
00167     sprintf(histo, "EESRT low interest payload EE -");
00168     EELowInterestPayload_[0] =  dqmStore_->book1D(histo, histo, 100, 0, 200);
00169     EELowInterestPayload_[0]->setAxisTitle("event size (kB)",1);
00170 
00171     sprintf(histo, "EESRT low interest payload EE +");
00172     EELowInterestPayload_[1] =  dqmStore_->book1D(histo, histo, 100, 0, 200);
00173     EELowInterestPayload_[1]->setAxisTitle("event size (kB)",1);
00174 
00175   }
00176 
00177 }
00178 
00179 void EESelectiveReadoutTask::cleanup(void){
00180 
00181   if ( ! init_ ) return;
00182 
00183   if ( dqmStore_ ) {
00184     dqmStore_->setCurrentFolder(prefixME_ + "/EESelectiveReadoutTask");
00185 
00186     if ( EEDccEventSize_ ) dqmStore_->removeElement( EEDccEventSize_->getName() );
00187     EEDccEventSize_ = 0;
00188 
00189     if ( EEReadoutUnitForcedBitMap_[0] ) dqmStore_->removeElement( EEReadoutUnitForcedBitMap_[0]->getName() );
00190     EEReadoutUnitForcedBitMap_[0] = 0;
00191 
00192     if ( EEReadoutUnitForcedBitMap_[1] ) dqmStore_->removeElement( EEReadoutUnitForcedBitMap_[1]->getName() );
00193     EEReadoutUnitForcedBitMap_[1] = 0;
00194 
00195     if ( EEFullReadoutSRFlagMap_[0] ) dqmStore_->removeElement( EEFullReadoutSRFlagMap_[0]->getName() );
00196     EEFullReadoutSRFlagMap_[0] = 0;
00197 
00198     if ( EEFullReadoutSRFlagMap_[1] ) dqmStore_->removeElement( EEFullReadoutSRFlagMap_[1]->getName() );
00199     EEFullReadoutSRFlagMap_[1] = 0;
00200 
00201     if ( EEHighInterestTriggerTowerFlagMap_[0] ) dqmStore_->removeElement( EEHighInterestTriggerTowerFlagMap_[0]->getName() );
00202     EEHighInterestTriggerTowerFlagMap_[0] = 0;
00203 
00204     if ( EEHighInterestTriggerTowerFlagMap_[1] ) dqmStore_->removeElement( EEHighInterestTriggerTowerFlagMap_[1]->getName() );
00205     EEHighInterestTriggerTowerFlagMap_[1] = 0;
00206 
00207     if ( EELowInterestTriggerTowerFlagMap_[0] ) dqmStore_->removeElement( EELowInterestTriggerTowerFlagMap_[0]->getName() );
00208     EELowInterestTriggerTowerFlagMap_[0] = 0;
00209 
00210     if ( EELowInterestTriggerTowerFlagMap_[1] ) dqmStore_->removeElement( EELowInterestTriggerTowerFlagMap_[1]->getName() );
00211     EELowInterestTriggerTowerFlagMap_[1] = 0;
00212 
00213     if ( EEEventSize_[0] ) dqmStore_->removeElement( EEEventSize_[0]->getName() );
00214     EEEventSize_[0] = 0;
00215 
00216     if ( EEEventSize_[1] ) dqmStore_->removeElement( EEEventSize_[1]->getName() );
00217     EEEventSize_[1] = 0;
00218 
00219     if ( EEHighInterestPayload_[0] ) dqmStore_->removeElement( EEHighInterestPayload_[0]->getName() );
00220     EEHighInterestPayload_[0] = 0;
00221 
00222     if ( EEHighInterestPayload_[1] ) dqmStore_->removeElement( EEHighInterestPayload_[1]->getName() );
00223     EEHighInterestPayload_[1] = 0;
00224 
00225     if ( EELowInterestPayload_[0] ) dqmStore_->removeElement( EELowInterestPayload_[0]->getName() );
00226     EELowInterestPayload_[0] = 0;
00227 
00228     if ( EELowInterestPayload_[1] ) dqmStore_->removeElement( EELowInterestPayload_[1]->getName() );
00229     EELowInterestPayload_[1] = 0;
00230 
00231   }
00232 
00233   init_ = false;
00234 
00235 }
00236 
00237 void EESelectiveReadoutTask::endJob(void){
00238 
00239   LogInfo("EESelectiveReadoutTask") << "analyzed " << ievt_ << " events";
00240 
00241   if ( enableCleanup_ ) this->cleanup();
00242 
00243 }
00244 
00245 void EESelectiveReadoutTask::beginRun(const Run& r, const EventSetup& c) {
00246 
00247   if ( ! mergeRuns_ ) this->reset();
00248 
00249 }
00250 
00251 void EESelectiveReadoutTask::endRun(const Run& r, const EventSetup& c) {
00252 
00253 }
00254 
00255 void EESelectiveReadoutTask::reset(void) {
00256 
00257   if ( EEDccEventSize_ ) EEDccEventSize_->Reset();
00258 
00259   if ( EEReadoutUnitForcedBitMap_[0] ) EEReadoutUnitForcedBitMap_[0]->Reset();
00260   if ( EEReadoutUnitForcedBitMap_[1] ) EEReadoutUnitForcedBitMap_[1]->Reset();
00261 
00262   if ( EEFullReadoutSRFlagMap_[0] ) EEFullReadoutSRFlagMap_[0]->Reset();
00263   if ( EEFullReadoutSRFlagMap_[1] ) EEFullReadoutSRFlagMap_[1]->Reset();
00264 
00265   if ( EEHighInterestTriggerTowerFlagMap_[0] ) EEHighInterestTriggerTowerFlagMap_[0]->Reset();
00266   if ( EEHighInterestTriggerTowerFlagMap_[1] ) EEHighInterestTriggerTowerFlagMap_[1]->Reset();
00267 
00268   if ( EELowInterestTriggerTowerFlagMap_[0] ) EELowInterestTriggerTowerFlagMap_[0]->Reset();
00269   if ( EELowInterestTriggerTowerFlagMap_[1] ) EELowInterestTriggerTowerFlagMap_[1]->Reset();
00270 
00271   if ( EEEventSize_[0] ) EEEventSize_[0]->Reset();
00272   if ( EEEventSize_[1] ) EEEventSize_[1]->Reset();
00273 
00274   if ( EEHighInterestPayload_[0] ) EEHighInterestPayload_[0]->Reset();
00275   if ( EEHighInterestPayload_[1] ) EEHighInterestPayload_[1]->Reset();
00276 
00277   if ( EELowInterestPayload_[0] ) EELowInterestPayload_[0]->Reset();
00278   if ( EELowInterestPayload_[1] ) EELowInterestPayload_[1]->Reset();
00279 
00280 }
00281 
00282 void EESelectiveReadoutTask::analyze(const Event& e, const EventSetup& c){
00283 
00284   if ( ! init_ ) this->setup();
00285 
00286   ievt_++;
00287 
00288   Handle<FEDRawDataCollection> raw;
00289   if ( e.getByLabel(FEDRawDataCollection_, raw) ) {
00290 
00291     int EEFirstFED[2];
00292     EEFirstFED[0] = 601; // EE-
00293     EEFirstFED[1] = 646; // EE+
00294     for(int zside=0; zside<2; zside++) {
00295 
00296       int firstFedOnSide=EEFirstFED[zside];
00297 
00298       for ( int iDcc = 0; iDcc < 9; ++iDcc ) {
00299 
00300         int ism = 0;
00301         if ( zside == 0 ) ism = iDcc+1;
00302         else ism = 10+iDcc;
00303 
00304         EEDccEventSize_->Fill(ism, ((double)raw->FEDData(firstFedOnSide+iDcc).size())/kByte );
00305 
00306       }
00307     }
00308 
00309   } else {
00310     LogWarning("EESelectiveReadoutTask") << FEDRawDataCollection_ << " not available";
00311   }
00312 
00313   TH2F *h01[2];
00314   float integral01[2];
00315   for(int iside=0;iside<2;iside++) {
00316     h01[iside] = UtilsClient::getHisto<TH2F*>( EEFullReadoutSRFlagMap_[iside] );
00317     integral01[iside] = h01[iside]->GetEntries();
00318     if( integral01[iside] != 0 ) h01[iside]->Scale( integral01[iside] );
00319   }
00320   
00321   TH2F *h02[2];
00322   float integral02[2];
00323   for(int iside=0;iside<2;iside++) {
00324     h02[iside] = UtilsClient::getHisto<TH2F*>( EEReadoutUnitForcedBitMap_[iside] );
00325     integral02[iside] = h02[iside]->GetEntries();
00326     if( integral02[iside] != 0 ) h02[iside]->Scale( integral02[iside] );
00327   }
00328 
00329   // Selective Readout Flags
00330   Handle<EESrFlagCollection> eeSrFlags;
00331   if ( e.getByLabel(EESRFlagCollection_,eeSrFlags) ) {
00332 
00333     for ( EESrFlagCollection::const_iterator it = eeSrFlags->begin(); it != eeSrFlags->end(); ++it ) {
00334 
00335       int ix = it->id().ix();
00336       int iy = it->id().iy();
00337 
00338       int zside = it->id().zside();
00339 
00340       if ( zside < 0 ) ix = 101 - ix;
00341 
00342       float xix = ix-0.5;
00343       float xiy = iy-0.5;
00344 
00345       int flag = it->value() & ~EcalSrFlag::SRF_FORCED_MASK;
00346 
00347       if(flag == EcalSrFlag::SRF_FULL){
00348         if( zside < 0 ) {
00349           EEFullReadoutSRFlagMap_[0]->Fill(xix,xiy);
00350         }
00351         else {
00352           EEFullReadoutSRFlagMap_[1]->Fill(xix,xiy);
00353         }
00354       } else {
00355         if( zside < 0 ) {
00356           EEFullReadoutSRFlagMap_[0]->Fill(-1,-1);
00357         }
00358         else {
00359           EEFullReadoutSRFlagMap_[1]->Fill(-1,-1);
00360         }
00361       }
00362 
00363       if(it->value() & EcalSrFlag::SRF_FORCED_MASK){
00364         if( zside < 0 ) {
00365           EEReadoutUnitForcedBitMap_[0]->Fill(xix,xiy);
00366         }
00367         else {
00368           EEReadoutUnitForcedBitMap_[1]->Fill(xix,xiy);
00369         }
00370       } else {
00371         if( zside < 0 ) {
00372           EEReadoutUnitForcedBitMap_[0]->Fill(-1,1);
00373         }
00374         else {
00375           EEReadoutUnitForcedBitMap_[1]->Fill(-1,1);
00376         }
00377       }
00378 
00379     }
00380   } else {
00381     LogWarning("EESelectiveReadoutTask") << EESRFlagCollection_ << " not available";
00382   }
00383 
00384   for(int iside=0;iside<2;iside++) {
00385     if( integral01[iside] != 0 ) h01[iside]->Scale( 1.0/integral01[iside] );
00386     if( integral02[iside] != 0 ) h02[iside]->Scale( 1.0/integral02[iside] );  
00387   }
00388 
00389   TH2F *h03[2];
00390   float integral03[2];
00391   for(int iside=0;iside<2;iside++) {
00392     h03[iside] = UtilsClient::getHisto<TH2F*>( EELowInterestTriggerTowerFlagMap_[iside] );
00393     integral03[iside] = h03[iside]->GetEntries();
00394     if( integral03[iside] != 0 ) h03[iside]->Scale( integral03[iside] );
00395   }
00396 
00397   TH2F *h04[2];
00398   float integral04[2];
00399   for(int iside=0;iside<2;iside++) {
00400     h04[iside] = UtilsClient::getHisto<TH2F*>( EEHighInterestTriggerTowerFlagMap_[iside] );
00401     integral04[iside] = h04[iside]->GetEntries();
00402     if( integral04[iside] != 0 ) h04[iside]->Scale( integral04[iside] );
00403   }
00404 
00405   Handle<EcalTrigPrimDigiCollection> TPCollection;
00406   if ( e.getByLabel(EcalTrigPrimDigiCollection_, TPCollection) ) {
00407 
00408     // Trigger Primitives
00409     EcalTrigPrimDigiCollection::const_iterator TPdigi;
00410     for ( TPdigi = TPCollection->begin(); TPdigi != TPCollection->end(); ++TPdigi ) {
00411 
00412       if ( Numbers::subDet( TPdigi->id() ) != EcalEndcap ) continue;
00413 
00414       int ismt = Numbers::iSM( TPdigi->id() );
00415 
00416       vector<DetId> crystals = Numbers::crystals( TPdigi->id() );
00417 
00418       for ( unsigned int i=0; i<crystals.size(); i++ ) {
00419 
00420         EEDetId id = crystals[i];
00421 
00422         int ix = id.ix();
00423         int iy = id.iy();
00424 
00425         if ( ismt >= 1 && ismt <= 9 ) ix = 101 - ix;
00426 
00427         float xix = ix-0.5;
00428         float xiy = iy-0.5;
00429 
00430         if ( (TPdigi->ttFlag() & 0x3) == 0 ) {
00431           if ( ismt >= 1 && ismt <= 9 ) {
00432             EELowInterestTriggerTowerFlagMap_[0]->Fill(xix,xiy);
00433           }
00434           else {
00435             EELowInterestTriggerTowerFlagMap_[1]->Fill(xix,xiy);
00436           }
00437         } else {
00438           if ( ismt >= 1 && ismt <= 9 ) {
00439             EELowInterestTriggerTowerFlagMap_[0]->Fill(-1,-1);
00440           }
00441           else {
00442             EELowInterestTriggerTowerFlagMap_[1]->Fill(-1,-1);
00443           }
00444         }
00445 
00446         if ( (TPdigi->ttFlag() & 0x3) == 3 ) {
00447           if ( ismt >= 1 && ismt <= 9 ) {
00448             EEHighInterestTriggerTowerFlagMap_[0]->Fill(xix,xiy);
00449           }
00450           else {
00451             EEHighInterestTriggerTowerFlagMap_[1]->Fill(xix,xiy);
00452           }
00453         } else {
00454           if ( ismt >= 1 && ismt <= 9 ) {
00455             EEHighInterestTriggerTowerFlagMap_[0]->Fill(-1,-1);
00456           }
00457           else {
00458             EEHighInterestTriggerTowerFlagMap_[1]->Fill(-1,-1);
00459           }
00460         }
00461 
00462       }
00463 
00464     }
00465   } else {
00466     LogWarning("EESelectiveReadoutTask") << EcalTrigPrimDigiCollection_ << " not available";
00467   }
00468 
00469   for(int iside=0;iside<2;iside++) {
00470     if( integral03[iside] != 0 ) h03[iside]->Scale( 1.0/integral03[iside] );
00471     if( integral04[iside] != 0 ) h04[iside]->Scale( 1.0/integral04[iside] );
00472   }
00473 
00474   if (!eeSrFlags.isValid()) return;
00475 
00476   // Data Volume
00477   double aLowInterest[2];
00478   double aHighInterest[2];
00479   double aAnyInterest[2];
00480 
00481   aLowInterest[0]=0;
00482   aHighInterest[0]=0;
00483   aAnyInterest[0]=0;
00484   aLowInterest[1]=0;
00485   aHighInterest[1]=0;
00486   aAnyInterest[1]=0;
00487 
00488   Handle<EEDigiCollection> eeDigis;
00489   if ( e.getByLabel(EEDigiCollection_ , eeDigis) ) {
00490 
00491     anaDigiInit();
00492 
00493     for (unsigned int digis=0; digis<eeDigis->size(); ++digis) {
00494       EEDataFrame eedf = (*eeDigis)[digis];
00495       anaDigi(eedf, *eeSrFlags);
00496     }
00497 
00498     //low interest channels:
00499     aLowInterest[0] = nEeLI_[0]*bytesPerCrystal/kByte;
00500     EELowInterestPayload_[0]->Fill(aLowInterest[0]);
00501     aLowInterest[1] = nEeLI_[1]*bytesPerCrystal/kByte;
00502     EELowInterestPayload_[1]->Fill(aLowInterest[1]);
00503 
00504     //low interest channels:
00505     aHighInterest[0] = nEeHI_[0]*bytesPerCrystal/kByte;
00506     EEHighInterestPayload_[0]->Fill(aHighInterest[0]);
00507     aHighInterest[1] = nEeHI_[1]*bytesPerCrystal/kByte;
00508     EEHighInterestPayload_[1]->Fill(aHighInterest[1]);
00509 
00510     //any-interest channels:
00511     aAnyInterest[0] = getEeEventSize(nEe_[0])/kByte;
00512     EEEventSize_[0]->Fill(aAnyInterest[0]);
00513     aAnyInterest[1] = getEeEventSize(nEe_[1])/kByte;
00514     EEEventSize_[1]->Fill(aAnyInterest[1]);
00515 
00516   } else {
00517     LogWarning("EESelectiveReadoutTask") << EEDigiCollection_ << " not available";
00518   }
00519 
00520 }
00521 
00522 void EESelectiveReadoutTask::anaDigi(const EEDataFrame& frame, const EESrFlagCollection& srFlagColl){
00523 
00524   EEDetId id = frame.id();
00525   EESrFlagCollection::const_iterator srf = srFlagColl.find(readOutUnitOf(id));
00526 
00527   if(srf == srFlagColl.end()){
00528     // LogWarning("EESelectiveReadoutTask") << "SR flag not found";
00529     return;
00530   }
00531 
00532   bool highInterest = ((srf->value() & ~EcalSrFlag::SRF_FORCED_MASK)
00533                        == EcalSrFlag::SRF_FULL);
00534 
00535   bool endcap = (id.subdetId()==EcalEndcap);
00536 
00537   if(endcap){
00538     int ism = Numbers::iSM( id );
00539     if ( ism >= 1 && ism <= 9 ) {
00540       ++nEe_[0];
00541       if(highInterest){
00542         ++nEeHI_[0];
00543       } else{//low interest
00544         ++nEeLI_[0];
00545       }
00546     } else {
00547       ++nEe_[1];
00548       if(highInterest){
00549         ++nEeHI_[1];
00550       } else{//low interest
00551         ++nEeLI_[1];
00552       }
00553     }
00554 
00555     int iX0 = iXY2cIndex(id.ix());
00556     int iY0 = iXY2cIndex(id.iy());
00557     int iZ0 = id.zside()>0?1:0;
00558 
00559     if(!eeRuActive_[iZ0][iX0/scEdge][iY0/scEdge]){
00560       ++nRuPerDcc_[dccNum(id)];
00561       eeRuActive_[iZ0][iX0/scEdge][iY0/scEdge] = true;
00562     }
00563   }
00564 
00565   ++nPerDcc_[dccNum(id)-1];
00566 }
00567 
00568 void EESelectiveReadoutTask::anaDigiInit(){
00569   nEe_[0] = 0;
00570   nEeLI_[0] = 0;
00571   nEeHI_[0] = 0;
00572   nEe_[1] = 0;
00573   nEeLI_[1] = 0;
00574   nEeHI_[1] = 0;
00575   bzero(nPerDcc_, sizeof(nPerDcc_));
00576   bzero(nRuPerDcc_, sizeof(nRuPerDcc_));
00577   bzero(eeRuActive_, sizeof(eeRuActive_));
00578 }
00579 
00580 EcalScDetId
00581 EESelectiveReadoutTask::readOutUnitOf(const EEDetId& xtalId) const{
00582   const int scEdge = 5;
00583   return EcalScDetId((xtalId.ix()-1)/scEdge+1,
00584                      (xtalId.iy()-1)/scEdge+1,
00585                      xtalId.zside());
00586 }
00587 
00588 unsigned EESelectiveReadoutTask::dccNum(const DetId& xtalId) const{
00589   int j;
00590   int k;
00591 
00592   if ( xtalId.det()!=DetId::Ecal ) {
00593     throw cms::Exception("EESelectiveReadoutTask") << "Crystal does not belong to ECAL";
00594   }
00595 
00596   int iDet = 0;
00597 
00598   if(xtalId.subdetId()==EcalEndcap){
00599     EEDetId eeDetId(xtalId);
00600     j = iXY2cIndex(eeDetId.ix());
00601     k = iXY2cIndex(eeDetId.iy());
00602     int zside = eeDetId.zside();
00603     if ( zside < 0 ) iDet = 0;
00604     else iDet = 2;
00605   } else {
00606     throw cms::Exception("EESelectiveReadoutTask")
00607       <<"Not ECAL endcap.";
00608   }
00609   int iDcc0 = dccIndex(iDet,j,k);
00610   assert(iDcc0>=0 && iDcc0<nECALDcc);
00611   return iDcc0+1;
00612 }
00613 
00614 double EESelectiveReadoutTask::getEeEventSize(double nReadXtals) const {
00615   double ruHeaderPayload = 0.;
00616   const int firstEbDcc0 = nEEDcc/2;
00617   for ( int iDcc0 = 0; iDcc0 < nECALDcc; ++iDcc0 ) {
00618     //skip barrel:
00619     if(iDcc0 == firstEbDcc0) iDcc0 += nEBDcc;
00620       ruHeaderPayload += nRuPerDcc_[iDcc0]*8.;
00621   }
00622   return getDccOverhead(EE)*nEEDcc + nReadXtals*bytesPerCrystal
00623     + ruHeaderPayload;
00624 }
00625 
00626 int EESelectiveReadoutTask::dccPhiIndexOfRU(int i, int j) const {
00627   char flag=endcapDccMap[i+j*20];
00628   return (flag==' ')?-1:(flag-'0');
00629 }
00630 
00631 int EESelectiveReadoutTask::dccIndex(int iDet, int i, int j) const {
00632   int iPhi = dccPhiIndex(i, j);
00633   if(iPhi<0) return -1;
00634   //34 DCCs in barrel and 8 in EE-=>in EE+ DCC numbering starts at 45,
00635   //iDet/2 is 0 for EE- and 1 for EE+:
00636   return iPhi+iDet/2*45;
00637 }
00638 

Generated on Tue Jun 9 17:32:53 2009 for CMSSW by  doxygen 1.5.4