adding EMCAL QA classes
authorjklay <jklay@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 16 May 2008 03:13:47 +0000 (03:13 +0000)
committerjklay <jklay@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 16 May 2008 03:13:47 +0000 (03:13 +0000)
14 files changed:
EMCAL/AliEMCALQAChecker.cxx [new file with mode: 0644]
EMCAL/AliEMCALQAChecker.h [new file with mode: 0644]
EMCAL/AliEMCALQADataMaker.cxx [new file with mode: 0644]
EMCAL/AliEMCALQADataMaker.h [new file with mode: 0644]
EMCAL/AliEMCALQADataMakerRec.cxx [new file with mode: 0644]
EMCAL/AliEMCALQADataMakerRec.h [new file with mode: 0644]
EMCAL/AliEMCALQADataMakerSim.cxx [new file with mode: 0644]
EMCAL/AliEMCALQADataMakerSim.h [new file with mode: 0644]
EMCAL/EMCALLinkDefbase.h
EMCAL/EMCALLinkDefrec.h
EMCAL/EMCALLinkDefsim.h
EMCAL/libEMCALbase.pkg
EMCAL/libEMCALrec.pkg
EMCAL/libEMCALsim.pkg

diff --git a/EMCAL/AliEMCALQAChecker.cxx b/EMCAL/AliEMCALQAChecker.cxx
new file mode 100644 (file)
index 0000000..a172f6b
--- /dev/null
@@ -0,0 +1,50 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/*
+  Checks the quality assurance. 
+  By comparing with reference data
+
+  Based on PHOS code written by
+  Y. Schutz CERN July 2007
+*/
+
+// --- ROOT system ---
+#include <TClass.h>
+#include <TH1F.h> 
+#include <TH1I.h> 
+#include <TIterator.h> 
+#include <TKey.h> 
+#include <TFile.h> 
+
+// --- Standard library ---
+
+// --- AliRoot header files ---
+#include "AliLog.h"
+#include "AliQA.h"
+#include "AliQAChecker.h"
+#include "AliEMCALQAChecker.h"
+
+ClassImp(AliEMCALQAChecker)
+
+//__________________________________________________________________
+AliEMCALQAChecker& AliEMCALQAChecker::operator = (const AliEMCALQAChecker& qac )
+{
+  // Equal operator.
+  this->~AliEMCALQAChecker();
+  new(this) AliEMCALQAChecker(qac);
+  return *this;
+}
+
diff --git a/EMCAL/AliEMCALQAChecker.h b/EMCAL/AliEMCALQAChecker.h
new file mode 100644 (file)
index 0000000..23cbdc9
--- /dev/null
@@ -0,0 +1,41 @@
+#ifndef ALIEMCALQACHECKER_H
+#define ALIEMCALQACHECKER_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+
+/*
+  Checks the quality assurance. 
+  By comparing with reference data
+
+  Based on PHOS code written by
+  Y. Schutz CERN July 2007
+*/
+
+
+// --- ROOT system ---
+class TFile ; 
+class TH1F ; 
+class TH1I ; 
+
+// --- Standard library ---
+
+// --- AliRoot header files ---
+#include "AliQACheckerBase.h"
+class AliEMCALLoader ; 
+
+class AliEMCALQAChecker: public AliQACheckerBase {
+
+public:
+  AliEMCALQAChecker() : AliQACheckerBase("EMCAL","EMCAL Quality Assurance Data Maker") {;}          // ctor
+  AliEMCALQAChecker(const AliEMCALQAChecker& qac) : AliQACheckerBase(qac.GetName(), qac.GetTitle()) {;} // cpy ctor   
+  AliEMCALQAChecker& operator = (const AliEMCALQAChecker& qac) ;
+  virtual ~AliEMCALQAChecker() {;} // dtor
+
+private:
+  
+  ClassDef(AliEMCALQAChecker,1)  // description 
+
+};
+
+#endif // AliEMCALQAChecker_H
diff --git a/EMCAL/AliEMCALQADataMaker.cxx b/EMCAL/AliEMCALQADataMaker.cxx
new file mode 100644 (file)
index 0000000..229e21f
--- /dev/null
@@ -0,0 +1,300 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/*
+  Produces the data needed to calculate the quality assurance. 
+  All data must be mergeable objects.
+
+  Based on PHOS code written by
+  Y. Schutz CERN July 2007
+*/
+
+// --- ROOT system ---
+#include <TClonesArray.h>
+#include <TFile.h> 
+#include <TH1F.h> 
+#include <TH1I.h> 
+#include <TH2F.h> 
+
+// --- Standard library ---
+
+// --- AliRoot header files ---
+#include "AliESDCaloCluster.h"
+#include "AliESDEvent.h"
+#include "AliLog.h"
+#include "AliEMCALDigit.h"
+#include "AliEMCALHit.h"
+#include "AliEMCALQADataMaker.h"
+#include "AliQAChecker.h"
+#include "AliEMCALRecPoint.h" 
+#include "AliEMCALRawUtils.h"
+#include "AliEMCALReconstructor.h"
+#include "AliEMCALRecParam.h"
+
+ClassImp(AliEMCALQADataMaker)
+           
+//____________________________________________________________________________ 
+  AliEMCALQADataMaker::AliEMCALQADataMaker() : 
+  AliQADataMaker(AliQA::GetDetName(AliQA::kEMCAL), "EMCAL Quality Assurance Data Maker")
+{
+  // ctor
+}
+
+//____________________________________________________________________________ 
+AliEMCALQADataMaker::AliEMCALQADataMaker(const AliEMCALQADataMaker& qadm) :
+  AliQADataMaker()
+{
+  //copy ctor 
+  SetName((const char*)qadm.GetName()) ; 
+  SetTitle((const char*)qadm.GetTitle()); 
+}
+
+//__________________________________________________________________
+AliEMCALQADataMaker& AliEMCALQADataMaker::operator = (const AliEMCALQADataMaker& qadm )
+{
+  // Equal operator.
+  this->~AliEMCALQADataMaker();
+  new(this) AliEMCALQADataMaker(qadm);
+  return *this;
+}
+//____________________________________________________________________________ 
+void AliEMCALQADataMaker::EndOfDetectorCycle(AliQA::TASKINDEX task, TObjArray * list)
+{
+  //Detector specific actions at end of cycle
+  // do the QA checking
+  AliQAChecker::Instance()->Run(AliQA::kEMCAL, task, list) ;  
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMaker::InitESDs()
+{
+  //create ESDs histograms in ESDs subdir
+       
+  TH1F * h0 = new TH1F("hEmcalESDs",    "ESDs energy distribution in EMCAL",       100, 0., 100.) ;  
+  h0->Sumw2() ; 
+  Add2ESDsList(h0, 0) ;
+  TH1I * h1  = new TH1I("hEmcalESDsMul", "ESDs multiplicity distribution in EMCAL", 100, 0., 100) ; 
+  h1->Sumw2() ;
+  Add2ESDsList(h1, 1) ;
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMaker::InitHits()
+{
+  // create Hits histograms in Hits subdir
+  TH1F * h0 = new TH1F("hEmcalHits",    "Hits energy distribution in EMCAL",       100, 0., 100.) ; 
+  h0->Sumw2() ;
+  Add2HitsList(h0, 0) ;
+  TH1I * h1  = new TH1I("hEmcalHitsMul", "Hits multiplicity distribution in EMCAL", 500, 0., 10000) ; 
+  h1->Sumw2() ;
+  Add2HitsList(h1, 1) ;
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMaker::InitDigits()
+{
+  // create Digits histograms in Digits subdir
+  TH1I * h0 = new TH1I("hEmcalDigits",    "Digits amplitude distribution in EMCAL",    500, 0, 5000) ; 
+  h0->Sumw2() ;
+  Add2DigitsList(h0, 0) ;
+  TH1I * h1 = new TH1I("hEmcalDigitsMul", "Digits multiplicity distribution in EMCAL", 500, 0, 1000) ; 
+  h1->Sumw2() ;
+  Add2DigitsList(h1, 1) ;
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMaker::InitRecPoints()
+{
+  // create Reconstructed Points histograms in RecPoints subdir
+  TH1F * h0 = new TH1F("hEmcalRecPoints",    "RecPoints energy distribution in EMCAL",       100, 0., 100.) ; 
+  h0->Sumw2() ;
+  Add2RecPointsList(h0, 0) ;
+  TH1I * h1 = new TH1I("hEmcalRecPointsMul", "RecPoints multiplicity distribution in EMCAL", 100, 0,  100) ; 
+  h1->Sumw2() ;
+  Add2RecPointsList(h1, 1) ;
+
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMaker::InitRaws()
+{
+  AliInfo(Form("Raw QA infor for EMCAL not yet implemented"));
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMaker::InitSDigits()
+{
+  // create SDigits histograms in SDigits subdir
+  TH1F * h0 = new TH1F("hEmcalSDigits",    "SDigits energy distribution in EMCAL",       100, 0., 100.) ; 
+  h0->Sumw2() ;
+  Add2SDigitsList(h0, 0) ;
+  TH1I * h1 = new TH1I("hEmcalSDigitsMul", "SDigits multiplicity distribution in EMCAL", 500, 0,  10000) ; 
+  h1->Sumw2() ;
+  Add2SDigitsList(h1, 1) ;
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMaker::MakeESDs(AliESDEvent * esd)
+{
+  // make QA data from ESDs
+
+  Int_t count = 0 ; 
+  for ( Int_t index = 0; index < esd->GetNumberOfCaloClusters() ; index++ ) {
+       AliESDCaloCluster * clu = esd->GetCaloCluster(index) ;
+       if ( clu->IsEMCAL() ) {
+               GetESDsData(0)->Fill(clu->E()) ;
+               count++ ;
+       } 
+  }
+  GetESDsData(1)->Fill(count) ;
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMaker::MakeHits(TClonesArray * hits)
+{
+       //make QA data from Hits
+
+    GetHitsData(1)->Fill(hits->GetEntriesFast()) ; 
+    TIter next(hits) ; 
+    AliEMCALHit * hit ; 
+    while ( (hit = dynamic_cast<AliEMCALHit *>(next())) ) {
+      GetHitsData(0)->Fill( hit->GetEnergy()) ;
+    }
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMaker::MakeHits(TTree * hitTree)
+{
+       // make QA data from Hit Tree
+       
+       TClonesArray * hits = new TClonesArray("AliEMCALHit", 1000);
+
+       TBranch * branch = hitTree->GetBranch("EMCAL") ;
+       if ( ! branch ) {
+               AliWarning("EMCAL branch in Hit Tree not found") ; 
+       } else {
+               TClonesArray * tmp =  new TClonesArray("AliEMCALHit", 1000) ;
+               branch->SetAddress(&tmp) ;
+               Int_t index = 0 ;  
+               for (Int_t ientry = 0 ; ientry < branch->GetEntries() ; ientry++) {
+                       branch->GetEntry(ientry) ; 
+                       for (Int_t ihit = 0 ; ihit < tmp->GetEntries() ; ihit++) {
+                               AliEMCALHit * hit = dynamic_cast<AliEMCALHit *> (tmp->At(ihit)) ; 
+                               new((*hits)[index]) AliEMCALHit(*hit) ; 
+                               index++ ;
+                       } 
+               }       
+               tmp->Delete() ; 
+               delete tmp ; 
+               MakeHits(hits) ; 
+       }
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMaker::MakeDigits(TClonesArray * digits)
+{
+  // makes data from Digits
+
+    GetDigitsData(1)->Fill(digits->GetEntriesFast()) ; 
+    TIter next(digits) ; 
+    AliEMCALDigit * digit ; 
+    while ( (digit = dynamic_cast<AliEMCALDigit *>(next())) ) {
+      GetDigitsData(0)->Fill( digit->GetAmp()) ;
+    }  
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMaker::MakeDigits(TTree * digitTree)
+{
+       // makes data from Digit Tree
+       TClonesArray * digits = new TClonesArray("AliEMCALDigit", 1000) ; 
+
+       TBranch * branch = digitTree->GetBranch("EMCAL") ;
+       if ( ! branch ) {
+               AliWarning("EMCAL branch in Digit Tree not found") ; 
+       } else {
+               branch->SetAddress(&digits) ;
+               branch->GetEntry(0) ; 
+               MakeDigits(digits) ; 
+       }
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMaker::MakeRaws(AliRawReader* rawReader)
+{
+  //Raw QA info not yet implemented for EMCAL
+
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMaker::MakeRecPoints(TTree * clustersTree)
+{
+  // makes data from RecPoints
+  TBranch *emcbranch = clustersTree->GetBranch("EMCALECARP");
+  if (!emcbranch) { 
+    AliError("can't get the branch with the EMCAL clusters !");
+    return;
+  }
+  TObjArray * emcrecpoints = new TObjArray(100) ;
+  emcbranch->SetAddress(&emcrecpoints);
+  emcbranch->GetEntry(0);
+  
+  GetRecPointsData(1)->Fill(emcrecpoints->GetEntriesFast()) ; 
+  TIter next(emcrecpoints) ; 
+  AliEMCALRecPoint * rp ; 
+  while ( (rp = dynamic_cast<AliEMCALRecPoint *>(next())) ) {
+    GetRecPointsData(0)->Fill( rp->GetEnergy()) ;
+  }
+  emcrecpoints->Delete();
+  delete emcrecpoints;
+
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMaker::MakeSDigits(TClonesArray * sdigits)
+{
+  // makes data from SDigits
+  
+  GetSDigitsData(1)->Fill(sdigits->GetEntriesFast()) ; 
+  TIter next(sdigits) ; 
+  AliEMCALDigit * sdigit ; 
+  while ( (sdigit = dynamic_cast<AliEMCALDigit *>(next())) ) {
+    GetSDigitsData(0)->Fill( sdigit->GetAmp()) ;
+  } 
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMaker::MakeSDigits(TTree * sdigitTree)
+{
+  // makes data from SDigit Tree
+  TClonesArray * sdigits = new TClonesArray("AliEMCALDigit", 1000) ; 
+  
+  TBranch * branch = sdigitTree->GetBranch("EMCAL") ;
+  if ( ! branch ) {
+    AliWarning("EMCAL branch in SDigit Tree not found") ; 
+  } else {
+    branch->SetAddress(&sdigits) ;
+    branch->GetEntry(0) ;
+    MakeSDigits(sdigits) ; 
+  }
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMaker::StartOfDetectorCycle()
+{
+  //Detector specific actions at start of cycle
+  
+}
diff --git a/EMCAL/AliEMCALQADataMaker.h b/EMCAL/AliEMCALQADataMaker.h
new file mode 100644 (file)
index 0000000..86c37f9
--- /dev/null
@@ -0,0 +1,57 @@
+#ifndef ALIEMCALQADATAMAKER_H
+#define ALIEMCALQADATAMAKER_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+
+/*
+  Produces the data needed to calculate the quality assurance. 
+  All data must be mergeable objects.
+
+  Based on PHOS code written by
+  Y. Schutz CERN July 2007
+*/
+
+
+// --- ROOT system ---
+class TH1F ; 
+class TH1I ; 
+class TObjArray ; 
+
+// --- Standard library ---
+
+// --- AliRoot header files ---
+#include "AliQADataMaker.h"
+
+class AliEMCALQADataMaker: public AliQADataMaker {
+
+public:
+  AliEMCALQADataMaker() ;          // ctor
+  AliEMCALQADataMaker(const AliEMCALQADataMaker& qadm) ;   
+  AliEMCALQADataMaker& operator = (const AliEMCALQADataMaker& qadm) ;
+  virtual ~AliEMCALQADataMaker() {;} // dtor
+  
+private:
+  virtual void   EndOfDetectorCycle(AliQA::TASKINDEX, TObjArray * list) ;
+  virtual void   InitHits() ; 
+  virtual void   InitESDs() ; 
+  virtual void   InitDigits() ; 
+  virtual void   InitRecPoints() ; 
+  virtual void   InitRaws() ; 
+  virtual void   InitSDigits() ; 
+  virtual void   MakeESDs(AliESDEvent * esd) ;
+  virtual void   MakeHits(TClonesArray * hits) ;
+  virtual void   MakeHits(TTree * hitTree) ;
+  virtual void   MakeDigits(TClonesArray * digits) ; 
+  virtual void   MakeDigits(TTree * digitTree) ; 
+  virtual void   MakeRecPoints(TTree * recpoTree) ; 
+  virtual void   MakeRaws(AliRawReader* rawReader) ; 
+  virtual void   MakeSDigits(TClonesArray * sigits) ; 
+  virtual void   MakeSDigits(TTree * sigitTree) ; 
+  virtual void   StartOfDetectorCycle() ; 
+
+  ClassDef(AliEMCALQADataMaker,1)  // description 
+
+};
+
+#endif // AliEMCALQADataMaker_H
diff --git a/EMCAL/AliEMCALQADataMakerRec.cxx b/EMCAL/AliEMCALQADataMakerRec.cxx
new file mode 100644 (file)
index 0000000..00dd5f5
--- /dev/null
@@ -0,0 +1,316 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+/*
+Based on the QA code for PHOS written by Yves Schutz July 2007
+
+Authors:  J.Klay (Cal Poly) May 2008
+          S. Salur LBL April 2008
+
+*/
+
+// --- ROOT system ---
+#include <TClonesArray.h>
+#include <TFile.h> 
+#include <TH1F.h> 
+#include <TH1I.h> 
+#include <TH2F.h> 
+
+// --- Standard library ---
+
+// --- AliRoot header files ---
+#include "AliESDCaloCluster.h"
+#include "AliESDEvent.h"
+#include "AliLog.h"
+#include "AliEMCALQADataMakerRec.h"
+#include "AliQAChecker.h"
+#include "AliEMCALRecPoint.h" 
+#include "AliEMCALRawUtils.h"
+#include "AliEMCALReconstructor.h"
+#include "AliEMCALRecParam.h"
+
+ClassImp(AliEMCALQADataMakerRec)
+           
+//____________________________________________________________________________ 
+  AliEMCALQADataMakerRec::AliEMCALQADataMakerRec() : 
+  AliQADataMakerRec(AliQA::GetDetName(AliQA::kEMCAL), "EMCAL Quality Assurance Data Maker")
+{
+  // ctor
+}
+
+//____________________________________________________________________________ 
+AliEMCALQADataMakerRec::AliEMCALQADataMakerRec(const AliEMCALQADataMakerRec& qadm) :
+  AliQADataMakerRec()
+{
+  //copy ctor 
+  SetName((const char*)qadm.GetName()) ; 
+  SetTitle((const char*)qadm.GetTitle()); 
+}
+
+//__________________________________________________________________
+AliEMCALQADataMakerRec& AliEMCALQADataMakerRec::operator = (const AliEMCALQADataMakerRec& qadm )
+{
+  // Equal operator.
+  this->~AliEMCALQADataMakerRec();
+  new(this) AliEMCALQADataMakerRec(qadm);
+  return *this;
+}
+//____________________________________________________________________________ 
+void AliEMCALQADataMakerRec::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray * list)
+{
+  //Detector specific actions at end of cycle
+  // do the QA checking
+  AliQAChecker::Instance()->Run(AliQA::kEMCAL, task, list) ;  
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMakerRec::InitESDs()
+{
+  //Create histograms to controll ESD
+  TH1F * h1 = new TH1F("hESDEmcalSpectrum",  "ESDs spectrum in EMCAL",    200, 0., 20.) ; 
+  h1->Sumw2() ;
+  Add2ESDsList(h1, kESDSpec)  ;                                                                                                        
+  TH1I * h2 = new TH1I("hESDEmcalMul", "ESDs multiplicity distribution in EMCAL", 100, 0,  100) ; 
+  h2->Sumw2() ;
+  Add2ESDsList(h2, kESDNtot) ;
+  TH1I * h3 = new TH1I("hESDEmcalEtot", "ESDs Etot in EMCAL", 100, 0,  1000.) ; 
+  h3->Sumw2() ;
+  Add2ESDsList(h3, kESDEtot) ;
+  TH1F * h4 = new TH1F("hESDEmcalPid",    "ESDs PID distribution in EMCAL",       100, 0., 1.) ;
+  h4->Sumw2() ;
+  Add2ESDsList(h4, kESDpid) ;
+       
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMakerRec::InitRecPoints()
+{
+  // create Reconstructed Points histograms in RecPoints subdir
+  TH2I * h0 = new TH2I("hRpEMCALxySMod1","RecPoints Rows x Columns for EMCAL supermodule 1", 64, -72., 72., 56, -63., 63.) ;
+  Add2RecPointsList(h0,kRPsmod1) ;
+  TH2I * h1 = new TH2I("hRpEMCALxySMod2","RecPoints Rows x Columns for EMCAL supermodule 2", 64, -72., 72., 56, -63., 63.) ;
+  Add2RecPointsList(h1,kRPsmod2) ;
+  TH2I * h2 = new TH2I("hRpEMCALxySMod3","RecPoints Rows x Columns for EMCAL supermodule 3", 64, -72., 72., 56, -63., 63.) ;
+  Add2RecPointsList(h2,kRPsmod3) ;
+  TH2I * h3 = new TH2I("hRpEMCALxySMod4","RecPoints Rows x Columns for EMCAL supermodule 4", 64, -72., 72., 56, -63., 63.) ;
+  Add2RecPointsList(h3,kRPsmod4) ;
+  TH2I * h4 = new TH2I("hRpEMCALxySMod5","RecPoints Rows x Columns for EMCAL supermodule 5", 64, -72., 72., 56, -63., 63.) ;
+  Add2RecPointsList(h4,kRPsmod5) ;
+  TH2I * h5 = new TH2I("hRpEMCALxySMod6","RecPoints Rows x Columns for EMCAL supermodule 6", 64, -72., 72., 56, -63., 63.) ;
+  Add2RecPointsList(h5,kRPsmod6) ;
+  TH2I * h6 = new TH2I("hRpEMCALxySMod7","RecPoints Rows x Columns for EMCAL supermodule 7", 64, -72., 72., 56, -63., 63.) ;
+  Add2RecPointsList(h6,kRPsmod7) ;
+  TH2I * h7 = new TH2I("hRpEMCALxySMod8","RecPoints Rows x Columns for EMCAL supermodule 8", 64, -72., 72., 56, -63., 63.) ;
+  Add2RecPointsList(h7,kRPsmod8) ;
+  TH2I * h8 = new TH2I("hRpEMCALxySMod9","RecPoints Rows x Columns for EMCAL supermodule 9", 64, -72., 72., 56, -63., 63.) ;
+  Add2RecPointsList(h8,kRPsmod9) ;
+  TH2I * h9 = new TH2I("hRpEMCALxySMod10","RecPoints Rows x Columns for EMCAL supermodule 10", 64, -72., 72., 56, -63., 63.) ;
+  Add2RecPointsList(h9,kRPsmod10) ;
+  TH2I * h10 = new TH2I("hRpEMCALxySMod11","RecPoints Rows x Columns for EMCAL supermodule 11", 64, -72., 72., 56, -63., 63.) ;
+  Add2RecPointsList(h10,kRPsmod11) ;
+  TH2I * h11 = new TH2I("hRpEMCALxySMod12","RecPoints Rows x Columns for EMCAL supermodule 12", 64, -72., 72., 56, -63., 63.) ;
+  Add2RecPointsList(h11,kRPsmod12) ;
+  TH1F * h12 = new TH1F("hEmcalRecPointsSpectrum",  "RecPoints spectrum in EMCAL",   2000, 0., 20.) ; 
+  h12->Sumw2() ;
+  Add2RecPointsList(h12, kRPSpec)  ;
+
+  TH1I * h13 = new TH1I("hEmcalRecPointsMul", "RecPoints multiplicity distribution in EMCAL", 100, 0,  100) ; 
+  h13->Sumw2() ;
+  Add2RecPointsList(h13, kRPNtot) ;
+
+  TH1I * h14 = new TH1I("hEmcalRecPointsEtot", "RecPoints Etot in EMCAL", 200, 0,  200.) ; 
+  h14->Sumw2() ;
+  Add2RecPointsList(h14, kRPEtot) ;
+
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMakerRec::InitRaws()
+{
+  // create Raws histograms in Raws subdir
+  TH2I * h0 = new TH2I("hHighEMCALxySMod1","High Gain Rows x Columns for EMCAL supermodule 1", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h0,kHGsmod1) ;
+  TH2I * h1 = new TH2I("hHighEMCALxySMod2","High Gain Rows x Columns for EMCAL supermodule 2", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h1,kHGsmod2) ;
+  TH2I * h2 = new TH2I("hHighEMCALxySMod3","High Gain Rows x Columns for EMCAL supermodule 3", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h2,kHGsmod3) ;
+  TH2I * h3 = new TH2I("hHighEMCALxySMod4","High Gain Rows x Columns for EMCAL supermodule 4", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h3,kHGsmod4) ;
+  TH2I * h4 = new TH2I("hHighEMCALxySMod5","High Gain Rows x Columns for EMCAL supermodule 5", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h4,kHGsmod5) ;
+  TH2I * h5 = new TH2I("hHighEMCALxySMod6","High Gain Rows x Columns for EMCAL supermodule 6", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h5,kHGsmod6) ;
+  TH2I * h6 = new TH2I("hHighEMCALxySMod7","High Gain Rows x Columns for EMCAL supermodule 7", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h6,kHGsmod7) ;
+  TH2I * h7 = new TH2I("hHighEMCALxySMod8","High Gain Rows x Columns for EMCAL supermodule 8", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h7,kHGsmod8) ;
+  TH2I * h8 = new TH2I("hHighEMCALxySMod9","High Gain Rows x Columns for EMCAL supermodule 9", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h8,kHGsmod9) ;
+  TH2I * h9 = new TH2I("hHighEMCALxySMod10","High Gain Rows x Columns for EMCAL supermodule 10", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h9,kHGsmod10) ;
+  TH2I * h10 = new TH2I("hHighEMCALxySMod11","High Gain Rows x Columns for EMCAL supermodule 11", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h10,kHGsmod11) ;
+  TH2I * h11 = new TH2I("hHighEMCALxySMod12","High Gain Rows x Columns for EMCAL supermodule 12", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h11,kHGsmod12) ;
+
+
+  TH2I * h12 = new TH2I("hLowEMCALxySMod1","Low Gain Rows x Columns for EMCAL supermodule 1", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h12,kLGsmod1) ;
+  TH2I * h13 = new TH2I("hLowEMCALxySMod2","Low Gain Rows x Columns for EMCAL supermodule 2", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h13,kLGsmod2) ;
+  TH2I * h14 = new TH2I("hLowEMCALxySMod3","Low Gain Rows x Columns for EMCAL supermodule 3", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h14,kLGsmod3) ;
+  TH2I * h15 = new TH2I("hLowEMCALxySMod4","Low Gain Rows x Columns for EMCAL supermodule 4", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h15,kLGsmod4) ;    
+  TH2I * h16 = new TH2I("hLowEMCALxySMod5","Low Gain Rows x Columns for EMCAL supermodule 5", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h16,kLGsmod5) ;
+  TH2I * h17 = new TH2I("hLowEMCALxySMod6","Low Gain Rows x Columns for EMCAL supermodule 6", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h17,kLGsmod6) ;
+  TH2I * h18 = new TH2I("hLowEMCALxySMod7","Low Gain Rows x Columns for EMCAL supermodule 7", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h18,kLGsmod7) ;
+  TH2I * h19 = new TH2I("hLowEMCALxySMod8","Low Gain Rows x Columns for EMCAL supermodule 8", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h19,kLGsmod8) ;
+  TH2I * h20 = new TH2I("hLowEMCALxySMod9","Low Gain Rows x Columns for EMCAL supermodule 9", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h20,kLGsmod9) ;    
+  TH2I * h21 = new TH2I("hLowEMCALxySMod10","Low Gain Rows x Columns for EMCAL supermodule 10", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h21,kLGsmod10) ;
+  TH2I * h22 = new TH2I("hLowEMCALxySMod11","Low Gain Rows x Columns for EMCAL supermodule 11", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h22,kLGsmod11) ;
+  TH2I * h23 = new TH2I("hLowEMCALxySMod12","Low Gain Rows x Columns for EMCAL supermodule 12", 64, 0, 64, 56, 0, 56) ;
+  Add2RawsList(h23,kLGsmod12) ;
+
+
+  TH1I * h24 = new TH1I("hLowEmcalSupermodules",    "Low Gain Hits in EMCAL supermodules",       12, 0, 12) ;
+  h24->Sumw2() ;
+  Add2RawsList(h24, kNsmodLG) ;
+  TH1I * h25 = new TH1I("hHighEmcalSupermodules",   "High Gain Hits in EMCAL supermodules",       12, 0, 12) ;
+  h25->Sumw2() ;
+  Add2RawsList(h25, kNsmodHG) ;
+
+  TH1F * h26 = new TH1F("hLowEmcalRawtime", "Low Gain Time of raw hits in EMCAL", 500, -50., 200.) ;
+  h26->Sumw2() ;
+  Add2RawsList(h26, kLGtime) ;
+  TH1F * h27 = new TH1F("hHighEmcalRawtime", "High Gain Time of raw hits in EMCAL", 500, -50., 200.) ;
+  h27->Sumw2() ;
+  Add2RawsList(h27, kHGtime) ;
+
+  TH1F * h28 = new TH1F("hLowEmcalRawEnergy", "Low Gain Energy of raw hits in EMCAL", 500, 0., 1000.) ;
+  h28->Sumw2() ;
+  Add2RawsList(h28, kSpecLG) ;
+  TH1F * h29 = new TH1F("hHighEmcalRawEnergy", "High Gain Energy of raw hits in EMCAL",500,0., 1000.) ;
+  h29->Sumw2() ;
+  Add2RawsList(h29, kSpecHG) ;
+
+  TH1F * h30 = new TH1F("hLowNtot", "Low Gain Total Number of raw hits in EMCAL", 500, 0., 5000.) ;
+  h30->Sumw2() ;
+  Add2RawsList(h30, kNtotLG) ;
+  TH1F * h31 = new TH1F("hHighNtot", "High Gain Total Number of raw hits in EMCAL",500,0., 5000.) ;
+  h31->Sumw2() ;
+  Add2RawsList(h31, kNtotHG) ;
+
+  TH1F * h32 = new TH1F("hLowEtot", "Low Gain Total Energy of raw hits in EMCAL", 500, 0., 5000.) ;
+  h32->Sumw2() ;
+  Add2RawsList(h32, kEtotLG) ;
+  TH1F * h33 = new TH1F("hHighEtot", "High Gain Total Energy of raw hits in EMCAL",500,0., 100000.) ;
+  h33->Sumw2() ;
+  Add2RawsList(h33, kEtotHG) ;
+  
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMakerRec::MakeESDs(AliESDEvent * esd)
+{
+  // make QA data from ESDs
+
+  Int_t nTot = 0 ; 
+  Double_t eTot = 0 ; 
+  for ( Int_t index = 0; index < esd->GetNumberOfCaloClusters() ; index++ ) {
+    AliESDCaloCluster * clu = esd->GetCaloCluster(index) ;
+    if( clu->IsEMCAL() ) {
+      GetESDsData(kESDSpec)->Fill(clu->E()) ;
+      Double_t *pid=clu->GetPid() ;
+      GetESDsData(kESDpid)->Fill(pid[AliPID::kPhoton]) ;
+      eTot+=clu->E() ;
+      nTot++ ;
+    } 
+  }
+  GetESDsData(kESDNtot)->Fill(nTot) ;
+  GetESDsData(kESDEtot)->Fill(eTot) ;
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMakerRec::MakeRaws(AliRawReader* rawReader)
+{
+  //Fill prepared histograms with Raw digit properties
+
+  //Raw histogram filling not yet implemented
+
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMakerRec::MakeRecPoints(TTree * clustersTree)
+{
+  // makes data from RecPoints
+  TBranch *emcbranch = clustersTree->GetBranch("EMCALECARP");
+  if (!emcbranch) { 
+    AliError("can't get the branch with the EMCAL clusters !");
+    return;
+  }
+  TObjArray * emcrecpoints = new TObjArray(100) ;
+  emcbranch->SetAddress(&emcrecpoints);
+  emcbranch->GetEntry(0);
+  
+  GetRecPointsData(kRPNtot)->Fill(emcrecpoints->GetEntriesFast()) ; 
+  TIter next(emcrecpoints) ; 
+  AliEMCALRecPoint * rp ; 
+  Double_t eTot = 0. ; 
+  while ( (rp = dynamic_cast<AliEMCALRecPoint *>(next())) ) {
+    GetRecPointsData(kRPSpec)->Fill( rp->GetEnergy()) ;
+    Int_t smod = rp->GetSuperModuleNumber() ;
+    TVector3 pos ;
+    rp->GetLocalPosition(pos) ;
+    switch(smod){
+      case 0: GetRecPointsData(kRPsmod1)->Fill(pos.X(),pos.Z()) ; break ;
+      case 1: GetRecPointsData(kRPsmod2)->Fill(pos.X(),pos.Z()) ; break ;
+      case 2: GetRecPointsData(kRPsmod3)->Fill(pos.X(),pos.Z()) ; break ;
+      case 3: GetRecPointsData(kRPsmod4)->Fill(pos.X(),pos.Z()) ; break ;
+      case 4: GetRecPointsData(kRPsmod5)->Fill(pos.X(),pos.Z()) ; break ;
+      case 5: GetRecPointsData(kRPsmod6)->Fill(pos.X(),pos.Z()) ; break ;
+      case 6: GetRecPointsData(kRPsmod7)->Fill(pos.X(),pos.Z()) ; break ;
+      case 7: GetRecPointsData(kRPsmod8)->Fill(pos.X(),pos.Z()) ; break ;
+      case 8: GetRecPointsData(kRPsmod9)->Fill(pos.X(),pos.Z()) ; break ;
+      case 9: GetRecPointsData(kRPsmod10)->Fill(pos.X(),pos.Z()) ; break ;
+      case 10: GetRecPointsData(kRPsmod11)->Fill(pos.X(),pos.Z()) ; break ;
+      case 11: GetRecPointsData(kRPsmod12)->Fill(pos.X(),pos.Z()) ; break ;
+    }
+    
+    eTot+= rp->GetEnergy() ;
+  }
+  GetRecPointsData(kRPEtot)->Fill(eTot) ;
+  emcrecpoints->Delete();
+  delete emcrecpoints;
+  
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMakerRec::StartOfDetectorCycle()
+{
+  //Detector specific actions at start of cycle
+  
+}
diff --git a/EMCAL/AliEMCALQADataMakerRec.h b/EMCAL/AliEMCALQADataMakerRec.h
new file mode 100644 (file)
index 0000000..a51b1ec
--- /dev/null
@@ -0,0 +1,64 @@
+#ifndef ALIEMCALQADataMakerRec_H
+#define ALIEMCALQADataMakerRec_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/*
+  Produces the data needed to calculate the quality assurance. 
+  All data must be mergeable objects.
+
+  Based on PHOS code written by
+  Y. Schutz CERN July 2007
+*/
+
+
+// --- ROOT system ---
+class TH1F ; 
+class TH1I ; 
+class TObjArray ; 
+
+// --- Standard library ---
+
+// --- AliRoot header files ---
+#include "AliQADataMakerRec.h"
+
+class AliEMCALQADataMakerRec: public AliQADataMakerRec {
+
+public:
+  //Histograms for Raw data control
+  enum HRawType_t {kHGsmod1,kHGsmod2,kHGsmod3,kHGsmod4,kHGsmod5,kHGsmod6,
+                  kHGsmod7,kHGsmod8,kHGsmod9,kHGsmod10,kHGsmod11,kHGsmod12,
+                  kLGsmod1,kLGsmod2,kLGsmod3,kLGsmod4,kLGsmod5,kLGsmod6,
+                  kLGsmod7,kLGsmod8,kLGsmod9,kLGsmod10,kLGsmod11,kLGsmod12,
+                  kNsmodLG,kNsmodHG,
+                  kNtotLG,kNtotHG,kEtotLG,kEtotHG,
+                  kLGtime,kHGtime,kSpecLG,kSpecHG} ;
+  //Histograms for RecPoints  control
+  enum HRPType_t {kRPsmod1,kRPsmod2,kRPsmod3,kRPsmod4,kRPsmod5,kRPsmod6,
+                 kRPsmod7,kRPsmod8,kRPsmod9,kRPsmod10,kRPsmod11,kRPsmod12,
+                 kRPNtot,kRPEtot,kRPSpec,kRPTime} ;
+  //Histograms for ESDs  control
+  enum HESDType_t {kESDNtot,kESDEtot,kESDSpec,kESDpid} ;
+                 
+
+public:
+  AliEMCALQADataMakerRec() ;          // ctor
+  AliEMCALQADataMakerRec(const AliEMCALQADataMakerRec& qadm) ;   
+  AliEMCALQADataMakerRec& operator = (const AliEMCALQADataMakerRec& qadm) ;
+  virtual ~AliEMCALQADataMakerRec() {;} // dtor
+  
+private:
+  virtual void   EndOfDetectorCycle(AliQA::TASKINDEX_t, TObjArray * list) ;
+  virtual void   InitESDs() ; 
+  virtual void   InitRecPoints() ; 
+  virtual void   InitRaws() ; 
+  virtual void   MakeESDs(AliESDEvent * esd) ;
+  virtual void   MakeRecPoints(TTree * recpoTree) ; 
+  virtual void   MakeRaws(AliRawReader* rawReader) ; 
+  virtual void   StartOfDetectorCycle() ; 
+
+  ClassDef(AliEMCALQADataMakerRec,1)  // description 
+
+};
+
+#endif // AliEMCALQADataMakerRec_H
diff --git a/EMCAL/AliEMCALQADataMakerSim.cxx b/EMCAL/AliEMCALQADataMakerSim.cxx
new file mode 100644 (file)
index 0000000..ef67061
--- /dev/null
@@ -0,0 +1,222 @@
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/*
+  Produces the data needed to calculate the quality assurance. 
+  All data must be mergeable objects.
+
+  Based on PHOS code written by
+  Y. Schutz CERN July 2007
+*/
+
+// --- ROOT system ---
+#include <TClonesArray.h>
+#include <TFile.h> 
+#include <TH1F.h> 
+#include <TH1I.h> 
+#include <TH2F.h> 
+#include <TTree.h>
+
+// --- Standard library ---
+
+// --- AliRoot header files ---
+#include "AliESDCaloCluster.h"
+#include "AliLog.h"
+#include "AliEMCALDigit.h"
+#include "AliEMCALHit.h"
+#include "AliEMCALQADataMakerSim.h"
+#include "AliQAChecker.h"
+
+ClassImp(AliEMCALQADataMakerSim)
+           
+//____________________________________________________________________________ 
+  AliEMCALQADataMakerSim::AliEMCALQADataMakerSim() : 
+  AliQADataMakerSim(AliQA::GetDetName(AliQA::kEMCAL), "EMCAL Quality Assurance Data Maker")
+{
+  // ctor
+}
+
+//____________________________________________________________________________ 
+AliEMCALQADataMakerSim::AliEMCALQADataMakerSim(const AliEMCALQADataMakerSim& qadm) :
+  AliQADataMakerSim()
+{
+  //copy ctor 
+  SetName((const char*)qadm.GetName()) ; 
+  SetTitle((const char*)qadm.GetTitle()); 
+}
+
+//__________________________________________________________________
+AliEMCALQADataMakerSim& AliEMCALQADataMakerSim::operator = (const AliEMCALQADataMakerSim& qadm )
+{
+  // Assign operator.
+  this->~AliEMCALQADataMakerSim();
+  new(this) AliEMCALQADataMakerSim(qadm);
+  return *this;
+}
+//____________________________________________________________________________ 
+void AliEMCALQADataMakerSim::EndOfDetectorCycle(AliQA::TASKINDEX_t task, TObjArray * list)
+{
+  //Detector specific actions at end of cycle
+  // do the QA checking
+  AliQAChecker::Instance()->Run(AliQA::kEMCAL, task, list) ;  
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMakerSim::InitHits()
+{
+  // create Hits histograms in Hits subdir
+  TH1F * h0 = new TH1F("hEmcalHits",    "Hits energy distribution in EMCAL",       100, 0., 100.) ; 
+  h0->Sumw2() ;
+  Add2HitsList(h0, 0) ;
+  TH1I * h1  = new TH1I("hEmcalHitsMul", "Hits multiplicity distribution in EMCAL", 500, 0., 10000) ; 
+  h1->Sumw2() ;
+  Add2HitsList(h1, 1) ;
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMakerSim::InitDigits()
+{
+  // create Digits histograms in Digits subdir
+  TH1I * h0 = new TH1I("hEmcalDigits",    "Digits amplitude distribution in EMCAL",    500, 0, 5000) ; 
+  h0->Sumw2() ;
+  Add2DigitsList(h0, 0) ;
+  TH1I * h1 = new TH1I("hEmcalDigitsMul", "Digits multiplicity distribution in EMCAL", 500, 0, 1000) ; 
+  h1->Sumw2() ;
+  Add2DigitsList(h1, 1) ;
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMakerSim::InitSDigits()
+{
+  // create SDigits histograms in SDigits subdir
+  TH1F * h0 = new TH1F("hEmcalSDigits",    "SDigits energy distribution in EMCAL",       100, 0., 100.) ; 
+  h0->Sumw2() ;
+  Add2SDigitsList(h0, 0) ;
+  TH1I * h1 = new TH1I("hEmcalSDigitsMul", "SDigits multiplicity distribution in EMCAL", 500, 0,  10000) ; 
+  h1->Sumw2() ;
+  Add2SDigitsList(h1, 1) ;
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMakerSim::MakeHits(TClonesArray * hits)
+{
+  //make QA data from Hits
+
+  GetHitsData(1)->Fill(hits->GetEntriesFast()) ; 
+  TIter next(hits) ; 
+  AliEMCALHit * hit ; 
+  while ( (hit = dynamic_cast<AliEMCALHit *>(next())) ) {
+    GetHitsData(0)->Fill( hit->GetEnergy()) ;
+  }
+
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMakerSim::MakeHits(TTree * hitTree)
+{
+  // make QA data from Hit Tree
+  
+  TClonesArray * hits = new TClonesArray("AliEMCALHit", 1000);
+  
+  TBranch * branch = hitTree->GetBranch("EMCAL") ;
+  if ( ! branch ) {
+    AliWarning("EMCAL branch in Hit Tree not found") ; 
+  } else {
+    TClonesArray * tmp =  new TClonesArray("AliEMCALHit", 1000) ;
+    branch->SetAddress(&tmp) ;
+    Int_t index = 0 ;  
+    for (Int_t ientry = 0 ; ientry < branch->GetEntries() ; ientry++) {
+      branch->GetEntry(ientry) ; 
+      for (Int_t ihit = 0 ; ihit < tmp->GetEntries() ; ihit++) {
+       AliEMCALHit * hit = dynamic_cast<AliEMCALHit *> (tmp->At(ihit)) ; 
+       new((*hits)[index]) AliEMCALHit(*hit) ; 
+       index++ ;
+      } 
+    }  
+    tmp->Delete() ; 
+    delete tmp ; 
+    MakeHits(hits) ; 
+  }
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMakerSim::MakeDigits(TClonesArray * digits)
+{
+  // makes data from Digits
+
+  GetDigitsData(1)->Fill(digits->GetEntriesFast()) ; 
+  TIter next(digits) ; 
+  AliEMCALDigit * digit ; 
+  while ( (digit = dynamic_cast<AliEMCALDigit *>(next())) ) {
+    GetDigitsData(0)->Fill( digit->GetAmp()) ;
+  }  
+
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMakerSim::MakeDigits(TTree * digitTree)
+{
+  // makes data from Digit Tree
+  TClonesArray * digits = new TClonesArray("AliEMCALDigit", 1000) ; 
+  
+  TBranch * branch = digitTree->GetBranch("EMCAL") ;
+  if ( ! branch ) {
+    AliWarning("EMCAL branch in Digit Tree not found") ; 
+  } else {
+    branch->SetAddress(&digits) ;
+    branch->GetEntry(0) ; 
+    MakeDigits(digits) ; 
+  }
+
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMakerSim::MakeSDigits(TClonesArray * sdigits)
+{
+  // makes data from SDigits
+  
+  GetSDigitsData(1)->Fill(sdigits->GetEntriesFast()) ; 
+  TIter next(sdigits) ; 
+  AliEMCALDigit * sdigit ; 
+  while ( (sdigit = dynamic_cast<AliEMCALDigit *>(next())) ) {
+    GetSDigitsData(0)->Fill( sdigit->GetAmp()) ;
+  } 
+
+}
+
+//____________________________________________________________________________
+void AliEMCALQADataMakerSim::MakeSDigits(TTree * sdigitTree)
+{
+  // makes data from SDigit Tree
+  TClonesArray * sdigits = new TClonesArray("AliEMCALDigit", 1000) ; 
+  
+  TBranch * branch = sdigitTree->GetBranch("EMCAL") ;
+  if ( ! branch ) {
+    AliWarning("EMCAL branch in SDigit Tree not found") ; 
+  } else {
+    branch->SetAddress(&sdigits) ;
+    branch->GetEntry(0) ;
+    MakeSDigits(sdigits) ; 
+  }
+
+}
+
+//____________________________________________________________________________ 
+void AliEMCALQADataMakerSim::StartOfDetectorCycle()
+{
+  //Detector specific actions at start of cycle
+  
+}
diff --git a/EMCAL/AliEMCALQADataMakerSim.h b/EMCAL/AliEMCALQADataMakerSim.h
new file mode 100644 (file)
index 0000000..1edda3f
--- /dev/null
@@ -0,0 +1,50 @@
+#ifndef ALIEMCALQADATAMAKERSIM_H
+#define ALIEMCALQADATAMAKERSIM_H
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+/*
+  Produces the data needed to calculate the quality assurance. 
+  All data must be mergeable objects.
+
+  Based on PHOS code written by
+  Y. Schutz CERN July 2007
+*/
+
+
+// --- ROOT system ---
+class TH1F ; 
+class TH1I ; 
+class TObjArray ; 
+
+// --- Standard library ---
+
+// --- AliRoot header files ---
+#include "AliQADataMakerSim.h"
+
+class AliEMCALQADataMakerSim: public AliQADataMakerSim {
+
+public:
+  AliEMCALQADataMakerSim() ;          // ctor
+  AliEMCALQADataMakerSim(const AliEMCALQADataMakerSim& qadm) ;   
+  AliEMCALQADataMakerSim& operator = (const AliEMCALQADataMakerSim& qadm) ;
+  virtual ~AliEMCALQADataMakerSim() {;} // dtor
+  
+private:
+  virtual void   EndOfDetectorCycle(AliQA::TASKINDEX_t, TObjArray * list) ;
+  virtual void   InitHits() ; 
+  virtual void   InitDigits() ; 
+  virtual void   InitSDigits() ; 
+  virtual void   MakeHits(TClonesArray * hits) ;
+  virtual void   MakeHits(TTree * hitTree) ;
+  virtual void   MakeDigits(TClonesArray * digits) ; 
+  virtual void   MakeDigits(TTree * digitTree) ; 
+  virtual void   MakeSDigits(TClonesArray * sigits) ; 
+  virtual void   MakeSDigits(TTree * sigitTree) ; 
+  virtual void   StartOfDetectorCycle() ; 
+
+  ClassDef(AliEMCALQADataMakerSim,1)  // description 
+
+};
+
+#endif // AliEMCALQADATAMAKERSIM_H
index 77adbf0..968eea1 100644 (file)
 #pragma link C++ class AliEMCALCalibHistoProducer+;
 #pragma link C++ class AliEMCALPreprocessor+;
 // Tables without TTable
+#pragma link C++ class AliEMCALPi0SelectionParam+;
+#pragma link C++ class AliEMCALPi0SelectionParRec+;
+#pragma link C++ class AliEMCALCalibCoefs+;
+#pragma link C++ class AliEMCALCalibCoef+;
+#pragma link C++ class AliEMCALCellInfo+;
+#pragma link C++ class AliEMCALCellIndexes+;
 //
 #pragma link C++ class AliCaloCalibPedestal+;
 #pragma link C++ class AliEMCALSurvey+;
 #pragma link C++ class AliEMCALRecParam+;
+#pragma link C++ class AliEMCALQAChecker+;
+
 #endif
index 90288ff..13aee77 100644 (file)
@@ -9,6 +9,12 @@
 #pragma link C++ class AliEMCALTrack+;
 #pragma link C++ class AliEMCALTracker+;
 #pragma link C++ class AliEMCALPID+;
+#pragma link C++ class AliEMCALRecPointsQaESDSelector+;
+#pragma link C++ class AliEMCALQADataMakerRec+;
 //
 // Calibration staff
+#pragma link C++ class AliEMCALFolder;
+#pragma link C++ class AliEMCALSuperModule;
+#pragma link C++ class AliEMCALCell;
+
 #endif
index 4802ca0..ed5c57d 100644 (file)
@@ -12,6 +12,6 @@
 #pragma link C++ class AliEMCALv2+;
 #pragma link C++ class AliEMCALDigitizer+;
 #pragma link C++ class AliEMCALRawUtils+;
-
+#pragma link C++ class AliEMCALQADataMakerSim+;
 
 #endif
index e41b915..5983936 100644 (file)
@@ -1,6 +1,6 @@
 #-*-Mode: Makefile-*-
 
-SRCS =\
+SRCS = \
 AliEMCALGeometry.cxx \
 AliEMCALHit.cxx \
 AliEMCALLoader.cxx \
@@ -15,9 +15,13 @@ AliEMCALDigit.cxx \
 AliEMCALCalibData.cxx \
 AliEMCALCalibHistoProducer.cxx \
 AliEMCALPreprocessor.cxx \
+AliEMCALPi0SelectionParam.cxx \
+AliEMCALCalibCoefs.cxx \
+AliEMCALCellInfo.cxx \
 AliCaloCalibPedestal.cxx \
 AliEMCALSurvey.cxx \
-AliEMCALRecParam.cxx
+AliEMCALRecParam.cxx \
+AliEMCALQAChecker.cxx
 
 HDRS= $(SRCS:.cxx=.h) 
 
index 6926315..094f501 100644 (file)
@@ -6,11 +6,16 @@ AliEMCALReconstructor.cxx \
 AliEMCALClusterizerv1.cxx \
 AliEMCALTrack.cxx \
 AliEMCALTracker.cxx \
-AliEMCALPID.cxx
+AliEMCALPID.cxx \
+AliEMCALRecPointsQaESDSelector.cxx \
+AliEMCALFolder.cxx \
+AliEMCALSuperModule.cxx \
+AliEMCALCell.cxx \
+AliEMCALQADataMakerRec.cxx
 
 HDRS= $(SRCS:.cxx=.h) 
 
-CINTHDRS:= $(HDRS) AliEMCALGeometry.h
+CINTHDRS:= $(HDRS) AliEMCALGeometry.h AliEMCALPi0SelectionParam.h
 
 DHDR:=EMCALLinkDefrec.h
 # have to tune
index 4a6d835..f6eb1f1 100644 (file)
@@ -10,7 +10,8 @@ AliEMCALv2.cxx \
 AliEMCALDigitizer.cxx \
 AliEMCALTick.cxx \
 AliEMCALRawUtils.cxx \
-AliEMCALTrigger.cxx
+AliEMCALTrigger.cxx \
+AliEMCALQADataMakerSim.cxx
 
 HDRS= $(SRCS:.cxx=.h)