CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DQM/CSCMonitorModule/src/CSCDQM_EventProcessor_processCSC.cc

Go to the documentation of this file.
00001 /*
00002  * =====================================================================================
00003  *
00004  *       Filename:  EventProcessor_processCSC.cc
00005  *
00006  *    Description:  Process Chamber
00007  *
00008  *        Version:  1.0
00009  *        Created:  10/03/2008 11:58:11 PM
00010  *       Revision:  none
00011  *       Compiler:  gcc
00012  *
00013  *         Author:  Valdas Rapsevicius, valdas.rapsevicius@cern.ch
00014  *        Company:  CERN, CH
00015  *
00016  * =====================================================================================
00017  */
00018 
00019 #include "DQM/CSCMonitorModule/interface/CSCDQM_EventProcessor.h"
00020 
00021 
00022 
00023 namespace cscdqm {
00024 
00025     template<typename T> inline CSCCFEBDataWord const * const
00026     timeSample( T const & data, int nCFEB,int nSample,int nLayer, int nStrip) { 
00027          return data.cfebData(nCFEB)->timeSlice(nSample)->timeSample(nLayer,nStrip);
00028     }
00029 
00030     template<typename T> inline CSCCFEBTimeSlice const * const
00031     timeSlice( T const & data, int nCFEB, int nSample) { return (CSCCFEBTimeSlice *)(data.cfebData(nCFEB)->timeSlice(nSample));}
00032 
00033 
00034 
00043   void EventProcessor::setEmuEventDisplayBit(MonitorObject*& mo, const unsigned int x, const unsigned int y, const unsigned int bit) {
00044     if (mo && x) {
00045       resetEmuEventDisplays();
00046       int bitset = (int) mo->GetBinContent(x, y);
00047       bitset |= 1 << bit;
00048       mo->SetBinContent(x, y, bitset);
00049     }
00050   }
00051 
00052   
00056   void EventProcessor::resetEmuEventDisplays() {
00057     if (!EmuEventDisplayWasReset) {
00058 
00059       // Reseting EMU level Event displays
00060       MonitorObject* mo = 0;
00061       if (getEMUHisto(h::EMU_EVENT_DISPLAY_ANODE, mo)) {
00062         mo->getTH1Lock()->Reset("");
00063       }
00064 
00065       if (getEMUHisto(h::EMU_EVENT_DISPLAY_CATHODE, mo)) {
00066         mo->getTH1Lock()->Reset("");
00067       }
00068 
00069       if (getEMUHisto(h::EMU_EVENT_DISPLAY_XY, mo)) {
00070         mo->getTH1Lock()->Reset("");
00071       }
00072 
00073       EmuEventDisplayWasReset = true;
00074 
00075     }
00076   }
00077 
00083   void EventProcessor::processCSC(const CSCEventData& data, const int dduID, const CSCDCCExaminer& binChecker) {
00084 
00085     config->incNUnpackedCSC();
00086 
00087     if (&data == 0) {
00088       LOG_ERROR << "Zero pointer. DMB data are not available for unpacking"; //KK is->are
00089       return;
00090     }
00091 
00092     int FEBunpacked   = 0;
00093     int alct_unpacked = 0;
00094     int tmb_unpacked  = 0;
00095     int cfeb_unpacked = 0;
00096 
00097     int alct_keywg = -1;
00098     int clct_kewdistrip = -1;
00099 
00100     bool L1A_out_of_sync = false;
00101 
00102     MonitorObject* mo = NULL;
00103 
00106     const CSCDMBHeader* dmbHeader = data.dmbHeader();
00107     const CSCDMBTrailer* dmbTrailer = data.dmbTrailer();
00108     if (!dmbHeader && !dmbTrailer) {
00109       LOG_ERROR << "Can not unpack DMB Header or/and Trailer";
00110       return;
00111     }
00112 
00114     unsigned int crateID = 0xFF;
00115     unsigned int dmbID = 0xF;
00116     unsigned int chamberID = 0xFFF;
00117 
00118     crateID = dmbHeader->crateID();
00119     dmbID = dmbHeader->dmbID();
00120     chamberID = (((crateID) << 4) + dmbID) & 0xFFF;
00121 
00122     const std::string cscTag = CSCHistoDef::getPath(crateID, dmbID);
00123 
00124     unsigned long errors = binChecker.errorsForChamber(chamberID);
00125     if ((errors & config->getBINCHECK_MASK()) > 0 ) {
00126       LOG_WARN << "Format Errors " << cscTag << ": 0x" << std::hex << errors << " Skipped CSC Unpacking";
00127       return;
00128     }
00129 
00130     unsigned int cscType = 0;
00131     unsigned int cscPosition = 0;
00132     if (!getCSCFromMap(crateID, dmbID, cscType, cscPosition )) return;
00133 
00134     CSCDetId cid;
00135     if (!config->fnGetCSCDetId(crateID, dmbID, cid)) {
00136       return;
00137     }
00138 
00139     // Check if in standby!
00140     if (summary.isChamberStandby(cid)) {
00141       return;
00142     }
00143 
00144     double DMBEvents  = 0.0;
00145     DMBEvents = config->getChamberCounterValue(DMB_EVENTS, crateID, dmbID);
00146 
00147     // Get Event display plot number and next plot object
00148     uint32_t evDisplNo = config->getChamberCounterValue(EVENT_DISPLAY_PLOT, crateID, dmbID);
00149     evDisplNo += 1;
00150     if (evDisplNo >= 5) {
00151       config->setChamberCounterValue(EVENT_DISPLAY_PLOT, crateID, dmbID, 0);
00152     } else {
00153       config->setChamberCounterValue(EVENT_DISPLAY_PLOT, crateID, dmbID, evDisplNo);
00154     }
00155     MonitorObject* mo_EventDisplay = 0;
00156     if (getCSCHisto(h::CSC_EVENT_DISPLAY_NOXX, crateID, dmbID, evDisplNo, mo_EventDisplay)) {
00157       mo_EventDisplay->getTH1Lock()->Reset("");
00158     }
00159 
00160     // Receiving EMU Event displays 
00161     MonitorObject *mo_Emu_EventDisplay_Anode = 0, *mo_Emu_EventDisplay_Cathode = 0, *mo_Emu_EventDisplay_XY = 0;
00162     getEMUHisto(h::EMU_EVENT_DISPLAY_ANODE, mo_Emu_EventDisplay_Anode);
00163     getEMUHisto(h::EMU_EVENT_DISPLAY_CATHODE, mo_Emu_EventDisplay_Cathode);
00164     getEMUHisto(h::EMU_EVENT_DISPLAY_XY, mo_Emu_EventDisplay_XY);
00165 
00166     // Global chamber index
00167     uint32_t glChamberIndex = 0;
00168 
00169     if (mo_EventDisplay) {
00170       mo_EventDisplay->SetBinContent(1, 1, cid.endcap());
00171       mo_EventDisplay->SetBinContent(1, 2, cid.station());
00172       mo_EventDisplay->SetBinContent(1, 3, cid.ring());
00173       mo_EventDisplay->SetBinContent(1, 4, cscPosition);
00174       mo_EventDisplay->SetBinContent(1, 5, crateID);
00175       mo_EventDisplay->SetBinContent(1, 6, dmbID);
00176       mo_EventDisplay->SetBinContent(1, 7, dmbHeader->l1a());
00177       if (mo_Emu_EventDisplay_Anode || mo_Emu_EventDisplay_Cathode || mo_Emu_EventDisplay_XY) {
00178         glChamberIndex = summary.getDetector().GlobalChamberIndex(cid.endcap(), cid.station(), cid.ring(), cscPosition);
00179       }
00180     }
00181 
00182     config->copyChamberCounterValue(DMB_EVENTS, DMB_TRIGGERS, crateID, dmbID);
00183 
00184     if (cscType && cscPosition && getEMUHisto(h::EMU_CSC_UNPACKED, mo)){
00185       mo->Fill(cscPosition, cscType);
00186     }
00187 
00189     float DMBEff = float(DMBEvents) / float(config->getNEvents());
00190     if(DMBEff > 1.0) {
00191       LOG_ERROR <<   cscTag  << " has efficiency " << DMBEff << " which is greater than 1";
00192     }
00193 
00197     int dmbHeaderL1A      = dmbHeader->l1a()%64;
00199     int dmb_ddu_l1a_diff  = (int)(dmbHeaderL1A-(int)(L1ANumber%64));
00200     if (dmb_ddu_l1a_diff != 0) L1A_out_of_sync = true;
00201 
00204     if (getCSCHisto(h::CSC_DMB_L1A_DISTRIB, crateID, dmbID, mo)) mo->Fill(dmbHeaderL1A);
00205 
00206     if (getCSCHisto(h::CSC_DMB_DDU_L1A_DIFF, crateID, dmbID, mo)) {
00207       if(dmb_ddu_l1a_diff < -32) {
00208         mo->Fill(dmb_ddu_l1a_diff + 64);
00209       } else {
00210         if(dmb_ddu_l1a_diff >= 32) mo->Fill(dmb_ddu_l1a_diff - 64);
00211         else mo->Fill(dmb_ddu_l1a_diff);
00212       }
00213       mo->SetAxisRange(0.1, 1.1 * (1.0 + mo->GetBinContent(mo->GetMaximumBin())), "Y");
00214     }
00215 
00216     if (getCSCHisto(h::CSC_DMB_L1A_VS_DDU_L1A, crateID, dmbID, mo)) mo->Fill((int)(L1ANumber & 0xFF), (int)dmbHeaderL1A);
00217 
00219     int dmbHeaderBXN      = 0;
00220     int dmb_ddu_bxn_diff  = 0;
00221 
00226     dmbHeaderBXN = dmbHeader->bxn12();
00230     dmb_ddu_bxn_diff = dmbHeaderBXN%64-BXN%64;
00232     if (getCSCHisto(h::CSC_DMB_BXN_DISTRIB, crateID, dmbID, mo)) mo->Fill((int)(dmbHeader->bxn12()));
00233 
00234     if (getCSCHisto(h::CSC_DMB_DDU_BXN_DIFF, crateID, dmbID, mo)) {
00235       if(dmb_ddu_bxn_diff < -32) mo->Fill(dmb_ddu_bxn_diff + 64);
00236       else {
00237         if(dmb_ddu_bxn_diff >= 32)  mo->Fill(dmb_ddu_bxn_diff - 64);
00238         else mo->Fill(dmb_ddu_bxn_diff);
00239       }
00240       mo->SetAxisRange(0.1, 1.1 * (1.0 + mo->GetBinContent(mo->GetMaximumBin())), "Y");
00241     }
00242 
00244     if (getCSCHisto(h::CSC_DMB_BXN_VS_DDU_BXN, crateID, dmbID, mo)) mo->Fill(((int)(BXN)) % 256, ((int)dmbHeaderBXN) % 256);
00245 
00247     int cfeb_dav = 0;
00248     int cfeb_dav_num = 0;
00249     int cfeb_movlp = 0;
00250     int dmb_cfeb_sync = 0;
00251 
00252     cfeb_dav = (int)dmbHeader->cfebAvailable();
00253     for (int i = 0; i < 5; i++) cfeb_dav_num += (cfeb_dav >> i) & 0x1;
00254     cfeb_movlp    = (int)dmbHeader->cfebMovlp();
00255     dmb_cfeb_sync = (int)dmbHeader->dmbCfebSync();
00256 
00257     if (getCSCHisto(h::CSC_DMB_CFEB_DAV, crateID, dmbID, mo)) {
00258       for (int i = 0; i < 5; i++) {
00259         int cfeb_present = (cfeb_dav >> i) & 0x1;
00260         if (cfeb_present) {
00261           mo->Fill(i);
00262         }
00263       }
00264     }
00265 
00266     if (getCSCHisto(h::CSC_DMB_CFEB_DAV_MULTIPLICITY, crateID, dmbID, mo)) mo->Fill(cfeb_dav_num);
00267     if (getCSCHisto(h::CSC_DMB_CFEB_MOVLP, crateID, dmbID, mo)) mo->Fill(cfeb_movlp);
00268     if (getCSCHisto(h::CSC_DMB_CFEB_SYNC, crateID, dmbID, mo)) mo->Fill(dmb_cfeb_sync);
00269 
00270     if (getEMUHisto(h::EMU_DMB_UNPACKED, mo)) {
00271       mo->Fill(crateID, dmbID);
00273     }
00274 
00276     if (getCSCHisto(h::CSC_DMB_CFEB_ACTIVE, crateID, dmbID, mo)) mo->Fill(dmbHeader->cfebActive()); //KK
00277 
00281     if (getCSCHisto(h::CSC_DMB_L1_PIPE, crateID, dmbID, mo)) mo->Fill(dmbTrailer->dmb_l1pipe);
00282 
00284     if (getCSCHisto(h::CSC_DMB_FIFO_STATS, crateID, dmbID, mo)) {
00285       if (dmbTrailer->tmb_empty == 1) mo->Fill(1.0, 0.0); //KK
00286       if (dmbTrailer->tmb_half == 0) mo->Fill(1.0, 1.0);
00287       if (dmbTrailer->tmb_full == 1) mo->Fill(1.0, 2.0); //KK
00288       if (dmbTrailer->alct_empty == 1) mo->Fill(0.0, 0.0);
00289       if (dmbTrailer->alct_half == 0) mo->Fill(0.0, 1.0);
00290       if (dmbTrailer->alct_full == 1) mo->Fill(0.0, 2.0); //KK 0->1
00291       for (int i = 0; i < 5; i++) {
00292         if ((int)((dmbTrailer->cfeb_empty>>i)&0x1) == 1) mo->Fill(i + 2, 0.0);
00293         if ((int)((dmbTrailer->cfeb_half>>i)&0x1) == 0) mo->Fill(i + 2, 1);
00294         if ((int)((dmbTrailer->cfeb_full>>i)&0x1) == 1) {
00295           mo->Fill(i + 2, 2);
00296         }
00297       }
00298       mo->SetEntries((int)DMBEvents);
00299     }
00300 
00302     if (getCSCHisto(h::CSC_DMB_FEB_TIMEOUTS, crateID, dmbID, mo)) {
00303       if ((dmbTrailer->tmb_timeout == 0) && (dmbTrailer->alct_timeout == 0) && (dmbTrailer->cfeb_starttimeout == 0) && (dmbTrailer->cfeb_endtimeout == 0)) {
00304         mo->Fill(0.0);
00305       }else{
00306         if (dmbTrailer->alct_timeout) mo->Fill(1);
00307         if (dmbTrailer->tmb_timeout) mo->Fill(2);
00308         if (dmbTrailer->alct_endtimeout) mo->Fill(8); // KK
00309         if (dmbTrailer->tmb_endtimeout) mo->Fill(9);  // KK
00310       }
00311       for (int i = 0; i < 5; i++) {
00312         if ((dmbTrailer->cfeb_starttimeout >> i) & 0x1) {
00313           mo->Fill(i + 3);
00314         }
00315         if ((dmbTrailer->cfeb_endtimeout >> i) & 0x1) {
00316           mo->Fill(i + 10); // KK 8->10
00317         }
00318       }
00319       mo->SetEntries((int)DMBEvents);
00320     }
00321 
00323     int alct_dav  = dmbHeader->nalct();
00324     int tmb_dav   = dmbHeader->nclct();
00325     int cfeb_dav2 = 0;
00326     for (int i = 0; i < 5; i++) cfeb_dav2 = cfeb_dav2 + (int)((dmbHeader->cfebAvailable() >> i) & 0x1);
00327 
00330     if ((alct_dav  > 0) && (getCSCHisto(h::CSC_DMB_FEB_DAV_RATE, crateID, dmbID, mo))) {
00331       mo->Fill(0.0);
00332       float alct_dav_number   = mo->GetBinContent(1);
00333       if (getCSCHisto(h::CSC_DMB_FEB_DAV_EFFICIENCY, crateID, dmbID, mo)) {
00334         mo->SetBinContent(1, ((float)alct_dav_number / (float)(DMBEvents) * 100.0));
00335         mo->SetEntries((int)DMBEvents);
00336       }
00337     }
00338 
00339     if ((tmb_dav > 0) && (getCSCHisto(h::CSC_DMB_FEB_DAV_RATE, crateID, dmbID, mo))) {
00340       mo->Fill(1.0);
00341       float tmb_dav_number = mo->GetBinContent(2);
00342       if (getCSCHisto(h::CSC_DMB_FEB_DAV_EFFICIENCY, crateID, dmbID, mo)) {
00343         mo->SetBinContent(2, ((float)tmb_dav_number / (float)(DMBEvents) * 100.0));
00344         mo->SetEntries((int)DMBEvents);
00345       }
00346     }
00347 
00348     if ((cfeb_dav2 > 0) && (getCSCHisto(h::CSC_DMB_FEB_DAV_RATE, crateID, dmbID, mo))) {
00349       mo->Fill(2.0);
00350       float cfeb_dav2_number = mo->GetBinContent(3);
00351       if (getCSCHisto(h::CSC_DMB_FEB_DAV_EFFICIENCY, crateID, dmbID, mo)) {
00352         mo->SetBinContent(3, ((float)cfeb_dav2_number / (float)(DMBEvents) * 100.0));
00353         mo->SetEntries((int)DMBEvents);
00354       }
00355     }
00356 
00357     float feb_combination_dav = -1.0;
00359     if (getCSCHisto(h::CSC_DMB_FEB_COMBINATIONS_DAV_RATE, crateID, dmbID, mo)) {
00360        if(alct_dav == 0 && tmb_dav == 0 && cfeb_dav2 == 0) feb_combination_dav = 0.0; // Nothing
00361     if(alct_dav >  0 && tmb_dav == 0 && cfeb_dav2 == 0) feb_combination_dav = 1.0; // ALCT Only
00362     if(alct_dav == 0 && tmb_dav >  0 && cfeb_dav2 == 0) feb_combination_dav = 2.0; // TMB Only
00363     if(alct_dav == 0 && tmb_dav == 0 && cfeb_dav2 >  0) feb_combination_dav = 3.0; // CFEB Only
00364     if(alct_dav == 0 && tmb_dav >  0 && cfeb_dav2 >  0) feb_combination_dav = 4.0; // TMB+CFEB
00365     if(alct_dav >  0 && tmb_dav >  0 && cfeb_dav2 == 0) feb_combination_dav = 5.0; // ALCT+TMB
00366     if(alct_dav >  0 && tmb_dav == 0 && cfeb_dav2 >  0) feb_combination_dav = 6.0; // ALCT+CFEB
00367     if(alct_dav >  0 && tmb_dav >  0 && cfeb_dav2 >  0) feb_combination_dav = 7.0; // ALCT+TMB+CFEB
00368       mo->Fill(feb_combination_dav);
00369       float feb_combination_dav_number = mo->GetBinContent((int)(feb_combination_dav + 1.0));
00370       if (getCSCHisto(h::CSC_DMB_FEB_COMBINATIONS_DAV_EFFICIENCY, crateID, dmbID, mo)) {
00371         mo->SetBinContent((int)(feb_combination_dav + 1.0), ((float)feb_combination_dav_number / (float)(DMBEvents) * 100.0));
00372         mo->SetEntries((int)DMBEvents);
00373       }
00374     }
00375 
00377     if (data.nalct()) {
00378 
00379       const CSCALCTHeader* alctHeader = data.alctHeader();
00380       int fwVersion = alctHeader->alctFirmwareVersion();
00381       const CSCALCTTrailer* alctTrailer = data.alctTrailer();
00382       const CSCAnodeData* alctData = data.alctData();
00383 
00384       if (alctHeader && alctTrailer) {
00385 
00386         std::vector<CSCALCTDigi> alctsDatasTmp = alctHeader->ALCTDigis();
00387         std::vector<CSCALCTDigi> alctsDatas;
00388 
00389         for (uint32_t lct = 0; lct < alctsDatasTmp.size(); lct++) {
00390           if (alctsDatasTmp[lct].isValid()) alctsDatas.push_back(alctsDatasTmp[lct]);
00391         }
00392 
00393         FEBunpacked = FEBunpacked + 1;
00394         alct_unpacked = 1;
00395 
00397         if (getCSCHisto(h::CSC_CSC_RATE, crateID, dmbID, mo)) {
00398           mo->Fill(2);
00399           uint32_t ALCTEvent = (uint32_t)mo->GetBinContent(3);
00400           config->setChamberCounterValue(ALCT_TRIGGERS, crateID, dmbID, ALCTEvent);
00401           if (getCSCHisto(h::CSC_CSC_EFFICIENCY, crateID, dmbID, mo)){
00402             if(config->getNEvents() > 0) {
00405               mo->SetBinContent(1, ((float)ALCTEvent / (float)(DMBEvents) * 100.0));
00407               mo->SetEntries((int)DMBEvents);
00408             }
00409           }
00410         }
00411 
00412         if ((alct_dav >0) && (getCSCHisto(h::CSC_DMB_FEB_UNPACKED_VS_DAV, crateID, dmbID, mo))) {
00413           mo->Fill(0.0, 0.0);
00414         }
00415 
00418         if (getCSCHisto(h::CSC_ALCT_L1A, crateID, dmbID, mo)) mo->Fill((int)(alctHeader->L1Acc()));
00419 
00421         if (getCSCHisto(h::CSC_ALCT_DMB_L1A_DIFF, crateID, dmbID, mo)) {
00423           int alct_dmb_l1a_diff = (int)(alctHeader->L1Acc() % 64 - dmbHeader->l1a() % 64);
00424           if (alct_dmb_l1a_diff != 0) L1A_out_of_sync = true;
00425           if(alct_dmb_l1a_diff < -32) mo->Fill(alct_dmb_l1a_diff + 64);
00426           else {
00427             if(alct_dmb_l1a_diff >= 32) mo->Fill(alct_dmb_l1a_diff - 64);
00428             else mo->Fill(alct_dmb_l1a_diff);
00429           }
00430           mo->SetAxisRange(0.1, 1.1 * (1.0 + mo->GetBinContent(mo->GetMaximumBin())), "Y");
00431         }
00432 
00434         if (getCSCHisto(h::CSC_DMB_L1A_VS_ALCT_L1A, crateID, dmbID, mo)) mo->Fill(alctHeader->L1Acc() % 256, dmbHeader->l1a());
00435 
00438         if (getCSCHisto(h::CSC_ALCT_DMB_BXN_DIFF, crateID, dmbID, mo)) {
00439           int alct_dmb_bxn_diff = (int)(alctHeader->BXNCount()-dmbHeader->bxn12());
00440           if (alct_dmb_bxn_diff > 0) alct_dmb_bxn_diff -= 3564;
00441           alct_dmb_bxn_diff %= 64;
00442           mo->Fill(alct_dmb_bxn_diff);
00443           mo->SetAxisRange(0.1, 1.1 * (1.0 + mo->GetBinContent(mo->GetMaximumBin())), "Y");
00444         }
00445 
00446         if (getCSCHisto(h::CSC_ALCT_BXN, crateID, dmbID, mo)) mo->Fill(alctHeader->BXNCount());
00447 
00449         if (getCSCHisto(h::CSC_ALCT_BXN_VS_DMB_BXN, crateID, dmbID, mo)) mo->Fill((int)((alctHeader->BXNCount()) % 256), (int)(dmbHeader->bxn12()) % 256);
00450 
00451         if (getCSCHisto(h::CSC_ALCT_NUMBER_RATE, crateID, dmbID, mo)) {
00452           mo->Fill(alctsDatas.size());
00453           int nALCT = (int)mo->GetBinContent((int)(alctsDatas.size() + 1));
00454           if (getCSCHisto(h::CSC_ALCT_NUMBER_EFFICIENCY, crateID, dmbID, mo))
00455             mo->SetBinContent((int)(alctsDatas.size() + 1), (float)(nALCT) / (float)(DMBEvents) * 100.0);
00456         }
00457 
00458         if (getCSCHisto(h::CSC_ALCT_WORD_COUNT, crateID, dmbID, mo)) mo->Fill((int)(alctTrailer->wordCount()));
00459 
00462         if (alctsDatas.size() == 2) {
00463           if (getCSCHisto(h::CSC_ALCT1_VS_ALCT0_KEYWG, crateID, dmbID, mo))
00464             mo->Fill(alctsDatas[0].getKeyWG(),alctsDatas[1].getKeyWG());
00465         }
00466 
00467         MonitorObject* mo_CSC_ALCT0_BXN_mean = 0;
00468         getEMUHisto(h::EMU_CSC_ALCT0_BXN_MEAN, mo_CSC_ALCT0_BXN_mean);
00469 
00470         MonitorObject* mo_CSC_ALCT0_BXN_rms = 0;
00471         getEMUHisto(h::EMU_CSC_ALCT0_BXN_RMS, mo_CSC_ALCT0_BXN_rms);
00472 
00473         MonitorObject* mo_CSC_Plus_endcap_ALCT0_dTime = 0;
00474         getEMUHisto(h::EMU_CSC_ALCT0_ENDCAP_PLUS_DTIME, mo_CSC_Plus_endcap_ALCT0_dTime);
00475 
00476         MonitorObject* mo_CSC_Minus_endcap_ALCT0_dTime = 0;
00477         getEMUHisto(h::EMU_CSC_ALCT0_ENDCAP_MINUS_DTIME, mo_CSC_Minus_endcap_ALCT0_dTime);
00478 
00479         for (uint32_t lct = 0; lct < alctsDatas.size(); lct++) {
00480 
00482           if (lct >= 2) continue;       
00483 
00484           if (getCSCHisto(h::CSC_ALCTXX_KEYWG, crateID, dmbID, lct, mo)) {
00485             mo->Fill(alctsDatas[lct].getKeyWG());
00486           }
00487 
00488           if(lct == 0) alct_keywg  = alctsDatas[lct].getKeyWG();
00489 
00490           int alct_dtime = 0;
00491           if (fwVersion == 2007) {
00492             alct_dtime = alctsDatas[lct].getBX();
00493           } else {
00494             // Older 2006 Format
00495             alct_dtime = (int) (alctsDatas[lct].getBX() - (alctHeader->BXNCount()&0x1F));
00496           }
00497 
00498           if (getCSCHisto(h::CSC_ALCTXX_DTIME, crateID, dmbID, lct, mo)) {
00499 
00500             if(alct_dtime < -16) {
00501               mo->Fill(alct_dtime + 32);
00502             } else {
00503               if(alct_dtime >= 16) mo->Fill(alct_dtime - 32);
00504               else mo->Fill(alct_dtime);
00505             }
00506 
00507             mo->SetAxisRange(0.1, 1.1 * (1.0 + mo->GetBinContent(mo->GetMaximumBin())), "Y");
00508 
00509             double dTime_mean = mo->getTH1()->GetMean();
00510             double dTime_rms = mo->getTH1()->GetRMS();
00511 
00512             // == For ALCT0 Fill Summary dTime Histograms
00513             if (lct == 0) {
00514               if (cid.endcap() == 1) {
00515                 if (mo_CSC_Plus_endcap_ALCT0_dTime) mo_CSC_Plus_endcap_ALCT0_dTime->Fill(alct_dtime);
00516               }
00517               if (cid.endcap() == 2) {
00518                 if (mo_CSC_Minus_endcap_ALCT0_dTime) mo_CSC_Minus_endcap_ALCT0_dTime->Fill(alct_dtime);
00519               }
00520               if (cscPosition && cscType && mo_CSC_ALCT0_BXN_mean) {
00521                 mo_CSC_ALCT0_BXN_mean->SetBinContent(cscPosition, cscType + 1, dTime_mean);
00522               }
00523               if (cscPosition && cscType && mo_CSC_ALCT0_BXN_rms) {
00524                 mo_CSC_ALCT0_BXN_rms->SetBinContent(cscPosition, cscType + 1, dTime_rms);
00525               }
00526             }
00527 
00528           }
00529 
00530           if (getCSCHisto(h::CSC_ALCTXX_DTIME_VS_KEYWG, crateID, dmbID, lct, mo)) {
00531             if(alct_dtime < -16) {
00532               mo->Fill(alctsDatas[lct].getKeyWG(), alct_dtime + 32);
00533             } else {
00534               if(alct_dtime >= 16) mo->Fill(alctsDatas[lct].getKeyWG(), alct_dtime - 32);
00535               else mo->Fill(alctsDatas[lct].getKeyWG(), alct_dtime);
00536             }
00537           }
00538 
00539           if (getCSCHisto(h::CSC_ALCTXX_DTIME_PROFILE, crateID, dmbID, lct, mo)) {
00540             if(alct_dtime < -16) {
00541               mo->Fill(alctsDatas[lct].getKeyWG(), alct_dtime + 32);
00542             } else {
00543               if (alct_dtime >= 16) mo->Fill(alctsDatas[lct].getKeyWG(), alct_dtime - 32);
00544               else mo->Fill(alctsDatas[lct].getKeyWG(), alct_dtime);
00545             }
00546           }
00547 
00548           int alct_bxn = alctsDatas[lct].getBX();
00549           if (fwVersion == 2007) {
00550             alct_bxn = (alct_bxn + alctHeader->BXNCount())&0x1F;
00551           }
00552 
00553           if (getCSCHisto(h::CSC_ALCTXX_BXN, crateID, dmbID, lct, mo)) mo->Fill(alct_bxn);
00554 
00555           if (getCSCHisto(h::CSC_ALCTXX_QUALITY, crateID, dmbID, lct, mo)) mo->Fill(alctsDatas[lct].getKeyWG(), alctsDatas[lct].getQuality());
00556 
00557           if (mo_EventDisplay) {
00558             mo_EventDisplay->SetBinContent(2, alctsDatas[lct].getKeyWG(), alct_bxn + 1 );
00559             mo_EventDisplay->SetBinContent(3, alctsDatas[lct].getKeyWG(), alctsDatas[lct].getQuality());
00560           }
00561 
00562           if (getCSCHisto(h::CSC_ALCTXX_QUALITY_DISTR, crateID, dmbID, lct, mo)) {
00563             mo->Fill(alctsDatas[lct].getQuality());
00564             if (lct == 0) {
00565               MonitorObject* mo1 = 0;
00566               if (cscType && cscPosition && getEMUHisto(h::EMU_CSC_ALCT0_QUALITY, mo1)) {
00567                 mo1->SetBinContent(cscPosition, cscType + 1, mo->getTH1()->GetMean());
00568               }
00569             }
00570           }
00571 
00572           if (getCSCHisto(h::CSC_ALCTXX_QUALITY_PROFILE, crateID, dmbID, lct, mo)) mo->Fill(alctsDatas[lct].getKeyWG(), alctsDatas[lct].getQuality());
00573 
00574           if (getCSCHisto(h::CSC_ALCTXX_PATTERN, crateID, dmbID, lct, mo)) {
00575             int pattern = (alctsDatas[lct].getAccelerator() << 1) + alctsDatas[lct].getCollisionB();
00576             int keywg = alctsDatas[lct].getKeyWG();
00577             mo->Fill(keywg, pattern );
00578           }
00579 
00580           if (getCSCHisto(h::CSC_ALCTXX_PATTERN_DISTR, crateID, dmbID, lct, mo)) {
00581             int pattern = (alctsDatas[lct].getAccelerator()<<1) + alctsDatas[lct].getCollisionB();
00582             mo->Fill(pattern);
00583           }
00584 
00585         }
00586 
00587         int NumberOfLayersWithHitsInALCT = 0;
00588         int NumberOfWireGroupsWithHitsInALCT = 0;
00589 
00590         if (alctData) {
00591 
00592           MonitorObject* mo_AFEB_RawHits_TimeBins  = 0;
00593           getCSCHisto(h::CSC_CFEB_AFEB_RAWHITS_TIMEBINS, crateID, dmbID, mo_AFEB_RawHits_TimeBins);
00594 
00595           MonitorObject* mo_CSC_Plus_endcap_AFEB_RawHits_Time = 0;
00596           getEMUHisto(h::EMU_CSC_AFEB_ENDCAP_PLUS_RAWHITS_TIME, mo_CSC_Plus_endcap_AFEB_RawHits_Time);
00597 
00598           MonitorObject* mo_CSC_Minus_endcap_AFEB_RawHits_Time = 0;
00599           getEMUHisto(h::EMU_CSC_AFEB_ENDCAP_MINUS_RAWHITS_TIME, mo_CSC_Minus_endcap_AFEB_RawHits_Time);
00600 
00601           MonitorObject* mo_CSC_AFEB_RawHits_Time_mean = 0;
00602           getEMUHisto(h::EMU_CSC_AFEB_RAWHITS_TIME_MEAN, mo_CSC_AFEB_RawHits_Time_mean);
00603 
00604           MonitorObject* mo_CSC_AFEB_RawHits_Time_rms = 0;
00605           getEMUHisto(h::EMU_CSC_AFEB_RAWHITS_TIME_RMS, mo_CSC_AFEB_RawHits_Time_rms);
00606 
00607           for (int nLayer = 1; nLayer <= 6; nLayer++) {
00608 
00609             int wg_previous = -1;
00610             int tbin_previous = -1;
00611             bool CheckLayerALCT = true;
00612 
00613             std::vector<CSCWireDigi> wireDigis = alctData->wireDigis(nLayer);
00614             for (std::vector<CSCWireDigi>::iterator wireDigisItr = wireDigis.begin(); wireDigisItr != wireDigis.end(); ++wireDigisItr) {
00615 
00616               int wg = wireDigisItr->getWireGroup();
00618               std::vector<int> tbins = wireDigisItr->getTimeBinsOn();
00619               int tbin = wireDigisItr->getTimeBin();
00620 
00621               if (mo_EventDisplay) {
00622                 mo_EventDisplay->SetBinContent(nLayer + 3, wg - 1, tbin + 1);
00623                 setEmuEventDisplayBit(mo_Emu_EventDisplay_Anode, glChamberIndex, wg - 1, nLayer - 1);
00624                 setEmuEventDisplayBit(mo_Emu_EventDisplay_XY, glChamberIndex, wg - 1, nLayer - 1);
00625               }
00626 
00627               if (CheckLayerALCT) {
00628                 NumberOfLayersWithHitsInALCT = NumberOfLayersWithHitsInALCT + 1;
00629                 CheckLayerALCT = false;
00630               }
00631 
00632               for (uint32_t n = 0; n < tbins.size(); n++) {
00633 
00634                 tbin = tbins[n];
00635                 if(wg != wg_previous || (tbin != tbin_previous + 1 && tbin != tbin_previous - 1) ) {
00636 
00637                   if (getCSCHisto(h::CSC_ALCTTIME_LYXX, crateID, dmbID, nLayer, mo)) mo->Fill(wg - 1, tbin);
00638 
00639                   if (getCSCHisto(h::CSC_ALCTTIME_LYXX_PROFILE, crateID, dmbID, nLayer, mo)) mo->Fill(wg - 1, tbin);
00640 
00641                   if (mo_AFEB_RawHits_TimeBins) mo_AFEB_RawHits_TimeBins->Fill(tbin);
00642 
00643                   if (cid.endcap() == 1) {
00644                     if (mo_CSC_Plus_endcap_AFEB_RawHits_Time) mo_CSC_Plus_endcap_AFEB_RawHits_Time->Fill(tbin);
00645                   }
00646                   if (cid.endcap() == 2) {
00647                     if (mo_CSC_Minus_endcap_AFEB_RawHits_Time) mo_CSC_Minus_endcap_AFEB_RawHits_Time->Fill(tbin);
00648                   }
00649 
00650                   if (getCSCHisto(h::CSC_ALCT_LYXX_RATE, crateID, dmbID, nLayer, mo)) {
00651                     mo->Fill(wg - 1);
00652                     int number_wg = (int)(mo->GetBinContent(wg));
00653                     Double_t Number_of_entries_ALCT = mo->GetEntries();
00654                     if (getCSCHisto(h::CSC_ALCT_LYXX_EFFICIENCY, crateID, dmbID, nLayer, mo)) {
00655                       mo->SetBinContent(wg, ((float) number_wg));
00656                       if((Double_t)(DMBEvents) > 0.0) {
00657                         mo->SetNormFactor(100.0*Number_of_entries_ALCT/(Double_t)(DMBEvents));
00658                       } else {
00659                         mo->SetNormFactor(100.0);
00660                       }
00661                       mo->SetEntries((int)DMBEvents);
00662                     }
00663                   }
00664                 }
00665                 if(wg != wg_previous) {
00666                   NumberOfWireGroupsWithHitsInALCT = NumberOfWireGroupsWithHitsInALCT + 1;
00667                 }
00668 
00669                 wg_previous   = wg;
00670                 tbin_previous = tbin;
00671               }
00672             }
00673 
00674             // Fill Summary Anode Raw Hits Timing Plots
00675             if (mo_AFEB_RawHits_TimeBins) {
00676 
00677               double rawhits_time_mean = mo_AFEB_RawHits_TimeBins->getTH1()->GetMean();
00678               double rawhits_time_rms = mo_AFEB_RawHits_TimeBins->getTH1()->GetRMS();
00679 
00680               if (cscType && cscPosition && mo_CSC_AFEB_RawHits_Time_mean) {
00681                 mo_CSC_AFEB_RawHits_Time_mean->SetBinContent(cscPosition, cscType + 1, rawhits_time_mean);
00682               }
00683 
00684               if (cscType && cscPosition && mo_CSC_AFEB_RawHits_Time_rms) {
00685                 mo_CSC_AFEB_RawHits_Time_rms->SetBinContent(cscPosition, cscType + 1, rawhits_time_rms);
00686               }
00687 
00688             }
00689 
00690           }
00691 
00692         } else {
00693           LOG_ERROR << cscTag << " Can not unpack Anode Data";
00694         }
00695 
00696         if (getCSCHisto(h::CSC_ALCT_NUMBER_OF_LAYERS_WITH_HITS, crateID, dmbID, mo)) {
00697           mo->Fill(NumberOfLayersWithHitsInALCT);
00698           MonitorObject* mo1 = 0;
00699           if (cscType && cscPosition && getEMUHisto(h::EMU_CSC_ALCT_PLANES_WITH_HITS, mo1)) {
00700             mo1->SetBinContent(cscPosition, cscType + 1, mo->getTH1()->GetMean());
00701           }
00702         }
00703 
00704         if (getCSCHisto(h::CSC_ALCT_NUMBER_OF_WIREGROUPS_WITH_HITS, crateID, dmbID, mo)) mo->Fill(NumberOfWireGroupsWithHitsInALCT);
00705 
00706       } else {
00707         LOG_ERROR << cscTag << " Can not unpack ALCT Header or/and Trailer";
00708       }
00709     } else {
00712       if (getCSCHisto(h::CSC_ALCT_NUMBER_RATE, crateID, dmbID, mo)) {
00713         mo->Fill(0);
00714         int nALCT = (int)mo->GetBinContent(1);
00715         if (getCSCHisto(h::CSC_ALCT_NUMBER_EFFICIENCY, crateID, dmbID, mo))
00716           mo->SetBinContent(1, (float)(nALCT) / (float)(DMBEvents) * 100.0);
00717       }
00718 
00719       if ((alct_dav  > 0) && (getCSCHisto(h::CSC_DMB_FEB_UNPACKED_VS_DAV, crateID, dmbID, mo))) {
00720         mo->Fill(0.0, 1.0);
00721       }
00722     }
00723 
00725     if(data.nclct() && data.nalct()) {
00726 
00727       CSCALCTHeader* alctHeader = data.alctHeader();
00728 
00729       if (alctHeader) {
00730         std::vector<CSCALCTDigi> alctsDatasTmp = alctHeader->ALCTDigis();
00731         std::vector<CSCALCTDigi> alctsDatas;
00732 
00733         for (uint32_t lct = 0; lct < alctsDatasTmp.size(); lct++) {
00734           if (alctsDatasTmp[lct].isValid())
00735             alctsDatas.push_back(alctsDatasTmp[lct]);
00736         }
00737 
00738         CSCTMBData* tmbData = data.tmbData();
00739         if (tmbData) {
00740           CSCTMBHeader* tmbHeader = tmbData->tmbHeader();
00741           if (tmbHeader) {
00743             if (getCSCHisto(h::CSC_TMB_BXN_VS_ALCT_BXN, crateID, dmbID, mo))
00744               mo->Fill( ((int)(alctHeader->BXNCount())) % 256, ((int)(tmbHeader->BXNCount())) % 256 );
00745 
00746             if (getCSCHisto(h::CSC_TMB_ALCT_BXN_DIFF, crateID, dmbID, mo)) {
00747               int clct_alct_bxn_diff = (int)(alctHeader->BXNCount() - tmbHeader->BXNCount());
00748               if(clct_alct_bxn_diff < -2048) mo->Fill(clct_alct_bxn_diff + 4096);
00749               else {
00750                 if(clct_alct_bxn_diff > 2048) mo->Fill(clct_alct_bxn_diff - 4096);
00751                 else mo->Fill(clct_alct_bxn_diff);
00752               }
00753               mo->SetAxisRange(0.1, 1.1*(1.0+mo->GetBinContent(mo->GetMaximumBin())), "Y");
00754             }
00755 
00756             if (getCSCHisto(h::CSC_TMB_L1A_VS_ALCT_L1A, crateID, dmbID, mo))
00757               mo->Fill((int)(alctHeader->L1Acc()%256),(int)(tmbHeader->L1ANumber()%256));
00758 
00759             if (getCSCHisto(h::CSC_TMB_ALCT_L1A_DIFF, crateID, dmbID, mo)) {
00760               int clct_alct_l1a_diff = (int)(tmbHeader->L1ANumber() - alctHeader->L1Acc());
00761               if(clct_alct_l1a_diff < -2048) mo->Fill(clct_alct_l1a_diff + 4096);
00762               else {
00763                 if(clct_alct_l1a_diff > 2048)  mo->Fill(clct_alct_l1a_diff - 4096);
00764                 else mo->Fill(clct_alct_l1a_diff);
00765               }
00766               mo->SetAxisRange(0.1, 1.1*(1.0+mo->GetBinContent(mo->GetMaximumBin())), "Y");
00767             }
00768           } else {
00769             LOG_ERROR << cscTag << " Can not unpack TMB Header";
00770           }
00771 
00772         } else {
00773           LOG_ERROR << cscTag << " Can not unpack TMB Data";
00774         }
00775       } else {
00776         LOG_ERROR << cscTag << " Can not unpack ALCT Header";
00777       }
00778     }
00779 
00781     if (data.nclct()) {
00782 
00785       CSCTMBData* tmbData = data.tmbData();
00786       if (tmbData) {
00787 
00788         CSCTMBHeader* tmbHeader = tmbData->tmbHeader();
00789         CSCTMBTrailer* tmbTrailer = tmbData->tmbTrailer();
00790 
00791         if (tmbHeader && tmbTrailer) {
00792 
00793           CSCCLCTData* clctData = data.clctData();
00794 
00795           std::vector<CSCCLCTDigi> clctsDatasTmp = tmbHeader->CLCTDigis(cid.rawId());
00796           std::vector<CSCCLCTDigi> clctsDatas;
00797 
00798           for (uint32_t lct = 0; lct < clctsDatasTmp.size(); lct++) {
00799             if (clctsDatasTmp[lct].isValid()) clctsDatas.push_back(clctsDatasTmp[lct]);
00800           }
00801 
00802           FEBunpacked = FEBunpacked +1;
00803           tmb_unpacked = 1;
00804 
00805           if (getCSCHisto(h::CSC_ALCT_MATCH_TIME, crateID, dmbID, mo)) {
00806 
00807             mo->Fill(tmbHeader->ALCTMatchTime());
00808             double alct_match_mean = mo->getTH1()->GetMean();
00809             double alct_match_rms = mo->getTH1()->GetRMS();
00810             MonitorObject*  mo1 = 0;
00811                             
00812             if (cid.endcap() == 1) {
00813               if (cscType && cscPosition && getEMUHisto(h::EMU_CSC_ENDCAP_PLUS_ALCT_CLCT_MATCH_TIME, mo1)) {
00814                 mo1->Fill(tmbHeader->ALCTMatchTime());
00815               }
00816             }
00817 
00818             if (cid.endcap() == 2) {
00819               if (cscType && cscPosition && getEMUHisto(h::EMU_CSC_ENDCAP_MINUS_ALCT_CLCT_MATCH_TIME, mo1)) {
00820                 mo1->Fill(tmbHeader->ALCTMatchTime());
00821               }
00822             }
00823              
00824             if (cscType && cscPosition && getEMUHisto(h::EMU_CSC_ALCT_CLCT_MATCH_MEAN, mo1)) {              
00825               mo1->SetBinContent(cscPosition, cscType + 1, alct_match_mean);
00826             }
00827 
00828             if (cscType && cscPosition && getEMUHisto(h::EMU_CSC_ALCT_CLCT_MATCH_RMS, mo1)) {
00829               mo1->SetBinContent(cscPosition, cscType + 1, alct_match_rms);
00830             }
00831 
00832           }
00833 
00834           if (getCSCHisto(h::CSC_LCT_MATCH_STATUS, crateID, dmbID, mo)) {
00835             if (tmbHeader->CLCTOnly()) mo->Fill(0.0,0.0);
00836             if (tmbHeader->ALCTOnly()) mo->Fill(0.0,1.0);
00837             if (tmbHeader->TMBMatch()) mo->Fill(0.0,2.0);
00838           }
00839 
00840           if (getCSCHisto(h::CSC_LCT0_MATCH_BXN_DIFFERENCE, crateID, dmbID, mo)) mo->Fill(tmbHeader->Bxn0Diff());
00841           if (getCSCHisto(h::CSC_LCT1_MATCH_BXN_DIFFERENCE, crateID, dmbID, mo)) mo->Fill(tmbHeader->Bxn1Diff());
00842 
00843           if ((tmb_dav  > 0) && (getCSCHisto(h::CSC_DMB_FEB_UNPACKED_VS_DAV, crateID, dmbID, mo))) {
00844             mo->Fill(1.0, 0.0);
00845           }
00846 
00848           if (getCSCHisto(h::CSC_CSC_RATE, crateID, dmbID, mo)) {
00849             mo->Fill(3);
00850             uint32_t CLCTEvent = (uint32_t)mo->GetBinContent(4);
00851             config->setChamberCounterValue(CLCT_TRIGGERS, crateID, dmbID, CLCTEvent);
00852             if (getCSCHisto(h::CSC_CSC_EFFICIENCY, crateID, dmbID, mo)) {
00853               if(config->getNEvents() > 0) {
00854                 mo->SetBinContent(2,((float)CLCTEvent/(float)(DMBEvents)*100.0));
00855                 mo->SetEntries(DMBEvents);
00856               }
00857             }
00858           }
00859 
00860           if (getCSCHisto(h::CSC_CLCT_L1A, crateID, dmbID, mo)) mo->Fill(tmbHeader->L1ANumber());
00861 
00863           if (getCSCHisto(h::CSC_CLCT_DMB_L1A_DIFF, crateID, dmbID, mo)) {
00864             int clct_dmb_l1a_diff = (int)((tmbHeader->L1ANumber() % 64)-dmbHeader->l1a() % 64);
00865             if (clct_dmb_l1a_diff != 0) L1A_out_of_sync = true;
00866             if(clct_dmb_l1a_diff < -32) mo->Fill(clct_dmb_l1a_diff + 64);
00867             else {
00868               if(clct_dmb_l1a_diff >= 32)  mo->Fill(clct_dmb_l1a_diff - 64);
00869               else mo->Fill(clct_dmb_l1a_diff);
00870             }
00871             mo->SetAxisRange(0.1, 1.1*(1.0+mo->GetBinContent(mo->GetMaximumBin())), "Y");
00872           }
00873 
00875           if (getCSCHisto(h::CSC_DMB_L1A_VS_CLCT_L1A, crateID, dmbID, mo)) mo->Fill(tmbHeader->L1ANumber()%256,dmbHeader->l1a());
00876 
00877           if (getCSCHisto(h::CSC_CLCT_DMB_BXN_DIFF, crateID, dmbID, mo)) {
00878             int clct_dmb_bxn_diff = (int)(tmbHeader->BXNCount()%64-dmbHeader->bxn12()%64);
00879             if(clct_dmb_bxn_diff < -32) mo->Fill(clct_dmb_bxn_diff + 64);
00880             else {
00881               if(clct_dmb_bxn_diff >= 32)  mo->Fill(clct_dmb_bxn_diff - 64);
00882               else mo->Fill(clct_dmb_bxn_diff);
00883             }
00884             mo->SetAxisRange(0.1, 1.1*(1.0+mo->GetBinContent(mo->GetMaximumBin())), "Y");
00885           }
00886 
00887           if (getCSCHisto(h::CSC_CLCT_BXN, crateID, dmbID, mo)) mo->Fill((int)(tmbHeader->BXNCount()));
00888 
00890           if (getCSCHisto(h::CSC_CLCT_BXN_VS_DMB_BXN, crateID, dmbID, mo)) mo->Fill(tmbHeader->BXNCount()%256,dmbHeader->bxn12()%256);
00891 
00892           if (getCSCHisto(h::CSC_CLCT_NUMBER_RATE, crateID, dmbID, mo)) {
00893             mo->Fill(clctsDatas.size());
00894             int nCLCT = (int)mo->GetBinContent((int)(clctsDatas.size()+1));
00895             if (getCSCHisto(h::CSC_CLCT_NUMBER, crateID, dmbID, mo)) mo->SetBinContent((int)(clctsDatas.size() + 1), (float)(nCLCT) / (float)(DMBEvents) * 100.0);
00896           }
00897 
00898           if (clctsDatas.size() == 1) {
00899             if (getCSCHisto(h::CSC_CLCT0_CLSSIFICATION, crateID, dmbID, mo)) {
00900               if (clctsDatas[0].getStripType()) mo->Fill(0.0);
00901               else mo->Fill(1.0);
00902             }
00903           }
00904 
00905           if (clctsDatas.size() == 2) {
00906             if (getCSCHisto(h::CSC_CLCT1_VS_CLCT0_KEY_STRIP, crateID, dmbID, mo))
00907               mo->Fill(clctsDatas[0].getKeyStrip(),clctsDatas[1].getKeyStrip());
00908             if (getCSCHisto(h::CSC_CLCT0_CLCT1_CLSSIFICATION, crateID, dmbID, mo)) {
00909               if ( clctsDatas[0].getStripType() &&  clctsDatas[1].getStripType())       mo->Fill(0.0);
00910               if ( clctsDatas[0].getStripType() && !clctsDatas[1].getStripType())       mo->Fill(1.0);
00911               if (!clctsDatas[0].getStripType() &&  clctsDatas[1].getStripType())       mo->Fill(2.0);
00912               if (!clctsDatas[0].getStripType() &&  !clctsDatas[1].getStripType())      mo->Fill(3.0);
00913             }
00914           }
00915 
00916           if (getCSCHisto(h::CSC_TMB_WORD_COUNT, crateID, dmbID, mo)) mo->Fill((int)(tmbTrailer->wordCount()));
00919           MonitorObject* mo_CSC_Plus_endcap_CLCT0_dTime = 0;
00920           getEMUHisto(h::EMU_CSC_ENDCAP_PLUS_CLCT0_DTIME, mo_CSC_Plus_endcap_CLCT0_dTime);
00921 
00922           MonitorObject*  mo_CSC_Minus_endcap_CLCT0_dTime = 0;
00923           getEMUHisto(h::EMU_CSC_ENDCAP_MINUS_CLCT0_DTIME, mo_CSC_Minus_endcap_CLCT0_dTime);
00924 
00925           MonitorObject*  mo_CSC_CLCT0_BXN_mean = 0;
00926           getEMUHisto(h::EMU_CSC_CLCT0_BXN_MEAN, mo_CSC_CLCT0_BXN_mean);
00927 
00928           MonitorObject*  mo_CSC_CLCT0_BXN_rms = 0;
00929 
00930           for (uint32_t lct = 0; lct < clctsDatas.size(); lct++) {
00931 
00932             if (getCSCHisto(h::CSC_CLCTXX_BXN, crateID, dmbID, lct, mo)) mo->Fill(clctsDatas[lct].getFullBX()%64);
00933 
00934             int clct_dtime = clctsDatas[lct].getFullBX() - tmbHeader->BXNCount();
00935             if (clct_dtime > 0) {
00936               clct_dtime -= 3564;
00937             }
00938 
00939             if (getCSCHisto(h::CSC_CLCTXX_DTIME, crateID, dmbID, lct, mo)) {
00940               int dTime = clct_dtime;
00941               /*
00942               if (clct_dtime < -16) {
00943                 dTime = clct_dtime + 32;
00944               } else {
00945                 if (clct_dtime > 16) dTime = clct_dtime - 32;
00946               }
00947               */
00948 
00949               mo->Fill(dTime);
00950               mo->SetAxisRange(0.1, 1.1 * (1.0 + mo->GetBinContent(mo->GetMaximumBin())), "Y");
00951 
00952               double dTime_mean = mo->getTH1()->GetMean();
00953               double dTime_rms = mo->getTH1()->GetRMS();
00954 
00955               // == For CLCT0 Fill Summary dTime Histograms
00956               if (lct == 0) {
00957                 if (cid.endcap() == 1) {
00958                   if (mo_CSC_Plus_endcap_CLCT0_dTime) mo_CSC_Plus_endcap_CLCT0_dTime->Fill(dTime);
00959                 }
00960                 if (cid.endcap() == 2) {
00961                   if (mo_CSC_Minus_endcap_CLCT0_dTime) mo_CSC_Minus_endcap_CLCT0_dTime->Fill(dTime);
00962                 }
00963                 if ( cscType && cscPosition && mo_CSC_CLCT0_BXN_mean) {
00964                   mo_CSC_CLCT0_BXN_mean->SetBinContent(cscPosition, cscType + 1, dTime_mean);
00965                 }
00966                 if (cscType && cscPosition && mo_CSC_CLCT0_BXN_rms) {
00967                   mo_CSC_CLCT0_BXN_rms->SetBinContent(cscPosition, cscType + 1, dTime_rms);
00968                 }
00969               }
00970 
00971             }
00972 
00975             LOG_DEBUG <<  "LCT:" << lct << " Type:" << clctsDatas[lct].getStripType() << " Strip:" << clctsDatas[lct].getKeyStrip();
00976 
00977             if (clctsDatas[lct].getStripType()) { // HalfStrip Type
00978 
00979               if (getCSCHisto(h::CSC_CLCTXX_KEYHALFSTRIP, crateID, dmbID, lct, mo))
00980                 mo->Fill(clctsDatas[lct].getKeyStrip());
00981 
00982               if (getCSCHisto(h::CSC_CLCTXX_DTIME_VS_HALF_STRIP, crateID, dmbID, lct, mo)) {
00983                 mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime);
00984                 /*
00985                 if (clct_dtime < -16) {
00986                   mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime + 32);
00987                 } else {
00988                   if (clct_dtime > 16) mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime - 32);
00989                   else                 mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime);
00990                 }
00991                 */
00992               }
00993 
00994               if (getCSCHisto(h::CSC_CLCTXX_DTIME_PROFILE, crateID, dmbID, lct, mo)) {
00995                 mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime);
00996                 /*
00997                 if (clct_dtime < -16) {
00998                   mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime + 32);
00999                 } else {
01000                   if (clct_dtime > 16) mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime - 32);
01001                   else                 mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime);
01002                 }
01003                 */
01004               }
01005 
01006               if (getCSCHisto(h::CSC_CLCTXX_HALF_STRIP_PATTERN, crateID, dmbID, lct, mo)) {
01007 
01008                 int pattern_clct = clctsDatas[lct].getPattern();
01012                 double tbin = -1;
01013 
01014                 switch (pattern_clct) {
01015                   case 0:  tbin=0.; break;
01016                   case 1:  tbin=1.; break;
01017                   case 2:  tbin=2.; break;
01018                   case 3:  tbin=10.; break;
01019                   case 4:  tbin=3.; break;
01020                   case 5:  tbin=9.; break;
01021                   case 6:  tbin=4.; break;
01022                   case 7:  tbin=8.; break;
01023                   case 8:  tbin=5.; break;
01024                   case 9:  tbin=7.; break;
01025                   case 10: tbin=6.; break;
01026                 }
01027 
01028                 if (tbin >= 0) mo->Fill(clctsDatas[lct].getKeyStrip(), tbin);
01029   
01030                 MonitorObject* mo1 = 0;
01031                 if (getCSCHisto(h::CSC_CLCT_HALF_STRIP_PATTERN_DISTR, crateID, dmbID, lct, mo1)) mo1->Fill(tbin);
01032 
01033               }
01034 
01035               if (getCSCHisto(h::CSC_CLCTXX_HALF_STRIP_QUALITY, crateID, dmbID, lct, mo))
01036                 mo->Fill((int)(clctsDatas[lct].getKeyStrip()),(int)(clctsDatas[lct].getQuality()));
01037   
01038               if (mo_EventDisplay) {
01039                 mo_EventDisplay->SetBinContent(10, clctsDatas[lct].getKeyStrip(), clct_dtime);
01040                 mo_EventDisplay->SetBinContent(11, clctsDatas[lct].getKeyStrip(), clctsDatas[lct].getQuality());
01041               }
01042 
01043               if (getCSCHisto(h::CSC_CLCTXX_HALF_STRIP_QUALITY_DISTR, crateID, dmbID, lct, mo)) {
01044                 mo->Fill((int)(clctsDatas[lct].getQuality()));
01045                 if (lct == 0) {
01046                   MonitorObject* mo1 = 0;
01047                   if (cscType && cscPosition && getEMUHisto(h::EMU_CSC_CLCT0_QUALITY, mo1))
01048                     mo1->SetBinContent(cscPosition, cscType + 1, mo->getTH1()->GetMean());
01049                 }
01050               }
01051 
01052               if (getCSCHisto(h::CSC_CLCTXX_HALF_STRIP_QUALITY_PROFILE, crateID, dmbID, lct, mo))
01053                 mo->Fill((int)(clctsDatas[lct].getKeyStrip()), (int)(clctsDatas[lct].getQuality()));
01054 
01055             } else { // DiStrip Type
01056 
01057               LOG_INFO << "Entering block!";
01058 
01059               if (getCSCHisto(h::CSC_CLCTXX_KEYDISTRIP, crateID, dmbID, lct, mo)) mo->Fill(clctsDatas[lct].getKeyStrip());
01060               else LOG_ERROR << "Not found h::CSC_CLCTXX_KEYDISTRIP = " << h::CSC_CLCTXX_KEYDISTRIP;
01061 
01062               if(lct == 0) clct_kewdistrip = clctsDatas[lct].getKeyStrip();
01063 
01064               if (getCSCHisto(h::CSC_CLCTXX_DTIME_VS_DISTRIP, crateID, dmbID, lct, mo)) {
01065                 mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime);
01066                 /*
01067                 if(clct_dtime < -16) mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime + 32);
01068                 else {
01069                   if(clct_dtime > 16) mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime - 32);
01070                   else mo->Fill((int)(clctsDatas[lct].getKeyStrip()), clct_dtime);
01071                 }
01072                 */
01073               }
01074 
01075               if (getCSCHisto(h::CSC_CLCTXX_DISTRIP_PATTERN, crateID, dmbID, lct, mo)) {
01076                 int pattern_clct = (int)((clctsDatas[lct].getPattern() >> 1) & 0x3);
01079                 if(pattern_clct == 1) mo->Fill(clctsDatas[lct].getKeyStrip(), 7.0);
01080                 if(pattern_clct == 3) mo->Fill(clctsDatas[lct].getKeyStrip(), 6.0);
01081                 if(pattern_clct == 5) mo->Fill(clctsDatas[lct].getKeyStrip(), 5.0);
01082                 if(pattern_clct == 7) mo->Fill(clctsDatas[lct].getKeyStrip(), 4.0);
01083                 if(pattern_clct == 6) mo->Fill(clctsDatas[lct].getKeyStrip(), 3.0);
01084                 if(pattern_clct == 4) mo->Fill(clctsDatas[lct].getKeyStrip(), 2.0);
01085                 if(pattern_clct == 2) mo->Fill(clctsDatas[lct].getKeyStrip(), 1.0);
01086                 if(pattern_clct == 0) mo->Fill(clctsDatas[lct].getKeyStrip(), 0.0);
01087               }
01088 
01089               if (getCSCHisto(h::CSC_CLCTXX_DISTRIP_QUALITY, crateID, dmbID, lct, mo))
01090                 mo->Fill((int)(clctsDatas[lct].getKeyStrip()),(int)(clctsDatas[lct].getQuality()));
01091 
01092               if (getCSCHisto(h::CSC_CLCTXX_DISTRIP_QUALITY_PROFILE, crateID, dmbID, lct, mo))
01093                 mo->Fill((int)(clctsDatas[lct].getKeyStrip()), (int)(clctsDatas[lct].getQuality()));
01094             }
01095         }
01096 
01097         int N_CFEBs = 5;
01098 
01099         int NumberOfLayersWithHitsInCLCT = 0;
01100         int NumberOfHalfStripsWithHitsInCLCT = 0;
01101 
01102         if (clctData && clctData->check()) {
01103 
01104           MonitorObject* mo_CFEB_Comparators_TimeSamples  = 0;
01105           getCSCHisto(h::CSC_CFEB_COMPARATORS_TIMESAMPLES, crateID, dmbID, mo_CFEB_Comparators_TimeSamples);
01106 
01107           MonitorObject*  mo_CSC_Plus_endcap_CFEB_Comparators_Time = 0;
01108           getEMUHisto(h::EMU_CSC_ENDCAP_PLUS_CFEB_COMPARATORS_TIME, mo_CSC_Plus_endcap_CFEB_Comparators_Time);
01109 
01110           MonitorObject*  mo_CSC_Minus_endcap_CFEB_Comparators_Time = 0;
01111           getEMUHisto(h::EMU_CSC_ENDCAP_MINUS_CFEB_COMPARATORS_TIME, mo_CSC_Minus_endcap_CFEB_Comparators_Time);
01112 
01113           MonitorObject*  mo_CSC_CFEB_Comparators_Time_mean = 0;
01114           getEMUHisto(h::EMU_CSC_CFEB_COMPARATORS_TIME_MEAN, mo_CSC_CFEB_Comparators_Time_mean);
01115           
01116           MonitorObject*  mo_CSC_CFEB_Comparators_Time_rms = 0;
01117           getEMUHisto(h::EMU_CSC_CFEB_COMPARATORS_TIME_RMS, mo_CSC_CFEB_Comparators_Time_rms);
01118 
01119           for(int nCFEB = 0; nCFEB < N_CFEBs; ++nCFEB) {
01120             for (int nLayer = 1; nLayer <= 6; nLayer++) {
01121 
01122               int hstrip_previous    = -1;
01123               int tbin_clct_previous = -1;
01124               bool CheckLayerCLCT = true;
01125 
01126               std::vector<CSCComparatorDigi> compOutData = clctData->comparatorDigis(nLayer, nCFEB);
01127 
01128               for (std::vector<CSCComparatorDigi>::iterator compOutDataItr = compOutData.begin(); compOutDataItr != compOutData.end(); ++compOutDataItr) {
01130                 int hstrip = 2 * (compOutDataItr->getStrip() - 1) + compOutDataItr->getComparator();
01131                 std::vector<int> tbins_clct = compOutDataItr->getTimeBinsOn();
01132                 int tbin_clct = (int)compOutDataItr->getTimeBin();
01133 
01134                 if (mo_EventDisplay) {
01135                   mo_EventDisplay->SetBinContent(nLayer + 11, hstrip, tbin_clct + 1);
01136                   setEmuEventDisplayBit(mo_Emu_EventDisplay_Anode, glChamberIndex, 160 + hstrip, nLayer - 1);
01137                   setEmuEventDisplayBit(mo_Emu_EventDisplay_XY, glChamberIndex, 160 + hstrip, nLayer - 1);
01138                 }
01139 
01140                 if(CheckLayerCLCT) {
01141                   NumberOfLayersWithHitsInCLCT = NumberOfLayersWithHitsInCLCT + 1;
01142                   CheckLayerCLCT = false;
01143                 }
01144 
01145                 for (uint32_t n=0; n < tbins_clct.size(); n++) {
01146                   tbin_clct = tbins_clct[n];
01147                   if(hstrip != hstrip_previous || (tbin_clct != tbin_clct_previous + 1 && tbin_clct != tbin_clct_previous - 1) ) {
01148 
01149                     if (getCSCHisto(h::CSC_CLCTTIME_LYXX, crateID, dmbID, nLayer, mo)) mo->Fill(hstrip, tbin_clct);
01150 
01151                     if (mo_CFEB_Comparators_TimeSamples) mo_CFEB_Comparators_TimeSamples->Fill(tbin_clct);
01152 
01153                     if (cid.endcap() == 1) {
01154                       if (mo_CSC_Plus_endcap_CFEB_Comparators_Time) mo_CSC_Plus_endcap_CFEB_Comparators_Time->Fill(tbin_clct);
01155                     }
01156 
01157                     if (cid.endcap() == 2) {
01158                       if (mo_CSC_Minus_endcap_CFEB_Comparators_Time) mo_CSC_Minus_endcap_CFEB_Comparators_Time->Fill(tbin_clct);
01159                     }
01160 
01161                     if (getCSCHisto(h::CSC_CLCTTIME_LYXX_PROFILE, crateID, dmbID, nLayer, mo)) mo->Fill(hstrip, tbin_clct);
01162 
01163                     if (getCSCHisto(h::CSC_CLCT_LYXX_RATE, crateID, dmbID, nLayer, mo)) {
01164 
01165                       mo->Fill(hstrip);
01166 
01167                       double number_hstrip = mo->GetBinContent(hstrip+1);
01168                       double Number_of_entries_CLCT = mo->GetEntries();
01169 
01170                       if (getCSCHisto(h::CSC_CLCT_LYXX_EFFICIENCY, crateID, dmbID, nLayer, mo)) {
01171                         mo->SetBinContent(hstrip + 1, number_hstrip);
01172                         if(DMBEvents > 0) {
01173                           double norm = (100.0 * Number_of_entries_CLCT) / ((double)(DMBEvents));
01175                           mo->SetNormFactor(norm);
01176                         } else {
01177                           mo->SetNormFactor(100.0);
01178                         }
01179                         mo->SetEntries(DMBEvents);
01180                       }
01181                     }
01182                   }
01183 
01184                   if(hstrip != hstrip_previous) {
01185                     NumberOfHalfStripsWithHitsInCLCT = NumberOfHalfStripsWithHitsInCLCT + 1;
01186                   }
01187                   hstrip_previous    = hstrip;
01188                   tbin_clct_previous = tbin_clct;
01189                 }
01190               }
01191             }
01192           }
01193 
01194           if (mo_CFEB_Comparators_TimeSamples) {
01195 
01196             double comps_time_mean = mo_CFEB_Comparators_TimeSamples->getTH1()->GetMean();
01197             double comps_time_rms = mo_CFEB_Comparators_TimeSamples->getTH1()->GetRMS();
01198 
01199             if ( cscType && cscPosition && mo_CSC_CFEB_Comparators_Time_mean) {
01200               mo_CSC_CFEB_Comparators_Time_mean->SetBinContent(cscPosition, cscType + 1, comps_time_mean);
01201             }
01202             if ( cscType && cscPosition && mo_CSC_CFEB_Comparators_Time_rms) {
01203               mo_CSC_CFEB_Comparators_Time_rms->SetBinContent(cscPosition, cscType + 1, comps_time_rms);
01204             }
01205 
01206           }
01207 
01208         } else {
01209           LOG_ERROR << cscTag << " Can not unpack CLCT Data";
01210         }
01211 
01212         if (getCSCHisto(h::CSC_CLCT_NUMBER_OF_LAYERS_WITH_HITS, crateID, dmbID, mo)) {
01213           mo->Fill(NumberOfLayersWithHitsInCLCT);
01214           MonitorObject* mo1 = 0;
01215           if (cscType && cscPosition && getEMUHisto(h::EMU_CSC_CLCT_PLANES_WITH_HITS, mo1)) {
01216             mo1->SetBinContent(cscPosition, cscType + 1, mo->getTH1()->GetMean());
01217           }
01218         }
01219 
01220         if (getCSCHisto(h::CSC_CLCT_NUMBER_OF_HALFSTRIPS_WITH_HITS, crateID, dmbID, mo))
01221           mo->Fill(NumberOfHalfStripsWithHitsInCLCT);
01222         } else {
01223           LOG_ERROR << cscTag << " Can not unpack TMB Header or/and Trailer";
01224         }
01225       } else {
01226         LOG_ERROR << cscTag << " Can not unpack TMB Data";
01227       }
01228 
01229     } else {
01232       if (getCSCHisto(h::CSC_CLCT_NUMBER_RATE, crateID, dmbID, mo)) {
01233         mo->Fill(0);
01234         int nCLCT = (int)mo->GetBinContent(1);
01235         if (getCSCHisto(h::CSC_CLCT_NUMBER, crateID, dmbID, mo)) mo->SetBinContent(1, (float)(nCLCT) / (float)(DMBEvents) * 100.0);
01236       }
01237       if ((tmb_dav  > 0) && (getCSCHisto(h::CSC_DMB_FEB_UNPACKED_VS_DAV, crateID, dmbID, mo))) {
01238         mo->Fill(1.0, 1.0);
01239       }
01240     }
01241 
01243     int NumberOfUnpackedCFEBs = 0;
01244     const int N_CFEBs = 5, N_Samples = 16, N_Layers = 6, N_Strips = 16;
01245     int ADC = 0, OutOffRange, Threshold = 30;
01247 //     CSCCFEBData * cfebData[5];
01248 //     CSCCFEBTimeSlice *  timeSlice[5][16];
01249 //     CSCCFEBDataWord * timeSample[5][16][6][16];
01250     int Pedestal[5][6][16];
01251     std::pair<int,int> CellPeak[5][6][16];
01252     memset(CellPeak, 0, sizeof(CellPeak));
01253 //     float PedestalError[5][6][16];
01254 //     CSCCFEBSCAControllerWord scaControllerWord[5][16][6];
01255     bool CheckCFEB = true;
01257     float Clus_Sum_Charge;
01258     int TrigTime, L1APhase, UnpackedTrigTime, LCTPhase, SCA_BLK, NmbTimeSamples;
01260     int  FreeCells, LCT_Pipe_Empty, LCT_Pipe_Full, LCT_Pipe_Count, L1_Pipe_Empty, L1_Pipe_Full, Buffer_Count;
01263     bool CheckThresholdStripInTheLayer[6][80];
01264     for(int i=0; i<6; i++) {
01265       for(int j = 0; j < 80; j++) CheckThresholdStripInTheLayer[i][j] = true;
01266     }
01267 
01268     bool CheckOutOffRangeStripInTheLayer[6][80];
01269     for(int i=0; i<6; i++) {
01270       for(int j=0; j<80; j++) CheckOutOffRangeStripInTheLayer[i][j] = true;
01271     }
01272 
01274     float cscdata[N_CFEBs * 16][N_Samples][N_Layers];
01276     int SCABlockData[N_CFEBs * 16][N_Samples][N_Layers];
01277     memset(cscdata, 0, sizeof(cscdata));
01279     memset(SCABlockData, 0, sizeof(SCABlockData));
01282     char hbuf[255];
01283     memset(hbuf, 0, sizeof(hbuf));
01284 
01285     MonitorObject* mo_CFEB_SCA_CellPeak_Time  = 0;
01286     getCSCHisto(h::CSC_CFEB_SCA_CELLPEAK_TIME, crateID, dmbID, mo_CFEB_SCA_CellPeak_Time);
01287              
01288     MonitorObject*  mo_CSC_Plus_endcap_CFEB_SCA_CellPeak_Time = 0;
01289     getEMUHisto(h::EMU_CSC_PLUS_ENDCAP_CFEB_SCA_CELLPEAK_TIME, mo_CSC_Plus_endcap_CFEB_SCA_CellPeak_Time);
01290 
01291     MonitorObject*  mo_CSC_Minus_endcap_CFEB_SCA_CellPeak_Time = 0;
01292     getEMUHisto(h::EMU_CSC_MINUS_ENDCAP_CFEB_SCA_CELLPEAK_TIME, mo_CSC_Minus_endcap_CFEB_SCA_CellPeak_Time);
01293 
01294     MonitorObject*  mo_CSC_CFEB_SCA_CellPeak_Time_mean = 0;
01295     getEMUHisto(h::EMU_CSC_CFEB_SCA_CELLPEAK_TIME_MEAN, mo_CSC_CFEB_SCA_CellPeak_Time_mean);
01296 
01297     MonitorObject*  mo_CSC_CFEB_SCA_CellPeak_Time_rms = 0;
01298     getEMUHisto(h::EMU_CSC_CFEB_SCA_CELLPEAK_TIME_RMS, mo_CSC_CFEB_SCA_CellPeak_Time_rms);
01299 
01300     for(int nCFEB = 0; nCFEB < N_CFEBs; ++nCFEB) {
01301 
01302 //       cfebData[nCFEB] = data.cfebData(nCFEB);
01303       if (data.cfebData(nCFEB) !=0) {
01304         if (!data.cfebData(nCFEB)->check()) continue;
01306         FEBunpacked = FEBunpacked +1; // Increment number of unpacked FED
01307         NumberOfUnpackedCFEBs = NumberOfUnpackedCFEBs + 1; // Increment number of unpaked CFEB
01308         cfeb_unpacked = 1;
01309         if(CheckCFEB == true){
01310           if (getCSCHisto(h::CSC_CSC_RATE, crateID, dmbID, mo)) {
01311             mo->Fill(4);
01312             uint32_t CFEBEvent = (uint32_t)mo->GetBinContent(5);
01313             config->setChamberCounterValue(CFEB_TRIGGERS, crateID, dmbID, CFEBEvent);
01314             if (getCSCHisto(h::CSC_CSC_EFFICIENCY, crateID, dmbID, mo)) {
01315               if(config->getNEvents() > 0) {
01316                 mo->SetBinContent(3, ((float)CFEBEvent/(float)(DMBEvents)*100.0));
01317                 mo->SetEntries((int)DMBEvents);
01318               }
01319             }
01320           }
01321 
01322           if ((cfeb_dav2  > 0) && (getCSCHisto(h::CSC_DMB_FEB_UNPACKED_VS_DAV, crateID, dmbID, mo))) {
01323             mo->Fill(2.0, 0.0);
01324           }
01325           CheckCFEB = false;
01326         }
01328         NmbTimeSamples= (data.cfebData(nCFEB))->nTimeSamples();
01334         MonitorObject* mo_CFEB_SCA_Block_Occupancy = 0;
01335         getCSCHisto(h::CSC_CFEBXX_SCA_BLOCK_OCCUPANCY, crateID, dmbID, nCFEB + 1, mo_CFEB_SCA_Block_Occupancy);
01336         MonitorObject*  mo_CFEB_Free_SCA_Cells = 0;
01337         getCSCHisto(h::CSC_CFEBXX_FREE_SCA_CELLS, crateID, dmbID, nCFEB + 1, mo_CFEB_Free_SCA_Cells);
01338         MonitorObject* mo_CFEB_SCA_Blocks_Locked_by_LCTs = 0;
01339         getCSCHisto(h::CSC_CFEBXX_SCA_BLOCKS_LOCKED_BY_LCTS, crateID, dmbID, nCFEB + 1, mo_CFEB_SCA_Blocks_Locked_by_LCTs);
01340         MonitorObject* mo_CFEB_SCA_Blocks_Locked_by_LCTxL1 = 0;
01341         getCSCHisto(h::CSC_CFEBXX_SCA_BLOCKS_LOCKED_BY_LCTXL1, crateID, dmbID, nCFEB + 1, mo_CFEB_SCA_Blocks_Locked_by_LCTxL1);
01342         MonitorObject* mo_CFEB_DMB_L1A_diff = 0;
01343         getCSCHisto(h::CSC_CFEBXX_DMB_L1A_DIFF, crateID, dmbID, nCFEB + 1, mo_CFEB_DMB_L1A_diff);
01344 
01347         for(int nLayer = 1; nLayer <= N_Layers; ++nLayer) {
01349           MonitorObject * mo_CFEB_Out_Off_Range_Strips = 0;
01350           getCSCHisto(h::CSC_CFEB_OUT_OFF_RANGE_STRIPS_LYXX, crateID, dmbID, nLayer, mo_CFEB_Out_Off_Range_Strips);
01351           MonitorObject * mo_CFEB_Active_Samples_vs_Strip = 0;
01352           getCSCHisto(h::CSC_CFEB_ACTIVE_SAMPLES_VS_STRIP_LYXX, crateID, dmbID, nLayer, mo_CFEB_Active_Samples_vs_Strip);
01353           MonitorObject * mo_CFEB_Active_Samples_vs_Strip_Profile = 0;
01354           getCSCHisto(h::CSC_CFEB_ACTIVE_SAMPLES_VS_STRIP_LYXX_PROFILE, crateID, dmbID, nLayer, mo_CFEB_Active_Samples_vs_Strip_Profile);
01355           MonitorObject * mo_CFEB_ActiveStrips = 0;
01356           getCSCHisto(h::CSC_CFEB_ACTIVESTRIPS_LYXX, crateID, dmbID, nLayer, mo_CFEB_ActiveStrips);
01357           MonitorObject * mo_CFEB_SCA_Cell_Peak = 0;
01358           getCSCHisto(h::CSC_CFEB_SCA_CELL_PEAK_LY_XX, crateID, dmbID, nLayer, mo_CFEB_SCA_Cell_Peak);
01359 
01360           MonitorObject * mo_CFEB_Pedestal_withEMV_Sample = 0;
01361           getCSCHisto(h::CSC_CFEB_PEDESTAL_WITHEMV_SAMPLE_01_LYXX, crateID, dmbID, nLayer, mo_CFEB_Pedestal_withEMV_Sample);
01362           MonitorObject * mo_CFEB_Pedestal_withRMS_Sample = 0;
01363           getCSCHisto(h::CSC_CFEB_PEDESTAL_WITHRMS_SAMPLE_01_LYXX, crateID, dmbID, nLayer, mo_CFEB_Pedestal_withRMS_Sample);
01364           MonitorObject * mo_CFEB_PedestalRMS_Sample = 0;
01365           getCSCHisto(h::CSC_CFEB_PEDESTALRMS_SAMPLE_01_LYXX, crateID, dmbID, nLayer, mo_CFEB_PedestalRMS_Sample);
01366 
01367           for(int nSample = 0; nSample < NmbTimeSamples; ++nSample) {
01368 //             timeSlice[nCFEB][nSample] = (CSCCFEBTimeSlice * )((cfebData[nCFEB])->timeSlice(nSample));
01369             if (timeSlice(data, nCFEB, nSample) == 0) {
01370               LOG_WARN <<  "CFEB" << nCFEB << " nSample: " << nSample << " - B-Word";
01371               continue;
01372             }
01373 
01374             if (mo_CFEB_DMB_L1A_diff && !fCloseL1As ) {
01376               int cfeb_dmb_l1a_diff = (int)((timeSlice(data, nCFEB, nSample)->get_L1A_number())-dmbHeader->l1a()%64);
01377               if (cfeb_dmb_l1a_diff != 0) {
01378                 L1A_out_of_sync = true;
01379               }
01380               if(cfeb_dmb_l1a_diff < -32) mo->Fill(cfeb_dmb_l1a_diff + 64);
01381               else {
01382                 if(cfeb_dmb_l1a_diff >= 32) mo->Fill(cfeb_dmb_l1a_diff - 64);
01383                 else mo_CFEB_DMB_L1A_diff->Fill(cfeb_dmb_l1a_diff);
01384               }
01385               mo_CFEB_DMB_L1A_diff->SetAxisRange(0.1, 1.1*(1.0+mo_CFEB_DMB_L1A_diff->GetBinContent(mo_CFEB_DMB_L1A_diff->GetMaximumBin())), "Y");
01386             }
01387 
01390 //             scaControllerWord[nCFEB][nSample][nLayer-1] = timeSlice(cfebData, nCFEB, nSample)->scaControllerWord(nLayer);
01391 
01392             TrigTime = (int)(timeSlice(data, nCFEB, nSample)->scaControllerWord(nLayer).trig_time);
01394             FreeCells = timeSlice(data, nCFEB, nSample)->get_n_free_sca_blocks();
01395             LCT_Pipe_Empty = timeSlice(data, nCFEB, nSample)->get_lctpipe_empty();
01396             LCT_Pipe_Full = timeSlice(data, nCFEB, nSample)->get_lctpipe_full();
01397             LCT_Pipe_Count = timeSlice(data, nCFEB, nSample)->get_lctpipe_count();
01398             L1_Pipe_Empty = timeSlice(data, nCFEB, nSample)->get_l1pipe_empty();
01399             L1_Pipe_Full = timeSlice(data, nCFEB, nSample)->get_l1pipe_full();
01401             Buffer_Count = timeSlice(data, nCFEB, nSample)->get_buffer_count();
01402 
01403             SCA_BLK  = (int)(timeSlice(data, nCFEB, nSample)->scaControllerWord(nLayer).sca_blk);
01407             for(int nStrip = 0; nStrip < N_Strips; ++nStrip) {
01408               SCABlockData[nCFEB*16+nStrip][nSample][nLayer-1] = SCA_BLK;
01410             }
01415             if (mo_CFEB_SCA_Block_Occupancy) mo_CFEB_SCA_Block_Occupancy->Fill(SCA_BLK);
01416 
01419             if (mo_CFEB_Free_SCA_Cells) {
01420               if (timeSlice(data, nCFEB, nSample)->scaControllerWord(nLayer).sca_full == 1) mo_CFEB_Free_SCA_Cells->Fill(-1);
01421               mo_CFEB_Free_SCA_Cells->Fill(FreeCells);
01422             }
01423 
01426             if (mo_CFEB_SCA_Blocks_Locked_by_LCTs) {
01427               if (LCT_Pipe_Empty == 1) mo_CFEB_SCA_Blocks_Locked_by_LCTs->Fill(-0.5);
01428               if (LCT_Pipe_Full == 1) mo_CFEB_SCA_Blocks_Locked_by_LCTs->Fill(16.5);
01429               mo_CFEB_SCA_Blocks_Locked_by_LCTs->Fill(LCT_Pipe_Count);
01430             }
01431 
01434             if (mo_CFEB_SCA_Blocks_Locked_by_LCTxL1) {
01435               if (L1_Pipe_Empty == 1) mo_CFEB_SCA_Blocks_Locked_by_LCTxL1->Fill(-0.5);
01436               if (L1_Pipe_Full == 1) mo_CFEB_SCA_Blocks_Locked_by_LCTxL1->Fill(31.5);
01437               mo_CFEB_SCA_Blocks_Locked_by_LCTxL1->Fill(Buffer_Count);
01438             }
01439 
01442             if(nSample == 0 && nLayer == 1) {
01443               TrigTime = (int)(timeSlice(data, nCFEB, nSample)->scaControllerWord(nLayer).trig_time);
01444               int k = 1;
01445               while (((TrigTime >> (k-1)) & 0x1) != 1 && k <= 8) {
01446                 k = k + 1;
01447               }
01448               L1APhase = (int)((timeSlice(data, nCFEB, nSample)->scaControllerWord(nLayer).l1a_phase) & 0x1);
01449               UnpackedTrigTime = ((k << 1) & 0xE) + L1APhase;
01450 
01451               if (getCSCHisto(h::CSC_CFEBXX_L1A_SYNC_TIME, crateID, dmbID, nCFEB + 1, mo))
01452                 mo->Fill((int)UnpackedTrigTime);
01453               LCTPhase = (int)((timeSlice(data, nCFEB, nSample)->scaControllerWord(nLayer).lct_phase)&0x1);
01454 
01455               if (getCSCHisto(h::CSC_CFEBXX_LCT_PHASE_VS_L1A_PHASE, crateID, dmbID, nCFEB + 1, mo))
01456                 mo->Fill(LCTPhase, L1APhase);
01457 
01460               if (getCSCHisto(h::CSC_CFEBXX_L1A_SYNC_TIME_VS_DMB, crateID, dmbID, nCFEB + 1, mo))
01461                 mo->Fill((int)(dmbHeader->dmbCfebSync()), (int)UnpackedTrigTime);
01462 
01463               if (getCSCHisto(h::CSC_CFEBXX_L1A_SYNC_TIME_DMB_DIFF, crateID, dmbID, nCFEB + 1, mo)) {
01464                 int cfeb_dmb_L1A_sync_time = (int)(dmbHeader->dmbCfebSync()) - (int)UnpackedTrigTime;
01465                 if(cfeb_dmb_L1A_sync_time < -8) mo->Fill(cfeb_dmb_L1A_sync_time+16);
01466                 else {
01467                   if(cfeb_dmb_L1A_sync_time >= 8) mo->Fill(cfeb_dmb_L1A_sync_time-16);
01468                   else mo->Fill(cfeb_dmb_L1A_sync_time);
01469                 }
01470                 mo->SetAxisRange(0.1, 1.1*(1.0+mo->GetBinContent(mo->GetMaximumBin())), "Y");
01471               }
01472 
01473             }
01474 
01475 
01476             for(int nStrip = 1; nStrip <= N_Strips; ++nStrip) {
01477 //               timeSample[nCFEB][nSample][nLayer - 1][nStrip - 1]=(data.cfebData(nCFEB)->timeSlice(nSample))->timeSample(nLayer,nStrip);
01478               ADC = (int) ((timeSample(data, nCFEB, nSample, nLayer, nStrip)->adcCounts) & 0xFFF);
01480               OutOffRange = (int) ((timeSample(data, nCFEB, nSample, nLayer, nStrip)->adcOverflow) & 0x1);
01481 
01482               if(nSample == 0) { // nSample == 0
01483                 CellPeak[nCFEB][nLayer-1][nStrip-1] = std::make_pair(nSample,ADC);
01484                 Pedestal[nCFEB][nLayer-1][nStrip-1] = ADC;
01486               }
01487 
01488               if(OutOffRange == 1 && CheckOutOffRangeStripInTheLayer[nLayer - 1][nCFEB * 16 + nStrip - 1] == true) {
01490                 if ( mo_CFEB_Out_Off_Range_Strips)
01491                   mo_CFEB_Out_Off_Range_Strips->Fill((int)(nCFEB * 16 + nStrip - 1));
01492                 CheckOutOffRangeStripInTheLayer[nLayer - 1][nCFEB * 16 + nStrip - 1] = false;
01493               }
01494               if(ADC - Pedestal[nCFEB][nLayer - 1][nStrip - 1] > Threshold && OutOffRange != 1) {       
01496                 if (mo_CFEB_Active_Samples_vs_Strip)
01497                   mo_CFEB_Active_Samples_vs_Strip->Fill((int)(nCFEB * 16 + nStrip - 1), nSample);
01498 
01500                 if (mo_CFEB_Active_Samples_vs_Strip_Profile)
01501                   mo_CFEB_Active_Samples_vs_Strip_Profile->Fill((int)(nCFEB * 16 + nStrip - 1), nSample);
01502 
01503                 if(CheckThresholdStripInTheLayer[nLayer - 1][nCFEB * 16 + nStrip - 1] == true) {
01505                   if (mo_CFEB_ActiveStrips)
01506                     mo_CFEB_ActiveStrips->Fill((int)(nCFEB * 16 + nStrip));
01507                   CheckThresholdStripInTheLayer[nLayer - 1][nCFEB * 16 + nStrip - 1] = false;
01508                 }
01510                 if(ADC - Pedestal[nCFEB][nLayer - 1][nStrip - 1] > Threshold) {
01512                   cscdata[nCFEB * 16 + nStrip - 1][nSample][nLayer - 1] = ADC - Pedestal[nCFEB][nLayer - 1][nStrip - 1];
01513                 }       
01515                 if(ADC > CellPeak[nCFEB][nLayer - 1][nStrip - 1].second) {
01516                   CellPeak[nCFEB][nLayer - 1][nStrip - 1].first = nSample;
01517                   CellPeak[nCFEB][nLayer - 1][nStrip - 1].second = ADC;
01518                 }
01519               }
01522               if(nSample == 1) {
01523                 int channel_threshold = 40;
01524                 if (std::abs(ADC - Pedestal[nCFEB][nLayer - 1][nStrip - 1]) < channel_threshold) {
01526                   if (mo_CFEB_Pedestal_withEMV_Sample)
01527                     mo_CFEB_Pedestal_withEMV_Sample->Fill((int)(nCFEB * 16 + nStrip - 1), Pedestal[nCFEB][nLayer - 1][nStrip - 1]);
01528 
01530                   if (mo_CFEB_Pedestal_withRMS_Sample) {
01531                     mo_CFEB_Pedestal_withRMS_Sample->Fill((int)(nCFEB * 16 + nStrip - 1), Pedestal[nCFEB][nLayer - 1][nStrip - 1]);
01532 //                     PedestalError[nCFEB][nLayer - 1][nStrip - 1] = mo_CFEB_Pedestal_withRMS_Sample->GetBinError(nCFEB * 16 + nStrip);
01533 
01535                     if (mo_CFEB_PedestalRMS_Sample) {
01536                       mo_CFEB_PedestalRMS_Sample->SetBinContent(nCFEB * 16 + nStrip - 1, mo_CFEB_Pedestal_withRMS_Sample->GetBinError(nCFEB * 16 + nStrip));
01537                       mo_CFEB_PedestalRMS_Sample->SetBinError(nCFEB * 16 + nStrip - 1, 0.00000000001);
01538                     }
01539                   }
01540                 }
01541                 Pedestal[nCFEB][nLayer-1][nStrip-1] += ADC;
01542                 Pedestal[nCFEB][nLayer-1][nStrip-1] /= 2;
01543               }
01545             }
01546           }
01547 
01548           for(int nStrip = 1; nStrip <= N_Strips; ++nStrip) {
01549             if (mo_CFEB_SCA_Cell_Peak && CellPeak[nCFEB][nLayer - 1][nStrip - 1].first) {
01550               mo_CFEB_SCA_Cell_Peak->Fill((int)(nCFEB * 16 + nStrip - 1), CellPeak[nCFEB][nLayer - 1][nStrip - 1].first);
01551               if (mo_CFEB_SCA_CellPeak_Time) {
01552                 mo_CFEB_SCA_CellPeak_Time->Fill(CellPeak[nCFEB][nLayer - 1][nStrip - 1].first);
01553               }
01554 
01555               if (mo_EventDisplay) {
01556                 int peak_sample = CellPeak[nCFEB][nLayer-1][nStrip-1].first;
01557                 int peak_adc = CellPeak[nCFEB][nLayer-1][nStrip-1].second;
01558                 int pedestal = Pedestal[nCFEB][nLayer-1][nStrip-1];
01559                 int peak_sca_charge = peak_adc - pedestal;
01560                                                                                         
01561                 if (peak_adc - pedestal > Threshold) {
01562                   if (peak_sample >=1) {
01563                     peak_sca_charge += ((timeSample(data, nCFEB, peak_sample-1, nLayer, nStrip)->adcCounts)&0xFFF)-pedestal;
01564                   }
01565                   if (peak_sample < NmbTimeSamples-1) {
01566                     peak_sca_charge += ((timeSample(data, nCFEB, peak_sample+1, nLayer, nStrip)->adcCounts)&0xFFF)-pedestal;
01567                   }
01568                   mo_EventDisplay->SetBinContent(nLayer + 17, nCFEB * 16 + nStrip - 1, peak_sca_charge);
01569                   setEmuEventDisplayBit(mo_Emu_EventDisplay_Cathode, glChamberIndex, nCFEB * 16 + nStrip - 1, nLayer - 1);
01570                 }
01571               }
01572 
01573               if (cid.endcap() == 1) {
01574                 if (mo_CSC_Plus_endcap_CFEB_SCA_CellPeak_Time) 
01575                   mo_CSC_Plus_endcap_CFEB_SCA_CellPeak_Time->Fill(CellPeak[nCFEB][nLayer - 1][nStrip - 1].first);
01576               }
01577               if (cid.endcap() == 2) {
01578                 if (mo_CSC_Minus_endcap_CFEB_SCA_CellPeak_Time) 
01579                   mo_CSC_Minus_endcap_CFEB_SCA_CellPeak_Time->Fill(CellPeak[nCFEB][nLayer - 1][nStrip - 1].first);
01580               }
01581             }
01582           }
01583 
01584         }
01585       }
01586 
01587     }
01588 
01589     // Fill Summary CFEB Raw Hits Timing Plots
01590     if (mo_CFEB_SCA_CellPeak_Time) {
01591       double cellpeak_time_mean = mo_CFEB_SCA_CellPeak_Time->getTH1()->GetMean();
01592       double cellpeak_time_rms = mo_CFEB_SCA_CellPeak_Time->getTH1()->GetRMS();
01593       if (cscType && cscPosition && mo_CSC_CFEB_SCA_CellPeak_Time_mean) {
01594         mo_CSC_CFEB_SCA_CellPeak_Time_mean->SetBinContent(cscPosition, cscType + 1, cellpeak_time_mean);
01595       }
01596       if (cscType && cscPosition && mo_CSC_CFEB_SCA_CellPeak_Time_rms) {
01597         mo_CSC_CFEB_SCA_CellPeak_Time_rms->SetBinContent(cscPosition, cscType + 1 ,cellpeak_time_rms);
01598       }
01599     }
01600 
01603     const int a = N_CFEBs * N_Strips;
01604     const int b = a * N_Samples;
01605     float Cathodes[b * N_Layers];
01606     for(int i = 0; i < N_Layers; ++i) {
01607       const int b1 = i * b;
01608       for(int j = 0; j < a; ++j) {
01609         const int b2 = b1 + j;
01610         for(int k = 0; k < N_Samples; ++k) {
01611           Cathodes[b2 + a * k] = cscdata[j][k][i];
01612         }
01613       }
01614     }
01615 
01616     std::vector<StripCluster> Clus;
01617     Clus.clear();
01618     StripClusterFinder ClusterFinder(N_Layers, N_Samples, N_CFEBs, N_Strips);
01619 
01620     for(int nLayer = 1; nLayer <= N_Layers; ++nLayer) {
01621 
01624       ClusterFinder.DoAction(nLayer - 1, Cathodes);
01625       Clus = ClusterFinder.getClusters();
01626 
01629       if (getCSCHisto(h::CSC_CFEB_NUMBER_OF_CLUSTERS_LY_XX, crateID, dmbID, nLayer, mo)) {
01630         // Allways true because Clus.size() = unsigned
01631         // if (Clus.size() >= 0)  
01632         mo->Fill(Clus.size());
01633       }
01634 
01635       for(uint32_t u = 0; u < Clus.size(); u++){
01636 
01637         Clus_Sum_Charge = 0.0;
01638 
01639         for(uint32_t k = 0;k < Clus[u].ClusterPulseMapHeight.size(); k++) {
01640 
01643           for(int n = Clus[u].LFTBNDTime; n < Clus[u].IRTBNDTime; n++) {
01644             Clus_Sum_Charge = Clus_Sum_Charge + Clus[u].ClusterPulseMapHeight[k].height_[n];
01645           }
01646 
01647         }
01648 
01650         if (getCSCHisto(h::CSC_CFEB_CLUSTERS_CHARGE_LY_XX, crateID, dmbID, nLayer, mo)) {
01651           mo->Fill(Clus_Sum_Charge);
01652         }
01653 
01655         if (getCSCHisto(h::CSC_CFEB_WIDTH_OF_CLUSTERS_LY_XX, crateID, dmbID, nLayer, mo)) {
01656           mo->Fill(Clus[u].IRTBNDStrip - Clus[u].LFTBNDStrip + 1);
01657         }
01658 
01660         if (getCSCHisto(h::CSC_CFEB_CLUSTER_DURATION_LY_XX, crateID, dmbID, nLayer, mo)) {
01661           mo->Fill(Clus[u].IRTBNDTime - Clus[u].LFTBNDTime + 1);
01662         }
01663 
01664       }
01665 
01666       Clus.clear();
01667 
01669     }
01670 
01674     if (getCSCHisto(h::CSC_DMB_FEB_COMBINATIONS_UNPACKED_VS_DAV, crateID, dmbID, mo)) {
01675       float feb_combination_unpacked = -1.0;
01676       if(alct_unpacked == 0 && tmb_unpacked == 0 && cfeb_unpacked == 0) feb_combination_unpacked = 0.0;
01677       if(alct_unpacked >  0 && tmb_unpacked == 0 && cfeb_unpacked == 0) feb_combination_unpacked = 1.0;
01678       if(alct_unpacked == 0 && tmb_unpacked >  0 && cfeb_unpacked == 0) feb_combination_unpacked = 2.0;
01679       if(alct_unpacked == 0 && tmb_unpacked == 0 && cfeb_unpacked >  0) feb_combination_unpacked = 3.0;
01680       if(alct_unpacked >  0 && tmb_unpacked >  0 && cfeb_unpacked == 0) feb_combination_unpacked = 4.0;
01681       if(alct_unpacked >  0 && tmb_unpacked == 0 && cfeb_unpacked >  0) feb_combination_unpacked = 5.0;
01682       if(alct_unpacked == 0 && tmb_unpacked >  0 && cfeb_unpacked >  0) feb_combination_unpacked = 6.0;
01683       if(alct_unpacked >  0 && tmb_unpacked >  0 && cfeb_unpacked >  0) feb_combination_unpacked = 7.0;
01684       mo->Fill(feb_combination_dav, feb_combination_unpacked);
01685     }
01686 
01687     if((clct_kewdistrip > -1 && alct_keywg > -1) && (getCSCHisto(h::CSC_CLCT0_KEYDISTRIP_VS_ALCT0_KEYWIREGROUP, crateID, dmbID, mo))) {
01688       mo->Fill(alct_keywg, clct_kewdistrip);
01689     }
01690 
01691     if (L1A_out_of_sync && cscType && cscPosition && getEMUHisto(h::EMU_CSC_L1A_OUT_OF_SYNC, mo)){
01692       mo->Fill(cscPosition, cscType);
01693     }
01694 
01695     if (L1A_out_of_sync && getEMUHisto(h::EMU_DMB_L1A_OUT_OF_SYNC, mo)){
01696       mo->Fill(crateID, dmbID);
01697     }
01698 
01699   }
01700 
01701 }