00001
00002
00003 #include <TObjArray.h>
00004 #include <TH2.h>
00005 #include <TFile.h>
00006
00007 #include <StMessMgr.h>
00008
00009 #include "EEdsmAna.h"
00010
00011 #define EEmapTP_USE // trick instattiates data only in the cxx
00012 #include "StTriggerUtilities/Eemc/EEmapTP.h"
00013 #undef EEmapTP_USE
00014
00015 #include "StTriggerUtilities/Eemc/EEdsm0.h"
00016 #include "StTriggerUtilities/Eemc/EEdsm1.h"
00017 #include "StTriggerUtilities/Eemc/EEdsm2.h"
00018 #include "StTriggerUtilities/Eemc/EEdsm3.h"
00019
00020 #include "StTriggerUtilities/StDSMUtilities/DSM.hh"
00021 #include "StTriggerUtilities/StDSMUtilities/DSMAlgo_EE101_2009.hh"
00022 #include "StTriggerUtilities/StDSMUtilities/DSMAlgo_EE102_2009.hh"
00023
00024
00025 ClassImp(EEdsmAna)
00026
00027
00028 EEdsmAna::EEdsmAna(const Char_t *name, int year)
00029 : myName(name)
00030 , mYear(year)
00031 , EE101(*new DSM("EE101"))
00032 , EE102(*new DSM("EE102"))
00033 {
00034 nTot=0;
00035
00036 mJPthr[0]=16;
00037 mJPthr[1]=24;
00038 mJPthr[2]=30;
00039 mJPthr[3]=40;
00040 int TPthrSelc = 2;
00041 int HTTPthrSelc = 2;
00042
00043
00044 Nee0 = 9;
00045 ee0 = new EEdsm0[Nee0];
00046 Nee0out = 12;
00047 ee0outTPadc = new int [Nee0out];
00048 ee0outHTadc = new int [Nee0out];
00049
00050
00051 ped0 = new int *[Nee0];
00052 for (int ibr = 0;ibr < Nee0; ibr++) {
00053 ped0[ibr] = new int [ee0[ibr].getNc()];
00054 for(int ch = 0;ch < ee0[ibr].getNc();ch++)
00055 ped0[ibr][ch]=0;
00056 }
00057
00058
00059 Nee1 = 2;
00060 ee1 = new EEdsm1[Nee1];
00061 for(int i = 0;i < Nee1;i++) ee1[i].setYear(mYear, mJPthr, TPthrSelc, HTTPthrSelc);
00062 ee1[0].setType(1);
00063 ee1[1].setType(2);
00064 ee1out3JPadc = new int [Nee1];
00065
00066
00067 ee2 = new EEdsm2;
00068 ee2->setYear(mYear);
00069
00070 be2 = new EEdsm2[Nbe2];
00071 for(int i = 0;i < Nbe2;i++)
00072 be2[i].setYear(mYear);
00073
00074
00075 ee3 = new EEdsm3;
00076 ee3->setYear(mYear);
00077
00078
00079
00080
00081
00082 EE101.registers[0] = EE102.registers[0] = 32;
00083 EE101.registers[1] = EE102.registers[1] = 40;
00084 EE101.registers[2] = EE102.registers[2] = 60;
00085
00086 clear();
00087 }
00088
00089
00090 EEdsmAna::~EEdsmAna() {
00091 delete& EE101;
00092 delete& EE102;
00093 }
00094
00095
00096 void EEdsmAna::clear() {
00097
00098 for (int i=0;i<Nee0;i++) if (ee0) ee0[i].clear();
00099 for (int i=0;i<Nee0out;i++) {
00100 if (ee0outTPadc) ee0outTPadc[i]=0;
00101 if (ee0outHTadc) ee0outHTadc[i]=0;
00102 }
00103
00104 for (int i=0;i<Nee1;i++) {
00105 if (ee1) ee1[i].clear();
00106 if (ee1out3JPadc) ee1out3JPadc[i]=0;
00107 }
00108
00109 memset(ee1outTPthrMax, 0, sizeof(ee1outTPthrMax));
00110 memset(ee1outHTTPthrMax, 0, sizeof(ee1outHTTPthrMax));
00111
00112 for (int i=0;i<EEnJetPatch;i++) {
00113 ee1outJPadc[i]=0;
00114 ee1outHT[i]=0;
00115 AdjJPsum[i]=0;
00116 }
00117
00118 for (int i = 0;i < EEnHalf;i++) {
00119 ee1outTPthrMax[i] = 0;
00120 ee1outHTTPthrMax[i] = 0;
00121 }
00122
00123 if (ee2) ee2->clear();
00124 ee2outHT=0;
00125
00126 for (int i=0;i<Nbe2;i++)
00127 if (be2) be2[i].clear();
00128
00129 if (ee3) ee3->clear();
00130 }
00131
00132
00133 void EEdsmAna::initHisto(TObjArray *HList){
00134
00135 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00136 H0inHT[iJ] = new TH2F(Form("dsm0inJP%d_HT", iJ + 1),
00137 Form("HT input, DSM layer-0, Jet Patch %d (Steve), trig=%s;input 0-DSM ADC value;Trig Patch ID", iJ + 1, myName),
00138 64, -0.5, 63.5, EEnTPinJP, 0.5, EEnTPinJP + 0.5);
00139 if (HList) HList->Add(H0inHT[iJ]);
00140 }
00141
00142 H0inHTall = new TH2F("dsm0inJPall_HT",
00143 Form("HT input, DSM layer-0, all trig Patches, trig=%s; Hanks ID=10*brd+inpID", myName),
00144 90, -0.5, 89.5, 64, -0.5, 63.5);
00145 if (HList) HList->Add(H0inHTall);
00146
00147
00148 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00149 H0inTP[iJ] = new TH2F(Form("dsm0inJP%d_TP", iJ + 1),
00150 Form("TP input, DSM layer-0, Jet Patch %d (Steve), trig=%s;input to level 0;Trig Patch ID", iJ + 1,myName),
00151 64, -0.5, 63.5, EEnTPinJP, 0.5, EEnTPinJP + 0.5);
00152 if (HList) HList->Add(H0inTP[iJ]);
00153 }
00154
00155 H0inTPall = new TH2F("dsm0inJPall_TP", Form("TP input, DSM layer-0, all trig Patches, trig=%s", myName),
00156 90, -0.5, 89.5, 64, -0.5, 63.5);
00157 if (HList) HList->Add( H0inTPall);
00158
00159
00160
00161
00162 for(int iJ = 0;iJ < EEnHalfJetPatch;iJ++) {
00163 H1inTPvEmu[iJ] = new TH2F(Form("dsm1HJP%d_TP", iJ + 1),
00164 Form("TP input vs. emulated, DSM layer-1, brd=%d ch=%d, trig=%s;emulated TP from level-0;input to level-1", iJ/6, iJ%6, myName),
00165 40, 0., 400, 40, 0, 400);
00166 if (HList) HList->Add(H1inTPvEmu[iJ]);
00167 }
00168
00169
00170 for(int iJ = 0;iJ < EEnHalfJetPatch;iJ++) {
00171 H1inHTvEmu[iJ] = new TH2F(Form("dsm1HJP%d_HT", iJ + 1),
00172 Form("HT input vs.emu, DSM-1, Half Patch %d (Falk), trig=%s;emulated HT from level-0;input to level-1", iJ + 1, myName),
00173 64, -0.5, 63.5, 4, -0.5, 3.5);
00174 if (HList) HList->Add(H1inHTvEmu[iJ]);
00175 }
00176
00177
00178
00179
00180 for(int iJ = 0;iJ < EEnHalf;iJ++) {
00181 H2inHTTP[iJ] = new TH2F(Form("dsm2Half%d_HTTP", iJ + 1),
00182 Form("TP (+) HTTP thres, JP_Falk(%d+%d+%d), trig=%s;emu layer1 out: maxTPthr*4 + maxHTTPthr;layer2 inp: TPthr*2 + HTTP",
00183 3*iJ, (3*iJ) + 1, (3*iJ) + 2, myName),
00184 16, -0.5, 15.5, 4, -0.5, 3.5);
00185 if (HList) HList->Add(H2inHTTP[iJ]);
00186 }
00187
00188
00189 for(int iJ = 0;iJ < EEnHalf;iJ++) {
00190 H1inEtot[iJ] = new TH1F(Form("dsm2Half%d_Etot", iJ + 1),
00191 Form("Etot for JP_Falk(%d+%d+%d), trig=%s; level2 input", 3*iJ, (3*iJ) + 1, (3*iJ) + 2, myName),
00192 32, -0.5, 31.5);
00193 if (HList) HList->Add(H1inEtot[iJ]);
00194 }
00195
00196
00197 for(int iJ = 0;iJ < mxEtotBit;iJ++) {
00198 HEetot[iJ] = new TH1F(Form("dsm2E_etot%d", iJ),
00199 Form("EEMC ETOT BIT=%d, trig=%s; EEMC ETOT emul sum over 1 brd @ level2", iJ, myName),
00200 48, 15.5, 63.5);
00201 HEetot[iJ]->SetLineColor((iJ == 1) ? kRed : kBlue);
00202 if (HList) HList->Add(HEetot[iJ]);
00203
00204 HBetot[iJ] = new TH1F(Form("dsm2B_etot%d", iJ),
00205 Form("BEMC ETOT BIT=%d, trig=%s; BEMC ETOT emul sum over 3 brds @ level2", iJ, myName),
00206 190, 65.5, 255.5);
00207 HBetot[iJ]->SetLineColor((iJ == 1) ? kRed : kBlue);
00208 if (HList) HList->Add(HBetot[iJ]);
00209
00210 HBEetot[iJ] = new TH1F(Form("dsm2BE_etot%d", iJ),
00211 Form("B+EEMC ETOT BIT=%d, trig=%s; B+EEMC ETOT emul sum over 4 brds @ level2", iJ, myName),
00212 190, 65.5, 255.5);
00213 HBEetot[iJ]->SetLineColor((iJ == 1) ? kRed : kBlue);
00214 if (HList) HList->Add(HBEetot[iJ]);
00215 }
00216
00217
00218
00219 H3inHTTP = new TH2F("dsm3_HTTP", Form("HTTP layer=3, trig=%s;emu layer2 out: orTPbit*2 + orHTTPbit;layer3 inp: TPbit*2 + HTTPbit", myName),
00220 4, -0.5, 3.5, 4, -0.5, 3.5);
00221 if (HList) HList->Add(H3inHTTP);
00222
00223
00224
00225 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00226 int steve_jp = ((iJ + 2) % EEnJetPatch) + 1;
00227 H4jpSums[iJ] = new TH1F(Form("JP%d_sum", steve_jp),
00228 Form("Emulated Sum Jet Patch %d (DSMin %d);Jet Patch Emu Sum;Freq", ((iJ + 2) % EEnJetPatch) + 1, iJ),
00229 300, -0.5, 299.5);
00230 if (HList) HList->Add(H4jpSums[iJ]);
00231 }
00232
00233
00234 static const char* JetPatchSumThresholdTitles[] = {
00235 "Jet Patch Sum <= JP0",
00236 "JP0 < Jet Patch Sum <= JP1",
00237 "JP1 < Jet Patch Sum <= JP2",
00238 "Jet Patch Sum > JP2"
00239 };
00240
00241 for (int iJ = 0;iJ < EEnThresh;iJ++) {
00242 TH1F *h = new TH1F(Form("JPsumTh%d", iJ), JetPatchSumThresholdTitles[iJ], 6, 0.5, 6.5);
00243 h->GetXaxis()->SetTitle("Steve's Jet Patch ID");
00244 h->GetYaxis()->SetTitle("Frequency");
00245 h->SetFillColor(kBlue);
00246 H4jpFreq[iJ]=h;
00247 if (HList) HList->Add(h);
00248 }
00249
00250
00251 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00252 int steve_jp = ((iJ + 2) % EEnJetPatch) + 1;
00253 int steve_jp2 = ((iJ + 3) % EEnJetPatch) + 1;
00254 H4adjpSums[iJ] = new TH1F(Form("JP%d%d_sum", steve_jp, steve_jp2),
00255 Form("Emulated Sum Jet Patches %d+%d;Jet Patch Emu Sum;Freq", steve_jp, steve_jp2),
00256 150, -0.5, 149.5);
00257 if (HList) HList->Add(H4adjpSums[iJ]);
00258 }
00259
00260
00261 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00262 int steve_jp = ((iJ + 2) % EEnJetPatch) + 1;
00263 int steve_jp2 = ((iJ + 3) % EEnJetPatch) + 1;
00264 H4adjPcor[iJ] = new TH2F(Form("JP%d%d_cor", steve_jp, steve_jp2),
00265 Form("Emulated Sum Jet Patches %d vs %d;Jet Patch %d Sum;Jet Patch %d Sum", steve_jp, steve_jp2, steve_jp, steve_jp2),
00266 60, 9.5, 69.5, 60, 9.5,69.5);
00267 if (HList) HList->Add(H4adjPcor[iJ]);
00268 }
00269
00270 {
00271 H4adjpFreq = new TH1F("JPadjTh", "Adjacent Jet patches both over thr0;DSM Adjacent Jet Patch Emu Sum (FEE crate add 2);Freq",
00272 8, -0.5, 7.5);
00273 if (HList) HList->Add(H4adjpFreq);
00274 }
00275
00276 {
00277
00278 H5jpPed = new TH2F("JPpedZoom", "Zoom in of 1x1 JP pedestals;Steve's JP ID",
00279 EEnJetPatch, 0.5, EEnJetPatch + 0.5, 46, -0.5, 45.5);
00280 if (HList) HList->Add(H5jpPed);
00281 }
00282
00283 {
00284 H5jpFreq = new TH1F("JPtotFreq", Form("JP DSM sum > %d;Steve's JP ID", mJPthr[1]),
00285 EEnJetPatch, 0.5, EEnJetPatch + 0.5);
00286 H5jpFreq->SetFillColor(kGreen);
00287 if (HList) HList->Add(H5jpFreq);
00288
00289 H5jpHot = new TH1F("JPpedHot", "Hot towers;Steve's JP ID",
00290 EEnJetPatch, 0.5, EEnJetPatch + 0.5);
00291 H5jpHot->SetFillColor(kRed);
00292 if (HList) HList->Add(H5jpHot);
00293 }
00294 }
00295
00296
00297 void EEdsmAna::resetHisto(){
00298
00299 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00300 if (H0inHT[iJ]) H0inHT[iJ]->Reset();
00301 }
00302 if (H0inHTall) H0inHTall->Reset();
00303
00304 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00305 if (H0inTP[iJ]) H0inTP[iJ]->Reset();
00306 }
00307 if (H0inTPall) H0inTPall->Reset();
00308
00309
00310
00311 for(int iJ = 0;iJ < EEnHalfJetPatch;iJ++) {
00312 if (H1inTPvEmu[iJ]) H1inTPvEmu[iJ]->Reset();
00313 }
00314
00315 for(int iJ = 0;iJ < EEnHalfJetPatch;iJ++) {
00316 if (H1inHTvEmu[iJ]) H1inHTvEmu[iJ]->Reset();
00317 }
00318
00319
00320
00321 for(int iJ = 0;iJ < EEnHalf;iJ++) {
00322 if (H2inHTTP[iJ]) H2inHTTP[iJ]->Reset();
00323 }
00324
00325 for(int iJ = 0;iJ < EEnHalf;iJ++) {
00326 if (H1inEtot[iJ]) H1inEtot[iJ]->Reset();
00327 }
00328
00329
00330 for(int iJ = 0;iJ < mxEtotBit;iJ++) {
00331 if (HEetot[iJ]) HEetot[iJ]->Reset();
00332 if (HBetot[iJ]) HBetot[iJ]->Reset();
00333 if (HBEetot[iJ]) HBEetot[iJ]->Reset();
00334 }
00335
00336
00337
00338 if (H3inHTTP) H3inHTTP->Reset();
00339
00340
00341
00342 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00343 if (H4jpSums[iJ]) H4jpSums[iJ]->Reset();
00344 }
00345
00346 for (int iJ = 0;iJ < EEnThresh;iJ++) {
00347 if (H4jpFreq[iJ]) H4jpFreq[iJ]->Reset();
00348 }
00349
00350 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00351 if (H4adjpSums[iJ]) H4adjpSums[iJ]->Reset();
00352 }
00353
00354 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00355 if (H4adjPcor[iJ]) H4adjPcor[iJ]->Reset();
00356 }
00357 {
00358 if (H4adjpFreq) H4adjpFreq->Reset();
00359 }
00360 {
00361
00362 if (H5jpPed) H5jpPed->Reset();
00363 }
00364 {
00365 if (H5jpFreq) H5jpFreq->Reset();
00366 if (H5jpHot) H5jpHot->Reset();
00367 }
00368 }
00369
00370
00371
00372 void EEdsmAna::sort( const unsigned char * dsm0inp,
00373 const unsigned short int * dsm1inp,
00374 const unsigned short int * dsm2inp,
00375 const unsigned short int * dsm3inp) {
00376 nTot++;
00377
00378 if (dsm0inp) readDsm0(dsm0inp);
00379 if (dsm1inp) readDsm1(dsm1inp);
00380 if(dsm2inp) readDsm2(dsm2inp);
00381 if(dsm3inp) readDsm3(dsm3inp);
00382
00383 emulDsm0();
00384 emulDsm1();
00385 emulDsm2();
00386
00387 histoDsm0();
00388 histoDsm1();
00389 histoDsm2();
00390 histoDsm3();
00391
00392 return;
00393
00394 LOG_DEBUG << "==================================" << endm;
00395 printAllEndcap();
00396 printAllBarrel();
00397
00398 #if 0
00399
00400 int iJ;
00401 for(iJ=0;iJ<EEnHalf;iJ++) {
00402 if(ee1outTPthrMax[iJ]>=ee1outHTTPthrMax[iJ]) continue;
00403 LOG_DEBUG << Form("NEW_EVE==================================\n ee1outTPthrMax[%d]=%d <ee1outHTTPthrMax[%d]=%d\n",iJ,ee1outTPthrMax[iJ],iJ,ee1outHTTPthrMax[iJ]) << endm;
00404 goto dump;
00405 }
00406 #endif
00407
00408 }
00409
00410
00411
00412 void EEdsmAna::emulDsm0() {
00413 if (ee0) {
00414 for (int i = 0;i < EEnTPphi;i++) {
00415 for(int j = 0;j < EEnTPeta;j++) {
00416 const EEmapTP &y = eeMapTP[i][j];
00417
00418 int ibr = y.brdIn - 1;
00419 int ch = y.chIn;
00420 int chOut = y.chOut;
00421 const EEdsm0 &br = ee0[ibr];
00422
00423 ee0outTPadc[chOut] += br.getInpTP6bit(ch);
00424
00425 int val= br.getInpHT6bit(ch);
00426 if(ee0outHTadc[chOut]< val)ee0outHTadc[chOut]=val;
00427
00428 }
00429 }
00430 }
00431 }
00432
00433
00434 void EEdsmAna::emulDsm1() {
00435 switch (mYear) {
00436 case 2006:
00437 if (ee1) {
00438 for (int i=0;i<Nee1;i++) {
00439 const EEdsm1 &br = ee1[i];
00440 int maxTPthr=0;
00441 int maxHTTPthr=0;
00442 for(int j=0;j<br.getNc(); j++) {
00443 int ix=j+i*br.getNc();
00444 int ijp=ix/2;
00445 ee1outJPadc[ijp]+=br.getInpTPsum(j);
00446
00447 ee1out3JPadc[i]+=br.getInpTPsum(j);
00448
00449
00450
00451
00452 }
00453 ee1outTPthrMax[i] =maxTPthr;
00454 ee1outHTTPthrMax[i]=maxHTTPthr;
00455 }
00456 }
00457
00458
00459 for (int i=0;i<EEnJetPatch;i++) {
00460 AdjJPsum[i]=ee1outJPadc[i]+ee1outJPadc[(i+1)%EEnJetPatch];
00461 }
00462 break;
00463
00464 case 2009:
00465 DSMAlgo_EE101_2009()(EE101);
00466 DSMAlgo_EE102_2009()(EE102);
00467
00468
00469
00470 ee1outJPadc[0] = EE102.info[0];
00471 ee1outJPadc[1] = EE102.info[1];
00472 ee1outJPadc[2] = EE102.info[2];
00473
00474 ee1outJPadc[3] = EE101.info[0];
00475 ee1outJPadc[4] = EE101.info[1];
00476 ee1outJPadc[5] = EE101.info[2];
00477
00478
00479
00480 for (int jp = 0; jp < 6; ++jp)
00481 AdjJPsum[jp] = ee1outJPadc[jp] + ee1outJPadc[(jp+1)%6];
00482
00483 break;
00484 }
00485 }
00486
00487
00488 void EEdsmAna::emulDsm2() {
00489 if (ee2) {
00490 ee2outHT=ee2->get3JPHTthr(0);
00491 if(ee2outHT<ee2->get3JPHTthr(1))ee2outHT=ee2->get3JPHTthr(1);
00492 }
00493 }
00494
00495
00496 void EEdsmAna::readDsm0(const unsigned char *EEMC) {
00497
00498
00499
00500
00501 if (EEMC && ee0) {
00502
00503 for(int ibr = 0;ibr < Nee0;ibr++) {
00504 int k = 16 * ibr;
00505
00506 for(int i = 0;i < 8;i++) ee0[ibr].setBite(7 - i, EEMC[k + i]);
00507
00508 for(int i = 8;i < 16;i++) ee0[ibr].setBite(23 - i, EEMC[k + i]);
00509 ee0[ibr].unpack();
00510 }
00511 }
00512 }
00513
00514
00515 void EEdsmAna::readDsm1(const unsigned short *EEMC_l1) {
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525 switch (mYear) {
00526 case 20006:
00527 if (EEMC_l1 && ee1) {
00528 for(int i = 0;i < Nee1;i++) {
00529 ee1[i].setWord(0, EEMC_l1[3 + i*8]);
00530 ee1[i].setWord(1, EEMC_l1[2 + i*8]);
00531 ee1[i].setWord(2, EEMC_l1[1 + i*8]);
00532 ee1[i].setWord(3, EEMC_l1[0 + i*8]);
00533 ee1[i].setWord(4, EEMC_l1[7 + i*8]);
00534 ee1[i].setWord(5, EEMC_l1[6 + i*8]);
00535 }
00536 }
00537 break;
00538
00539 case 2009:
00540 if (EEMC_l1) {
00541 EE101.channels[0] = EEMC_l1[3];
00542 EE101.channels[1] = EEMC_l1[2];
00543 EE101.channels[2] = EEMC_l1[1];
00544 EE101.channels[3] = EEMC_l1[0];
00545 EE101.channels[4] = EEMC_l1[7];
00546 EE101.channels[5] = EEMC_l1[6];
00547 EE101.channels[6] = EEMC_l1[5];
00548 EE101.channels[7] = EEMC_l1[4];
00549
00550 EE102.channels[0] = EEMC_l1[11];
00551 EE102.channels[1] = EEMC_l1[10];
00552 EE102.channels[2] = EEMC_l1[ 9];
00553 EE102.channels[3] = EEMC_l1[ 8];
00554 EE102.channels[4] = EEMC_l1[15];
00555 EE102.channels[5] = EEMC_l1[14];
00556 EE102.channels[6] = EEMC_l1[13];
00557 EE102.channels[7] = EEMC_l1[12];
00558 }
00559 break;
00560 }
00561 }
00562
00563
00564 void EEdsmAna::readDsm2(const unsigned short *EMC) {
00565 if (EMC && ee2 && be2) {
00566
00567 ee2->setWord(0, EMC[5]);
00568 ee2->setWord(1, EMC[4]);
00569
00570 be2[0].setWord(0, EMC[3]);
00571 be2[0].setWord(1, EMC[2]);
00572 be2[1].setWord(0, EMC[1]);
00573 be2[1].setWord(1, EMC[0]);
00574 be2[2].setWord(0, EMC[7]);
00575 be2[2].setWord(1, EMC[6]);
00576 }
00577 }
00578
00579
00580 void EEdsmAna::readDsm3( const unsigned short *lastDSM) {
00581 if (lastDSM && ee3) {
00582 ee3->setWord(0, lastDSM[0]);
00583 }
00584 }
00585
00586
00587 void EEdsmAna::histoDsm0() {
00588 if (ee0) {
00589 for(int i = 0;i < EEnTPphi;i++) {
00590 for(int j = 0;j < EEnTPeta;j++) {
00591 const EEmapTP &y = eeMapTP[i][j];
00592
00593 int ibr = y.brdIn - 1;
00594 int ch = y.chIn;
00595 int iJP = y.JPid - 1;
00596 if ((iJP >= 0) && (iJP < EEnJetPatch)) {
00597 H0inHT[iJP]->Fill(ee0[ibr].getInpHT6bit(ch), y.TPid);
00598 H0inTP[iJP]->Fill(ee0[ibr].getInpTP6bit(ch), y.TPid);
00599 H0inHTall->Fill((10 * ibr) + ch, ee0[ibr].getInpHT6bit(ch));
00600 H0inTPall->Fill((10 * ibr) + ch, ee0[ibr].getInpTP6bit(ch));
00601 }
00602
00603 }
00604 }
00605 }
00606 }
00607
00608
00609 void EEdsmAna::histoDsm1(){
00610 switch (mYear) {
00611 case 2006:
00612 if (ee1) {
00613 for (int i = 0;i < Nee1;i++) {
00614 const EEdsm1 &br = ee1[i];
00615
00616 for(int j = 0;j < br.getNc();j++) {
00617 int ix = j + (i * br.getNc());
00618
00619 H1inTPvEmu[ix]->Fill(ee0outTPadc[ix], br.getInpTPsum(j));
00620
00621
00622 }
00623
00624 }
00625 }
00626
00627
00628
00629
00630
00631
00632
00633
00634
00635 for (int i = 0;i < EEnJetPatch;i++) {
00636 int steve_jp = ((i + 2) % EEnJetPatch) + 1;
00637 H4jpSums[i]->Fill(ee1outJPadc[i]);
00638 int JPene = ee1outJPadc[i];
00639 if(JPene > mJPthr[0]) H4jpFreq[0]->Fill(steve_jp);
00640 if(JPene > mJPthr[3]) H4jpFreq[3]->Fill(steve_jp);
00641 else if(JPene > mJPthr[2]) H4jpFreq[2]->Fill(steve_jp);
00642 else if(JPene > mJPthr[1]) H4jpFreq[1]->Fill(steve_jp);
00643
00644 H5jpPed->Fill(steve_jp, ee1outJPadc[i]);
00645 if (ee1outJPadc[i] > mJPthr[1]) H5jpFreq->Fill(steve_jp);
00646 int j = (i + 1) % EEnJetPatch;
00647 H4adjPcor[i]->Fill(ee1outJPadc[i], ee1outJPadc[j]);
00648 H4adjpSums[i]->Fill(AdjJPsum[i]);
00649
00650 if ((ee1outJPadc[i] > mJPthr[1]) && (ee1outJPadc[(i + 1) % EEnJetPatch] > mJPthr[1])) H4adjpFreq->Fill(steve_jp);
00651 }
00652 break;
00653
00654 case 2009:
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664 static const int steve_jp[] = { 6, 1, 2, 3, 4, 5 };
00665
00666 for (int jp = 0; jp < 6; ++jp) {
00667 H4jpSums[jp]->Fill(ee1outJPadc[jp]);
00668
00669
00670
00671
00672
00673
00674
00675 if (ee1outJPadc[jp] <= EE101.registers[0])
00676 H4jpFreq[0]->Fill(steve_jp[jp]);
00677 else if (ee1outJPadc[jp] > EE101.registers[0] && ee1outJPadc[jp] <= EE101.registers[1])
00678 H4jpFreq[1]->Fill(steve_jp[jp]);
00679 else if (ee1outJPadc[jp] > EE101.registers[1] && ee1outJPadc[jp] <= EE101.registers[2])
00680 H4jpFreq[2]->Fill(steve_jp[jp]);
00681 else if (ee1outJPadc[jp] > EE101.registers[2])
00682 H4jpFreq[3]->Fill(steve_jp[jp]);
00683
00684 H5jpPed->Fill(steve_jp[jp], ee1outJPadc[jp]);
00685 if (ee1outJPadc[jp] > EE101.registers[1]) H5jpFreq->Fill(steve_jp[jp]);
00686
00687 H4adjPcor[jp]->Fill(ee1outJPadc[jp], ee1outJPadc[(jp+1)%6]);
00688 H4adjpSums[jp]->Fill(AdjJPsum[jp]);
00689 }
00690 break;
00691 }
00692 }
00693
00694
00695 void EEdsmAna::histoDsm2() {
00696 if (ee2) {
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730 for(int iJ = 0;iJ < EEnHalf;iJ++) {
00731 int x = (ee1outTPthrMax[iJ] * 4) + ee1outHTTPthrMax[iJ];
00732 int y = (ee2->getTPthr(iJ) * 2) + ee2->getHTTPthr(iJ);
00733 H2inHTTP[iJ]->Fill(x,y);
00734 }
00735
00736
00737
00738
00739
00740
00741
00742
00743 for (int iJ = 0;iJ < EEnHalf;iJ++) H1inEtot[iJ]->Fill(ee2->get3JPsum(iJ));
00744 }
00745
00746 if (ee3) {
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756 unsigned short sumE = ee2->get3JPsum(0) + ee2->get3JPsum(1);
00757 HEetot[ee3->getEndcapEsumthr1bit()]->Fill(sumE);
00758
00759
00760
00761
00762
00763
00764
00765
00766
00767
00768 unsigned short sumB = 0;
00769 for(int i = 0;i < Nbe2;i++) {
00770 sumB += be2[i].get3JPsum(0);
00771 sumB += be2[i].get3JPsum(1);
00772 }
00773 HBetot[ee3->getBarreEsumThr1bit()]->Fill(sumB);
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784 HBEetot[ee3->getEtotThr1bit()]->Fill(sumB + sumE);
00785 }
00786 }
00787
00788
00789 void EEdsmAna::histoDsm3() {
00790 if (ee3) {
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800 bool x_b0 = ee1outTPthrMax[0] || ee1outTPthrMax[1];
00801 bool x_b1 = ee1outHTTPthrMax[0] || ee1outHTTPthrMax[1];
00802 int x = (x_b1 * 2) + x_b0;
00803 int y = (ee3->getEndcapHTTPthr1bit() * 2) +ee3->getEndcapTPthr1bit();
00804 H3inHTTP->Fill(x, y);
00805 }
00806 }
00807
00808
00809 void EEdsmAna::printDsm0map() const {
00810 printf("TP Map level-0 \n ");
00811 for(int j=0;j< EEnTPeta;j++)
00812 printf(" iEta=%d ",j);
00813 printf("\n ");
00814 for(int j=0;j< EEnTPeta;j++)
00815 printf("JP/TP brd:ch->outCh ");
00816 for(int i=0;i<EEnTPphi; i++) {
00817 int phi=111-i*12;
00818 if(phi<0) phi+=360;
00819 printf("\nPhi/deg=%3d ",phi);
00820 for(int j=0;j< EEnTPeta;j++) {
00821 EEmapTP *y=&eeMapTP[i][j];
00822 printf("%d/%2d %2d:%2d -> %2d ",y->JPid,y->TPid,y->brdIn,y->chIn,y->chOut);
00823 }
00824 }
00825 printf("\n");
00826 }
00827
00828
00829 void EEdsmAna::printAllEndcap(int k) const {
00830 printf("\n\nEEdsmAna(%s)::print(eve=%d) , year=%d \n",myName,nTot,mYear);
00831 for(int i=0;i<Nee0;i++) {
00832 printf("\n----------- level-0 Board %2d ",i+1);
00833 ee0[i].print();
00834 }
00835 printf("\n----------- level-0 emulated output \n ch =");
00836 for(int i=Nee0out-1;i>=0; i--) printf(" %4d ",i);
00837 printf("\n TP =");
00838 for(int i=Nee0out-1;i>=0; i--) printf(" %4d ",ee0outTPadc[i]);
00839 printf("\nHTadc =");
00840 for(int i=Nee0out-1;i>=0; i--) printf(" %4d ",ee0outHTadc[i]);
00841 printf("\n\n----------- level-1 -----------------\n ");
00842 for(int i=0;i<Nee1;i++) {
00843 printf("\n----------- level-1 Board %2d , ",i+1);
00844 ee1[i].print();
00845 printf("emul out 3x.9 JP_Falk(%d+%d+%d) energy/dec: 13bit=%d 8bit=%d mxTPthr=%d mxHTTPthr=%d\n",3*i,3*i+1,3*i+2,ee1out3JPadc[i],ee1out3JPadc[i]>>5, ee1outTPthrMax[i], ee1outHTTPthrMax[i]);
00846 }
00847 printf("\n----------- level-1 emulated output \n JP_Falk =");
00848 int Njp=EEnJetPatch;
00849 for(int i=Njp-1;i>=0; i--) printf(" %4d ",i);
00850 printf("\n JP_Steve=");
00851 for(int i=Njp-1;i>=0; i--) printf(" %4d ",(i+2)%6+1);
00852 printf("\n JPsum =");
00853 for(int i=Njp-1;i>=0; i--) printf(" %4d ",ee1outJPadc[i]);
00854 printf("\n HTthr =");
00855 for(int i=Njp-1;i>=0; i--) printf(" %4d ",ee1outHT[i]);
00856 if(mYear<2006) {
00857 printf("\n AdjJPsum=");
00858 for(int i=Njp-1;i>=0; i--) printf(" %4d ",AdjJPsum[i]);
00859 }
00860 printf("\n");
00861 printf("emul: orTPbit=%d orHTTPbit=%d \n",ee1outTPthrMax[0]||ee1outTPthrMax[1], ee1outHTTPthrMax[0] ||ee1outHTTPthrMax[1]);
00862 printf("\n\n----------- level-2 ----------------- \n");
00863 ee2->print();
00864 printf("\n\n----------- level-3 ( aka TCU) ----------- \n");
00865 ee3->print();
00866 }
00867
00868
00869 void EEdsmAna::printAllBarrel(int k) const {
00870 printf("\n\nBEdsmAna(%s)::print(eve=%d) , year=%d \n",myName,nTot,mYear);
00871 for(int i=0;i<Nbe2;i++) {
00872 printf("\n----------- level-2 BARREL Board %2d ",i+1);
00873 be2[i].print();
00874 }
00875 printf("\n\n");
00876 }
00877
00878
00879 void EEdsmAna::usePed(const Char_t *fName){
00880
00881 LOG_INFO << "EEdsmAna(" << myName << ") reads pedestals from " << fName << endm;
00882 FILE *fd = fopen(fName, "r");
00883 if (fd) {
00884 for (Int_t ibr = 0;ibr < Nee0;ibr++) {
00885 for (Int_t ch = 0;ch < ee0[ibr].getNc();ch++) {
00886 int a = 0, b = 0, c = 0;
00887 int ret = fscanf(fd, "%d %d %d", &a, &b, &c);
00888 if ((ret == 3) && (a == (ibr + 1)) && (b == ch)) {
00889 ped0[ibr][ch] = c;
00890 } else {
00891 LOG_ERROR << "Bad file format " << fName << ": got ret=" << ret << ", a=" << a << ", b=" << b << ", c=" << c << endm;
00892 }
00893 }
00894 }
00895 fclose(fd);
00896 fd = 0;
00897 } else {
00898 LOG_ERROR << "Cannot read file " << fName << endm;
00899 }
00900 }
00901
00902 void EEdsmAna::saveHisto(TFile *f) const {
00903 if (f) f->cd();
00904
00905
00906
00907 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00908 if (H0inHT[iJ]) H0inHT[iJ]->Write();
00909 }
00910
00911 if (H0inHTall) H0inHTall->Write();
00912
00913
00914 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00915 if (H0inTP[iJ]) H0inTP[iJ]->Write();
00916 }
00917
00918 if (H0inTPall) H0inTPall->Write();
00919
00920
00921
00922
00923 for(int iJ = 0;iJ < EEnHalfJetPatch;iJ++) {
00924 if (H1inTPvEmu[iJ]) H1inTPvEmu[iJ]->Write();
00925 }
00926
00927
00928 for(int iJ = 0;iJ < EEnHalfJetPatch;iJ++) {
00929 if (H1inHTvEmu[iJ]) H1inHTvEmu[iJ]->Write();
00930 }
00931
00932
00933
00934
00935 for(int iJ = 0;iJ < EEnHalf;iJ++) {
00936 if (H2inHTTP[iJ]) H2inHTTP[iJ]->Write();
00937 }
00938
00939
00940 for(int iJ = 0;iJ < EEnHalf;iJ++) {
00941 if (H1inEtot[iJ]) H1inEtot[iJ]->Write();
00942 }
00943
00944
00945 for(int iJ = 0;iJ < mxEtotBit;iJ++) {
00946 if (HEetot[iJ]) HEetot[iJ]->Write();
00947
00948 if (HBetot[iJ]) HBetot[iJ]->Write();
00949
00950 if (HBEetot[iJ]) HBEetot[iJ]->Write();
00951 }
00952
00953
00954
00955 if (H3inHTTP) H3inHTTP->Write();
00956
00957
00958
00959 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00960 if (H4jpSums[iJ]) H4jpSums[iJ]->Write();
00961 }
00962
00963
00964 for (int iJ = 0;iJ < EEnThresh;iJ++) {
00965 if (H4jpFreq[iJ]) H4jpFreq[iJ]->Write();
00966 }
00967
00968
00969 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00970 if (H4adjpSums[iJ]) H4adjpSums[iJ]->Write();
00971 }
00972
00973
00974 for(int iJ = 0;iJ < EEnJetPatch;iJ++) {
00975 if (H4adjPcor[iJ]) H4adjPcor[iJ]->Write();
00976 }
00977
00978 {
00979 if (H4adjpFreq) H4adjpFreq->Write();
00980 }
00981
00982 {
00983
00984 if (H5jpPed) H5jpPed->Write();
00985 }
00986
00987 {
00988 if (H5jpFreq) H5jpFreq->Write();
00989
00990 if (H5jpHot) H5jpHot->Write();
00991 }
00992 }
00993