]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDQADataMakerRec.cxx
New class to create energy distributions
[u/mrichter/AliRoot.git] / FMD / AliFMDQADataMakerRec.cxx
index 478afdbeecd84e3136785201e15eb32f9d4512bc..86f937377ca56e805bda31b815c2e1acdac1d0d9 100644 (file)
 #include "AliQAChecker.h"
 #include "AliESDFMD.h"
 #include "AliFMDParameters.h"
+#include "AliFMDRawReader.h"
+#include "AliRawReader.h"
+#include "AliFMDAltroMapping.h"
 
 //_____________________________________________________________________
 // This is the class that collects the QA data for the FMD during
 // reconstruction.  
 //
 // The following data types are picked up:
-// - digits
 // - rec points
 // - esd data
-// The following data types are not supported (yet):
 // - raws
 // Author : Hans Hjersing Dalsgaard, hans.dalsgaard@cern.ch
 //_____________________________________________________________________
@@ -50,26 +51,45 @@ ClassImp(AliFMDQADataMakerRec)
 //_____________________________________________________________________
 AliFMDQADataMakerRec::AliFMDQADataMakerRec() : 
   AliQADataMakerRec(AliQA::GetDetName(AliQA::kFMD), 
-                   "FMD Quality Assurance Data Maker")
+                   "FMD Quality Assurance Data Maker"),
+  fDigitsArray("AliFMDDigit", 0),
+  fRecPointsArray("AliFMDRecPoint", 1000)
 {
   // ctor
 }
 
 //_____________________________________________________________________
 AliFMDQADataMakerRec::AliFMDQADataMakerRec(const AliFMDQADataMakerRec& qadm) 
-  : AliQADataMakerRec()
+  : AliQADataMakerRec(AliQA::GetDetName(AliQA::kFMD), 
+                     "FMD Quality Assurance Data Maker"),
+    fDigitsArray(qadm.fDigitsArray),
+    fRecPointsArray(qadm.fRecPointsArray)
 {
   // copy ctor 
   // Parameters: 
   //    qadm    Object to copy from
   
 }
+//_____________________________________________________________________
+AliFMDQADataMakerRec& AliFMDQADataMakerRec::operator = (const AliFMDQADataMakerRec& qadm ) 
+{
+  fDigitsArray = qadm.fDigitsArray;
+  fRecPointsArray = qadm.fRecPointsArray;
+  
+  return *this;
+}
+//_____________________________________________________________________
+AliFMDQADataMakerRec::~AliFMDQADataMakerRec()
+{
+}
 
 
 //_____________________________________________________________________ 
 
 void 
-AliFMDQADataMakerRec::EndOfDetectorCycle(AliQA::TASKINDEX task, 
+AliFMDQADataMakerRec::EndOfDetectorCycle(AliQA::TASKINDEX_t task, 
                                         TObjArray * list)
 {
   // Detector specific actions at end of cycle
@@ -93,7 +113,7 @@ void AliFMDQADataMakerRec::InitESDs()
 }
 
 //_____________________________________________________________________ 
-void AliFMDQADataMakerRec::InitDigits()
+/*void AliFMDQADataMakerRec::InitDigits()
 {
   // create Digits histograms in Digits subdir
   TH1I* hADCCounts      = new TH1I("hADCCounts","Dist of ADC counts",
@@ -103,7 +123,7 @@ void AliFMDQADataMakerRec::InitDigits()
   Add2DigitsList(hADCCounts, 0);
   
 }
-
+*/
 //_____________________________________________________________________ 
 void AliFMDQADataMakerRec::InitRecPoints()
 {
@@ -118,6 +138,36 @@ void AliFMDQADataMakerRec::InitRecPoints()
 void AliFMDQADataMakerRec::InitRaws()
 {
   
+  TH1I* hADCCounts;
+  for(Int_t det = 1; det<=3; det++) {
+    Int_t firstring = (det==1 ? 1 : 0);
+    for(Int_t iring = firstring;iring<=1;iring++) {
+      Char_t ring = (iring == 1 ? 'I' : 'O');
+      hADCCounts      = new TH1I(Form("hADCCounts_FMD%d%c",
+                                     det, ring), "ADC counts",
+                                1024,0,1023);
+      
+      Int_t index1 = GetHalfringIndex(det, ring, 0,1);
+      Add2RawsList(hADCCounts, index1,kTRUE);
+      
+      for(Int_t b = 0; b<=1;b++) {
+       
+       //Hexadecimal board numbers 0x0, 0x1, 0x10, 0x11;
+       UInt_t board = (iring == 1 ? 0 : 1);
+       board = board + b*16;
+       
+       
+       hADCCounts      = new TH1I(Form("hADCCounts_FMD%d%c_board%d",
+                                       det, ring, board), "ADC counts",
+                                  1024,0,1023);
+       hADCCounts->SetXTitle("ADC counts");
+       hADCCounts->SetYTitle("");
+       Int_t index2 = GetHalfringIndex(det, ring, board/16,0);
+       Add2RawsList(hADCCounts, index2);
+
+      }
+    }
+  }
 }
 
 //_____________________________________________________________________
@@ -147,6 +197,7 @@ void AliFMDQADataMakerRec::MakeESDs(AliESDEvent * esd)
   }
 }
 
