11 convert(UShort_t rate, Int_t adc, Int_t last, TArrayI& counts)
16 counts[0] = UShort_t(TMath::Min(a, 1023.F));
20 for (Ssiz_t i = 0; i < rate; i++) {
21 Float_t t = Float_t(i) / rate + 1./rate;
22 Float_t s = adc + (last - adc) * TMath::Exp(-b * t);
25 counts[i] = UShort_t(TMath::Min(a, 1023.F));
26 std::cout << " rate=" << rate << "\tadc=" << adc
27 << "\tcount[" << i << "]=" << counts[i]
28 << "\ts=" << adc << " + (" << last << " - "
29 << adc << ") * exp(-" << b << " * " << t
30 << ")=" << s << std::endl;
36 makeGraph(const TArrayI& adcs, Int_t rate)
38 Int_t last = adcs.fArray[0];
40 TGraph* graph = new TGraph(rate * adcs.fN);
41 graph->SetLineColor(rate);
42 graph->SetMarkerColor(rate);
43 graph->SetMarkerStyle(20+rate);
44 graph->SetLineStyle(rate);
45 graph->SetName(Form("rate%d", rate));
46 graph->SetTitle(Form("Rate %d", rate));
47 for (Int_t i = 0; i < adcs.fN; i++) {
49 convert(rate, adcs.fArray[i], last, counts);
51 for (Int_t j = 0; j < rate; j++) {
52 Int_t idx = (i * rate + j);
53 Double_t x = (i + (rate > 1 ? Float_t(j+1) / rate-1 : 0));
54 graph->SetPoint(idx, x, counts[j]);
56 last = counts[rate - 1];
62 TestShaping(int max=4)
65 TGraph* orig = new TGraph(adcs.fN);
66 orig->SetName("Original");
67 orig->SetTitle("Original");
68 orig->SetMarkerStyle(25);
69 orig->SetMarkerColor(1);
70 orig->SetMarkerSize(2);
71 orig->SetLineColor(1);
72 for (Int_t i = 0; i < adcs.fN; i++) {
73 adcs.fArray[i] = Int_t(gRandom->Uniform(0, 1023));
74 orig->SetPoint(i, i, adcs.fArray[i]);
77 TCanvas* c = new TCanvas("c", "c");
80 c->SetRightMargin(.02);
82 TH1* h = new TH1F("frame","frame", adcs.fN+1, -2, adcs.fN);
87 orig->Draw("pl same");
89 TLegend* l = new TLegend(adcs.fN*3./4, 1023, adcs.fN, 1300, "", "");
92 l->AddEntry(orig, orig->GetTitle(), "lp");
94 for (int i = 1; i <= max; i++) {
95 TGraph* g = makeGraph(adcs, i);
97 l->AddEntry(g, g->GetTitle(), "lp");