//
#include <TH2D.h>
#include <AliFMDHit.h>
-#include <AliFMDMultStrip.h>
-#include <AliFMDMultRegion.h>
#include <AliFMDDigit.h>
+#include <AliFMDRecPoint.h>
#include <AliFMDInput.h>
#include <AliFMDEdepMap.h>
#include <AliFMDFloatMap.h>
@endcode
@ingroup FMD_script
*/
-class DrawHitsRecs : public AliFMDInputHits
+class DrawHitsRecs : public AliFMDInput
{
private:
- TH2D* fElossVsMult; // Histogram
- TH2D* fHitsVsStrip; // Histogram
- TH2D* fHitsVsRegion; // Histogram
- AliFMDEdepMap fMap;
+ TH2D* fHitEvsAdc;
+ TH2D* fHitEvsRecM; // Histogram
+ TH2D* fHitEvsRecE; // Histogram
+ TH1D* fDiffE; // Histogram
+ TH2D* fHitsVsRecM; // Histogram
+ TH2D* fDiffM; // Histogram
+ AliFMDEdepMap fMap;
AliFMDFloatMap fEta;
AliFMDFloatMap fPhi;
AliFMDFloatMap fMult;
fPrimary = primary;
AddLoad(kRecPoints);
AddLoad(kHits);
+ AddLoad(kDigits);
if (fPrimary) AddLoad(kKinematics);
TArrayF eloss(MakeLogScale(n, emin, emax));
TArrayF mults(m+1);
mults[0] = mmin;
for (Int_t i = 1; i < m+1; i++) mults[i] = mults[i-1] + (mmax-mmin)/m;
- fElossVsMult = new TH2D("elossVsMult",
- "#Delta E vs. Multiplicity (single)",
+
+ fHitEvsAdc = new TH2D("hitEvsAdc", "#Delta E_{sim} vs. ADC",
+ n, emin, emax, 1025, -.5, 1024.5);
+ fHitEvsAdc->SetXTitle("#Delta E_{sim} [MeV]");
+ fHitEvsAdc->SetYTitle("ADC");
+
+ fHitEvsRecM = new TH2D("hitEvsRecM", "#Delta E_{sim} vs. M_{rec}",
eloss.fN-1, eloss.fArray, mults.fN-1, mults.fArray);
- fElossVsMult->SetXTitle("#Delta E/#Delta x [MeV/cm]");
- fElossVsMult->SetYTitle("Strip Multiplicity");
+ fHitEvsRecM->SetXTitle("#Delta E_{sim} [MeV]");
+ fHitEvsRecM->SetYTitle("M_{rec}");
+
+ fHitEvsRecE = new TH2D("hitEvsRecE", "#Delta E_{sim} vs. #Delta E_{rec}",
+ n, emin, emax, n, emin, emax);
+ fHitEvsRecE->SetXTitle("#Delta E_{sim} [MeV]");
+ fHitEvsRecE->SetYTitle("#Delta E_{rec} [MeV]");
+
+ fDiffE = new TH1D("diffE",
+ "#frac{#Delta E_{sim}-#Delta E_{rec}}{#Delta E_{sim}}",
+ 1100, -1, 1.1);
+ fDiffE->SetXTitle("#frac{#Delta E_{sim}-#Delta E_{rec}}{#Delta E_{sim}}");
+
Double_t omin = -.5;
Double_t omax = 7.5;
Int_t o = 8;
- fHitsVsStrip = new TH2D("hitsVsStrip",
- "# of Hits vs. Multiplicity (strip)",
+ fHitsVsRecM = new TH2D("hitsVsStrip", "# of Hits vs. M_{rec}",
o, omin, omax, m, mmin, mmax);
- fHitsVsStrip->SetXTitle("# of Hits");
- fHitsVsStrip->SetYTitle("Strip Multiplicity");
+ fHitsVsRecM->SetXTitle("# of Hits");
+ fHitsVsRecM->SetYTitle("M_{rec}");
+
+ fDiffM = new TH2D("diffM", "M_{sim} - M_{rec}",
+ 41, -20.5, 20.5, 70, 1.5, 5);
+ // 36, -TMath::Pi(),TMath::Pi());
+ fDiffM->SetXTitle("M_{sim} - M_{rec}");
+ fDiffM->SetYTitle("|#eta|");
+ // fDiffM->SetYTitle("Detector");
+
}
//__________________________________________________________________
/** Begining of event
Bool_t Begin(Int_t ev)
{
fMap.Reset();
- return AliFMDInputHits::Begin(ev);
+ return AliFMDInput::Begin(ev);
}
//__________________________________________________________________
Bool_t ProcessHit(AliFMDHit* hit, TParticle*)
fMap(det, rng, sec, str).fN++;
return kTRUE;
}
+
+ //__________________________________________________________________
+ Bool_t ProcessDigit(AliFMDDigit* digit)
+ {
+ if (!digit) return kTRUE;
+
+ UShort_t det = digit->Detector();
+ Char_t rng = digit->Ring();
+ UShort_t sec = digit->Sector();
+ UShort_t str = digit->Strip();
+ if (str > 511) {
+ AliWarning(Form("Bad strip number %d in digit", str));
+ return kTRUE;
+ }
+ Double_t edep = fMap(det, rng, sec, str).fEdep;
+ if (edep > 0) fHitEvsAdc->Fill(edep, digit->Counts());
+
+ return kTRUE;
+ }
+
//__________________________________________________________________
Bool_t ProcessRecPoint(AliFMDRecPoint* single)
{
- if (!single) continue;
+ if (!single) return kTRUE;
UShort_t det = single->Detector();
Char_t rng = single->Ring();
UShort_t sec = single->Sector();
UShort_t str = single->Strip();
if (str > 511) {
AliWarning(Form("Bad strip number %d in single", str));
- continue;
+ return kTRUE;
}
- if (fMap(det, rng, sec, str).fEdep > 0)
- fElossVsMult->Fill(fMap(det, rng, sec, str).fEdep,
- single->Particles());
- if (fMap(det, rng, sec, str).fN > 0)
- fHitsVsStrip->Fill(fMap(det, rng, sec, str).fN,
- single->Particles());
+ Double_t edep = fMap(det, rng, sec, str).fEdep;
+ Int_t nhit = fMap(det, rng, sec, str).fN;
+ if (edep > 0) {
+ fHitEvsRecM->Fill(edep, single->Particles());
+ fHitEvsRecE->Fill(edep, single->Edep());
+ fDiffE->Fill((single->Edep() - edep) / edep);
+ }
+ if (nhit > 0) fHitsVsRecM->Fill(nhit, single->Particles());
+ fDiffM->Fill(nhit - single->Particles(), TMath::Abs(single->Eta()));
return kTRUE;
}
//__________________________________________________________________
gStyle->SetCanvasBorderSize(0);
gStyle->SetPadColor(0);
gStyle->SetPadBorderSize(0);
+ TCanvas* c = 0;
+
+ c = new TCanvas("c0", fHitEvsAdc->GetTitle());
+ fHitEvsAdc->SetStats(kFALSE);
+ fHitEvsAdc->Draw("COLZ");
+
+ c = new TCanvas("c1", fHitEvsRecM->GetTitle());
+ fHitEvsRecM->SetStats(kFALSE);
+ fHitEvsRecM->Draw("COLZ");
+
+ c = new TCanvas("c2", fHitEvsRecE->GetTitle());
+ fHitEvsRecE->SetStats(kFALSE);
+ fHitEvsRecE->Draw("COLZ");
+
+ c = new TCanvas("c3", fDiffE->GetTitle());
+ c->SetLogz();
+ fDiffE->Draw();
+
+ c = new TCanvas("c4", fHitsVsRecM->GetTitle());
+ c->SetLogz();
+ fHitsVsRecM->SetStats(kFALSE);
+ fHitsVsRecM->Draw("COLZ");
- new TCanvas("c1", "Energy loss vs. Strip Multiplicity");
- fElossVsMult->SetStats(kFALSE);
- fElossVsMult->Draw("COLZ");
+ c = new TCanvas("c5", fDiffM->GetTitle());
+ fDiffM->SetFillColor(2);
+ fDiffM->SetFillStyle(3001);
+ c->SetLogz();
+ fDiffM->Draw("colz");
- new TCanvas("c2", "# of Hits vs. Strip Multiplicity");
- fHitsVsStrip->SetStats(kFALSE);
- fHitsVsStrip->Draw("COLZ");
return kTRUE;
}