#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
//_____________________________________________________________________
//_____________________________________________________________________
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
}
//_____________________________________________________________________
-void AliFMDQADataMakerRec::InitDigits()
+/*void AliFMDQADataMakerRec::InitDigits()
{
// create Digits histograms in Digits subdir
TH1I* hADCCounts = new TH1I("hADCCounts","Dist of ADC counts",
Add2DigitsList(hADCCounts, 0);
}
-
+*/
//_____________________________________________________________________
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);
+
+ }
+ }
+ }
}
//_____________________________________________________________________
}
}
+/*
//_____________________________________________________________________
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());
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;
}
// 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
//