00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110 #include <iostream>
00111 #include <sstream>
00112 #include <fstream>
00113 #include <vector>
00114
00115
00116 #include "FWCore/ServiceRegistry/interface/Service.h"
00117 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00118
00119 #include "DQM/L1TMonitor/interface/L1TDTTF.h"
00120 #include "DataFormats/L1DTTrackFinder/interface/L1MuDTChambPhContainer.h"
00121 #include "DataFormats/L1DTTrackFinder/interface/L1MuDTChambPhDigi.h"
00122 #include "DataFormats/L1DTTrackFinder/interface/L1MuDTChambThContainer.h"
00123 #include "DataFormats/L1DTTrackFinder/interface/L1MuDTChambThDigi.h"
00124 #include "DataFormats/L1DTTrackFinder/interface/L1MuDTTrackContainer.h"
00125 #include "DQMServices/Core/interface/DQMStore.h"
00126
00127 using namespace std;
00128 using namespace edm;
00129
00130 L1TDTTF::L1TDTTF(const ParameterSet& ps)
00131 : dttpgSource_( ps.getParameter< InputTag >("dttpgSource") )
00132 {
00133
00134 l1tinfofolder = ps.getUntrackedParameter<string>("l1tInfoFolder", "L1T/EventInfo") ;
00135 l1tsubsystemfolder = ps.getUntrackedParameter<string>("l1tSystemFolder", "L1T/L1TDTTF") ;
00136
00137
00138 verbose_ = ps.getUntrackedParameter<bool>("verbose", false);
00139
00140 if(verbose_) cout << "L1TDTTF: constructor...." << endl;
00141
00142
00143 dbe = NULL;
00144 if ( ps.getUntrackedParameter<bool>("DQMStore", false) )
00145 {
00146 dbe = Service<DQMStore>().operator->();
00147 dbe->setVerbose(0);
00148 }
00149
00150 outputFile_ = ps.getUntrackedParameter<string>("outputFile", "");
00151 if ( outputFile_.size() != 0 ) {
00152 cout << "L1T Monitoring histograms will be saved to " << outputFile_.c_str() << endl;
00153 }
00154
00155 bool disable = ps.getUntrackedParameter<bool>("disableROOToutput", false);
00156 if(disable){
00157 outputFile_="";
00158 }
00159
00160
00161 if ( dbe !=NULL ) {
00162
00163 dbe->setCurrentFolder(l1tsubsystemfolder);
00164 }
00165
00166
00167 }
00168
00169 L1TDTTF::~L1TDTTF()
00170 {
00171 }
00172
00173 void L1TDTTF::beginJob(const EventSetup& c)
00174 {
00175
00176 nev_ = 0;
00177 nev_dttf = 0;
00178 nev_dttf_track2 = 0;
00179
00180
00181
00182 for(int m=0; m<6; m++)
00183 for(int n=0; n<12; n++)
00184 { nHighQual[m][n] = 0; nHighQual_2ndTrack[m][n] = 0; n2ndTrack[m][n] = 0;
00185 nOccupancy_integ[m][n]=0; nOccupancy_integ_2ndTrack[m][n]=0;}
00186
00187 for(int m=0; m<6; m++)
00188 for(int n=0; n<3; n++)
00189 {nBx[m][n] = 0; nBx_2ndTrack[m][n] = 0;}
00190
00191 for(int m=0; m<64; m++)
00192 for(int n=0; n<144; n++){
00193 nOccupancy_integ_phi_eta[m][n] = 0;
00194 nOccupancy_integ_phi_eta_2ndTrack[m][n] = 0;
00195 for(int k=0; k<6; k++)
00196 nOccupancy_wheel_phi_eta[m][n][k] = 0;
00197 }
00198
00199
00200 DQMStore* dbe = 0;
00201 dbe = Service<DQMStore>().operator->();
00202
00203
00204
00205
00206
00207
00208 if ( dbe )
00209 {
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231 string dttf_trk_folder = l1tsubsystemfolder+"/DTTF_TRACKS";
00232
00233 char hname[40];
00234 char mename[40];
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457 dbe->setCurrentFolder(dttf_trk_folder);
00458
00459 for(int iwh=0;iwh<6;iwh++){
00460 int twh=iwh-3;
00461 if(iwh>=3) twh+=1;
00462
00463
00464
00465 string whn;
00466
00467
00468 switch(iwh){
00469 case 0: whn = "N2"; break;
00470 case 1: whn = "N1"; break;
00471 case 2: whn = "N0"; break;
00472 case 3: whn = "P0"; break;
00473 case 4: whn = "P1"; break;
00474 case 5: whn = "P2"; break;
00475 }
00476
00477 const char *c_whn = whn.c_str();
00478
00479 string dttf_trk_folder_wheel = dttf_trk_folder + "/WHEEL_" + whn;
00480 dbe->setCurrentFolder(dttf_trk_folder_wheel);
00481
00482
00483 sprintf(hname,"dttf_nTracks_wh%s",c_whn);
00484 sprintf(mename,"Wheel %s - Number of Tracks",c_whn);
00485 dttf_nTracks_wheel[iwh] = dbe->book1D(mename,hname,12,0.5,12.5);
00486 dttf_nTracks_wheel[iwh]->setAxisTitle("sector",1);
00487
00488 sprintf(hname,"dttf_nTracksPerEvent_wh%s",c_whn);
00489 sprintf(mename,"Wheel %s - Num Tracks Per Event",c_whn);
00490 dttf_nTracksPerEvent_wheel[iwh] = dbe->book1D(mename,hname,11,-0.5,10.5);
00491 dttf_nTracksPerEvent_wheel[iwh]->setAxisTitle("number of tracks",1);
00492
00493
00494 for(int ibx=0;ibx<3;ibx++){
00495 int tbx=ibx-1;
00496
00497
00498
00499
00500
00501 string bxn;
00502
00503
00504 switch(ibx){
00505 case 0: bxn = "N1"; break;
00506 case 1: bxn = "0"; break;
00507 case 2: bxn = "P1"; break;
00508 }
00509
00510 string dttf_trk_folder_bx = dttf_trk_folder_wheel + "/BX_" + bxn;
00511 dbe->setCurrentFolder(dttf_trk_folder_bx);
00512
00513
00514 string dttf_trk_folder_quality = dttf_trk_folder_bx + "/Quality";
00515 dbe->setCurrentFolder(dttf_trk_folder_quality);
00516
00517 for(int ise=0;ise<12;ise++){
00518 sprintf(hname,"dttf_p_qual_bx%d_wh%s_se%d",tbx,c_whn,ise+1);
00519 sprintf(mename,"Packed Quality bx%d wh%s se%d",tbx,c_whn,ise+1);
00520 dttf_p_qual[ibx][iwh][ise] = dbe->book1D(mename,hname,8,-0.5,7.5);
00521 }
00522
00523
00524 string dttf_trk_folder_phi = dttf_trk_folder_bx + "/Phi";
00525 dbe->setCurrentFolder(dttf_trk_folder_phi);
00526
00527 for(int ise=0;ise<12;ise++){
00528 sprintf(hname,"dttf_p_phi_bx%d_wh%s_se%d",tbx,c_whn,ise+1);
00529 sprintf(mename,"Packed Phi bx%d wh%s se%d",tbx,c_whn,ise+1);
00530 dttf_p_phi[ibx][iwh][ise] = dbe->book1D(mename,hname,144,-0.5,144.5);
00531
00532 }
00533
00534
00535 string dttf_trk_folder_eta = dttf_trk_folder_bx + "/Eta";
00536 dbe->setCurrentFolder(dttf_trk_folder_eta);
00537
00538 for(int ise=0;ise<12;ise++){
00539 sprintf(hname,"dttf_p_eta_bx%d_wh%s_se%d",tbx,c_whn,ise+1);
00540 sprintf(mename,"Packed Eta bx%d wh%s se%d",tbx,c_whn,ise+1);
00541 dttf_p_eta[ibx][iwh][ise] = dbe->book1D(mename,hname,64,-32.5,32.5);
00542 }
00543
00544
00545 string dttf_trk_folder_pt = dttf_trk_folder_bx + "/PT";
00546 dbe->setCurrentFolder(dttf_trk_folder_pt);
00547
00548 for(int ise=0;ise<12;ise++){
00549 sprintf(hname,"dttf_p_pt_bx%d_wh%s_se%d",tbx,c_whn,ise+1);
00550 sprintf(mename,"Packed PT bx%d wh%s se%d",tbx,c_whn,ise+1);
00551 dttf_p_pt[ibx][iwh][ise]= dbe->book1D(mename,hname,32,-0.5,31.5);
00552 }
00553
00554
00555 string dttf_trk_folder_charge = dttf_trk_folder_bx + "/Charge";
00556 dbe->setCurrentFolder(dttf_trk_folder_charge);
00557
00558 for(int ise=0;ise<12;ise++){
00559 sprintf(hname,"dttf_p_q_bx%d_wh%s_se%d",tbx,c_whn,ise+1);
00560 sprintf(mename,"Packed Charge bx%d wh%s se%d",tbx,c_whn,ise+1);
00561 dttf_p_q[ibx][iwh][ise] = dbe->book1D(mename,hname,2,-0.5,1.5);
00562 }
00563
00564
00565 string dttf_trk_folder_nTracksPerEvent = dttf_trk_folder_bx+"/TracksPerEvent";
00566 dbe->setCurrentFolder(dttf_trk_folder_nTracksPerEvent);
00567
00568 for(int ise=0;ise<12;ise++){
00569 sprintf(hname,"dttf_nTrksPerEv_bx%d_wh%s_se%d",tbx,c_whn,ise+1);
00570 sprintf(mename,"Num Tracks Per Event bx%d wh%s se%d",tbx,c_whn,ise+1);
00571 dttf_nTrksPerEv[ibx][iwh][ise] = dbe->book1D(mename,hname,2,0.5,2.5);
00572 dttf_nTrksPerEv[ibx][iwh][ise]->setAxisTitle("number of tracks",1);
00573 }
00574
00575 }
00576
00577
00578 dbe->setCurrentFolder(dttf_trk_folder_wheel);
00579 sprintf(hname,"dttf_p_phi_eta_wh%s",c_whn);
00580 sprintf(mename, "Wheel %s - Packed Phi vs Eta",c_whn);
00581 dttf_p_phi_eta_wheel[iwh] = dbe->book2D(mename,hname,64,-0.5,64.5,144,-0.5,143.5);
00582
00583
00584 sprintf(hname,"dttf_n2ndTracks_wh%s",c_whn);
00585 sprintf(mename, "Wheel %s - 2nd Tracks",c_whn);
00586 dttf_n2ndTracks_wheel[iwh] = dbe->book1D(mename,hname,12,0.5,12.5);
00587
00588 sprintf(hname,"dttf_bx_wh%s",c_whn);
00589 sprintf(mename, "Wheel %s - BX",c_whn);
00590 dttf_bx_wheel[iwh] = dbe->book1D(mename,hname,3,-1.5,1.5);
00591
00592
00593
00594 string dttf_trk_folder_wh_bxsec_all = dttf_trk_folder_wheel + "/BX_SECTORS/ALL";
00595 dbe->setCurrentFolder(dttf_trk_folder_wh_bxsec_all);
00596
00597 for(int ise=0;ise<12;ise++){
00598 sprintf(hname,"dttf_bx_wh%s_se%d",c_whn,ise+1);
00599 sprintf(mename, "BX - wh%s se%d",c_whn,ise+1);
00600 dttf_bx[iwh][ise] = dbe->book1D(mename,hname,3,-1.5,1.5);
00601 }
00602
00603 string dttf_trk_folder_wh_bxsec_trk2 = dttf_trk_folder_wheel + "/BX_SECTORS/TRACK_2_ONLY";
00604 dbe->setCurrentFolder(dttf_trk_folder_wh_bxsec_trk2);
00605
00606 for(int ise=0;ise<12;ise++){
00607 sprintf(hname,"dttf_bx_2ndTrack_wh%s_se%d",c_whn,ise+1);
00608 sprintf(mename, "BX - 2nd Tracks only - wh%s se%d",c_whn,ise+1);
00609 dttf_bx_2ndTrack[iwh][ise] = dbe->book1D(mename,hname,3,-1.5,1.5);
00610 }
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628 }
00629
00630
00631
00632 string dttf_trk_folder_integrated = dttf_trk_folder + "/INTEG";
00633 dbe->setCurrentFolder(dttf_trk_folder_integrated);
00634
00635
00636 sprintf(hname,"dttf_p_phi_integ");
00637 sprintf(mename,"Integrated Packed Phi");
00638 dttf_p_phi_integ = dbe->book1D(mename,hname,144,-0.5,143.5);
00639
00640
00641
00642
00643
00644
00645
00646
00647
00648 sprintf(hname,"dttf_p_eta_integ");
00649 sprintf(mename,"Integrated Packed Eta");
00650 dttf_p_eta_integ = dbe->book1D(mename,hname,64,-0.5,64.5);
00651
00652 sprintf(hname,"dttf_p_pt_integ");
00653 sprintf(mename,"Integrated Packed Pt");
00654 dttf_p_pt_integ = dbe->book1D(mename,hname,32,-0.5,31.5);
00655
00656 sprintf(hname,"dttf_p_qual_integ");
00657 sprintf(mename,"Integrated Packed Quality");
00658 dttf_p_qual_integ = dbe->book1D(mename,hname,8,-0.5,7.5);
00659
00660 sprintf(hname,"dttf_p_q_integ");
00661 sprintf(mename,"Integrated Packed Charge");
00662 dttf_p_q_integ = dbe->book1D(mename,hname,2,-0.5,1.5);
00663
00664 sprintf(hname,"dttf_bx_integ");
00665 sprintf(mename,"Integrated BX");
00666 dttf_bx_integ = dbe->book1D(mename,hname,3,-1.5,1.5);
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679 sprintf(hname,"dttf_nTracksPerEvent_integ");
00680 sprintf(mename,"Num Tracks Per Event");
00681 dttf_nTracksPerEvent_integ = dbe->book1D(mename,hname,21,-0.5,20.5);
00682 dttf_nTracksPerEvent_integ->setAxisTitle("number of tracks",1);
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695 sprintf(hname,"dttf_p_phi_eta_integ");
00696 sprintf(mename,"Occupancy Phi vs Eta");
00697 dttf_p_phi_eta_integ = dbe->book2D(mename,hname,64,-0.5,64.5,144,-0.5,143.5);
00698
00699
00700 sprintf(hname,"bx_Summary");
00701 sprintf(mename,"BX Summary");
00702 dttf_bx_Summary = dbe->book2D(mename,hname,6,0,6,3,-1,2);
00703
00704
00705 sprintf(hname,"Occupancy_Summary");
00706 sprintf(mename,"Occupancy Summary");
00707 dttf_occupancySummary = dbe->book2D(mename,hname,6,0,6,12,1,13);
00708
00709
00710 sprintf(hname,"Occupancy_Summary_r");
00711 sprintf(mename,"Occupancy Summary - Reset");
00712 dttf_occupancySummary_r = dbe->book2D(mename,hname,6,0,6,12,1,13);
00713 dttf_occupancySummary_r->setResetMe(true);
00714
00715
00716 sprintf(hname,"highQual_Summary");
00717 sprintf(mename,"Fractional High Quality Summary");
00718 dttf_highQual_Summary = dbe->book2D(mename,hname,6,0,6,12,1,13);
00719
00720
00721
00722 sprintf(hname,"dttf_2ndTrack_Summary");
00723 sprintf(mename,"2nd Track Summary");
00724 dttf_2ndTrack_Summary = dbe->book2D(mename,hname,6,0,6,12,1,13);
00725
00726
00727
00728 string dttf_trk_folder_integrated_2ndtrack = dttf_trk_folder_integrated + "/2ND_TRACK_ONLY";
00729 dbe->setCurrentFolder(dttf_trk_folder_integrated_2ndtrack);
00730
00731
00732 sprintf(hname,"dttf_p_phi_integ_2ndTrack");
00733 sprintf(mename,"Integrated Packed Phi");
00734 dttf_p_phi_integ_2ndTrack = dbe->book1D(mename,hname,144,-0.5,143.5);
00735
00736 sprintf(hname,"dttf_p_eta_integ_2ndTrack");
00737 sprintf(mename,"Integrated Packed Eta");
00738 dttf_p_eta_integ_2ndTrack = dbe->book1D(mename,hname,64,-0.5,64.5);
00739
00740 sprintf(hname,"dttf_p_pt_integ_2ndTrack");
00741 sprintf(mename,"Integrated Packed Pt");
00742 dttf_p_pt_integ_2ndTrack = dbe->book1D(mename,hname,32,-0.5,31.5);
00743
00744 sprintf(hname,"dttf_p_qual_integ_2ndTrack");
00745 sprintf(mename,"Integrated Packed Quality");
00746 dttf_p_qual_integ_2ndTrack = dbe->book1D(mename,hname,8,-0.5,7.5);
00747
00748 sprintf(hname,"dttf_p_q_integ_2ndTrack");
00749 sprintf(mename,"Integrated Packed Charge");
00750 dttf_p_q_integ_2ndTrack = dbe->book1D(mename,hname,2,-0.5,1.5);
00751
00752 sprintf(hname,"dttf_bx_integ_2ndTrack");
00753 sprintf(mename,"Integrated BX");
00754 dttf_bx_integ_2ndTrack = dbe->book1D(mename,hname,3,-1.5,1.5);
00755
00756 sprintf(hname,"dttf_nTracks_integ_2ndTrack");
00757 sprintf(mename,"Integrated Num Tracks");
00758 dttf_nTracks_integ_2ndTrack = dbe->book1D(mename,hname,6,0,6);
00759
00760
00761
00762
00763
00764
00765
00766 sprintf(hname,"dttf_p_phi_eta_integ_2ndTrack");
00767 sprintf(mename,"Occupancy Phi vs Eta");
00768 dttf_p_phi_eta_integ_2ndTrack = dbe->book2D(mename,hname,64,-0.5,64.5,144,-0.5,143.5);
00769
00770
00771 sprintf(hname,"bx_Summary_2ndTrack");
00772 sprintf(mename,"BX Summary");
00773 dttf_bx_Summary_2ndTrack = dbe->book2D(mename,hname,6,0,6,3,-1,2);
00774
00775
00776 sprintf(hname,"Occupancy_Summary_2ndTrack");
00777 sprintf(mename,"Occupancy Summary");
00778 dttf_occupancySummary_2ndTrack = dbe->book2D(mename,hname,6,0,6,12,1,13);
00779
00780
00781 sprintf(hname,"highQual_Summary_2ndTrack");
00782 sprintf(mename,"Fractional High Quality Summary");
00783 dttf_highQual_Summary_2ndTrack = dbe->book2D(mename,hname,6,0,6,12,1,13);
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801
00802
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835
00836
00837
00838
00839
00840
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850 }
00851 }
00852
00853
00854
00855 void L1TDTTF::endJob(void)
00856 {
00857 if(verbose_) cout << "L1TDTTF: end job...." << endl;
00858 LogInfo("EndJob") << "analyzed " << nev_ << " events";
00859
00860 if ( outputFile_.size() != 0 && dbe ) dbe->save(outputFile_);
00861
00862
00863
00864
00865
00866
00867 return;
00868 }
00869
00870 void L1TDTTF::analyze(const Event& e, const EventSetup& c)
00871 {
00872 nev_++;
00873 dttf_track = false;
00874 dttf_track_2 = false;
00875 if(verbose_) cout << "L1TDTTF: analyze...." << endl;
00876
00877
00878
00879
00880
00882
00883
00884
00885
00886
00887
00888
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903
00904
00905
00906
00907
00908
00909
00910
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920
00921
00922
00923
00924
00925
00926
00927
00928
00929
00930
00931
00932
00933
00934
00935
00936
00937
00938
00939
00940
00941
00942
00943
00944
00945
00946
00947
00948
00949
00950
00951
00952
00953
00954
00955
00956
00957
00958
00959
00960
00961
00962
00963
00964
00965
00966
00967
00968
00969
00970
00971
00972
00973
00974
00975
00976
00977
00978
00979
00980
00981
00982
00983
00984
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994
00995
00996
00997
00998
00999
01000
01001
01002
01003
01004
01005
01006
01007
01008
01009
01010
01011
01012
01013
01014
01015
01016
01017
01018
01019
01020
01021
01022
01023
01024
01025
01026
01027
01028
01029
01030
01031
01032
01033
01034
01035
01036
01037
01038
01039
01040
01041
01042
01043
01044
01045
01046
01047
01048
01049
01050
01051
01052
01053
01054
01055
01056
01057
01058
01059
01060
01061
01062
01063
01064
01065
01066
01067
01068
01069
01070
01071
01072
01073
01074
01075
01076
01077
01078
01079
01080
01081
01082
01083
01084
01085
01086
01087
01088
01089
01090
01091
01092
01093
01094
01095
01096
01097
01098
01099
01100
01101
01102
01103
01104
01105
01106
01107
01108
01109
01110
01111
01112
01113
01114
01115
01116
01117
01118
01119
01120
01121
01122
01123
01124
01125
01126
01127
01128
01129
01130
01131
01132
01133
01134
01135
01136
01137
01138
01139
01140
01141
01142
01143
01144
01145
01146
01147
01148
01149
01150
01151
01152
01153
01154
01155
01156
01157
01158
01159
01160
01161
01162
01164
01165
01166
01167
01168 edm::Handle<L1MuDTTrackContainer > myL1MuDTTrackContainer;
01169
01170 std::string trstring;
01171 trstring = dttpgSource_.label()+":"+"DATA"+":"+dttpgSource_.process();
01172 edm::InputTag trInputTag(trstring);
01173 e.getByLabel(trInputTag,myL1MuDTTrackContainer);
01174
01175 if (!myL1MuDTTrackContainer.isValid()) {
01176 edm::LogInfo("DataNotFound") << "can't find L1MuDTTrackContainer with label "
01177 << dttpgSource_.label() ;
01178 return;
01179 }
01180
01181 L1MuDTTrackContainer::TrackContainer *t = myL1MuDTTrackContainer->getContainer();
01182
01183 int numTracks[3][6][12];
01184 for(int k=0; k<3; k++)
01185 for(int l=0; l<6; l++)
01186 for(int m=0; m<12; m++)
01187 numTracks[k][l][m] = 0;
01188
01189 int numTracks_wh[6];
01190
01191 for(int k=0; k<6; k++) {
01192 numTracks_wh[k]=0;
01193
01194 }
01195
01196
01197
01198 int numTracks_integ = 0;
01199 int numTracks_integ_2ndTrack = 0;
01200
01201
01203
01204
01205
01206
01207
01208
01209
01210
01211
01212
01213
01214
01215
01216
01217
01218
01219
01220
01221
01222
01223
01224
01225
01226
01227
01228
01229
01230
01231
01232
01233
01234
01235
01236
01237
01238
01239
01240
01241
01242
01243
01244
01245
01246
01247
01248
01249
01250
01251
01253
01254
01255
01256
01257 for ( L1MuDTTrackContainer::TrackContainer::const_iterator i
01258 = t->begin(); i != t->end(); ++i ) {
01259 dttf_track = true;
01260 if(i->TrkTag() == 1)
01261 dttf_track_2 = true;
01262 }
01263 if(dttf_track == true) nev_dttf++;
01264 if(dttf_track_2 == true) nev_dttf_track2++;
01265
01266 for ( L1MuDTTrackContainer::TrackContainer::const_iterator i
01267 = t->begin(); i != t->end(); ++i ) {
01268 if ( verbose_ ) {
01269 std::cout << "bx = " << i->bx()
01270 << std::endl;
01271 std::cout << "quality (packed) = " << i->quality_packed()
01272 << std::endl;
01273 std::cout << "pt (packed) = " << i->pt_packed() << " , pt (GeV) = " << i->ptValue()
01274 << std::endl;
01275 std::cout << "phi (packed) = " << i->phi_packed() << " , phi (rad) = " << i->phiValue()
01276 << std::endl;
01277 std::cout << "charge (packed) = " << i->charge_packed()
01278 << std::endl;
01279 }
01280
01281 int bxindex = i->bx() + 1;
01282 int wh = i->whNum();
01283 int se = i->scNum();
01284
01285
01286
01287
01288
01289
01290
01291
01292
01293 int wh2;
01294 if(wh<0)wh2=wh+3;
01295 else wh2=wh+2;
01296
01297 numTracks[bxindex][wh2][se]++;
01298 nBx[wh2][bxindex]++;
01299
01300
01301 dttf_bx[wh2][se]->Fill(i->bx());
01302
01303 if(i->TrkTag() == 1) {
01304 nBx_2ndTrack[wh2][bxindex]++;
01305 dttf_bx_2ndTrack[wh2][se]->Fill(i->bx());
01306 }
01307 int phi_local = i->phi_packed();
01308 if(phi_local > 15) phi_local -= 32;
01309
01310 int phi_global = phi_local + se*12;
01311 if(phi_global < 0) phi_global = 144;
01312 if(phi_global > 143) phi_global -= 144;
01313
01314
01315
01316 dttf_p_phi[bxindex][wh2][se]->Fill(phi_global);
01317
01318 dttf_p_qual[bxindex][wh2][se]->Fill(i->quality_packed());
01319 dttf_p_pt[bxindex][wh2][se]->Fill(i->pt_packed());
01320 dttf_p_q[bxindex][wh2][se]->Fill(i->charge_packed());
01321
01322 int eta_global = i->eta_packed();
01323
01324 dttf_p_eta[bxindex][wh2][se]->Fill(eta_global);
01325
01326
01327 if(bxindex==1){
01328
01329 nOccupancy_integ[wh2][se]++;
01330 nOccupancy_integ_phi_eta[eta_global][phi_global]++;
01331 nOccupancy_wheel_phi_eta[eta_global][phi_global][wh2]++;
01332
01333 numTracks_integ++;
01334 numTracks_wh[wh2]++;
01335
01336
01337 dttf_p_phi_integ->Fill(phi_global);
01338 dttf_p_pt_integ->Fill(i->pt_packed());
01339 dttf_p_eta_integ->Fill(i->eta_packed());
01340
01341 dttf_p_qual_integ->Fill(i->quality_packed());
01342 dttf_p_q_integ->Fill(i->charge_packed());
01343
01344
01345
01346
01347
01348
01349
01350
01351 if(nev_dttf) dttf_p_phi_eta_wheel[wh2]->setBinContent(eta_global+1,phi_global+1,nOccupancy_wheel_phi_eta[eta_global][phi_global][wh2]/(float)nev_dttf);
01352
01353
01354 if(nev_dttf) dttf_p_phi_eta_integ->setBinContent(eta_global+1,phi_global+1,nOccupancy_integ_phi_eta[eta_global][phi_global]/(float)nev_dttf);
01355
01356
01357
01358 if(nev_dttf){
01359 dttf_occupancySummary->setBinContent(wh2+1,se+1, nOccupancy_integ[wh2][se]/(float)nev_dttf);
01360 dttf_occupancySummary_r->setBinContent(wh2+1,se+1, nOccupancy_integ[wh2][se]/(float)nev_dttf);
01361
01362 }
01363
01364 dttf_nTracks_wheel[wh2]->Fill(se+1);
01365
01366
01367 if(i->quality_packed()>3)
01368 nHighQual[wh2][se]++;
01369
01370 if(i->TrkTag()== 1){
01371 nOccupancy_integ_2ndTrack[wh2][se]++;
01372 nOccupancy_integ_phi_eta_2ndTrack[eta_global][phi_global]++;
01373
01374
01375 numTracks_integ_2ndTrack++;
01376 dttf_p_phi_integ_2ndTrack->Fill(phi_global);
01377 dttf_p_eta_integ_2ndTrack->Fill(i->eta_packed());
01378 dttf_p_pt_integ_2ndTrack->Fill(i->pt_packed());
01379 dttf_p_qual_integ_2ndTrack->Fill(i->quality_packed());
01380 dttf_p_q_integ_2ndTrack->Fill(i->charge_packed());
01381
01382
01383 if(nev_dttf_track2) dttf_p_phi_eta_integ_2ndTrack->setBinContent(eta_global+1,phi_global+1,nOccupancy_integ_phi_eta_2ndTrack[eta_global][phi_global]/(float)nev_dttf_track2);
01384
01385
01386 if(nev_dttf_track2){
01387
01388 dttf_occupancySummary_2ndTrack->setBinContent(wh2+1,se+1, nOccupancy_integ_2ndTrack[wh2][se]/(float)nev_dttf_track2);
01389 }
01390
01391 n2ndTrack[wh2][se]++;
01392 dttf_n2ndTracks_wheel[wh2]->Fill(se+1);
01393 dttf_nTracks_integ_2ndTrack->Fill(wh2);
01394 if(i->quality_packed()>3)
01395 nHighQual_2ndTrack[wh2][se]++;
01396 }
01397
01398
01399 }
01400
01401 dttf_bx_wheel[wh2]->Fill(i->bx());
01402 dttf_bx_integ->Fill(i->bx());
01403
01404 if(nev_dttf) dttf_bx_Summary->setBinContent(wh2+1,bxindex+1,nBx[wh2][bxindex]/(float)nev_dttf);
01405
01406
01407 if(i->TrkTag() == 1){
01408
01409 dttf_bx_integ_2ndTrack->Fill(i->bx());
01410 if(nev_dttf_track2)
01411
01412 dttf_bx_Summary_2ndTrack->setBinContent(wh2+1,bxindex+1,nBx_2ndTrack[wh2][bxindex]/(float)nev_dttf_track2);
01413
01414 }
01415
01416 if(nOccupancy_integ[wh2][se]){
01417 double highQualFraction = (double)nHighQual[wh2][se] / (double)nOccupancy_integ[wh2][se];
01418 if(highQualFraction == 0)
01419 dttf_highQual_Summary->setBinContent(wh2+1, se+1, 0.01);
01420 else dttf_highQual_Summary->setBinContent(wh2+1,se+1,highQualFraction);
01421 }
01422
01423 if(nOccupancy_integ_2ndTrack[wh2][se]){
01424 double highQualFraction2 = (double) nHighQual_2ndTrack[wh2][se] / (double)nOccupancy_integ_2ndTrack[wh2][se];
01425
01426
01427 if(highQualFraction2 == 0)
01428 dttf_highQual_Summary_2ndTrack->setBinContent(wh2+1,se+1, 0.01);
01429 else dttf_highQual_Summary_2ndTrack->setBinContent(wh2+1,se+1,highQualFraction2);
01430 }
01431
01432
01433 if(nev_dttf) dttf_2ndTrack_Summary->setBinContent(wh2+1, se+1, n2ndTrack[wh2][se]/(float)nev_dttf);
01434
01435
01436
01437 }
01438
01439 for(int l=0; l<6; l++){
01440 if(numTracks_wh[l])
01441 dttf_nTracksPerEvent_wheel[l]->Fill(numTracks_wh[l]);
01442
01443
01444 for(int k=0; k<3; k++){
01445 for(int m=0; m<12; m++){
01446 if(numTracks[k][l][m])
01447 dttf_nTrksPerEv[k][l][m]->Fill(numTracks[k][l][m]);
01448 }
01449 }
01450 }
01451
01452 dttf_nTracksPerEvent_integ->Fill(numTracks_integ);
01453
01454
01455
01456 }
01457
01458 void L1TDTTF::setMapPhLabel(MonitorElement *me)
01459 {
01460 me->setAxisTitle("DTTF Sector",2);
01461 for(int i=0;i<5;i++){
01462 ostringstream wheel;
01463 wheel << i-2;
01464 me->setBinLabel(1+i*4,"Wheel "+ wheel.str(),1);
01465 }
01466 }
01467
01468 void L1TDTTF::setMapThLabel(MonitorElement *me)
01469 {
01470 me->setAxisTitle("DTTF Sector",2);
01471 for(int i=0;i<5;i++){
01472 ostringstream wheel;
01473 wheel << i-2;
01474 me->setBinLabel(1+i*3,"Wheel "+ wheel.str(),1);
01475 }
01476 }