ROOT logo
/** Welcome!
 *
 *  This macro is intended for the following tasks:
 *    1. find bad (switched off/dead/noisy/strange) cells;
 *    2. find out the status/quality of analysed data (missing RCUs, run quality);
 *    3. find the extent of problems related to bad cells: required for
 *       systematics estimation for a physical quantity related to a cluster.
 *
 *  For impatient, change the "infile" line below and execute
 *    root -l getCellsRunsQA.C
 *
 *  For curios, continue reading getCellsRunsQA() code: it is self-documented.
 *
 *  The macro options are tuned for a user (and pp runs), and in most cases no user
 *  intervension is necessary. Still, it is likely that you will have to edit
 *  nexc/excells[] in the parameters section below and run the macro several times.
 *  Consult with the output from this macro.
 *  In case of PbPb runs, a small modification is necessary:
 *   1) change ExcludeSmallRuns() line by putting a smaller number, e.g. 5-10k events;
 *   2) change FindDeadNoisyCellsPerRun() factor thresholds to a more narrow region, e.g. 0.07-2;
 *   3) probably, change fit region in FitPi0().
 *  Also, do not forget to adjust cluster cut for pi0s in AliCaloCellsQA. The value 2.5GeV
 *  is currently reasonable.
 *
 *  Generally, a QA expert uncomments all the functions which return (print to stdout)
 *  bad cell candidates and checks them by hand.
 *
 *  Detector-specific parts require to run this macro with aliroot instead of root,
 *  they are commented in getCellsRunsQA() by default.
 *
 *  This macro is written as a number of small functions and is designed both
 *  for EMCAL and for PHOS (and DCAL in future).
 *  Drawing options are chosen with respect to PPRStyle() drawing defaults.
 *
 *  Input: AliCaloCellsQA analysis output.
 *
 *  TODO: cells time spectra: currently it is not put in use. Seems that time shape fitting is
 *        not trivial due to the presence of parasite peaks (one needs to remove them first?),
 *        and this is a separate issue to think about...
 *
 *  TODO: some PHOS-specific parts
 *
 *  Author: Olga Driga (SUBATECH)
 */


// ========================== Parameters section ==============================

// input
// char *infile = "LHC11e_cpass1_CellQA_AnyInt.root";
char *infile = "LHC11e_cpass1_CellQA_PHI7.root";

Bool_t trendPlotEvents = kFALSE;

// supermodule colors
Color_t colorsSM[] = {0,2,3,4};

// cells to exclude from averages calculations and their number: bad cells can
// mess up the results, it is suggested to list (known and newly found with
// this code) problematic cell candidates explicitly

Int_t excells[] = {1};
Int_t nexc = 0;

// ====================== End of parameters section ===========================

static TFile *gInputFile;

void getCellsRunsQAPHOS()
{
  // Entry point for the analysis.

  gRandom->SetSeed(0);
  gStyle->SetOptStat(0);
  gStyle->SetOptFit(111);
  gStyle->SetPalette(1);
  gStyle->SetFillColor(10);

  Printf("Input: %s", infile);
  gInputFile = TFile::Open(infile);

  // You may wish to extract and draw a particular histogram from infile.
  // Here are the examples:
  //
  //   TH1* hNEventsProcessedPerRun = (TH1*) gInputFile->Get("hNEventsProcessedPerRun");
  //   hNEventsProcessedPerRun->Draw();
  //   return;
  //
  //   TH1* hNTimesInClusterElow = (TH1*) gInputFile->Get("run146686_hCellLocMaxNTimesInClusterElow");
  //   hNTimesInClusterElow->Draw();
  //   return;
  //
  //   TH1* hETotalClusterEhigh = (TH1*) gInputFile->Get("run146686_hCellLocMaxETotalClusterEhigh");
  //   hETotalClusterEhigh->Draw();
  //   return;

  // Draw a random cell spectrum;
  // 0.2-1 GeV -- fit region;
  // 3 GeV -- the spectrum is drawn up to this value, -1 = no limit;
  // last argument -- histogram name to process, possible values are:
  //    hCellAmplitude, hCellAmplitudeEHigh, hCellAmplitudeNonLocMax or fhCellAmplitudeEhighNonLocMax.
  DrawCell(1+gRandom->Integer(10752), 0.25, 1., 4., "hCellAmplitude");  // common cell region for EMCAL2010 and for PHOS

  // Draw a random cell time spectrum
  // DrawCellTime(1+gRandom->Integer(10752));


  /* RUN NUMBER SELECTION SECTION
   *
   * NOTE: at any point below runs are sorted in chronological order.
   */

  // array with run numbers and their number
  Int_t runNumbers[10000];
  Int_t nruns = 0;

  // First, fill run numbers ...
  GetRunNumbers(nruns, runNumbers);
  Printf("Total number of runs: %i", nruns);

  // ... draw events distribution ...
  // (the last argument is number of bins in this distribution)
  DrawRunsDistribution(nruns, runNumbers, 100);

  // ... and exclude runs with number of events < 1k.
  ExcludeSmallRuns(nruns, runNumbers, 100);

  // You may wish to exclude particular runs:
  //   Int_t runs2Exclude[] = {111222,333444,555666};
  //   ExcludeRunNumbers(nruns, runNumbers, 3, runs2Exclude);

  Printf("Number of runs to be analysed: %i", nruns);

  // Finally, print a nice table with run index / run number / number of events.
  PrintRunNumbers(nruns, runNumbers);


  /* PER RUN BAD CELLS SEARCHING CRITERIA
   *
   * Four primary criteria on a per run basis:
   *   1 and 2: number of times cell was a local maximum in a cluster at low/high energies;
   *   3 and 4: total cluster energy for a local maximum cell at low/high energies.
   */

  // Extract the histograms with dead/noisy cell candidates per run.
  // For each of the four criteria, for each run and for each cell:
  //   1) calculate cell factor = [cell value]/[average over cells];
  //   2) mark cell as dead (candidate) if factor <= factorDead (3rd argument below);
  //   3) mark cell as noisy (candidate) if factor >= factorNoisy (4th argument below).
  //
  // Factor thresholds are quite wide by default:
  // low energy criteria are not very sensitive to them,
  // while high energy criteria are very sensitive due to limited statistics.
  //
  // The function below also draws histograms with factor distributions in all the runs
  // for all the cells. It may help to take the decision about dead/noisy factor thresholds.
  // The last two arguments -- number of bins and maximum X axis value for such histograms.
  //
  // Output: hBadCellMap[4] -- bad cell candidates per run for each of the four criteria;
  // X axis -- cell absId, Y axis -- run index, content: 0=not bad, 1=noisy, -1=dead.
  //

  TH2** hBadCellMap = FindDeadNoisyCellsPerRun(nruns, runNumbers, 0.05, 2.5, 200, 10.);
  
  // Look for noisy channels only:
  // TH2** hBadCellMap = FindDeadNoisyCellsPerRun(nruns, runNumbers, -1.0, 2.5, 200, 20.);

  // Look for dead channels only:
  // TH2** hBadCellMap = FindDeadNoisyCellsPerRun(nruns, runNumbers, 0.05, 1.e9, 200, 10.);

  // Print cell numbers suggested for exclusion from averages calculation;
  // see excells[] array in the parameters section in the beginning of the macro.
  // It is highly suggested to run this macro several times and add the output
  // of this function to the parameters section.
  PrintCellsToExcludeFromAverages(hBadCellMap);

  // The results can be visualized (second argument -- canvas name):
  // either per run ...
  DrawDeadNoisyCellMap(hBadCellMap[0], "hMapRuns_NTimesInClusterElow");
  DrawDeadNoisyCellMap(hBadCellMap[1], "hMapRuns_NTimesInClusterEhigh");
//   DrawDeadNoisyCellMap(hBadCellMap[2], "hMapRuns_ETotalClusterElow");
//   DrawDeadNoisyCellMap(hBadCellMap[3], "hMapRuns_ETotalClusterEhigh");

  // ... or per number of events ...
//   DrawDeadNoisyCellMap((TH2*)ConvertMapRuns2Events(nruns,runNumbers,hBadCellMap[0]), "hMapEvents_NTimesInClusterElow");
//   DrawDeadNoisyCellMap((TH2*)ConvertMapRuns2Events(nruns,runNumbers,hBadCellMap[1]), "hMapEvents_NTimesInClusterEhigh");
//   DrawDeadNoisyCellMap((TH2*)ConvertMapRuns2Events(nruns,runNumbers,hBadCellMap[2]), "hMapEvents_ETotalClusterElow");
//   DrawDeadNoisyCellMap((TH2*)ConvertMapRuns2Events(nruns,runNumbers,hBadCellMap[3]), "hMapEvents_ETotalClusterEhigh");

  // ... or we can also draw the percent for each cell being dead/noisy
//   DrawDeadNoisyCellPercent(nruns, runNumbers, hBadCellMap[0], "hPercent_NTimesInClusterElow");
//   DrawDeadNoisyCellPercent(nruns, runNumbers, hBadCellMap[1], "hPercent_NTimesInClusterEhigh");
//   DrawDeadNoisyCellPercent(nruns, runNumbers, hBadCellMap[2], "hPercent_ETotalClusterElow");
//   DrawDeadNoisyCellPercent(nruns, runNumbers, hBadCellMap[3], "hPercent_ETotalClusterEhigh");

  // Our main criteria for analytical finding of bad cells is based on the following.
  // Note that factor distributions for NTimesInCluster and ETotalCluster are very
  // similar, both at low and at high energy. Note also that we can say the same
  // for dead/noisy cell visualizations above: they are very similar. This suggests
  // that NTimesInCluster and ETotalCluster give the same results. The criteria
  // NTimesInCluster, however, is more calibration-independent (though energy thresholds
  // are still calibration-dependent) and thus is more reliable and clear. Thus, we
  // limit ourselves to NTimesInClusterElow/NTimesInClusterEhigh criteria.
  // Now, you could probably noted that NTimesInClusterEhigh give more dead
  // cells than that at low energy. This is an expected statistical effect: we have
  // much smaller number of clusters at high energy. Consequently, we will not use dead
  // cell candidates at high energy.
  //
  // Finally, we combine candidates from low/high energies and produce one TH2
  // histogram which is the primary source of our analytical results.
  //
  TH2* hBadCellMapPrimary = CombineDeadNoisyElowEhigh(hBadCellMap[0], hBadCellMap[1]);

  // Note for PHOS: if you are not happy with NTimesInClusterEhigh results (due to a lack of statistics)
  // uncomment this line:
//   hBadCellMapPrimary = hBadCellMap[0];

  // Draw everything for combined
  DrawDeadNoisyCellMap(hBadCellMapPrimary, "Primary_hMapRuns");
  // DrawDeadNoisyCellMap((TH2*)ConvertMapRuns2Events(nruns,runNumbers,hBadCellMapPrimary), "Primary_hMapEvents");
  // DrawDeadNoisyCellPercent(nruns, runNumbers, hBadCellMapPrimary, "Primary_hPercent");

  // Print full information on cells which are dead/noisy;
  // kTRUE -- print also the percentage % dead/% noisy
  PrintDeadNoisyCells(hBadCellMapPrimary, 0.9, 1.);          // in 90-100% of runs
  // PrintDeadNoisyCells(hBadCellMapPrimary, 0.5, 0.9, kTRUE);  // in 50-90% of runs
  // PrintDeadNoisyCells(hBadCellMapPrimary, 0.3, 0.5);      // in 30-50% of runs
  // PrintDeadNoisyCells(hBadCellMapPrimary, 0.1, 0.5);      // in 10-50% of runs

  // visualize dead/noisy cell map for EMCAL/PHOS; requires aliroot
  DrawOccupancy(nruns, runNumbers, hBadCellMapPrimary, "hDeadNoisyCellsOccupancy");

  // EMCAL: print full information on missing/noisy parts (e.g. RCUs); requires aliroot
//   PrintEMCALProblematicBlocks(nruns, runNumbers, hBadCellMapPrimary);


  /* RUNS QUALITY SECTION: CLUSTER AVERAGES + PI0 AVERAGES
   *
   */

  // First, draw cluster averages per run;
  //   1 = minimum number of cells in a cluster;
  //   0.3GeV = minimum cluster energy;
  //   -1     = maximum cluster energy = infinity (in fact, 20GeV in the default configuration).
  DrawClusterAveragesPerRun(nruns, runNumbers, 1, 0.3, -1);

  // Second, draw the same cluster averages per run, but corrected for detector acceptance
  DrawClusterAveragesPerRun(nruns, runNumbers, 1, 0.3, -1, hBadCellMapPrimary);

  // Draw random slices of the pi0 peak in one supermodule and in whole detector
  // Int_t rndRun = runNumbers[gRandom->Integer(nruns)];
  Int_t rndRun = runNumbers[30];
  DrawPi0Slice(rndRun,  1);
  DrawPi0Slice(rndRun,  2);
  DrawPi0Slice(rndRun,  3);
  DrawPi0Slice(rndRun, -1);

  // Draw number of pi0s per event, pi0 mass and width
  DrawPi0Averages(nruns, runNumbers);

  // Draw pi0 values per event with pi0 photons both in the same supermodule
//   DrawPi0Averages(nruns, runNumbers, kTRUE);

  // Draw pi0 values per event with pi0 photons both in the same supermodule
  // + correct for supermodule acceptance (should not be treated to be 100% reliable!)
//   DrawPi0Averages(nruns, runNumbers, kTRUE, hBadCellMap[0]);

  // Draw pi0 values per event with pi0 
  // + correct for supermodule acceptance (should not be treated to be 100% reliable!)
  // DrawPi0Averages(nruns, runNumbers, kFALSE, hBadCellMap[0]);

  // Draw pi0 distributions (helps to take decision on bad runs);
  // first argument -- suffix from canvas title;
  // second argument -- number of bins in distributions
//   DrawPi0Distributions("", 100);
//   DrawPi0Distributions("SM1", 100)
//   DrawPi0Distributions("_sameSM", 100);
//   DrawPi0Distributions("_sameSM_corr4accep", 100);

  // !!!
  return;

  /* SHAPE ANALYSIS
   *
   * Lazy/curious boundary is here! -------------------------
   * Do not pass it if you do not fill curious enough! ;)
   *
   * The shape analysis below belongs to the main bad cell searching criteria.
   * However, it may require some extra work in order to make it usable.
   *
   * The idea behind is simple: fit the energy spectrum of a cell with
   * the function A*exp(-B*x)/x^2 (which proved to be a very good fit),
   * draw parameters A, B and chi2/ndf distributions and notice
   * cells which deviate too much from the averages.
   *
   * Huge statistics (>20M events) is necessary for this to work reliably.
   *
   * TODO: test on PHOS
   */

  // The analysis below defines a cell as being bad simply if it is outside
  // of some good region for any of the parameters A, B, chi2/ndf.
  // The regions are depicted by vertical orange lines. The problem is that these
  // regions are usually not automatically determined correctly.
  //
  // The function syntax is the following:
  //   0.1-1.0 GeV -- fitting region;
  //   hCellAmplitude -- the histogram which to take for processing,
  //                     the other possible choice is hCellAmplitudeNonLocMax;
  //   1000 -- number of bins is distributions.
  //
  // The next three groups of parameters are:
  //   <text label> <maximum value on distribution> <left edge of the good region> <right edge of the good region>
  //
  // It is left/right edges which usually require manual tuning.
  // -1 means to initialize a parameter automatically.
  //
  TestCellShapes(0.25, 1., "hCellAmplitude", 1000,
               // maxval / left margin / right margin
                 -1, -1,-1,     // fit A
                 -1, -1,-1,     // fit B
                 -1, -1,-1);    // fit chi2/ndf


  /* DISTRIBUTION ANALYSIS
   *
   * Test for bad cells by plotting a distribution among cells.
   *
   * It is especially useful in searching for miscalibrated cells.
   * The function parameters are similar to parameters from shape analysis section.
   */

  TestCellsTH1(nruns, runNumbers, "hCellLocMaxNTimesInClusterElow",
               "Number of times cell was local maximum, low energy, per event", "Entries",
               400, -1,-1,-1);   // nbins / maxval / left margin / right margin

  TestCellsTH1(nruns, runNumbers, "hCellLocMaxNTimesInClusterEhigh",
               "Number of times cell was local maximum, high energy, per event", "Entries",
               400, -1,-1,-1);   // nbins / maxval / left margin / right margin

//   TestCellsTH1(nruns, runNumbers, "hCellLocMaxETotalClusterElow",
//                "Total cluster energy for local maximum cell, low energy, per event", "Entries",
//                400, -1,-1,-1);   // nbins / maxval / left margin / right margin
//
//   TestCellsTH1(nruns, runNumbers, "hCellLocMaxETotalClusterEhigh",
//                "Total cluster energy for local maximum cell, high energy, per event", "Entries",
//                400, -1,-1,-1);   // nbins / maxval / left margin / right margin

  // Three more tests for bad cells:
  //  1) total deposited energy;
  //  2) total number of entries;
  //  3) average energy = [total deposited energy]/[total number of entries].
  //
  TestCellEandN(0.1, "hCellAmplitude", 1000,
             // maxval / left margin / right margin
                -1,-1,-1,    // cell E
                -1,-1,-1,    // cell N
                -1,-1,-1);   // cell E/N

  // the same at high energies
  TestCellEandN(0.1, "hCellAmplitudeEhigh", 1000,
             // maxval / left margin / right margin
                -1,-1,-1,    // cell E
                -1,-1,-1,    // cell N
                -1,-1,-1);   // cell E/N


  // The same as above, but for not a local maximum cells; require more statistics
//   TestCellsTH1(nruns, runNumbers, "hCellNonLocMaxNTimesInClusterElow",
//                "Number of times cell wasn't local maximum, low energy, per event", "Entries",
//                400, -1,-1,-1);   // nbins / maxval / left margin / right margin
//
//   TestCellsTH1(nruns, runNumbers, "hCellNonLocMaxNTimesInClusterEhigh",
//                "Number of times cell wasn't local maximum, high energy, per event", "Entries",
//                400, -1,-1,-1);   // nbins / maxval / left margin / right margin
//
//   TestCellsTH1(nruns, runNumbers, "hCellNonLocMaxETotalClusterElow",
//                "Total cluster energy for not local maximum cell, low energy, per event", "Entries",
//                400, -1,-1,-1);   // nbins / maxval / left margin / right margin
//
//   TestCellsTH1(nruns, runNumbers, "hCellNonLocMaxETotalClusterEhigh",
//                "Total cluster energy for not local maximum cell, high energy, per event", "Entries",
//                400, -1,-1,-1);   // nbins / maxval / left margin / right margin
//
//   TestCellEandN(0.1, "hCellAmplitudeNonLocMax", 1000,
//              // maxval / left margin / right margin
//                 -1,-1,-1,    // cell E
//                 -1,-1,-1,    // cell N
//                 -1,-1,-1);   // cell E/N
//
//   TestCellEandN(0.1, "hCellAmplitudeEhighNonLocMax", 1000,
//              // maxval / left margin / right margin
//                 -1,-1,-1,    // cell E
//                 -1,-1,-1,    // cell N
//                 -1,-1,-1);   // cell E/N


  // TODO: cells time

  // The end ;)
}



/* BAD CELLS SEARCHING FUNCTIONS
 *
 */

//_________________________________________________________________________
TH2** FindDeadNoisyCellsPerRun(const Int_t nruns, Int_t runNumbers[],
                               Double_t factorDead = 0.01, Double_t factorNoisy = 4.,
                               Int_t fnbins = 200, Double_t fxmax = 10.)
{
  // Return bad cell candidate maps for the four criteria;
  // X axis -- cell absId, Y axis -- run index, content: 0=not bad, 1=noisy, -1=dead.
  //
  // For each run and each cell calculate factor = [cell value]/[averate over cells],
  // mark cell as noisy if factor >= factorNoisy, mark cell as dead if factor <= factorDead.
  //
  // fnbins, fxmax -- number of bins and X axis maximum value for factor distributions.
  //
  // Four criteria in order:
  char *hname[4] = {"hCellLocMaxNTimesInClusterElow", "hCellLocMaxNTimesInClusterEhigh",
                     "hCellLocMaxETotalClusterElow", "hCellLocMaxETotalClusterEhigh"};

  TH1*  hFactorDistr[4];
  TH2** hBadCellMap = new TH2*[4];

  // take one histogram to get binning parameters
  TH1* one = (TH1*) gInputFile->Get(Form("run%i_%s",runNumbers[0],hname[0]));
  Int_t  ncells = one->GetNbinsX();
  Double_t amin = one->GetXaxis()->GetXmin();
  Double_t amax = one->GetXaxis()->GetXmax();

  // find dead/noisy cell candidates
  for (Int_t k = 0; k < 4; k++) {
    hBadCellMap[k] = new TH2C(Form("hBadCellMap_%s_fdead=%.3f_fnoisy=%.1f",hname[k],factorDead,factorNoisy),
                              Form("Dead/noisy cell map (%s, fdead=%.3f, fnoisy=%.1f)",hname[k],factorDead,factorNoisy),
                                    ncells,amin,amax, nruns,0,nruns);
    hBadCellMap[k]->SetXTitle("AbsId");
    hBadCellMap[k]->SetYTitle("Run index");
    hBadCellMap[k]->SetTitleOffset(1.7,"Y");

    hFactorDistr[k] = new TH1F(Form("hFactorDistr_%s_fdead=%.3f_fnoisy=%.1f",
                                     hname[k],factorDead,factorNoisy), "", fnbins,0,fxmax);
    hFactorDistr[k]->SetTitle("Factor distributions in all runs");
    hFactorDistr[k]->SetXTitle("Factor");
    hFactorDistr[k]->SetYTitle("Entries");

    // run index loop
    for (Int_t ri = 0; ri < nruns; ri++) {
      TH1* one = (TH1*) gInputFile->Get(Form("run%i_%s", runNumbers[ri], hname[k]));
      if (one == 0) {
	Error("FindDeadNoisyCellsPerRun","Run %d does contain histogram %s",runNumbers[ri],hname[k]);
	continue;
      }
      // calculate average
      Double_t av = 0;  // average
      Int_t count = 0;  // counted cells
      for (Int_t c = 1; c <= ncells; c++) {
        // do not count cells with zero content
        if (one->GetBinContent(c) == 0) continue;
        // do not count cells listed in the parameters section in the beginning of the macro
        if (IsCellMarked4Exclude(one->GetBinLowEdge(c))) continue;
        count++;
        av += one->GetBinContent(c);
      }

      // division by zero checks
      if (count == 0) {
        Warning("FindDeadNoisyCellsPerRun", Form("No cells counted at ri=%i",ri));
        continue;
      }
      av /= count;

      if (av == 0) {
        Warning("FindDeadNoisyCellsPerRun", Form("Average is zero at ri=%i",ri));
        continue;
      }

      // find dead/noisy candidates
      for (Int_t c = 1; c <= ncells; c++) {
        Double_t fac = one->GetBinContent(c)/av;
        hFactorDistr[k]->Fill(fac);

        if (fac <= factorDead)
          hBadCellMap[k]->SetBinContent(c, ri+1, -1);
        else if (fac >= factorNoisy)
          hBadCellMap[k]->SetBinContent(c, ri+1, 1);
      }

      delete one;
    } // run index loop
  } // criteria loop


  // draw factor distributions ...
  TCanvas *c1 = new TCanvas("hFactorDistr", "hFactorDistr", 400,400);
  gPad->SetLeftMargin(0.12);
  gPad->SetRightMargin(0.08);
  gPad->SetLogy();
  hFactorDistr[0]->SetLineColor(kBlue);
  hFactorDistr[1]->SetLineColor(kRed);
  hFactorDistr[2]->SetLineColor(kGreen);
  hFactorDistr[3]->SetLineColor(kOrange);
  hFactorDistr[0]->Draw();
  hFactorDistr[1]->Draw("same");
  hFactorDistr[2]->Draw("same");
  hFactorDistr[3]->Draw("same");

  // ... with legend
  TLegend *leg = new TLegend(0.45,0.65,0.90,0.85);
  leg->AddEntry(hFactorDistr[0], "NTimesInCluster, low energy","l");
  leg->AddEntry(hFactorDistr[2], "ETotalCluster, low energy","l");
  leg->AddEntry(hFactorDistr[1], "NTimesInCluster, high energy","l");
  leg->AddEntry(hFactorDistr[3], "EtotalCluster, high energy","l");
  leg->Draw("same");

  c1->Update();

  return hBadCellMap;
}

//_________________________________________________________________________
void PrintCellsToExcludeFromAverages(TH2** hBadCellMap)
{
  // Print cells suggested for exclusion from averages calculation

  Int_t ncells = hBadCellMap[0]->GetNbinsX();
  Int_t nruns  = hBadCellMap[0]->GetNbinsY();

  Int_t *suggested = new Int_t[ncells];
  memset(suggested, 0, ncells*sizeof(Int_t));

  for (Int_t c = 1; c <= ncells; c++)
    for (Int_t ri = 1; ri <= nruns; ri++)
      if (hBadCellMap[0]->GetBinContent(c, ri) != 0 || hBadCellMap[2]->GetBinContent(c, ri) != 0 ||
          hBadCellMap[1]->GetBinContent(c, ri)  > 0 || hBadCellMap[3]->GetBinContent(c, ri)  > 0) // NOTE: dead not counted
        suggested[c-1]++;

  printf("Suggested cells to switch off in averages calculations (copai 'n paste!):\n");
  printf("Int_t excells[] = {");
  Int_t n = 0;
  for (Int_t c = 1; c <= ncells; c++)
    if (suggested[c-1] >= 0.4*nruns) {// 40% of runs threshold
      printf("%s%i", n == 0 ? "" : ",", c);
      n++;
    }
  printf("};\nInt_t nexc = %i;\n\n",n);
}

//_________________________________________________________________________
Bool_t IsCellMarked4Exclude(Int_t absId)
{
  // Return true if a cell is in excells[] array

  static TH1* hExclCells = NULL;

  // one time initialization
  if (!hExclCells) {
    hExclCells = new TH1F("hExclCells", "", 20000,0,20000);
    for (Int_t c = 0; c < nexc; c++)
      hExclCells->SetBinContent(hExclCells->FindBin(excells[c]), 1);
  }

  return (hExclCells->GetBinContent(hExclCells->FindBin(absId)) > 0 ? kTRUE : kFALSE);
}

//_________________________________________________________________________
void DrawDeadNoisyCellMap(TH2* hmap, char* cname)
{
  // Visualize dead/noisy cell map;
  // cname -- canvas name.

  // Define only 3 color: dead=blue, noisy=red, normal=white
  Int_t color_index[]={kBlue,kWhite,kRed};
  gStyle->SetPalette(3,color_index); 

  TCanvas *c1 = new TCanvas(cname, cname, 0,0,1000,600);
  c1->Divide(1,3);
  TH2* hDummy[3];

  // Use hardware numeration of modules (2,3,4)
  // instead of offline numeration (3,2,1)
  for (Int_t iM=1; iM<=3; iM++) {
    c1->cd(4-iM);
    gPad->SetLeftMargin(0.04);
    gPad->SetRightMargin(0.02);
    gPad->SetTopMargin(0.10);
    gPad->SetBottomMargin(0.13);
    hDummy[iM-1] = (TH2*) hmap->Clone(Form("hDummy_%s_mod%d",cname,iM));
    hDummy[iM-1]->SetTitle(Form("Module %d",5-iM));
    hDummy[iM-1]->SetLabelSize(0.08,"XY");
    hDummy[iM-1]->SetTitleSize(0.08,"XY");
    hDummy[iM-1]->SetTitleOffset(0.8,"X");
    hDummy[iM-1]->SetTitleOffset(0.25,"Y");
    hDummy[iM-1]->SetTickLength(0.01,"Y");
    hDummy[iM-1]->SetNdivisions(520,"X");
    hDummy[iM-1]->SetAxisRange(3584*(iM-1)+1, 3584*iM, "X");
    hDummy[iM-1]->Draw("col");
  }

  c1->Update();
}

// //_________________________________________________________________________
// void DrawDeadNoisyCellMap(TH2* hmap, char* cname)
// {
//   // Visualize dead/noisy cell map;
//   // cname -- canvas name.

