]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONQADataMakerRec.cxx
New splines and first eta maps for the 2013 pPb runs (Benjamin)
[u/mrichter/AliRoot.git] / MUON / AliMUONQADataMakerRec.cxx
index 8a6eb8b6d0b2c193c12fb7aefada222f64e924d7..0f9182911e870230b23f1e0dcdbebfe36dd00da1 100644 (file)
 // --- MUON header files ---
 #include "AliMUONQADataMakerRec.h"
 
-#include "AliMUONCluster.h"  
-#include "AliMUONRawStreamTracker.h"
-#include "AliMUONRawStreamTrigger.h"
-#include "AliMUONConstants.h"  
-#include "AliMUONVClusterStore.h"
-#include "AliMUONVCluster.h"
-
-#include "AliMUONDigitMaker.h"
-#include "AliMUONVDigitStore.h"
-#include "AliMUONVTriggerStore.h"
-#include "AliMUONVDigit.h"
-#include "AliMUONLocalTrigger.h"
-
-#include "AliMUONDDLTrigger.h"
-#include "AliMUONRegHeader.h"
-#include "AliMUONDarcHeader.h"
-#include "AliMUONLocalStruct.h"
-
-#include "AliMUONTriggerDisplay.h"
-
-#include "AliMpDDLStore.h"
-#include "AliMpConstants.h"
-#include "AliMpBusPatch.h"
-#include "AliMpTriggerCrate.h"
-#include "AliMpLocalBoard.h"
-#include "AliMpCDB.h"
-
-// --- AliRoot header files ---
-#include "AliESDEvent.h"
-#include "AliESDMuonTrack.h"
-#include "AliESDMuonCluster.h"
-#include "AliLog.h"
-#include "AliRawReader.h"
-#include "AliQAChecker.h"
-
-// --- ROOT system ---
-#include <TClonesArray.h>
-#include <TFile.h> 
-#include <TH1F.h> 
-#include <TH1I.h> 
-#include <TH2F.h>
-#include <TH3F.h> 
-#include <TLorentzVector.h>
-#include <Riostream.h>
-
 //-----------------------------------------------------------------------------
 /// \class AliMUONQADataMakerRec
 ///
 /// MUON base class for quality assurance data (histo) maker
 ///
-/// \author C. Finck
+/// It is now only a steering class for the two subclasses AliMUONTrackerQADataMakerRec
+/// and AliMUONTriggerQADataMakerRec
+///
+/// \author C. Finck, D. Stocco, L. Aphecetche, A. Blanc
+
+#include "AliDAQ.h"
+#include "AliMUONTrackerQADataMakerRec.h"
+#include "AliMUONTriggerQADataMakerRec.h"
+#include "AliQAChecker.h"
+#include "AliRawReader.h"
+#include "AliRawEventHeaderBase.h"
 
 /// \cond CLASSIMP
 ClassImp(AliMUONQADataMakerRec)
 /// \endcond
            
 //____________________________________________________________________________ 
