00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "DQM/L1TMonitor/interface/L1TCSCTF.h"
00011 #include "DQMServices/Core/interface/DQMStore.h"
00012
00013
00014 #include "DataFormats/CSCDigi/interface/CSCCorrelatedLCTDigiCollection.h"
00015 #include "DataFormats/L1CSCTrackFinder/interface/L1CSCTrackCollection.h"
00016 #include "DataFormats/L1CSCTrackFinder/interface/L1CSCStatusDigiCollection.h"
00017 #include "L1Trigger/CSCCommonTrigger/interface/CSCTriggerGeometry.h"
00018 #include "Geometry/Records/interface/MuonGeometryRecord.h"
00019
00020
00021
00022 #include "DataFormats/L1CSCTrackFinder/interface/CSCTriggerContainer.h"
00023 #include "DataFormats/L1CSCTrackFinder/interface/TrackStub.h"
00024
00025
00026 using namespace std;
00027 using namespace edm;
00028
00029 L1TCSCTF::L1TCSCTF(const ParameterSet& ps)
00030
00031
00032 : gmtProducer( ps.getParameter< InputTag >("gmtProducer") ),
00033 lctProducer( ps.getParameter< InputTag >("lctProducer") ),
00034 trackProducer( ps.getParameter< InputTag >("trackProducer") ),
00035 statusProducer( ps.getParameter< InputTag >("statusProducer") ),
00036 mbProducer( ps.getParameter< InputTag >("mbProducer") )
00037
00038 {
00039
00040
00041 verbose_ = ps.getUntrackedParameter<bool>("verbose", false);
00042
00043 if(verbose_) edm::LogInfo("DataNotFound") << "L1TCSCTF: constructor...." << endl;
00044
00045
00046 dbe = NULL;
00047 if ( ps.getUntrackedParameter<bool>("DQMStore", false) )
00048 {
00049 dbe = Service<DQMStore>().operator->();
00050 dbe->setVerbose(0);
00051 }
00052
00053 outputFile_ = ps.getUntrackedParameter<string>("outputFile", "");
00054 if ( outputFile_.size() != 0 )
00055 {
00056 edm::LogInfo("DataNotFound") << "L1T Monitoring histograms will be saved to " << outputFile_.c_str() << endl;
00057 }
00058
00059 bool disable = ps.getUntrackedParameter<bool>("disableROOToutput", false);
00060 if(disable){
00061 outputFile_="";
00062 }
00063
00064
00065 if ( dbe !=NULL )
00066 {
00067 dbe->setCurrentFolder("L1T/L1TCSCTF");
00068 }
00069
00070
00071 bzero(srLUTs_,sizeof(srLUTs_));
00072 int endcap=1, sector=1;
00073 bool TMB07=true;
00074
00075 edm::ParameterSet srLUTset;
00076 srLUTset.addUntrackedParameter<bool>("ReadLUTs", false);
00077 srLUTset.addUntrackedParameter<bool>("Binary", false);
00078 srLUTset.addUntrackedParameter<std::string>("LUTPath", "./");
00079 for(int station=1,fpga=0; station<=4 && fpga<5; station++)
00080 {
00081 if(station==1)
00082 for(int subSector=0; subSector<2 && fpga<5; subSector++)
00083 srLUTs_[fpga++] = new CSCSectorReceiverLUT(endcap, sector, subSector+1, station, srLUTset, TMB07);
00084 else
00085 srLUTs_[fpga++] = new CSCSectorReceiverLUT(endcap, sector, 0, station, srLUTset, TMB07);
00086 }
00087
00088 }
00089
00090 L1TCSCTF::~L1TCSCTF()
00091 {
00092
00093 for(int i=0; i<5; i++)
00094 delete srLUTs_[i];
00095 }
00096
00097 void L1TCSCTF::beginJob(void)
00098 {
00099
00100 nev_ = 0;
00101
00102
00103 DQMStore* dbe = 0;
00104 dbe = Service<DQMStore>().operator->();
00105
00106 if( dbe )
00107 {
00108 dbe->setCurrentFolder("L1T/L1TCSCTF");
00109 dbe->rmdir("L1T/L1TCSCTF");
00110 }
00111
00112
00113 if( dbe )
00114 {
00115 dbe->setCurrentFolder("L1T/L1TCSCTF");
00116
00117
00118
00119
00120
00121
00122 csctferrors = dbe->book1D("CSCTF_errors","CSCTF Errors",6,0,6);
00123 csctferrors->setAxisTitle("Error type",1);
00124 csctferrors->setAxisTitle("Number of Errors",2);
00125 csctferrors->setBinLabel(1,"Corruptions",1);
00126 csctferrors->setBinLabel(2,"Synch. Err.",1);
00127 csctferrors->setBinLabel(3,"Synch. Mod.",1);
00128 csctferrors->setBinLabel(4,"BX mismatch",1);
00129 csctferrors->setBinLabel(5,"Time misalign.",1);
00130 csctferrors->setBinLabel(6,"FMM != Ready",1);
00131
00132
00133
00134
00135
00136
00137
00138
00139 csctfoccupancies = dbe->book2D("CSCTF_occupancies", "CSCTF Occupancies", 64,-32,31,32,0,6.2);
00140 csctfoccupancies->setAxisTitle("#eta",1);
00141 csctfoccupancies->setAxisTitle("#phi",2);
00142 csctfoccupancies->setBinLabel(1, "-2.5", 1);
00143 csctfoccupancies->setBinLabel(16,"-1.3", 1);
00144 csctfoccupancies->setBinLabel(32,"-0.9", 1);
00145 csctfoccupancies->setBinLabel(33,"0.9", 1);
00146 csctfoccupancies->setBinLabel(45,"1.3", 1);
00147 csctfoccupancies->setBinLabel(64,"2.5", 1);
00148
00149
00150
00151 haloDelEta23 = dbe->book1D("CSCTF_Halo_Eta23","Delta station 2 to station 3 Eta for Halo Muons", 40, -0.20,0.30);
00152
00153
00154 csctfTrackQ = dbe->book1D("CSCTF_Track_Q","CSC Track Mode", 16, -0.5, 15.5);
00155 csctfTrackQ->setAxisTitle("Track Type", 1);
00156 csctfTrackQ->setBinLabel(1,"No Track",1);
00157 csctfTrackQ->setBinLabel(2,"Bad Phi Road",1);
00158 csctfTrackQ->setBinLabel(3,"ME1-2-3",1);
00159 csctfTrackQ->setBinLabel(4,"ME1-2-4",1);
00160 csctfTrackQ->setBinLabel(5,"ME1-3-4",1);
00161 csctfTrackQ->setBinLabel(6,"ME2-3-4",1);
00162 csctfTrackQ->setBinLabel(7,"ME1-2",1);
00163 csctfTrackQ->setBinLabel(8,"ME1-3",1);
00164 csctfTrackQ->setBinLabel(9,"ME2-3",1);
00165 csctfTrackQ->setBinLabel(10,"ME2-4",1);
00166 csctfTrackQ->setBinLabel(11,"ME3-4",1);
00167 csctfTrackQ->setBinLabel(12,"Singles",1);
00168 csctfTrackQ->setBinLabel(13,"ME1-2,MB1",1);
00169 csctfTrackQ->setBinLabel(14,"ME1-4",1);
00170 csctfTrackQ->setBinLabel(15,"ME2,MB1",1);
00171 csctfTrackQ->setBinLabel(16,"Halo Trigger",1);
00172
00173 csctfChamberOccupancies = dbe->book2D("CSCTF_Chamber_Occupancies","CSCTF Chamber Occupancies", 54, -0.05, 5.35, 10, -5.5, 4.5);
00174 csctfChamberOccupancies->setAxisTitle("Sector (Endcap), (chambers 1-9 not labeled)",1);
00175 csctfChamberOccupancies->setBinLabel(1,"ME-4",2);
00176 csctfChamberOccupancies->setBinLabel(2,"ME-3",2);
00177 csctfChamberOccupancies->setBinLabel(3,"ME-2",2);
00178 csctfChamberOccupancies->setBinLabel(4,"ME-1b",2);
00179 csctfChamberOccupancies->setBinLabel(5,"ME-1a",2);
00180 csctfChamberOccupancies->setBinLabel(6,"ME+1a",2);
00181 csctfChamberOccupancies->setBinLabel(7,"ME+1b",2);
00182 csctfChamberOccupancies->setBinLabel(8,"ME+2",2);
00183 csctfChamberOccupancies->setBinLabel(9,"ME+3",2);
00184 csctfChamberOccupancies->setBinLabel(10,"ME+4",2);
00185 csctfChamberOccupancies->setBinLabel(1, "1(+), 7(-)",1);
00186 csctfChamberOccupancies->setBinLabel(10,"2(+), 8(-)",1);
00187 csctfChamberOccupancies->setBinLabel(19,"3(+), 9(-)",1);
00188 csctfChamberOccupancies->setBinLabel(28,"4(+), 10(-)",1);
00189 csctfChamberOccupancies->setBinLabel(37,"5(+), 11(-)",1);
00190 csctfChamberOccupancies->setBinLabel(46,"6(+), 12(-)",1);
00191
00192 csctfTrackPhi = dbe->book1D("CSCTF_Track_Phi", "CSCTF Track Phi",144,0,2*M_PI);
00193
00194 csctfTrackPhi->setAxisTitle("Track #phi", 1);
00195 csctfTrackEta = dbe->book1D("CSCTF_Track_Eta", "CSCTF Track Eta",64,-32,32);
00196
00197 csctfTrackEta->setAxisTitle("Track #eta", 1);
00198 csctfTrackEta->setBinLabel(1, "-2.5", 1);
00199 csctfTrackEta->setBinLabel(16,"-1.3", 1);
00200 csctfTrackEta->setBinLabel(32,"-0.9", 1);
00201 csctfTrackEta->setBinLabel(33,"0.9", 1);
00202 csctfTrackEta->setBinLabel(45,"1.3", 1);
00203 csctfTrackEta->setBinLabel(64,"2.5", 1);
00204
00205 csctfbx = dbe->bookProfile("CSCTF_bx","CSCTF bx", 36, 0.5, 36.5, 15, -5.5,9.5 ) ;
00206 csctfbx->setAxisTitle("Sector, Endcap, MPC Link", 1);
00207 csctfbx->setBinLabel(1,"1, +",1);
00208 csctfbx->setBinLabel(4,"2, +",1);
00209 csctfbx->setBinLabel(7,"3, +",1);
00210 csctfbx->setBinLabel(10,"4, +",1);
00211 csctfbx->setBinLabel(13,"5, +",1);
00212 csctfbx->setBinLabel(16,"6, +",1);
00213 csctfbx->setBinLabel(19,"1, -",1);
00214 csctfbx->setBinLabel(22,"2, -",1);
00215 csctfbx->setBinLabel(25,"3, -",1);
00216 csctfbx->setBinLabel(28,"4, -",1);
00217 csctfbx->setBinLabel(31,"5, -",1);
00218 csctfbx->setBinLabel(34,"6, -",1);
00219
00220 cscTrackStubNumbers = dbe->book1D("CSCTF_TrackStubs", "Number of Stubs in CSC Tracks", 5, 0.5, 5.5);
00221
00222 csctfntrack = dbe->book1D("CSCTF_ntrack","Number of CSCTracks found per event", 5, 0.5, 5.5 ) ;
00223
00224 }
00225
00226
00227 char hname [200];
00228 char htitle[200];
00229
00230 for(int i=0; i<12; i++) {
00231
00232 sprintf(hname ,"DTstubsTimeTrackMenTimeArrival_%d",i+1);
00233 sprintf(htitle,"T_{track} - T_{DT stub} sector %d",i+1);
00234
00235 DTstubsTimeTrackMenTimeArrival[i] = dbe->book2D(hname,htitle, 7,-3,3, 2,1,3);
00236 DTstubsTimeTrackMenTimeArrival[i]->getTH2F()->SetMinimum(0);
00237
00238
00239 DTstubsTimeTrackMenTimeArrival[i]->setAxisTitle("bx_{CSC track} - bx_{DT stub}",1);
00240 DTstubsTimeTrackMenTimeArrival[i]->setAxisTitle("subsector" ,2);
00241
00242 DTstubsTimeTrackMenTimeArrival[i]->setBinLabel(1,"-3",1);
00243 DTstubsTimeTrackMenTimeArrival[i]->setBinLabel(2,"-2",1);
00244 DTstubsTimeTrackMenTimeArrival[i]->setBinLabel(3,"-1",1);
00245 DTstubsTimeTrackMenTimeArrival[i]->setBinLabel(4, "0",1);
00246 DTstubsTimeTrackMenTimeArrival[i]->setBinLabel(5,"+1",1);
00247 DTstubsTimeTrackMenTimeArrival[i]->setBinLabel(6,"+2",1);
00248 DTstubsTimeTrackMenTimeArrival[i]->setBinLabel(7,"+3",1);
00249
00250 DTstubsTimeTrackMenTimeArrival[i]->setBinLabel(1,"sub1",2);
00251 DTstubsTimeTrackMenTimeArrival[i]->setBinLabel(2,"sub2",2);
00252
00253 }
00254
00255 csctfHaloL1ABXN = dbe->book1D("csctfHaloL1ABXN" ,"L1A BXN (HALO)", 3564,0,3564);
00256 csctfHaloL1ABXN->setAxisTitle("L1A (BX)",1);
00257 csctfCoincL1ABXN = dbe->book1D("csctfCoincL1ABXN","L1A BXN (COINCIDENCE)", 3564,0,3564);
00258 csctfCoincL1ABXN->setAxisTitle("L1A (BX)",1);
00259
00260
00261
00262 }
00263
00264
00265 void L1TCSCTF::endJob(void)
00266 {
00267
00268 if(verbose_) edm::LogInfo("DataNotFound") << "L1TCSCTF: end job...." << endl;
00269 LogInfo("EndJob") << "analyzed " << nev_ << " events";
00270
00271 if ( outputFile_.size() != 0 && dbe ) dbe->save(outputFile_);
00272
00273 return;
00274 }
00275
00276 void L1TCSCTF::analyze(const Event& e, const EventSetup& c)
00277 {
00278 int NumCSCTfTracksRep = 0;
00279 nev_++;
00280 if(verbose_) edm::LogInfo("DataNotFound") << "L1TCSCTF: analyze...." << endl;
00281
00282 edm::Handle<L1MuGMTReadoutCollection> pCollection;
00283 if( gmtProducer.label() != "null" )
00284 {
00285 e.getByLabel(gmtProducer,pCollection);
00286 if (!pCollection.isValid())
00287 {
00288 edm::LogInfo("DataNotFound") << "can't find L1MuGMTReadoutCollection with label ";
00289 return;
00290 }
00291
00292 L1MuGMTReadoutCollection const* gmtrc = pCollection.product();
00293 vector<L1MuGMTReadoutRecord> gmt_records = gmtrc->getRecords();
00294 vector<L1MuGMTReadoutRecord>::const_iterator RRItr;
00295
00296
00297
00298
00299
00300
00301
00302 int bxWindow = 0;
00303 int nCands = 0;
00304
00305 for( RRItr = gmt_records.begin(); RRItr != gmt_records.end(); RRItr++ ) {
00306 bxWindow++;
00307
00308
00309 vector<L1MuRegionalCand> INPCands = RRItr->getCSCCands();
00310
00311
00312 vector<L1MuRegionalCand>::const_iterator INPItr;
00313
00314 BxInEvent_ = 0;
00315 isCSCcand_ = false;
00316
00317 int nCandsBx = 0;
00318
00319 for( INPItr = INPCands.begin(); INPItr != INPCands.end(); ++INPItr ) {
00320 if(!INPItr->empty()) {
00321 nCandsBx++;
00322 nCands++;
00323 BxInEvent_ = RRItr->getBxInEvent();
00324 if (verbose_)
00325 edm::LogInfo("DataNotFound") << "cand " << nCandsBx << " -> assigned CSCTF bx: " << INPItr->bx() << endl;
00326 }
00327 }
00328 if (verbose_)
00329 if(nCandsBx)
00330 edm::LogInfo("DataNotFound") << nCandsBx << " cands in bx: " << BxInEvent_ << endl;
00331
00332 }
00333
00334 if (nCands != 1) return;
00335 else isCSCcand_ = true;
00336 if (verbose_)
00337 edm::LogInfo("DataNotFound") << "bxWindow: " << bxWindow << endl;
00338
00339
00340 int ncsctftrack = 0;
00341 if (verbose_)
00342 {
00343 edm::LogInfo("DataNotFound") << "\tCSCTFCand ntrack " << ncsctftrack << endl;
00344 }
00345 }
00346
00347 L1ABXN = -999;
00348 if( statusProducer.label() != "null" )
00349 {
00350 edm::Handle<L1CSCStatusDigiCollection> status;
00351 e.getByLabel(statusProducer.label(),statusProducer.instance(),status);
00352 bool integrity=status->first, se=false, sm=false, bx=false, af=false, fmm=false;
00353 int nStat = 0;
00354
00355 for(std::vector<L1CSCSPStatusDigi>::const_iterator stat=status->second.begin(); stat!=status->second.end(); stat++)
00356 {
00357 se |= stat->SEs()&0xFFF;
00358 sm |= stat->SMs()&0xFFF;
00359 bx |= stat->BXs()&0xFFF;
00360 af |= stat->AFs()&0xFFF;
00361 fmm|= stat->FMM()!=8;
00362
00363
00364 if(stat->VPs() != 0) {
00365 L1ABXN += stat->BXN();
00366 nStat++;
00367 }
00368
00369 }
00370
00371
00372 if(nStat!=0) L1ABXN /= nStat;
00373
00374 if(integrity) csctferrors->Fill(0.5);
00375 if(se) csctferrors->Fill(1.5);
00376 if(sm) csctferrors->Fill(2.5);
00377 if(bx) csctferrors->Fill(3.5);
00378 if(af) csctferrors->Fill(4.5);
00379 if(fmm) csctferrors->Fill(5.5);
00380 }
00381
00382 if( lctProducer.label() != "null" )
00383 {
00384 edm::ESHandle<CSCGeometry> pDD;
00385 c.get<MuonGeometryRecord>().get( pDD );
00386 CSCTriggerGeometry::setGeometry(pDD);
00387
00388 edm::Handle<CSCCorrelatedLCTDigiCollection> corrlcts;
00389 e.getByLabel(lctProducer.label(),lctProducer.instance(),corrlcts);
00390
00391 for(CSCCorrelatedLCTDigiCollection::DigiRangeIterator csc=corrlcts.product()->begin(); csc!=corrlcts.product()->end(); csc++)
00392 {
00393 CSCCorrelatedLCTDigiCollection::Range range1 = corrlcts.product()->get((*csc).first);
00394 for(CSCCorrelatedLCTDigiCollection::const_iterator lct=range1.first; lct!=range1.second; lct++)
00395 {
00396 int endcap = (*csc).first.endcap()-1;
00397 int station = (*csc).first.station()-1;
00398 int sector = (*csc).first.triggerSector()-1;
00399 int subSector = CSCTriggerNumbering::triggerSubSectorFromLabels((*csc).first);
00400 int cscId = (*csc).first.triggerCscId()-1;
00401 int fpga = ( subSector ? subSector-1 : station+1 );
00402
00403 int endcapAssignment = 1;
00404 int shift = 1;
00405 float sectorArg = sector;
00406
00407
00408 if( endcap == 1 ){
00409 endcapAssignment = -1;
00410 shift = 2;
00411
00412 }
00413
00414 int signedStation = (station + shift)* endcapAssignment;
00415 if( (station == 0) && (endcap == 0)) signedStation = subSector - 1;
00416 if( (station == 0) && (endcap == 1)) signedStation = (-1)*subSector;
00417
00418 float chamberArg1 = cscId * 0.1 + sectorArg;
00419
00420
00421
00422 float chamberArg11 = chamberArg1;
00423 if(sectorArg == 1) chamberArg1 = chamberArg11 - 0.1;
00424 if(sectorArg == 2) chamberArg1 = chamberArg11 - 0.2;
00425 if(sectorArg == 3) chamberArg1 = chamberArg11 - 0.3;
00426 if(sectorArg == 4) chamberArg1 = chamberArg11 - 0.4;
00427 if(sectorArg == 5) chamberArg1 = chamberArg11 - 0.5;
00428
00429
00430
00431 csctfChamberOccupancies->Fill(chamberArg1, signedStation);
00432 int bunchX = ( (lct->getBX()) - 6 );
00433
00434 int timingSectorArg = 3*(sector) + (lct->getMPCLink());
00435 if( endcap == 1) timingSectorArg = 3*(sector + 6) + (lct->getMPCLink());
00436
00437
00438 csctfbx->Fill(timingSectorArg, bunchX );
00439
00440
00441
00442
00443
00444
00445 if( endcap<0||endcap>1 || sector<0||sector>6 || station<0||station>3 || cscId<0||cscId>8 || fpga<0||fpga>4)
00446 {
00447 edm::LogError("L1CSCTF: CSC TP are out of range: ")<<" endcap: "<<(endcap+1)<<" station: "<<(station+1) <<" sector: "<<(sector+1)<<" subSector: "<<subSector<<" fpga: "<<fpga<<" cscId: "<<(cscId+1);
00448 continue;
00449 }
00450 lclphidat lclPhi;
00451 try {
00452 lclPhi = srLUTs_[fpga]->localPhi(lct->getStrip(), lct->getPattern(), lct->getQuality(), lct->getBend());
00453 } catch(...) {
00454 bzero(&lclPhi,sizeof(lclPhi));
00455 }
00456
00457 gblphidat gblPhi;
00458 try {
00459 gblPhi = srLUTs_[fpga]->globalPhiME(lclPhi.phi_local, lct->getKeyWG(), cscId+1);
00460 } catch(...) {
00461 bzero(&gblPhi,sizeof(gblPhi));
00462 }
00463
00464 gbletadat gblEta;
00465 try {
00466 gblEta = srLUTs_[fpga]->globalEtaME(lclPhi.phi_bend_local, lclPhi.phi_local, lct->getKeyWG(), cscId+1);
00467 } catch(...) {
00468 bzero(&gblEta,sizeof(gblEta));
00469 }
00470
00471
00472
00473
00474
00475
00476 }
00477 }
00478 }
00479
00480
00481
00482 if( trackProducer.label() != "null" )
00483 {
00484
00485 edm::Handle<L1CSCTrackCollection> tracks;
00486 e.getByLabel(trackProducer.label(),trackProducer.instance(),tracks);
00487 for(L1CSCTrackCollection::const_iterator trk=tracks->begin(); trk<tracks->end(); trk++)
00488 {
00489
00490 NumCSCTfTracksRep++;
00491 long LUTAdd = trk->first.ptLUTAddress();
00492 int trigMode = ( (LUTAdd)&0xf0000 ) >> 16;
00493 float etaReal = (trk->first.eta_packed() );
00494 if( trk->first.endcap() != 1)
00495 {
00496 float holder = etaReal;
00497 etaReal = -1*holder;
00498 etaReal -= 1;
00499 }
00500
00501 float phiReal = ((trk->first.localPhi())*(62.5/24) + (trk->first.sector() - 1)*60)*M_PI/180 ;
00502 if( phiReal > (2*M_PI) ) phiReal -= (2*M_PI);
00503
00504 csctfoccupancies->Fill( etaReal, phiReal);
00505 csctfTrackPhi->Fill(phiReal);
00506 csctfTrackEta->Fill( etaReal );
00507
00508
00509 csctfTrackQ->Fill( trigMode );
00510
00511 if( trigMode == 15 )
00512 {
00513
00514 csctfHaloL1ABXN->Fill(L1ABXN);
00515
00516
00517 double haloVals[4][4];
00518 for( int i = 0; i < 4; i++)
00519 {
00520 haloVals[i][0] = 0;
00521 }
00522
00523 edm::Handle<CSCCorrelatedLCTDigiCollection> corrlcts;
00524 e.getByLabel(lctProducer.label(),lctProducer.instance(),corrlcts);
00525 for(CSCCorrelatedLCTDigiCollection::DigiRangeIterator csc=corrlcts.product()->begin(); csc!=corrlcts.product()->end(); csc++)
00526 {
00527 CSCCorrelatedLCTDigiCollection::Range range1 = corrlcts.product()->get((*csc).first);
00528 for(CSCCorrelatedLCTDigiCollection::const_iterator lct=range1.first; lct!=range1.second; lct++)
00529 {
00530 int endcap = (*csc).first.endcap()-1;
00531 int station = (*csc).first.station()-1;
00532 int sector = (*csc).first.triggerSector()-1;
00533 int cscId = (*csc).first.triggerCscId()-1;
00534 int subSector = CSCTriggerNumbering::triggerSubSectorFromLabels((*csc).first);
00535 int fpga = ( subSector ? subSector-1 : station+1 );
00536
00537 if( (station == 1) || (station == 2) )
00538 {
00539 int modEnd = 1;
00540 if( endcap == 0 ) modEnd = -1;
00541
00542 int indexHalo = modEnd + station;
00543 if(haloVals[indexHalo][0] == 1.0) haloVals[indexHalo][3] = 1.0;
00544 if(haloVals[indexHalo][0] == 0) haloVals[indexHalo][0] = 1.0;
00545 haloVals[indexHalo][1] = sector*1.0;
00546
00547 lclphidat lclPhi;
00548 lclPhi = srLUTs_[fpga]->localPhi(lct->getStrip(), lct->getPattern(), lct->getQuality(), lct->getBend());
00549
00550 gblphidat gblPhi;
00551 gblPhi = srLUTs_[fpga]->globalPhiME(lclPhi.phi_local, lct->getKeyWG(), cscId+1);
00552
00553 gbletadat gblEta;
00554 gblEta = srLUTs_[fpga]->globalEtaME(lclPhi.phi_bend_local, lclPhi.phi_local, lct->getKeyWG(), cscId+1);
00555
00556 haloVals[indexHalo][2] = gblEta.global_eta/127. * 1.5 + 0.9;
00557 }
00558 }
00559 }
00560
00561 if( (haloVals[0][0] == 1.) && (haloVals[1][0] == 1.) && (haloVals[0][3] != 1.) && (haloVals[1][3] != 1.) )
00562 {
00563 if( haloVals[0][1] == haloVals[1][1] ){
00564 double delEta23 = haloVals[1][2] - haloVals[0][2];
00565 haloDelEta23->Fill( delEta23 );
00566 }
00567 }
00568
00569 if( (haloVals[2][0] == 1.) && (haloVals[3][0] == 1.) && (haloVals[2][3] != 1.) && (haloVals[3][3] != 1.) )
00570 {
00571 if( haloVals[2][1] == haloVals[3][1] ){
00572 double delEta23 = haloVals[3][2] - haloVals[2][2];
00573 haloDelEta23->Fill( delEta23 );
00574 }
00575 }
00576 }
00577
00578 int cscTrackStub = 0;
00579
00580 CSCCorrelatedLCTDigiCollection lctsOfTracks=trk->second;
00581
00582 for(CSCCorrelatedLCTDigiCollection::DigiRangeIterator trackStub=lctsOfTracks.begin(); trackStub!=lctsOfTracks.end(); trackStub++)
00583 {
00584 CSCCorrelatedLCTDigiCollection::Range range2 = lctsOfTracks.get((*trackStub).first);
00585 for(CSCCorrelatedLCTDigiCollection::const_iterator lct=range2.first; lct!=range2.second; lct++)
00586 {
00587 cscTrackStub++;
00588 }
00589 }
00590
00591
00592
00593
00594 cscTrackStubNumbers->Fill(cscTrackStub);
00595
00596
00597
00598
00599 if( trigMode > 0 && trigMode !=15 && trigMode != 11 )
00600 csctfCoincL1ABXN->Fill(L1ABXN);
00601
00602
00603
00604 }
00605 }
00606 csctfntrack->Fill(NumCSCTfTracksRep);
00607
00608
00609
00610 if( mbProducer.label() != "null" ) {
00611
00612
00613 edm::Handle<CSCTriggerContainer<csctf::TrackStub> > dtStubs;
00614 e.getByLabel(mbProducer.label(), mbProducer.instance(), dtStubs);
00615
00616 edm::Handle<L1CSCTrackCollection> tracks;
00617 e.getByLabel(trackProducer.label(),trackProducer.instance(),tracks);
00618
00619
00620 std::vector<csctf::TrackStub> vstubs = dtStubs->get();
00621 for(std::vector<csctf::TrackStub>::const_iterator stub=vstubs.begin();
00622 stub!=vstubs.end(); stub++){
00623
00624 if (verbose_) {
00625 edm::LogInfo("DataNotFound") << "\n mbEndcap: " << stub->endcap();
00626 edm::LogInfo("DataNotFound") << "\n stub->getStrip()[FLAG]: " << stub->getStrip();
00627 edm::LogInfo("DataNotFound") << "\n stub->getKeyWG()[CAL]: " << stub->getKeyWG();
00628 edm::LogInfo("DataNotFound") << "\n stub->BX(): " << stub->BX();
00629 edm::LogInfo("DataNotFound") << "\n stub->sector(): " << stub->sector();
00630 edm::LogInfo("DataNotFound") << "\n stub->subsector(): " << stub->subsector();
00631 edm::LogInfo("DataNotFound") << "\n stub->station(): " << stub->station();
00632 edm::LogInfo("DataNotFound") << "\n stub->phiPacked(): " << stub->phiPacked();
00633 edm::LogInfo("DataNotFound") << "\n stub->getBend(): " << stub->getBend();
00634 edm::LogInfo("DataNotFound") << "\n stub->getQuality(): " << stub->getQuality();
00635 edm::LogInfo("DataNotFound") << "\n stub->cscid(): " << stub->cscid() << endl;
00636 }
00637
00638
00639 int mbId = (stub->endcap()==2) ? 6 : 0;
00640 mbId += stub->sector();
00641
00642
00643
00644
00645
00646
00647 if (stub->getKeyWG() == 0) {
00648
00649
00650 int bxDT = stub->BX()-stub->getStrip();
00651 int subDT = stub->subsector();
00652
00653
00654 if (isCSCcand_){
00655
00656
00657 int trkBX = 0;
00658 for(L1CSCTrackCollection::const_iterator trk=tracks->begin();
00659 trk<tracks->end(); trk++){
00660
00661 trkBX = trk->first.BX();
00662
00663 int trkId = (trk->first.endcap()==2) ? 6 : 0;
00664 trkId += trk->first.sector();
00665
00666 if (verbose_){
00667 edm::LogInfo("DataNotFound") << "\n trk BX: " << trkBX
00668 << " Sector: " << trkId
00669 << " SubSector: " << trk->first.subsector()
00670 << " Endcap: " << trk->first.endcap();
00671
00672 edm::LogInfo("DataNotFound") << "\n DT BX: " << stub->BX()
00673 << " Sector: " << mbId
00674 << " SubSector: " << stub->subsector()
00675 << " Endcap: " << stub->endcap() << endl;
00676 }
00677
00678 if (mbId == trkId) {
00679 if (verbose_) {
00680 edm::LogInfo("DataNotFound") << " --> MATCH" << endl;
00681 edm::LogInfo("DataNotFound") << "Fill :" << trkBX+6-bxDT << " -- " << subDT << " -- cands" << endl;
00682 }
00683
00684
00685 DTstubsTimeTrackMenTimeArrival[mbId-1]->Fill(bxDT-trkBX-6,subDT);
00686 }
00687 }
00688
00689 }
00690 }
00691
00692 }
00693 }
00694
00695
00696 }