//   TCanvas *c1 = new TCanvas(cname, cname, 0,0,600,600);
//   gPad->SetLeftMargin(0.14);
//   gPad->SetRightMargin(0.06);

//   // draw dummy to initialize axis ranges
//   TH2* hDummy = (TH2*) hmap->Clone(Form("hDummy_%s",cname));
//   hDummy->Reset();
//   hDummy->Draw();

//   for (Int_t c = 1; c <= hmap->GetNbinsX(); c++) //cell number
//     for (Int_t ri = 1; ri <= hmap->GetNbinsY(); ri++) { //run index
//       Double_t stat = hmap->GetBinContent(c, ri); // cell status
//       if (stat == 0) continue;

//       Double_t x  = hmap->GetXaxis()->GetBinCenter(c);
//       Double_t y1 = hmap->GetYaxis()->GetBinLowEdge(ri);
//       Double_t y2 = hmap->GetYaxis()->GetBinUpEdge(ri);

//       // draw a line; FIXME: what is a better choice?
//       TLine* line = new TLine(x,y1,x,y2);
//       line->SetLineWidth(1);
//       if (stat > 0) line->SetLineColor(kRed); // noisy cell
//       else line->SetLineColor(kBlue); // dead cell
//       line->Draw();
//     }

//   c1->Update();
// }

//_________________________________________________________________________
void DrawDeadNoisyCellPercent(Int_t nruns, Int_t runNumbers[], TH2* hmap, char* cname)
{
  // Show percent of runs/events for each cell being problematic;
  // cname -- canvas name.

  // binning parameters
  Int_t  ncells = hmap->GetNbinsX();
  Double_t amin = hmap->GetXaxis()->GetXmin();
  Double_t amax = hmap->GetXaxis()->GetXmax();

  // number of times cell was dead/noisy;
  Int_t *ndeadRuns    = new Int_t[ncells];
  Int_t *nnoisyRuns   = new Int_t[ncells];
  Double_t *ndeadEvents  = new Double_t[ncells];
  Double_t *nnoisyEvents = new Double_t[ncells];

  // fill arrays above
  for (Int_t c = 0; c < ncells; c++) {
    ndeadRuns[c] = 0;
    nnoisyRuns[c] = 0;
    ndeadEvents[c] = 0;
    nnoisyEvents[c] = 0;

    for (Int_t ri = 0; ri < nruns; ri++) {
      Double_t stat = hmap->GetBinContent(c+1, ri+1); // cell status
      Int_t nevents = GetNumberOfEvents(runNumbers[ri]);

      if (stat > 0) {
        nnoisyRuns[c]++;
        nnoisyEvents[c] += nevents;
      }
      else if (stat < 0) {
        ndeadRuns[c]++;
        ndeadEvents[c] += nevents;
      }
    } // run index loop
  } // cell loop

  // total number of events
  Double_t ntotal = GetTotalNumberOfEvents(nruns, runNumbers);

  TCanvas *c1 = new TCanvas(cname, cname, 0,0,600,600);
  gPad->SetLeftMargin(0.14);
  gPad->SetRightMargin(0.06);

  // draw dummy histogram to initialize canvas
  TH1* hDummy = new TH1F(Form("hDummy_%s",cname), hmap->GetTitle(), ncells,amin,amax);
  hDummy->SetAxisRange(0,100, "Y");
  hDummy->SetXTitle("AbsId");
  hDummy->SetYTitle("Percent");
  hDummy->Draw();

  // to fill legend
  TLine *line1 = NULL;
  TLine *line2 = NULL;
  TLine *line3 = NULL;
  TLine *line4 = NULL;

  // draw results, FIXME: is where a better way?
  for (Int_t c = 0; c < ncells; c++) {
    Double_t x = hmap->GetXaxis()->GetBinCenter(c+1);
    Double_t y1 = 100.*ndeadEvents[c]/ntotal;
    Double_t y2 = 100.*ndeadRuns[c]/nruns;

    // events, dead bar
    if (ndeadEvents[c] > 0) {
      line1 = new TLine(x, 0, x, y1);
      line1->SetLineWidth(1);
      line1->SetLineColor(kBlue);
      line1->Draw();
    }

    // events, noisy bar
    if (nnoisyEvents[c] > 0) {
      line2 = new TLine(x, y1, x, y1 + 100.*nnoisyEvents[c]/ntotal);
      line2->SetLineWidth(1);
      line2->SetLineColor(kRed);
      line2->Draw();
    }

    // runs, dead bar
    if (ndeadRuns[c] > 0) {
      line3 = new TLine(x, 0, x, y2);
      line3->SetLineWidth(1);
      line3->SetLineStyle(7);
      line3->SetLineColor(kBlack);
      line3->Draw();
    }

    // runs, noisy bar
    if (nnoisyRuns[c] > 0) {
      line4 = new TLine(x, y2, x, y2 + 100.*nnoisyRuns[c]/nruns);
      line4->SetLineWidth(1);
      line4->SetLineStyle(7);
      line4->SetLineColor(kOrange);
      line4->Draw();
    }
  }

  // legend
  TLegend *leg = new TLegend(0.65,0.65,0.92,0.75);
  if (line1) leg->AddEntry(line1, "% of events, dead","l");
  if (line2) leg->AddEntry(line2, "% of events, noisy","l");
  if (line3) leg->AddEntry(line3, "% of runs, dead","l");
  if (line4) leg->AddEntry(line4, "% of runs, noisy","l");
  leg->Draw("same");

  c1->Update();
}

//_________________________________________________________________________
TH1* ConvertMapRuns2Events(const Int_t nruns, Int_t runNumbers[], TH1* inhisto)
{
  // Returns a histogram in which run index axis is converted to number of events
  // by making a variable axis bin width.
  // If inhisto inherits from TH2, convert Y axis; convert X axis otherwise.

  // bin widths
  Double_t *nevents = new Double_t[nruns+1];
  nevents[0] = 0;
  for (Int_t ri = 0; ri < nruns; ri++)
    nevents[1+ri] = nevents[ri] + GetNumberOfEvents(runNumbers[ri]);

  TH1* outh = (TH1*) inhisto->Clone(Form("%s_Events",inhisto->GetName()));

  if (inhisto->InheritsFrom("TH2")) {
    outh->GetYaxis()->Set(nruns, nevents);
    outh->SetYTitle("Number of events");
    outh->SetTitleOffset(1.7,"Y");
  }
  else {// TH1 case
    outh->GetXaxis()->Set(nruns, nevents);
    outh->SetXTitle("Number of events");
  }

  return outh;
}

//_________________________________________________________________________
TH2* CombineDeadNoisyElowEhigh(TH2* hmapElow, TH2* hmapEhigh)
{
  // Combine two maps at low/high energy into one,
  // do not count dead map at high energy.
  // NOTE: if cell is dead at Elow and noisy and Ehigh, set content = 2.

  TH2* hmap_combined = (TH2*) hmapElow->Clone(Form("%s+%s",hmapElow->GetName(),hmapEhigh->GetName()));

  for (Int_t c = 1; c <= hmapElow->GetNbinsX(); c++)
    for (Int_t ri = 1; ri <= hmapElow->GetNbinsY(); ri++)
      if (hmapEhigh->GetBinContent(c, ri) > 0) {
        hmap_combined->SetBinContent(c, ri, 1);

        if (hmapElow->GetBinContent(c, ri) < 0)
          hmap_combined->SetBinContent(c, ri, 2);
      }

  hmap_combined->SetTitle("Dead/noisy cell map, combined");

  return hmap_combined;
}

//_________________________________________________________________________
void PrintDeadNoisyCells(TH2* hmap, Double_t percent1 = 0.95, Double_t percent2 = 1., Bool_t kPrintPercentage = kFALSE)
{
  // Print full information on dead/noisy cells which are present in
  // percent1-percent2 portion of runs (percent1 excluded, percent2 included).

  Int_t ncells = hmap->GetNbinsX();
  Int_t nruns  = hmap->GetNbinsY();

  Int_t nbad = 0;

  printf("Dead/noisy cells in >%.1f%% and <=%.1f%% of runs:", 100*percent1, 100*percent2);

  for (Int_t c = 1; c <= ncells; c++) {
    Int_t nrdead = 0; // count number of runs for the current cell
    Int_t nrnoisy = 0;

    for (Int_t ri = 1; ri <= nruns; ri++)
      if      (hmap->GetBinContent(c,ri) < 0) nrdead++;
      else if (hmap->GetBinContent(c,ri) > 0) nrnoisy++;

    if (nrdead+nrnoisy > percent1*nruns && nrdead+nrnoisy <= percent2*nruns) {
      printf(" %.0f", hmap->GetBinLowEdge(c));
      if (kPrintPercentage)
        printf("(%-2.0f/%-2.0f)", 100.*nrdead/nruns, 100.*nrnoisy/nruns);
      nbad++;
    }
  }

  printf(" (%i total)\n\n", nbad);
}

//_________________________________________________________________________
void DrawOccupancy(Int_t nruns, Int_t runNumbers[], TH2* hmap, char* cname)
{
  // Draw bad cell map for EMCAL or PHOS;
  // cname -- canvas name.

  gStyle->SetPalette(1);

  // guess detector
  if (hmap->GetNbinsX() % 1152 == 0)
    DrawEMCALOccupancy(nruns, runNumbers, hmap, cname);
  else
    DrawPHOSOccupancy(nruns, runNumbers, hmap, cname);
}

//_________________________________________________________________________
void DrawEMCALOccupancy(Int_t nruns, Int_t runNumbers[], TH2* hmap, char* cname)
{
  // Draw bad cell map for EMCAL;
  // cname -- canvas name.

  Int_t nmods = hmap->GetNbinsX()/1152;  // number of supermodules
  Int_t vsize = ceil(nmods/2.);          // vertical size in canvas
  Int_t lastSector = (nmods-1)/2;        // for pad number calculation

  TCanvas *c1 = new TCanvas(cname, cname, 800,200*vsize);
  c1->Divide(2, vsize);

  for (Int_t sm = 0; sm < nmods; sm++)
  {
    // top left is SM0, bottom right is SM9
    Int_t side = sm%2;
    Int_t sector = sm/2;
    c1->cd((lastSector - sector)*2 + side + 1);

    TH2* hSM = new TH2C(Form("hEMCALSM%i_%s",sm,cname), Form("SM%i",sm), 48,0,48, 24,0,24);
    hSM->SetXTitle("iEta");
    hSM->SetYTitle("iPhi");

    // loop over supermodule cells
    for (Int_t c = 0; c < 1152; c++) {
      Int_t absId = 1152 * sm + c;

      for (Int_t ri = 0; ri < nruns; ri++) {
        if (hmap->GetBinContent(hmap->FindBin(absId,ri)) == 0) continue;

        Int_t nModule, eta, phi;
        AbsId2EtaPhi(absId, nModule, eta, phi);
        hSM->Fill(eta,phi);
      }
    }

    hSM->Draw("colz");
  } // supermodule loop

  c1->Update();
}

//_________________________________________________________________________
void DrawPHOSOccupancy(Int_t nruns, Int_t runNumbers[], TH2* hmap, char* cname)
{
  // Draw bad cell map for PHOS;
  // cname -- canvas name.

  Int_t nmods = hmap->GetNbinsX()/3584;  // number of supermodules
  Int_t vsize = nmods;                   // vertical size in canvas

  TCanvas *c1 = new TCanvas(cname, cname, 64*10*vsize,56*10);
  c1->Divide(vsize,1);

  TFile *fBadMap = TFile::Open("PHOS_BadMap.root","recreate");
  for (Int_t sm = 1; sm <= nmods; sm++)
  {
    c1->cd(sm);
    gPad->SetLeftMargin(0.10);
    gPad->SetRightMargin(0.15);
    gPad->SetTopMargin(0.05);
    gPad->SetBottomMargin(0.10);

    TH2* hSM = new TH2C(Form("hPHOSSM%i_%s",sm,cname), Form("Module %i",5-sm), 64,0.5,64.5, 56,0.5,56.5);
    hSM->SetXTitle("x_{cell}");
    hSM->SetYTitle("z_{cell}      ");
    hSM->SetZTitle("N_{runs}  ");

    // loop over supermodule cells
    for (Int_t c = 1; c <= 3584; c++) {
      Int_t absId = 3584*(sm-1) + c;

      for (Int_t ri = 0; ri < nruns; ri++) {
        if (hmap->GetBinContent(hmap->FindBin(absId,ri)) == 0) continue;

        Int_t nModule, xCell, zCell;
        AbsId2EtaPhi(absId, nModule, xCell, zCell, 1);
        hSM->Fill(xCell,zCell);
      }
    }
    hSM->Write();
    hSM->DrawCopy("colz");
  } // supermodule loop

  fBadMap->Close();
  c1->Update();
}

//_________________________________________________________________________
void PrintEMCALProblematicBlocks(Int_t nruns, Int_t runNumbers[], TH2* hmap)
{
  // Print, on a per run basis, complete information about EMCAL missing
  // (or dead or noisy) blocks. Missing/noisy EMCAL atomic part is a 2x2
  // block (288 blocks per supermodule).

  // number of supermodules
  Int_t nmods = hmap->GetNbinsX()/1152;

  Printf("Problematic (missing/dead/noisy) 2x2 block numbers in EMCAL:");

  // run index loop
  for (Int_t ri = 0; ri < nruns; ri++) {
    Printf("Run %i:", runNumbers[ri]);

    // supermodule loop
    for (Int_t sm = 0; sm < nmods; sm++) {

      // will be filled with the number of missing cells (from 0 to 4)
      Int_t blk2x2[288];
      memset(blk2x2, 0, 288*sizeof(Int_t));

      for (Int_t c = 0; c < 1152; c++) {
        Int_t absId = 1152 * sm + c;

        // select problematic cells only
        if (hmap->GetBinContent(hmap->FindBin(absId,ri)) == 0) continue;

        Int_t nModule, eta, phi;
        AbsId2EtaPhi(c, nModule, eta, phi);
        blk2x2[nModule]++;
      }

      // calculate number of bad blocks
      Int_t nbad2x2 = 0;
      for (Int_t b = 0; b < 288; b++)
        if (blk2x2[b] == 4) nbad2x2++;

      // no bad
      if (nbad2x2 == 0) continue;

      printf("  SM%i:", sm);

      // whole supermodule
      if (nbad2x2 == 288) {
        printf(" missing the whole supermodule!\n");
        continue;
      }

      // RCUs
      if (nbad2x2 >= 144) {
        Int_t nRCU[2];
        nRCU[0] = 0;
        nRCU[1] = 0;

        for (Int_t b = 0; b < 288; b++)
          if (blk2x2[b] == 4) nRCU[GetEMCALRCUNumber(b)]++;

        if (nRCU[0] == 144) {
          printf(" RCU0");
          for (Int_t b = 0; b < 288; b++)
            if (blk2x2[b] == 4 && GetEMCALRCUNumber(b) == 0) blk2x2[b] = 0;
        }

        if (nRCU[1] == 144) {
          printf(" RCU1");
          for (Int_t b = 0; b < 288; b++)
            if (blk2x2[b] == 4 && GetEMCALRCUNumber(b) == 1) blk2x2[b] = 0;
        }

        nbad2x2 -= 144;
      }

      // the rest
      if (nbad2x2 > 0) {
        for (Int_t b = 0; b < 288; b++)
          if (blk2x2[b] == 4) printf(" %i", b);
        printf(" (%i)", nbad2x2);
      }

      printf("\n");

    } // supermodule loop
  } // run index loop

  Printf("");
}

//_________________________________________________________________________
Int_t GetEMCALRCUNumber(Int_t nModule)
{
  // Returns RCU number for a 2x2 block in EMCAL;
  // nModule -- block number (0-287).

  static TH1* hRCUs = NULL;

  // one-time initialization
  if (!hRCUs) {
    hRCUs = new TH1F("hRCU1", "", 288,0,288);

    Int_t RCU1[144] = {8,9,10,11,20,21,22,23,32,33,34,35,44,45,46,47,56,57,58,59,68,69,70,71,80,81,82,83,
             92,93,94,95,104,105,106,107,116,117,118,119,128,129,130,131,140,141,142,143,148,149,150,151,
             152,153,154,155,160,161,162,163,164,165,166,167,172,173,174,175,176,177,178,179,184,185,186,
             187,188,189,190,191,196,197,198,199,200,201,202,203,208,209,210,211,212,213,214,215,220,221,
             222,223,224,225,226,227,232,233,234,235,236,237,238,239,244,245,246,247,248,249,250,251,256,
             257,258,259,260,261,262,263,268,269,270,271,272,273,274,275,280,281,282,283,284,285,286,287};

    for (Int_t i = 0; i < 144; i++) hRCUs->SetBinContent(RCU1[i]+1, 1);
  }

  return hRCUs->GetBinContent(nModule+1);
}

//_________________________________________________________________________
void AbsId2EtaPhi(Int_t absId, Int_t &nModule, Int_t &eta, Int_t &phi, Int_t det = 0)
{
  // Converts cell absId --> (sm,eta,phi);
  //
  // nModule -- 2x2 block number for EMCAL;
  // det -- detector: 0/EMCAL, 1/PHOS.

  // EMCAL
  if (det == 0) {
    AliEMCALGeometry *geomEMCAL = AliEMCALGeometry::GetInstance("EMCAL_COMPLETEV1");

    Int_t nSupMod, nIphi, nIeta;
    geomEMCAL->GetCellIndex(absId, nSupMod, nModule, nIphi, nIeta);
    geomEMCAL->GetCellPhiEtaIndexInSModule(nSupMod, nModule, nIphi, nIeta, phi, eta);
    return;
  }

  // PHOS
  else if (det == 1) {
    AliPHOSGeometry *geomPHOS = AliPHOSGeometry::GetInstance("IHEP");

    Int_t relid[4];
    geomPHOS->AbsToRelNumbering(absId, relid);
    //sm = relid[0];
    eta = relid[2];
    phi = relid[3];
    return;
  }

  // DCAL
  // not implemented
  //

  Error("AbsId2EtaPhi", "Wrong detector");
  abort();
}

//_________________________________________________________________________
void TestCellsTH1(Int_t nruns, Int_t runNumbers[], char *hname,
                  char* htitle = "", char* hytitle = "",
                  Int_t dnbins = 200, Double_t dmaxval = -1, Double_t goodmin = -1, Double_t goodmax = -1)
{
  // Test for bad cells by plotting a distribution of a TH1 histogram.
  // The histogram is obtained as a sum over runs of TH1 per run.
  //
  // hname -- histogram name to process;
  // htitle, hytitle -- histogram title and Y axis title;
  // dnbins -- number of bins in distribution;
  // dmaxval -- X axis maximum in distribution.
  // goodmin,goodmax -- the region outside which a cell is considered as bad.
  //
  // -1 value for maxval/goodmin/goodmax -- process a variable automatically.

  // initialize histogram
  TH1* histo = (TH1*) gInputFile->Get(Form("run%i_%s", runNumbers[0], hname));
  histo->SetName(hname);
  histo->SetTitle(htitle);
  histo->SetXTitle("AbsId");
  histo->SetYTitle(hytitle);

  // sum over runs
  for (Int_t i = 1; i < nruns; i++) {
    TH1* h = (TH1*) gInputFile->Get(Form("run%i_%s", runNumbers[i], hname));
    histo->Add(h);
    delete h;
  }

  histo->Scale(1./(Double_t)GetTotalNumberOfEvents(nruns, runNumbers));
  Process1(histo, Form("TestCellsTH1_%s",hname), dnbins, dmaxval, goodmin, goodmax);
}

//_________________________________________________________________________
void TestCellEandN(Double_t Emin = 0.1, char* hname = "hCellAmplitude", Int_t dnbins = 200,
                   Double_t maxval1 = -1, Double_t goodmin1 = -1, Double_t goodmax1 = -1,
                   Double_t maxval2 = -1, Double_t goodmin2 = -1, Double_t goodmax2 = -1,
                   Double_t maxval3 = -1, Double_t goodmin3 = -1, Double_t goodmax3 = -1)
{
  // Three more tests for bad cells:
  //  1) total deposited energy;
  //  2) total number of entries;
  //  3) average energy = [total deposited energy]/[total number of entries].
  //
  // Based on summary histograms. Possible choises:
  //   hCellAmplitude, hCellAmplitudeEhigh, hCellAmplitudeNonLocMax, hCellAmplitudeEhighNonLocMax
  //
  // Emin -- minimum cell amplitude to count;
  // hname -- name (in file) of TH2 histogram with cell amplitudes;
  // dnbins -- number of bins in distributions;
  // maxval[123] -- maximum values on distributions for the criteria 1),2),3) respectively;
  // goodmin[123],goodmax[123] -- the regions on distributions outside those a cell is considered as bad.

  // input; X axis -- absId numbers
  TH2 *hCellAmplitude = (TH2*) gInputFile->Get(hname);

  // binning parameters
  Int_t ncells = hCellAmplitude->GetNbinsX();
  Double_t amin = hCellAmplitude->GetXaxis()->GetXmin();
  Double_t amax = hCellAmplitude->GetXaxis()->GetXmax();

  TH1* hCellEtotal = new TH1F(Form("%s_hCellEtotal_E%.2f",hname,Emin),
                              Form("Total deposited energy, E > %.2f GeV",Emin), ncells,amin,amax);
  hCellEtotal->SetXTitle("AbsId");
  hCellEtotal->SetYTitle("Energy, GeV");

  TH1F *hCellNtotal = new TH1F(Form("%s_hCellNtotal_E%.2f",hname,Emin),
                               Form("Total number of entries, E > %.2f GeV",Emin), ncells,amin,amax);
  hCellNtotal->SetXTitle("AbsId");
  hCellNtotal->SetYTitle("Entries");

  TH1F *hCellEtoNtotal = new TH1F(Form("%s_hCellEtoNtotal_E%.2f",hname,Emin),
                                  Form("Average energy per hit, E > %.2f GeV",Emin), ncells,amin,amax);
  hCellEtoNtotal->SetXTitle("AbsId");
  hCellEtoNtotal->SetYTitle("Energy, GeV");

  // fill cells
  for (Int_t c = 1; c <= ncells; c++) {
    Double_t Esum = 0;
    Double_t Nsum = 0;

    for (Int_t i = 1; i <= hCellAmplitude->GetNbinsY(); i++) {
      Double_t E = hCellAmplitude->GetYaxis()->GetBinCenter(i);
      Double_t N = hCellAmplitude->GetBinContent(c, i);
      if (E < Emin) continue;
      Esum += E*N;
      Nsum += N;
    }

    hCellEtotal->SetBinContent(c, Esum);
    hCellNtotal->SetBinContent(c, Nsum);

    if (Nsum > 0.5)  // number of entries >= 1
      hCellEtoNtotal->SetBinContent(c, Esum/Nsum);
  }

  delete hCellAmplitude;

  Process1(hCellEtotal,    Form("%s_CellE", hname),   dnbins, maxval1, goodmin1, goodmax1);
  Process1(hCellNtotal,    Form("%s_CellN", hname),   dnbins, maxval2, goodmin2, goodmax2);
  Process1(hCellEtoNtotal, Form("%s_CellE/N", hname), dnbins, maxval3, goodmin3, goodmax3);
}

//_________________________________________________________________________
void TestCellShapes(Double_t fitEmin, Double_t fitEmax, char* hname = "hCellAmplitude", Int_t dnbins = 1000,
                    Double_t maxval1 = -1, Double_t goodmin1 = -1, Double_t goodmax1 = -1,
                    Double_t maxval2 = -1, Double_t goodmin2 = -1, Double_t goodmax2 = -1,
                    Double_t maxval3 = -1, Double_t goodmin3 = -1, Double_t goodmax3 = -1)
{
  // Test cells shape using fit function f(x)=A*exp(-B*x)/x^2.
  // Produce values per cell + distributions for A, B and chi2/ndf parameters.
  //
  // fitEmin, fitEmax -- fit range;
  // hname -- name (in file) of TH2 histogram with cell amplitudes;
  // dnbins -- number of bins in distributions;
  // maxval[123] -- maximum values on distributions for the criteria A, B and chi2/ndf respectively;
  // goodmin[123],goodmax[123] -- the regions on distributions outside those a cell is considered as bad.
  //
  // -1 value for maxval/goodmin/goodmax -- process a variable automatically.
  //
  // Note: numbers are optimized for EMCAL.
  // TODO: check for PHOS

  // input; X axis -- absId numbers
  TH2 *hCellAmplitude = (TH2*) gInputFile->Get(hname);

  // binning parameters
  Int_t  ncells = hCellAmplitude->GetNbinsX();
  Double_t amin = hCellAmplitude->GetXaxis()->GetXmin();
  Double_t amax = hCellAmplitude->GetXaxis()->GetXmax();

  // initialize histograms
  TH1 *hFitA = new TH1F(Form("hFitA_%s",hname),"Fit A value", ncells,amin,amax);
  hFitA->SetXTitle("AbsId");
  hFitA->SetYTitle("A");

  TH1 *hFitB = new TH1F(Form("hFitB_%s",hname),"Fit B value", ncells,amin,amax);
  hFitB->SetXTitle("AbsId");
  hFitB->SetYTitle("B");

  TH1 *hFitChi2Ndf = new TH1F(Form("hFitChi2Ndf_%s",hname),"Fit #chi^{2}/ndf value", ncells,amin,amax);
  hFitChi2Ndf->SetXTitle("AbsId");
  hFitChi2Ndf->SetYTitle("#chi^{2}/ndf");

  // total number of events; to estimate A value
  TH1* hNEventsProcessedPerRun = (TH1*) gInputFile->Get("hNEventsProcessedPerRun");
  Double_t ntotal = hNEventsProcessedPerRun->Integral(1, hNEventsProcessedPerRun->GetNbinsX());

  // fitting function
  TF1 *fit = new TF1("fit", "[0]*exp(-[1]*x)/x^2");
  fit->SetParLimits(0, ntotal*1e-8,ntotal*1e-4);
  fit->SetParLimits(1, 0.,30.);
  fit->SetParameter(0, ntotal*1e-6);
  fit->SetParameter(1, 1.5);

  for (Int_t i = 1; i <= ncells; i++) {
    TH1 *hCell = hCellAmplitude->ProjectionY("",i,i);
    if (hCell->GetEntries() == 0) continue;

    hCell->Fit(fit, "0LQEM", "", fitEmin, fitEmax);
    delete hCell;

    hFitA->SetBinContent(i, fit->GetParameter(0));
    hFitB->SetBinContent(i, fit->GetParameter(1));
    if (fit->GetNDF() != 0)
      hFitChi2Ndf->SetBinContent(i, fit->GetChisquare()/fit->GetNDF());
  }

  delete hCellAmplitude;

  // automatic parameters, if requested
  if (maxval1 < 0) maxval1 = 4e-6 * ntotal;
  if (maxval2 < 0) maxval2 = 10.;
  if (maxval3 < 0) maxval3 = 15.;

  Process1(hFitA,       Form("%s_FitA", hname),       dnbins, maxval1, goodmin1, goodmax1);
  Process1(hFitB,       Form("%s_FitB", hname),       dnbins, maxval2, goodmin2, goodmax2);
  Process1(hFitChi2Ndf, Form("%s_FitChi2ndf", hname), dnbins, maxval3, goodmin3, goodmax3);
}

