+ TH1* hbp = new TH1F("hTrackerBusPatchOccupancy","Occupancy of bus patches",fBPnbins,fBPxmin,fBPxmax);
+
+ Master()->Add2List(hbp,AliMUONQAIndices::kTrackerBusPatchOccupancy, task, expert, !image, !saveCorr);
+
+ TH1* h = new TH1F("hTrackerBusPatchParityErrors","Number of parity errors per bus patch",fBPnbins,fBPxmin,fBPxmax);
+
+ Master()->Add2List(h,AliMUONQAIndices::kTrackerBusPatchParityErrors,task,expert,!image,!saveCorr);
+
+ h = new TH1F("hTrackerBusPatchTokenLostErrors","Number of token lost errors per bus patch",fBPnbins,fBPxmin,fBPxmax);
+ Master()->Add2List(h,AliMUONQAIndices::kTrackerBusPatchTokenLostErrors,task,expert,!image,!saveCorr);
+
+ h = new TH1F("hTrackerBusPatchPaddingErrors","Number of padding errors per bus patch",fBPnbins,fBPxmin,fBPxmax);
+
+ Master()->Add2List(h,AliMUONQAIndices::kTrackerBusPatchPaddingErrors,task,expert,!image,!saveCorr);
+
+
+ TH1* hnevents(0x0);
+
+ if ( task == AliQAv1::kRAWS )
+ {
+ // for raw data, we differentiate events seen from events used to be able to detect
+ // severe decoder errors that lead to no event decoded (i.e. zero event used) even if
+ // events are there (i.e non-zero event seen).
+ hnevents = new TH1F("hTrackerNofPhysicsEventsSeen","Number of physics events seen",1,-0.5,0.5);
+ // this one will count the number of physics event the rawdatamaker is *seeing*
+ TAxis* a = hnevents->GetXaxis();
+ a->SetBinLabel(1,"NPhysicsEvents");
+ hnevents->SetStats(kFALSE);
+ Master()->Add2List(hnevents,AliMUONQAIndices::kTrackerNofPhysicsEventsSeen,task,expert,!image,!saveCorr);
+ }
+
+ hnevents = new TH1F("hTrackerNofGoodPhysicsEventsUsed","Number of good physics events used",1,-0.5,0.5);
+ // this one will get its content from the TrackerData, i.e. it will count the number of *good* physics events *used*
+ // (i.e. not empty and with no fatal readout error)
+ TAxis* a = hnevents->GetXaxis();
+ a->SetBinLabel(1,"NGoodPhysicsEvents");
+ hnevents->SetStats(kFALSE);
+
+ Master()->Add2List(hnevents,AliMUONQAIndices::kTrackerNofGoodPhysicsEventsUsed,task,expert,!image,!saveCorr);
+
+ Master()->Add2List(static_cast<TH1*>(fBusPatchConfig->Clone()),AliMUONQAIndices::kTrackerBusPatchConfig, task,expert, !image, !saveCorr);
+
+ Int_t nbins = AliDAQ::NumberOfDdls("MUONTRK");
+ const Int_t offset = AliDAQ::DdlIDOffset("MUONTRK");
+
+ Double_t xmin = offset - 0.5;
+ Double_t xmax = offset + nbins - 0.5;
+
+ TString what(AliQAv1::GetTaskName(task));
+
+ h = new TH1F(Form("hTrackerDDL%sOccupancy",what.Data()),Form(";DDLId;DDL Occupancy in %% (from %s)",what.Data()),nbins,xmin,xmax);
+
+ Master()->Add2List(h,AliMUONQAIndices::kTrackerDDLOccupancy,task,expert,!image,!saveCorr);
+
+ if ( task == AliQAv1::kRAWS )
+ {
+ // see above the comment about why we have event seen vs used for raw data.
+ h = new TH1F("hTrackerDDLNofEventsSeen","Number of events seen by DDL;DDLId",nbins,xmin,xmax);
+ Master()->Add2List(h,AliMUONQAIndices::kTrackerDDLNofEventsSeen,task,expert,!image,!saveCorr);
+ }
+
+ h = new TH1F("hTrackerDDLNofEventsUsed","Number of events used by DDL;DDLId",nbins,xmin,xmax);
+ Master()->Add2List(h,AliMUONQAIndices::kTrackerDDLNofEventsUsed,task,expert,!image,!saveCorr);
+
+}
+
+//____________________________________________________________________________
+void AliMUONTrackerQADataMakerRec::InitRaws()
+{
+ /// create monitor objects for RAWS
+
+ TrackerDataMaker(AliRecoParam::AConvert(Master()->GetEventSpecie()),kTRUE);
+
+ /// Book histograms that are common to Raws and Digits
+ BookHistograms(AliQAv1::kRAWS);
+
+ /// Now the Raws specific parts
+ TH1* h = new TH1F("hTrackerReadoutStatus","Readout status (x events)",7,-0.5,6.5);
+ h->SetStats(kFALSE);
+
+ TAxis* a = h->GetXaxis();
+
+ a->SetBinLabel(h->FindBin(1.0*AliMUONQAIndices::kTrackerRawNofGlitchErrors),"Glitch errors");
+ a->SetBinLabel(h->FindBin(1.0*AliMUONQAIndices::kTrackerRawNofTokenLostErrors),"Token lost errors");
+ a->SetBinLabel(h->FindBin(1.0*AliMUONQAIndices::kTrackerRawNofParityErrors),"Parity errors");
+ a->SetBinLabel(h->FindBin(1.0*AliMUONQAIndices::kTrackerRawNofPaddingErrors),"Padding errors");