-AliMUONQADataMakerRec::AliMUONQADataMakerRec() : 
-    AliQADataMakerRec(AliQA::GetDetName(AliQA::kMUON), "MUON Quality Assurance Data Maker"),
-    fIsInitRaws(kFALSE),
-    fIsInitRecPoints(kFALSE),
-    fIsInitESDs(kFALSE),
-    fDigitStore(0x0),
-    fTriggerStore(0x0),
-    fDigitMaker(0x0)
-{
-    /// ctor
-  fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV1");
-  fDigitMaker = new AliMUONDigitMaker(kTRUE);
-}
-
-//____________________________________________________________________________ 
-AliMUONQADataMakerRec::AliMUONQADataMakerRec(const AliMUONQADataMakerRec& qadm) :
-    AliQADataMakerRec(qadm),
-    fIsInitRaws(kFALSE),
-    fIsInitRecPoints(kFALSE),
-    fIsInitESDs(kFALSE),
-    fDigitStore(0x0),
-    fTriggerStore(0x0),
-    fDigitMaker(0x0)
-{
-    ///copy ctor 
-    SetName((const char*)qadm.GetName()) ; 
-    SetTitle((const char*)qadm.GetTitle()); 
-
-    // Do not copy the digit store and digit maker, but create its own ones
-    fDigitStore = AliMUONVDigitStore::Create("AliMUONDigitStoreV1");
-    fDigitMaker = new AliMUONDigitMaker(kTRUE);
-}
-
-//__________________________________________________________________
-AliMUONQADataMakerRec& AliMUONQADataMakerRec::operator = (const AliMUONQADataMakerRec& qadm )
+AliMUONQADataMakerRec::AliMUONQADataMakerRec(Bool_t tracker, Bool_t trigger) : 
+AliQADataMakerRec(AliQAv1::GetDetName(AliQAv1::kMUON), "MUON Quality Assurance Data Maker"),
+fTracker(tracker ? new AliMUONTrackerQADataMakerRec(this) : 0x0),
+fTrigger(trigger ? new AliMUONTriggerQADataMakerRec(this) : 0x0)
 {
-  /// Assignment operator
-
-  // check assignment to self
-  if (this == &qadm) return *this;
-
-  this->~AliMUONQADataMakerRec();
-  new(this) AliMUONQADataMakerRec(qadm);
-  return *this;
+  /// ctor
+  AliInfo(Form("tracker=%d trigger=%d",tracker,trigger));
 }
 
 //__________________________________________________________________
 AliMUONQADataMakerRec::~AliMUONQADataMakerRec()
 {
     /// dtor
-    delete fDigitStore;
-    delete fTriggerStore;
-    delete fDigitMaker;
+  delete fTracker;
+  delete fTrigger;
 }
 
 //____________________________________________________________________________ 
-void AliMUONQADataMakerRec::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray* list)
+Int_t AliMUONQADataMakerRec::Add2List(TH1 * hist, const Int_t index, AliQAv1::TASKINDEX_t task, const Bool_t expert, const Bool_t image, const Bool_t saveForCorr)
 {
-    ///Detector specific actions at end of cycle
-
-    // Display trigger histos in a more user friendly way
-    DisplayTriggerInfo(task);
-
-    // do the QA checking
-    AliQAChecker::Instance()->Run(AliQA::kMUON, task, list) ;
+  TObjArray** list = GetList(task);
+  if (list)
+  {
+    return Add2List(hist,index,list,expert,image,saveForCorr);
+  }
+  return -1;
 }
 
 //____________________________________________________________________________ 