//_________________________________________________________________________
void Process1(TH1* inhisto, char* label = "", Int_t dnbins = 200,
              Double_t dmaxval = -1, Double_t goodmin = -1, Double_t goodmax = -1)
{
  // Actual distribution analysis for a TH1 histogram:
  //  1) create a distribution for the input histogram;
  //  2) draw nicely;
  //  3) take a decision about bad cells.
  //
  // inhisto -- input histogram;
  // label -- text label for stdout;
  // dnbins -- number of bins in distribution;
  // goodmin,goodmax -- cells outside this region are considered as bad;
  // dmaxval -- maximum value on distribution histogram.
  // The later is required in cases where a bad cell kills the whole distribution:
  // limiting distribution maximum value solves the problem.

  if (dmaxval < 0)
    dmaxval = inhisto->GetMaximum()*1.01;  // 1.01 - to see the last bin

  TH1 *distrib = new TH1F(Form("%sDistr",inhisto->GetName()), "", dnbins, inhisto->GetMinimum(), dmaxval);
  distrib->SetXTitle(inhisto->GetYaxis()->GetTitle());
  distrib->SetYTitle("Entries");

  // fill distribution
  for (Int_t c = 1; c <= inhisto->GetNbinsX(); c++)
    distrib->Fill(inhisto->GetBinContent(c));

  // draw histogram + distribution
  TCanvas *c1 = new TCanvas(inhisto->GetName(),inhisto->GetName(), 800,400);
  c1->Divide(2,1);

  c1->cd(1);
  gPad->SetLeftMargin(0.14);
  gPad->SetRightMargin(0.06);
  gPad->SetLogy();
  inhisto->SetTitleOffset(1.7,"Y");
  inhisto->Draw();

  c1->cd(2);
  gPad->SetLeftMargin(0.14);
  gPad->SetRightMargin(0.10);
  gPad->SetLogy();
  distrib->Draw();

  // simple way to estimate the left margin for good cells region:
  // go from left to right and find the first bin with content 2,
  // then go from this bin right to left while bin content is nonzero
  if (goodmin < 0) {
    goodmin = distrib->GetXaxis()->GetXmin();

    for (Int_t i = 1; i <= distrib->GetNbinsX(); i++)
      if (distrib->GetBinContent(i) == 2) {
        while (i > 1 && distrib->GetBinContent(i-1) > 0) i--;
        goodmin = distrib->GetBinLowEdge(i);
        break;
      }
  }

  // the same automatic algorithm as above, but reflected
  if (goodmax < 0) {
    goodmax = distrib->GetXaxis()->GetXmax();

    for (Int_t i = distrib->GetNbinsX(); i >= 1; i--)
      if (distrib->GetBinContent(i) == 2) {
        while (i < distrib->GetNbinsX() && distrib->GetBinContent(i+1) > 0) i++;
        goodmax = distrib->GetXaxis()->GetBinUpEdge(i);
        break;
      }
  }

  // lines
  TLine *lline = new TLine(goodmin, 0, goodmin, distrib->GetMaximum());
  lline->SetLineColor(kOrange);
  lline->SetLineStyle(7);
  lline->Draw();

  TLine *rline = new TLine(goodmax, 0, goodmax, distrib->GetMaximum());
  rline->SetLineColor(kOrange);
  rline->SetLineStyle(7);
  rline->Draw();

  // legend
  TLegend *leg = new TLegend(0.60,0.82,0.9,0.88);
  leg->AddEntry(lline, "Good region boundary","l");
  leg->Draw("same");

  c1->Update();


  printf("Bad cells by criterum \"%s\":", label);

  // print bad cell numbers (outside goodmin,goodmax region)
  Int_t ntot = 0;
  for (Int_t c = 1; c <= inhisto->GetNbinsX(); c++)
    if (inhisto->GetBinContent(c) < goodmin || inhisto->GetBinContent(c) > goodmax) {
      printf(" %.0f", inhisto->GetBinLowEdge(c));
      ntot++;
    }

  printf(" (%i total)\n\n", ntot);
}

//_________________________________________________________________________
void DrawCell(Int_t absId, Double_t fitEmin = 0.3, Double_t fitEmax = 1.,
              Double_t Emax = -1, char* hname = "hCellAmplitude")
{
  // Draw one cell spectrum with a fit.
  //
  // fitEmin, fitEmax -- fit range;
  // Emax -- maximum value on X axis to show (-1 = no limit);
  // hname -- TH2 histogram name to process, possible values:
  //    "hCellAmplitude", "hCellAmplitudeEHigh", "hCellAmplitudeNonLocMax", "hCellAmplitudeEhighNonLocMax".

  // input; X axis -- absId numbers
  TH2* hCellAmplitude = (TH2*) gInputFile->Get(hname);

  Int_t bin = hCellAmplitude->GetXaxis()->FindBin(absId);
  TH1* hCell = hCellAmplitude->ProjectionY(Form("hCell%i_%s",absId,hname),bin,bin);
  hCell->SetXTitle("Energy, GeV");
  hCell->SetYTitle("Entries");
  hCell->SetTitle(Form("Cell %i, %s", absId, hname));
  if (Emax > 0) hCell->SetAxisRange(0, Emax);

  // draw spectrum
  TCanvas *c1 = new TCanvas(Form("hCell%i_%s",absId,hname), Form("hCell%i_%s",absId,hname), 400,400);
  gPad->SetLeftMargin(0.12);
  gPad->SetRightMargin(0.08);
  gPad->SetBottomMargin(0.12);
  gPad->SetLogy();
  hCell->Draw();

  // total number of events
  TH1* hNEventsProcessedPerRun = (TH1*) gInputFile->Get("hNEventsProcessedPerRun");
  Double_t ntotal = hNEventsProcessedPerRun->Integral(1, hNEventsProcessedPerRun->GetNbinsX());

  // fit
  TF1 *fit = new TF1("fit", "[0]*exp(-[1]*x)/x^2");
  fit->SetLineColor(kRed);
  fit->SetLineWidth(2);
  fit->SetParName(0, "A");
  fit->SetParName(1, "B");
  fit->SetParLimits(0, ntotal*1e-8,ntotal*1e-4);
  fit->SetParLimits(1, 0.,30.);
  fit->SetParameter(0, ntotal*1e-6);
  fit->SetParameter(1, 1.);
  hCell->Fit(fit,"LQEM", "", fitEmin, fitEmax);

  // legend
  TLegend *leg = new TLegend(0.5,0.75,0.9,0.8);
  leg->AddEntry(fit, "A*exp(-B*x)/x^{2}","l");
  leg->Draw("same");

  c1->Update();
}

//_________________________________________________________________________
void DrawCellTime(Int_t absId)
{
  // Draw one cell time spectrum

  // input; X axis -- absId numbers
  TH2* hCellTime = (TH2*) gInputFile->Get("hCellTime");

  Int_t bin = hCellTime->GetXaxis()->FindBin(absId);
  TH1* hCell = hCellTime->ProjectionY(Form("hCellTime%i",absId),bin,bin);
  hCell->SetXTitle("Time, s");
  hCell->SetYTitle("Entries");
  hCell->SetTitle(Form("Cell %i time", absId));

  // draw spectrum
  TCanvas *c1 = new TCanvas(Form("hCellTime%i",absId), Form("hCellTime%i",absId), 400,400);
  gPad->SetLeftMargin(0.12);
  gPad->SetRightMargin(0.10);
  gPad->SetBottomMargin(0.12);
  gPad->SetLogy();
  hCell->Draw();

  c1->Update();
}


/* RUN AVERAGES AND RELATED FUNCTIONS
 *
 */

//_________________________________________________________________________
void DrawClusterAveragesPerRun(Int_t nruns, Int_t runNumbers[], Int_t ncellsMin = 1,
                               Double_t eclusMin = 0.3, Double_t eclusMax = -1,
                               TH2* hmap = NULL)
{
  // Draws cluster averages per run vs run index and number of events.
  // NOTE: the averages are "smoothed" a little due to a finite bin width.
  //
  // ncellsMin -- minimum number of cells in cluster (>= 1);
  // eclusMin,eclusMax -- minimum/maximum cluster energy cut
  //                      (eclusMax = -1 means infinity);
  // hmap -- dead/noisy cell map, which is used for acceptance calculation due
  //   to switched off detector parts. Acceptance is used to correct the average
  //   number of clusters per event.

  // names suffix
  TString s(Form("_NC%i_Emin=%.2fGeV",ncellsMin,eclusMin));
  if (eclusMax > 0) s += TString(Form("_Emax=%.2fGeV",eclusMax)).Data();
  if (hmap) s += "_corr4accept";
  char *suff = s.Data();

  if (eclusMax < 0) eclusMax = 1e+5;

  // supermodule region
  Int_t SM1 = 0;
  Int_t SM2 = 10;
  while (SM1 <= SM2 && !gInputFile->Get(Form("run%i_hNCellsInClusterSM%i",runNumbers[0],SM1)) ) SM1++;
  while (SM2 >= SM1 && !gInputFile->Get(Form("run%i_hNCellsInClusterSM%i",runNumbers[0],SM2)) ) SM2--;

  // initialize histograms
  hAvECluster = new TH1F(Form("hAvECluster%s",suff), "Average cluster energy", nruns,0,nruns);
  SetRunLabel(hAvECluster,nruns,runNumbers,1);
  // hAvECluster->SetXTitle("Run index");
  hAvECluster->SetTitleOffset(0.3,"Y");
  hAvECluster->SetYTitle("Energy, GeV");
  hAvECluster->SetTickLength(0.01,"Y");
  hAvECluster->SetLabelSize(0.06,"XY");
  hAvECluster->SetTitleSize(0.06,"XY");

  hAvNCluster = new TH1F(Form("hAvNCluster%s",suff), "Average number of clusters per event", nruns,0,nruns);
  SetRunLabel(hAvNCluster,nruns,runNumbers,1);
  // hAvNCluster->SetXTitle("Run index");
  hAvNCluster->SetTitleOffset(0.3,"Y");
  hAvNCluster->SetYTitle("Number of clusters");
  hAvNCluster->SetTickLength(0.01,"Y");
  hAvNCluster->SetLabelSize(0.06,"XY");
  hAvNCluster->SetTitleSize(0.06,"XY");

  hAvNCellsInCluster = new TH1F(Form("hAvNCellsInCluster%s",suff), "Average number of cells in cluster", nruns,0,nruns);
  SetRunLabel(hAvNCellsInCluster,nruns,runNumbers,1);
  // hAvNCellsInCluster->SetXTitle("Run index");
  hAvNCellsInCluster->SetTitleOffset(0.3,"Y");
  hAvNCellsInCluster->SetYTitle("Number of cells");
  hAvNCellsInCluster->SetTickLength(0.01,"Y");
  hAvNCellsInCluster->SetLabelSize(0.06,"XY");
  hAvNCellsInCluster->SetTitleSize(0.06,"XY");

  // initialize per SM histograms
  TH1* hAvEClusterSM[10];
  TH1* hAvNClusterSM[10];
  TH1* hAvNCellsInClusterSM[10];

  for (Int_t sm = SM1; sm <= SM2; sm++) {
    hAvEClusterSM[sm] = new TH1F(Form("hAvEClusterSM%i%s",sm,suff),"", nruns,0,nruns);
    hAvNClusterSM[sm] = new TH1F(Form("hAvNClusterSM%i%s",sm,suff),"", nruns,0,nruns);
    hAvNCellsInClusterSM[sm] = new TH1F(Form("hAvNCellsInClusterSM%i%s",sm,suff),"", nruns,0,nruns);
  }

  // fill all the histograms per run index
  for (Int_t ri = 0; ri < nruns; ri++)
  {
    Int_t nevents = GetNumberOfEvents(runNumbers[ri]);

    // number of switched off supermodules
    Int_t noSM = 0;

    Double_t Eclus_total = 0;  // total cluster energy
    Double_t Nclus_total = 0;  // total number of clusters
    Double_t Ncells_total = 0; // total number of cells

    // supermodule loop
    for (Int_t sm = SM1; sm <= SM2; sm++) {
      TH2* hNCellsInClusterSM = (TH2*) gInputFile->Get(Form("run%i_hNCellsInClusterSM%i",runNumbers[ri],sm));
      if (hNCellsInClusterSM == 0) {
	Error("DrawClusterAveragesPerRun","Run %d does contain histogram %s",runNumbers[ri],Form("run%i_hNCellsInClusterSM%i",runNumbers[ri],sm));
	continue;
      }

      // the same as above, but per supermodule
      Double_t Eclus_totalSM = 0;
      Double_t Nclus_totalSM = 0;
      Double_t Ncells_totalSM = 0;

      // X axis -- cluster energy, Y axis -- number of cells
      for (Int_t x = 1; x <= hNCellsInClusterSM->GetNbinsX(); x++)
        for (Int_t y = 1+ncellsMin; y <= hNCellsInClusterSM->GetNbinsY(); y++) {//NOTE: bin 1 correspond to ncellsMin=0
          Double_t Eclus = hNCellsInClusterSM->GetXaxis()->GetBinCenter(x);
          Double_t Ncells = hNCellsInClusterSM->GetYaxis()->GetBinLowEdge(y);
          Double_t Nclus = hNCellsInClusterSM->GetBinContent(x,y);

          // cut on cluster energy
          if (Eclus < eclusMin || Eclus > eclusMax) continue;

          Eclus_totalSM += Eclus * Nclus;
          Nclus_totalSM += Nclus;
          Ncells_totalSM += Ncells * Nclus;
        }

        delete hNCellsInClusterSM;

      // correct for acceptance
      if (hmap) {
        Double_t accep = GetAcceptance(sm, hmap, ri);
        if (accep > 0) {
          Eclus_totalSM /= accep;
          Nclus_totalSM /= accep;
          Ncells_totalSM /= accep;
        }
        else noSM++;
      }

      Eclus_total += Eclus_totalSM;
      Nclus_total += Nclus_totalSM;
      Ncells_total += Ncells_totalSM;

      hAvNClusterSM[sm]->SetBinContent(ri+1, Nclus_totalSM/nevents);
      if (Nclus_totalSM > 0) hAvEClusterSM[sm]->SetBinContent(ri+1, Eclus_totalSM/Nclus_totalSM);
      if (Nclus_totalSM > 0) hAvNCellsInClusterSM[sm]->SetBinContent(ri+1, Ncells_totalSM/Nclus_totalSM);
    } // supermodule loop

    hAvNCluster->SetBinContent(ri+1, Nclus_total/nevents/(SM2-SM1+1-noSM));
    if (Nclus_total > 0) hAvECluster->SetBinContent(ri+1, Eclus_total/Nclus_total);
    if (Nclus_total > 0) hAvNCellsInCluster->SetBinContent(ri+1, Ncells_total/Nclus_total);
  } // run index loop


  /* Draw results vs run index
   */

  TCanvas *c1 = new TCanvas(Form("ClusterAveragesRuns%s",suff),
                            Form("ClusterAveragesRuns%s",suff), 1000,707);
  c1->Divide(1,3);

  // average cluster energy
  c1->cd(1);
  gPad->SetLeftMargin(0.04);
  gPad->SetRightMargin(0.02);
  gPad->SetTopMargin(0.10);
  gPad->SetBottomMargin(0.14);
  gPad->SetGridx();
  gPad->SetGridy();
  TLegend *leg = new TLegend(0.65,0.16,0.75,0.15+0.08*(SM2-SM1+1));

  hAvECluster->SetAxisRange(hAvECluster->GetMinimum()*0.5, hAvECluster->GetMaximum()*1.5,"Y");
  hAvECluster->SetLineWidth(2);
  hAvECluster->Draw();
  leg->AddEntry(hAvECluster, "All Modules","l");
  for (Int_t sm = SM1; sm <= SM2; sm++) {
    hAvEClusterSM[sm]->SetLineColor(colorsSM[sm]);
    hAvEClusterSM[sm]->SetLineWidth(1);
    hAvEClusterSM[sm]->Draw("same");
    leg->AddEntry(hAvEClusterSM[sm], Form("Module %i",5-sm),"l");
  }
  hAvECluster->Draw("same"); // to top
  leg->Draw("same");

  // average number of clusters
  c1->cd(2);
  gPad->SetLeftMargin(0.04);
  gPad->SetRightMargin(0.02);
  gPad->SetTopMargin(0.10);
  gPad->SetBottomMargin(0.14);
  gPad->SetGridx();
  gPad->SetGridy();
  leg = new TLegend(0.65,0.16,0.75,0.15+0.08*(SM2-SM1+1));

  hAvNCluster->SetAxisRange(0, hAvNCluster->GetMaximum()*1.5,"Y");
  hAvNCluster->SetLineWidth(2);
  hAvNCluster->Draw();
  leg->AddEntry(hAvNCluster, Form("(All Moduls)/%i",SM2-SM1+1),"l");
  for (Int_t sm = SM1; sm <= SM2; sm++) {
    hAvNClusterSM[sm]->SetLineColor(colorsSM[sm]);
    hAvNClusterSM[sm]->SetLineWidth(1);
    hAvNClusterSM[sm]->Draw("same");
    leg->AddEntry(hAvNClusterSM[sm], Form("Module %i",5-sm),"l");
  }
  hAvNCluster->Draw("same"); // to top
  leg->Draw("same");

  // average number of cells in cluster
  c1->cd(3);
  gPad->SetLeftMargin(0.04);
  gPad->SetRightMargin(0.02);
  gPad->SetTopMargin(0.10);
  gPad->SetBottomMargin(0.14);
  gPad->SetGridx();
  gPad->SetGridy();
  leg = new TLegend(0.65,0.16,0.75,0.15+0.08*(SM2-SM1+1));

  hAvNCellsInCluster->SetAxisRange(0, hAvNCellsInCluster->GetMaximum()*1.3,"Y");
  hAvNCellsInCluster->SetLineWidth(2);
  hAvNCellsInCluster->Draw();
  leg->AddEntry(hAvNCellsInCluster, "All Modules","l");
  for (Int_t sm = SM1; sm <= SM2; sm++) {
    hAvNCellsInClusterSM[sm]->SetLineColor(colorsSM[sm]);
    hAvNCellsInClusterSM[sm]->SetLineWidth(1);
    hAvNCellsInClusterSM[sm]->Draw("same");
    leg->AddEntry(hAvNCellsInClusterSM[sm], Form("Module %i",5-sm),"l");
  }
  hAvNCellsInCluster->Draw("same"); // to top
  leg->Draw("same");
  c1->Update();

  if (!trendPlotEvents) return;

  /* Draw the same vs number of events
   */

  TCanvas *c2 = new TCanvas(Form("ClusterAveragesEvents%s",suff),
                            Form("ClusterAveragesEvents%s",suff), 1000,707);
  c2->Divide(1,3);

  // average cluster energy
  c2->cd(1);
  gPad->SetLeftMargin(0.04);
  gPad->SetRightMargin(0.02);
  gPad->SetTopMargin(0.10);
  gPad->SetBottomMargin(0.13);
  leg = new TLegend(0.65,0.15,0.85,0.15+0.04*(SM2-SM1+1));

  TH1* hAvEClusterEvents = ConvertMapRuns2Events(nruns, runNumbers, hAvECluster);
  hAvEClusterEvents->Draw();
  leg->AddEntry(hAvEClusterEvents, "All Modules","l");
  for (Int_t sm = SM1; sm <= SM2; sm++) {
    TH1* hAvEClusterSMEvents = ConvertMapRuns2Events(nruns, runNumbers, hAvEClusterSM[sm]);
    hAvEClusterSMEvents->Draw("same");
    leg->AddEntry(hAvEClusterSMEvents, Form("Module %i",5-sm),"l");
  }
  hAvEClusterEvents->Draw("same"); // to top
  leg->Draw("same");

  // average number of clusters
  c2->cd(2);
  gPad->SetLeftMargin(0.04);
  gPad->SetRightMargin(0.02);
  gPad->SetTopMargin(0.10);
  gPad->SetBottomMargin(0.13);
  leg = new TLegend(0.65,0.15,0.85,0.15+0.04*(SM2-SM1+1));

  TH1* hAvNClusterEvents = ConvertMapRuns2Events(nruns, runNumbers, hAvNCluster);
  hAvNClusterEvents->Draw();
  leg->AddEntry(hAvNClusterEvents, Form("(All Modules)/%i",SM2-SM1+1),"l");
  for (Int_t sm = SM1; sm <= SM2; sm++) {
    TH1* hAvNClusterSMEvents = ConvertMapRuns2Events(nruns, runNumbers, hAvNClusterSM[sm]);
    hAvNClusterSMEvents->Draw("same");
    leg->AddEntry(hAvNClusterSMEvents, Form("Module %i",5-sm),"l");
  }
  hAvNClusterEvents->Draw("same"); // to top
  leg->Draw("same");

  // average number of cells in cluster
  c2->cd(3);
  gPad->SetLeftMargin(0.04);
  gPad->SetRightMargin(0.02);
  gPad->SetTopMargin(0.10);
  gPad->SetBottomMargin(0.13);
  leg = new TLegend(0.65,0.15,0.85,0.15+0.04*(SM2-SM1+1));

  TH1* hAvNCellsInClusterEvents = ConvertMapRuns2Events(nruns, runNumbers, hAvNCellsInCluster);
  hAvNCellsInClusterEvents->Draw();
  leg->AddEntry(hAvNCellsInClusterEvents, "All Modules","l");
  for (Int_t sm = SM1; sm <= SM2; sm++) {
    TH1* hAvNCellsInClusterSMEvents = ConvertMapRuns2Events(nruns, runNumbers, hAvNCellsInClusterSM[sm]);
    hAvNCellsInClusterSMEvents->Draw("same");
    leg->AddEntry(hAvNCellsInClusterSMEvents, Form("Module %i",5-sm),"l");
  }
  hAvNCellsInClusterEvents->Draw("same"); // to top
  leg->Draw("same");

  c2->Update();
}

//_________________________________________________________________________
Double_t GetAcceptance(Int_t sm, TH2* hmap, Int_t ri)
{
  // Returns [#cells - #dead]/#cells for a supermodule.
  // hmap -- dead/noisy cell map;
  // ri -- run index.

  // guess number of cells per supermodule
  Int_t nSM = 1152; // EMCAL
  if (hmap->GetXaxis()->GetXmin() == 1) {// PHOS
    nSM = 3584;
    sm--; // starts from 1, convenient from 0
  }

  // count dead cells
  Int_t ndead = 0;
  for (Int_t k = 1; k <= nSM; k++)
    if (hmap->GetBinContent(nSM*sm + k, ri+1) < 0)
      ndead++;

  return ((Double_t) (nSM - ndead))/nSM;
}

//_________________________________________________________________________
void DrawPi0Slice(Int_t run, Int_t sm = -1)
{
  // Draw the pi0 peak;
  // run,sm -- run number and supermodule to take;
  // sm < 0 -- draw for whole detector.

  TH1* h = NULL;
  if (sm >= 0) {//particular supermodule
    h = (TH1*) gInputFile->Get(Form("run%i_hPi0MassSM%iSM%i",run,sm,sm));
    if (h == 0) {
      Error("DrawPi0Slice","Run %d does contain histogram %s",run,Form("run%i_hPi0MassSM%iSM%i",run,sm,sm));
      continue;
    }
    h->SetName(Form("hPi0SliceSM%i_run%i",sm,run));
    h->SetTitle(Form("#pi^{0} in M%i, run %i, %.0fk events", 5-sm, run, GetNumberOfEvents(run)/1e+3));
  }
  else {// whole detector
    for (Int_t sm1 = 0; sm1 < 10; sm1++)
      for (Int_t sm2 = sm1; sm2 < 10; sm2++) {
        TH1* one = (TH1*) gInputFile->Get(Form("run%i_hPi0MassSM%iSM%i",run,sm1,sm2));
        if (!one) continue;

        if (!h) h = one;
        else {
          h->Add(one);
          delete one;
        }
      }
    h->SetName(Form("hPi0Slice_run%i",run));
    h->SetTitle(Form("#pi^{0} in all modules, run %i, %.0fk events", run, GetNumberOfEvents(run)/1e+3));
  }

  h->SetXTitle("M_{#gamma#gamma}, GeV");
  h->SetYTitle("Entries");
  h->SetTitleOffset(1.7,"Y");

  TCanvas *c1;
  if (sm >= 0) c1 = new TCanvas(Form("hPi0SliceSM%i_run%i",sm,run),Form("hPi0SliceSM%i_run%i",sm,run), 400,400);
  else         c1 = new TCanvas(Form("hPi0Slice_run%i",run),Form("hPi0Slice_run%i",run), 400,400);

  gPad->SetLeftMargin(0.14);
  gPad->SetRightMargin(0.06);
  h->Draw();

  Double_t nraw, enraw, mass, emass, sigma, esigma;
  FitPi0(h, nraw, enraw, mass, emass, sigma, esigma);

  // draw background
  TF1* fitfun = h->GetFunction("fitfun");
  if (fitfun) {
    Double_t emin, emax;
    fitfun->GetRange(emin, emax);

    backgr = new TF1("mypol2", "[0] + [1]*(x-0.135) + [2]*(x-0.135)^2", emin, emax);
    backgr->SetLineColor(kBlue);
    backgr->SetLineWidth(2);
    backgr->SetLineStyle(3);
    backgr->SetParameters(fitfun->GetParameter(3), fitfun->GetParameter(4), fitfun->GetParameter(5));
    backgr->Draw("same");
  }

  c1->Update();
}

