ROOT logo
TGraph*
makeInput(Int_t n, TArrayI& vals, TF1* f)
{
  vals.Set(n);
  TGraph* data = new TGraph(n);
  data->SetName("input");
  data->SetTitle("Input");
  data->SetMarkerColor(kRed);
  data->SetLineColor(kRed);
  data->SetMarkerStyle(20);
  
  for (Int_t i = 0; i < data->GetN(); i++) { 
    Double_t v = f->Eval(i);
    data->SetPoint(i, i, v);
    vals[i]   = Int_t(v);
  }
  return data;
}

TGraph* makeFlat(const char* name, Int_t n, Float_t val, TArrayF& vals)
{
  vals.Set(n);
  vals.Reset(val);
  TGraph* g = new TGraph(n);
  g->SetName(name);
  g->SetTitle(name);
  g->SetMarkerStyle(21);
  
  for (Int_t i = 0; i < g->GetN(); i++) 
    g->SetPoint(i, i, val);
  return g;
}
  
void
runTest(TF1* f, AliFMDRawWriter* w, Float_t pv, Float_t nv)
{
  static Int_t num = 1;
  
  Int_t    n         = Int_t(f->GetXmax());
  UShort_t threshold = 1;
  TArrayI  vals;
  TArrayF  peds;
  TArrayF  noise;
  TArrayF  dummy;
  TGraph*  input      = makeInput(n, vals, f);
  TGraph*  gPeds      = makeFlat("peds",      n, pv,        peds);
  TGraph*  gNoise     = makeFlat("noise",     n, nv,        noise);
  TGraph*  gThreshold = makeFlat("threshold", n, threshold, dummy);
  gThreshold->SetLineStyle(2);
  gPeds->SetLineColor(kGreen);
  gNoise->SetLineColor(kMagenta);

  w->ZeroSuppress(vals.fArray, n, peds.fArray, noise.fArray, threshold);

  TGraph* output = new TGraph(n);
  output->SetName("output");
  output->SetLineColor(kBlue);
  output->SetMarkerColor(kBlue);
  output->SetMarkerStyle(21);
  for (Int_t i = 0; i < output->GetN(); i++) 
    output->SetPoint(i, i, vals[i]);

  TCanvas* c = new TCanvas(Form("c%02d", num), 
			   Form("Zero suppression test %d", num));
  c->SetFillColor(kWhite);
  input->Draw("APL");
  input->GetHistogram()->SetMinimum(0);
  gPeds->Draw("L same");
  gThreshold->Draw("L same");
  output->Draw("PL same");
  f->SetLineStyle(3);
  f->Draw("same");
  num++;
}

  

void
TestZeroSuppress()
{
  AliLog::SetModuleDebugLevel("FMD", 1);
  AliFMDRawWriter* w = new AliFMDRawWriter(0);

  TF1* simple = new TF1("simple", "[0] + [1] * (x >= [2] && x <= [3])", 0, 16);
  simple->SetParameters(4, 10, 2.5, 6.5);

  runTest(simple, w, 3.5, 0);

  w.SetPedSubtract();
  runTest(simple, w, 3.5, 0);

  w.SetPedSubtract(kFALSE);
  simple->SetParameters(4, 10, 3.5, 4.5);
  runTest(simple, w, 3.5, 0);

  TF1* two = new TF1("two", 
		     "[0]+[1]*((x>=[2]&&x<=[3])||(x>=[4]&&x<=[5]))", 0, 16);
  two->SetParameters(4, 10, 2.5, 4.5, 9.5, 12.5);
  runTest(two, w, 3.5, 0);

}

  
 TestZeroSuppress.C:1
 TestZeroSuppress.C:2
 TestZeroSuppress.C:3
 TestZeroSuppress.C:4
 TestZeroSuppress.C:5
 TestZeroSuppress.C:6
 TestZeroSuppress.C:7
 TestZeroSuppress.C:8
 TestZeroSuppress.C:9
 TestZeroSuppress.C:10
 TestZeroSuppress.C:11
 TestZeroSuppress.C:12
 TestZeroSuppress.C:13
 TestZeroSuppress.C:14
 TestZeroSuppress.C:15
 TestZeroSuppress.C:16
 TestZeroSuppress.C:17
 TestZeroSuppress.C:18
 TestZeroSuppress.C:19
 TestZeroSuppress.C:20
 TestZeroSuppress.C:21
 TestZeroSuppress.C:22
 TestZeroSuppress.C:23
 TestZeroSuppress.C:24
 TestZeroSuppress.C:25
 TestZeroSuppress.C:26
 TestZeroSuppress.C:27
 TestZeroSuppress.C:28
 TestZeroSuppress.C:29
 TestZeroSuppress.C:30
 TestZeroSuppress.C:31
 TestZeroSuppress.C:32
 TestZeroSuppress.C:33
 TestZeroSuppress.C:34
 TestZeroSuppress.C:35
 TestZeroSuppress.C:36
 TestZeroSuppress.C:37
 TestZeroSuppress.C:38
 TestZeroSuppress.C:39
 TestZeroSuppress.C:40
 TestZeroSuppress.C:41
 TestZeroSuppress.C:42
 TestZeroSuppress.C:43
 TestZeroSuppress.C:44
 TestZeroSuppress.C:45
 TestZeroSuppress.C:46
 TestZeroSuppress.C:47
 TestZeroSuppress.C:48
 TestZeroSuppress.C:49
 TestZeroSuppress.C:50
 TestZeroSuppress.C:51
 TestZeroSuppress.C:52
 TestZeroSuppress.C:53
 TestZeroSuppress.C:54
 TestZeroSuppress.C:55
 TestZeroSuppress.C:56
 TestZeroSuppress.C:57
 TestZeroSuppress.C:58
 TestZeroSuppress.C:59
 TestZeroSuppress.C:60
 TestZeroSuppress.C:61
 TestZeroSuppress.C:62
 TestZeroSuppress.C:63
 TestZeroSuppress.C:64
 TestZeroSuppress.C:65
 TestZeroSuppress.C:66
 TestZeroSuppress.C:67
 TestZeroSuppress.C:68
 TestZeroSuppress.C:69
 TestZeroSuppress.C:70
 TestZeroSuppress.C:71
 TestZeroSuppress.C:72
 TestZeroSuppress.C:73
 TestZeroSuppress.C:74
 TestZeroSuppress.C:75
 TestZeroSuppress.C:76
 TestZeroSuppress.C:77
 TestZeroSuppress.C:78
 TestZeroSuppress.C:79
 TestZeroSuppress.C:80
 TestZeroSuppress.C:81
 TestZeroSuppress.C:82
 TestZeroSuppress.C:83
 TestZeroSuppress.C:84
 TestZeroSuppress.C:85
 TestZeroSuppress.C:86
 TestZeroSuppress.C:87
 TestZeroSuppress.C:88
 TestZeroSuppress.C:89
 TestZeroSuppress.C:90
 TestZeroSuppress.C:91
 TestZeroSuppress.C:92
 TestZeroSuppress.C:93
 TestZeroSuppress.C:94
 TestZeroSuppress.C:95
 TestZeroSuppress.C:96
 TestZeroSuppress.C:97
 TestZeroSuppress.C:98
 TestZeroSuppress.C:99
 TestZeroSuppress.C:100
 TestZeroSuppress.C:101
 TestZeroSuppress.C:102
 TestZeroSuppress.C:103
 TestZeroSuppress.C:104