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 **************************************************************************/
18 // --- MUON header files ---
19 #include "AliMUONQADataMakerRec.h"
21 #include "AliMUON2DMap.h"
22 #include "AliMUONCluster.h"
23 #include "AliMUONConstants.h"
24 #include "AliMUONDDLTrigger.h"
25 #include "AliMUONDarcHeader.h"
26 #include "AliMUONDigitMaker.h"
27 #include "AliMUONLocalStruct.h"
28 #include "AliMUONLocalTrigger.h"
29 #include "AliMUONRawStreamTracker.h"
30 #include "AliMUONRawStreamTrigger.h"
31 #include "AliMUONRecoParam.h"
32 #include "AliMUONRegHeader.h"
33 #include "AliMUONTrackerCalibratedDataMaker.h"
34 #include "AliMUONTriggerDisplay.h"
35 #include "AliMUONVCluster.h"
36 #include "AliMUONVClusterStore.h"
37 #include "AliMUONVDigit.h"
38 #include "AliMUONVDigitStore.h"
39 #include "AliMUONVTrackerData.h"
40 #include "AliMUONVTriggerStore.h"
42 #include "AliMpConstants.h"
43 #include "AliMpDDLStore.h"
44 #include "AliMpDEIterator.h"
45 #include "AliMpDEManager.h"
46 #include "AliMpLocalBoard.h"
47 #include "AliMpStationType.h"
48 #include "AliMpTriggerCrate.h"
49 #include "AliRawEventHeaderBase.h"
51 // --- AliRoot header files ---
52 #include "AliCDBManager.h"
53 #include "AliCDBStorage.h"
54 #include "AliESDEvent.h"
55 #include "AliESDMuonTrack.h"
56 #include "AliESDMuonCluster.h"
58 #include "AliRawReader.h"
59 #include "AliQAChecker.h"
60 #include "AliCodeTimer.h"
62 // --- ROOT system ---
63 #include <TClonesArray.h>
69 #include <TLorentzVector.h>
70 #include <Riostream.h>
72 //-----------------------------------------------------------------------------
73 /// \class AliMUONQADataMakerRec
75 /// MUON base class for quality assurance data (histo) maker
77 /// \author C. Finck, D. Stocco, L. Aphecetche
80 ClassImp(AliMUONQADataMakerRec)
83 //____________________________________________________________________________
84 AliMUONQADataMakerRec::AliMUONQADataMakerRec(const AliMUONRecoParam* recoParam) :
85 AliQADataMakerRec(AliQA::GetDetName(AliQA::kMUON), "MUON Quality Assurance Data Maker"),
87 fIsInitRecPointsTracker(kFALSE),
88 fIsInitRecPointsTrigger(kFALSE),
94 fTrackerDataMaker(0x0),
102 //____________________________________________________________________________
104 AliMUONQADataMakerRec::Ctor()
106 /// Init some members
107 fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV1");
108 fDigitMaker = new AliMUONDigitMaker(kTRUE);
111 //____________________________________________________________________________
112 AliMUONQADataMakerRec::AliMUONQADataMakerRec(const AliMUONQADataMakerRec& qadm) :
113 AliQADataMakerRec(qadm),
115 fIsInitRecPointsTracker(kFALSE),
116 fIsInitRecPointsTrigger(kFALSE),
122 fTrackerDataMaker(0x0)
125 SetName((const char*)qadm.GetName()) ;
126 SetTitle((const char*)qadm.GetTitle());
128 // Do not copy the digit store and digit maker, but create its own ones
134 //__________________________________________________________________
135 AliMUONQADataMakerRec& AliMUONQADataMakerRec::operator = (const AliMUONQADataMakerRec& qadm )
137 /// Assignment operator
139 // check assignment to self
140 if (this == &qadm) return *this;
142 this->~AliMUONQADataMakerRec();
143 new(this) AliMUONQADataMakerRec(qadm);
147 //__________________________________________________________________
148 AliMUONQADataMakerRec::~AliMUONQADataMakerRec()
152 AliCodeTimerAuto("");
155 delete fTriggerStore;
157 delete fClusterStore;
158 delete fTrackerDataMaker;
161 //____________________________________________________________________________
162 void AliMUONQADataMakerRec::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray* list)
164 ///Detector specific actions at end of cycle
166 // Display trigger histos in a more user friendly way
167 DisplayTriggerInfo(task);
169 if ( task == AliQA::kRAWS )
173 Bool_t alreadyThere(kFALSE);
174 while ( ( o = next() ) && !alreadyThere )
176 TString classname(o->ClassName());
177 if ( classname.Contains("TrackerData") ) alreadyThere = kTRUE;
179 if (!alreadyThere) list->AddAt(fTrackerDataMaker->Data(),(Int_t)kTrackerData);
182 // do the QA checking
183 AliQAChecker::Instance()->Run(AliQA::kMUON, task, list) ;
186 //____________________________________________________________________________
187 void AliMUONQADataMakerRec::InitRaws()
189 /// create Raws histograms in Raws subdir
191 if ( ! AliCDBManager::Instance()->GetDefaultStorage() )
193 AliError("CDB default storage not set. Cannot work.");
197 TH3F* h3 = new TH3F("hTriggerScalersBendPlane", "Trigger scalers in bending plane",
201 h3->GetXaxis()->SetTitle("Chamber");
202 h3->GetYaxis()->SetTitle("Board");
203 h3->GetZaxis()->SetTitle("Strip");
204 Add2RawsList(h3, kTriggerScalersBP);
206 TH3F* h4 = new TH3F("hTriggerScalersNonBendPlane", "Trigger scalers in non-bending plane",
210 h4->GetXaxis()->SetTitle("Chamber");
211 h4->GetYaxis()->SetTitle("Board");
212 h4->GetZaxis()->SetTitle("Strip");
213 Add2RawsList(h4, kTriggerScalersNBP);
215 AliMUONTriggerDisplay triggerDisplay;
216 TString histoName, histoTitle;
217 for(Int_t iCath=0; iCath<AliMpConstants::NofCathodes(); iCath++){
218 TString cathName = ( iCath==0 ) ? "BendPlane" : "NonBendPlane";
219 for(Int_t iChamber=0; iChamber<AliMpConstants::NofTriggerChambers(); iChamber++){
220 histoName = Form("hScalers%sChamber%i", cathName.Data(), 11+iChamber);
221 histoTitle = Form("Chamber %i: Scalers %s", 11+iChamber, cathName.Data());
222 TH2F* h5 = (TH2F*)triggerDisplay.GetEmptyDisplayHisto(histoName, AliMUONTriggerDisplay::kDisplayStrips,
223 iCath, iChamber, histoTitle);
224 Add2RawsList(h5, kTriggerScalersDisplay + AliMpConstants::NofTriggerChambers()*iCath + iChamber);
231 //____________________________________________________________________________
232 void AliMUONQADataMakerRec::InitRecPoints()
234 /// create Reconstructed Points histograms in RecPoints subdir
235 InitRecPointsTrigger();
236 InitRecPointsTracker();
239 //____________________________________________________________________________
240 void AliMUONQADataMakerRec::InitRecPointsTracker()
242 /// create Reconstructed Points histograms in RecPoints subdir for the
243 /// MUON tracker subsystem.
251 while ( !it.IsDone())
253 Int_t detElemId = it.CurrentDEId();
257 if ( AliMpDEManager::GetStationType(detElemId) != AliMp::kStationTrigger )
259 ndes = TMath::Max(ndes,detElemId);
261 TH1* h = new TH1I(Form("hTrackerClusterMultiplicityForDE%04d",detElemId),
262 Form("Multiplicity of the clusters in detection element %d",detElemId),
265 h->GetXaxis()->SetTitle("Detection Element Id");
267 Add2RecPointsList(h,kTrackerClusterMultiplicityPerDE+detElemId);
269 h = new TH1I(Form("hTrackerClusterChargeForDE%04d",detElemId),
270 Form("Charge of the clusters in detection element %d",detElemId),
273 h->GetXaxis()->SetTitle("Detection Element Id");
275 Add2RecPointsList(h,kTrackerClusterChargePerDE+detElemId);
281 TH1* h = new TH1I("hTrackerNumberOfClustersPerDE","Number of clusters per detection element",
282 ndes, -0.5, ndes - 0.5);
284 h->GetXaxis()->SetTitle("Detection Element Id");
286 Add2RecPointsList(h, kTrackerNumberOfClustersPerDE);
288 for ( Int_t i = 0; i < AliMpConstants::NofTrackingChambers(); ++i )
290 TH1* h1 = new TH1I("hTrackerNumberOfClustersPerChamber","Number of clusters per chamber",AliMpConstants::NofTrackingChambers(),-0.5,AliMpConstants::NofTrackingChambers()-0.5);
291 Add2RecPointsList(h1,kTrackerNumberOfClustersPerChamber);
292 h1 = new TH1I(Form("hTrackerClusterMultiplicityForChamber%d",i),
293 Form("Cluster multiplicity for chamber %d",i),
295 Add2RecPointsList(h1,kTrackerClusterMultiplicityPerChamber+i);
296 h1 = new TH1I(Form("hTrackerClusterChargeForChamber%d",i),
297 Form("Cluster charge for chamber %d",i),
299 Add2RecPointsList(h1,kTrackerClusterChargePerChamber+i);
302 fIsInitRecPointsTracker=kTRUE;
305 //____________________________________________________________________________
306 void AliMUONQADataMakerRec::InitRecPointsTrigger()
308 /// create Reconstructed Points histograms in RecPoints subdir for the
309 /// MUON Trigger subsystem.
311 TH3F* h0 = new TH3F("hTriggerDigitsBendPlane", "Trigger digits in bending plane",
315 h0->GetXaxis()->SetTitle("Chamber");
316 h0->GetYaxis()->SetTitle("Board");
317 h0->GetZaxis()->SetTitle("Strip");
318 Add2RecPointsList(h0, kTriggerDigitsBendPlane);
320 TH3F* h1 = new TH3F("hTriggerDigitsNonBendPlane", "Trigger digits in non-bending plane",
324 h1->GetXaxis()->SetTitle("Chamber");
325 h1->GetYaxis()->SetTitle("Board");
326 h1->GetZaxis()->SetTitle("Strip");
327 Add2RecPointsList(h1, kTriggerDigitsNonBendPlane);
329 TH1F* h2 = new TH1F("hTriggeredBoards", "Triggered boards", 234, 0.5, 234.5);
330 Add2RecPointsList(h2, kTriggeredBoards);
332 AliMUONTriggerDisplay triggerDisplay;
333 TString histoName, histoTitle;
334 for(Int_t iCath=0; iCath<AliMpConstants::NofCathodes(); iCath++){
335 TString cathName = ( iCath==0 ) ? "BendPlane" : "NonBendPlane";
336 for(Int_t iChamber=0; iChamber<AliMpConstants::NofTriggerChambers(); iChamber++){
337 histoName = Form("hTriggerDigits%sChamber%i", cathName.Data(), 11+iChamber);
338 histoTitle = Form("Chamber %i: Fired pads %s", 11+iChamber, cathName.Data());
339 TH2F* h3 = (TH2F*)triggerDisplay.GetEmptyDisplayHisto(histoName, AliMUONTriggerDisplay::kDisplayStrips,
340 iCath, iChamber, histoTitle);
341 Add2RecPointsList(h3, kTriggerDigitsDisplay + AliMpConstants::NofTriggerChambers()*iCath + iChamber);
345 TH2F* h4 = (TH2F*)triggerDisplay.GetEmptyDisplayHisto("hFiredBoardsDisplay", AliMUONTriggerDisplay::kDisplayBoards,
346 0, 0, "Fired boards");
347 Add2RecPointsList(h4, kTriggerBoardsDisplay);
349 fIsInitRecPointsTrigger = kTRUE;
353 //____________________________________________________________________________
354 void AliMUONQADataMakerRec::InitESDs()
356 ///create ESDs histograms in ESDs subdir
357 TH1F* h0 = new TH1F("hESDnTracks", "ESDs track number distribution", 30, 0., 30.);
358 Add2ESDsList(h0, kESDnTracks);
360 TH1F* h1 = new TH1F("hESDMomentum", "ESDs P distribution", 300, 0., 300) ;
361 Add2ESDsList(h1, kESDMomentum);
363 TH1F* h2 = new TH1F("hESDPt", "ESDs Pt distribution", 200, 0., 50) ;
364 Add2ESDsList(h2, kESDPt);
366 TH1F* h3 = new TH1F("hESDRapidity", "ESDs rapidity distribution", 200, -4.5,-2.) ;
367 Add2ESDsList(h3, kESDRapidity);
369 for (Int_t i = 0; i < AliMUONConstants::NTrackingCh(); ++i)
371 TH2F* h4 = new TH2F(Form("%s%d", "hESDClusterHitMap", i),
372 Form("%s %d", "ESD Clusters hit distribution for chamber", i),
373 100, -1*AliMUONConstants::Rmax(i/2), AliMUONConstants::Rmax(i/2),
374 100, -1*AliMUONConstants::Rmax(i/2), AliMUONConstants::Rmax(i/2));
375 Add2ESDsList(h4, kESDClusterHitMap+i);
381 //____________________________________________________________________________
382 void AliMUONQADataMakerRec::MakeRaws(AliRawReader* rawReader)
384 /// make QA for rawdata
386 if ( ! fIsInitRaws ) {
388 << "Skipping function due to a failure in Init" << endl;
392 if ( rawReader->GetType() == AliRawEventHeaderBase::kPhysicsEvent )
395 MakeRawsTracker(rawReader);
399 MakeRawsTrigger(rawReader);
402 //____________________________________________________________________________
403 void AliMUONQADataMakerRec::MakeRawsTracker(AliRawReader* rawReader)
405 /// make QA for rawdata tracker
407 if (!fTrackerDataMaker)
409 const Bool_t histogram(kFALSE);
410 const Bool_t fastDecoder(kTRUE);
412 // fTrackerDataMaker = new AliMUONTrackerRawDataMaker(rawReader,histogram,fastDecoder,takeRawReaderOwnership);
414 fTrackerDataMaker = new AliMUONTrackerCalibratedDataMaker(GetRecoParam(),
415 AliCDBManager::Instance()->GetRun(),
417 AliCDBManager::Instance()->GetDefaultStorage()->GetURI(),
423 fTrackerDataMaker->Data()->DisableChannelLevel(); // to save up disk space, we only store starting at the manu level
425 fTrackerDataMaker->SetRunning(kTRUE);
428 ((AliMUONTrackerCalibratedDataMaker*)fTrackerDataMaker)->SetRawReader(rawReader);
430 fTrackerDataMaker->ProcessEvent();
433 //____________________________________________________________________________
434 void AliMUONQADataMakerRec::MakeRawsTrigger(AliRawReader* rawReader)
436 /// make QA for rawdata trigger
438 // Get trigger scalers
441 AliMpCDB::LoadDDLStore();
443 AliMUONRawStreamTrigger rawStreamTrig(rawReader);
444 while (rawStreamTrig.NextDDL())
446 // If not a scaler event, do nothing
447 Bool_t scalerEvent = rawReader->GetDataHeader()->GetL1TriggerMessage() & 0x1;
448 if(!scalerEvent) break;
450 AliMUONDDLTrigger* ddlTrigger = rawStreamTrig.GetDDLTrigger();
451 AliMUONDarcHeader* darcHeader = ddlTrigger->GetDarcHeader();
453 Int_t nReg = darcHeader->GetRegHeaderEntries();
455 for(Int_t iReg = 0; iReg < nReg ;iReg++)
459 AliMpTriggerCrate* crate = AliMpDDLStore::Instance()->
460 GetTriggerCrate(rawStreamTrig.GetDDL(), iReg);
462 AliMUONRegHeader* regHeader = darcHeader->GetRegHeaderEntry(iReg);
464 // loop over local structures
465 Int_t nLocal = regHeader->GetLocalEntries();
466 for(Int_t iLocal = 0; iLocal < nLocal; iLocal++)
468 AliMUONLocalStruct* localStruct = regHeader->GetLocalEntry(iLocal);
471 if (!localStruct) continue;
473 loCircuit = crate->GetLocalBoardId(localStruct->GetId());
475 if ( !loCircuit ) continue; // empty slot
477 AliMpLocalBoard* localBoard = AliMpDDLStore::Instance()->GetLocalBoard(loCircuit, false);
480 if( !localBoard->IsNotified())
483 Int_t cathode = localStruct->GetComptXY()%2;
485 ERaw hindex = (cathode==0) ? kTriggerScalersBP : kTriggerScalersNBP;
488 for (Int_t ibitxy = 0; ibitxy < 16; ++ibitxy) {
489 if(localStruct->GetXY1(ibitxy) > 0)
490 ((TH3F*)GetRawsData(hindex))->Fill(11+0, loCircuit, ibitxy, 2*localStruct->GetXY1(ibitxy));
491 if(localStruct->GetXY2(ibitxy) > 0)
492 ((TH3F*)GetRawsData(hindex))->Fill(11+1, loCircuit, ibitxy, 2*localStruct->GetXY2(ibitxy));
493 if(localStruct->GetXY3(ibitxy) > 0)
494 ((TH3F*)GetRawsData(hindex))->Fill(11+2, loCircuit, ibitxy, 2*localStruct->GetXY3(ibitxy));
495 if(localStruct->GetXY4(ibitxy) > 0)
496 ((TH3F*)GetRawsData(hindex))->Fill(11+3, loCircuit, ibitxy, 2*localStruct->GetXY4(ibitxy));
503 //____________________________________________________________________________
504 void AliMUONQADataMakerRec::MakeRecPoints(TTree* clustersTree)
506 /// Fill histograms from treeR
508 if (fIsInitRecPointsTracker) MakeRecPointsTracker(clustersTree);
509 if (fIsInitRecPointsTrigger) MakeRecPointsTrigger(clustersTree);
512 //____________________________________________________________________________
513 void AliMUONQADataMakerRec::MakeRecPointsTracker(TTree* clustersTree)
515 /// Fill histograms related to tracker clusters
517 // First things first : do we have clusters in the TreeR ?
518 // In "normal" production mode, it should be perfectly normal
519 // *not* to have them.
520 // But if for some reason we de-activated the combined tracking,
521 // then we have clusters in TreeR, so let's take that opportunity
526 AliCodeTimerAuto("ClusterStore creation");
527 fClusterStore = AliMUONVClusterStore::Create(*clustersTree);
530 fIsInitRecPointsTracker = kFALSE;
535 AliCodeTimerAuto("");
537 fClusterStore->Connect(*clustersTree,kFALSE);
538 clustersTree->GetEvent(0);
540 TIter next(fClusterStore->CreateIterator());
541 AliMUONVCluster* cluster;
543 while ( ( cluster = static_cast<AliMUONVCluster*>(next()) ) )
545 Int_t detElemId = cluster->GetDetElemId();
546 Int_t chamberId = AliMpDEManager::GetChamberId(detElemId);
548 GetRecPointsData(kTrackerNumberOfClustersPerDE)->Fill(detElemId);
549 GetRecPointsData(kTrackerClusterChargePerDE+detElemId)->Fill(cluster->GetCharge());
550 GetRecPointsData(kTrackerClusterMultiplicityPerDE+detElemId)->Fill(cluster->GetNDigits());
552 GetRecPointsData(kTrackerNumberOfClustersPerChamber)->Fill(chamberId);
553 GetRecPointsData(kTrackerClusterChargePerChamber+chamberId)->Fill(cluster->GetCharge());
554 GetRecPointsData(kTrackerClusterMultiplicityPerChamber+chamberId)->Fill(cluster->GetNDigits());
558 fClusterStore->Clear();
561 //____________________________________________________________________________
562 void AliMUONQADataMakerRec::MakeRecPointsTrigger(TTree* clustersTree)
564 /// makes data from trigger response
567 fDigitStore->Clear();
569 if (!fTriggerStore) fTriggerStore = AliMUONVTriggerStore::Create(*clustersTree);
570 fTriggerStore->Clear();
571 fTriggerStore->Connect(*clustersTree, false);
572 clustersTree->GetEvent(0);
574 AliMUONLocalTrigger* locTrg;
575 TIter nextLoc(fTriggerStore->CreateLocalIterator());
577 while ( ( locTrg = static_cast<AliMUONLocalTrigger*>(nextLoc()) ) )
579 if (locTrg->IsNull()) continue;
581 TArrayS xyPattern[2];
582 locTrg->GetXPattern(xyPattern[0]);
583 locTrg->GetYPattern(xyPattern[1]);
585 Int_t nBoard = locTrg->LoCircuit();
587 Bool_t xTrig=locTrg->IsTrigX();
588 Bool_t yTrig=locTrg->IsTrigY();
591 ((TH1F*)GetRecPointsData(kTriggeredBoards))->Fill(nBoard);
593 fDigitMaker->TriggerDigits(nBoard, xyPattern, *fDigitStore);
596 TIter nextDigit(fDigitStore->CreateIterator());
597 AliMUONVDigit* mDigit;
598 while ( ( mDigit = static_cast<AliMUONVDigit*>(nextDigit()) ) )
600 Int_t detElemId = mDigit->DetElemId();
601 Int_t ch = detElemId/100;
602 Int_t localBoard = mDigit->ManuId();
603 Int_t channel = mDigit->ManuChannel();
604 Int_t cathode = mDigit->Cathode();
606 = ( cathode == 0 ) ? kTriggerDigitsBendPlane : kTriggerDigitsNonBendPlane;
608 ((TH3F*)GetRecPointsData(hindex))->Fill(ch, localBoard, channel);
612 //____________________________________________________________________________
613 void AliMUONQADataMakerRec::MakeESDs(AliESDEvent* esd)
615 /// make QA data from ESDs
617 if ( ! fIsInitESDs ) {
619 << "Skipping function due to a failure in Init" << endl;
625 Int_t nTracks = (Int_t)esd->GetNumberOfMuonTracks() ;
626 GetESDsData(0)->Fill(nTracks);
628 for (Int_t iTrack = 0; iTrack < nTracks; ++iTrack) {
630 AliESDMuonTrack* muonTrack = esd->GetMuonTrack(iTrack);
633 if (!muonTrack->ContainTrackerData()) continue;
635 muonTrack->LorentzP(v1);
637 GetESDsData(1)->Fill(v1.P());
638 GetESDsData(2)->Fill(v1.Pt());
639 GetESDsData(3)->Fill(v1.Rapidity());
641 TClonesArray clusters = muonTrack->GetClusters();
643 for (Int_t iCluster = 0; iCluster <clusters.GetEntriesFast(); ++iCluster) {
644 AliESDMuonCluster* cluster = (AliESDMuonCluster*)clusters.At(iCluster);
645 GetESDsData(kESDClusterHitMap+cluster->GetChamberId())
646 ->Fill(cluster->GetX(), cluster->GetY());
651 //____________________________________________________________________________
652 void AliMUONQADataMakerRec::StartOfDetectorCycle()
654 /// Detector specific actions at start of cycle
658 //____________________________________________________________________________
659 void AliMUONQADataMakerRec::DisplayTriggerInfo(AliQA::TASKINDEX_t task)
662 /// Display trigger information in a user-friendly way:
663 /// from local board and strip numbers to their position on chambers
665 if(task!=AliQA::kRECPOINTS && task!=AliQA::kRAWS) return;
667 AliMUONTriggerDisplay triggerDisplay;
669 TH3F* histoStrips=0x0;
670 TH2F* histoDisplayStrips=0x0;
672 for (Int_t iCath = 0; iCath < AliMpConstants::NofCathodes(); iCath++)
674 if(task==AliQA::kRECPOINTS){
676 = ( iCath == 0 ) ? kTriggerDigitsBendPlane : kTriggerDigitsNonBendPlane;
677 histoStrips = (TH3F*)GetRecPointsData(hindex);
679 else if(task==AliQA::kRAWS){
681 = ( iCath == 0 ) ? kTriggerScalersBP : kTriggerScalersNBP;
682 histoStrips = (TH3F*)GetRawsData(hindex);
683 if(histoStrips->GetEntries()==0) return; // No scalers found
686 for (Int_t iChamber = 0; iChamber < AliMpConstants::NofTriggerChambers(); iChamber++)
688 if(task==AliQA::kRECPOINTS){
689 histoDisplayStrips = (TH2F*)GetRecPointsData(kTriggerDigitsDisplay + AliMpConstants::NofTriggerChambers()*iCath + iChamber);
691 else if(task==AliQA::kRAWS){
692 histoDisplayStrips = (TH2F*)GetRawsData(kTriggerScalersDisplay + AliMpConstants::NofTriggerChambers()*iCath + iChamber);
694 Int_t bin = histoStrips->GetXaxis()->FindBin(11+iChamber);
695 histoStrips->GetXaxis()->SetRange(bin,bin);
696 TH2F* inputHisto = (TH2F*)histoStrips->Project3D("zy");
697 triggerDisplay.FillDisplayHistogram(inputHisto, histoDisplayStrips, AliMUONTriggerDisplay::kDisplayStrips, iCath, iChamber);
701 if(task!=AliQA::kRECPOINTS) return;
702 TH1F* histoBoards = (TH1F*)GetRecPointsData(kTriggeredBoards);
703 TH2F* histoDisplayBoards = (TH2F*)GetRecPointsData(kTriggerBoardsDisplay);
704 triggerDisplay.FillDisplayHistogram(histoBoards, histoDisplayBoards, AliMUONTriggerDisplay::kDisplayBoards, 0, 0);