//_________________________________________________________________________
void DrawPi0Averages(Int_t nruns, Int_t runNumbers[], Bool_t samesm = kFALSE, TH2* hmap = NULL)
{
  // Draw average number of pi0s per event, pi0 mass position and pi0 width per run index.
  // Errors are also drawn.
  //
  // samesm -- take only pi0s for which gammas were is same SM;
  // hmap -- if not NULL, do simple (area law based) acceptance correction.
  //
  // TODO: PHOS needs pi0 between SMs rather than in one SM

  // suffix to names
  char *suff = TString(Form("%s%s", samesm ? "_sameSM":"", hmap ? "_corr4accep":"")).Data();

  // supermodule region
  Int_t SM1 = 0;
  Int_t SM2 = 10;
  while (SM1 <= SM2 && !gInputFile->Get(Form("run%i_hPi0MassSM%iSM%i",runNumbers[0],SM1,SM1)) ) SM1++;
  while (SM2 >= SM1 && !gInputFile->Get(Form("run%i_hPi0MassSM%iSM%i",runNumbers[0],SM2,SM2)) ) SM2--;

  // initialize histograms for the entire detector
  TH1* hPi0Num = new TH1F(Form("hPi0Num%s",suff),"Average number of #pi^{0}s per event", nruns,0,nruns);
  SetRunLabel(hPi0Num,nruns,runNumbers,1);
  // hPi0Num->SetXTitle("Run index");
  hPi0Num->SetYTitle("Number of #pi^{0}s");

  TH1* hPi0Mass = new TH1F(Form("hPi0Mass%s",suff),"#pi^{0} mass position", nruns,0,nruns);
  SetRunLabel(hPi0Mass,nruns,runNumbers,1);
  // hPi0Mass->SetXTitle("Run index");
  hPi0Mass->SetYTitle("M_{#pi^{0}}, GeV/c^{2}");

  TH1* hPi0Sigma = new TH1F(Form("hPi0Sigma%s",suff),"#pi^{0} width", nruns,0,nruns);
  SetRunLabel(hPi0Sigma,nruns,runNumbers,1);
  // hPi0Sigma->SetXTitle("Run index");
  hPi0Sigma->SetYTitle("#sigma_{#pi^{0}}, GeV/c^{2}");

  // initialize histograms per SM
  TH1* hPi0NumSM[10];
  TH1* hPi0MassSM[10];
  TH1* hPi0SigmaSM[10];

  for (Int_t sm = SM1; sm <= SM2; sm++) {
    hPi0NumSM[sm]   = new TH1F(Form("hPi0NumSM%i%s",sm,suff),"", nruns,0,nruns);
    hPi0MassSM[sm]  = new TH1F(Form("hPi0MassSM%i%s",sm,suff),"", nruns,0,nruns);
    hPi0SigmaSM[sm] = new TH1F(Form("hPi0SigmaSM%i%s",sm,suff),"", nruns,0,nruns);
  }

  TCanvas cFit("cFit","cFit");
  // run index loop
  for (Int_t ri = 0; ri < nruns; ri++)
  {
    fprintf(stderr, "\rDrawPi0Averages(): analysing run index %i/%i, run # %i...  ", ri, nruns-1,runNumbers[ri]);

    Int_t nevents = GetNumberOfEvents(runNumbers[ri]);

    // per SM histos
    for (Int_t sm = SM1; sm <= SM2; sm++) {
      TH1* h = (TH1*) gInputFile->Get(Form("run%i_hPi0MassSM%iSM%i",runNumbers[ri],sm,sm));
      if (h == 0) {
	Error("DrawPi0Averages","Run %d does contain histogram %s",runNumbers[ri],Form("run%i_hPi0MassSM%iSM%i",runNumbers[ri],sm,sm));
	continue;
      }

      // supermodule acceptance
      Double_t accep = 1.;
      if (hmap) accep = GetAcceptance(sm, hmap, ri);
      if (accep == 0) continue; // missing SM

      Double_t nraw, enraw, mass, emass, sigma, esigma;
      FitPi0(h, nraw, enraw, mass, emass, sigma, esigma);

      hPi0NumSM[sm]  ->SetBinContent(ri+1, nraw/nevents/accep);
      hPi0MassSM[sm] ->SetBinContent(ri+1, mass);
      hPi0SigmaSM[sm]->SetBinContent(ri+1, sigma);

      hPi0NumSM[sm]  ->SetBinError(ri+1, enraw/nevents/accep);
      hPi0MassSM[sm] ->SetBinError(ri+1, emass);
      hPi0SigmaSM[sm]->SetBinError(ri+1, esigma);

      delete h;
    } // supermodule loop


    /* fill for the entire detector
     */
    TH1* hsum = (TH1*) gInputFile->Get(Form("run%i_hPi0MassSM%iSM%i",runNumbers[ri],SM1,SM1));
    if (hsum == 0) {
      Error("DrawPi0Averages","Run %d does contain histogram %s",runNumbers[ri],Form("run%i_hPi0MassSM%iSM%i",runNumbers[ri],SM1,SM1));
      continue;
    }
    hsum->SetName("hSumTMP");

    // for acceptance correction
    Int_t noSM = 0;

    for (Int_t sm1 = SM1; sm1 <= SM2; sm1++)
      for (Int_t sm2 = sm1; sm2 <= SM2; sm2++) {
        if (sm1 == SM1 && sm2 == SM2) continue;
        if (samesm && sm1 != sm2) continue;

        TH1* h = (TH1*) gInputFile->Get(Form("run%i_hPi0MassSM%iSM%i",runNumbers[ri],sm1,sm2));
	if (h == 0) {
	  Error("DrawPi0Averages","Run %d does contain histogram %s",runNumbers[ri],Form("run%i_hPi0MassSM%iSM%i",runNumbers[ri],SM1,SM1));
	  continue;
	}

        // correct for SM acceptance
        if (hmap) {
          Double_t accep = GetAcceptance(sm1, hmap, ri);
          if (accep > 0) h->Scale(1./accep);
          else noSM++;
        }

        hsum->Add(h);
        delete h;
      }

    Double_t nraw, enraw, mass, emass, sigma, esigma;
    FitPi0(hsum, nraw, enraw, mass, emass, sigma, esigma);

    hPi0Num  ->SetBinContent(ri+1, nraw/nevents/(SM2-SM1+1-noSM));
    hPi0Mass ->SetBinContent(ri+1, mass);
    hPi0Sigma->SetBinContent(ri+1, sigma);

    hPi0Num  ->SetBinError(ri+1, enraw/nevents/(SM2-SM1+1-noSM));
    hPi0Mass ->SetBinError(ri+1, emass);
    hPi0Sigma->SetBinError(ri+1, esigma);

    delete hsum;
  } // run index loop

  fprintf(stderr, "\n");


  /* Draw results
   */

  // number of pi0s vs run index
  TCanvas *c1 = new TCanvas(Form("hPi0NumRuns%s",suff),Form("hPi0NumRuns%s",suff), 800,400);
  gPad->SetLeftMargin(0.08);
  gPad->SetRightMargin(0.03);
  gPad->SetTopMargin(0.12);
  gPad->SetBottomMargin(0.12);
  gPad->SetGridx();
  gPad->SetGridy();
  // TLegend *leg = new TLegend(0.75,0.15,0.89,0.15+0.06*(SM2-SM1+1));
  TLegend *leg = new TLegend(0.75,0.89-0.06*(SM2-SM1+1),0.89,0.89);

  hPi0Num->SetAxisRange(0., hPi0Num->GetMaximum()*1.8, "Y");
  hPi0Num->SetTitleOffset(0.8, "Y");
  hPi0Num->SetLineWidth(2);
  hPi0Num->SetLabelSize(0.04,"X");
  hPi0Num->Draw();
  leg->AddEntry(hPi0Num, Form("(All Modules)/%i",SM2-SM1+1),"l");
  for (Int_t sm = SM1; sm <= SM2; sm++) {
    hPi0NumSM[sm]->SetLineColor(colorsSM[sm]);
    hPi0NumSM[sm]->SetLineWidth(2);
    hPi0NumSM[sm]->Draw("same");
    leg->AddEntry(hPi0NumSM[sm], Form("Module %i",5-sm),"l");
  }
  hPi0Num->Draw("same"); // to the top
  hPi0Num->Draw("hist,same");
  leg->Draw("same");
  c1->Update();

  if (trendPlotEvents) {

    // number of pi0s vs event count
    TCanvas *c2 = new TCanvas(Form("hPi0NumEvents%s",suff),Form("hPi0NumEvents%s",suff), 800,400);
    gPad->SetLeftMargin(0.08);
    gPad->SetRightMargin(0.06);
    gPad->SetTopMargin(0.12);
    leg = new TLegend(0.75,0.15,0.92,0.15+0.04*(SM2-SM1+1));
    
    TH1* hPi0NumEvents = ConvertMapRuns2Events(nruns, runNumbers, hPi0Num);
    hPi0NumEvents->Draw();
    leg->AddEntry(hPi0NumEvents, Form("(All Modules)/%i",SM2-SM1+1),"l");
    for (Int_t sm = SM1; sm <= SM2; sm++) {
      TH1* hPi0NumSMEvents = ConvertMapRuns2Events(nruns, runNumbers, hPi0NumSM[sm]);
      hPi0NumSMEvents->Draw("same");
      leg->AddEntry(hPi0NumSMEvents, Form("Module %i",5-sm),"l");
    }
    hPi0NumEvents->Draw("same"); // to the top
    hPi0NumEvents->Draw("hist,same");
    leg->Draw("same");
    c2->Update();
  }
    
  // pi0 mass and width vs run index
  TCanvas *c3 = new TCanvas(Form("hPi0MassSigmaRuns%s",suff),Form("hPi0MassSigmaRuns%s",suff), 1000,707);
  c3->Divide(1,2);

  c3->cd(1);
  gPad->SetLeftMargin(0.06);
  gPad->SetRightMargin(0.04);
  gPad->SetTopMargin(0.10);
  gPad->SetBottomMargin(0.13);
  gPad->SetGridx();
  gPad->SetGridy();
  // leg = new TLegend(0.75,0.15,0.85,0.16+0.06*(SM2-SM1+1));
  leg = new TLegend(0.75,0.89-0.06*(SM2-SM1+1),0.85,0.89);

  hPi0Mass->SetAxisRange(0.125, 0.149, "Y");
  hPi0Mass->SetTitleOffset(0.8, "Y");
  hPi0Mass->SetLineWidth(2);
  hPi0Mass->SetLabelSize(0.06,"X");
  hPi0Mass->Draw();
  leg->AddEntry(hPi0Mass, "All Modules","l");
  for (Int_t sm = SM1; sm <= SM2; sm++) {
    hPi0MassSM[sm]->SetLineColor(colorsSM[sm]);
    hPi0MassSM[sm]->SetLineWidth(2);
    hPi0MassSM[sm]->Draw("same");
    leg->AddEntry(hPi0MassSM[sm], Form("Module %i",5-sm),"l");
  }
  hPi0Mass->Draw("same"); // to the top
  hPi0Mass->Draw("hist,same");
  leg->Draw("same");

  c3->cd(2);
  gPad->SetLeftMargin(0.06);
  gPad->SetRightMargin(0.04);
  gPad->SetTopMargin(0.10);
  gPad->SetBottomMargin(0.13);
  gPad->SetGridx();
  gPad->SetGridy();
  // leg = new TLegend(0.75,0.15,0.85,0.16+0.06*(SM2-SM1+1));
  leg = new TLegend(0.75,0.89-0.06*(SM2-SM1+1),0.85,0.89);

  hPi0Sigma->SetAxisRange(0., hPi0Sigma->GetMaximum()*1.5, "Y");
  hPi0Sigma->SetTitleOffset(0.8, "Y");
  hPi0Sigma->SetLineWidth(2);
  hPi0Sigma->SetLabelSize(0.06,"X");
  hPi0Sigma->Draw();
  leg->AddEntry(hPi0Sigma, "All Modules","l");
  for (Int_t sm = SM1; sm <= SM2; sm++) {
    hPi0SigmaSM[sm]->SetLineColor(colorsSM[sm]);
    hPi0SigmaSM[sm]->SetLineWidth(2);
    hPi0SigmaSM[sm]->Draw("same");
    leg->AddEntry(hPi0SigmaSM[sm], Form("Module %i",5-sm),"l");
  }
  hPi0Sigma->Draw("same"); // to the top
  hPi0Sigma->Draw("hist,same");
  leg->Draw("same");
  c3->Update();


  if (trendPlotEvents) {
    // pi0 mass and width vs number of events
    TCanvas *c4 = new TCanvas(Form("hPi0MassSigmaEvents%s",suff),Form("hPi0MassSigmaEvents%s",suff), 800,400);
    c4->Divide(1,2);
    
    c4->cd(1);
    gPad->SetLeftMargin(0.16);
    gPad->SetRightMargin(0.08);
    leg = new TLegend(0.75,0.15,0.91,0.15+0.04*(SM2-SM1+1));
    
    TH1* hPi0MassEvents = ConvertMapRuns2Events(nruns, runNumbers, hPi0Mass);
    hPi0MassEvents->Draw();
    leg->AddEntry(hPi0MassEvents, "All Modules","l");
    for (Int_t sm = SM1; sm <= SM2; sm++) {
      TH1* hPi0MassSMEvents = ConvertMapRuns2Events(nruns, runNumbers, hPi0MassSM[sm]);
      hPi0MassSMEvents->Draw("same");
      leg->AddEntry(hPi0MassSMEvents, Form("Module %i",5-sm),"l");
    }
    hPi0MassEvents->Draw("same"); // to the top
    hPi0MassEvents->Draw("hist,same");
    leg->Draw("same");
    
    c4->cd(2);
    gPad->SetLeftMargin(0.16);
    gPad->SetRightMargin(0.08);
    leg = new TLegend(0.75,0.15,0.91,0.15+0.04*(SM2-SM1+1));
    
    TH1* hPi0SigmaEvents = ConvertMapRuns2Events(nruns, runNumbers, hPi0Sigma);
    hPi0SigmaEvents->Draw();
    leg->AddEntry(hPi0SigmaEvents, "All Modules","l");
    for (Int_t sm = SM1; sm <= SM2; sm++) {
      TH1* hPi0SigmaSMEvents = ConvertMapRuns2Events(nruns, runNumbers, hPi0SigmaSM[sm]);
      hPi0SigmaSMEvents->Draw("same");
      leg->AddEntry(hPi0SigmaSMEvents, Form("Module %i",5-sm),"l");
    }
    hPi0SigmaEvents->Draw("same"); // to the top
    hPi0SigmaEvents->Draw("hist,same");
    leg->Draw("same");
    c4->Update();
  }

}

//_________________________________________________________________________
void DrawPi0Distributions(char *suff, Int_t nbins = 100)
{
  // Draw distributions for
  //    1) average number of pi0s per event;
  //    2) pi0 mass position;
  //    3) pi0 width.
  //
  // Must be called after DrawPi0Averages() because it
  // searches for the corresponding histograms by name.
  //
  // suff -- histograms suffix;
  // nbins -- number of bins in distributions.

  TCanvas *c1 = new TCanvas(Form("Pi0Distributions%s",suff),Form("Pi0Distributions%s",suff), 999,333);
  c1->Divide(3,1);

  // number of pi0s
  c1->cd(1)->SetLogy();
  gPad->SetLeftMargin(0.16);
  gPad->SetRightMargin(0.04);
  TH1* hPi0Num = (TH1*) gROOT->FindObject(Form("hPi0Num%s",suff));
  MakeDistribution(hPi0Num,nbins)->Draw();

  // pi0 mass
  c1->cd(2)->SetLogy();
  gPad->SetLeftMargin(0.16);
  gPad->SetRightMargin(0.04);
  TH1* hPi0Mass = (TH1*) gROOT->FindObject(Form("hPi0Mass%s",suff));
  MakeDistribution(hPi0Mass,nbins)->Draw();

  // pi0 width
  c1->cd(3)->SetLogy();
  gPad->SetLeftMargin(0.16);
  gPad->SetRightMargin(0.04);
  TH1* hPi0Sigma = (TH1*) gROOT->FindObject(Form("hPi0Sigma%s",suff));
  MakeDistribution(hPi0Sigma,nbins)->Draw();

  c1->Update();
}

//_________________________________________________________________________
TH1* MakeDistribution(TH1* inhisto, Int_t nbins)
{
  // Returns distribution for the input histogram.
  //
  // inhisto -- input histogram;
  // nbins -- number of bins in distribution.

  // initialize distribution; 1.01 -- to see the last bin
  TH1* distr = new TH1F(Form("%sDistr",inhisto->GetName()),"",
                        nbins, inhisto->GetMinimum(),inhisto->GetMaximum()*1.01);
  distr->SetXTitle(inhisto->GetYaxis()->GetTitle());
  distr->SetYTitle("Number of runs");

  // fill distribution
  for (Int_t i = 1; i <= inhisto->GetNbinsX(); i++)
    distr->Fill(inhisto->GetBinContent(i));

  return distr;
}

//_________________________________________________________________________
void FitPi0(TH1* h, Double_t &nraw, Double_t &enraw,
            Double_t &mass, Double_t &emass,
            Double_t &sigma, Double_t &esigma,
            Double_t emin = 0.05, Double_t emax = 0.3, Int_t rebin = 1)
{
  // Fits the pi0 peak with crystal ball + pol2,
  // fills number of pi0s, mass, width and their errors.

  nraw = enraw = 0;
  mass = emass = 0;
  sigma = esigma = 0;

  if (h->GetEntries() == 0) return NULL;

  if (rebin > 1) h->Rebin(rebin);

  // crystal ball parameters (fixed by hand for EMCAL); TODO: PHOS parameters?
  Double_t alpha = 1.1;  // alpha >= 0
  Double_t n = 2.;       // n > 1

  // CB tail parameters
  Double_t a = pow((n/alpha), n) * TMath::Exp(-alpha*alpha/2.);
  Double_t b = n/alpha - alpha;

  // integral value under crystal ball with amplitude = 1, sigma = 1
  // (will be sqrt(2pi) at alpha = infinity)
  Double_t nraw11 = a * pow(b+alpha, 1.-n)/(n-1.) + TMath::Sqrt(TMath::Pi()/2.) * TMath::Erfc(-alpha/TMath::Sqrt(2.));

  // signal (crystal ball);
  new TF1("cball", Form("(x-[1])/[2] > -%f ?                        \
                           [0]*exp(-(x-[1])*(x-[1])/(2*[2]*[2]))    \
                         : [0]*%f*(%f-(x-[1])/[2])^(-%f)", alpha, a, b, n));

  // background
  new TF1("mypol2", "[0] + [1]*(x-0.135) + [2]*(x-0.135)^2", emin, emax);

  // signal + background
  TF1 *fitfun = new TF1("fitfun", "cball + mypol2", emin, emax);
  fitfun->SetParNames("A", "M", "#sigma", "a_{0}", "a_{1}", "a_{2}");
  fitfun->SetLineColor(kRed);
  fitfun->SetLineWidth(2);

  // make a preliminary fit to estimate parameters
  TF1* ff = new TF1("fastfit", "gaus(0) + [3]");
  ff->SetParLimits(0, 0., h->GetMaximum()*1.5);
  ff->SetParLimits(1, 0.1, 0.2);
  ff->SetParLimits(2, 0.004,0.030);
  ff->SetParameters(h->GetMaximum()/3., 0.135, 0.010, 0.);
  h->Fit(ff, "0QL", "", 0.105, 0.165);

  fitfun->SetParLimits(0, 0., h->GetMaximum()*1.5);
  fitfun->SetParLimits(1, 0.12, 0.15);
  fitfun->SetParLimits(2, 0.004,0.030);
  fitfun->SetParameters(ff->GetParameter(0), ff->GetParameter(1), ff->GetParameter(2), ff->GetParameter(3));
  h->Fit(fitfun,"QLR", "");

  // calculate pi0 values
  mass = fitfun->GetParameter(1);
  emass = fitfun->GetParError(1);

  sigma = fitfun->GetParameter(2);
  esigma = fitfun->GetParError(2);

  Double_t A = fitfun->GetParameter(0);
  Double_t eA = fitfun->GetParError(0);

  nraw = nraw11 * A * sigma / h->GetBinWidth(1);
  enraw = nraw * (eA/A + esigma/sigma);
}


/* COMMON FUNCTIONS FOR RUN NUMBERS EXTRACTION, VISUALIZATION AND FILTERING.
 *
 * Input: histogram hNEventsProcessedPerRun which is taken from gInputFile.
 */

//_________________________________________________________________________
void GetRunNumbers(Int_t &nruns, Int_t runNumbers[])
{
  // Fill runNumbers array with run numbers according to hNEventsProcessedPerRun
  // histogram: actually analysed runs have positive bin content.

  TH1* hNEventsProcessedPerRun = (TH1*) gInputFile->Get("hNEventsProcessedPerRun");

  // check underflow/overflow
  if (hNEventsProcessedPerRun->GetBinContent(0) > 0.5)
    Warning("GetRunNumbers", "some run numbers are in underflow; they will be absent in the list of runs");
  if (hNEventsProcessedPerRun->GetBinContent(hNEventsProcessedPerRun->GetNbinsX()+1) > 0.5)
    Warning("GetRunNumbers", "some run numbers are in overflow; they will be absent in the list of runs");

  nruns = 0;

  for (Int_t i = 1; i <= hNEventsProcessedPerRun->GetNbinsX(); i++)
    if (hNEventsProcessedPerRun->GetBinContent(i) > 0.5) {
      runNumbers[nruns] = hNEventsProcessedPerRun->GetBinLowEdge(i);
      nruns++;
    }
}

//_________________________________________________________________________
Int_t GetNumberOfEvents(Int_t run)
{
  // Return number of events in run;
  // run -- run number.

  TH1* hNEventsProcessedPerRun = (TH1*) gInputFile->Get("hNEventsProcessedPerRun");

  // round the number of events to avoid precision surprizes
  return TMath::Nint( hNEventsProcessedPerRun->GetBinContent(hNEventsProcessedPerRun->FindBin(run)) );
}

//_________________________________________________________________________
Long64_t GetTotalNumberOfEvents(Int_t nruns, Int_t runNumbers[])
{
  // Return total number of events in all runs

  Long64_t ntotal = 0;

  for (Int_t i = 0; i < nruns; i++)
    ntotal += GetNumberOfEvents(runNumbers[i]);

  return ntotal;
}

//_________________________________________________________________________
void DrawRunsDistribution(Int_t nruns, Int_t runNumbers[], Int_t dnbins = 100)
{
  // Draw events and events distribution;
  // dnbins -- number of bins in distribution.

  // initialize run index histogram ...
  TH1* hNEventsPerRunIndex = new TH1F("hNEventsPerRunIndex", "Number of processed events per run index", nruns,0,nruns);
  SetRunLabel(hNEventsPerRunIndex,nruns,runNumbers,1);
  // hNEventsPerRunIndex->SetXTitle("Run index");
  hNEventsPerRunIndex->SetYTitle("Number of events");

  // ... and fill it
  for (Int_t i = 0; i < nruns; i++)
    hNEventsPerRunIndex->SetBinContent(i+1, GetNumberOfEvents(runNumbers[i]));

  // initialize distribution; 1.01 - to see the last bin
  TH1* distrib = new TH1F("hNEventsPerRunIndexDistr", "", dnbins, 0, hNEventsPerRunIndex->GetMaximum()*1.01);
  distrib->SetXTitle("Number of events");
  distrib->SetYTitle("Number of runs");

  // fill distribution
  for (Int_t i = 1; i <= nruns; i++)
    distrib->Fill(hNEventsPerRunIndex->GetBinContent(i));

  // draw histogram + distribution
  TCanvas *c1 = new TCanvas("hNEventsPerRunIndex","hNEventsPerRunIndex", 800,600);
  c1->Divide(1,2);

  c1->cd(1);
  gPad->SetLeftMargin(0.06);
  gPad->SetRightMargin(0.04);
  gPad->SetTopMargin(0.10);
  gPad->SetBottomMargin(0.14);
  gPad->SetGridx();
  hNEventsPerRunIndex->SetTitleOffset(0.6,"Y");
  hNEventsPerRunIndex->SetTickLength(0.01,"Y");
  hNEventsPerRunIndex->SetLabelSize(0.06,"X");
  hNEventsPerRunIndex->Draw();

  c1->cd(2);
  gPad->SetLeftMargin(0.06);
  gPad->SetRightMargin(0.04);
  gPad->SetTopMargin(0.10);
  gPad->SetBottomMargin(0.13);
  distrib->SetTitleOffset(0.6,"Y");
  distrib->SetTickLength(0.01,"Y");
  distrib->Draw();

  c1->Update();
}

//_________________________________________________________________________
void ExcludeSmallRuns(Int_t &nruns, Int_t runNumbers[], Int_t nEventsMin = 100e+3)
{
  // Exclude runs with number of events < nEventsMin

  printf("Excluding runs (< %.0fk events):", nEventsMin/1000.);

  for (Int_t i = 0; i < nruns; i++)
    if (GetNumberOfEvents(runNumbers[i]) < nEventsMin) {
      printf(" %i", runNumbers[i]);
      nruns--;
      runNumbers[i] = runNumbers[nruns];
      i--;
    }

  printf("\n");

  SortArray(nruns, runNumbers);
}

//_________________________________________________________________________
void ExcludeRunNumbers(Int_t &nruns, Int_t runNumbers[], Int_t nexcl, Int_t runs2Exclude[])
{
  // Exclude particular runs.
  //
  // nexcl -- number of runs in runs2Exclude[];
  // runs2Exclude -- array with run numbers to exclude.

  for (Int_t i = 0; i < nruns; i++)
    for (Int_t e = 0; e < nexcl; e++)
      if (runNumbers[i] == runs2Exclude[e]) {
        Printf("Excluding run: %i", runs2Exclude[e]);
        nruns--;
        runNumbers[i] = runNumbers[nruns];
        i--;
        break;
      }

  SortArray(nruns, runNumbers);
}

//_________________________________________________________________________
void SortArray(const Int_t nruns, Int_t runNumbers[])
{
  // Sort an array;
  // used for runNumbers array sorting.

  Int_t indices[nruns];
  Int_t runNumbers_unsort[nruns];

  for (Int_t i = 0; i < nruns; i++)
    runNumbers_unsort[i] = runNumbers[i];

  TMath::Sort(nruns, runNumbers_unsort, indices, kFALSE);

  for (Int_t i = 0; i < nruns; i++)
    runNumbers[i] = runNumbers_unsort[indices[i]];
}

//_________________________________________________________________________
void PrintRunNumbers(Int_t nruns, Int_t runNumbers[])
{
  // Print a table run index / run number / number of events.

  Printf("");
  Printf("| index | run number |  nevents  |");
  Printf("|-------|------------|-----------|");

  for (Int_t i = 0; i < nruns; i++)
    Printf("|  %-4i |  %-9i |  %-8i |", i, runNumbers[i], GetNumberOfEvents(runNumbers[i]));

  Printf("| Events in total:    %-10lli |\n", GetTotalNumberOfEvents(nruns, runNumbers));
}

