1 //____________________________________________________________________
5 // Script that contains a class to draw eloss from hits, versus ADC
6 // counts from digits, using the AliFMDInputHits class in the util library.
8 // It draws the energy loss versus the p/(mq^2). It can be overlayed
9 // with the Bethe-Bloc curve to show how the simulation behaves
10 // relative to the expected.
12 // Use the script `Compile.C' to compile this class using ACLic.
15 #include <AliFMDHit.h>
16 #include <AliFMDDigit.h>
17 #include <AliFMDInput.h>
18 #include <AliFMDEdepMap.h>
25 /** @class DrawHitsDigits
26 @brief Draw hit energy loss versus digit ADC
29 Root> Compile("DrawHitsDigits.C")
30 Root> DrawHitsDigits c
35 class DrawHitsDigits : public AliFMDInput
38 TH2D* fElossVsAdc; // Histogram
41 //__________________________________________________________________
42 TArrayF MakeLogScale(Int_t n, Double_t min, Double_t max)
45 Float_t dp = n / TMath::Log10(max / min);
46 Float_t pmin = TMath::Log10(min);
48 for (Int_t i = 1; i < n+1; i++) {
49 Float_t p = pmin + i / dp;
50 bins[i] = TMath::Power(10, p);
54 //__________________________________________________________________
55 DrawHitsDigits(Int_t n=900, Double_t emin=1e-3, Double_t emax=10,
56 Int_t m=1100, Double_t amin=-0.5, Double_t amax=1099.5)
60 TArrayF eloss(MakeLogScale(n, emin, emax));
63 for (Int_t i = 1; i < m+1; i++) adcs[i] = adcs[i-1] + (amax-amin)/m;
64 fElossVsAdc = new TH2D("bad", "#Delta E vs. ADC",
65 eloss.fN-1, eloss.fArray, adcs.fN-1, adcs.fArray);
66 fElossVsAdc->SetXTitle("#Delta E/#Delta x [MeV/cm]");
67 fElossVsAdc->SetYTitle("ADC value");
69 //__________________________________________________________________
71 @param ev Event number
72 @return @c false on error */
73 Bool_t Begin(Int_t ev)
76 return AliFMDInput::Begin(ev);
78 //__________________________________________________________________
79 Bool_t ProcessHit(AliFMDHit* hit, TParticle*)
81 // Cache the energy loss
82 if (!hit) return kFALSE;
83 UShort_t det = hit->Detector();
84 Char_t rng = hit->Ring();
85 UShort_t sec = hit->Sector();
86 UShort_t str = hit->Strip();
88 AliWarning(Form("Bad strip number %d in hit", str));
91 fMap(det, rng, sec, str).fEdep += hit->Edep();
92 fMap(det, rng, sec, str).fN++;
95 //__________________________________________________________________
96 Bool_t ProcessDigit(AliFMDDigit* digit)
98 if (!digit) return kFALSE;
99 UShort_t det = digit->Detector();
100 Char_t rng = digit->Ring();
101 UShort_t sec = digit->Sector();
102 UShort_t str = digit->Strip();
104 AliWarning(Form("Bad strip number %d in digit", str));
107 fElossVsAdc->Fill(fMap(det, rng, sec, str).fEdep, digit->Counts());
110 //__________________________________________________________________
113 gStyle->SetPalette(1);
114 gStyle->SetOptTitle(0);
115 gStyle->SetCanvasColor(0);
116 gStyle->SetCanvasBorderSize(0);
117 gStyle->SetPadColor(0);
118 gStyle->SetPadBorderSize(0);
119 fElossVsAdc->SetStats(kFALSE);
120 fElossVsAdc->Draw("COLZ");
124 ClassDef(DrawHitsDigits,0);
127 //____________________________________________________________________