-void AliMUONQADataMakerRec::InitRaws()
+void AliMUONQADataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray** list)
 {
-    /// create Raws histograms in Raws subdir
-    TH1I* h0 = new TH1I("hRawBusPatch", "buspatch distribution",  1932, 1, 1932); 
-    Add2RawsList(h0, kRawBusPatch);
-
-    TH1I* h1 = new TH1I("hRawCharge", "Charge distribution in rawdata", 4096, 0, 4095); 
-    Add2RawsList(h1, kRawCharge);
-               
-    for (Int_t iDDL = 0; iDDL < 20; ++iDDL) 
+  /// Detector specific actions at end of cycle
+  //
+  ResetEventTrigClasses(); // RS
+  //
+  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
+  {
+    if (! IsValidEventSpecie(specie, list)  ) continue;
+    
+    SetEventSpecie(AliRecoParam::ConvertIndex(specie)); // needed by the GetXXXData methods
+    
+    if ( task == AliQAv1::kRAWS ) 
     {
-      TH1F* h2 = new TH1F(Form("%s%d", "hRawBusPatchDDL", iDDL), Form("%s %d","RAW Buspatch distribution for DDL", iDDL), 50, 0, 49); 
-      Add2RawsList(h2, kRawBuspatchDDL+iDDL);
+      if ( fTracker ) fTracker->EndOfDetectorCycleRaws(specie,list);
+      if ( fTrigger ) fTrigger->EndOfDetectorCycleRaws(specie,list);
+    }  
+    else if ( task == AliQAv1::kRECPOINTS )
+    {
+      // normalize recpoints histograms
+      if ( fTracker ) fTracker->EndOfDetectorCycleRecPoints(specie,list);
+      if ( fTrigger ) fTrigger->EndOfDetectorCycleRecPoints(specie,list);
     }
-
-    TH3F* h3 = new TH3F("hTriggerScalersBendPlane", "Trigger scalers in bending plane",
-                       4, 10.5, 14.5,
-                       234, 0.5, 234.5,
-                       16, -0.5, 15.5);
-    h3->GetXaxis()->SetTitle("Chamber");
-    h3->GetYaxis()->SetTitle("Board");
-    h3->GetZaxis()->SetTitle("Strip");
-    Add2RawsList(h3, kTriggerScalersBP);
-
-    TH3F* h4 = new TH3F("hTriggerScalersNonBendPlane", "Trigger scalers in non-bending plane",
-                       4, 10.5, 14.5,
-                       234, 0.5, 234.5,
-                       16, -0.5, 15.5);
-    h4->GetXaxis()->SetTitle("Chamber");
-    h4->GetYaxis()->SetTitle("Board");
-    h4->GetZaxis()->SetTitle("Strip");
-    Add2RawsList(h4, kTriggerScalersNBP);
-
-    AliMUONTriggerDisplay triggerDisplay;
-    TString histoName, histoTitle;
-    for(Int_t iCath=0; iCath<AliMpConstants::NofCathodes(); iCath++){
-      TString cathName = ( iCath==0 ) ? "BendPlane" : "NonBendPlane";
-      for(Int_t iChamber=0; iChamber<AliMpConstants::NofTriggerChambers(); iChamber++){
-       histoName = Form("hScalers%sChamber%i", cathName.Data(), 11+iChamber);
-       histoTitle = Form("Chamber %i: Scalers %s", 11+iChamber, cathName.Data());
-       TH2F* h5 = (TH2F*)triggerDisplay.GetEmptyDisplayHisto(histoName, AliMUONTriggerDisplay::kDisplayStrips, 
-                                                             iCath, iChamber, histoTitle);
-       Add2RawsList(h5, kTriggerScalersDisplay + AliMpConstants::NofTriggerChambers()*iCath + iChamber);
-      }
+    else if ( task == AliQAv1::kESDS ) 
+    {
+      // normalize esds histograms
+      if ( fTracker ) fTracker->EndOfDetectorCycleESDs(specie,list);
+      if ( fTrigger ) fTrigger->EndOfDetectorCycleESDs(specie,list);
+    }
+    else if ( task == AliQAv1::kDIGITSR ) 
+    {
+      if ( fTracker ) fTracker->EndOfDetectorCycleDigits(specie,list);        
+      if ( fTrigger ) fTrigger->EndOfDetectorCycleDigits(specie,list);
     }
+    else
+    {
+      AliFatal(Form("Not implemented for task %s",AliQAv1::GetTaskName(task).Data()));
+    }
+  } // loop on specie
     
-    fIsInitRaws = kTRUE;
+  // do the QA checking
+  AliQAChecker::Instance()->Run(AliQAv1::kMUON,task,list,const_cast<AliDetectorRecoParam*>(GetRecoParam()));
 }
 
 //____________________________________________________________________________ 
-void AliMUONQADataMakerRec::InitRecPoints()
+TObject* AliMUONQADataMakerRec::GetData(AliQAv1::TASKINDEX_t task, const Int_t index)
 {
-    /// create Reconstructed Points histograms in RecPoints subdir
-    TH3F* h0 = new TH3F("hTriggerDigitsBendPlane", "Trigger digits in bending plane",
-                       4, 10.5, 14.5,
-                       234, 0.5, 234.5,
-                       16, -0.5, 15.5);
-    h0->GetXaxis()->SetTitle("Chamber");
-    h0->GetYaxis()->SetTitle("Board");
-    h0->GetZaxis()->SetTitle("Strip");
-    Add2RecPointsList(h0, kTriggerDigitsBendPlane);
-
-    TH3F* h1 = new TH3F("hTriggerDigitsNonBendPlane", "Trigger digits in non-bending plane",
-                       4, 10.5, 14.5,
-                       234, 0.5, 234.5,
-                       16, -0.5, 15.5);
-    h1->GetXaxis()->SetTitle("Chamber");
-    h1->GetYaxis()->SetTitle("Board");
-    h1->GetZaxis()->SetTitle("Strip");
-    Add2RecPointsList(h1, kTriggerDigitsNonBendPlane);
-
-    TH1F* h2 = new TH1F("hTriggeredBoards", "Triggered boards", 234, 0.5, 234.5);
-    Add2RecPointsList(h2, kTriggeredBoards);
-
-    AliMUONTriggerDisplay triggerDisplay;
-    TString histoName, histoTitle;
-    for(Int_t iCath=0; iCath<AliMpConstants::NofCathodes(); iCath++){
-      TString cathName = ( iCath==0 ) ? "BendPlane" : "NonBendPlane";
-      for(Int_t iChamber=0; iChamber<AliMpConstants::NofTriggerChambers(); iChamber++){
-       histoName = Form("hTriggerDigits%sChamber%i", cathName.Data(), 11+iChamber);
-       histoTitle = Form("Chamber %i: Fired pads %s", 11+iChamber, cathName.Data());
-       TH2F* h3 = (TH2F*)triggerDisplay.GetEmptyDisplayHisto(histoName, AliMUONTriggerDisplay::kDisplayStrips, 
-                                                             iCath, iChamber, histoTitle);
-       Add2RecPointsList(h3, kTriggerDigitsDisplay + AliMpConstants::NofTriggerChambers()*iCath + iChamber);
-      }
-    }
-
-    TH2F* h4 = (TH2F*)triggerDisplay.GetEmptyDisplayHisto("hFiredBoardsDisplay", AliMUONTriggerDisplay::kDisplayBoards,
-                                                         0, 0, "Fired boards");
-    Add2RecPointsList(h4, kTriggerBoardsDisplay);
-
-    fIsInitRecPoints = kTRUE;
+  TObjArray** list = GetList(task);
+  if (list) return GetData(list,index);
+  return 0x0;
 }
 
-
 //____________________________________________________________________________ 
-void AliMUONQADataMakerRec::InitESDs()
+TObjArray** AliMUONQADataMakerRec::GetList(AliQAv1::TASKINDEX_t task)
 {
-    ///create ESDs histograms in ESDs subdir
-  TH1F* h0 = new TH1F("hESDnTracks", "ESDs track number distribution", 30, 0., 30.);  
-  Add2ESDsList(h0, kESDnTracks);
-
-  TH1F* h1 = new TH1F("hESDMomentum", "ESDs P distribution", 300, 0., 300) ; 
-  Add2ESDsList(h1, kESDMomentum);
-
-  TH1F* h2 = new TH1F("hESDPt", "ESDs Pt distribution", 200, 0., 50) ; 
-  Add2ESDsList(h2, kESDPt);
-
-  TH1F* h3 = new TH1F("hESDRapidity", "ESDs rapidity distribution", 200, -4.5,-2.) ; 
-  Add2ESDsList(h3, kESDRapidity);
-
-  for (Int_t i = 0; i < AliMUONConstants::NTrackingCh(); ++i) 
+  //  enum TASKINDEX_t {
+  //    kNULLTASKINDEX=-1, kRAWS, kHITS, kSDIGITS, kDIGITS, kDIGITSR, kRECPOINTS, kTRACKSEGMENTS, kRECPARTICLES, kESDS, kNTASKINDEX };
+  if ( task == AliQAv1::kRAWS ) 
   {
-    TH2F* h4 = new TH2F(Form("%s%d", "hESDClusterHitMap", i), 
-                    Form("%s %d", "ESD Clusters hit distribution for chamber", i),
-                    100, -1*AliMUONConstants::Rmax(i/2), AliMUONConstants::Rmax(i/2),
-                    100, -1*AliMUONConstants::Rmax(i/2), AliMUONConstants::Rmax(i/2)); 
-    Add2ESDsList(h4, kESDClusterHitMap+i);
+      return fRawsQAList;
   }
-  
-  fIsInitESDs =  kTRUE;
+  else if ( task == AliQAv1::kDIGITS || task == AliQAv1::kDIGITSR )
+  {
+    return fDigitsQAList;
+  }
+  else if ( task == AliQAv1::kRECPOINTS ) 
+  {
+    return fRecPointsQAList;
+  }
+  else
+  {
+      AliFatal(Form("task %s not supported here yet",AliQAv1::GetTaskName(task).Data()));
+  }
+  return 0x0;
 }
 
-//____________________________________________________________________________
-void AliMUONQADataMakerRec::MakeRaws(AliRawReader* rawReader)
+//____________________________________________________________________________ 
+void AliMUONQADataMakerRec::InitRaws()
 {
-    /// make QA for rawdata
-
-    if ( ! fIsInitRaws ) {
-      AliWarningStream() 
-        << "Skipping function due to a failure in Init" << endl;
-      return;
-    }    
-
-    Int_t busPatchId;
-    UShort_t manuId;  
-    UChar_t channelId;
-    UShort_t charge;
-
-    rawReader->Reset();
-    AliMUONRawStreamTracker rawStreamTrack(rawReader);
-    rawStreamTrack.First();
-    while( rawStreamTrack.Next(busPatchId, manuId, channelId, charge) ) {
-  
-      GetRawsData(kRawBusPatch)->Fill(busPatchId);
-      GetRawsData(kRawCharge)->Fill(charge);
-      Int_t iDDL = rawStreamTrack.GetCurentDDL();
-      GetRawsData(kRawBuspatchDDL + iDDL)->Fill(AliMpBusPatch::GetLocalBusID(busPatchId, iDDL));
-               
-                 
-    } // Next digit
-
-
-    // Get trigger scalers
-
-    Int_t loCircuit=0;
-    AliMpCDB::LoadDDLStore();
-
-    AliMUONRawStreamTrigger rawStreamTrig(rawReader);
-    while (rawStreamTrig.NextDDL()) 
-    {
-      // If not a scaler event, do nothing
-      Bool_t scalerEvent =  rawReader->GetDataHeader()->GetL1TriggerMessage() & 0x1;
-      if(!scalerEvent) break;
-
-      AliMUONDDLTrigger* ddlTrigger = rawStreamTrig.GetDDLTrigger();
-      AliMUONDarcHeader* darcHeader = ddlTrigger->GetDarcHeader();
-
-      Int_t nReg = darcHeader->GetRegHeaderEntries();
-    
-      for(Int_t iReg = 0; iReg < nReg ;iReg++)
-      {   //reg loop
-
-       // crate info  
-       AliMpTriggerCrate* crate = AliMpDDLStore::Instance()->
-         GetTriggerCrate(rawStreamTrig.GetDDL(), iReg);
-
-       AliMUONRegHeader* regHeader =  darcHeader->GetRegHeaderEntry(iReg);
-
-       // loop over local structures
-       Int_t nLocal = regHeader->GetLocalEntries();
-       for(Int_t iLocal = 0; iLocal < nLocal; iLocal++) 
-       {
-         AliMUONLocalStruct* localStruct = regHeader->GetLocalEntry(iLocal);
-        
-         // if card exist
-         if (!localStruct) continue;
-          
-         loCircuit = crate->GetLocalBoardId(localStruct->GetId());
-
-         if ( !loCircuit ) continue; // empty slot
-
-         AliMpLocalBoard* localBoard = AliMpDDLStore::Instance()->GetLocalBoard(loCircuit, false);
+  /// create Raws histograms in Raws subdir
+       
+  if ( fTracker ) fTracker->InitRaws();
+  if ( fTrigger ) fTrigger->InitRaws();
+  //
+  ClonePerTrigClass(AliQAv1::kRAWS); // this should be the last line
+}
 
-         // skip copy cards
-         if( !localBoard->IsNotified()) 
-           continue;
+//__________________________________________________________________
+void AliMUONQADataMakerRec::InitDigits() 
+{
+  /// Initialized Digits spectra 
+  if ( fTracker ) fTracker->InitDigits();
+  if ( fTrigger ) fTrigger->InitDigits();
+  //
+  ClonePerTrigClass(AliQAv1::kDIGITS); // this should be the last line
+} 
 
-         Int_t cathode = localStruct->GetComptXY()%2;
+//____________________________________________________________________________ 
+void AliMUONQADataMakerRec::InitRecPoints()
+{
+       /// create Reconstructed Points histograms in RecPoints subdir
+  if ( fTracker ) fTracker->InitRecPoints();
+  if ( fTrigger ) fTrigger->InitRecPoints();
+  //
+  ClonePerTrigClass(AliQAv1::kRECPOINTS); // this should be the last line
+}
 
-         ERaw hindex = (cathode==0) ? kTriggerScalersBP : kTriggerScalersNBP;
 
-         // loop over strips
-         for (Int_t ibitxy = 0; ibitxy < 16; ++ibitxy) {
-           if(localStruct->GetXY1(ibitxy) > 0)
-             ((TH3F*)GetRawsData(hindex))->Fill(11+0, loCircuit, ibitxy, 2*localStruct->GetXY1(ibitxy));
-           if(localStruct->GetXY2(ibitxy) > 0)
-             ((TH3F*)GetRawsData(hindex))->Fill(11+1, loCircuit, ibitxy, 2*localStruct->GetXY2(ibitxy));
-           if(localStruct->GetXY3(ibitxy) > 0)
-             ((TH3F*)GetRawsData(hindex))->Fill(11+2, loCircuit, ibitxy, 2*localStruct->GetXY3(ibitxy));
-           if(localStruct->GetXY4(ibitxy) > 0)
-             ((TH3F*)GetRawsData(hindex))->Fill(11+3, loCircuit, ibitxy, 2*localStruct->GetXY4(ibitxy));
-         } // loop on strips
-       } // iLocal
-      } // iReg
-    } // NextDDL
+//____________________________________________________________________________ 
+void AliMUONQADataMakerRec::InitESDs()
+{
+  ///create ESDs histograms in ESDs subdir
+  if ( fTracker ) fTracker->InitESDs();
+  if ( fTrigger ) fTrigger->InitESDs();
+  //
+  ClonePerTrigClass(AliQAv1::kESDS); // this should be the last line
 }
 
 //____________________________________________________________________________
-void AliMUONQADataMakerRec::MakeRecPoints(TTree* clustersTree)
+void AliMUONQADataMakerRec::MakeRaws(AliRawReader* rawReader)
 {
+  /// make QA for rawdata
+  /// Note that we do not call the sub-datamaker MakeRaws method
+  /// for events where the MCH or MTR is not part of the readout...
   
-    /// makes data from trigger response
-      
-    if ( ! fIsInitRecPoints ) {
-      AliWarningStream() 
-        << "Skipping function due to a failure in Init" << endl;
-      return;
-    }    
-
-    // Fired pads info
-    fDigitStore->Clear();
-
-    if (!fTriggerStore) fTriggerStore = AliMUONVTriggerStore::Create(*clustersTree);
-    fTriggerStore->Clear();
-    fTriggerStore->Connect(*clustersTree, false);
-    clustersTree->GetEvent(0);
-
-    AliMUONLocalTrigger* locTrg;
-    TIter nextLoc(fTriggerStore->CreateLocalIterator());
-
-    while ( ( locTrg = static_cast<AliMUONLocalTrigger*>(nextLoc()) ) ) 
-    {
-      if (locTrg->IsNull()) continue;
-   
-      TArrayS xyPattern[2];
-      locTrg->GetXPattern(xyPattern[0]);
-      locTrg->GetYPattern(xyPattern[1]);
-
-      Int_t nBoard = locTrg->LoCircuit();
-
-      Bool_t xTrig=locTrg->IsTrigX();
-      Bool_t yTrig=locTrg->IsTrigY();
+  if ( !rawReader || !rawReader->GetDetectorPattern() ) return;
+  
+  UInt_t clmask = rawReader->GetDetectorPattern()[0];
     
-      if (xTrig && yTrig)
-       ((TH1F*)GetRecPointsData(kTriggeredBoards))->Fill(nBoard);
-
-      fDigitMaker->TriggerDigits(nBoard, xyPattern, *fDigitStore);
+  if ( fTracker && rawReader->GetType() == AliRawEventHeaderBase::kPhysicsEvent ) 
+  {
+    UInt_t mchMask = AliDAQ::DetectorPattern(" MUONTRK ");
+    if ( clmask & mchMask ) 
+    {
+      rawReader->Reset();
+      fTracker->MakeRaws(rawReader);
     }
-
-    TIter nextDigit(fDigitStore->CreateIterator());
-    AliMUONVDigit* mDigit;
-    while ( ( mDigit = static_cast<AliMUONVDigit*>(nextDigit()) ) )
+  }
+  
+  if ( fTrigger && (rawReader->GetType() == AliRawEventHeaderBase::kPhysicsEvent ||
+                    rawReader->GetType() == AliRawEventHeaderBase::kCalibrationEvent ) )
+  {
+    UInt_t mtrMask = AliDAQ::DetectorPattern(" MUONTRG ");
+    if ( clmask & mtrMask )
     {
-      Int_t detElemId = mDigit->DetElemId();
-      Int_t ch = detElemId/100;
-      Int_t localBoard = mDigit->ManuId();
-      Int_t channel = mDigit->ManuChannel();
-      Int_t cathode = mDigit->Cathode();
-      ERecPoints hindex 
-        = ( cathode == 0 ) ? kTriggerDigitsBendPlane : kTriggerDigitsNonBendPlane;
-      
-      ((TH3F*)GetRecPointsData(hindex))->Fill(ch, localBoard, channel);
+      rawReader->Reset();    
+      fTrigger->MakeRaws(rawReader);
     }
+  }
+  //
+  IncEvCountCycleRaws();
+  IncEvCountTotalRaws();
+  //
 }
 
-//____________________________________________________________________________
-void AliMUONQADataMakerRec::MakeESDs(AliESDEvent* esd)
+//__________________________________________________________________
+void AliMUONQADataMakerRec::MakeDigits()         
 {
-    /// make QA data from ESDs
-
-    if ( ! fIsInitESDs ) {
-      AliWarningStream() 
-        << "Skipping function due to a failure in Init" << endl;
-      return;
-    }    
-
-    TLorentzVector v1;
-
-    Int_t nTracks = (Int_t)esd->GetNumberOfMuonTracks() ; 
-    GetESDsData(0)->Fill(nTracks);
-
-    for (Int_t iTrack = 0; iTrack < nTracks; ++iTrack) {
-
-      AliESDMuonTrack* muonTrack = esd->GetMuonTrack(iTrack);
-      
-      // skip "ghosts"
-      if (!muonTrack->ContainTrackerData()) continue;
-      
-      muonTrack->LorentzP(v1);
+  /// makes data from Digits
+  
+  AliFatal("Not implemented");
+}
 
-      GetESDsData(1)->Fill(v1.P());
-      GetESDsData(2)->Fill(v1.Pt());
-      GetESDsData(3)->Fill(v1.Rapidity());
+//__________________________________________________________________
+void AliMUONQADataMakerRec::MakeDigits(TTree* digitsTree)         
+{
+  /// makes data from Digits
 
-      TClonesArray clusters =  muonTrack->GetClusters();
+  // Do nothing in case of calibration event
+  if ( GetEventSpecie() == AliRecoParam::kCalib ) return;
 
-      for (Int_t iCluster = 0; iCluster <clusters.GetEntriesFast(); ++iCluster) {
-       AliESDMuonCluster* cluster = (AliESDMuonCluster*)clusters.At(iCluster);
-       GetESDsData(kESDClusterHitMap+cluster->GetChamberId())
-          ->Fill(cluster->GetX(), cluster->GetY());
-      }
-    }
+  if ( fTracker ) fTracker->MakeDigits(digitsTree);
+  if ( fTrigger ) fTrigger->MakeDigits(digitsTree);  
+  //
+  IncEvCountCycleDigits();
+  IncEvCountTotalDigits();
+  //
 }
 
-//____________________________________________________________________________ 
-void AliMUONQADataMakerRec::StartOfDetectorCycle()
+//____________________________________________________________________________
+void AliMUONQADataMakerRec::MakeRecPoints(TTree* clustersTree)
 {
-    /// Detector specific actions at start of cycle
-  
+       /// Fill histograms from treeR
+
+  // Do nothing in case of calibration event
+  if ( GetEventSpecie() == AliRecoParam::kCalib ) return;
+       
+  if ( fTracker ) fTracker->MakeRecPoints(clustersTree);
+  if ( fTrigger ) fTrigger->MakeRecPoints(clustersTree);  
+  //
+  IncEvCountCycleRecPoints();
+  IncEvCountTotalRecPoints();
+  //
 }
 
-//____________________________________________________________________________ 
-void AliMUONQADataMakerRec::DisplayTriggerInfo(AliQA::TASKINDEX_t task)
+//____________________________________________________________________________
+void AliMUONQADataMakerRec::MakeESDs(AliESDEvent* esd)
 {
+  /// make QA data from ESDs
+
+  // Do nothing in case of calibration event
+  if ( GetEventSpecie() == AliRecoParam::kCalib ) return;
+  
+  if ( fTracker ) fTracker->MakeESDs(esd);
+  if ( fTrigger ) fTrigger->MakeESDs(esd);  
   //
-  /// Display trigger information in a user-friendly way:
-  /// from local board and strip numbers to their position on chambers
+  IncEvCountCycleESDs();
+  IncEvCountTotalESDs();
   //
-  if(task!=AliQA::kRECPOINTS && task!=AliQA::kRAWS) return;
+ }
 
-  AliMUONTriggerDisplay triggerDisplay;
+//____________________________________________________________________________ 
+void AliMUONQADataMakerRec::ResetDetector(AliQAv1::TASKINDEX_t task)
+{
+  /// Reset internals
   
-  TH3F* histoStrips=0x0;
-  TH2F* histoDisplayStrips=0x0;
-
-  for (Int_t iCath = 0; iCath < AliMpConstants::NofCathodes(); iCath++)
+  for (int spec = 0; spec < AliRecoParam::kNSpecies; ++spec) 
   {
-    if(task==AliQA::kRECPOINTS){
-      ERecPoints hindex 
-       = ( iCath == 0 ) ? kTriggerDigitsBendPlane : kTriggerDigitsNonBendPlane;
-      histoStrips = (TH3F*)GetRecPointsData(hindex);
+    if (!AliQAv1::Instance()->IsEventSpecieSet(AliRecoParam::ConvertIndex(spec)))
+      continue;
+    
+    if ( task == AliQAv1::kRAWS ) 
+    {
+      if (fTracker) fTracker->ResetDetectorRaws(fRawsQAList[spec]);
+      if (fTrigger) fTrigger->ResetDetectorRaws(fRawsQAList[spec]);
     }
-    else if(task==AliQA::kRAWS){
-      ERaw hindex 
-       = ( iCath == 0 ) ? kTriggerScalersBP : kTriggerScalersNBP;
-      histoStrips = (TH3F*)GetRawsData(hindex);
-      if(histoStrips->GetEntries()==0) return; // No scalers found
+    else if ( task == AliQAv1::kRECPOINTS )
+    {
+      if (fTracker) fTracker->ResetDetectorRecPoints(fRecPointsQAList[spec]);
+      if (fTrigger) fTrigger->ResetDetectorRecPoints(fRecPointsQAList[spec]);
     }
-    
-    for (Int_t iChamber = 0; iChamber < AliMpConstants::NofTriggerChambers(); iChamber++)
+    else if ( task == AliQAv1::kESDS ) 
+    {
+      if (fTracker) fTracker->ResetDetectorESDs(fESDsQAList[spec]);
+      if (fTrigger) fTrigger->ResetDetectorESDs(fESDsQAList[spec]);
+    }
+    else if ( task == AliQAv1::kDIGITS ) 
+    {
+      if (fTracker) fTracker->ResetDetectorDigits(fDigitsQAList[spec]);
+      if (fTrigger) fTrigger->ResetDetectorDigits(fDigitsQAList[spec]);
+    }
+    else
     {
-      if(task==AliQA::kRECPOINTS){
-       histoDisplayStrips = (TH2F*)GetRecPointsData(kTriggerDigitsDisplay + AliMpConstants::NofTriggerChambers()*iCath + iChamber);
-      }
-      else if(task==AliQA::kRAWS){
-       histoDisplayStrips = (TH2F*)GetRawsData(kTriggerScalersDisplay + AliMpConstants::NofTriggerChambers()*iCath + iChamber);
-      }
-      Int_t bin = histoStrips->GetXaxis()->FindBin(11+iChamber);
-      histoStrips->GetXaxis()->SetRange(bin,bin);
-      TH2F* inputHisto = (TH2F*)histoStrips->Project3D("zy");
-      triggerDisplay.FillDisplayHistogram(inputHisto, histoDisplayStrips, AliMUONTriggerDisplay::kDisplayStrips, iCath, iChamber);
-    } // iChamber
-  } // iCath
+      AliFatal(Form("Not implemented for task %s",AliQAv1::GetTaskName(task).Data()));
+    }
+  }
+}
 
-  if(task!=AliQA::kRECPOINTS) return;
-  TH1F* histoBoards = (TH1F*)GetRecPointsData(kTriggeredBoards);
-  TH2F* histoDisplayBoards = (TH2F*)GetRecPointsData(kTriggerBoardsDisplay);
-  triggerDisplay.FillDisplayHistogram(histoBoards, histoDisplayBoards, AliMUONTriggerDisplay::kDisplayBoards, 0, 0);
+//____________________________________________________________________________ 
+void AliMUONQADataMakerRec::StartOfDetectorCycle()
+{
+  /// Detector specific actions at start of cycle  
+  
 }