//------------------------------------------------------------------------
void SetRunLabel(TH1 *histo, Int_t nruns, Int_t *runNumbers, Int_t axis)
{
  TString runText;
  for (Int_t i=0; i<nruns; i++) {
    runText = Form("%d",runNumbers[i]);
    if      (axis == 1)
      histo->GetXaxis()->SetBinLabel(i+1,runText.Data());
    else if (axis == 2)
      histo->GetYaxis()->SetBinLabel(i+1,runText.Data());
  }
  histo->LabelsOption("v");
}
 getCellsRunsQAPHOS.C:1
 getCellsRunsQAPHOS.C:2
 getCellsRunsQAPHOS.C:3
 getCellsRunsQAPHOS.C:4
 getCellsRunsQAPHOS.C:5
 getCellsRunsQAPHOS.C:6
 getCellsRunsQAPHOS.C:7
 getCellsRunsQAPHOS.C:8
 getCellsRunsQAPHOS.C:9
 getCellsRunsQAPHOS.C:10
 getCellsRunsQAPHOS.C:11
 getCellsRunsQAPHOS.C:12
 getCellsRunsQAPHOS.C:13
 getCellsRunsQAPHOS.C:14
 getCellsRunsQAPHOS.C:15
 getCellsRunsQAPHOS.C:16
 getCellsRunsQAPHOS.C:17
 getCellsRunsQAPHOS.C:18
 getCellsRunsQAPHOS.C:19
 getCellsRunsQAPHOS.C:20
 getCellsRunsQAPHOS.C:21
 getCellsRunsQAPHOS.C:22
 getCellsRunsQAPHOS.C:23
 getCellsRunsQAPHOS.C:24
 getCellsRunsQAPHOS.C:25
 getCellsRunsQAPHOS.C:26
 getCellsRunsQAPHOS.C:27
 getCellsRunsQAPHOS.C:28
 getCellsRunsQAPHOS.C:29
 getCellsRunsQAPHOS.C:30
 getCellsRunsQAPHOS.C:31
 getCellsRunsQAPHOS.C:32
 getCellsRunsQAPHOS.C:33
 getCellsRunsQAPHOS.C:34
 getCellsRunsQAPHOS.C:35
 getCellsRunsQAPHOS.C:36
 getCellsRunsQAPHOS.C:37
 getCellsRunsQAPHOS.C:38
 getCellsRunsQAPHOS.C:39
 getCellsRunsQAPHOS.C:40
 getCellsRunsQAPHOS.C:41
 getCellsRunsQAPHOS.C:42
 getCellsRunsQAPHOS.C:43
 getCellsRunsQAPHOS.C:44
 getCellsRunsQAPHOS.C:45
 getCellsRunsQAPHOS.C:46
 getCellsRunsQAPHOS.C:47
 getCellsRunsQAPHOS.C:48
 getCellsRunsQAPHOS.C:49
 getCellsRunsQAPHOS.C:50
 getCellsRunsQAPHOS.C:51
 getCellsRunsQAPHOS.C:52
 getCellsRunsQAPHOS.C:53
 getCellsRunsQAPHOS.C:54
 getCellsRunsQAPHOS.C:55
 getCellsRunsQAPHOS.C:56
 getCellsRunsQAPHOS.C:57
 getCellsRunsQAPHOS.C:58
 getCellsRunsQAPHOS.C:59
 getCellsRunsQAPHOS.C:60
 getCellsRunsQAPHOS.C:61
 getCellsRunsQAPHOS.C:62
 getCellsRunsQAPHOS.C:63
 getCellsRunsQAPHOS.C:64
 getCellsRunsQAPHOS.C:65
 getCellsRunsQAPHOS.C:66
 getCellsRunsQAPHOS.C:67
 getCellsRunsQAPHOS.C:68
 getCellsRunsQAPHOS.C:69
 getCellsRunsQAPHOS.C:70
 getCellsRunsQAPHOS.C:71
 getCellsRunsQAPHOS.C:72
 getCellsRunsQAPHOS.C:73
 getCellsRunsQAPHOS.C:74
 getCellsRunsQAPHOS.C:75
 getCellsRunsQAPHOS.C:76
 getCellsRunsQAPHOS.C:77
 getCellsRunsQAPHOS.C:78
 getCellsRunsQAPHOS.C:79
 getCellsRunsQAPHOS.C:80
 getCellsRunsQAPHOS.C:81
 getCellsRunsQAPHOS.C:82
 getCellsRunsQAPHOS.C:83
 getCellsRunsQAPHOS.C:84
 getCellsRunsQAPHOS.C:85
 getCellsRunsQAPHOS.C:86
 getCellsRunsQAPHOS.C:87
 getCellsRunsQAPHOS.C:88
 getCellsRunsQAPHOS.C:89
 getCellsRunsQAPHOS.C:90
 getCellsRunsQAPHOS.C:91
 getCellsRunsQAPHOS.C:92
 getCellsRunsQAPHOS.C:93
 getCellsRunsQAPHOS.C:94
 getCellsRunsQAPHOS.C:95
 getCellsRunsQAPHOS.C:96
 getCellsRunsQAPHOS.C:97
 getCellsRunsQAPHOS.C:98
 getCellsRunsQAPHOS.C:99
 getCellsRunsQAPHOS.C:100
 getCellsRunsQAPHOS.C:101
 getCellsRunsQAPHOS.C:102
 getCellsRunsQAPHOS.C:103
 getCellsRunsQAPHOS.C:104
 getCellsRunsQAPHOS.C:105
 getCellsRunsQAPHOS.C:106
 getCellsRunsQAPHOS.C:107
 getCellsRunsQAPHOS.C:108
 getCellsRunsQAPHOS.C:109
 getCellsRunsQAPHOS.C:110
 getCellsRunsQAPHOS.C:111
 getCellsRunsQAPHOS.C:112
 getCellsRunsQAPHOS.C:113
 getCellsRunsQAPHOS.C:114
 getCellsRunsQAPHOS.C:115
 getCellsRunsQAPHOS.C:116
 getCellsRunsQAPHOS.C:117
 getCellsRunsQAPHOS.C:118
 getCellsRunsQAPHOS.C:119
 getCellsRunsQAPHOS.C:120
 getCellsRunsQAPHOS.C:121
 getCellsRunsQAPHOS.C:122
 getCellsRunsQAPHOS.C:123
 getCellsRunsQAPHOS.C:124
 getCellsRunsQAPHOS.C:125
 getCellsRunsQAPHOS.C:126
 getCellsRunsQAPHOS.C:127
 getCellsRunsQAPHOS.C:128
 getCellsRunsQAPHOS.C:129
 getCellsRunsQAPHOS.C:130
 getCellsRunsQAPHOS.C:131
 getCellsRunsQAPHOS.C:132
 getCellsRunsQAPHOS.C:133
 getCellsRunsQAPHOS.C:134
 getCellsRunsQAPHOS.C:135
 getCellsRunsQAPHOS.C:136
 getCellsRunsQAPHOS.C:137
 getCellsRunsQAPHOS.C:138
 getCellsRunsQAPHOS.C:139
 getCellsRunsQAPHOS.C:140
 getCellsRunsQAPHOS.C:141
 getCellsRunsQAPHOS.C:142
 getCellsRunsQAPHOS.C:143
 getCellsRunsQAPHOS.C:144
 getCellsRunsQAPHOS.C:145
 getCellsRunsQAPHOS.C:146
 getCellsRunsQAPHOS.C:147
 getCellsRunsQAPHOS.C:148
 getCellsRunsQAPHOS.C:149
 getCellsRunsQAPHOS.C:150
 getCellsRunsQAPHOS.C:151
 getCellsRunsQAPHOS.C:152
 getCellsRunsQAPHOS.C:153
 getCellsRunsQAPHOS.C:154
 getCellsRunsQAPHOS.C:155
 getCellsRunsQAPHOS.C:156
 getCellsRunsQAPHOS.C:157
 getCellsRunsQAPHOS.C:158
 getCellsRunsQAPHOS.C:159
 getCellsRunsQAPHOS.C:160
 getCellsRunsQAPHOS.C:161
 getCellsRunsQAPHOS.C:162
 getCellsRunsQAPHOS.C:163
 getCellsRunsQAPHOS.C:164
 getCellsRunsQAPHOS.C:165
 getCellsRunsQAPHOS.C:166
 getCellsRunsQAPHOS.C:167
 getCellsRunsQAPHOS.C:168
 getCellsRunsQAPHOS.C:169
 getCellsRunsQAPHOS.C:170
 getCellsRunsQAPHOS.C:171
 getCellsRunsQAPHOS.C:172
 getCellsRunsQAPHOS.C:173
 getCellsRunsQAPHOS.C:174
 getCellsRunsQAPHOS.C:175
 getCellsRunsQAPHOS.C:176
 getCellsRunsQAPHOS.C:177
 getCellsRunsQAPHOS.C:178
 getCellsRunsQAPHOS.C:179
 getCellsRunsQAPHOS.C:180
 getCellsRunsQAPHOS.C:181
 getCellsRunsQAPHOS.C:182
 getCellsRunsQAPHOS.C:183
 getCellsRunsQAPHOS.C:184
 getCellsRunsQAPHOS.C:185
 getCellsRunsQAPHOS.C:186
 getCellsRunsQAPHOS.C:187
 getCellsRunsQAPHOS.C:188
 getCellsRunsQAPHOS.C:189
 getCellsRunsQAPHOS.C:190
 getCellsRunsQAPHOS.C:191
 getCellsRunsQAPHOS.C:192
 getCellsRunsQAPHOS.C:193
 getCellsRunsQAPHOS.C:194
 getCellsRunsQAPHOS.C:195
 getCellsRunsQAPHOS.C:196
 getCellsRunsQAPHOS.C:197
 getCellsRunsQAPHOS.C:198
 getCellsRunsQAPHOS.C:199
 getCellsRunsQAPHOS.C:200
 getCellsRunsQAPHOS.C:201
 getCellsRunsQAPHOS.C:202
 getCellsRunsQAPHOS.C:203
 getCellsRunsQAPHOS.C:204
 getCellsRunsQAPHOS.C:205
 getCellsRunsQAPHOS.C:206
 getCellsRunsQAPHOS.C:207
 getCellsRunsQAPHOS.C:208
 getCellsRunsQAPHOS.C:209
 getCellsRunsQAPHOS.C:210
 getCellsRunsQAPHOS.C:211
 getCellsRunsQAPHOS.C:212
 getCellsRunsQAPHOS.C:213
 getCellsRunsQAPHOS.C:214
 getCellsRunsQAPHOS.C:215
 getCellsRunsQAPHOS.C:216
 getCellsRunsQAPHOS.C:217
 getCellsRunsQAPHOS.C:218
 getCellsRunsQAPHOS.C:219
 getCellsRunsQAPHOS.C:220
 getCellsRunsQAPHOS.C:221
 getCellsRunsQAPHOS.C:222
 getCellsRunsQAPHOS.C:223
 getCellsRunsQAPHOS.C:224
 getCellsRunsQAPHOS.C:225
 getCellsRunsQAPHOS.C:226
 getCellsRunsQAPHOS.C:227
 getCellsRunsQAPHOS.C:228
 getCellsRunsQAPHOS.C:229
 getCellsRunsQAPHOS.C:230
 getCellsRunsQAPHOS.C:231
 getCellsRunsQAPHOS.C:232
 getCellsRunsQAPHOS.C:233
 getCellsRunsQAPHOS.C:234
 getCellsRunsQAPHOS.C:235
 getCellsRunsQAPHOS.C:236
 getCellsRunsQAPHOS.C:237
 getCellsRunsQAPHOS.C:238
 getCellsRunsQAPHOS.C:239
 getCellsRunsQAPHOS.C:240
 getCellsRunsQAPHOS.C:241
 getCellsRunsQAPHOS.C:242
 getCellsRunsQAPHOS.C:243
 getCellsRunsQAPHOS.C:244
 getCellsRunsQAPHOS.C:245
 getCellsRunsQAPHOS.C:246
 getCellsRunsQAPHOS.C:247
 getCellsRunsQAPHOS.C:248
 getCellsRunsQAPHOS.C:249
 getCellsRunsQAPHOS.C:250
 getCellsRunsQAPHOS.C:251
 getCellsRunsQAPHOS.C:252
 getCellsRunsQAPHOS.C:253
 getCellsRunsQAPHOS.C:254
 getCellsRunsQAPHOS.C:255
 getCellsRunsQAPHOS.C:256
 getCellsRunsQAPHOS.C:257
 getCellsRunsQAPHOS.C:258
 getCellsRunsQAPHOS.C:259
 getCellsRunsQAPHOS.C:260
 getCellsRunsQAPHOS.C:261
 getCellsRunsQAPHOS.C:262
 getCellsRunsQAPHOS.C:263
 getCellsRunsQAPHOS.C:264
 getCellsRunsQAPHOS.C:265
 getCellsRunsQAPHOS.C:266
 getCellsRunsQAPHOS.C:267
 getCellsRunsQAPHOS.C:268
 getCellsRunsQAPHOS.C:269
 getCellsRunsQAPHOS.C:270
 getCellsRunsQAPHOS.C:271
 getCellsRunsQAPHOS.C:272
 getCellsRunsQAPHOS.C:273
 getCellsRunsQAPHOS.C:274
 getCellsRunsQAPHOS.C:275
 getCellsRunsQAPHOS.C:276
 getCellsRunsQAPHOS.C:277
 getCellsRunsQAPHOS.C:278
 getCellsRunsQAPHOS.C:279
 getCellsRunsQAPHOS.C:280
 getCellsRunsQAPHOS.C:281
 getCellsRunsQAPHOS.C:282
 getCellsRunsQAPHOS.C:283
 getCellsRunsQAPHOS.C:284
 getCellsRunsQAPHOS.C:285
 getCellsRunsQAPHOS.C:286
 getCellsRunsQAPHOS.C:287
 getCellsRunsQAPHOS.C:288
 getCellsRunsQAPHOS.C:289
 getCellsRunsQAPHOS.C:290
 getCellsRunsQAPHOS.C:291
 getCellsRunsQAPHOS.C:292
 getCellsRunsQAPHOS.C:293
 getCellsRunsQAPHOS.C:294
 getCellsRunsQAPHOS.C:295
 getCellsRunsQAPHOS.C:296
 getCellsRunsQAPHOS.C:297
 getCellsRunsQAPHOS.C:298
 getCellsRunsQAPHOS.C:299
 getCellsRunsQAPHOS.C:300
 getCellsRunsQAPHOS.C:301
 getCellsRunsQAPHOS.C:302
 getCellsRunsQAPHOS.C:303
 getCellsRunsQAPHOS.C:304
 getCellsRunsQAPHOS.C:305
 getCellsRunsQAPHOS.C:306
 getCellsRunsQAPHOS.C:307
 getCellsRunsQAPHOS.C:308
 getCellsRunsQAPHOS.C:309
 getCellsRunsQAPHOS.C:310
 getCellsRunsQAPHOS.C:311
 getCellsRunsQAPHOS.C:312
 getCellsRunsQAPHOS.C:313
 getCellsRunsQAPHOS.C:314
 getCellsRunsQAPHOS.C:315
 getCellsRunsQAPHOS.C:316
 getCellsRunsQAPHOS.C:317
 getCellsRunsQAPHOS.C:318
 getCellsRunsQAPHOS.C:319
 getCellsRunsQAPHOS.C:320
 getCellsRunsQAPHOS.C:321
 getCellsRunsQAPHOS.C:322
 getCellsRunsQAPHOS.C:323
 getCellsRunsQAPHOS.C:324
 getCellsRunsQAPHOS.C:325
 getCellsRunsQAPHOS.C:326
 getCellsRunsQAPHOS.C:327
 getCellsRunsQAPHOS.C:328
 getCellsRunsQAPHOS.C:329
 getCellsRunsQAPHOS.C:330
 getCellsRunsQAPHOS.C:331
 getCellsRunsQAPHOS.C:332
 getCellsRunsQAPHOS.C:333
 getCellsRunsQAPHOS.C:334
 getCellsRunsQAPHOS.C:335
 getCellsRunsQAPHOS.C:336
 getCellsRunsQAPHOS.C:337
 getCellsRunsQAPHOS.C:338
 getCellsRunsQAPHOS.C:339
 getCellsRunsQAPHOS.C:340
 getCellsRunsQAPHOS.C:341
 getCellsRunsQAPHOS.C:342
 getCellsRunsQAPHOS.C:343
 getCellsRunsQAPHOS.C:344
 getCellsRunsQAPHOS.C:345
 getCellsRunsQAPHOS.C:346
 getCellsRunsQAPHOS.C:347
 getCellsRunsQAPHOS.C:348
 getCellsRunsQAPHOS.C:349
 getCellsRunsQAPHOS.C:350
 getCellsRunsQAPHOS.C:351
 getCellsRunsQAPHOS.C:352
 getCellsRunsQAPHOS.C:353
 getCellsRunsQAPHOS.C:354
 getCellsRunsQAPHOS.C:355
 getCellsRunsQAPHOS.C:356
 getCellsRunsQAPHOS.C:357
 getCellsRunsQAPHOS.C:358
 getCellsRunsQAPHOS.C:359
 getCellsRunsQAPHOS.C:360
 getCellsRunsQAPHOS.C:361
 getCellsRunsQAPHOS.C:362
 getCellsRunsQAPHOS.C:363
 getCellsRunsQAPHOS.C:364
 getCellsRunsQAPHOS.C:365
 getCellsRunsQAPHOS.C:366
 getCellsRunsQAPHOS.C:367
 getCellsRunsQAPHOS.C:368
 getCellsRunsQAPHOS.C:369
 getCellsRunsQAPHOS.C:370
 getCellsRunsQAPHOS.C:371
 getCellsRunsQAPHOS.C:372
 getCellsRunsQAPHOS.C:373
 getCellsRunsQAPHOS.C:374
 getCellsRunsQAPHOS.C:375
 getCellsRunsQAPHOS.C:376
 getCellsRunsQAPHOS.C:377
 getCellsRunsQAPHOS.C:378
 getCellsRunsQAPHOS.C:379
 getCellsRunsQAPHOS.C:380
 getCellsRunsQAPHOS.C:381
 getCellsRunsQAPHOS.C:382
 getCellsRunsQAPHOS.C:383
 getCellsRunsQAPHOS.C:384
 getCellsRunsQAPHOS.C:385
 getCellsRunsQAPHOS.C:386
 getCellsRunsQAPHOS.C:387
 getCellsRunsQAPHOS.C:388
 getCellsRunsQAPHOS.C:389
 getCellsRunsQAPHOS.C:390
 getCellsRunsQAPHOS.C:391
 getCellsRunsQAPHOS.C:392
 getCellsRunsQAPHOS.C:393
 getCellsRunsQAPHOS.C:394
 getCellsRunsQAPHOS.C:395
 getCellsRunsQAPHOS.C:396
 getCellsRunsQAPHOS.C:397
 getCellsRunsQAPHOS.C:398
 getCellsRunsQAPHOS.C:399
 getCellsRunsQAPHOS.C:400
 getCellsRunsQAPHOS.C:401
 getCellsRunsQAPHOS.C:402
 getCellsRunsQAPHOS.C:403
 getCellsRunsQAPHOS.C:404
 getCellsRunsQAPHOS.C:405
 getCellsRunsQAPHOS.C:406
 getCellsRunsQAPHOS.C:407
 getCellsRunsQAPHOS.C:408
 getCellsRunsQAPHOS.C:409
 getCellsRunsQAPHOS.C:410
 getCellsRunsQAPHOS.C:411
 getCellsRunsQAPHOS.C:412
 getCellsRunsQAPHOS.C:413
 getCellsRunsQAPHOS.C:414
 getCellsRunsQAPHOS.C:415
 getCellsRunsQAPHOS.C:416
 getCellsRunsQAPHOS.C:417
 getCellsRunsQAPHOS.C:418
 getCellsRunsQAPHOS.C:419
 getCellsRunsQAPHOS.C:420
 getCellsRunsQAPHOS.C:421
 getCellsRunsQAPHOS.C:422
 getCellsRunsQAPHOS.C:423
 getCellsRunsQAPHOS.C:424
 getCellsRunsQAPHOS.C:425
 getCellsRunsQAPHOS.C:426
 getCellsRunsQAPHOS.C:427
 getCellsRunsQAPHOS.C:428
 getCellsRunsQAPHOS.C:429
 getCellsRunsQAPHOS.C:430
 getCellsRunsQAPHOS.C:431
 getCellsRunsQAPHOS.C:432
 getCellsRunsQAPHOS.C:433
 getCellsRunsQAPHOS.C:434
 getCellsRunsQAPHOS.C:435
 getCellsRunsQAPHOS.C:436
 getCellsRunsQAPHOS.C:437
 getCellsRunsQAPHOS.C:438
 getCellsRunsQAPHOS.C:439
 getCellsRunsQAPHOS.C:440
 getCellsRunsQAPHOS.C:441
 getCellsRunsQAPHOS.C:442
 getCellsRunsQAPHOS.C:443
 getCellsRunsQAPHOS.C:444
 getCellsRunsQAPHOS.C:445
 getCellsRunsQAPHOS.C:446
 getCellsRunsQAPHOS.C:447
 getCellsRunsQAPHOS.C:448
 getCellsRunsQAPHOS.C:449
 getCellsRunsQAPHOS.C:450
 getCellsRunsQAPHOS.C:451
 getCellsRunsQAPHOS.C:452
 getCellsRunsQAPHOS.C:453
 getCellsRunsQAPHOS.C:454
 getCellsRunsQAPHOS.C:455
 getCellsRunsQAPHOS.C:456
 getCellsRunsQAPHOS.C:457
 getCellsRunsQAPHOS.C:458
 getCellsRunsQAPHOS.C:459
 getCellsRunsQAPHOS.C:460
 getCellsRunsQAPHOS.C:461
 getCellsRunsQAPHOS.C:462
 getCellsRunsQAPHOS.C:463
 getCellsRunsQAPHOS.C:464
 getCellsRunsQAPHOS.C:465
 getCellsRunsQAPHOS.C:466
 getCellsRunsQAPHOS.C:467
 getCellsRunsQAPHOS.C:468
 getCellsRunsQAPHOS.C:469
 getCellsRunsQAPHOS.C:470
 getCellsRunsQAPHOS.C:471
 getCellsRunsQAPHOS.C:472
 getCellsRunsQAPHOS.C:473
 getCellsRunsQAPHOS.C:474
 getCellsRunsQAPHOS.C:475
 getCellsRunsQAPHOS.C:476
 getCellsRunsQAPHOS.C:477
 getCellsRunsQAPHOS.C:478
 getCellsRunsQAPHOS.C:479
 getCellsRunsQAPHOS.C:480
 getCellsRunsQAPHOS.C:481
 getCellsRunsQAPHOS.C:482
 getCellsRunsQAPHOS.C:483
 getCellsRunsQAPHOS.C:484
 getCellsRunsQAPHOS.C:485
 getCellsRunsQAPHOS.C:486
 getCellsRunsQAPHOS.C:487
 getCellsRunsQAPHOS.C:488
 getCellsRunsQAPHOS.C:489
 getCellsRunsQAPHOS.C:490
 getCellsRunsQAPHOS.C:491
 getCellsRunsQAPHOS.C:492
 getCellsRunsQAPHOS.C:493
 getCellsRunsQAPHOS.C:494
 getCellsRunsQAPHOS.C:495
 getCellsRunsQAPHOS.C:496
 getCellsRunsQAPHOS.C:497
 getCellsRunsQAPHOS.C:498
 getCellsRunsQAPHOS.C:499
 getCellsRunsQAPHOS.C:500
 getCellsRunsQAPHOS.C:501
 getCellsRunsQAPHOS.C:502
 getCellsRunsQAPHOS.C:503
 getCellsRunsQAPHOS.C:504
 getCellsRunsQAPHOS.C:505
 getCellsRunsQAPHOS.C:506
 getCellsRunsQAPHOS.C:507
 getCellsRunsQAPHOS.C:508
 getCellsRunsQAPHOS.C:509
 getCellsRunsQAPHOS.C:510
 getCellsRunsQAPHOS.C:511
 getCellsRunsQAPHOS.C:512
 getCellsRunsQAPHOS.C:513
 getCellsRunsQAPHOS.C:514
 getCellsRunsQAPHOS.C:515
 getCellsRunsQAPHOS.C:516
 getCellsRunsQAPHOS.C:517
 getCellsRunsQAPHOS.C:518
 getCellsRunsQAPHOS.C:519
 getCellsRunsQAPHOS.C:520
 getCellsRunsQAPHOS.C:521
 getCellsRunsQAPHOS.C:522
 getCellsRunsQAPHOS.C:523
 getCellsRunsQAPHOS.C:524
 getCellsRunsQAPHOS.C:525
 getCellsRunsQAPHOS.C:526
 getCellsRunsQAPHOS.C:527
 getCellsRunsQAPHOS.C:528
 getCellsRunsQAPHOS.C:529
 getCellsRunsQAPHOS.C:530
 getCellsRunsQAPHOS.C:531
 getCellsRunsQAPHOS.C:532
 getCellsRunsQAPHOS.C:533
 getCellsRunsQAPHOS.C:534
 getCellsRunsQAPHOS.C:535
 getCellsRunsQAPHOS.C:536
 getCellsRunsQAPHOS.C:537
 getCellsRunsQAPHOS.C:538
 getCellsRunsQAPHOS.C:539
 getCellsRunsQAPHOS.C:540
 getCellsRunsQAPHOS.C:541
 getCellsRunsQAPHOS.C:542
 getCellsRunsQAPHOS.C:543
 getCellsRunsQAPHOS.C:544
 getCellsRunsQAPHOS.C:545
 getCellsRunsQAPHOS.C:546
 getCellsRunsQAPHOS.C:547
 getCellsRunsQAPHOS.C:548
 getCellsRunsQAPHOS.C:549
 getCellsRunsQAPHOS.C:550
 getCellsRunsQAPHOS.C:551
 getCellsRunsQAPHOS.C:552
 getCellsRunsQAPHOS.C:553
 getCellsRunsQAPHOS.C:554
 getCellsRunsQAPHOS.C:555
 getCellsRunsQAPHOS.C:556
 getCellsRunsQAPHOS.C:557
 getCellsRunsQAPHOS.C:558
 getCellsRunsQAPHOS.C:559
 getCellsRunsQAPHOS.C:560
 getCellsRunsQAPHOS.C:561
 getCellsRunsQAPHOS.C:562
 getCellsRunsQAPHOS.C:563
 getCellsRunsQAPHOS.C:564
 getCellsRunsQAPHOS.C:565
 getCellsRunsQAPHOS.C:566
 getCellsRunsQAPHOS.C:567
 getCellsRunsQAPHOS.C:568
 getCellsRunsQAPHOS.C:569
 getCellsRunsQAPHOS.C:570
 getCellsRunsQAPHOS.C:571
 getCellsRunsQAPHOS.C:572
 getCellsRunsQAPHOS.C:573
 getCellsRunsQAPHOS.C:574
 getCellsRunsQAPHOS.C:575
 getCellsRunsQAPHOS.C:576
 getCellsRunsQAPHOS.C:577
 getCellsRunsQAPHOS.C:578
 getCellsRunsQAPHOS.C:579
 getCellsRunsQAPHOS.C:580
 getCellsRunsQAPHOS.C:581
 getCellsRunsQAPHOS.C:582
 getCellsRunsQAPHOS.C:583
 getCellsRunsQAPHOS.C:584
 getCellsRunsQAPHOS.C:585
 getCellsRunsQAPHOS.C:586
 getCellsRunsQAPHOS.C:587
 getCellsRunsQAPHOS.C:588
 getCellsRunsQAPHOS.C:589
 getCellsRunsQAPHOS.C:590
 getCellsRunsQAPHOS.C:591
 getCellsRunsQAPHOS.C:592
 getCellsRunsQAPHOS.C:593
 getCellsRunsQAPHOS.C:594
 getCellsRunsQAPHOS.C:595
 getCellsRunsQAPHOS.C:596
 getCellsRunsQAPHOS.C:597
 getCellsRunsQAPHOS.C:598
 getCellsRunsQAPHOS.C:599
 getCellsRunsQAPHOS.C:600
 getCellsRunsQAPHOS.C:601
 getCellsRunsQAPHOS.C:602
 getCellsRunsQAPHOS.C:603
 getCellsRunsQAPHOS.C:604
 getCellsRunsQAPHOS.C:605
 getCellsRunsQAPHOS.C:606
 getCellsRunsQAPHOS.C:607
 getCellsRunsQAPHOS.C:608
 getCellsRunsQAPHOS.C:609
 getCellsRunsQAPHOS.C:610
 getCellsRunsQAPHOS.C:611
 getCellsRunsQAPHOS.C:612
 getCellsRunsQAPHOS.C:613
 getCellsRunsQAPHOS.C:614
 getCellsRunsQAPHOS.C:615
 getCellsRunsQAPHOS.C:616
 getCellsRunsQAPHOS.C:617
 getCellsRunsQAPHOS.C:618
 getCellsRunsQAPHOS.C:619
 getCellsRunsQAPHOS.C:620
 getCellsRunsQAPHOS.C:621
 getCellsRunsQAPHOS.C:622
 getCellsRunsQAPHOS.C:623
 getCellsRunsQAPHOS.C:624
 getCellsRunsQAPHOS.C:625
 getCellsRunsQAPHOS.C:626
 getCellsRunsQAPHOS.C:627
 getCellsRunsQAPHOS.C:628
 getCellsRunsQAPHOS.C:629
 getCellsRunsQAPHOS.C:630
 getCellsRunsQAPHOS.C:631
 getCellsRunsQAPHOS.C:632
 getCellsRunsQAPHOS.C:633
 getCellsRunsQAPHOS.C:634
 getCellsRunsQAPHOS.C:635
 getCellsRunsQAPHOS.C:636
 getCellsRunsQAPHOS.C:637
 getCellsRunsQAPHOS.C:638
 getCellsRunsQAPHOS.C:639
 getCellsRunsQAPHOS.C:640
 getCellsRunsQAPHOS.C:641
 getCellsRunsQAPHOS.C:642
 getCellsRunsQAPHOS.C:643
 getCellsRunsQAPHOS.C:644
 getCellsRunsQAPHOS.C:645
 getCellsRunsQAPHOS.C:646
 getCellsRunsQAPHOS.C:647
 getCellsRunsQAPHOS.C:648
 getCellsRunsQAPHOS.C:649
 getCellsRunsQAPHOS.C:650
 getCellsRunsQAPHOS.C:651
 getCellsRunsQAPHOS.C:652
 getCellsRunsQAPHOS.C:653
 getCellsRunsQAPHOS.C:654
 getCellsRunsQAPHOS.C:655
 getCellsRunsQAPHOS.C:656
 getCellsRunsQAPHOS.C:657
 getCellsRunsQAPHOS.C:658
 getCellsRunsQAPHOS.C:659
 getCellsRunsQAPHOS.C:660
 getCellsRunsQAPHOS.C:661
 getCellsRunsQAPHOS.C:662
 getCellsRunsQAPHOS.C:663
 getCellsRunsQAPHOS.C:664
 getCellsRunsQAPHOS.C:665
 getCellsRunsQAPHOS.C:666
 getCellsRunsQAPHOS.C:667
 getCellsRunsQAPHOS.C:668
 getCellsRunsQAPHOS.C:669
 getCellsRunsQAPHOS.C:670
 getCellsRunsQAPHOS.C:671
 getCellsRunsQAPHOS.C:672
 getCellsRunsQAPHOS.C:673
 getCellsRunsQAPHOS.C:674
 getCellsRunsQAPHOS.C:675
 getCellsRunsQAPHOS.C:676
 getCellsRunsQAPHOS.C:677
 getCellsRunsQAPHOS.C:678
 getCellsRunsQAPHOS.C:679
 getCellsRunsQAPHOS.C:680
 getCellsRunsQAPHOS.C:681
 getCellsRunsQAPHOS.C:682
 getCellsRunsQAPHOS.C:683
 getCellsRunsQAPHOS.C:684
 getCellsRunsQAPHOS.C:685
 getCellsRunsQAPHOS.C:686
 getCellsRunsQAPHOS.C:687
 getCellsRunsQAPHOS.C:688
 getCellsRunsQAPHOS.C:689
 getCellsRunsQAPHOS.C:690
 getCellsRunsQAPHOS.C:691
 getCellsRunsQAPHOS.C:692
 getCellsRunsQAPHOS.C:693
 getCellsRunsQAPHOS.C:694
 getCellsRunsQAPHOS.C:695
 getCellsRunsQAPHOS.C:696
 getCellsRunsQAPHOS.C:697
 getCellsRunsQAPHOS.C:698
 getCellsRunsQAPHOS.C:699
 getCellsRunsQAPHOS.C:700
 getCellsRunsQAPHOS.C:701
 getCellsRunsQAPHOS.C:702
 getCellsRunsQAPHOS.C:703
 getCellsRunsQAPHOS.C:704
 getCellsRunsQAPHOS.C:705
 getCellsRunsQAPHOS.C:706
 getCellsRunsQAPHOS.C:707
 getCellsRunsQAPHOS.C:708
 getCellsRunsQAPHOS.C:709
 getCellsRunsQAPHOS.C:710
 getCellsRunsQAPHOS.C:711
 getCellsRunsQAPHOS.C:712
 getCellsRunsQAPHOS.C:713
 getCellsRunsQAPHOS.C:714
 getCellsRunsQAPHOS.C:715
 getCellsRunsQAPHOS.C:716
 getCellsRunsQAPHOS.C:717
 getCellsRunsQAPHOS.C:718
 getCellsRunsQAPHOS.C:719
 getCellsRunsQAPHOS.C:720
 getCellsRunsQAPHOS.C:721
 getCellsRunsQAPHOS.C:722
 getCellsRunsQAPHOS.C:723
 getCellsRunsQAPHOS.C:724
 getCellsRunsQAPHOS.C:725
 getCellsRunsQAPHOS.C:726
 getCellsRunsQAPHOS.C:727
 getCellsRunsQAPHOS.C:728
 getCellsRunsQAPHOS.C:729
 getCellsRunsQAPHOS.C:730
 getCellsRunsQAPHOS.C:731
 getCellsRunsQAPHOS.C:732
 getCellsRunsQAPHOS.C:733
 getCellsRunsQAPHOS.C:734
 getCellsRunsQAPHOS.C:735
 getCellsRunsQAPHOS.C:736
 getCellsRunsQAPHOS.C:737
 getCellsRunsQAPHOS.C:738
 getCellsRunsQAPHOS.C:739
 getCellsRunsQAPHOS.C:740
 getCellsRunsQAPHOS.C:741
 getCellsRunsQAPHOS.C:742
 getCellsRunsQAPHOS.C:743
 getCellsRunsQAPHOS.C:744
 getCellsRunsQAPHOS.C:745
 getCellsRunsQAPHOS.C:746
 getCellsRunsQAPHOS.C:747
 getCellsRunsQAPHOS.C:748
 getCellsRunsQAPHOS.C:749
 getCellsRunsQAPHOS.C:750
 getCellsRunsQAPHOS.C:751
 getCellsRunsQAPHOS.C:752
 getCellsRunsQAPHOS.C:753
 getCellsRunsQAPHOS.C:754
 getCellsRunsQAPHOS.C:755
 getCellsRunsQAPHOS.C:756
 getCellsRunsQAPHOS.C:757
 getCellsRunsQAPHOS.C:758
 getCellsRunsQAPHOS.C:759
 getCellsRunsQAPHOS.C:760
 getCellsRunsQAPHOS.C:761
 getCellsRunsQAPHOS.C:762
 getCellsRunsQAPHOS.C:763
 getCellsRunsQAPHOS.C:764
 getCellsRunsQAPHOS.C:765
 getCellsRunsQAPHOS.C:766
 getCellsRunsQAPHOS.C:767
 getCellsRunsQAPHOS.C:768
 getCellsRunsQAPHOS.C:769
 getCellsRunsQAPHOS.C:770
 getCellsRunsQAPHOS.C:771
 getCellsRunsQAPHOS.C:772
 getCellsRunsQAPHOS.C:773
 getCellsRunsQAPHOS.C:774
 getCellsRunsQAPHOS.C:775
 getCellsRunsQAPHOS.C:776
 getCellsRunsQAPHOS.C:777
 getCellsRunsQAPHOS.C:778
 getCellsRunsQAPHOS.C:779
 getCellsRunsQAPHOS.C:780
 getCellsRunsQAPHOS.C:781
 getCellsRunsQAPHOS.C:782
 getCellsRunsQAPHOS.C:783
 getCellsRunsQAPHOS.C:784
 getCellsRunsQAPHOS.C:785
 getCellsRunsQAPHOS.C:786
 getCellsRunsQAPHOS.C:787
 getCellsRunsQAPHOS.C:788
 getCellsRunsQAPHOS.C:789
 getCellsRunsQAPHOS.C:790
 getCellsRunsQAPHOS.C:791
 getCellsRunsQAPHOS.C:792
 getCellsRunsQAPHOS.C:793
 getCellsRunsQAPHOS.C:794
 getCellsRunsQAPHOS.C:795
 getCellsRunsQAPHOS.C:796
 getCellsRunsQAPHOS.C:797
 getCellsRunsQAPHOS.C:798
 getCellsRunsQAPHOS.C:799
 getCellsRunsQAPHOS.C:800
 getCellsRunsQAPHOS.C:801
 getCellsRunsQAPHOS.C:802
 getCellsRunsQAPHOS.C:803
 getCellsRunsQAPHOS.C:804
 getCellsRunsQAPHOS.C:805
 getCellsRunsQAPHOS.C:806
 getCellsRunsQAPHOS.C:807
 getCellsRunsQAPHOS.C:808
 getCellsRunsQAPHOS.C:809
 getCellsRunsQAPHOS.C:810
 getCellsRunsQAPHOS.C:811
 getCellsRunsQAPHOS.C:812
 getCellsRunsQAPHOS.C:813
 getCellsRunsQAPHOS.C:814
 getCellsRunsQAPHOS.C:815
 getCellsRunsQAPHOS.C:816
 getCellsRunsQAPHOS.C:817
 getCellsRunsQAPHOS.C:818
 getCellsRunsQAPHOS.C:819
 getCellsRunsQAPHOS.C:820
 getCellsRunsQAPHOS.C:821
 getCellsRunsQAPHOS.C:822
 getCellsRunsQAPHOS.C:823
 getCellsRunsQAPHOS.C:824
 getCellsRunsQAPHOS.C:825
 getCellsRunsQAPHOS.C:826
 getCellsRunsQAPHOS.C:827
 getCellsRunsQAPHOS.C:828
 getCellsRunsQAPHOS.C:829
 getCellsRunsQAPHOS.C:830
 getCellsRunsQAPHOS.C:831
 getCellsRunsQAPHOS.C:832
 getCellsRunsQAPHOS.C:833
 getCellsRunsQAPHOS.C:834
 getCellsRunsQAPHOS.C:835
 getCellsRunsQAPHOS.C:836
 getCellsRunsQAPHOS.C:837
 getCellsRunsQAPHOS.C:838
 getCellsRunsQAPHOS.C:839
 getCellsRunsQAPHOS.C:840
 getCellsRunsQAPHOS.C:841
 getCellsRunsQAPHOS.C:842
 getCellsRunsQAPHOS.C:843
 getCellsRunsQAPHOS.C:844
 getCellsRunsQAPHOS.C:845
 getCellsRunsQAPHOS.C:846
 getCellsRunsQAPHOS.C:847
 getCellsRunsQAPHOS.C:848
 getCellsRunsQAPHOS.C:849
 getCellsRunsQAPHOS.C:850
 getCellsRunsQAPHOS.C:851
 getCellsRunsQAPHOS.C:852
 getCellsRunsQAPHOS.C:853
 getCellsRunsQAPHOS.C:854
 getCellsRunsQAPHOS.C:855
 getCellsRunsQAPHOS.C:856
 getCellsRunsQAPHOS.C:857
 getCellsRunsQAPHOS.C:858
 getCellsRunsQAPHOS.C:859
 getCellsRunsQAPHOS.C:860
 getCellsRunsQAPHOS.C:861
 getCellsRunsQAPHOS.C:862
 getCellsRunsQAPHOS.C:863
 getCellsRunsQAPHOS.C:864
 getCellsRunsQAPHOS.C:865
 getCellsRunsQAPHOS.C:866
 getCellsRunsQAPHOS.C:867
 getCellsRunsQAPHOS.C:868
 getCellsRunsQAPHOS.C:869
 getCellsRunsQAPHOS.C:870
 getCellsRunsQAPHOS.C:871
 getCellsRunsQAPHOS.C:872
 getCellsRunsQAPHOS.C:873
 getCellsRunsQAPHOS.C:874
 getCellsRunsQAPHOS.C:875
 getCellsRunsQAPHOS.C:876
 getCellsRunsQAPHOS.C:877
 getCellsRunsQAPHOS.C:878
 getCellsRunsQAPHOS.C:879
 getCellsRunsQAPHOS.C:880
 getCellsRunsQAPHOS.C:881
 getCellsRunsQAPHOS.C:882
 getCellsRunsQAPHOS.C:883
 getCellsRunsQAPHOS.C:884
 getCellsRunsQAPHOS.C:885
 getCellsRunsQAPHOS.C:886
 getCellsRunsQAPHOS.C:887
 getCellsRunsQAPHOS.C:888
 getCellsRunsQAPHOS.C:889
 getCellsRunsQAPHOS.C:890
 getCellsRunsQAPHOS.C:891
 getCellsRunsQAPHOS.C:892
 getCellsRunsQAPHOS.C:893
 getCellsRunsQAPHOS.C:894
 getCellsRunsQAPHOS.C:895
 getCellsRunsQAPHOS.C:896
 getCellsRunsQAPHOS.C:897
 getCellsRunsQAPHOS.C:898
 getCellsRunsQAPHOS.C:899
 getCellsRunsQAPHOS.C:900
 getCellsRunsQAPHOS.C:901
 getCellsRunsQAPHOS.C:902
 getCellsRunsQAPHOS.C:903
 getCellsRunsQAPHOS.C:904
 getCellsRunsQAPHOS.C:905
 getCellsRunsQAPHOS.C:906
 getCellsRunsQAPHOS.C:907
 getCellsRunsQAPHOS.C:908
 getCellsRunsQAPHOS.C:909
 getCellsRunsQAPHOS.C:910
 getCellsRunsQAPHOS.C:911
 getCellsRunsQAPHOS.C:912
 getCellsRunsQAPHOS.C:913
 getCellsRunsQAPHOS.C:914
 getCellsRunsQAPHOS.C:915
 getCellsRunsQAPHOS.C:916
 getCellsRunsQAPHOS.C:917
 getCellsRunsQAPHOS.C:918
 getCellsRunsQAPHOS.C:919
 getCellsRunsQAPHOS.C:920
 getCellsRunsQAPHOS.C:921
 getCellsRunsQAPHOS.C:922
 getCellsRunsQAPHOS.C:923
 getCellsRunsQAPHOS.C:924
 getCellsRunsQAPHOS.C:925
 getCellsRunsQAPHOS.C:926
 getCellsRunsQAPHOS.C:927
 getCellsRunsQAPHOS.C:928
 getCellsRunsQAPHOS.C:929
 getCellsRunsQAPHOS.C:930
 getCellsRunsQAPHOS.C:931
 getCellsRunsQAPHOS.C:932
 getCellsRunsQAPHOS.C:933
 getCellsRunsQAPHOS.C:934
 getCellsRunsQAPHOS.C:935
 getCellsRunsQAPHOS.C:936
 getCellsRunsQAPHOS.C:937
 getCellsRunsQAPHOS.C:938
 getCellsRunsQAPHOS.C:939
 getCellsRunsQAPHOS.C:940
 getCellsRunsQAPHOS.C:941
 getCellsRunsQAPHOS.C:942
 getCellsRunsQAPHOS.C:943
 getCellsRunsQAPHOS.C:944
 getCellsRunsQAPHOS.C:945
 getCellsRunsQAPHOS.C:946
 getCellsRunsQAPHOS.C:947
 getCellsRunsQAPHOS.C:948
 getCellsRunsQAPHOS.C:949
 getCellsRunsQAPHOS.C:950
 getCellsRunsQAPHOS.C:951
 getCellsRunsQAPHOS.C:952
 getCellsRunsQAPHOS.C:953
 getCellsRunsQAPHOS.C:954
 getCellsRunsQAPHOS.C:955
 getCellsRunsQAPHOS.C:956
 getCellsRunsQAPHOS.C:957
 getCellsRunsQAPHOS.C:958
 getCellsRunsQAPHOS.C:959
 getCellsRunsQAPHOS.C:960
 getCellsRunsQAPHOS.C:961
 getCellsRunsQAPHOS.C:962
 getCellsRunsQAPHOS.C:963
 getCellsRunsQAPHOS.C:964
 getCellsRunsQAPHOS.C:965
 getCellsRunsQAPHOS.C:966
 getCellsRunsQAPHOS.C:967
 getCellsRunsQAPHOS.C:968
 getCellsRunsQAPHOS.C:969
 getCellsRunsQAPHOS.C:970
 getCellsRunsQAPHOS.C:971
 getCellsRunsQAPHOS.C:972
 getCellsRunsQAPHOS.C:973
 getCellsRunsQAPHOS.C:974
 getCellsRunsQAPHOS.C:975
 getCellsRunsQAPHOS.C:976
 getCellsRunsQAPHOS.C:977
 getCellsRunsQAPHOS.C:978
 getCellsRunsQAPHOS.C:979
 getCellsRunsQAPHOS.C:980
 getCellsRunsQAPHOS.C:981
 getCellsRunsQAPHOS.C:982
 getCellsRunsQAPHOS.C:983
 getCellsRunsQAPHOS.C:984
 getCellsRunsQAPHOS.C:985
 getCellsRunsQAPHOS.C:986
 getCellsRunsQAPHOS.C:987
 getCellsRunsQAPHOS.C:988
 getCellsRunsQAPHOS.C:989
 getCellsRunsQAPHOS.C:990
 getCellsRunsQAPHOS.C:991
 getCellsRunsQAPHOS.C:992
 getCellsRunsQAPHOS.C:993
 getCellsRunsQAPHOS.C:994
 getCellsRunsQAPHOS.C:995
 getCellsRunsQAPHOS.C:996
 getCellsRunsQAPHOS.C:997
 getCellsRunsQAPHOS.C:998
 getCellsRunsQAPHOS.C:999
 getCellsRunsQAPHOS.C:1000
 getCellsRunsQAPHOS.C:1001
 getCellsRunsQAPHOS.C:1002
 getCellsRunsQAPHOS.C:1003
 getCellsRunsQAPHOS.C:1004
 getCellsRunsQAPHOS.C:1005
 getCellsRunsQAPHOS.C:1006
 getCellsRunsQAPHOS.C:1007
 getCellsRunsQAPHOS.C:1008
 getCellsRunsQAPHOS.C:1009
 getCellsRunsQAPHOS.C:1010
 getCellsRunsQAPHOS.C:1011
 getCellsRunsQAPHOS.C:1012
 getCellsRunsQAPHOS.C:1013
 getCellsRunsQAPHOS.C:1014
 getCellsRunsQAPHOS.C:1015
 getCellsRunsQAPHOS.C:1016
 getCellsRunsQAPHOS.C:1017
 getCellsRunsQAPHOS.C:1018
 getCellsRunsQAPHOS.C:1019
 getCellsRunsQAPHOS.C:1020
 getCellsRunsQAPHOS.C:1021
 getCellsRunsQAPHOS.C:1022
 getCellsRunsQAPHOS.C:1023
 getCellsRunsQAPHOS.C:1024
 getCellsRunsQAPHOS.C:1025
 getCellsRunsQAPHOS.C:1026
 getCellsRunsQAPHOS.C:1027
 getCellsRunsQAPHOS.C:1028
 getCellsRunsQAPHOS.C:1029
 getCellsRunsQAPHOS.C:1030
 getCellsRunsQAPHOS.C:1031
 getCellsRunsQAPHOS.C:1032
 getCellsRunsQAPHOS.C:1033
 getCellsRunsQAPHOS.C:1034
 getCellsRunsQAPHOS.C:1035
 getCellsRunsQAPHOS.C:1036
 getCellsRunsQAPHOS.C:1037
 getCellsRunsQAPHOS.C:1038
 getCellsRunsQAPHOS.C:1039
 getCellsRunsQAPHOS.C:1040
 getCellsRunsQAPHOS.C:1041
 getCellsRunsQAPHOS.C:1042
 getCellsRunsQAPHOS.C:1043
 getCellsRunsQAPHOS.C:1044
 getCellsRunsQAPHOS.C:1045
 getCellsRunsQAPHOS.C:1046
 getCellsRunsQAPHOS.C:1047
 getCellsRunsQAPHOS.C:1048
 getCellsRunsQAPHOS.C:1049
 getCellsRunsQAPHOS.C:1050
 getCellsRunsQAPHOS.C:1051
 getCellsRunsQAPHOS.C:1052
 getCellsRunsQAPHOS.C:1053
 getCellsRunsQAPHOS.C:1054
 getCellsRunsQAPHOS.C:1055
 getCellsRunsQAPHOS.C:1056
 getCellsRunsQAPHOS.C:1057
 getCellsRunsQAPHOS.C:1058
 getCellsRunsQAPHOS.C:1059
 getCellsRunsQAPHOS.C:1060
 getCellsRunsQAPHOS.C:1061
 getCellsRunsQAPHOS.C:1062
 getCellsRunsQAPHOS.C:1063
 getCellsRunsQAPHOS.C:1064
 getCellsRunsQAPHOS.C:1065
 getCellsRunsQAPHOS.C:1066
 getCellsRunsQAPHOS.C:1067
 getCellsRunsQAPHOS.C:1068
 getCellsRunsQAPHOS.C:1069
 getCellsRunsQAPHOS.C:1070
 getCellsRunsQAPHOS.C:1071
 getCellsRunsQAPHOS.C:1072
 getCellsRunsQAPHOS.C:1073
 getCellsRunsQAPHOS.C:1074
 getCellsRunsQAPHOS.C:1075
 getCellsRunsQAPHOS.C:1076
 getCellsRunsQAPHOS.C:1077
 getCellsRunsQAPHOS.C:1078
 getCellsRunsQAPHOS.C:1079
 getCellsRunsQAPHOS.C:1080
 getCellsRunsQAPHOS.C:1081
 getCellsRunsQAPHOS.C:1082
 getCellsRunsQAPHOS.C:1083
 getCellsRunsQAPHOS.C:1084
 getCellsRunsQAPHOS.C:1085
 getCellsRunsQAPHOS.C:1086
 getCellsRunsQAPHOS.C:1087
 getCellsRunsQAPHOS.C:1088
 getCellsRunsQAPHOS.C:1089
 getCellsRunsQAPHOS.C:1090
 getCellsRunsQAPHOS.C:1091
 getCellsRunsQAPHOS.C:1092
 getCellsRunsQAPHOS.C:1093
 getCellsRunsQAPHOS.C:1094
 getCellsRunsQAPHOS.C:1095
 getCellsRunsQAPHOS.C:1096
 getCellsRunsQAPHOS.C:1097
 getCellsRunsQAPHOS.C:1098
 getCellsRunsQAPHOS.C:1099
 getCellsRunsQAPHOS.C:1100
 getCellsRunsQAPHOS.C:1101
 getCellsRunsQAPHOS.C:1102
 getCellsRunsQAPHOS.C:1103
 getCellsRunsQAPHOS.C:1104
 getCellsRunsQAPHOS.C:1105
 getCellsRunsQAPHOS.C:1106
 getCellsRunsQAPHOS.C:1107
 getCellsRunsQAPHOS.C:1108
 getCellsRunsQAPHOS.C:1109
 getCellsRunsQAPHOS.C:1110
 getCellsRunsQAPHOS.C:1111
 getCellsRunsQAPHOS.C:1112
 getCellsRunsQAPHOS.C:1113
 getCellsRunsQAPHOS.C:1114
 getCellsRunsQAPHOS.C:1115
 getCellsRunsQAPHOS.C:1116
 getCellsRunsQAPHOS.C:1117
 getCellsRunsQAPHOS.C:1118
 getCellsRunsQAPHOS.C:1119
 getCellsRunsQAPHOS.C:1120
 getCellsRunsQAPHOS.C:1121
 getCellsRunsQAPHOS.C:1122
 getCellsRunsQAPHOS.C:1123
 getCellsRunsQAPHOS.C:1124
 getCellsRunsQAPHOS.C:1125
 getCellsRunsQAPHOS.C:1126
 getCellsRunsQAPHOS.C:1127
 getCellsRunsQAPHOS.C:1128
 getCellsRunsQAPHOS.C:1129
 getCellsRunsQAPHOS.C:1130
 getCellsRunsQAPHOS.C:1131
 getCellsRunsQAPHOS.C:1132
 getCellsRunsQAPHOS.C:1133
 getCellsRunsQAPHOS.C:1134
 getCellsRunsQAPHOS.C:1135
 getCellsRunsQAPHOS.C:1136
 getCellsRunsQAPHOS.C:1137
 getCellsRunsQAPHOS.C:1138
 getCellsRunsQAPHOS.C:1139
 getCellsRunsQAPHOS.C:1140
 getCellsRunsQAPHOS.C:1141
 getCellsRunsQAPHOS.C:1142
 getCellsRunsQAPHOS.C:1143
 getCellsRunsQAPHOS.C:1144
 getCellsRunsQAPHOS.C:1145
 getCellsRunsQAPHOS.C:1146
 getCellsRunsQAPHOS.C:1147
 getCellsRunsQAPHOS.C:1148
 getCellsRunsQAPHOS.C:1149
 getCellsRunsQAPHOS.C:1150
 getCellsRunsQAPHOS.C:1151
 getCellsRunsQAPHOS.C:1152
 getCellsRunsQAPHOS.C:1153
 getCellsRunsQAPHOS.C:1154
 getCellsRunsQAPHOS.C:1155
 getCellsRunsQAPHOS.C:1156
 getCellsRunsQAPHOS.C:1157
 getCellsRunsQAPHOS.C:1158
 getCellsRunsQAPHOS.C:1159
 getCellsRunsQAPHOS.C:1160
 getCellsRunsQAPHOS.C:1161
 getCellsRunsQAPHOS.C:1162
 getCellsRunsQAPHOS.C:1163
 getCellsRunsQAPHOS.C:1164
 getCellsRunsQAPHOS.C:1165
 getCellsRunsQAPHOS.C:1166
 getCellsRunsQAPHOS.C:1167
 getCellsRunsQAPHOS.C:1168
 getCellsRunsQAPHOS.C:1169
 getCellsRunsQAPHOS.C:1170
 getCellsRunsQAPHOS.C:1171
 getCellsRunsQAPHOS.C:1172
 getCellsRunsQAPHOS.C:1173
 getCellsRunsQAPHOS.C:1174
 getCellsRunsQAPHOS.C:1175
 getCellsRunsQAPHOS.C:1176
 getCellsRunsQAPHOS.C:1177
 getCellsRunsQAPHOS.C:1178
 getCellsRunsQAPHOS.C:1179
 getCellsRunsQAPHOS.C:1180
 getCellsRunsQAPHOS.C:1181
 getCellsRunsQAPHOS.C:1182
 getCellsRunsQAPHOS.C:1183
 getCellsRunsQAPHOS.C:1184
 getCellsRunsQAPHOS.C:1185
 getCellsRunsQAPHOS.C:1186
 getCellsRunsQAPHOS.C:1187
 getCellsRunsQAPHOS.C:1188
 getCellsRunsQAPHOS.C:1189
 getCellsRunsQAPHOS.C:1190
 getCellsRunsQAPHOS.C:1191
 getCellsRunsQAPHOS.C:1192
 getCellsRunsQAPHOS.C:1193
 getCellsRunsQAPHOS.C:1194
 getCellsRunsQAPHOS.C:1195
 getCellsRunsQAPHOS.C:1196
 getCellsRunsQAPHOS.C:1197
 getCellsRunsQAPHOS.C:1198
 getCellsRunsQAPHOS.C:1199
 getCellsRunsQAPHOS.C:1200
 getCellsRunsQAPHOS.C:1201
 getCellsRunsQAPHOS.C:1202
 getCellsRunsQAPHOS.C:1203
 getCellsRunsQAPHOS.C:1204
 getCellsRunsQAPHOS.C:1205
 getCellsRunsQAPHOS.C:1206
 getCellsRunsQAPHOS.C:1207
 getCellsRunsQAPHOS.C:1208
 getCellsRunsQAPHOS.C:1209
 getCellsRunsQAPHOS.C:1210
 getCellsRunsQAPHOS.C:1211
 getCellsRunsQAPHOS.C:1212
 getCellsRunsQAPHOS.C:1213
 getCellsRunsQAPHOS.C:1214
 getCellsRunsQAPHOS.C:1215
 getCellsRunsQAPHOS.C:1216
 getCellsRunsQAPHOS.C:1217
 getCellsRunsQAPHOS.C:1218
 getCellsRunsQAPHOS.C:1219
 getCellsRunsQAPHOS.C:1220
 getCellsRunsQAPHOS.C:1221
 getCellsRunsQAPHOS.C:1222
 getCellsRunsQAPHOS.C:1223
 getCellsRunsQAPHOS.C:1224
 getCellsRunsQAPHOS.C:1225
 getCellsRunsQAPHOS.C:1226
 getCellsRunsQAPHOS.C:1227
 getCellsRunsQAPHOS.C:1228
 getCellsRunsQAPHOS.C:1229
 getCellsRunsQAPHOS.C:1230
 getCellsRunsQAPHOS.C:1231
 getCellsRunsQAPHOS.C:1232
 getCellsRunsQAPHOS.C:1233
 getCellsRunsQAPHOS.C:1234
 getCellsRunsQAPHOS.C:1235
 getCellsRunsQAPHOS.C:1236
 getCellsRunsQAPHOS.C:1237
 getCellsRunsQAPHOS.C:1238
 getCellsRunsQAPHOS.C:1239
 getCellsRunsQAPHOS.C:1240
 getCellsRunsQAPHOS.C:1241
 getCellsRunsQAPHOS.C:1242
 getCellsRunsQAPHOS.C:1243
 getCellsRunsQAPHOS.C:1244
 getCellsRunsQAPHOS.C:1245
 getCellsRunsQAPHOS.C:1246
 getCellsRunsQAPHOS.C:1247
 getCellsRunsQAPHOS.C:1248
 getCellsRunsQAPHOS.C:1249
 getCellsRunsQAPHOS.C:1250
 getCellsRunsQAPHOS.C:1251
 getCellsRunsQAPHOS.C:1252
 getCellsRunsQAPHOS.C:1253
 getCellsRunsQAPHOS.C:1254
 getCellsRunsQAPHOS.C:1255
 getCellsRunsQAPHOS.C:1256
 getCellsRunsQAPHOS.C:1257
 getCellsRunsQAPHOS.C:1258
 getCellsRunsQAPHOS.C:1259
 getCellsRunsQAPHOS.C:1260
 getCellsRunsQAPHOS.C:1261
 getCellsRunsQAPHOS.C:1262
 getCellsRunsQAPHOS.C:1263
 getCellsRunsQAPHOS.C:1264
 getCellsRunsQAPHOS.C:1265
 getCellsRunsQAPHOS.C:1266
 getCellsRunsQAPHOS.C:1267
 getCellsRunsQAPHOS.C:1268
 getCellsRunsQAPHOS.C:1269
 getCellsRunsQAPHOS.C:1270
 getCellsRunsQAPHOS.C:1271
 getCellsRunsQAPHOS.C:1272
 getCellsRunsQAPHOS.C:1273
 getCellsRunsQAPHOS.C:1274
 getCellsRunsQAPHOS.C:1275
 getCellsRunsQAPHOS.C:1276
 getCellsRunsQAPHOS.C:1277
 getCellsRunsQAPHOS.C:1278
 getCellsRunsQAPHOS.C:1279
 getCellsRunsQAPHOS.C:1280
 getCellsRunsQAPHOS.C:1281
 getCellsRunsQAPHOS.C:1282
 getCellsRunsQAPHOS.C:1283
 getCellsRunsQAPHOS.C:1284
 getCellsRunsQAPHOS.C:1285
 getCellsRunsQAPHOS.C:1286
 getCellsRunsQAPHOS.C:1287
 getCellsRunsQAPHOS.C:1288
 getCellsRunsQAPHOS.C:1289
 getCellsRunsQAPHOS.C:1290
 getCellsRunsQAPHOS.C:1291
 getCellsRunsQAPHOS.C:1292
 getCellsRunsQAPHOS.C:1293
 getCellsRunsQAPHOS.C:1294
 getCellsRunsQAPHOS.C:1295
 getCellsRunsQAPHOS.C:1296
 getCellsRunsQAPHOS.C:1297
 getCellsRunsQAPHOS.C:1298
 getCellsRunsQAPHOS.C:1299
 getCellsRunsQAPHOS.C:1300
 getCellsRunsQAPHOS.C:1301
 getCellsRunsQAPHOS.C:1302
 getCellsRunsQAPHOS.C:1303
 getCellsRunsQAPHOS.C:1304
 getCellsRunsQAPHOS.C:1305
 getCellsRunsQAPHOS.C:1306
 getCellsRunsQAPHOS.C:1307
 getCellsRunsQAPHOS.C:1308
 getCellsRunsQAPHOS.C:1309
 getCellsRunsQAPHOS.C:1310
 getCellsRunsQAPHOS.C:1311
 getCellsRunsQAPHOS.C:1312
 getCellsRunsQAPHOS.C:1313
 getCellsRunsQAPHOS.C:1314
 getCellsRunsQAPHOS.C:1315
 getCellsRunsQAPHOS.C:1316
 getCellsRunsQAPHOS.C:1317
 getCellsRunsQAPHOS.C:1318
 getCellsRunsQAPHOS.C:1319
 getCellsRunsQAPHOS.C:1320
 getCellsRunsQAPHOS.C:1321
 getCellsRunsQAPHOS.C:1322
 getCellsRunsQAPHOS.C:1323
 getCellsRunsQAPHOS.C:1324
 getCellsRunsQAPHOS.C:1325
 getCellsRunsQAPHOS.C:1326
 getCellsRunsQAPHOS.C:1327
 getCellsRunsQAPHOS.C:1328
 getCellsRunsQAPHOS.C:1329
 getCellsRunsQAPHOS.C:1330
 getCellsRunsQAPHOS.C:1331
 getCellsRunsQAPHOS.C:1332
 getCellsRunsQAPHOS.C:1333
 getCellsRunsQAPHOS.C:1334
 getCellsRunsQAPHOS.C:1335
 getCellsRunsQAPHOS.C:1336
 getCellsRunsQAPHOS.C:1337
 getCellsRunsQAPHOS.C:1338
 getCellsRunsQAPHOS.C:1339
 getCellsRunsQAPHOS.C:1340
 getCellsRunsQAPHOS.C:1341
 getCellsRunsQAPHOS.C:1342
 getCellsRunsQAPHOS.C:1343
 getCellsRunsQAPHOS.C:1344
 getCellsRunsQAPHOS.C:1345
 getCellsRunsQAPHOS.C:1346
 getCellsRunsQAPHOS.C:1347
 getCellsRunsQAPHOS.C:1348
 getCellsRunsQAPHOS.C:1349
 getCellsRunsQAPHOS.C:1350
 getCellsRunsQAPHOS.C:1351
 getCellsRunsQAPHOS.C:1352
 getCellsRunsQAPHOS.C:1353
 getCellsRunsQAPHOS.C:1354
 getCellsRunsQAPHOS.C:1355
 getCellsRunsQAPHOS.C:1356
 getCellsRunsQAPHOS.C:1357
 getCellsRunsQAPHOS.C:1358
 getCellsRunsQAPHOS.C:1359
 getCellsRunsQAPHOS.C:1360
 getCellsRunsQAPHOS.C:1361
 getCellsRunsQAPHOS.C:1362
 getCellsRunsQAPHOS.C:1363
 getCellsRunsQAPHOS.C:1364
 getCellsRunsQAPHOS.C:1365
 getCellsRunsQAPHOS.C:1366
 getCellsRunsQAPHOS.C:1367
 getCellsRunsQAPHOS.C:1368
 getCellsRunsQAPHOS.C:1369
 getCellsRunsQAPHOS.C:1370
 getCellsRunsQAPHOS.C:1371
 getCellsRunsQAPHOS.C:1372
 getCellsRunsQAPHOS.C:1373
 getCellsRunsQAPHOS.C:1374
 getCellsRunsQAPHOS.C:1375
 getCellsRunsQAPHOS.C:1376
 getCellsRunsQAPHOS.C:1377
 getCellsRunsQAPHOS.C:1378
 getCellsRunsQAPHOS.C:1379
 getCellsRunsQAPHOS.C:1380
 getCellsRunsQAPHOS.C:1381
 getCellsRunsQAPHOS.C:1382
 getCellsRunsQAPHOS.C:1383
 getCellsRunsQAPHOS.C:1384
 getCellsRunsQAPHOS.C:1385
 getCellsRunsQAPHOS.C:1386
 getCellsRunsQAPHOS.C:1387
 getCellsRunsQAPHOS.C:1388
 getCellsRunsQAPHOS.C:1389
 getCellsRunsQAPHOS.C:1390
 getCellsRunsQAPHOS.C:1391
 getCellsRunsQAPHOS.C:1392
 getCellsRunsQAPHOS.C:1393
 getCellsRunsQAPHOS.C:1394
 getCellsRunsQAPHOS.C:1395
 getCellsRunsQAPHOS.C:1396
 getCellsRunsQAPHOS.C:1397
 getCellsRunsQAPHOS.C:1398
 getCellsRunsQAPHOS.C:1399
 getCellsRunsQAPHOS.C:1400
 getCellsRunsQAPHOS.C:1401
 getCellsRunsQAPHOS.C:1402
 getCellsRunsQAPHOS.C:1403
 getCellsRunsQAPHOS.C:1404
 getCellsRunsQAPHOS.C:1405
 getCellsRunsQAPHOS.C:1406
 getCellsRunsQAPHOS.C:1407
 getCellsRunsQAPHOS.C:1408
 getCellsRunsQAPHOS.C:1409
 getCellsRunsQAPHOS.C:1410
 getCellsRunsQAPHOS.C:1411
 getCellsRunsQAPHOS.C:1412
 getCellsRunsQAPHOS.C:1413
 getCellsRunsQAPHOS.C:1414
 getCellsRunsQAPHOS.C:1415
 getCellsRunsQAPHOS.C:1416
 getCellsRunsQAPHOS.C:1417
 getCellsRunsQAPHOS.C:1418
 getCellsRunsQAPHOS.C:1419
 getCellsRunsQAPHOS.C:1420
 getCellsRunsQAPHOS.C:1421
 getCellsRunsQAPHOS.C:1422
 getCellsRunsQAPHOS.C:1423
 getCellsRunsQAPHOS.C:1424
 getCellsRunsQAPHOS.C:1425
 getCellsRunsQAPHOS.C:1426
 getCellsRunsQAPHOS.C:1427
 getCellsRunsQAPHOS.C:1428
 getCellsRunsQAPHOS.C:1429
 getCellsRunsQAPHOS.C:1430
 getCellsRunsQAPHOS.C:1431
 getCellsRunsQAPHOS.C:1432
 getCellsRunsQAPHOS.C:1433
 getCellsRunsQAPHOS.C:1434
 getCellsRunsQAPHOS.C:1435
 getCellsRunsQAPHOS.C:1436
 getCellsRunsQAPHOS.C:1437
 getCellsRunsQAPHOS.C:1438
 getCellsRunsQAPHOS.C:1439
 getCellsRunsQAPHOS.C:1440
 getCellsRunsQAPHOS.C:1441
 getCellsRunsQAPHOS.C:1442
 getCellsRunsQAPHOS.C:1443
 getCellsRunsQAPHOS.C:1444
 getCellsRunsQAPHOS.C:1445
 getCellsRunsQAPHOS.C:1446
 getCellsRunsQAPHOS.C:1447
 getCellsRunsQAPHOS.C:1448
 getCellsRunsQAPHOS.C:1449
 getCellsRunsQAPHOS.C:1450
 getCellsRunsQAPHOS.C:1451
 getCellsRunsQAPHOS.C:1452
 getCellsRunsQAPHOS.C:1453
 getCellsRunsQAPHOS.C:1454
 getCellsRunsQAPHOS.C:1455
 getCellsRunsQAPHOS.C:1456
 getCellsRunsQAPHOS.C:1457
 getCellsRunsQAPHOS.C:1458
 getCellsRunsQAPHOS.C:1459
 getCellsRunsQAPHOS.C:1460
 getCellsRunsQAPHOS.C:1461
 getCellsRunsQAPHOS.C:1462
 getCellsRunsQAPHOS.C:1463
 getCellsRunsQAPHOS.C:1464
 getCellsRunsQAPHOS.C:1465
 getCellsRunsQAPHOS.C:1466
 getCellsRunsQAPHOS.C:1467
 getCellsRunsQAPHOS.C:1468
 getCellsRunsQAPHOS.C:1469
 getCellsRunsQAPHOS.C:1470
 getCellsRunsQAPHOS.C:1471
 getCellsRunsQAPHOS.C:1472
 getCellsRunsQAPHOS.C:1473
 getCellsRunsQAPHOS.C:1474
 getCellsRunsQAPHOS.C:1475
 getCellsRunsQAPHOS.C:1476
 getCellsRunsQAPHOS.C:1477
 getCellsRunsQAPHOS.C:1478
 getCellsRunsQAPHOS.C:1479
 getCellsRunsQAPHOS.C:1480
 getCellsRunsQAPHOS.C:1481
 getCellsRunsQAPHOS.C:1482
 getCellsRunsQAPHOS.C:1483
 getCellsRunsQAPHOS.C:1484
 getCellsRunsQAPHOS.C:1485
 getCellsRunsQAPHOS.C:1486
 getCellsRunsQAPHOS.C:1487
 getCellsRunsQAPHOS.C:1488
 getCellsRunsQAPHOS.C:1489
 getCellsRunsQAPHOS.C:1490
 getCellsRunsQAPHOS.C:1491
 getCellsRunsQAPHOS.C:1492
 getCellsRunsQAPHOS.C:1493
 getCellsRunsQAPHOS.C:1494
 getCellsRunsQAPHOS.C:1495
 getCellsRunsQAPHOS.C:1496
 getCellsRunsQAPHOS.C:1497
 getCellsRunsQAPHOS.C:1498
 getCellsRunsQAPHOS.C:1499
 getCellsRunsQAPHOS.C:1500
 getCellsRunsQAPHOS.C:1501
 getCellsRunsQAPHOS.C:1502
 getCellsRunsQAPHOS.C:1503
 getCellsRunsQAPHOS.C:1504
 getCellsRunsQAPHOS.C:1505
 getCellsRunsQAPHOS.C:1506
 getCellsRunsQAPHOS.C:1507
 getCellsRunsQAPHOS.C:1508
 getCellsRunsQAPHOS.C:1509
 getCellsRunsQAPHOS.C:1510
 getCellsRunsQAPHOS.C:1511
 getCellsRunsQAPHOS.C:1512
 getCellsRunsQAPHOS.C:1513
 getCellsRunsQAPHOS.C:1514
 getCellsRunsQAPHOS.C:1515
 getCellsRunsQAPHOS.C:1516
 getCellsRunsQAPHOS.C:1517
 getCellsRunsQAPHOS.C:1518
 getCellsRunsQAPHOS.C:1519
 getCellsRunsQAPHOS.C:1520
 getCellsRunsQAPHOS.C:1521
 getCellsRunsQAPHOS.C:1522
 getCellsRunsQAPHOS.C:1523
 getCellsRunsQAPHOS.C:1524
 getCellsRunsQAPHOS.C:1525
 getCellsRunsQAPHOS.C:1526
 getCellsRunsQAPHOS.C:1527
 getCellsRunsQAPHOS.C:1528
 getCellsRunsQAPHOS.C:1529
 getCellsRunsQAPHOS.C:1530
 getCellsRunsQAPHOS.C:1531
 getCellsRunsQAPHOS.C:1532
 getCellsRunsQAPHOS.C:1533
 getCellsRunsQAPHOS.C:1534
 getCellsRunsQAPHOS.C:1535
 getCellsRunsQAPHOS.C:1536
 getCellsRunsQAPHOS.C:1537
 getCellsRunsQAPHOS.C:1538
 getCellsRunsQAPHOS.C:1539
 getCellsRunsQAPHOS.C:1540
 getCellsRunsQAPHOS.C:1541
 getCellsRunsQAPHOS.C:1542
 getCellsRunsQAPHOS.C:1543
 getCellsRunsQAPHOS.C:1544
 getCellsRunsQAPHOS.C:1545
 getCellsRunsQAPHOS.C:1546
 getCellsRunsQAPHOS.C:1547
 getCellsRunsQAPHOS.C:1548
 getCellsRunsQAPHOS.C:1549
 getCellsRunsQAPHOS.C:1550
 getCellsRunsQAPHOS.C:1551
 getCellsRunsQAPHOS.C:1552
 getCellsRunsQAPHOS.C:1553
 getCellsRunsQAPHOS.C:1554
 getCellsRunsQAPHOS.C:1555
 getCellsRunsQAPHOS.C:1556
 getCellsRunsQAPHOS.C:1557
 getCellsRunsQAPHOS.C:1558
 getCellsRunsQAPHOS.C:1559
 getCellsRunsQAPHOS.C:1560
 getCellsRunsQAPHOS.C:1561
 getCellsRunsQAPHOS.C:1562
 getCellsRunsQAPHOS.C:1563
 getCellsRunsQAPHOS.C:1564
 getCellsRunsQAPHOS.C:1565
 getCellsRunsQAPHOS.C:1566
 getCellsRunsQAPHOS.C:1567
 getCellsRunsQAPHOS.C:1568
 getCellsRunsQAPHOS.C:1569
 getCellsRunsQAPHOS.C:1570
 getCellsRunsQAPHOS.C:1571
 getCellsRunsQAPHOS.C:1572
 getCellsRunsQAPHOS.C:1573
 getCellsRunsQAPHOS.C:1574
 getCellsRunsQAPHOS.C:1575
 getCellsRunsQAPHOS.C:1576
 getCellsRunsQAPHOS.C:1577
 getCellsRunsQAPHOS.C:1578
 getCellsRunsQAPHOS.C:1579
 getCellsRunsQAPHOS.C:1580
 getCellsRunsQAPHOS.C:1581
 getCellsRunsQAPHOS.C:1582
 getCellsRunsQAPHOS.C:1583
 getCellsRunsQAPHOS.C:1584
 getCellsRunsQAPHOS.C:1585
 getCellsRunsQAPHOS.C:1586
 getCellsRunsQAPHOS.C:1587
 getCellsRunsQAPHOS.C:1588
 getCellsRunsQAPHOS.C:1589
 getCellsRunsQAPHOS.C:1590
 getCellsRunsQAPHOS.C:1591
 getCellsRunsQAPHOS.C:1592
 getCellsRunsQAPHOS.C:1593
 getCellsRunsQAPHOS.C:1594
 getCellsRunsQAPHOS.C:1595
 getCellsRunsQAPHOS.C:1596
 getCellsRunsQAPHOS.C:1597
 getCellsRunsQAPHOS.C:1598
 getCellsRunsQAPHOS.C:1599
 getCellsRunsQAPHOS.C:1600
 getCellsRunsQAPHOS.C:1601
 getCellsRunsQAPHOS.C:1602
 getCellsRunsQAPHOS.C:1603
 getCellsRunsQAPHOS.C:1604
 getCellsRunsQAPHOS.C:1605
 getCellsRunsQAPHOS.C:1606
 getCellsRunsQAPHOS.C:1607
 getCellsRunsQAPHOS.C:1608
 getCellsRunsQAPHOS.C:1609
 getCellsRunsQAPHOS.C:1610
 getCellsRunsQAPHOS.C:1611
 getCellsRunsQAPHOS.C:1612
 getCellsRunsQAPHOS.C:1613
 getCellsRunsQAPHOS.C:1614
 getCellsRunsQAPHOS.C:1615
 getCellsRunsQAPHOS.C:1616
 getCellsRunsQAPHOS.C:1617
 getCellsRunsQAPHOS.C:1618
 getCellsRunsQAPHOS.C:1619
 getCellsRunsQAPHOS.C:1620
 getCellsRunsQAPHOS.C:1621
 getCellsRunsQAPHOS.C:1622
 getCellsRunsQAPHOS.C:1623
 getCellsRunsQAPHOS.C:1624
 getCellsRunsQAPHOS.C:1625
 getCellsRunsQAPHOS.C:1626
 getCellsRunsQAPHOS.C:1627
 getCellsRunsQAPHOS.C:1628
 getCellsRunsQAPHOS.C:1629
 getCellsRunsQAPHOS.C:1630
 getCellsRunsQAPHOS.C:1631
 getCellsRunsQAPHOS.C:1632
 getCellsRunsQAPHOS.C:1633
 getCellsRunsQAPHOS.C:1634
 getCellsRunsQAPHOS.C:1635
 getCellsRunsQAPHOS.C:1636
 getCellsRunsQAPHOS.C:1637
 getCellsRunsQAPHOS.C:1638
 getCellsRunsQAPHOS.C:1639
 getCellsRunsQAPHOS.C:1640
 getCellsRunsQAPHOS.C:1641
 getCellsRunsQAPHOS.C:1642
 getCellsRunsQAPHOS.C:1643
 getCellsRunsQAPHOS.C:1644
 getCellsRunsQAPHOS.C:1645
 getCellsRunsQAPHOS.C:1646
 getCellsRunsQAPHOS.C:1647
 getCellsRunsQAPHOS.C:1648
 getCellsRunsQAPHOS.C:1649
 getCellsRunsQAPHOS.C:1650
 getCellsRunsQAPHOS.C:1651
 getCellsRunsQAPHOS.C:1652
 getCellsRunsQAPHOS.C:1653
 getCellsRunsQAPHOS.C:1654
 getCellsRunsQAPHOS.C:1655
 getCellsRunsQAPHOS.C:1656
 getCellsRunsQAPHOS.C:1657
 getCellsRunsQAPHOS.C:1658
 getCellsRunsQAPHOS.C:1659
 getCellsRunsQAPHOS.C:1660
 getCellsRunsQAPHOS.C:1661
 getCellsRunsQAPHOS.C:1662
 getCellsRunsQAPHOS.C:1663
 getCellsRunsQAPHOS.C:1664
 getCellsRunsQAPHOS.C:1665
 getCellsRunsQAPHOS.C:1666
 getCellsRunsQAPHOS.C:1667
 getCellsRunsQAPHOS.C:1668
 getCellsRunsQAPHOS.C:1669
 getCellsRunsQAPHOS.C:1670
 getCellsRunsQAPHOS.C:1671
 getCellsRunsQAPHOS.C:1672
 getCellsRunsQAPHOS.C:1673
 getCellsRunsQAPHOS.C:1674
 getCellsRunsQAPHOS.C:1675
 getCellsRunsQAPHOS.C:1676
 getCellsRunsQAPHOS.C:1677
 getCellsRunsQAPHOS.C:1678
 getCellsRunsQAPHOS.C:1679
 getCellsRunsQAPHOS.C:1680
 getCellsRunsQAPHOS.C:1681
 getCellsRunsQAPHOS.C:1682
 getCellsRunsQAPHOS.C:1683
 getCellsRunsQAPHOS.C:1684
 getCellsRunsQAPHOS.C:1685
 getCellsRunsQAPHOS.C:1686
 getCellsRunsQAPHOS.C:1687
 getCellsRunsQAPHOS.C:1688
 getCellsRunsQAPHOS.C:1689
 getCellsRunsQAPHOS.C:1690
 getCellsRunsQAPHOS.C:1691
 getCellsRunsQAPHOS.C:1692
 getCellsRunsQAPHOS.C:1693
 getCellsRunsQAPHOS.C:1694
 getCellsRunsQAPHOS.C:1695
 getCellsRunsQAPHOS.C:1696
 getCellsRunsQAPHOS.C:1697
 getCellsRunsQAPHOS.C:1698
 getCellsRunsQAPHOS.C:1699
 getCellsRunsQAPHOS.C:1700
 getCellsRunsQAPHOS.C:1701
 getCellsRunsQAPHOS.C:1702
 getCellsRunsQAPHOS.C:1703
 getCellsRunsQAPHOS.C:1704
 getCellsRunsQAPHOS.C:1705
 getCellsRunsQAPHOS.C:1706
 getCellsRunsQAPHOS.C:1707
 getCellsRunsQAPHOS.C:1708
 getCellsRunsQAPHOS.C:1709
 getCellsRunsQAPHOS.C:1710
 getCellsRunsQAPHOS.C:1711
 getCellsRunsQAPHOS.C:1712
 getCellsRunsQAPHOS.C:1713
 getCellsRunsQAPHOS.C:1714
 getCellsRunsQAPHOS.C:1715
 getCellsRunsQAPHOS.C:1716
 getCellsRunsQAPHOS.C:1717
 getCellsRunsQAPHOS.C:1718
 getCellsRunsQAPHOS.C:1719
 getCellsRunsQAPHOS.C:1720
 getCellsRunsQAPHOS.C:1721
 getCellsRunsQAPHOS.C:1722
 getCellsRunsQAPHOS.C:1723
 getCellsRunsQAPHOS.C:1724
 getCellsRunsQAPHOS.C:1725
 getCellsRunsQAPHOS.C:1726
 getCellsRunsQAPHOS.C:1727
 getCellsRunsQAPHOS.C:1728
 getCellsRunsQAPHOS.C:1729
 getCellsRunsQAPHOS.C:1730
 getCellsRunsQAPHOS.C:1731
 getCellsRunsQAPHOS.C:1732
 getCellsRunsQAPHOS.C:1733
 getCellsRunsQAPHOS.C:1734
 getCellsRunsQAPHOS.C:1735
 getCellsRunsQAPHOS.C:1736
 getCellsRunsQAPHOS.C:1737
 getCellsRunsQAPHOS.C:1738
 getCellsRunsQAPHOS.C:1739
 getCellsRunsQAPHOS.C:1740
 getCellsRunsQAPHOS.C:1741
 getCellsRunsQAPHOS.C:1742
 getCellsRunsQAPHOS.C:1743
 getCellsRunsQAPHOS.C:1744
 getCellsRunsQAPHOS.C:1745
 getCellsRunsQAPHOS.C:1746
 getCellsRunsQAPHOS.C:1747
 getCellsRunsQAPHOS.C:1748
 getCellsRunsQAPHOS.C:1749
 getCellsRunsQAPHOS.C:1750
 getCellsRunsQAPHOS.C:1751
 getCellsRunsQAPHOS.C:1752
 getCellsRunsQAPHOS.C:1753
 getCellsRunsQAPHOS.C:1754
 getCellsRunsQAPHOS.C:1755
 getCellsRunsQAPHOS.C:1756
 getCellsRunsQAPHOS.C:1757
 getCellsRunsQAPHOS.C:1758
 getCellsRunsQAPHOS.C:1759
 getCellsRunsQAPHOS.C:1760
 getCellsRunsQAPHOS.C:1761
 getCellsRunsQAPHOS.C:1762
 getCellsRunsQAPHOS.C:1763
 getCellsRunsQAPHOS.C:1764
 getCellsRunsQAPHOS.C:1765
 getCellsRunsQAPHOS.C:1766
 getCellsRunsQAPHOS.C:1767
 getCellsRunsQAPHOS.C:1768
 getCellsRunsQAPHOS.C:1769
 getCellsRunsQAPHOS.C:1770
 getCellsRunsQAPHOS.C:1771
 getCellsRunsQAPHOS.C:1772
 getCellsRunsQAPHOS.C:1773
 getCellsRunsQAPHOS.C:1774
 getCellsRunsQAPHOS.C:1775
 getCellsRunsQAPHOS.C:1776
 getCellsRunsQAPHOS.C:1777
 getCellsRunsQAPHOS.C:1778
 getCellsRunsQAPHOS.C:1779
 getCellsRunsQAPHOS.C:1780
 getCellsRunsQAPHOS.C:1781
 getCellsRunsQAPHOS.C:1782
 getCellsRunsQAPHOS.C:1783
 getCellsRunsQAPHOS.C:1784
 getCellsRunsQAPHOS.C:1785
 getCellsRunsQAPHOS.C:1786
 getCellsRunsQAPHOS.C:1787
 getCellsRunsQAPHOS.C:1788
 getCellsRunsQAPHOS.C:1789
 getCellsRunsQAPHOS.C:1790
 getCellsRunsQAPHOS.C:1791
 getCellsRunsQAPHOS.C:1792
 getCellsRunsQAPHOS.C:1793
 getCellsRunsQAPHOS.C:1794
 getCellsRunsQAPHOS.C:1795
 getCellsRunsQAPHOS.C:1796
 getCellsRunsQAPHOS.C:1797
 getCellsRunsQAPHOS.C:1798
 getCellsRunsQAPHOS.C:1799
 getCellsRunsQAPHOS.C:1800
 getCellsRunsQAPHOS.C:1801
 getCellsRunsQAPHOS.C:1802
 getCellsRunsQAPHOS.C:1803
 getCellsRunsQAPHOS.C:1804
 getCellsRunsQAPHOS.C:1805
 getCellsRunsQAPHOS.C:1806
 getCellsRunsQAPHOS.C:1807
 getCellsRunsQAPHOS.C:1808
 getCellsRunsQAPHOS.C:1809
 getCellsRunsQAPHOS.C:1810
 getCellsRunsQAPHOS.C:1811
 getCellsRunsQAPHOS.C:1812
 getCellsRunsQAPHOS.C:1813
 getCellsRunsQAPHOS.C:1814
 getCellsRunsQAPHOS.C:1815
 getCellsRunsQAPHOS.C:1816
 getCellsRunsQAPHOS.C:1817
 getCellsRunsQAPHOS.C:1818
 getCellsRunsQAPHOS.C:1819
 getCellsRunsQAPHOS.C:1820
 getCellsRunsQAPHOS.C:1821
 getCellsRunsQAPHOS.C:1822
 getCellsRunsQAPHOS.C:1823
 getCellsRunsQAPHOS.C:1824
 getCellsRunsQAPHOS.C:1825
 getCellsRunsQAPHOS.C:1826
 getCellsRunsQAPHOS.C:1827
 getCellsRunsQAPHOS.C:1828
 getCellsRunsQAPHOS.C:1829
 getCellsRunsQAPHOS.C:1830
 getCellsRunsQAPHOS.C:1831
 getCellsRunsQAPHOS.C:1832
 getCellsRunsQAPHOS.C:1833
 getCellsRunsQAPHOS.C:1834
 getCellsRunsQAPHOS.C:1835
 getCellsRunsQAPHOS.C:1836
 getCellsRunsQAPHOS.C:1837
 getCellsRunsQAPHOS.C:1838
 getCellsRunsQAPHOS.C:1839
 getCellsRunsQAPHOS.C:1840
 getCellsRunsQAPHOS.C:1841
 getCellsRunsQAPHOS.C:1842
 getCellsRunsQAPHOS.C:1843
 getCellsRunsQAPHOS.C:1844
 getCellsRunsQAPHOS.C:1845
 getCellsRunsQAPHOS.C:1846
 getCellsRunsQAPHOS.C:1847
 getCellsRunsQAPHOS.C:1848
 getCellsRunsQAPHOS.C:1849
 getCellsRunsQAPHOS.C:1850
 getCellsRunsQAPHOS.C:1851
 getCellsRunsQAPHOS.C:1852
 getCellsRunsQAPHOS.C:1853
 getCellsRunsQAPHOS.C:1854
 getCellsRunsQAPHOS.C:1855
 getCellsRunsQAPHOS.C:1856
 getCellsRunsQAPHOS.C:1857
 getCellsRunsQAPHOS.C:1858
 getCellsRunsQAPHOS.C:1859
 getCellsRunsQAPHOS.C:1860
 getCellsRunsQAPHOS.C:1861
 getCellsRunsQAPHOS.C:1862
 getCellsRunsQAPHOS.C:1863
 getCellsRunsQAPHOS.C:1864
 getCellsRunsQAPHOS.C:1865
 getCellsRunsQAPHOS.C:1866
 getCellsRunsQAPHOS.C:1867
 getCellsRunsQAPHOS.C:1868
 getCellsRunsQAPHOS.C:1869
 getCellsRunsQAPHOS.C:1870
 getCellsRunsQAPHOS.C:1871
 getCellsRunsQAPHOS.C:1872
 getCellsRunsQAPHOS.C:1873
 getCellsRunsQAPHOS.C:1874
 getCellsRunsQAPHOS.C:1875
 getCellsRunsQAPHOS.C:1876
 getCellsRunsQAPHOS.C:1877
 getCellsRunsQAPHOS.C:1878
 getCellsRunsQAPHOS.C:1879
 getCellsRunsQAPHOS.C:1880
 getCellsRunsQAPHOS.C:1881
 getCellsRunsQAPHOS.C:1882
 getCellsRunsQAPHOS.C:1883
 getCellsRunsQAPHOS.C:1884
 getCellsRunsQAPHOS.C:1885
 getCellsRunsQAPHOS.C:1886
 getCellsRunsQAPHOS.C:1887
 getCellsRunsQAPHOS.C:1888
 getCellsRunsQAPHOS.C:1889
 getCellsRunsQAPHOS.C:1890
 getCellsRunsQAPHOS.C:1891
 getCellsRunsQAPHOS.C:1892
 getCellsRunsQAPHOS.C:1893
 getCellsRunsQAPHOS.C:1894
 getCellsRunsQAPHOS.C:1895
 getCellsRunsQAPHOS.C:1896
 getCellsRunsQAPHOS.C:1897
 getCellsRunsQAPHOS.C:1898
 getCellsRunsQAPHOS.C:1899
 getCellsRunsQAPHOS.C:1900
 getCellsRunsQAPHOS.C:1901
 getCellsRunsQAPHOS.C:1902
 getCellsRunsQAPHOS.C:1903
 getCellsRunsQAPHOS.C:1904
 getCellsRunsQAPHOS.C:1905
 getCellsRunsQAPHOS.C:1906
 getCellsRunsQAPHOS.C:1907
 getCellsRunsQAPHOS.C:1908
 getCellsRunsQAPHOS.C:1909
 getCellsRunsQAPHOS.C:1910
 getCellsRunsQAPHOS.C:1911
 getCellsRunsQAPHOS.C:1912
 getCellsRunsQAPHOS.C:1913
 getCellsRunsQAPHOS.C:1914
 getCellsRunsQAPHOS.C:1915
 getCellsRunsQAPHOS.C:1916
 getCellsRunsQAPHOS.C:1917
 getCellsRunsQAPHOS.C:1918
 getCellsRunsQAPHOS.C:1919
 getCellsRunsQAPHOS.C:1920
 getCellsRunsQAPHOS.C:1921
 getCellsRunsQAPHOS.C:1922
 getCellsRunsQAPHOS.C:1923
 getCellsRunsQAPHOS.C:1924
 getCellsRunsQAPHOS.C:1925
 getCellsRunsQAPHOS.C:1926
 getCellsRunsQAPHOS.C:1927
 getCellsRunsQAPHOS.C:1928
 getCellsRunsQAPHOS.C:1929
 getCellsRunsQAPHOS.C:1930
 getCellsRunsQAPHOS.C:1931
 getCellsRunsQAPHOS.C:1932
 getCellsRunsQAPHOS.C:1933
 getCellsRunsQAPHOS.C:1934
 getCellsRunsQAPHOS.C:1935
 getCellsRunsQAPHOS.C:1936
 getCellsRunsQAPHOS.C:1937
 getCellsRunsQAPHOS.C:1938
 getCellsRunsQAPHOS.C:1939
 getCellsRunsQAPHOS.C:1940
 getCellsRunsQAPHOS.C:1941
 getCellsRunsQAPHOS.C:1942
 getCellsRunsQAPHOS.C:1943
 getCellsRunsQAPHOS.C:1944
 getCellsRunsQAPHOS.C:1945
 getCellsRunsQAPHOS.C:1946
 getCellsRunsQAPHOS.C:1947
 getCellsRunsQAPHOS.C:1948
 getCellsRunsQAPHOS.C:1949
 getCellsRunsQAPHOS.C:1950
 getCellsRunsQAPHOS.C:1951
 getCellsRunsQAPHOS.C:1952
 getCellsRunsQAPHOS.C:1953
 getCellsRunsQAPHOS.C:1954
 getCellsRunsQAPHOS.C:1955
 getCellsRunsQAPHOS.C:1956
 getCellsRunsQAPHOS.C:1957
 getCellsRunsQAPHOS.C:1958
 getCellsRunsQAPHOS.C:1959
 getCellsRunsQAPHOS.C:1960
 getCellsRunsQAPHOS.C:1961
 getCellsRunsQAPHOS.C:1962
 getCellsRunsQAPHOS.C:1963
 getCellsRunsQAPHOS.C:1964
 getCellsRunsQAPHOS.C:1965
 getCellsRunsQAPHOS.C:1966
 getCellsRunsQAPHOS.C:1967
 getCellsRunsQAPHOS.C:1968
 getCellsRunsQAPHOS.C:1969
 getCellsRunsQAPHOS.C:1970
 getCellsRunsQAPHOS.C:1971
 getCellsRunsQAPHOS.C:1972
 getCellsRunsQAPHOS.C:1973
 getCellsRunsQAPHOS.C:1974
 getCellsRunsQAPHOS.C:1975
 getCellsRunsQAPHOS.C:1976
 getCellsRunsQAPHOS.C:1977
 getCellsRunsQAPHOS.C:1978
 getCellsRunsQAPHOS.C:1979
 getCellsRunsQAPHOS.C:1980
 getCellsRunsQAPHOS.C:1981
 getCellsRunsQAPHOS.C:1982
 getCellsRunsQAPHOS.C:1983
 getCellsRunsQAPHOS.C:1984
 getCellsRunsQAPHOS.C:1985
 getCellsRunsQAPHOS.C:1986
 getCellsRunsQAPHOS.C:1987
 getCellsRunsQAPHOS.C:1988
 getCellsRunsQAPHOS.C:1989
 getCellsRunsQAPHOS.C:1990
 getCellsRunsQAPHOS.C:1991
 getCellsRunsQAPHOS.C:1992
 getCellsRunsQAPHOS.C:1993
 getCellsRunsQAPHOS.C:1994
 getCellsRunsQAPHOS.C:1995
 getCellsRunsQAPHOS.C:1996
 getCellsRunsQAPHOS.C:1997
 getCellsRunsQAPHOS.C:1998
 getCellsRunsQAPHOS.C:1999
 getCellsRunsQAPHOS.C:2000
 getCellsRunsQAPHOS.C:2001
 getCellsRunsQAPHOS.C:2002
 getCellsRunsQAPHOS.C:2003
 getCellsRunsQAPHOS.C:2004
 getCellsRunsQAPHOS.C:2005
 getCellsRunsQAPHOS.C:2006
 getCellsRunsQAPHOS.C:2007
 getCellsRunsQAPHOS.C:2008
 getCellsRunsQAPHOS.C:2009
 getCellsRunsQAPHOS.C:2010
 getCellsRunsQAPHOS.C:2011
 getCellsRunsQAPHOS.C:2012
 getCellsRunsQAPHOS.C:2013
 getCellsRunsQAPHOS.C:2014
 getCellsRunsQAPHOS.C:2015
 getCellsRunsQAPHOS.C:2016
 getCellsRunsQAPHOS.C:2017
 getCellsRunsQAPHOS.C:2018
 getCellsRunsQAPHOS.C:2019
 getCellsRunsQAPHOS.C:2020
 getCellsRunsQAPHOS.C:2021
 getCellsRunsQAPHOS.C:2022
 getCellsRunsQAPHOS.C:2023
 getCellsRunsQAPHOS.C:2024
 getCellsRunsQAPHOS.C:2025
 getCellsRunsQAPHOS.C:2026
 getCellsRunsQAPHOS.C:2027
 getCellsRunsQAPHOS.C:2028
 getCellsRunsQAPHOS.C:2029
 getCellsRunsQAPHOS.C:2030
 getCellsRunsQAPHOS.C:2031
 getCellsRunsQAPHOS.C:2032
 getCellsRunsQAPHOS.C:2033
 getCellsRunsQAPHOS.C:2034
 getCellsRunsQAPHOS.C:2035
 getCellsRunsQAPHOS.C:2036
 getCellsRunsQAPHOS.C:2037
 getCellsRunsQAPHOS.C:2038
 getCellsRunsQAPHOS.C:2039
 getCellsRunsQAPHOS.C:2040
 getCellsRunsQAPHOS.C:2041
 getCellsRunsQAPHOS.C:2042
 getCellsRunsQAPHOS.C:2043
 getCellsRunsQAPHOS.C:2044
 getCellsRunsQAPHOS.C:2045
 getCellsRunsQAPHOS.C:2046
 getCellsRunsQAPHOS.C:2047
 getCellsRunsQAPHOS.C:2048
 getCellsRunsQAPHOS.C:2049
 getCellsRunsQAPHOS.C:2050
 getCellsRunsQAPHOS.C:2051
 getCellsRunsQAPHOS.C:2052
 getCellsRunsQAPHOS.C:2053
 getCellsRunsQAPHOS.C:2054
 getCellsRunsQAPHOS.C:2055
 getCellsRunsQAPHOS.C:2056
 getCellsRunsQAPHOS.C:2057
 getCellsRunsQAPHOS.C:2058
 getCellsRunsQAPHOS.C:2059
 getCellsRunsQAPHOS.C:2060
 getCellsRunsQAPHOS.C:2061
 getCellsRunsQAPHOS.C:2062
 getCellsRunsQAPHOS.C:2063
 getCellsRunsQAPHOS.C:2064
 getCellsRunsQAPHOS.C:2065
 getCellsRunsQAPHOS.C:2066
 getCellsRunsQAPHOS.C:2067
 getCellsRunsQAPHOS.C:2068
 getCellsRunsQAPHOS.C:2069
 getCellsRunsQAPHOS.C:2070
 getCellsRunsQAPHOS.C:2071
 getCellsRunsQAPHOS.C:2072
 getCellsRunsQAPHOS.C:2073
 getCellsRunsQAPHOS.C:2074
 getCellsRunsQAPHOS.C:2075
 getCellsRunsQAPHOS.C:2076
 getCellsRunsQAPHOS.C:2077
 getCellsRunsQAPHOS.C:2078
 getCellsRunsQAPHOS.C:2079
 getCellsRunsQAPHOS.C:2080
 getCellsRunsQAPHOS.C:2081
 getCellsRunsQAPHOS.C:2082
 getCellsRunsQAPHOS.C:2083
 getCellsRunsQAPHOS.C:2084
 getCellsRunsQAPHOS.C:2085
 getCellsRunsQAPHOS.C:2086
 getCellsRunsQAPHOS.C:2087
 getCellsRunsQAPHOS.C:2088
 getCellsRunsQAPHOS.C:2089
 getCellsRunsQAPHOS.C:2090
 getCellsRunsQAPHOS.C:2091
 getCellsRunsQAPHOS.C:2092
 getCellsRunsQAPHOS.C:2093
 getCellsRunsQAPHOS.C:2094
 getCellsRunsQAPHOS.C:2095
 getCellsRunsQAPHOS.C:2096
 getCellsRunsQAPHOS.C:2097
 getCellsRunsQAPHOS.C:2098
 getCellsRunsQAPHOS.C:2099
 getCellsRunsQAPHOS.C:2100
 getCellsRunsQAPHOS.C:2101
 getCellsRunsQAPHOS.C:2102
 getCellsRunsQAPHOS.C:2103
 getCellsRunsQAPHOS.C:2104
 getCellsRunsQAPHOS.C:2105
 getCellsRunsQAPHOS.C:2106
 getCellsRunsQAPHOS.C:2107
 getCellsRunsQAPHOS.C:2108
 getCellsRunsQAPHOS.C:2109
 getCellsRunsQAPHOS.C:2110
 getCellsRunsQAPHOS.C:2111
 getCellsRunsQAPHOS.C:2112
 getCellsRunsQAPHOS.C:2113
 getCellsRunsQAPHOS.C:2114
 getCellsRunsQAPHOS.C:2115
 getCellsRunsQAPHOS.C:2116
 getCellsRunsQAPHOS.C:2117
 getCellsRunsQAPHOS.C:2118
 getCellsRunsQAPHOS.C:2119
 getCellsRunsQAPHOS.C:2120
 getCellsRunsQAPHOS.C:2121
 getCellsRunsQAPHOS.C:2122
 getCellsRunsQAPHOS.C:2123
 getCellsRunsQAPHOS.C:2124
 getCellsRunsQAPHOS.C:2125
 getCellsRunsQAPHOS.C:2126
 getCellsRunsQAPHOS.C:2127
 getCellsRunsQAPHOS.C:2128
 getCellsRunsQAPHOS.C:2129
 getCellsRunsQAPHOS.C:2130
 getCellsRunsQAPHOS.C:2131
 getCellsRunsQAPHOS.C:2132
 getCellsRunsQAPHOS.C:2133
 getCellsRunsQAPHOS.C:2134
 getCellsRunsQAPHOS.C:2135
 getCellsRunsQAPHOS.C:2136
 getCellsRunsQAPHOS.C:2137
 getCellsRunsQAPHOS.C:2138
 getCellsRunsQAPHOS.C:2139
 getCellsRunsQAPHOS.C:2140
 getCellsRunsQAPHOS.C:2141
 getCellsRunsQAPHOS.C:2142
 getCellsRunsQAPHOS.C:2143
 getCellsRunsQAPHOS.C:2144
 getCellsRunsQAPHOS.C:2145
 getCellsRunsQAPHOS.C:2146
 getCellsRunsQAPHOS.C:2147
 getCellsRunsQAPHOS.C:2148
 getCellsRunsQAPHOS.C:2149
 getCellsRunsQAPHOS.C:2150
 getCellsRunsQAPHOS.C:2151
 getCellsRunsQAPHOS.C:2152
 getCellsRunsQAPHOS.C:2153
 getCellsRunsQAPHOS.C:2154
 getCellsRunsQAPHOS.C:2155
 getCellsRunsQAPHOS.C:2156
 getCellsRunsQAPHOS.C:2157
 getCellsRunsQAPHOS.C:2158
 getCellsRunsQAPHOS.C:2159
 getCellsRunsQAPHOS.C:2160
 getCellsRunsQAPHOS.C:2161
 getCellsRunsQAPHOS.C:2162
 getCellsRunsQAPHOS.C:2163
 getCellsRunsQAPHOS.C:2164
 getCellsRunsQAPHOS.C:2165
 getCellsRunsQAPHOS.C:2166
 getCellsRunsQAPHOS.C:2167
 getCellsRunsQAPHOS.C:2168
 getCellsRunsQAPHOS.C:2169
 getCellsRunsQAPHOS.C:2170
 getCellsRunsQAPHOS.C:2171
 getCellsRunsQAPHOS.C:2172
 getCellsRunsQAPHOS.C:2173
 getCellsRunsQAPHOS.C:2174
 getCellsRunsQAPHOS.C:2175
 getCellsRunsQAPHOS.C:2176
 getCellsRunsQAPHOS.C:2177
 getCellsRunsQAPHOS.C:2178
 getCellsRunsQAPHOS.C:2179
 getCellsRunsQAPHOS.C:2180
 getCellsRunsQAPHOS.C:2181
 getCellsRunsQAPHOS.C:2182
 getCellsRunsQAPHOS.C:2183
 getCellsRunsQAPHOS.C:2184
 getCellsRunsQAPHOS.C:2185
 getCellsRunsQAPHOS.C:2186
 getCellsRunsQAPHOS.C:2187
 getCellsRunsQAPHOS.C:2188
 getCellsRunsQAPHOS.C:2189
 getCellsRunsQAPHOS.C:2190
 getCellsRunsQAPHOS.C:2191
 getCellsRunsQAPHOS.C:2192
 getCellsRunsQAPHOS.C:2193
 getCellsRunsQAPHOS.C:2194
 getCellsRunsQAPHOS.C:2195
 getCellsRunsQAPHOS.C:2196
 getCellsRunsQAPHOS.C:2197
 getCellsRunsQAPHOS.C:2198
 getCellsRunsQAPHOS.C:2199
 getCellsRunsQAPHOS.C:2200
 getCellsRunsQAPHOS.C:2201
 getCellsRunsQAPHOS.C:2202
 getCellsRunsQAPHOS.C:2203
 getCellsRunsQAPHOS.C:2204
 getCellsRunsQAPHOS.C:2205
 getCellsRunsQAPHOS.C:2206
 getCellsRunsQAPHOS.C:2207
 getCellsRunsQAPHOS.C:2208
 getCellsRunsQAPHOS.C:2209
 getCellsRunsQAPHOS.C:2210
 getCellsRunsQAPHOS.C:2211
 getCellsRunsQAPHOS.C:2212
 getCellsRunsQAPHOS.C:2213
 getCellsRunsQAPHOS.C:2214
 getCellsRunsQAPHOS.C:2215
 getCellsRunsQAPHOS.C:2216
 getCellsRunsQAPHOS.C:2217
 getCellsRunsQAPHOS.C:2218
 getCellsRunsQAPHOS.C:2219
 getCellsRunsQAPHOS.C:2220
 getCellsRunsQAPHOS.C:2221
 getCellsRunsQAPHOS.C:2222
 getCellsRunsQAPHOS.C:2223
 getCellsRunsQAPHOS.C:2224
 getCellsRunsQAPHOS.C:2225
 getCellsRunsQAPHOS.C:2226
 getCellsRunsQAPHOS.C:2227
 getCellsRunsQAPHOS.C:2228
 getCellsRunsQAPHOS.C:2229
 getCellsRunsQAPHOS.C:2230
 getCellsRunsQAPHOS.C:2231
 getCellsRunsQAPHOS.C:2232
 getCellsRunsQAPHOS.C:2233
 getCellsRunsQAPHOS.C:2234
 getCellsRunsQAPHOS.C:2235
 getCellsRunsQAPHOS.C:2236
 getCellsRunsQAPHOS.C:2237
 getCellsRunsQAPHOS.C:2238
 getCellsRunsQAPHOS.C:2239
 getCellsRunsQAPHOS.C:2240
 getCellsRunsQAPHOS.C:2241
 getCellsRunsQAPHOS.C:2242
 getCellsRunsQAPHOS.C:2243
 getCellsRunsQAPHOS.C:2244
 getCellsRunsQAPHOS.C:2245
 getCellsRunsQAPHOS.C:2246
 getCellsRunsQAPHOS.C:2247
 getCellsRunsQAPHOS.C:2248
 getCellsRunsQAPHOS.C:2249
 getCellsRunsQAPHOS.C:2250
 getCellsRunsQAPHOS.C:2251
 getCellsRunsQAPHOS.C:2252
 getCellsRunsQAPHOS.C:2253
 getCellsRunsQAPHOS.C:2254
 getCellsRunsQAPHOS.C:2255
 getCellsRunsQAPHOS.C:2256
 getCellsRunsQAPHOS.C:2257
 getCellsRunsQAPHOS.C:2258
 getCellsRunsQAPHOS.C:2259
 getCellsRunsQAPHOS.C:2260
 getCellsRunsQAPHOS.C:2261
 getCellsRunsQAPHOS.C:2262
 getCellsRunsQAPHOS.C:2263
 getCellsRunsQAPHOS.C:2264
 getCellsRunsQAPHOS.C:2265
 getCellsRunsQAPHOS.C:2266
 getCellsRunsQAPHOS.C:2267
 getCellsRunsQAPHOS.C:2268
 getCellsRunsQAPHOS.C:2269
 getCellsRunsQAPHOS.C:2270
 getCellsRunsQAPHOS.C:2271
 getCellsRunsQAPHOS.C:2272
 getCellsRunsQAPHOS.C:2273
 getCellsRunsQAPHOS.C:2274
 getCellsRunsQAPHOS.C:2275
 getCellsRunsQAPHOS.C:2276
 getCellsRunsQAPHOS.C:2277
 getCellsRunsQAPHOS.C:2278
 getCellsRunsQAPHOS.C:2279
 getCellsRunsQAPHOS.C:2280
 getCellsRunsQAPHOS.C:2281
 getCellsRunsQAPHOS.C:2282
 getCellsRunsQAPHOS.C:2283
 getCellsRunsQAPHOS.C:2284
 getCellsRunsQAPHOS.C:2285
 getCellsRunsQAPHOS.C:2286
 getCellsRunsQAPHOS.C:2287
 getCellsRunsQAPHOS.C:2288
 getCellsRunsQAPHOS.C:2289
 getCellsRunsQAPHOS.C:2290
 getCellsRunsQAPHOS.C:2291
 getCellsRunsQAPHOS.C:2292
 getCellsRunsQAPHOS.C:2293
 getCellsRunsQAPHOS.C:2294
 getCellsRunsQAPHOS.C:2295
 getCellsRunsQAPHOS.C:2296
 getCellsRunsQAPHOS.C:2297
 getCellsRunsQAPHOS.C:2298
 getCellsRunsQAPHOS.C:2299
 getCellsRunsQAPHOS.C:2300
 getCellsRunsQAPHOS.C:2301
 getCellsRunsQAPHOS.C:2302
 getCellsRunsQAPHOS.C:2303
 getCellsRunsQAPHOS.C:2304
 getCellsRunsQAPHOS.C:2305
 getCellsRunsQAPHOS.C:2306
 getCellsRunsQAPHOS.C:2307
 getCellsRunsQAPHOS.C:2308
 getCellsRunsQAPHOS.C:2309
 getCellsRunsQAPHOS.C:2310
 getCellsRunsQAPHOS.C:2311
 getCellsRunsQAPHOS.C:2312
 getCellsRunsQAPHOS.C:2313
 getCellsRunsQAPHOS.C:2314
 getCellsRunsQAPHOS.C:2315
 getCellsRunsQAPHOS.C:2316
 getCellsRunsQAPHOS.C:2317
 getCellsRunsQAPHOS.C:2318
 getCellsRunsQAPHOS.C:2319
 getCellsRunsQAPHOS.C:2320
 getCellsRunsQAPHOS.C:2321
 getCellsRunsQAPHOS.C:2322
 getCellsRunsQAPHOS.C:2323
 getCellsRunsQAPHOS.C:2324
 getCellsRunsQAPHOS.C:2325
 getCellsRunsQAPHOS.C:2326
 getCellsRunsQAPHOS.C:2327
 getCellsRunsQAPHOS.C:2328
 getCellsRunsQAPHOS.C:2329
 getCellsRunsQAPHOS.C:2330
 getCellsRunsQAPHOS.C:2331
 getCellsRunsQAPHOS.C:2332
 getCellsRunsQAPHOS.C:2333
 getCellsRunsQAPHOS.C:2334
 getCellsRunsQAPHOS.C:2335
 getCellsRunsQAPHOS.C:2336
 getCellsRunsQAPHOS.C:2337
 getCellsRunsQAPHOS.C:2338
 getCellsRunsQAPHOS.C:2339
 getCellsRunsQAPHOS.C:2340
 getCellsRunsQAPHOS.C:2341
 getCellsRunsQAPHOS.C:2342
 getCellsRunsQAPHOS.C:2343
 getCellsRunsQAPHOS.C:2344
 getCellsRunsQAPHOS.C:2345
 getCellsRunsQAPHOS.C:2346
 getCellsRunsQAPHOS.C:2347
 getCellsRunsQAPHOS.C:2348
 getCellsRunsQAPHOS.C:2349
 getCellsRunsQAPHOS.C:2350
 getCellsRunsQAPHOS.C:2351
 getCellsRunsQAPHOS.C:2352
 getCellsRunsQAPHOS.C:2353
 getCellsRunsQAPHOS.C:2354
 getCellsRunsQAPHOS.C:2355
 getCellsRunsQAPHOS.C:2356
 getCellsRunsQAPHOS.C:2357
 getCellsRunsQAPHOS.C:2358
 getCellsRunsQAPHOS.C:2359
 getCellsRunsQAPHOS.C:2360
 getCellsRunsQAPHOS.C:2361
 getCellsRunsQAPHOS.C:2362
 getCellsRunsQAPHOS.C:2363
 getCellsRunsQAPHOS.C:2364
 getCellsRunsQAPHOS.C:2365
 getCellsRunsQAPHOS.C:2366
 getCellsRunsQAPHOS.C:2367
 getCellsRunsQAPHOS.C:2368
 getCellsRunsQAPHOS.C:2369
 getCellsRunsQAPHOS.C:2370
 getCellsRunsQAPHOS.C:2371
 getCellsRunsQAPHOS.C:2372
 getCellsRunsQAPHOS.C:2373
 getCellsRunsQAPHOS.C:2374
 getCellsRunsQAPHOS.C:2375
 getCellsRunsQAPHOS.C:2376
 getCellsRunsQAPHOS.C:2377
 getCellsRunsQAPHOS.C:2378
 getCellsRunsQAPHOS.C:2379
 getCellsRunsQAPHOS.C:2380
 getCellsRunsQAPHOS.C:2381
 getCellsRunsQAPHOS.C:2382
 getCellsRunsQAPHOS.C:2383
 getCellsRunsQAPHOS.C:2384
 getCellsRunsQAPHOS.C:2385
 getCellsRunsQAPHOS.C:2386
 getCellsRunsQAPHOS.C:2387
 getCellsRunsQAPHOS.C:2388
 getCellsRunsQAPHOS.C:2389
 getCellsRunsQAPHOS.C:2390
 getCellsRunsQAPHOS.C:2391
 getCellsRunsQAPHOS.C:2392
 getCellsRunsQAPHOS.C:2393
 getCellsRunsQAPHOS.C:2394
 getCellsRunsQAPHOS.C:2395
 getCellsRunsQAPHOS.C:2396
 getCellsRunsQAPHOS.C:2397
 getCellsRunsQAPHOS.C:2398
 getCellsRunsQAPHOS.C:2399
 getCellsRunsQAPHOS.C:2400
 getCellsRunsQAPHOS.C:2401
 getCellsRunsQAPHOS.C:2402
 getCellsRunsQAPHOS.C:2403
 getCellsRunsQAPHOS.C:2404
 getCellsRunsQAPHOS.C:2405
 getCellsRunsQAPHOS.C:2406
 getCellsRunsQAPHOS.C:2407
 getCellsRunsQAPHOS.C:2408
 getCellsRunsQAPHOS.C:2409
 getCellsRunsQAPHOS.C:2410
 getCellsRunsQAPHOS.C:2411
 getCellsRunsQAPHOS.C:2412
 getCellsRunsQAPHOS.C:2413
 getCellsRunsQAPHOS.C:2414
 getCellsRunsQAPHOS.C:2415
 getCellsRunsQAPHOS.C:2416
 getCellsRunsQAPHOS.C:2417
 getCellsRunsQAPHOS.C:2418
 getCellsRunsQAPHOS.C:2419
 getCellsRunsQAPHOS.C:2420
 getCellsRunsQAPHOS.C:2421
 getCellsRunsQAPHOS.C:2422
 getCellsRunsQAPHOS.C:2423
 getCellsRunsQAPHOS.C:2424
 getCellsRunsQAPHOS.C:2425
 getCellsRunsQAPHOS.C:2426
 getCellsRunsQAPHOS.C:2427
 getCellsRunsQAPHOS.C:2428
 getCellsRunsQAPHOS.C:2429
 getCellsRunsQAPHOS.C:2430
 getCellsRunsQAPHOS.C:2431
 getCellsRunsQAPHOS.C:2432
 getCellsRunsQAPHOS.C:2433
 getCellsRunsQAPHOS.C:2434
 getCellsRunsQAPHOS.C:2435
 getCellsRunsQAPHOS.C:2436
 getCellsRunsQAPHOS.C:2437
 getCellsRunsQAPHOS.C:2438
 getCellsRunsQAPHOS.C:2439
 getCellsRunsQAPHOS.C:2440
 getCellsRunsQAPHOS.C:2441
 getCellsRunsQAPHOS.C:2442
 getCellsRunsQAPHOS.C:2443