1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 ////////////////////////////////////////////////////////////////////////////
18 // AliTRDCalibChamberStatus: to determine which half chambers are off //
19 // Produce a AliTRDCalChamberStatus calibration object //
20 // Check with the AliTRDCalDCSFEE info //
24 // J. Book (jbook@ikf.uni-frankfurt.de) //
25 // R. Bailhache (rbailhache@ikf.uni-frankfurt.de) //
27 ////////////////////////////////////////////////////////////////////////////
31 #include <THnSparse.h>
33 #include <TDirectory.h>
41 #include "AliRawReader.h"
45 #include "AliTRDCalibChamberStatus.h"
46 #include "AliTRDgeometry.h"
47 #include "AliTRDfeeParam.h"
48 #include "AliTRDdigitsManager.h"
49 #include "AliTRDSignalIndex.h"
50 #include "AliTRDrawFastStream.h"
51 #include "AliTRDpadPlane.h"
52 #include "./Cal/AliTRDCalChamberStatus.h"
53 #include "./Cal/AliTRDCalDCS.h"
54 #include "./Cal/AliTRDCalDCSFEE.h"
56 #include "AliTRDrawStream.h"
62 ClassImp(AliTRDCalibChamberStatus) /*FOLD00*/
64 //_____________________________________________________________________
65 AliTRDCalibChamberStatus::AliTRDCalibChamberStatus() : /*FOLD00*/
69 fCounterEventNotEmpty(0),
70 fCalChamberStatus(0x0),
80 // default constructor
84 //_____________________________________________________________________
85 AliTRDCalibChamberStatus::AliTRDCalibChamberStatus(const AliTRDCalibChamberStatus &ped) : /*FOLD00*/
87 fDetector(ped.fDetector),
88 fNumberOfTimeBins(ped.fNumberOfTimeBins),
89 fCounterEventNotEmpty(ped.fCounterEventNotEmpty),
90 fCalChamberStatus(ped.fCalChamberStatus),
91 fHnSparseI(ped.fHnSparseI),
92 fHnSparseHCM(ped.fHnSparseHCM),
93 fHnSparseEvtDet(ped.fHnSparseEvtDet),
94 fHnSparseDebug(ped.fHnSparseDebug),
95 fHnSparseMCM(ped.fHnSparseMCM),
97 fDebugLevel(ped.fDebugLevel)
104 //_____________________________________________________________________
105 AliTRDCalibChamberStatus& AliTRDCalibChamberStatus::operator = (const AliTRDCalibChamberStatus &source)
108 // assignment operator
110 if (&source == this) return *this;
111 new (this) AliTRDCalibChamberStatus(source);
115 //_____________________________________________________________________
116 AliTRDCalibChamberStatus::~AliTRDCalibChamberStatus() /*FOLD00*/
121 if(fCalChamberStatus){
122 delete fCalChamberStatus;
130 if(fHnSparseEvtDet) {
131 delete fHnSparseEvtDet;
134 delete fHnSparseDebug;
144 //_____________________________________________________________________
145 void AliTRDCalibChamberStatus::Init()
148 // Init the different THnSparse
153 // Init the fHnSparseI
157 Int_t thnDimEvt[4]; // sm, layer, stack, halfchamber
162 //arrays for lower bounds :
163 Double_t* binEdgesEvt[4];
164 for(Int_t ivar = 0; ivar < 4; ivar++)
165 binEdgesEvt[ivar] = new Double_t[thnDimEvt[ivar] + 1];
166 //values for bin lower bounds
167 for(Int_t i=0; i<=thnDimEvt[0]; i++) binEdgesEvt[0][i]= 0.0 + (18.0)/thnDimEvt[0]*(Double_t)i;
168 for(Int_t i=0; i<=thnDimEvt[1]; i++) binEdgesEvt[1][i]= 0.0 + (6.0)/thnDimEvt[1]*(Double_t)i;
169 for(Int_t i=0; i<=thnDimEvt[2]; i++) binEdgesEvt[2][i]= 0.0 + (5.0)/thnDimEvt[2]*(Double_t)i;
170 for(Int_t i=0; i<=thnDimEvt[3]; i++) binEdgesEvt[3][i]= 0.0 + (2.0)/thnDimEvt[3]*(Double_t)i;
172 //create the THnSparse
173 fHnSparseI = new THnSparseI("NumberOfEntries","NumberOfEntries",4,thnDimEvt);
174 for (int k=0; k<4; k++) {
175 fHnSparseI->SetBinEdges(k,binEdgesEvt[k]);
180 // Init the fHnSparseHCM (THnSparseI)
183 //create the THnSparse
184 fHnSparseHCM = new THnSparseI("HCMerrors","HCMerrors",4,thnDimEvt);
185 for (int k=0; k<4; k++) {
186 fHnSparseHCM->SetBinEdges(k,binEdgesEvt[k]);
188 fHnSparseHCM->Sumw2();
193 if(fDebugLevel > 0) {
196 // Init the fHnSparseEvtDet (THnSparseI)
200 Int_t thnDimEvts[3]; // event, detector, halfchamber
201 thnDimEvts[0] = 10000;
204 //arrays for lower bounds :
205 Double_t* binEdgesEvts[3];
206 for(Int_t ivar = 0; ivar < 3; ivar++)
207 binEdgesEvts[ivar] = new Double_t[thnDimEvts[ivar] + 1];
208 //values for bin lower bounds
209 for(Int_t i=0; i<=thnDimEvts[0]; i++) binEdgesEvts[0][i]= 0.0 + (10000.0)/thnDimEvts[0]*(Double_t)i;
210 for(Int_t i=0; i<=thnDimEvts[1]; i++) binEdgesEvts[1][i]= 0.0 + (540.0)/thnDimEvts[1]*(Double_t)i;
211 for(Int_t i=0; i<=thnDimEvts[2]; i++) binEdgesEvts[2][i]= 0.0 + (2.0)/thnDimEvts[2]*(Double_t)i;
213 //create the THnSparse
214 fHnSparseEvtDet = new THnSparseI("NumberOfEntriesPerEvent","NumberOfEntriesPerEvent",3,thnDimEvts);
215 for (int k=0; k<3; k++) {
216 fHnSparseEvtDet->SetBinEdges(k,binEdgesEvts[k]);
218 fHnSparseEvtDet->Sumw2();
221 // Init the fHnSparseDebug (THnSparseI)
224 //create the THnSparse
225 fHnSparseDebug = new THnSparseI("NumberOfDifferentDecisions","NumberOfDifferentDecisions",4,thnDimEvt);
226 for (int k=0; k<4; k++) {
227 fHnSparseDebug->SetBinEdges(k,binEdgesEvt[k]);
229 fHnSparseDebug->Sumw2();
232 // Init the fHnSparseMCM (THnSparseI)
236 Int_t thnDimEvtt[6]; // sm, layer, stack, ROB, MCM
243 //arrays for lower bounds :
244 Double_t* binEdgesEvtt[6];
245 for(Int_t ivar = 0; ivar < 6; ivar++)
246 binEdgesEvtt[ivar] = new Double_t[thnDimEvtt[ivar] + 1];
247 //values for bin lower bounds
248 for(Int_t i=0; i<=thnDimEvtt[0]; i++) binEdgesEvtt[0][i]= 0.0 + (18.0)/thnDimEvtt[0]*(Double_t)i;
249 for(Int_t i=0; i<=thnDimEvtt[1]; i++) binEdgesEvtt[1][i]= 0.0 + (6.0)/thnDimEvtt[1]*(Double_t)i;
250 for(Int_t i=0; i<=thnDimEvtt[2]; i++) binEdgesEvtt[2][i]= 0.0 + (5.0)/thnDimEvtt[2]*(Double_t)i;
251 for(Int_t i=0; i<=thnDimEvtt[3]; i++) binEdgesEvtt[3][i]= 0.0 + (8.0)/thnDimEvtt[3]*(Double_t)i;
252 for(Int_t i=0; i<=thnDimEvtt[4]; i++) binEdgesEvtt[4][i]= 0.0 + (18.0)/thnDimEvtt[4]*(Double_t)i;
253 for(Int_t i=0; i<=thnDimEvtt[5]; i++) binEdgesEvtt[5][i]= 0.0 + (18.0)/thnDimEvtt[5]*(Double_t)i;
255 //create the THnSparse
256 fHnSparseMCM = new THnSparseI("MCMerrorDCS","MCMerrorDCS",6,thnDimEvtt);
257 for (int k=0; k<6; k++) {
258 fHnSparseMCM->SetBinEdges(k,binEdgesEvtt[k]);
260 fHnSparseMCM->Sumw2();
267 //_____________________________________________________________________
268 void AliTRDCalibChamberStatus::ProcessEvent(AliRawReader * rawReader, Int_t nevents_physics)
271 // Event Processing loop
275 Bool_t notEmpty = kFALSE;
277 AliTRDrawFastStream *rawStream = new AliTRDrawFastStream(rawReader);
278 rawStream->SetNoErrorWarning();
279 rawStream->SetSharedPadReadout(kFALSE);
281 AliTRDdigitsManager *digitsManager = new AliTRDdigitsManager(kTRUE);
282 digitsManager->CreateArrays();
285 while ((det = rawStream->NextChamber(digitsManager, NULL, NULL)) >= 0) {
289 // do the QA analysis
290 if (digitsManager->GetIndexes(det)->HasEntry()) {//QA
291 // printf("there is ADC data on this chamber!\n");
293 AliTRDSignalIndex *indexes = digitsManager->GetIndexes(det);
294 if (indexes->IsAllocated() == kFALSE) {
295 // AliError("Indexes do not exist!");
301 indexes->ResetCounters();
303 while (indexes->NextRCIndex(iRow, iCol)){
304 Int_t iMcm = (Int_t)(iCol/18); // current group of 18 col pads
306 Int_t layer = AliTRDgeometry::GetLayer(det);
307 Int_t sm = AliTRDgeometry::GetSector(det);
308 Int_t stac = AliTRDgeometry::GetStack(det);
310 if(iMcm > 3) rphi = 1.5;
312 Double_t val[4] = {sm,layer,stac,rphi};
313 fHnSparseI->Fill(&val[0]);
318 if(fDebugLevel > 0) {
319 Int_t detector = AliTRDgeometry::GetDetector(layer,stac,sm);
320 Double_t valu[3] = {nevents_physics,detector,rphi};
321 fHnSparseEvtDet->Fill(&valu[0]);
328 digitsManager->ClearArrays(det);
331 if(notEmpty) fCounterEventNotEmpty++;
333 if(digitsManager) delete digitsManager;
334 if(rawStream) delete rawStream;
336 }//_____________________________________________________________________
337 void AliTRDCalibChamberStatus::ProcessEvent3(AliRawReader * rawReader, Int_t nevents_physics)
340 // Event Processing loop with AliTRDrawStream
344 Bool_t notEmpty = kFALSE;
346 AliTRDdigitsManager *digitsManager = new AliTRDdigitsManager(kTRUE);
347 digitsManager->CreateArrays();
349 AliTRDrawStream *rawStream = new AliTRDrawStream(rawReader);
350 rawStream->SetDigitsManager(digitsManager);
351 // rawStream->SetNoErrorWarning();
352 // rawStream->SetSharedPadReadout(kFALSE);
356 while ((det = rawStream->NextChamber(digitsManager, NULL, NULL)) >= 0) {
360 // do the QA analysis
361 if (digitsManager->GetIndexes(det)->HasEntry()) {//QA
362 // printf("there is ADC data on this chamber!\n");
364 AliTRDSignalIndex *indexes = digitsManager->GetIndexes(det);
365 if (indexes->IsAllocated() == kFALSE) {
366 // AliError("Indexes do not exist!");
372 indexes->ResetCounters();
374 while (indexes->NextRCIndex(iRow, iCol)){
375 Int_t iMcm = (Int_t)(iCol/18); // current group of 18 col pads
377 Int_t layer = AliTRDgeometry::GetLayer(det);
378 Int_t sm = AliTRDgeometry::GetSector(det);
379 Int_t stac = AliTRDgeometry::GetStack(det);
381 if(iMcm > 3) rphi = 1.5;
383 Double_t val[4] = {sm,layer,stac,rphi};
384 fHnSparseI->Fill(&val[0]);
389 if(fDebugLevel > 0) {
390 Int_t detector = AliTRDgeometry::GetDetector(layer,stac,sm);
391 Double_t valu[3] = {nevents_physics,detector,rphi};
392 fHnSparseEvtDet->Fill(&valu[0]);
399 digitsManager->ClearArrays(det);
402 if(notEmpty) fCounterEventNotEmpty++;
404 if(digitsManager) delete digitsManager;
405 if(rawStream) delete rawStream;
408 //_____________________________________________________________________
409 Bool_t AliTRDCalibChamberStatus::TestEventHisto(Int_t nevent) /*FOLD00*/
413 // fill the fHnSparseI with entries
419 for(Int_t ievent=0; ievent<nevent; ievent++){
420 for (Int_t ism=0; ism<18; ism++){
421 for (Int_t istack=0; istack<5; istack++){
422 for (Int_t ipl=0; ipl<6; ipl++){
423 for (Int_t icol=0; icol<geo.GetColMax(ipl); icol++){
425 if(icol > 72) side = 1;
426 Double_t val[4] = {ism,ipl,istack,side};
427 fHnSparseI->Fill(&val[0]);
437 //_____________________________________________________________________
438 void AliTRDCalibChamberStatus::AnalyseHisto() /*FOLD00*/
441 // Create the AliTRDCalChamberStatus according to the fHnSparseI
444 if(fCalChamberStatus) delete fCalChamberStatus;
445 fCalChamberStatus = new AliTRDCalChamberStatus();
447 // Check if enough events to say something
448 if(fCounterEventNotEmpty < 200) {
450 for (Int_t ism=0; ism<18; ism++) {
451 for (Int_t ipl=0; ipl<6; ipl++) {
452 for (Int_t istack=0; istack<5; istack++) {
453 // layer, stack, sector
454 Int_t det = AliTRDgeometry::GetDetector(ipl,istack,ism);
455 fCalChamberStatus->SetStatus(det,1);
462 // Mask out all chambers
463 for (Int_t ism=0; ism<18; ism++) {
464 for (Int_t ipl=0; ipl<6; ipl++) {
465 for (Int_t istack=0; istack<5; istack++) {
466 // layer, stack, sector
467 Int_t det = AliTRDgeometry::GetDetector(ipl,istack,ism);
468 fCalChamberStatus->SetStatus(det,2);
473 // Unmask good chambers
475 for(Int_t bin = 0; bin < fHnSparseI->GetNbins(); bin++) {
477 fHnSparseI->GetBinContent(bin,coord);
478 // layer, stack, sector
479 Int_t detector = AliTRDgeometry::GetDetector(coord[1]-1,coord[2]-1,coord[0]-1);
482 // Check which halfchamber side corresponds to the bin number (0=A, 1=B)
483 // Change the status accordingly
486 switch(fCalChamberStatus->GetStatus(detector))
488 case 1: break; // no changes
491 fCalChamberStatus->SetStatus(detector,4); break; // only SideB is masked
494 fCalChamberStatus->SetStatus(detector,3); break; // only SideA is masked
496 case 3: fCalChamberStatus->SetStatus(detector,1); break; // unmask SideA
497 case 4: fCalChamberStatus->SetStatus(detector,1); break; // unmask SideB
503 //_____________________________________________________________________
504 void AliTRDCalibChamberStatus::CheckEORStatus(AliTRDCalDCS *calDCS) /*FOLD00*/
507 // Correct the AliTRDCalChamberStatus according to the AliTRDCalDCS
508 // Using globale state of the HalfChamberMerger (HCM)
510 for(Int_t det = 0; det < 540; det++) {
511 AliTRDCalDCSFEE* calDCSFEEEOR = calDCS->GetCalDCSFEEObj(det);
513 if(!calDCSFEEEOR) continue;
515 // MCM Global State Machine State Definitions
527 Int_t sm = AliTRDgeometry::GetSector(det);
528 Int_t lay = AliTRDgeometry::GetLayer(det);
529 Int_t stac = AliTRDgeometry::GetStack(det);
531 Int_t stateA = 0; // 0=bad, 1=good state
534 // loop over all mcm to define DCS-HCS
535 for(Int_t ii = 0; ii < 8; ii++) { //ROB loop
536 for(Int_t i = 0; i < 18; i++) { //MCM loop
538 Int_t side = ii%2; // 0=sideA, 1=sideB
539 Int_t cstate = calDCSFEEEOR->GetMCMGlobalState(ii,i); //current mcm state
543 case 0: stateA=1; break;
544 case 1: stateB=1; break;
552 if(fDebugLevel > 0) {
553 if( ((fCalChamberStatus->GetStatus(det) <= 1) && (stateA==0 || stateB==0)) ||
554 ((fCalChamberStatus->GetStatus(det) == 2) && (stateA==1 || stateB==1)) ||
555 ((fCalChamberStatus->GetStatus(det) == 3) && (stateA==1 || stateB==0)) ||
556 ((fCalChamberStatus->GetStatus(det) == 4) && (stateB==0 || stateB==1)) )
558 //printf(" Different half chamber status in DCS and DATA!!\n");
559 Double_t val[4] = {sm,lay,stac,1};
560 fHnSparseDebug->Fill(&val[0]);
562 // Fill MCM status map
563 for(Int_t ii = 0; ii < 8; ii++) { //ROB loop
564 for(Int_t i = 0; i < 18; i++) { //MCM loop
565 Double_t valss[6] = {sm,lay,stac,ii,i
566 ,calDCSFEEEOR->GetMCMGlobalState(ii,i)};
567 fHnSparseMCM->Fill(&valss[0]);
576 //---------------------------------------
577 // Change the status according to DCS
578 //---------------------------------------
579 Int_t StatusData = fCalChamberStatus->GetStatus(det);
583 if(stateA==0 && stateB==0) fCalChamberStatus->SetStatus(det,2); // completely masked from DCS
584 if(stateA==1 && stateB==0) fCalChamberStatus->SetStatus(det,4); // Only B side masked from DCS
585 if(stateA==0 && stateB==1) fCalChamberStatus->SetStatus(det,3); // Only A side masked from DCS
586 if(stateA==1 && stateB==1) fCalChamberStatus->SetStatus(det,1);
588 case 2: // completely masked from DATA
589 if(stateA==0 && stateB==0) fCalChamberStatus->SetStatus(det,2); // completely masked from DCS
591 case 3: // Only A side masked from DATA
592 if(stateA==0 && stateB==0) fCalChamberStatus->SetStatus(det,2); // completely masked from DCS
593 if(stateA==1 && stateB==0) fCalChamberStatus->SetStatus(det,2); // Only B side masked from DCS
594 if(stateA==0 && stateB==1) fCalChamberStatus->SetStatus(det,3); // Only A side masked from DCS
595 if(stateA==1 && stateB==1) fCalChamberStatus->SetStatus(det,3);
597 case 4: // Only B side masked from DATA
598 if(stateA==0 && stateB==0) fCalChamberStatus->SetStatus(det,2); // completely masked from DCS
599 if(stateA==1 && stateB==0) fCalChamberStatus->SetStatus(det,4); // Only B side masked from DCS
600 if(stateA==0 && stateB==1) fCalChamberStatus->SetStatus(det,2); // Only A side masked from DCS
601 if(stateA==1 && stateB==1) fCalChamberStatus->SetStatus(det,4);
609 //_____________________________________________________________________________________
610 void AliTRDCalibChamberStatus::Add(AliTRDCalibChamberStatus *calibChamberStatus) /*FOLD00*/
613 // Add the THnSparseI of this calibChamberStatus
616 fCounterEventNotEmpty += calibChamberStatus->GetNumberEventNotEmpty();
618 THnSparseI *hnSparseI = calibChamberStatus->GetSparseI();
619 if(!hnSparseI) return;
622 fHnSparseI = (THnSparseI *) hnSparseI->Clone();
625 fHnSparseI->Add(hnSparseI);
630 //_____________________________________________________________________
631 void AliTRDCalibChamberStatus::DumpToFile(const Char_t *filename, const Char_t *dir, Bool_t append) /*FOLD00*/
634 // Write class to file
645 TDirectory *backup = gDirectory;
646 TFile f(filename,option.Data());
648 if ( !sDir.IsNull() ){
649 f.mkdir(sDir.Data());
655 if ( backup ) backup->cd();
657 //_____________________________________________________________________________
658 TH2D* AliTRDCalibChamberStatus::PlotSparseI(Int_t sm,Int_t side)
661 // Plot number of entries for supermodule sm
662 // as a function of layer and stack
665 if(!fHnSparseI) return 0x0;
667 fHnSparseI->GetAxis(0)->SetRange(sm+1,sm+1);
668 fHnSparseI->GetAxis(3)->SetRange(side+1,side+1);
669 TH2D *h2 = fHnSparseI->Projection(1,2);
675 //_____________________________________________________________________
676 TH2F *AliTRDCalibChamberStatus::MakeHisto2DSmPlEORStatus(AliTRDCalDCS *calDCS, Int_t sm, Int_t pl) /*FOLD00*/
679 // Plot globale state of the HalfChamberMerger (HCM)
681 AliTRDfeeParam *paramfee = AliTRDfeeParam::Instance();
683 AliTRDgeometry *trdGeo = new AliTRDgeometry();
684 AliTRDpadPlane *padPlane0 = trdGeo->GetPadPlane(pl,0); // layer,stack
685 Double_t row0 = padPlane0->GetRow0();
686 Double_t col0 = padPlane0->GetCol0();
689 sprintf(name,"%s DCS status sm %d pl %d",GetTitle(),sm,pl);
690 TH2F * his = new TH2F( name, name, 88,-TMath::Abs(row0),TMath::Abs(row0)
691 ,148,-TMath::Abs(col0),TMath::Abs(col0));
695 Int_t offsetsmpl = 30*sm+pl;
699 for (Int_t k = 0; k < nstack; k++){
700 Int_t det = offsetsmpl+k*6;
701 Int_t stac = AliTRDgeometry::GetStack(det);
702 AliTRDCalDCSFEE* calDCSFEEEOR = calDCS->GetCalDCSFEEObj(det);
703 if(!calDCSFEEEOR) { continue;}
704 for (Int_t icol=0; icol<ncols; icol++){
706 if(stac==2) nrows = 12;
707 for (Int_t irow=0; irow<nrows; irow++){
710 Int_t krow = nrows-1-irow;
711 Int_t kcol = ncols-1-icol;
712 if(kb > 2) binz = 16*(kb-1)+12+krow+1+2*(kb+1);
713 else binz = 16*kb+krow+1+2*(kb+1);
714 Int_t biny = kcol+1+2;
716 Int_t mcm = paramfee->GetMCMfromPad(irow,icol);
717 Int_t rob = paramfee->GetROBfromPad(irow,icol);
718 Int_t state = calDCSFEEEOR->GetMCMGlobalState(rob,mcm);
719 his->SetBinContent(binz,biny,state);
722 for(Int_t icol = 1; icol < 147; icol++){
723 for(Int_t l = 0; l < 2; l++){
726 if(kb > 2) binz = 16*(kb-1)+12+1+2*(kb+1)-(l+1);
727 else binz = 16*kb+1+2*(kb+1)-(l+1);
728 his->SetBinContent(binz,icol,16.0);
733 for(Int_t icol = 1; icol < 147; icol++){
734 his->SetBinContent(88,icol,16.0);
735 his->SetBinContent(87,icol,16.0);
737 for(Int_t irow = 1; irow < 89; irow++){
738 his->SetBinContent(irow,1,16.0);
739 his->SetBinContent(irow,2,16.0);
740 his->SetBinContent(irow,147,16.0);
741 his->SetBinContent(irow,148,16.0);
744 his->SetXTitle("z (cm)");
745 his->SetYTitle("y (cm)");
747 his->SetMinimum(0.0);
753 //_____________________________________________________________________________
754 TCanvas* AliTRDCalibChamberStatus::PlotHistos2DSmEORStatus(AliTRDCalDCS *calDCS, Int_t sm, const Char_t *name)
760 gStyle->SetPalette(1);
761 fC1 = new TCanvas(name,name,50,50,600,800);
764 MakeHisto2DSmPlEORStatus(calDCS,sm,0)->Draw("colz");
766 MakeHisto2DSmPlEORStatus(calDCS,sm,1)->Draw("colz");
768 MakeHisto2DSmPlEORStatus(calDCS,sm,2)->Draw("colz");
770 MakeHisto2DSmPlEORStatus(calDCS,sm,3)->Draw("colz");
772 MakeHisto2DSmPlEORStatus(calDCS,sm,4)->Draw("colz");
774 MakeHisto2DSmPlEORStatus(calDCS,sm,5)->Draw("colz");