]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONQADataMakerRec.cxx
Fixing bug #57328
[u/mrichter/AliRoot.git] / MUON / AliMUONQADataMakerRec.cxx
index cc3f926cca6d69cd07221fc63ee24db818034e58..cff1c674a2ed32e6a93de1c46bed23024ee97c85 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
+// $Id$
 
-// --- ROOT system ---
-#include <TClonesArray.h>
-#include <TFile.h> 
-#include <TH1F.h> 
-#include <TH1I.h> 
-#include <TH2F.h> 
-#include <TLorentzVector.h>
-
-// --- AliRoot header files ---
-#include "AliESDEvent.h"
-#include "AliLog.h"
-#include "AliRawReader.h"
-#include "AliQAChecker.h"
-#include "AliMUONCluster.h"  
-#include "AliMUONRawStreamTracker.h"
-#include "AliMUONRawStreamTrigger.h"
-
-#include "AliMUONVClusterStore.h"
-#include "AliMUONVCluster.h"
-#include "AliESDMuonTrack.h"
-
+// --- MUON header files ---
 #include "AliMUONQADataMakerRec.h"
 
 //-----------------------------------------------------------------------------
 ///
 /// 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 "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"),
-    fClusterStore(0x0)
-{
-    /// ctor
-}
-
-//____________________________________________________________________________ 
-AliMUONQADataMakerRec::AliMUONQADataMakerRec(const AliMUONQADataMakerRec& qadm) :
-    AliQADataMakerRec()
-{
-    ///copy ctor 
-    SetName((const char*)qadm.GetName()) ; 
-    SetTitle((const char*)qadm.GetTitle()); 
-}
-
-//__________________________________________________________________
-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)
 {
-    /// Equal operator.
-    this->~AliMUONQADataMakerRec();
-    new(this) AliMUONQADataMakerRec(qadm);
-    return *this;
+  /// ctor
 }
 
 //__________________________________________________________________
 AliMUONQADataMakerRec::~AliMUONQADataMakerRec()
 {
     /// dtor
-    delete fClusterStore;
+  delete fTracker;
+  delete fTrigger;
 }
 
 //____________________________________________________________________________ 
-void AliMUONQADataMakerRec::EndOfDetectorCycle(AliQA::TASKINDEX task, TObjArray* list)
+void AliMUONQADataMakerRec::EndOfDetectorCycle(AliQAv1::TASKINDEX_t task, TObjArray** list)
 {
-    ///Detector specific actions at end of cycle
-    // do the QA checking
-    AliQAChecker::Instance()->Run(AliQA::kMUON, task, list) ;  
+  /// Detector specific actions at end of cycle
+  
+  for (Int_t specie = 0 ; specie < AliRecoParam::kNSpecies ; specie++) 
+  {
+    if (! IsValidEventSpecie(specie, list)  ) continue;
+    
+    SetEventSpecie(AliRecoParam::ConvertIndex(specie));
+        
+    if ( task == AliQAv1::kRAWS ) 
+    {
+      if (fTracker) fTracker->EndOfDetectorCycleRaws(specie,list);
+      if (fTrigger) fTrigger->EndOfDetectorCycleRaws(specie,list);
+    }
+    
+    if ( task == AliQAv1::kRECPOINTS )
+    {
+      // normalize recpoints histograms
+      if (fTracker) fTracker->EndOfDetectorCycleRecPoints(specie,list);
+      if (fTrigger) fTrigger->EndOfDetectorCycleRecPoints(specie,list);
+    }
+    
+    if ( task == AliQAv1::kESDS ) 
+    {
+      // normalize esds histograms
+      if (fTracker) fTracker->EndOfDetectorCycleESDs(specie,list);
+      if (fTrigger) fTrigger->EndOfDetectorCycleESDs(specie,list);
+    }
+   } // loop on specie
+    
+  // do the QA checking
+  AliQAChecker::Instance()->Run(AliQAv1::kMUON,task,list,const_cast<AliDetectorRecoParam*>(GetRecoParam()));
 }
 
 //____________________________________________________________________________ 
 void AliMUONQADataMakerRec::InitRaws()
 {
-    /// create Raws histograms in Raws subdir
-    TH1I* h0 = new TH1I("hRawBusPatch", "buspatch distribution",  1932, 1, 1932); 
-    Add2RawsList(h0, 0);
-
-    TH1I* h1 = new TH1I("hRawCharge", "Charge distribution in rawdata", 4096, 0, 4095); 
-    Add2RawsList(h1, 1);
-
+  /// create Raws histograms in Raws subdir
+       
+  if ( fTracker ) fTracker->InitRaws();
+  if ( fTrigger ) fTrigger->InitRaws();
 }
 
