00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <fstream>
00023
00024 #include "TH2.h"
00025 #include "TString.h"
00026 #include "TFile.h"
00027 #include "TKey.h"
00028 #include "TObjectSet.h"
00029 #include "StMessMgr.h"
00030
00031 #include "StSvtBadAnodesMaker.h"
00032 #include "StarClassLibrary/StSequence.hh"
00033 #include "StSvtClassLibrary/StSvtHybridBadAnodes.hh"
00034 #include "StSvtClassLibrary/StSvtHybridData.hh"
00035 #include "StSvtClassLibrary/StSvtHybridCollection.hh"
00036 #include "StSvtClassLibrary/StSvtData.hh"
00037 #include "StSvtClassLibrary/StSvtHybridPed.hh"
00038 #include "map.h"
00039
00040 #define MAX_NUMBER_OF_ANODES 240
00041
00042 ClassImp(StSvtBadAnodesMaker)
00043
00044
00045 StSvtBadAnodesMaker::StSvtBadAnodesMaker(const char *name):StMaker(name)
00046 {
00047 mSvtData = NULL;
00048 mHybridData = NULL;
00049 mSvtBadAnodes = NULL;
00050 mHybridBadAnodes = NULL;
00051 mSvtPed = NULL;
00052 mSvtRMSPed = NULL;
00053
00054 mBadAnodesSet = NULL;
00055
00056 mRmsScaleFactor = 16;
00057
00058 NULL_ADC = 0;
00059 OVERLOADED_ADC = 255;
00060 BAD_RMS = 10;
00061 BAD_MEAN_PED_MIN = 0;
00062 BAD_MEAN_PED_MAX = 255;
00063 BAD_MEAN_RMS_MIN = 0;
00064 BAD_MEAN_RMS_MAX = 255;
00065
00066 NULL_ADC_THRESHOLD = 129;
00067 OVERLOADED_ADC_THRESHOLD = 129;
00068 OCCUP_THRESHOLD = 129;
00069 RMS_THRESHOLD = 129;
00070
00071 FREQ_OVERLOADED_ADC = 1.1;
00072 FREQ_NULL_ADC = 1.1;
00073 FREQ_OCCUP = 1.1;
00074
00075 mFileName = new TString("badAnodes.root");
00076 }
00077
00078
00079 StSvtBadAnodesMaker::~StSvtBadAnodesMaker()
00080 {}
00081
00082 void StSvtBadAnodesMaker::setOutputFile(const char* name)
00083 {
00084 if (mFileName)
00085 delete mFileName;
00086
00087 mFileName = new TString(name);
00088 }
00089
00090
00091 Int_t StSvtBadAnodesMaker::Init()
00092 {
00093 if (Debug()) gMessMgr->Debug() << "StSvtBadAnodesMaker::Init" << endm;
00094
00095 mEvents = 0;
00096
00097 setSvtData();
00098 setPedestal();
00099 setRMSPedestal();
00100
00101 setSvtBadAnodes();
00102
00103
00104
00105
00106
00107
00108
00109 if (Debug()) bookHistograms();
00110
00111 gMessMgr->Info() << "NULL_ADC = " << NULL_ADC << endm;
00112 gMessMgr->Info() << "OVERLOADED_ADC = " << OVERLOADED_ADC << endm;
00113
00114 gMessMgr->Info() << "THRESHOLD NULL_ADC (fraction of time bins) = " << NULL_ADC_THRESHOLD << endm;
00115 gMessMgr->Info() << "THRESHOLD OVERLOADED_ADC (fraction of time bins) = " << OVERLOADED_ADC_THRESHOLD << endm;
00116 gMessMgr->Info() << "THRESHOLD OCCUP (fraction of time bins) = " << OCCUP_THRESHOLD << endm;
00117
00118 gMessMgr->Info() << "FREQUENCY OVERLOADED_ADC (fraction of events) = " << FREQ_OVERLOADED_ADC << endm;
00119 gMessMgr->Info() << "FREQUENCY NULL_ADC (fraction of events) = " << FREQ_NULL_ADC << endm;
00120 gMessMgr->Info() << "FREQUENCY OCCUP (fraction of events) = " << FREQ_OCCUP << endm;
00121
00122 gMessMgr->Info() << "BAD MEAN PED_MIN = " << BAD_MEAN_PED_MIN << endm;
00123 gMessMgr->Info() << "BAD MEAN PED_MAX = " << BAD_MEAN_PED_MAX << endm;
00124 gMessMgr->Info() << "BAD MEAN RMS_MIN = " << BAD_MEAN_RMS_MIN << endm;
00125 gMessMgr->Info() << "BAD MEAN RMS_MAX = " << BAD_MEAN_RMS_MAX << endm;
00126
00127 return StMaker::Init();
00128 }
00129
00130
00131 void StSvtBadAnodesMaker::setSvtData()
00132 {
00133 St_DataSet *dataSet;
00134
00135 dataSet = GetDataSet("StSvtRawData");
00136 assert(dataSet);
00137 mSvtData = (StSvtData*)(dataSet->GetObject());
00138 assert(mSvtData);
00139 }
00140
00141
00142 void StSvtBadAnodesMaker::setPedestal()
00143 {
00144 if (Debug()) gMessMgr->Debug() << "StSvtQAMaker::setPedestal" << endm;
00145
00146 St_DataSet *dataSet;
00147
00148 dataSet = GetDataSet("StSvtPedestal");
00149
00150 if (dataSet) {
00151 mSvtPed = (StSvtHybridCollection*)(dataSet->GetObject());
00152 assert(mSvtPed);
00153 }
00154 }
00155
00156
00157 void StSvtBadAnodesMaker::setRMSPedestal()
00158 {
00159 if (Debug()) gMessMgr->Debug() << "StSvtQAMaker::setRMSPedestal" << endm;
00160
00161 St_DataSet *dataSet;
00162
00163 dataSet = GetDataSet("StSvtRMSPedestal");
00164
00165 if (dataSet) {
00166 mSvtRMSPed = (StSvtHybridCollection*)(dataSet->GetObject());
00167 assert(mSvtRMSPed);
00168 }
00169 }
00170
00171
00172 void StSvtBadAnodesMaker::setSvtBadAnodes()
00173 {
00174 St_DataSet *dataset;
00175
00176 dataset = new TObjectSet("StSvtBadAnodes");
00177 AddConst(dataset);
00178
00179 if (!mSvtBadAnodes) {
00180 mSvtBadAnodes = new StSvtHybridCollection(mSvtData->getConfiguration());
00181 dataset->SetObject((TObject*)mSvtBadAnodes);
00182 assert(mSvtBadAnodes);
00183 }
00184 }
00185
00186
00187 void StSvtBadAnodesMaker::bookHistograms()
00188 {
00189 char posTitle[10];
00190 char preTitle[25];
00191 char* title;
00192 int index, index2;
00193
00194 mFile = new TFile(mFileName->Data(),"RECREATE");
00195
00196 mBadAnodesHist = new TH2F*[mSvtData->getTotalNumberOfHybrids()];
00197
00198 mBadAnodesBarrel = new TH1F*[3];
00199 mBadAnodesBarrel[0] = new TH1F("barrel1","Fraction of Bad Anodes",8,0.5,8.5);
00200 mBadAnodesBarrel[1] = new TH1F("barrel2","Fraction of Bad Anodes",12,0.5,12.5);
00201 mBadAnodesBarrel[2] = new TH1F("barrel3","Fraction of Bad Anodes",16,0.5,16.5);
00202
00203 mBadAnodesLadder = new TH1F*[36];
00204
00205 for (int barrel = 1;barrel <= mSvtData->getNumberOfBarrels();barrel++) {
00206 for (int ladder = 1;ladder <= mSvtData->getNumberOfLadders(barrel);ladder++) {
00207 for (int wafer = 1;wafer <= mSvtData->getNumberOfWafers(barrel);wafer++) {
00208 for (int hybrid = 1;hybrid <= mSvtData->getNumberOfHybrids();hybrid++) {
00209
00210 index = mSvtData->getHybridIndex(barrel,ladder,wafer,hybrid);
00211 if(index < 0) continue;
00212
00213 sprintf(preTitle,"BadAnodes");
00214 sprintf(posTitle,"b%dl%dw%dh%d",barrel, ladder, wafer, hybrid);
00215 title = strcat(preTitle,posTitle);
00216
00217 mBadAnodesHist[index] = new TH2F(title,"Bad Anodes ADC",240,0.5,240.5,128,-0.5,127.5);
00218 }
00219 }
00220
00221 sprintf(preTitle,"ladder");
00222 sprintf(posTitle,"b%dl%d",barrel, ladder);
00223 title = strcat(preTitle,posTitle);
00224
00225 switch (barrel) {
00226 case 1:
00227 index2 = (ladder-1);
00228 mBadAnodesLadder[index2] = new TH1F(title,"Fraction of Bad Anodes",8,0.5,8.5);
00229 break;
00230 case 2:
00231 index2 = mSvtData->getNumberOfLadders(barrel) + (ladder-1);
00232 mBadAnodesLadder[index2] = new TH1F(title,"Fraction of Bad Anodes",12,0.5,12.5);
00233 break;
00234 case 3:
00235 index2 = mSvtData->getNumberOfLadders(barrel) + (ladder-1);
00236 mBadAnodesLadder[index2] = new TH1F(title,"Fraction of Bad Anodes",14,0.5,14.5);
00237 break;
00238 }
00239 }
00240 }
00241
00242 }
00243
00244
00245 Int_t StSvtBadAnodesMaker::Make()
00246 {
00247 int adc, anode, nAnodes, nSeq, iseq, time, timeSeq, status, index;
00248 int* anodeList;
00249 StSequence* Seq;
00250 int nullAdc, overloadedAdc, occup, badRMS;
00251 float ped,rms,meanPed, meanRms;
00252
00253 setSvtData();
00254
00255 mEvents++;
00256
00257
00258 if (mSvtData) {
00259 for (int barrel = 1;barrel <= mSvtData->getNumberOfBarrels();barrel++) {
00260 for (int ladder = 1;ladder <= mSvtData->getNumberOfLadders(barrel);ladder++) {
00261 for (int wafer = 1;wafer <= mSvtData->getNumberOfWafers(barrel);wafer++) {
00262 for (int hybrid = 1;hybrid <= mSvtData->getNumberOfHybrids();hybrid++) {
00263
00264 index = mSvtData->getHybridIndex(barrel, ladder, wafer, hybrid);
00265 if (index < 0) continue;
00266
00267 mHybridData = (StSvtHybridData*)mSvtData->at(index);
00268
00269 if (!mHybridData) continue;
00270
00271 mHybridBadAnodes = (StSvtHybridBadAnodes*)mSvtBadAnodes->at(index);
00272 if (!mHybridBadAnodes)
00273 mHybridBadAnodes = new StSvtHybridBadAnodes(barrel, ladder, wafer, hybrid);
00274
00275 anodeList = NULL;
00276 nAnodes = mHybridData->getAnodeList(anodeList);
00277
00278 for (int ianode=0;ianode<nAnodes;ianode++) {
00279
00280
00281 nullAdc = 0;
00282 overloadedAdc = 0;
00283 occup = 0;
00284 badRMS = 0;
00285
00286 anode = anodeList[ianode];
00287 Seq = NULL;
00288 nSeq = 0;
00289
00290 status = mHybridData->getSequences(anode,nSeq,Seq);
00291
00292 for (iseq=0;iseq<nSeq;iseq++) {
00293 for (timeSeq=0; timeSeq<Seq[iseq].length; timeSeq++) {
00294
00295 time = Seq[iseq].startTimeBin + timeSeq;
00296 adc =(int)Seq[iseq].firstAdc[timeSeq];
00297
00298
00299 if (adc == NULL_ADC)
00300 nullAdc++;
00301
00302
00303 if (adc == OVERLOADED_ADC)
00304 overloadedAdc++;
00305
00306
00307 if ((adc > 0) && (adc < 255))
00308 occup++;
00309 }
00310 }
00311
00312 if (nullAdc >= NULL_ADC_THRESHOLD)
00313 mHybridBadAnodes->addNullAdc(anode,kTRUE,mEvents);
00314 else
00315 mHybridBadAnodes->addNullAdc(anode,kFALSE,mEvents);
00316 if (overloadedAdc >= OVERLOADED_ADC_THRESHOLD)
00317 mHybridBadAnodes->addOverloadedAdc(anode,kTRUE,mEvents);
00318 else
00319 mHybridBadAnodes->addOverloadedAdc(anode,kFALSE,mEvents);
00320 if (occup >= OCCUP_THRESHOLD)
00321 mHybridBadAnodes->addHighOccup(anode,kTRUE,mEvents);
00322 else
00323 mHybridBadAnodes->addHighOccup(anode,kFALSE,mEvents);
00324 }
00325
00326 mSvtBadAnodes->put_at((TObject*)mHybridBadAnodes,index);
00327 }
00328 }
00329 }
00330 }
00331 }
00332
00333
00334 if (mSvtPed) {
00335 for (int barrel = 1;barrel <= mSvtPed->getNumberOfBarrels();barrel++) {
00336 for (int ladder = 1;ladder <= mSvtPed->getNumberOfLadders(barrel);ladder++) {
00337 for (int wafer = 1;wafer <= mSvtPed->getNumberOfWafers(barrel);wafer++) {
00338 for (int hybrid = 1;hybrid <= mSvtPed->getNumberOfHybrids();hybrid++) {
00339
00340 index = mSvtPed->getHybridIndex(barrel, ladder, wafer, hybrid);
00341 if (index < 0) continue;
00342
00343 mHybridPed = (StSvtHybridPed*)mSvtPed->at(index);
00344
00345 if (!mHybridPed) continue;
00346
00347 mHybridBadAnodes = (StSvtHybridBadAnodes*)mSvtBadAnodes->at(index);
00348 if (!mHybridBadAnodes)
00349 mHybridBadAnodes = new StSvtHybridBadAnodes(barrel, ladder, wafer, hybrid);
00350
00351 for (int anode=1;anode<=240;anode++) {
00352 meanPed=0;
00353 for (time=4; time<127; time++) {
00354
00355
00356 ped = mHybridPed->At(mHybridPed->getPixelIndex(anode, time));
00357 meanPed += ped;
00358 }
00359
00360 meanPed /= 123;
00361
00362 if ((meanPed < BAD_MEAN_PED_MIN) || (meanPed > BAD_MEAN_PED_MAX))
00363 mHybridBadAnodes->setBadAnode(anode);
00364 }
00365
00366 mSvtBadAnodes->put_at((TObject*)mHybridBadAnodes,index);
00367 }
00368 }
00369 }
00370 }
00371 }
00372
00373
00374 if (mSvtRMSPed) {
00375 for (int barrel = 1;barrel <= mSvtRMSPed->getNumberOfBarrels();barrel++) {
00376 for (int ladder = 1;ladder <= mSvtRMSPed->getNumberOfLadders(barrel);ladder++) {
00377 for (int wafer = 1;wafer <= mSvtRMSPed->getNumberOfWafers(barrel);wafer++) {
00378 for (int hybrid = 1;hybrid <= mSvtRMSPed->getNumberOfHybrids();hybrid++) {
00379
00380 index = mSvtRMSPed->getHybridIndex(barrel, ladder, wafer, hybrid);
00381 if (index < 0) continue;
00382
00383 mHybridRMSPed = (StSvtHybridPed*)mSvtRMSPed->at(index);
00384
00385 if (!mHybridRMSPed) continue;
00386
00387 mHybridBadAnodes = (StSvtHybridBadAnodes*)mSvtBadAnodes->at(index);
00388 if (!mHybridBadAnodes)
00389 mHybridBadAnodes = new StSvtHybridBadAnodes(barrel, ladder, wafer, hybrid);
00390
00391 for (int anode=1;anode<=240;anode++) {
00392 meanRms=0;
00393 for (time=4; time<127; time++) {
00394
00395
00396 rms = (mHybridRMSPed->At(mHybridRMSPed->getPixelIndex(anode, time)))/mRmsScaleFactor;
00397 meanRms += rms;
00398
00399
00400 }
00401
00402 meanRms /= 123;
00403
00404
00405
00406 if ((meanRms < BAD_MEAN_RMS_MIN) || (meanRms > BAD_MEAN_RMS_MAX))
00407 mHybridBadAnodes->setBadAnode(anode);
00408 }
00409
00410 mSvtBadAnodes->put_at((TObject*)mHybridBadAnodes,index);
00411 }
00412 }
00413 }
00414 }
00415 }
00416
00417 return kStOK;
00418 }
00419
00420
00421 void StSvtBadAnodesMaker::writeToFile(const char* fileName)
00422 {
00423 mFileNameTxt = new TString(mFileName->Data());
00424 mFileNameTxt->ReplaceAll("root","txt");
00425 ofstream file2(mFileNameTxt->Data());
00426 mFileNameTxt->ReplaceAll("txt","Daq.txt");
00427 ofstream file(mFileNameTxt->Data());
00428
00429 int anode, index, nTotalBadAnodes = 0;
00430 int recBoard, mezz, mz_hyb;
00431
00432
00433 for (int barrel = 1;barrel <= mSvtBadAnodes->getNumberOfBarrels();barrel++) {
00434 for (int ladder = 1;ladder <= mSvtBadAnodes->getNumberOfLadders(barrel);ladder++) {
00435 for (int wafer = 1;wafer <= mSvtBadAnodes->getNumberOfWafers(barrel);wafer++) {
00436 for (int hybrid = 1;hybrid <= mSvtBadAnodes->getNumberOfHybrids();hybrid++) {
00437
00438 blwh2rma(barrel, ladder, wafer, hybrid, recBoard, mezz, mz_hyb);
00439
00440 index = mSvtBadAnodes->getHybridIndex(barrel, ladder, wafer, hybrid);
00441 if (index < 0) continue;
00442
00443 mHybridBadAnodes = (StSvtHybridBadAnodes*)mSvtBadAnodes->at(index);
00444
00445 if (!mHybridBadAnodes) continue;
00446
00447 for (int ianode=0;ianode<MAX_NUMBER_OF_ANODES;ianode++) {
00448 anode = ianode + 1;
00449 if (mHybridBadAnodes->isBadAnode(anode)) {
00450 file << recBoard << " " << mezz << " " << mz_hyb << " "
00451 << anode << " " << "0.0" << endl;
00452 file2 << barrel << " " << ladder << " " << wafer << " " << hybrid << " " << anode << endl;
00453 nTotalBadAnodes++;
00454 }
00455 }
00456 }
00457 }
00458 }
00459 }
00460
00461 file2 << (float)nTotalBadAnodes/((float)MAX_NUMBER_OF_ANODES*432.) << endl;
00462 }
00463
00464
00465 Int_t StSvtBadAnodesMaker::Finish()
00466 {
00467 if (Debug()) gMessMgr->Debug() << "StSvtBadAnodesMaker::Finish" << endm;
00468
00469 cout << FREQ_NULL_ADC << " " << FREQ_OVERLOADED_ADC << " " << FREQ_OCCUP << endl;
00470
00471 int adc, anode, nSeq, iseq, time, timeSeq, status, index, index2, ihybrid;
00472 int nBadAnodesHyb=0, nBadAnodesLadder=0;
00473 StSequence* Seq;
00474 float fraction;
00475
00476
00477 for (int barrel = 1;barrel <= mSvtBadAnodes->getNumberOfBarrels();barrel++) {
00478 for (int ladder = 1;ladder <= mSvtBadAnodes->getNumberOfLadders(barrel);ladder++) {
00479 for (int wafer = 1;wafer <= mSvtBadAnodes->getNumberOfWafers(barrel);wafer++) {
00480 for (int hybrid = 1;hybrid <= mSvtBadAnodes->getNumberOfHybrids();hybrid++) {
00481
00482 index = mSvtBadAnodes->getHybridIndex(barrel, ladder, wafer, hybrid);
00483 if (index < 0) continue;
00484
00485 mHybridBadAnodes = (StSvtHybridBadAnodes*)mSvtBadAnodes->at(index);
00486
00487 if (!mHybridBadAnodes) continue;
00488
00489 mHybridData = (StSvtHybridData*)mSvtData->at(index);
00490
00491 if (!mHybridData) continue;
00492
00493 for (int ianode=0;ianode<MAX_NUMBER_OF_ANODES;ianode++) {
00494 anode = ianode + 1;
00495
00496 if ((mHybridBadAnodes->getNullAdc(anode) >= FREQ_NULL_ADC) ||
00497 (mHybridBadAnodes->getOverloadedAdc(anode) >= FREQ_OVERLOADED_ADC) ||
00498 (mHybridBadAnodes->getHighOccup(anode) >= FREQ_OCCUP))
00499 mHybridBadAnodes->setBadAnode(anode);
00500
00501
00502 if (Debug()) {
00503
00504 if (mHybridBadAnodes->isBadAnode(anode)) {
00505
00506 nBadAnodesHyb++;
00507 nBadAnodesLadder++;
00508
00509 Seq = NULL;
00510 nSeq = 0;
00511
00512 status = mHybridData->getSequences(anode,nSeq,Seq);
00513
00514 for (iseq=0;iseq<nSeq;iseq++) {
00515 for (timeSeq=0; timeSeq<Seq[iseq].length; timeSeq++) {
00516
00517 time = Seq[iseq].startTimeBin + timeSeq;
00518 adc =(int)Seq[iseq].firstAdc[timeSeq];
00519
00520 mBadAnodesHist[index]->Fill(anode,time,adc);
00521 }
00522 }
00523 }
00524 }
00525 }
00526
00527 if (Debug()) {
00528 ihybrid = (wafer-1)*2+hybrid;
00529 fraction = (float)nBadAnodesHyb/240.;
00530
00531 switch (barrel) {
00532 case 1:
00533 index2 = (ladder-1);
00534 mBadAnodesLadder[index2]->Fill(ihybrid,fraction);
00535 break;
00536 case 2:
00537 index2 = mSvtData->getNumberOfLadders(barrel) + (ladder-1);
00538 mBadAnodesLadder[index2]->Fill(ihybrid,fraction);
00539 break;
00540 case 3:
00541 index2 = mSvtData->getNumberOfLadders(barrel) + (ladder-1);
00542 mBadAnodesLadder[index2]->Fill(ihybrid,fraction);
00543 break;
00544 }
00545
00546 nBadAnodesHyb = 0;
00547 }
00548 }
00549 }
00550
00551 if (Debug()) {
00552 fraction = (float)nBadAnodesLadder/(240.*(float)mSvtBadAnodes->getNumberOfLadders(barrel));
00553 mBadAnodesBarrel[barrel-1]->Fill(ladder,fraction);
00554 nBadAnodesLadder = 0;
00555 }
00556 }
00557 }
00558
00559 writeToFile();
00560
00561 if (Debug()) {
00562 mFile->Write();
00563 mFile->Close();
00564 }
00565
00566 return kStOK;
00567 }
00568
00569
00570 void StSvtBadAnodesMaker::Reset()
00571 {
00572 if (Debug()) gMessMgr->Debug() << "StSvtBadAnodesMaker::Clear" << endm;
00573
00574 int index;
00575 for (int barrel = 1;barrel <= mSvtBadAnodes->getNumberOfBarrels();barrel++) {
00576 for (int ladder = 1;ladder <= mSvtBadAnodes->getNumberOfLadders(barrel);ladder++) {
00577 for (int wafer = 1;wafer <= mSvtBadAnodes->getNumberOfWafers(barrel);wafer++) {
00578 for (int hybrid = 1;hybrid <= mSvtBadAnodes->getNumberOfHybrids();hybrid++) {
00579
00580 index = mSvtBadAnodes->getHybridIndex(barrel, ladder, wafer, hybrid);
00581 if (index < 0) continue;
00582
00583 mHybridBadAnodes = (StSvtHybridBadAnodes*)mSvtBadAnodes->at(index);
00584
00585 if (mHybridBadAnodes) delete mHybridBadAnodes;
00586 mSvtBadAnodes->put_at(NULL,index);
00587 }
00588 }
00589 }
00590 }
00591 }
00592
00593
00594 void StSvtBadAnodesMaker::blwh2rma(int barrel, int ladder, int wafer, int hybrid,
00595 int& recBoard, int& mezz, int& mz_hyb)
00596 {
00597 switch (barrel) {
00598 case 1:
00599 recBoard = key_barrel1[ladder-1][wafer-1][hybrid-1][0];
00600 mezz = key_barrel1[ladder-1][wafer-1][hybrid-1][1];
00601 mz_hyb = key_barrel1[ladder-1][wafer-1][hybrid-1][2];
00602 break;
00603 case 2:
00604 recBoard = key_barrel2[ladder-1][wafer-1][hybrid-1][0];
00605 mezz = key_barrel2[ladder-1][wafer-1][hybrid-1][1];
00606 mz_hyb = key_barrel2[ladder-1][wafer-1][hybrid-1][2];
00607 break;
00608 case 3:
00609 recBoard = key_barrel3[ladder-1][wafer-1][hybrid-1][0];
00610 mezz = key_barrel3[ladder-1][wafer-1][hybrid-1][1];
00611 mz_hyb = key_barrel3[ladder-1][wafer-1][hybrid-1][2];
00612 break;
00613 }
00614 }