+/*
 //_____________________________________________________________________
 void AliFMDQADataMakerRec::MakeDigits(TClonesArray * digits)
 {
@@ -155,7 +206,7 @@ void AliFMDQADataMakerRec::MakeDigits(TClonesArray * digits)
     AliError("FMD Digit object not found!!") ;
     return;
   }
-  for(Int_t i=0;i<digits->GetEntries();i++) {
+  for(Int_t i=0;i<digits->GetEntriesFast();i++) {
     //Raw ADC counts
     AliFMDDigit* digit = static_cast<AliFMDDigit*>(digits->At(i));
     GetDigitsData(0)->Fill(digit->Counts());
@@ -166,45 +217,70 @@ void AliFMDQADataMakerRec::MakeDigits(TClonesArray * digits)
 void AliFMDQADataMakerRec::MakeDigits(TTree * digitTree)
 {
   
-  TClonesArray* digits = new TClonesArray("AliFMDDigit", 1000); 
+  fDigitsArray.Clear();
   TBranch*      branch = digitTree->GetBranch("FMD");
   if (!branch) {
     AliWarning("FMD branch in Digit Tree not found") ; 
     return;
   } 
-  
-  branch->SetAddress(&digits);
+  TClonesArray* digitsAddress = &fDigitsArray;
+  branch->SetAddress(&digitsAddress);
   branch->GetEntry(0); 
-  MakeDigits(digits); 
+  MakeDigits(digitsAddress);
 }
-
+*/
 //_____________________________________________________________________
 void AliFMDQADataMakerRec::MakeRaws(AliRawReader* rawReader)
 {
+  AliFMDRawReader fmdReader(rawReader,0);
+  TClonesArray* digitsAddress = &fDigitsArray;
   
+  rawReader->Reset();
+               
+  digitsAddress->Clear();
+  fmdReader.ReadAdcs(digitsAddress);
+  for(Int_t i=0;i<digitsAddress->GetEntriesFast();i++) {
+    //Raw ADC counts
+    AliFMDDigit*      digit = static_cast<AliFMDDigit*>(digitsAddress->At(i));
+    UShort_t          det   = digit->Detector();
+    Char_t            ring  = digit->Ring();
+    UShort_t          sec   = digit->Sector();
+    // UShort_t strip = digit->Strip();
+    AliFMDParameters* pars  = AliFMDParameters::Instance();
+    Short_t           board = pars->GetAltroMap()->Sector2Board(ring, sec);
+    
+    Int_t index1 = GetHalfringIndex(det, ring, 0, 1);
+    GetRawsData(index1)->Fill(digit->Counts());
+    Int_t index2 = GetHalfringIndex(det, ring, board/16,0);
+    GetRawsData(index2)->Fill(digit->Counts());
+    
+  }
 }
 
 //_____________________________________________________________________
 void AliFMDQADataMakerRec::MakeRecPoints(TTree* clustersTree)
 {
   // makes data from RecPoints
+  AliFMDParameters* pars = AliFMDParameters::Instance();
+  fRecPointsArray.Clear();
   TBranch *fmdbranch = clustersTree->GetBranch("FMD");
   if (!fmdbranch) { 
     AliError("can't get the branch with the FMD recpoints !");
     return;
   }
   
-  TClonesArray * fmdrecpoints = new TClonesArray("AliFMDRecPoint", 1000);
-  fmdbranch->SetAddress(&fmdrecpoints);
+  TClonesArray* RecPointsAddress = &fRecPointsArray;
+  
+  fmdbranch->SetAddress(&RecPointsAddress);
   fmdbranch->GetEntry(0);
-    
-  TIter next(fmdrecpoints) ; 
+  TIter next(RecPointsAddress) ; 
   AliFMDRecPoint * rp ; 
   while ((rp = static_cast<AliFMDRecPoint*>(next()))) {
-    GetRecPointsData(0)->Fill(rp->Particles()) ;
+    
+    GetRecPointsData(0)->Fill(rp->Edep()/pars->GetEdepMip()) ;
+  
   }
-  fmdrecpoints->Delete();
-  delete fmdrecpoints;
 
 }
 
@@ -216,6 +292,22 @@ void AliFMDQADataMakerRec::StartOfDetectorCycle()
   // do?
 }
 //_____________________________________________________________________ 
+Int_t AliFMDQADataMakerRec::GetHalfringIndex(UShort_t det, 
+                                            Char_t ring, 
+                                            UShort_t board, 
+                                            UShort_t monitor) {
+  
+  UShort_t iring  =  (ring == 'I' ? 1 : 0);
+  
+  Int_t index = ( ((det-1) << 3) | (iring << 2) | (board << 1) | (monitor << 0));
+  
+  return index-2;
+  
+}
+
+//_____________________________________________________________________ 
+
+
 //
 // EOF
 //