+//__________________________________________________________________
+void AliMUONQADataMakerRec::InitDigits() 
+{
+  /// Initialized Digits spectra 
+  if ( fTracker ) fTracker->InitDigits();
+  if ( fTrigger ) fTrigger->InitDigits();
+} 
+
 //____________________________________________________________________________ 
 void AliMUONQADataMakerRec::InitRecPoints()
 {
-    /// create Reconstructed Points histograms in RecPoints subdir
-    TH1F* h0 = new TH1F("hClusterCharge", "Clusters Charge distribution", 1000, 0., 4095.); 
-    Add2RecPointsList(h0, 0);
-
-    TH1I* h1 = new TH1I("hClusterDetElem", "DetElemId distribution in Clusters ", 1000, 100., 1100.); 
-    Add2RecPointsList(h1, 1);
+       /// create Reconstructed Points histograms in RecPoints subdir
+  if ( fTracker ) fTracker->InitRecPoints();
+  if ( fTrigger ) fTrigger->InitRecPoints();
 }
 
 
 //____________________________________________________________________________ 
 void AliMUONQADataMakerRec::InitESDs()
 {
-    ///create ESDs histograms in ESDs subdir
-  TH1F* h0 = new TH1F("hESDnTracks", "ESDs track number distribution", 30, 0., 30.);  
-  Add2ESDsList(h0, 0);
-
-  TH1F* h1 = new TH1F("hESDMomentum", "ESDs P distribution", 300, 0., 300) ; 
-  Add2ESDsList(h1, 1);
-
-  TH1F* h2 = new TH1F("hESDPt", "ESDs Pt distribution", 200, 0., 50) ; 
-  Add2ESDsList(h2, 2) ;
-
-  TH1F* h3 = new TH1F("hESDRapidity", "ESDs rapidity distribution", 200, -4.5,-2.) ; 
-  Add2ESDsList(h3, 3) ;
+  ///create ESDs histograms in ESDs subdir
+  if ( fTracker ) fTracker->InitESDs();
+  if ( fTrigger ) fTrigger->InitESDs();
 }
 
 //____________________________________________________________________________
 void AliMUONQADataMakerRec::MakeRaws(AliRawReader* rawReader)
 {
-    /// make QA for rawdata
-    Int_t busPatchId;
-    UShort_t manuId;  
-    UChar_t channelId;
-    UShort_t charge;
+  /// make QA for rawdata
 
+  // Check id histograms already created for this Event Specie
+
+  if ( fTracker && rawReader->GetType() == AliRawEventHeaderBase::kPhysicsEvent ) 
+  {
     rawReader->Reset();
-    AliMUONRawStreamTracker rawStream(rawReader);
-    rawStream.First();
-    while( rawStream.Next(busPatchId, manuId, channelId, charge) ) {
+    fTracker->MakeRaws(rawReader);
+  }
   
-      GetRawsData(0)->Fill(busPatchId);
-      GetRawsData(1)->Fill(charge);
-                 
-    } // Next digit
-
+  if ( fTrigger && (rawReader->GetType() == AliRawEventHeaderBase::kPhysicsEvent ||
+                    rawReader->GetType() == AliRawEventHeaderBase::kCalibrationEvent ) )
+  {
+    rawReader->Reset();    
+    fTrigger->MakeRaws(rawReader);
+  }
 }
 
-//____________________________________________________________________________
-void AliMUONQADataMakerRec::MakeRecPoints(TTree* clustersTree)
+//__________________________________________________________________
+void AliMUONQADataMakerRec::MakeDigits()         
 {
+  /// makes data from Digits
   
-    /// makes data from RecPoints
-    if (!fClusterStore)
-       fClusterStore = AliMUONVClusterStore::Create(*clustersTree);
-    fClusterStore->Connect(*clustersTree, false);
-    clustersTree->GetEvent(0);
-    
-    TIter next(fClusterStore->CreateIterator());
+  AliError("Not implemented");
+}
 
-    AliMUONVCluster* clus = 0x0;
+//__________________________________________________________________
+void AliMUONQADataMakerRec::MakeDigits(TTree* digitsTree)         
+{
+  /// makes data from Digits
 
-    while ( ( clus = static_cast<AliMUONVCluster*>(next()) ) )
-    {
-      GetRecPointsData(0)->Fill(clus->GetCharge());
-      GetRecPointsData(1)->Fill(clus->GetDetElemId());
-    }
+  // Do nothing in case of calibration event
+  if ( GetRecoParam()->GetEventSpecie() == AliRecoParam::kCalib ) return;
+
+  if ( fTracker ) fTracker->MakeDigits(digitsTree);
+  if ( fTrigger ) fTrigger->MakeDigits(digitsTree);  
 }
 
 //____________________________________________________________________________
-void AliMUONQADataMakerRec::MakeESDs(AliESDEvent* esd)
+void AliMUONQADataMakerRec::MakeRecPoints(TTree* clustersTree)
 {
-    /// make QA data from ESDs
-
-    TLorentzVector v1;
+       /// Fill histograms from treeR
 
-    Int_t nTracks = (Int_t)esd->GetNumberOfMuonTracks() ; 
-    GetESDsData(0)->Fill(nTracks);
+  // Do nothing in case of calibration event
+  if ( GetRecoParam()->GetEventSpecie() == AliRecoParam::kCalib ) return;
+       
+  if ( fTracker ) fTracker->MakeRecPoints(clustersTree);
+  if ( fTrigger ) fTrigger->MakeRecPoints(clustersTree);  
+}
 
-    for (Int_t iTrack = 0; iTrack < nTracks; ++iTrack) {
+//____________________________________________________________________________
+void AliMUONQADataMakerRec::MakeESDs(AliESDEvent* esd)
+{
+  /// make QA data from ESDs
 
-      AliESDMuonTrack* muonTrack = esd->GetMuonTrack(iTrack);
-      muonTrack->LorentzP(v1);
+  // Do nothing in case of calibration event
+  if ( GetRecoParam()->GetEventSpecie() == AliRecoParam::kCalib ) return;
+  
+  if ( fTracker ) fTracker->MakeESDs(esd);
+  if ( fTrigger ) fTrigger->MakeESDs(esd);  
 
-      GetESDsData(1)->Fill(v1.P());
-      GetESDsData(2)->Fill(v1.Pt());
-      GetESDsData(3)->Fill(v1.Rapidity());
-    }
-}
+ }
 
 //____________________________________________________________________________ 
 void AliMUONQADataMakerRec::StartOfDetectorCycle()
 {
-    /// Detector specific actions at start of cycle
-  
+    /// Detector specific actions at start of cycle  
 }