ROOT logo
//////////////////////////////////////////////////////////////////////////////////////
// FindOutliers.C (called by AODQAChecks.C)                                         //
//                                                                                  //
// Written by John Groh                                                             //
//////////////////////////////////////////////////////////////////////////////////////

#include <fstream>
using namespace std;

void FindOutliers(Int_t runs[],
		  const Int_t nRuns,
		  Bool_t useMC,
		  Int_t icut,
		  const Float_t nSigmaCut,
		  TFile*& fout,
		  
		  TH1F*& TPCnsigMeanTrendPion,
		  TH1F*& TPCnsigMeanTrendKaon,
		  TH1F*& TPCnsigMeanTrendProton,
		  TH1F*& TPCnsigSigmaTrendPion,
		  TH1F*& TPCnsigSigmaTrendKaon,
		  TH1F*& TPCnsigSigmaTrendProton,
		  TH1F*& TOFnsigMeanTrendPion,
		  TH1F*& TOFnsigMeanTrendKaon,
		  TH1F*& TOFnsigMeanTrendProton,
		  TH1F*& TOFnsigSigmaTrendPion,
		  TH1F*& TOFnsigSigmaTrendKaon,
		  TH1F*& TOFnsigSigmaTrendProton,
		  
		  TH1F*& IntegRawYieldAll,
		  
		  TH1F*& EfficiencyPiPlus,
		  TH1F*& EfficiencyKPlus,
		  TH1F*& EfficiencyProton,
		  TH1F*& EfficiencyPiMinus,
		  TH1F*& EfficiencyKMinus,
		  TH1F*& EfficiencyAntiproton,
		  
		  TH1F*& MatchEffPos,
		  TH1F*& MatchEffNeg)
{
  Printf("\n\n\n--- Inside function FindOutliers() ---\n\n\n");

  // output to a text file
  char name[100];
  if (useMC) sprintf(name, "results/output_MC_icut=%i_nSigmaCut=%.1f.txt",icut,nSigmaCut);
  else sprintf(name, "results/output_DATA_icut=%i_nSigmaCut=%.1f.txt",icut,nSigmaCut);
  ofstream outFile(name);
  outFile << name << endl;
  outFile << "Info about outlers with useMC = " << useMC << ", icut = " << icut << ", and nSigmaCut = " << nSigmaCut << endl;

  // this array stores whether each run is good or not
  // each run is assumed to be good unless its flag is set otherwise
  Bool_t isRunGood[nRuns];
  for (Int_t irun=0; irun<nRuns; irun++)
    isRunGood[irun] = true;

  // for drawing lines at 0, -3, and 3
  TF1 * fLine1 = new TF1("fLine1","0",0,nRuns);
  TF1 * fLine2 = new TF1("fLine2","-3",0,nRuns);
  TF1 * fLine3 = new TF1("fLine3","3",0,nRuns);
  fLine1->SetLineColor(7);
  fLine2->SetLineColor(kBlack);
  fLine3->SetLineColor(kBlack);
  fLine1->SetLineStyle(7);
  fLine2->SetLineStyle(7);
  fLine3->SetLineStyle(7);
  fLine1->SetLineWidth(1);
  fLine2->SetLineWidth(1);
  fLine3->SetLineWidth(1); 

  //-----------------------------------------
  // nsigma projection fit means and sigmas -
  //-----------------------------------------  
  // because the error bars are really small for data and larger for MC, the normal method doesn't work for data
  if (useMC)
    {
      // fit horizontal lines to the histograms and use the value of the y-intercept as the mean
      TF1 * fitFuncTPCnsigMeanPion = new TF1("fitFuncTPCnsigMeanPion","[0]");
      TF1 * fitFuncTPCnsigMeanKaon = new TF1("fitFuncTPCnsigMeanKaon","[0]");
      TF1 * fitFuncTPCnsigMeanProton = new TF1("fitFuncTPCnsigMeanProton","[0]");
      TF1 * fitFuncTPCnsigSigmaPion = new TF1("fitFuncTPCnsigSigmaPion","[0]");
      TF1 * fitFuncTPCnsigSigmaKaon = new TF1("fitFuncTPCnsigSigmaKaon","[0]");
      TF1 * fitFuncTPCnsigSigmaProton = new TF1("fitFuncTPCnsigSigmaProton","[0]");
      TF1 * fitFuncTOFnsigMeanPion = new TF1("fitFuncTOFnsigMeanPion","[0]");
      TF1 * fitFuncTOFnsigMeanKaon = new TF1("fitFuncTOFnsigMeanKaon","[0]");
      TF1 * fitFuncTOFnsigMeanProton = new TF1("fitFuncTOFnsigMeanProton","[0]");
      TF1 * fitFuncTOFnsigSigmaPion = new TF1("fitFuncTOFnsigSigmaPion","[0]");
      TF1 * fitFuncTOFnsigSigmaKaon = new TF1("fitFuncTOFnsigSigmaKaon","[0]");
      TF1 * fitFuncTOFnsigSigmaProton = new TF1("fitFuncTOFnsigSigmaProton","[0]");
      
      TPCnsigMeanTrendPion->Fit(fitFuncTPCnsigMeanPion,"QN");
      TPCnsigMeanTrendKaon->Fit(fitFuncTPCnsigMeanKaon,"QN");
      TPCnsigMeanTrendProton->Fit(fitFuncTPCnsigMeanProton,"QN");
      TPCnsigSigmaTrendPion->Fit(fitFuncTPCnsigSigmaPion,"QN");
      TPCnsigSigmaTrendKaon->Fit(fitFuncTPCnsigSigmaKaon,"QN");
      TPCnsigSigmaTrendProton->Fit(fitFuncTPCnsigSigmaProton,"QN");
      TOFnsigMeanTrendPion->Fit(fitFuncTOFnsigMeanPion,"QN");
      TOFnsigMeanTrendKaon->Fit(fitFuncTOFnsigMeanKaon,"QN");
      TOFnsigMeanTrendProton->Fit(fitFuncTOFnsigMeanProton,"QN");
      TOFnsigSigmaTrendPion->Fit(fitFuncTOFnsigSigmaPion,"QN");
      TOFnsigSigmaTrendKaon->Fit(fitFuncTOFnsigSigmaKaon,"QN");
      TOFnsigSigmaTrendProton->Fit(fitFuncTOFnsigSigmaProton,"QN");
      
      Float_t meanTPCnsigMeanPion = fitFuncTPCnsigMeanPion->GetParameter(0);
      Float_t meanTPCnsigMeanKaon = fitFuncTPCnsigMeanKaon->GetParameter(0);
      Float_t meanTPCnsigMeanProton = fitFuncTPCnsigMeanProton->GetParameter(0);
      Float_t meanTPCnsigSigmaPion = fitFuncTPCnsigSigmaPion->GetParameter(0);
      Float_t meanTPCnsigSigmaKaon = fitFuncTPCnsigSigmaKaon->GetParameter(0);
      Float_t meanTPCnsigSigmaProton = fitFuncTPCnsigSigmaProton->GetParameter(0);
      Float_t meanTOFnsigMeanPion = fitFuncTOFnsigMeanPion->GetParameter(0);
      Float_t meanTOFnsigMeanKaon = fitFuncTOFnsigMeanKaon->GetParameter(0);
      Float_t meanTOFnsigMeanProton = fitFuncTOFnsigMeanProton->GetParameter(0);
      Float_t meanTOFnsigSigmaPion = fitFuncTOFnsigSigmaPion->GetParameter(0);
      Float_t meanTOFnsigSigmaKaon = fitFuncTOFnsigSigmaKaon->GetParameter(0);
      Float_t meanTOFnsigSigmaProton = fitFuncTOFnsigSigmaProton->GetParameter(0);
      
      // report outliers distributed more than nSigmaCut sigma away from the median
      // also fill histograms to plot the deviation in number of sigmas as a function of the run number
      TH1F * hDevTPCnsigMeanPion = new TH1F("hDevTPCnsigMeanPion","",nRuns,0,nRuns);
      TH1F * hDevTPCnsigMeanKaon = new TH1F("hDevTPCnsigMeanKaon","",nRuns,0,nRuns);
      TH1F * hDevTPCnsigMeanProton = new TH1F("hDevTPCnsigMeanProton","",nRuns,0,nRuns);
      TH1F * hDevTPCnsigSigmaPion = new TH1F("hDevTPCnsigSigmaPion","",nRuns,0,nRuns);
      TH1F * hDevTPCnsigSigmaKaon = new TH1F("hDevTPCnsigSigmaKaon","",nRuns,0,nRuns);
      TH1F * hDevTPCnsigSigmaProton = new TH1F("hDevTPCnsigSigmaProton","",nRuns,0,nRuns);
      TH1F * hDevTOFnsigMeanPion = new TH1F("hDevTOFnsigMeanPion","",nRuns,0,nRuns);
      TH1F * hDevTOFnsigMeanKaon = new TH1F("hDevTOFnsigMeanKaon","",nRuns,0,nRuns);
      TH1F * hDevTOFnsigMeanProton = new TH1F("hDevTOFnsigMeanProton","",nRuns,0,nRuns);
      TH1F * hDevTOFnsigSigmaPion = new TH1F("hDevTOFnsigSigmaPion","",nRuns,0,nRuns);
      TH1F * hDevTOFnsigSigmaKaon = new TH1F("hDevTOFnsigSigmaKaon","",nRuns,0,nRuns);
      TH1F * hDevTOFnsigSigmaProton = new TH1F("hDevTOFnsigSigmaProton","",nRuns,0,nRuns);
      
      cout << "\n\n\n!!! RUNS FOR WHICH AN NSIGMA FIT PARAMETER IS MORE THAN " << nSigmaCut << " SIGMA FROM THE MEAN:\n";
      outFile << "\n\n\n!!! RUNS FOR WHICH AN NSIGMA FIT PARAMETER IS MORE THAN " << nSigmaCut << " SIGMA FROM THE MEAN:\n";
      Int_t nBadNSig = 0;
      for (Int_t irun=0; irun<nRuns; irun++)
	{
	  Float_t devTPCnsigMeanPion = (TPCnsigMeanTrendPion->GetBinContent(irun+1) - meanTPCnsigMeanPion) / TPCnsigMeanTrendPion->GetBinError(irun+1);
	  Float_t devTPCnsigMeanKaon = (TPCnsigMeanTrendKaon->GetBinContent(irun+1) - meanTPCnsigMeanKaon) / TPCnsigMeanTrendKaon->GetBinError(irun+1);
	  Float_t devTPCnsigMeanProton = (TPCnsigMeanTrendProton->GetBinContent(irun+1) - meanTPCnsigMeanProton) / TPCnsigMeanTrendProton->GetBinError(irun+1);
	  Float_t devTPCnsigSigmaPion = (TPCnsigSigmaTrendPion->GetBinContent(irun+1) - meanTPCnsigSigmaPion) / TPCnsigSigmaTrendPion->GetBinError(irun+1);
	  Float_t devTPCnsigSigmaKaon = (TPCnsigSigmaTrendKaon->GetBinContent(irun+1) - meanTPCnsigSigmaKaon) / TPCnsigSigmaTrendKaon->GetBinError(irun+1);
	  Float_t devTPCnsigSigmaProton = (TPCnsigSigmaTrendProton->GetBinContent(irun+1) - meanTPCnsigSigmaProton) / TPCnsigSigmaTrendProton->GetBinError(irun+1);
	  Float_t devTOFnsigMeanPion = (TOFnsigMeanTrendPion->GetBinContent(irun+1) - meanTOFnsigMeanPion) / TOFnsigMeanTrendPion->GetBinError(irun+1);
	  Float_t devTOFnsigMeanKaon = (TOFnsigMeanTrendKaon->GetBinContent(irun+1) - meanTOFnsigMeanKaon) / TOFnsigMeanTrendKaon->GetBinError(irun+1);
	  Float_t devTOFnsigMeanProton = (TOFnsigMeanTrendProton->GetBinContent(irun+1) - meanTOFnsigMeanProton) / TOFnsigMeanTrendProton->GetBinError(irun+1);
	  Float_t devTOFnsigSigmaPion = (TOFnsigSigmaTrendPion->GetBinContent(irun+1) - meanTOFnsigSigmaPion) / TOFnsigSigmaTrendPion->GetBinError(irun+1);
	  Float_t devTOFnsigSigmaKaon = (TOFnsigSigmaTrendKaon->GetBinContent(irun+1) - meanTOFnsigSigmaKaon) / TOFnsigSigmaTrendKaon->GetBinError(irun+1);
	  Float_t devTOFnsigSigmaProton = (TOFnsigSigmaTrendProton->GetBinContent(irun+1) - meanTOFnsigSigmaProton) / TOFnsigSigmaTrendProton->GetBinError(irun+1);
	  
	  hDevTPCnsigMeanPion->SetBinContent(irun+1,devTPCnsigMeanPion);
	  hDevTPCnsigMeanKaon->SetBinContent(irun+1,devTPCnsigMeanKaon);
	  hDevTPCnsigMeanProton->SetBinContent(irun+1,devTPCnsigMeanProton);
	  hDevTPCnsigSigmaPion->SetBinContent(irun+1,devTPCnsigSigmaPion);
	  hDevTPCnsigSigmaKaon->SetBinContent(irun+1,devTPCnsigSigmaKaon);
	  hDevTPCnsigSigmaProton->SetBinContent(irun+1,devTPCnsigSigmaProton);
	  hDevTOFnsigMeanPion->SetBinContent(irun+1,devTOFnsigMeanPion);
	  hDevTOFnsigMeanKaon->SetBinContent(irun+1,devTOFnsigMeanKaon);
	  hDevTOFnsigMeanProton->SetBinContent(irun+1,devTOFnsigMeanProton);
	  hDevTOFnsigSigmaPion->SetBinContent(irun+1,devTOFnsigSigmaPion);
	  hDevTOFnsigSigmaKaon->SetBinContent(irun+1,devTOFnsigSigmaKaon);
	  hDevTOFnsigSigmaProton->SetBinContent(irun+1,devTOFnsigSigmaProton);
	  
	  if (TMath::Abs(devTPCnsigMeanPion) > nSigmaCut || TMath::Abs(devTPCnsigMeanKaon) > nSigmaCut || TMath::Abs(devTPCnsigMeanProton) > nSigmaCut ||
	      TMath::Abs(devTPCnsigSigmaPion) > nSigmaCut || TMath::Abs(devTPCnsigSigmaKaon) > nSigmaCut || TMath::Abs(devTPCnsigSigmaProton) > nSigmaCut ||
	      TMath::Abs(devTOFnsigMeanPion) > nSigmaCut || TMath::Abs(devTOFnsigMeanKaon) > nSigmaCut || TMath::Abs(devTOFnsigMeanProton) > nSigmaCut ||
	      TMath::Abs(devTOFnsigSigmaPion) > nSigmaCut || TMath::Abs(devTOFnsigSigmaKaon) > nSigmaCut || TMath::Abs(devTOFnsigSigmaProton) > nSigmaCut)
	    {
	      cout << runs[irun];
	      outFile << runs[irun] << endl;
	      if (TMath::Abs(devTPCnsigMeanPion) > nSigmaCut)
		{
		  cout << " - TPC Pion Mean";
		  outFile << " - TPC Pion Mean";
		}
	      if (TMath::Abs(devTPCnsigMeanKaon) > nSigmaCut)
		{
		  cout << " - TPC Kaon Mean";
		  outFile << " - TPC Kaon Mean";
		}
	      if (TMath::Abs(devTPCnsigMeanProton) > nSigmaCut)
		{
		  cout << " - TPC Proton Mean";
		  outFile << " - TPC Proton Mean";
		}
	      if (TMath::Abs(devTPCnsigSigmaPion) > nSigmaCut)
		{
		  cout << " - TPC Pion Sigma";
		  outFile << " - TPC Pion Sigma";
		}
	      if (TMath::Abs(devTPCnsigSigmaKaon) > nSigmaCut)
		{
		  cout << " - TPC Kaon Sigma";
		  outFile << " - TPC Kaon Sigma";
		}
	      if (TMath::Abs(devTPCnsigSigmaProton) > nSigmaCut)
		{
		  cout << " - TPC Proton Sigma";
		  outFile << " - TPC Proton Sigma";
		}
	      if (TMath::Abs(devTOFnsigMeanPion) > nSigmaCut)
		{
		  cout << " - TOF Pion Mean";
		  outFile << " - TOF Pion Mean";
		}
	      if (TMath::Abs(devTOFnsigMeanKaon) > nSigmaCut)
		{
		  cout << " - TOF Kaon Mean";
		  outFile << " - TOF Kaon Mean";
		}
	      if (TMath::Abs(devTOFnsigMeanProton) > nSigmaCut)
		{
		  cout << " - TOF Proton Mean";
		  outFile << " - TOF Proton Mean";
		}
	      if (TMath::Abs(devTOFnsigSigmaPion) > nSigmaCut)
		{
		  cout << " - TOF Pion Sigma";
		  outFile << " - TOF Pion Sigma";
		}
	      if (TMath::Abs(devTOFnsigSigmaKaon) > nSigmaCut)
		{
		  cout << " - TOF Kaon Sigma";
		  outFile << " - TOF Kaon Sigma";
		}
	      if (TMath::Abs(devTOFnsigSigmaProton) > nSigmaCut)
		{
		  cout << " - TOF Proton Sigma";
		  outFile << " - TOF Proton Sigma";
		}
	      cout << endl;
	      outFile << endl;
	      nBadNSig++;
	      if (isRunGood[irun]) isRunGood[irun] = kFALSE; // flag run as bad
	    }
	}
      cout << "Number of rejected runs: " << nBadNSig << endl;
      outFile << "Number of rejected runs: " << nBadNSig << endl;
    }
  // for data, I have to fit the projection with a gaussian and cut on nSigmaCut using the sigma from the gaussian
  else
    {
      // project the histos onto the y-axis
      TH1F * TPCnsigMeanPionProj = new TH1F("TPCnsigMeanPionProj","",100,-1,1);
      TH1F * TPCnsigMeanKaonProj = new TH1F("TPCnsigMeanKaonProj","",100,-1,1);
      TH1F * TPCnsigMeanProtonProj = new TH1F("TPCnsigMeanProtonProj","",100,-1,1);
      TH1F * TPCnsigSigmaPionProj = new TH1F("TPCnsigSigmaPionProj","",100,0,2);
      TH1F * TPCnsigSigmaKaonProj = new TH1F("TPCnsigSigmaKaonProj","",100,0,2);
      TH1F * TPCnsigSigmaProtonProj = new TH1F("TPCnsigSigmaProtonProj","",100,0,2);
      TH1F * TOFnsigMeanPionProj = new TH1F("TOFnsigMeanPionProj","",100,-1,1);
      TH1F * TOFnsigMeanKaonProj = new TH1F("TOFnsigMeanKaonProj","",100,-1,1);
      TH1F * TOFnsigMeanProtonProj = new TH1F("TOFnsigMeanProtonProj","",100,-1,1);
      TH1F * TOFnsigSigmaPionProj = new TH1F("TOFnsigSigmaPionProj","",100,0,2);
      TH1F * TOFnsigSigmaKaonProj = new TH1F("TOFnsigSigmaKaonProj","",100,0,2);
      TH1F * TOFnsigSigmaProtonProj = new TH1F("TOFnsigSigmaProtonProj","",100,0,2);
      for (Int_t irun=0; irun<nRuns; irun++)
	{
	  TPCnsigMeanPionProj->Fill(TPCnsigMeanTrendPion->GetBinContent(irun+1));
	  TPCnsigMeanKaonProj->Fill(TPCnsigMeanTrendKaon->GetBinContent(irun+1));
	  TPCnsigMeanProtonProj->Fill(TPCnsigMeanTrendProton->GetBinContent(irun+1));
	  TPCnsigSigmaPionProj->Fill(TPCnsigSigmaTrendPion->GetBinContent(irun+1));
	  TPCnsigSigmaKaonProj->Fill(TPCnsigSigmaTrendKaon->GetBinContent(irun+1));
	  TPCnsigSigmaProtonProj->Fill(TPCnsigSigmaTrendProton->GetBinContent(irun+1));
	  TOFnsigMeanPionProj->Fill(TOFnsigMeanTrendPion->GetBinContent(irun+1));
	  TOFnsigMeanKaonProj->Fill(TOFnsigMeanTrendKaon->GetBinContent(irun+1));
	  TOFnsigMeanProtonProj->Fill(TOFnsigMeanTrendProton->GetBinContent(irun+1));
	  TOFnsigSigmaPionProj->Fill(TOFnsigSigmaTrendPion->GetBinContent(irun+1));
	  TOFnsigSigmaKaonProj->Fill(TOFnsigSigmaTrendKaon->GetBinContent(irun+1));
	  TOFnsigSigmaProtonProj->Fill(TOFnsigSigmaTrendProton->GetBinContent(irun+1));
	}

      // fit with gaussians and reject runs that lie more than nSigmaCut from the mean
      TF1 * fTPCnsigMeanPionFit = new TF1("fTPCnsigMeanPionFit","gaus");
      TF1 * fTPCnsigMeanKaonFit = new TF1("fTPCnsigMeanKaonFit","gaus");
      TF1 * fTPCnsigMeanProtonFit = new TF1("fTPCnsigMeanProtonFit","gaus");
      TF1 * fTPCnsigSigmaPionFit = new TF1("fTPCnsigSigmaPionFit","gaus");
      TF1 * fTPCnsigSigmaKaonFit = new TF1("fTPCnsigSigmaKaonFit","gaus");
      TF1 * fTPCnsigSigmaProtonFit = new TF1("fTPCnsigSigmaProtonFit","gaus");
      TF1 * fTOFnsigMeanPionFit = new TF1("fTOFnsigMeanPionFit","gaus");
      TF1 * fTOFnsigMeanKaonFit = new TF1("fTOFnsigMeanKaonFit","gaus");
      TF1 * fTOFnsigMeanProtonFit = new TF1("fTOFnsigMeanProtonFit","gaus");
      TF1 * fTOFnsigSigmaPionFit = new TF1("fTOFnsigSigmaPionFit","gaus");
      TF1 * fTOFnsigSigmaKaonFit = new TF1("fTOFnsigSigmaKaonFit","gaus");
      TF1 * fTOFnsigSigmaProtonFit = new TF1("fTOFnsigSigmaProtonFit","gaus");
      
      TPCnsigMeanPionProj->Fit(fTPCnsigMeanPionFit,"N","",-1,1);
      TPCnsigMeanKaonProj->Fit(fTPCnsigMeanKaonFit,"N","",-1,1);
      TPCnsigMeanProtonProj->Fit(fTPCnsigMeanProtonFit,"N","",-1,1);
      TPCnsigSigmaPionProj->Fit(fTPCnsigSigmaPionFit,"N","",0,2);
      TPCnsigSigmaKaonProj->Fit(fTPCnsigSigmaKaonFit,"N","",0,2);
      TPCnsigSigmaProtonProj->Fit(fTPCnsigSigmaProtonFit,"N","",0,2);
      TOFnsigMeanPionProj->Fit(fTOFnsigMeanPionFit,"N","",-1,1);
      TOFnsigMeanKaonProj->Fit(fTOFnsigMeanKaonFit,"N","",-1,1);
      TOFnsigMeanProtonProj->Fit(fTOFnsigMeanProtonFit,"N","",-1,1);
      TOFnsigSigmaPionProj->Fit(fTOFnsigSigmaPionFit,"N","",0,2);
      TOFnsigSigmaKaonProj->Fit(fTOFnsigSigmaKaonFit,"N","",0,2);
      TOFnsigSigmaProtonProj->Fit(fTOFnsigSigmaProtonFit,"N","",0,2);

      // means and sigmas from the gaussian fits
      Float_t meanTPCnsigMeanPion = fTPCnsigMeanPionFit->GetParameter(1);
      Float_t meanTPCnsigMeanKaon = fTPCnsigMeanKaonFit->GetParameter(1);
      Float_t meanTPCnsigMeanProton = fTPCnsigMeanProtonFit->GetParameter(1);
      Float_t meanTPCnsigSigmaPion = fTPCnsigSigmaPionFit->GetParameter(1);
      Float_t meanTPCnsigSigmaKaon = fTPCnsigSigmaKaonFit->GetParameter(1);
      Float_t meanTPCnsigSigmaProton = fTPCnsigSigmaProtonFit->GetParameter(1);
      Float_t meanTOFnsigMeanPion = fTOFnsigMeanPionFit->GetParameter(1);
      Float_t meanTOFnsigMeanKaon = fTOFnsigMeanKaonFit->GetParameter(1);
      Float_t meanTOFnsigMeanProton = fTOFnsigMeanProtonFit->GetParameter(1);
      Float_t meanTOFnsigSigmaPion = fTOFnsigSigmaPionFit->GetParameter(1);
      Float_t meanTOFnsigSigmaKaon = fTOFnsigSigmaKaonFit->GetParameter(1);
      Float_t meanTOFnsigSigmaProton = fTOFnsigSigmaProtonFit->GetParameter(1);
      Float_t sigTPCnsigMeanPion = fTPCnsigMeanPionFit->GetParameter(2);
      Float_t sigTPCnsigMeanKaon = fTPCnsigMeanKaonFit->GetParameter(2);
      Float_t sigTPCnsigMeanProton = fTPCnsigMeanProtonFit->GetParameter(2);
      Float_t sigTPCnsigSigmaPion = fTPCnsigSigmaPionFit->GetParameter(2);
      Float_t sigTPCnsigSigmaKaon = fTPCnsigSigmaKaonFit->GetParameter(2);
      Float_t sigTPCnsigSigmaProton = fTPCnsigSigmaProtonFit->GetParameter(2);
      Float_t sigTOFnsigMeanPion = fTOFnsigMeanPionFit->GetParameter(2);
      Float_t sigTOFnsigMeanKaon = fTOFnsigMeanKaonFit->GetParameter(2);
      Float_t sigTOFnsigMeanProton = fTOFnsigMeanProtonFit->GetParameter(2);
      Float_t sigTOFnsigSigmaPion = fTOFnsigSigmaPionFit->GetParameter(2);
      Float_t sigTOFnsigSigmaKaon = fTOFnsigSigmaKaonFit->GetParameter(2);
      Float_t sigTOFnsigSigmaProton = fTOFnsigSigmaProtonFit->GetParameter(2);

      // histograms to plot the deviation as a function of the run number
      TH1F * hDevTPCnsigMeanPion = new TH1F("hDevTPCnsigMeanPion","",nRuns,0,nRuns);
      TH1F * hDevTPCnsigMeanKaon = new TH1F("hDevTPCnsigMeanKaon","",nRuns,0,nRuns);
      TH1F * hDevTPCnsigMeanProton = new TH1F("hDevTPCnsigMeanProton","",nRuns,0,nRuns);
      TH1F * hDevTPCnsigSigmaPion = new TH1F("hDevTPCnsigSigmaPion","",nRuns,0,nRuns);
      TH1F * hDevTPCnsigSigmaKaon = new TH1F("hDevTPCnsigSigmaKaon","",nRuns,0,nRuns);
      TH1F * hDevTPCnsigSigmaProton = new TH1F("hDevTPCnsigSigmaProton","",nRuns,0,nRuns);
      TH1F * hDevTOFnsigMeanPion = new TH1F("hDevTOFnsigMeanPion","",nRuns,0,nRuns);
      TH1F * hDevTOFnsigMeanKaon = new TH1F("hDevTOFnsigMeanKaon","",nRuns,0,nRuns);
      TH1F * hDevTOFnsigMeanProton = new TH1F("hDevTOFnsigMeanProton","",nRuns,0,nRuns);
      TH1F * hDevTOFnsigSigmaPion = new TH1F("hDevTOFnsigSigmaPion","",nRuns,0,nRuns);
      TH1F * hDevTOFnsigSigmaKaon = new TH1F("hDevTOFnsigSigmaKaon","",nRuns,0,nRuns);
      TH1F * hDevTOFnsigSigmaProton = new TH1F("hDevTOFnsigSigmaProton","",nRuns,0,nRuns);
 
      cout << "\n\n\n!!! RUNS FOR WHICH AN NSIGMA FIT PARAMETER IS MORE THAN " << nSigmaCut << " SIGMA FROM THE MEAN:\n";
      outFile << "\n\n\n!!! RUNS FOR WHICH AN NSIGMA FIT PARAMETER IS MORE THAN " << nSigmaCut << " SIGMA FROM THE MEAN:\n";
      Int_t nBadNSig = 0;
      for (Int_t irun=0; irun<nRuns; irun++)
	{
	  Float_t devTPCnsigMeanPion = (TPCnsigMeanTrendPion->GetBinContent(irun+1) - meanTPCnsigMeanPion) / sigTPCnsigMeanPion;
	  Float_t devTPCnsigMeanKaon = (TPCnsigMeanTrendKaon->GetBinContent(irun+1) - meanTPCnsigMeanKaon) / sigTPCnsigMeanKaon;
	  Float_t devTPCnsigMeanProton = (TPCnsigMeanTrendProton->GetBinContent(irun+1) - meanTPCnsigMeanProton) / sigTPCnsigMeanProton;
	  Float_t devTPCnsigSigmaPion = (TPCnsigSigmaTrendPion->GetBinContent(irun+1) - meanTPCnsigSigmaPion) / sigTPCnsigSigmaPion;
	  Float_t devTPCnsigSigmaKaon = (TPCnsigSigmaTrendKaon->GetBinContent(irun+1) - meanTPCnsigSigmaKaon) / sigTPCnsigSigmaKaon;
	  Float_t devTPCnsigSigmaProton = (TPCnsigSigmaTrendProton->GetBinContent(irun+1) - meanTPCnsigSigmaProton) / sigTPCnsigSigmaProton;
	  Float_t devTOFnsigMeanPion = (TOFnsigMeanTrendPion->GetBinContent(irun+1) - meanTOFnsigMeanPion) / sigTOFnsigMeanPion;
	  Float_t devTOFnsigMeanKaon = (TOFnsigMeanTrendKaon->GetBinContent(irun+1) - meanTOFnsigMeanKaon) / sigTOFnsigMeanKaon;
	  Float_t devTOFnsigMeanProton = (TOFnsigMeanTrendProton->GetBinContent(irun+1) - meanTOFnsigMeanProton) / sigTOFnsigMeanProton;
	  Float_t devTOFnsigSigmaPion = (TOFnsigSigmaTrendPion->GetBinContent(irun+1) - meanTOFnsigSigmaPion) / sigTOFnsigSigmaPion;
	  Float_t devTOFnsigSigmaKaon = (TOFnsigSigmaTrendKaon->GetBinContent(irun+1) - meanTOFnsigSigmaKaon) / sigTOFnsigSigmaKaon;
	  Float_t devTOFnsigSigmaProton = (TOFnsigSigmaTrendProton->GetBinContent(irun+1) - meanTOFnsigSigmaProton) / sigTOFnsigSigmaProton;
	  
	  hDevTPCnsigMeanPion->SetBinContent(irun+1,devTPCnsigMeanPion);
	  hDevTPCnsigMeanKaon->SetBinContent(irun+1,devTPCnsigMeanKaon);
	  hDevTPCnsigMeanProton->SetBinContent(irun+1,devTPCnsigMeanProton);
	  hDevTPCnsigSigmaPion->SetBinContent(irun+1,devTPCnsigSigmaPion);
	  hDevTPCnsigSigmaKaon->SetBinContent(irun+1,devTPCnsigSigmaKaon);
	  hDevTPCnsigSigmaProton->SetBinContent(irun+1,devTPCnsigSigmaProton);
	  hDevTOFnsigMeanPion->SetBinContent(irun+1,devTOFnsigMeanPion);
	  hDevTOFnsigMeanKaon->SetBinContent(irun+1,devTOFnsigMeanKaon);
	  hDevTOFnsigMeanProton->SetBinContent(irun+1,devTOFnsigMeanProton);
	  hDevTOFnsigSigmaPion->SetBinContent(irun+1,devTOFnsigSigmaPion);
	  hDevTOFnsigSigmaKaon->SetBinContent(irun+1,devTOFnsigSigmaKaon);
	  hDevTOFnsigSigmaProton->SetBinContent(irun+1,devTOFnsigSigmaProton);
	  
	  if (TMath::Abs(devTPCnsigMeanPion) > nSigmaCut || TMath::Abs(devTPCnsigMeanKaon) > nSigmaCut || TMath::Abs(devTPCnsigMeanProton) > nSigmaCut ||
	      TMath::Abs(devTPCnsigSigmaPion) > nSigmaCut || TMath::Abs(devTPCnsigSigmaKaon) > nSigmaCut || TMath::Abs(devTPCnsigSigmaProton) > nSigmaCut ||
	      TMath::Abs(devTOFnsigMeanPion) > nSigmaCut || TMath::Abs(devTOFnsigMeanKaon) > nSigmaCut || TMath::Abs(devTOFnsigMeanProton) > nSigmaCut ||
	      TMath::Abs(devTOFnsigSigmaPion) > nSigmaCut || TMath::Abs(devTOFnsigSigmaKaon) > nSigmaCut || TMath::Abs(devTOFnsigSigmaProton) > nSigmaCut)
	    {
	      cout << runs[irun];
	      outFile << runs[irun];
	      if (TMath::Abs(devTPCnsigMeanPion) > nSigmaCut)
		{
		  cout << " - TPC Pion Mean";
		  outFile << " - TPC Pion Mean";
		}
	      if (TMath::Abs(devTPCnsigMeanKaon) > nSigmaCut)
		{
		  cout << " - TPC Kaon Mean";
		  outFile << " - TPC Kaon Mean";
		}
	      if (TMath::Abs(devTPCnsigMeanProton) > nSigmaCut)
		{
		  cout << " - TPC Proton Mean";
		  outFile << " - TPC Proton Mean";
		}
	      if (TMath::Abs(devTPCnsigSigmaPion) > nSigmaCut)
		{
		  cout << " - TPC Pion Sigma";
		  outFile << " - TPC Pion Sigma";
		}
	      if (TMath::Abs(devTPCnsigSigmaKaon) > nSigmaCut)
		{
		  cout << " - TPC Kaon Sigma";
		  outFile << " - TPC Kaon Sigma";
		}
	      if (TMath::Abs(devTPCnsigSigmaProton) > nSigmaCut)
		{
		  cout << " - TPC Proton Sigma";
		  outFile << " - TPC Proton Sigma";
		}
	      if (TMath::Abs(devTOFnsigMeanPion) > nSigmaCut)
		{
		  cout << " - TOF Pion Mean";
		  outFile << " - TOF Pion Mean";
		}
	      if (TMath::Abs(devTOFnsigMeanKaon) > nSigmaCut)
		{
		  cout << " - TOF Kaon Mean";
		  outFile << " - TOF Kaon Mean";
		}
	      if (TMath::Abs(devTOFnsigMeanProton) > nSigmaCut)
		{
		  cout << " - TOF Proton Mean";
		  outFile << " - TOF Proton Mean";
		}
	      if (TMath::Abs(devTOFnsigSigmaPion) > nSigmaCut)
		{
		  cout << " - TOF Pion Sigma";
		  outFile << " - TOF Pion Sigma";
		}
	      if (TMath::Abs(devTOFnsigSigmaKaon) > nSigmaCut)
		{
		  cout << " - TOF Kaon Sigma";
		  outFile << " - TOF Kaon Sigma";
		}
	      if (TMath::Abs(devTOFnsigSigmaProton) > nSigmaCut)
		{
		  cout << " - TOF Proton Sigma";
		  outFile << " - TOF Proton Sigma";
		}
	      cout << endl;
	      outFile << endl;
	      nBadNSig++;
	      if (isRunGood[irun]) isRunGood[irun] = kFALSE; // flag run as bad
	    }
	}
      cout << "Number of rejected runs: " << nBadNSig << endl;
      outFile << "Number of rejected runs: " << nBadNSig << endl;
    }

  // draw the deviations as a function of the run number
  TCanvas * cDevNSig = new TCanvas("cDevNSig","cDevNSig",300,150,700,500);
  cDevNSig->Divide(2,2);
  // TPC Means
  cDevNSig->cd(1);
  TH2F * hAxesDevTPCnsigMeans = new TH2F("hAxesDevTPCnsigMeans","",nRuns,0,nRuns,100,-10,10);
  hAxesDevTPCnsigMeans->SetTitle("Mean, TPC");
  for (Int_t irun=0; irun<nRuns; irun++)
    hAxesDevTPCnsigMeans->GetXaxis()->SetBinLabel(irun+1,Form("%i",runs[irun]));
  hAxesDevTPCnsigMeans->GetYaxis()->SetTitle("# of #sigma from Mean Value (TPC Means)");
  hAxesDevTPCnsigMeans->SetStats(kFALSE);
  hAxesDevTPCnsigMeans->DrawCopy();
  TLegend * lDevTPCnsigMean = new TLegend(.89,.79,.99,.99);
  hDevTPCnsigMeanPion->SetMarkerColor(Color[0]);
  hDevTPCnsigMeanPion->SetMarkerStyle(Marker[0]);
  hDevTPCnsigMeanPion->SetLineColor(Color[0]);
  hDevTPCnsigMeanPion->SetStats(kFALSE);
  hDevTPCnsigMeanPion->DrawCopy("Psame");
  lDevTPCnsigMean->AddEntry(hDevTPCnsigMeanPion,"#pi^{+}, #pi^{-}","p");
  hDevTPCnsigMeanKaon->SetMarkerColor(Color[1]);
  hDevTPCnsigMeanKaon->SetMarkerStyle(Marker[1]);
  hDevTPCnsigMeanKaon->SetLineColor(Color[1]);
  hDevTPCnsigMeanKaon->SetStats(kFALSE);
  hDevTPCnsigMeanKaon->DrawCopy("Psame");
  lDevTPCnsigMean->AddEntry(hDevTPCnsigMeanKaon,"K^{+}, K^{-}","p");
  hDevTPCnsigMeanProton->SetMarkerColor(Color[2]);
  hDevTPCnsigMeanProton->SetMarkerStyle(Marker[2]);
  hDevTPCnsigMeanProton->SetLineColor(Color[2]);
  hDevTPCnsigMeanProton->SetStats(kFALSE);
  hDevTPCnsigMeanProton->DrawCopy("Psame");
  lDevTPCnsigMean->AddEntry(hDevTPCnsigMeanProton,"p, #bar{p}","p");
  lDevTPCnsigMean->SetFillColor(0);
  lDevTPCnsigMean->DrawClone();
  fLine1->DrawCopy("same");
  fLine2->DrawCopy("same");
  fLine3->DrawCopy("same");
  // TPC Sigmas
  cDevNSig->cd(3);
  TH2F * hAxesDevTPCnsigSigmas = new TH2F("hAxesDevTPCnsigSigmas","",nRuns,0,nRuns,100,-10,10);
  hAxesDevTPCnsigSigmas->SetTitle("Sigma, TPC");
  for (Int_t irun=0; irun<nRuns; irun++)
    hAxesDevTPCnsigSigmas->GetXaxis()->SetBinLabel(irun+1,Form("%i",runs[irun]));
  hAxesDevTPCnsigSigmas->GetYaxis()->SetTitle("# of #sigma from Sigma Value (TPC Sigmas)");
  hAxesDevTPCnsigSigmas->SetStats(kFALSE);
  hAxesDevTPCnsigSigmas->DrawCopy();
  TLegend * lDevTPCnsigSigma = new TLegend(.89,.79,.99,.99);
  hDevTPCnsigSigmaPion->SetMarkerColor(Color[0]);
  hDevTPCnsigSigmaPion->SetMarkerStyle(Marker[0]);
  hDevTPCnsigSigmaPion->SetLineColor(Color[0]);
  hDevTPCnsigSigmaPion->SetStats(kFALSE);
  hDevTPCnsigSigmaPion->DrawCopy("Psame");
  lDevTPCnsigSigma->AddEntry(hDevTPCnsigSigmaPion,"#pi^{+}, #pi^{-}","p");
  hDevTPCnsigSigmaKaon->SetMarkerColor(Color[1]);
  hDevTPCnsigSigmaKaon->SetMarkerStyle(Marker[1]);
  hDevTPCnsigSigmaKaon->SetLineColor(Color[1]);
  hDevTPCnsigSigmaKaon->SetStats(kFALSE);
  hDevTPCnsigSigmaKaon->DrawCopy("Psame");
  lDevTPCnsigSigma->AddEntry(hDevTPCnsigSigmaKaon,"K^{+}, K^{-}","p");
  hDevTPCnsigSigmaProton->SetMarkerColor(Color[2]);
  hDevTPCnsigSigmaProton->SetMarkerStyle(Marker[2]);
  hDevTPCnsigSigmaProton->SetLineColor(Color[2]);
  hDevTPCnsigSigmaProton->SetStats(kFALSE);
  hDevTPCnsigSigmaProton->DrawCopy("Psame");
  lDevTPCnsigSigma->AddEntry(hDevTPCnsigSigmaProton,"p, #bar{p}","p");
  lDevTPCnsigSigma->SetFillColor(0);
  lDevTPCnsigSigma->DrawClone();
  fLine1->DrawCopy("same");
  fLine2->DrawCopy("same");
  fLine3->DrawCopy("same");
  // TOF Means
  cDevNSig->cd(2);
  TH2F * hAxesDevTOFnsigMeans = new TH2F("hAxesDevTOFnsigMeans","",nRuns,0,nRuns,100,-10,10);
  hAxesDevTOFnsigMeans->SetTitle("Mean, TOF");
  for (Int_t irun=0; irun<nRuns; irun++)
    hAxesDevTOFnsigMeans->GetXaxis()->SetBinLabel(irun+1,Form("%i",runs[irun]));
  hAxesDevTOFnsigMeans->GetYaxis()->SetTitle("# of #sigma from Mean Value (TOF Means)");
  hAxesDevTOFnsigMeans->SetStats(kFALSE);
  hAxesDevTOFnsigMeans->DrawCopy();
  TLegend * lDevTOFnsigMean = new TLegend(.89,.79,.99,.99);
  hDevTOFnsigMeanPion->SetMarkerColor(Color[0]);
  hDevTOFnsigMeanPion->SetMarkerStyle(Marker[0]);
  hDevTOFnsigMeanPion->SetLineColor(Color[0]);
  hDevTOFnsigMeanPion->SetStats(kFALSE);
  hDevTOFnsigMeanPion->DrawCopy("Psame");
  lDevTOFnsigMean->AddEntry(hDevTOFnsigMeanPion,"#pi^{+}, #pi^{-}","p");
  hDevTOFnsigMeanKaon->SetMarkerColor(Color[1]);
  hDevTOFnsigMeanKaon->SetMarkerStyle(Marker[1]);
  hDevTOFnsigMeanKaon->SetLineColor(Color[1]);
  hDevTOFnsigMeanKaon->SetStats(kFALSE);
  hDevTOFnsigMeanKaon->DrawCopy("Psame");
  lDevTOFnsigMean->AddEntry(hDevTOFnsigMeanKaon,"K^{+}, K^{-}","p");
  hDevTOFnsigMeanProton->SetMarkerColor(Color[2]);
  hDevTOFnsigMeanProton->SetMarkerStyle(Marker[2]);
  hDevTOFnsigMeanProton->SetLineColor(Color[2]);
  hDevTOFnsigMeanProton->SetStats(kFALSE);
  hDevTOFnsigMeanProton->DrawCopy("Psame");
  lDevTOFnsigMean->AddEntry(hDevTOFnsigMeanProton,"p, #bar{p}","p");
  lDevTOFnsigMean->SetFillColor(0);
  lDevTOFnsigMean->DrawClone();
  fLine1->DrawCopy("same");
  fLine2->DrawCopy("same");
  fLine3->DrawCopy("same");
  // TOF Sigmas
  cDevNSig->cd(4);
  TH2F * hAxesDevTOFnsigSigmas = new TH2F("hAxesDevTOFnsigSigmas","",nRuns,0,nRuns,100,-10,10);
  hAxesDevTOFnsigSigmas->SetTitle("Sigma, TOF");
  for (Int_t irun=0; irun<nRuns; irun++)
    hAxesDevTOFnsigSigmas->GetXaxis()->SetBinLabel(irun+1,Form("%i",runs[irun]));
  hAxesDevTOFnsigSigmas->GetYaxis()->SetTitle("# of #sigma from Sigma Value (TOF Sigmas)");
  hAxesDevTOFnsigSigmas->SetStats(kFALSE);
  hAxesDevTOFnsigSigmas->DrawCopy();
  TLegend * lDevTOFnsigSigma = new TLegend(.89,.79,.99,.99);
  hDevTOFnsigSigmaPion->SetMarkerColor(Color[0]);
  hDevTOFnsigSigmaPion->SetMarkerStyle(Marker[0]);
  hDevTOFnsigSigmaPion->SetLineColor(Color[0]);
  hDevTOFnsigSigmaPion->SetStats(kFALSE);
  hDevTOFnsigSigmaPion->DrawCopy("Psame");
  lDevTOFnsigSigma->AddEntry(hDevTOFnsigSigmaPion,"#pi^{+}, #pi^{-}","p");
  hDevTOFnsigSigmaKaon->SetMarkerColor(Color[1]);
  hDevTOFnsigSigmaKaon->SetMarkerStyle(Marker[1]);
  hDevTOFnsigSigmaKaon->SetLineColor(Color[1]);
  hDevTOFnsigSigmaKaon->SetStats(kFALSE);
  hDevTOFnsigSigmaKaon->DrawCopy("Psame");
  lDevTOFnsigSigma->AddEntry(hDevTOFnsigSigmaKaon,"K^{+}, K^{-}","p");
  hDevTOFnsigSigmaProton->SetMarkerColor(Color[2]);
  hDevTOFnsigSigmaProton->SetMarkerStyle(Marker[2]);
  hDevTOFnsigSigmaProton->SetLineColor(Color[2]);
  hDevTOFnsigSigmaProton->SetStats(kFALSE);
  hDevTOFnsigSigmaProton->DrawCopy("Psame");
  lDevTOFnsigSigma->AddEntry(hDevTOFnsigSigmaProton,"p, #bar{p}","p");
  lDevTOFnsigSigma->SetFillColor(0);
  lDevTOFnsigSigma->DrawClone();
  fLine1->DrawCopy("same");
  fLine2->DrawCopy("same");
  fLine3->DrawCopy("same");
  // write to file
  fout->cd();
  cDevNSig->Write();      
  
  //------------------------------------
  // Raw yields integrated over all Pt -
  //------------------------------------
  // fit horizontal lines to the histograms and use the value of the y-intercept as the mean
  TF1 * fitFuncIntegRawYieldAll = new TF1("fitFuncIntegRawYieldAll","[0]");
  TF1 * fitFuncIntegRawYieldPiPlus = new TF1("fitFuncIntegRawYieldPiPlus","[0]");
  TF1 * fitFuncIntegRawYieldKPlus = new TF1("fitFuncIntegRawYieldKPlus","[0]");
  TF1 * fitFuncIntegRawYieldProton = new TF1("fitFuncIntegRawYieldProton","[0]");
  TF1 * fitFuncIntegRawYieldPiMinus = new TF1("fitFuncIntegRawYieldPiMinus","[0]");
  TF1 * fitFuncIntegRawYieldKMinus = new TF1("fitFuncIntegRawYieldKMinus","[0]");
  TF1 * fitFuncIntegRawYieldAntiproton = new TF1("fitFuncIntegRawYieldAntiproton","[0]");

  IntegRawYieldAll->Fit(fitFuncIntegRawYieldAll,"QN");
  IntegRawYieldPiPlus->Fit(fitFuncIntegRawYieldPiPlus,"QN");
  IntegRawYieldKPlus->Fit(fitFuncIntegRawYieldKPlus,"QN");
  IntegRawYieldProton->Fit(fitFuncIntegRawYieldProton,"QN");
  IntegRawYieldPiMinus->Fit(fitFuncIntegRawYieldPiMinus,"QN");
  IntegRawYieldKMinus->Fit(fitFuncIntegRawYieldKMinus,"QN");
  IntegRawYieldAntiproton->Fit(fitFuncIntegRawYieldAntiproton,"QN");

  Float_t meanIntegRawYieldAll = fitFuncIntegRawYieldAll->GetParameter(0);
  Float_t meanIntegRawYieldPiPlus = fitFuncIntegRawYieldPiPlus->GetParameter(0);
  Float_t meanIntegRawYieldKPlus = fitFuncIntegRawYieldKPlus->GetParameter(0);
  Float_t meanIntegRawYieldProton = fitFuncIntegRawYieldProton->GetParameter(0);
  Float_t meanIntegRawYieldPiMinus = fitFuncIntegRawYieldPiMinus->GetParameter(0);
  Float_t meanIntegRawYieldKMinus = fitFuncIntegRawYieldKMinus->GetParameter(0);
  Float_t meanIntegRawYieldAntiproton = fitFuncIntegRawYieldAntiproton->GetParameter(0);

  // report outliers distributed more than nSigmaCut sigma away from the median
  // also fill histograms to plot the deviation in number of sigmas as a function of the run number
  TH1F * hDevIntegRawYieldAll = new TH1F("hDevIntegRawYieldAll","",nRuns,0,nRuns);
  TH1F * hDevIntegRawYieldPiPlus = new TH1F("hDevIntegRawYieldPiPlus","",nRuns,0,nRuns);
  TH1F * hDevIntegRawYieldKPlus = new TH1F("hDevIntegRawYieldKPlus","",nRuns,0,nRuns);
  TH1F * hDevIntegRawYieldProton = new TH1F("hDevIntegRawYieldProton","",nRuns,0,nRuns);
  TH1F * hDevIntegRawYieldPiMinus = new TH1F("hDevIntegRawYieldPiMinus","",nRuns,0,nRuns);
  TH1F * hDevIntegRawYieldKMinus = new TH1F("hDevIntegRawYieldKMinus","",nRuns,0,nRuns);
  TH1F * hDevIntegRawYieldAntiproton = new TH1F("hDevIntegRawYieldAntiproton","",nRuns,0,nRuns);

  cout << "\n\n\n!!! RUNS FOR WHICH THE INTEGRATED RAW YIELD IS MORE THAN " << nSigmaCut << " SIGMA FROM THE MEAN:\n";
  outFile << "\n\n\n!!! RUNS FOR WHICH THE INTEGRATED RAW YIELD IS MORE THAN " << nSigmaCut << " SIGMA FROM THE MEAN:\n";
  Int_t nBadIntegRaw = 0;
  for (Int_t irun=0; irun<nRuns; irun++)
    {
      Float_t devIntegRawYieldAll = (IntegRawYieldAll->GetBinContent(irun+1) - meanIntegRawYieldAll) / IntegRawYieldAll->GetBinError(irun+1);
      Float_t devIntegRawYieldPiPlus = (IntegRawYieldPiPlus->GetBinContent(irun+1) - meanIntegRawYieldPiPlus) / IntegRawYieldPiPlus->GetBinError(irun+1);
      Float_t devIntegRawYieldKPlus = (IntegRawYieldKPlus->GetBinContent(irun+1) - meanIntegRawYieldKPlus) / IntegRawYieldKPlus->GetBinError(irun+1);
      Float_t devIntegRawYieldProton = (IntegRawYieldProton->GetBinContent(irun+1) - meanIntegRawYieldProton) / IntegRawYieldProton->GetBinError(irun+1);
      Float_t devIntegRawYieldPiMinus = (IntegRawYieldPiMinus->GetBinContent(irun+1) - meanIntegRawYieldPiMinus) / IntegRawYieldPiMinus->GetBinError(irun+1);
      Float_t devIntegRawYieldKMinus = (IntegRawYieldKMinus->GetBinContent(irun+1) - meanIntegRawYieldKMinus) / IntegRawYieldKMinus->GetBinError(irun+1);
      Float_t devIntegRawYieldAntiproton = (IntegRawYieldAntiproton->GetBinContent(irun+1) - meanIntegRawYieldAntiproton) / IntegRawYieldAntiproton->GetBinError(irun+1);
      
      hDevIntegRawYieldAll->SetBinContent(irun+1,devIntegRawYieldAll);
      hDevIntegRawYieldPiPlus->SetBinContent(irun+1,devIntegRawYieldPiPlus);
      hDevIntegRawYieldKPlus->SetBinContent(irun+1,devIntegRawYieldKPlus);
      hDevIntegRawYieldProton->SetBinContent(irun+1,devIntegRawYieldProton);
      hDevIntegRawYieldPiMinus->SetBinContent(irun+1,devIntegRawYieldPiMinus);
      hDevIntegRawYieldKMinus->SetBinContent(irun+1,devIntegRawYieldKMinus);
      hDevIntegRawYieldAntiproton->SetBinContent(irun+1,devIntegRawYieldAntiproton);      

      if (TMath::Abs(devIntegRawYieldAll) > nSigmaCut || TMath::Abs(devIntegRawYieldPiPlus) > nSigmaCut || TMath::Abs(devIntegRawYieldKPlus) > nSigmaCut ||
	  TMath::Abs(devIntegRawYieldProton) > nSigmaCut || TMath::Abs(devIntegRawYieldPiMinus) > nSigmaCut || TMath::Abs(devIntegRawYieldKMinus) > nSigmaCut ||
	  TMath::Abs(devIntegRawYieldAntiproton) > nSigmaCut)
	{
	  cout << runs[irun];
	  outFile << runs[irun] << endl;
	  if (TMath::Abs(devIntegRawYieldAll) > nSigmaCut)
	    {
	      cout << " - All";
	      outFile << " - All";
	    }
	  if (TMath::Abs(devIntegRawYieldPiPlus) > nSigmaCut)
	    {
	      cout << " - PiPlus";
	      outFile << " - PiPlus";
	    }
	  if (TMath::Abs(devIntegRawYieldKPlus) > nSigmaCut)
	    {
	      cout << " - KPlus";
	      outFile << " - KPlus";
	    }
	  if (TMath::Abs(devIntegRawYieldProton) > nSigmaCut)
	    {
	      cout << " - Proton";
	      outFile << " - Proton";
	    }
	  if (TMath::Abs(devIntegRawYieldPiMinus) > nSigmaCut)
	    {
	      cout << " - PiMinus";
	      outFile << " - PiMinus";
	    }
	  if (TMath::Abs(devIntegRawYieldKMinus) > nSigmaCut)
	    {
	      cout << " - KMinus";
	      outFile << " - KMinus";
	    }
	  if (TMath::Abs(devIntegRawYieldAntiproton) > nSigmaCut)
	    {
	      cout << " - Antiproton";
	      outFile << " - Antiproton";
	    }
	  cout << endl;
	  outFile << endl;
	  nBadIntegRaw++;
	  if (isRunGood[irun]) isRunGood[irun] = kFALSE; // flag run as bad
	}
    }
  cout << "Number of rejected runs: " << nBadIntegRaw << endl;
  outFile << "Number of rejected runs: " << nBadIntegRaw << endl;
  
  // draw the deviations as a function of the run number
  TCanvas * cDevRawYield = new TCanvas("cDevRawYield","cDevRawYield",350,175,700,500);
  TLegend * lDevIntegRawYield = new TLegend(.89,.79,.99,.99);
  lDevIntegRawYield->SetFillColor(0);

  // all particle spectrum
  for (Int_t irun=0; irun<nRuns; irun++)
    hDevIntegRawYieldAll->GetXaxis()->SetBinLabel(irun+1,Form("%i",runs[irun]));
  hDevIntegRawYieldAll->SetTitle("Raw Yield, Integrated over all p_{T};;# of #sigma from Mean");
  hDevIntegRawYieldAll->GetYaxis()->SetTitleOffset(0.6);
  hDevIntegRawYieldAll->GetYaxis()->CenterTitle();
  hDevIntegRawYieldAll->SetStats(kFALSE);
  hDevIntegRawYieldAll->GetYaxis()->SetRangeUser(-7,7);
  hDevIntegRawYieldAll->SetMarkerStyle(34);
  hDevIntegRawYieldAll->SetMarkerColor(kGreen);
  hDevIntegRawYieldAll->DrawCopy("P");
  lDevIntegRawYield->AddEntry(hDevIntegRawYieldAll,"All Particles","p");
  // individual particles
  hDevIntegRawYieldPiPlus->SetMarkerColor(Color[0]);
  hDevIntegRawYieldPiPlus->SetLineColor(Color[0]);
  hDevIntegRawYieldPiPlus->SetMarkerStyle(Marker[0]);
  hDevIntegRawYieldPiPlus->SetStats(kFALSE);
  hDevIntegRawYieldPiPlus->DrawCopy("Psame");
  lDevIntegRawYield->AddEntry(hDevIntegRawYieldPiPlus,"#pi^{+}","p");
  hDevIntegRawYieldKPlus->SetMarkerColor(Color[1]);
  hDevIntegRawYieldKPlus->SetLineColor(Color[1]);
  hDevIntegRawYieldKPlus->SetMarkerStyle(Marker[1]);
  hDevIntegRawYieldKPlus->SetStats(kFALSE);
  hDevIntegRawYieldKPlus->DrawCopy("Psame");
  lDevIntegRawYield->AddEntry(hDevIntegRawYieldKPlus,"K^{+}","p");
  hDevIntegRawYieldProton->SetMarkerColor(Color[2]);
  hDevIntegRawYieldProton->SetLineColor(Color[2]);
  hDevIntegRawYieldProton->SetMarkerStyle(Marker[2]);
  hDevIntegRawYieldProton->SetStats(kFALSE);
  hDevIntegRawYieldProton->DrawCopy("Psame");
  lDevIntegRawYield->AddEntry(hDevIntegRawYieldProton,"p","p");
  hDevIntegRawYieldPiMinus->SetMarkerColor(Color[0]);
  hDevIntegRawYieldPiMinus->SetLineColor(Color[0]);
  hDevIntegRawYieldPiMinus->SetMarkerStyle(Marker[3]);
  hDevIntegRawYieldPiMinus->SetStats(kFALSE);
  hDevIntegRawYieldPiMinus->DrawCopy("Psame");
  lDevIntegRawYield->AddEntry(hDevIntegRawYieldPiMinus,"#pi^{-}","p");
  hDevIntegRawYieldKMinus->SetMarkerColor(Color[1]);
  hDevIntegRawYieldKMinus->SetLineColor(Color[1]);
  hDevIntegRawYieldKMinus->SetMarkerStyle(Marker[4]);
  hDevIntegRawYieldKMinus->SetStats(kFALSE);
  hDevIntegRawYieldKMinus->DrawCopy("Psame");
  lDevIntegRawYield->AddEntry(hDevIntegRawYieldKMinus,"K^{-}","p");
  hDevIntegRawYieldAntiproton->SetMarkerColor(Color[2]);
  hDevIntegRawYieldAntiproton->SetLineColor(Color[2]);
  hDevIntegRawYieldAntiproton->SetMarkerStyle(Marker[5]);
  hDevIntegRawYieldAntiproton->SetStats(kFALSE);
  hDevIntegRawYieldAntiproton->SetTitle("Raw Yield, Integrated over all p_{T};;# of #sigma from Mean");
  hDevIntegRawYieldAntiproton->GetYaxis()->SetTitleOffset(0.6);
  hDevIntegRawYieldAntiproton->GetYaxis()->CenterTitle();
  hDevIntegRawYieldAntiproton->DrawCopy("Psame");
  lDevIntegRawYield->AddEntry(hDevIntegRawYieldAntiproton,"#bar{p}","p");
  lDevIntegRawYield->DrawClone();
  fLine2->DrawCopy("same");
  fLine3->DrawCopy("same");
  // write to file
  fout->cd();
  cDevRawYield->Write();


  //---------------
  // efficiencies -
  //---------------
  if (useMC)
    {
      // fit horizontal lines to the histograms and use the value of the y-intercept as the mean
      TF1 * fitFuncEffPiPlus = new TF1("fitFuncEffPiPlus","[0]");
      TF1 * fitFuncEffKPlus = new TF1("fitFuncEffKPlus","[0]");
      TF1 * fitFuncEffProton = new TF1("fitFuncEffProton","[0]");
      TF1 * fitFuncEffPiMinus = new TF1("fitFuncEffPiMinus","[0]");
      TF1 * fitFuncEffKMinus = new TF1("fitFuncEffKMinus","[0]");
      TF1 * fitFuncEffAntiproton = new TF1("fitFuncEffAntiproton","[0]");

      EfficiencyPiPlus->Fit(fitFuncEffPiPlus,"QN");
      EfficiencyKPlus->Fit(fitFuncEffKPlus,"QN");
      EfficiencyProton->Fit(fitFuncEffProton,"QN");
      EfficiencyPiMinus->Fit(fitFuncEffPiMinus,"QN");
      EfficiencyKMinus->Fit(fitFuncEffKMinus,"QN");
      EfficiencyAntiproton->Fit(fitFuncEffAntiproton,"QN");

      Float_t meanEffPiPlus = fitFuncEffPiPlus->GetParameter(0);
      Float_t meanEffKPlus = fitFuncEffKPlus->GetParameter(0);
      Float_t meanEffProton = fitFuncEffProton->GetParameter(0);
      Float_t meanEffPiMinus = fitFuncEffPiMinus->GetParameter(0);
      Float_t meanEffKMinus = fitFuncEffKMinus->GetParameter(0);
      Float_t meanEffAntiproton = fitFuncEffAntiproton->GetParameter(0);
      
      // report outliers distributed more than nSigmaCut sigma away from the median
      // also fill histograms to plot the deviation in number of sigmas as a function of the run number
      TH1F * hDevEffPiPlus = new TH1F("hDevEffPiPlus","",nRuns,0,nRuns);
      TH1F * hDevEffKPlus = new TH1F("hDevEffKPlus","",nRuns,0,nRuns);
      TH1F * hDevEffProton = new TH1F("hDevEffProton","",nRuns,0,nRuns);
      TH1F * hDevEffPiMinus = new TH1F("hDevEffPiMinus","",nRuns,0,nRuns);
      TH1F * hDevEffKMinus = new TH1F("hDevEffKMinus","",nRuns,0,nRuns);
      TH1F * hDevEffAntiproton = new TH1F("hDevEffAntiproton","",nRuns,0,nRuns);

      cout << "\n\n\n!!! RUNS FOR WHICH THE EFFICIENCY IS MORE THAN " << nSigmaCut << " SIGMA FROM THE MEAN:\n";
      outFile << "\n\n\n!!! RUNS FOR WHICH THE EFFICIENCY IS MORE THAN " << nSigmaCut << " SIGMA FROM THE MEAN:\n";
      Int_t nBadEff = 0;
      for (Int_t irun=0; irun<nRuns; irun++)
	{
	  // I know this is not very robust, but it's only one run that's giving me a problem b/c the proton efficiency has 0 error
	  if (EfficiencyProton->GetBinError(irun+1) == 0)
	    {
	      cout << runs[irun] << " - PROTON EFFICIENCY HAS ZERO ERROR\n";
	      outFile << runs[irun] << " - PROTON EFFICIENCY HAS ZERO ERROR\n";
	      nBadEff++;
	      continue;
	    }

	  Float_t devEffPiPlus = (EfficiencyPiPlus->GetBinContent(irun+1) - meanEffPiPlus) / EfficiencyPiPlus->GetBinError(irun+1);
	  Float_t devEffKPlus = (EfficiencyKPlus->GetBinContent(irun+1) - meanEffKPlus) / EfficiencyKPlus->GetBinError(irun+1);
	  Float_t devEffProton = (EfficiencyProton->GetBinContent(irun+1) - meanEffProton) / EfficiencyProton->GetBinError(irun+1);
	  Float_t devEffPiMinus = (EfficiencyPiMinus->GetBinContent(irun+1) - meanEffPiMinus) / EfficiencyPiMinus->GetBinError(irun+1);
	  Float_t devEffKMinus = (EfficiencyKMinus->GetBinContent(irun+1) - meanEffKMinus) / EfficiencyKMinus->GetBinError(irun+1);
	  Float_t devEffAntiproton = (EfficiencyAntiproton->GetBinContent(irun+1) - meanEffAntiproton) / EfficiencyAntiproton->GetBinError(irun+1);

	  hDevEffPiPlus->SetBinContent(irun+1,devEffPiPlus);
	  hDevEffKPlus->SetBinContent(irun+1,devEffKPlus);
	  hDevEffProton->SetBinContent(irun+1,devEffProton);
	  hDevEffPiMinus->SetBinContent(irun+1,devEffPiMinus);
	  hDevEffKMinus->SetBinContent(irun+1,devEffKMinus);
	  hDevEffAntiproton->SetBinContent(irun+1,devEffAntiproton);

	  if (TMath::Abs(devEffPiPlus) > nSigmaCut || TMath::Abs(devEffKPlus) > nSigmaCut || TMath::Abs(devEffProton) > nSigmaCut ||
	      TMath::Abs(devEffPiMinus) > nSigmaCut || TMath::Abs(devEffKMinus) > nSigmaCut || TMath::Abs(devEffAntiproton) > nSigmaCut)
	    {
	      cout << runs[irun];
	      outFile << runs[irun];
	      if (TMath::Abs(devEffPiPlus) > nSigmaCut)
		{
		  cout << " - PiPlus";
		  outFile << " - PiPlus";
		}
	      if (TMath::Abs(devEffKPlus) > nSigmaCut)
		{
		  cout << " - KPlus";
		  outFile << " - KPlus";
		}
	      if (TMath::Abs(devEffProton) > nSigmaCut)
		{
		  cout << " - Proton";
		  outFile << " - Proton";
		}
	      if (TMath::Abs(devEffPiMinus) > nSigmaCut)
		{
		  cout << " - PiMinus";
		  outFile << " - PiMinus";
		}
	      if (TMath::Abs(devEffKMinus) > nSigmaCut)
		{
		  cout << " - KMinus";
		  outFile << " - KMinus";
		}
	      if (TMath::Abs(devEffAntiproton) > nSigmaCut)
		{
		  cout << " - Antiproton";
		  outFile << " - Antiproton";
		}
	      cout << endl;
	      outFile << endl;
	      nBadEff++;
	      if (isRunGood[irun]) isRunGood[irun] = kFALSE; // flag run as bad
	    }
	}
      cout << "Number of rejected runs: " << nBadEff << endl;
      outFile << "Number of rejected runs: " << nBadEff << endl; 

      // draw the deviations as a function of the run number
      TCanvas * cDevEff = new TCanvas("cDevEff","cDevEff",400,200,700,500);
      TH2F * hAxesDevEff = new TH2F("hAxesDevEff","",nRuns,0,nRuns,100,-15,15);
      hAxesDevEff->SetTitle("MC Correction Factor at p_{T} = 0.9 GeV/c");
      for (Int_t irun=0; irun<nRuns; irun++)
	hAxesDevEff->GetXaxis()->SetBinLabel(irun+1,Form("%i",runs[irun]));
      hAxesDevEff->GetYaxis()->SetTitle("# of #sigma from mean");
      hAxesDevEff->GetYaxis()->CenterTitle();
      hAxesDevEff->SetStats(kFALSE);
      hAxesDevEff->DrawCopy();
      TLegend * lDevEff = new TLegend(.89,.79,.99,.99);
      hDevEffPiPlus->SetMarkerColor(Color[0]);
      hDevEffPiPlus->SetLineColor(Color[0]);
      hDevEffPiPlus->SetMarkerStyle(Marker[0]);
      hDevEffPiPlus->SetStats(kFALSE);
      hDevEffPiPlus->DrawCopy("Psame");
      lDevEff->AddEntry(hDevEffPiPlus,"#pi^{+}","p");
      hDevEffKPlus->SetMarkerColor(Color[1]);
      hDevEffKPlus->SetLineColor(Color[1]);
      hDevEffKPlus->SetMarkerStyle(Marker[1]);
      hDevEffKPlus->SetStats(kFALSE);
      hDevEffKPlus->DrawCopy("Psame");
      lDevEff->AddEntry(hDevEffKPlus,"K^{+}","p");
      hDevEffProton->SetMarkerColor(Color[2]);
      hDevEffProton->SetLineColor(Color[2]);
      hDevEffProton->SetMarkerStyle(Marker[2]);
      hDevEffProton->SetStats(kFALSE);
      hDevEffProton->DrawCopy("Psame");
      lDevEff->AddEntry(hDevEffProton,"p","p");
      hDevEffPiMinus->SetMarkerColor(Color[0]);
      hDevEffPiMinus->SetLineColor(Color[0]);
      hDevEffPiMinus->SetMarkerStyle(Marker[3]);
      hDevEffPiMinus->SetStats(kFALSE);
      hDevEffPiMinus->DrawCopy("Psame");
      lDevEff->AddEntry(hDevEffPiMinus,"#pi^{-}","p");
      hDevEffKMinus->SetMarkerColor(Color[1]);
      hDevEffKMinus->SetLineColor(Color[1]);
      hDevEffKMinus->SetMarkerStyle(Marker[4]);
      hDevEffKMinus->SetStats(kFALSE);
      hDevEffKMinus->DrawCopy("Psame");
      lDevEff->AddEntry(hDevEffKMinus,"K^{-}","p");
      hDevEffAntiproton->SetMarkerColor(Color[2]);
      hDevEffAntiproton->SetLineColor(Color[2]);
      hDevEffAntiproton->SetMarkerStyle(Marker[5]);
      hDevEffAntiproton->SetStats(kFALSE);
      hDevEffAntiproton->DrawCopy("Psame");
      lDevEff->AddEntry(hDevEffAntiproton,"#bar{p}","p");      
      lDevEff->SetFillColor(0);
      lDevEff->DrawClone();
      fLine1->DrawCopy("same");
      fLine2->DrawCopy("same");
      fLine3->DrawCopy("same");
      // write to file
      fout->cd();
      cDevEff->Write();

    } // end if (useMC)

  
  //------------------------
  // matching efficiencies -
  //------------------------
  // because the error bars are so small for data, I can only use the error bars for MC
  if (useMC)
    {
      // fit horizontal lines to the histograms and use the value of the y-intercept as the mean
      TF1 * fitFuncMatchEffPos = new TF1("fitFuncMatchEffPos","[0]");
      TF1 * fitFuncMatchEffNeg = new TF1("fitFuncMatchEffNeg","[0]");
      
      MatchEffPos->Fit(fitFuncMatchEffPos,"QN");  
      MatchEffNeg->Fit(fitFuncMatchEffNeg,"QN");  
      
      Float_t meanMatchEffPos = fitFuncMatchEffPos->GetParameter(0);
      Float_t meanMatchEffNeg = fitFuncMatchEffNeg->GetParameter(0);
      
      // report outliers distributed more than nSigmaCut sigma away from the median
      // also fill histograms to plot the deviation in number of sigmas as a function of the run number
      TH1F * hDevMatchEffPos = new TH1F("hDevMatchEffPos","",nRuns,0,nRuns);
      TH1F * hDevMatchEffNeg = new TH1F("hDevMatchEffNeg","",nRuns,0,nRuns);
      
      cout << "\n\n\n!!! RUNS FOR WHICH THE MATCHING EFFICIENCY IS MORE THAN " << nSigmaCut << " SIGMA FROM THE MEAN:\n";
      outFile << "\n\n\n!!! RUNS FOR WHICH THE MATCHING EFFICIENCY IS MORE THAN " << nSigmaCut << " SIGMA FROM THE MEAN:\n";
      Int_t nBadMatchEff = 0;
      for (Int_t irun=0; irun<nRuns; irun++)
	{
	  Float_t devMatchEffPos = (MatchEffPos->GetBinContent(irun+1) - meanMatchEffPos) / MatchEffPos->GetBinError(irun+1);
	  Float_t devMatchEffNeg = (MatchEffNeg->GetBinContent(irun+1) - meanMatchEffNeg) / MatchEffNeg->GetBinError(irun+1);

	  hDevMatchEffPos->SetBinContent(irun+1,devMatchEffPos);
	  hDevMatchEffNeg->SetBinContent(irun+1,devMatchEffNeg);
	  
	  if (TMath::Abs(devMatchEffPos) > nSigmaCut || TMath::Abs(devMatchEffNeg) > nSigmaCut)
	    {
	      cout << runs[irun];
	      outFile << runs[irun];
	      if (TMath::Abs(devMatchEffPos) > nSigmaCut)
		{
		  cout << " - Pos";
		  outFile << " - Pos";
		}
	      if (TMath::Abs(devMatchEffNeg) > nSigmaCut)
		{
		  cout << " - Neg";
		  outFile << " - Neg";
		}
	      cout << endl;
	      outFile << endl;
	      nBadMatchEff++;
	      if (isRunGood[irun]) isRunGood[irun] = kFALSE; // flag run as bad
	    }
	}
      cout << "Number of rejected runs: " << nBadMatchEff << endl;
      outFile << "Number of rejected runs: " << nBadMatchEff << endl; 
    }
  else
    {
      // project the matching efficiency histograms onto the y-axis
      TH1F * MatchEffPosProj = new TH1F("MatchEffPosProj","",100,0.54,0.68);
      TH1F * MatchEffNegProj = new TH1F("MatchEffNegProj","",100,0.54,0.68);
      for (Int_t irun=0; irun<nRuns; irun++)
	{
	  MatchEffPosProj->Fill(MatchEffPos->GetBinContent(irun+1));
	  MatchEffNegProj->Fill(MatchEffNeg->GetBinContent(irun+1));
	}
      
        // fit with gaussians and reject runs that lie more than 3 sigma from the mean
      TF1 * fMatchEffPosProjFit = new TF1("fMatchEffPosProjFit","gaus");
      TF1 * fMatchEffNegProjFit = new TF1("fMatchEffNegProjFit","gaus");
      
      MatchEffPosProj->Fit(fMatchEffPosProjFit,"N","",.55,.65);
      MatchEffNegProj->Fit(fMatchEffNegProjFit,"N","",.55,.65);
      
      Float_t meanMatchEffPos = fMatchEffPosProjFit->GetParameter(1);
      Float_t sigMatchEffPos = fMatchEffPosProjFit->GetParameter(2);
      Float_t meanMatchEffNeg = fMatchEffNegProjFit->GetParameter(1);
      Float_t sigMatchEffNeg = fMatchEffNegProjFit->GetParameter(2);
      
      // histograms for plotting the deviation against the run number
      TH1F * hDevMatchEffPos = new TH1F("hDevMatchEffPos","",nRuns,0,nRuns);
      TH1F * hDevMatchEffNeg = new TH1F("hDevMatchEffNeg","",nRuns,0,nRuns);

      cout << "\n\n\n!!! RUNS FOR WHICH THE MATCHING EFFICIENCY IS MORE THAN " << nSigmaCut << " SIGMA FROM THE MEAN:\n";
      outFile << "\n\n\n!!! RUNS FOR WHICH THE MATCHING EFFICIENCY IS MORE THAN " << nSigmaCut << " SIGMA FROM THE MEAN:\n";
      Int_t nBadMatchEff = 0;
      for (Int_t irun=0; irun<nRuns; irun++)
	{
	  Float_t devMatchEffPos = (MatchEffPos->GetBinContent(irun+1) - meanMatchEffPos) / sigMatchEffPos;
	  Float_t devMatchEffNeg = (MatchEffNeg->GetBinContent(irun+1) - meanMatchEffNeg) / sigMatchEffNeg;
	  
	  hDevMatchEffPos->SetBinContent(irun+1,devMatchEffPos);
	  hDevMatchEffNeg->SetBinContent(irun+1,devMatchEffNeg);
	  
	  if (TMath::Abs(devMatchEffPos) > nSigmaCut || TMath::Abs(devMatchEffNeg) > nSigmaCut)
	    {
	      cout << runs[irun];
	      outFile << runs[irun];
	      if (TMath::Abs(devMatchEffPos) > nSigmaCut)
		{
		  cout << " - Pos";
		  outFile << " - Pos";
		}
	      if (TMath::Abs(devMatchEffNeg) > nSigmaCut)
		{
		  cout << " - Neg";
		  outFile << " - Neg";
		}
	      cout << endl;
	      outFile << endl;
	      nBadMatchEff++;
	      if (isRunGood[irun]) isRunGood[irun] = kFALSE; // flag run as bad
	    }
	}
      cout << "Number of rejected runs: " << nBadMatchEff << endl;
      outFile << "Number of rejected runs: " << nBadMatchEff << endl; 
    }

  // draw the deviations as a function of the run number
  TCanvas * cDevMatchEff = new TCanvas("cDevMatchEff","cDevMatchEff",450,225,700,500);
  TH2F * hAxesDevMatchEff = new TH2F("hAxesDevMatchEff","",nRuns,0,nRuns,100,-30,30);
  hAxesDevMatchEff->SetTitle("TOF Matching Efficiency at p_{T} = 0.9 GeV/c;;Deviation from the Mean in # of #sigma");
  hAxesDevMatchEff->GetYaxis()->CenterTitle();
  for (Int_t irun=0; irun<nRuns; irun++)
    hAxesDevMatchEff->GetXaxis()->SetBinLabel(irun+1,Form("%i",runs[irun]));
  hAxesDevMatchEff->SetStats(kFALSE);
  hAxesDevMatchEff->DrawCopy();
  TLegend * lDevMatchEff = new TLegend(.89,.79,.99,.99);
  hDevMatchEffPos->SetMarkerColor(kBlue);
  hDevMatchEffPos->SetLineColor(kBlue);
  hDevMatchEffPos->SetMarkerStyle(Marker[0]);
  hDevMatchEffPos->SetStats(kFALSE);
  hDevMatchEffPos->DrawCopy("Psame");
  lDevMatchEff->AddEntry(hDevMatchEffPos,"Positive Particles","p");
  hDevMatchEffNeg->SetMarkerColor(kRed);
  hDevMatchEffNeg->SetLineColor(kRed);
  hDevMatchEffNeg->SetMarkerStyle(Marker[1]);
  hDevMatchEffNeg->SetStats(kFALSE);
  hDevMatchEffNeg->DrawCopy("Psame");
  lDevMatchEff->AddEntry(hDevMatchEffNeg,"Negative Particles","p");
  lDevMatchEff->SetFillColor(0);
  lDevMatchEff->DrawClone();
  //  fLine1->DrawCopy("same");
  fLine2->DrawCopy("same");
  fLine3->DrawCopy("same");
  // write to file
  fout->cd();
  cDevMatchEff->Write();

  // also plot value/mean on a new canvas
  TCanvas * cDataOverMeanMatchEff = new TCanvas("cDataOverMeanMatchEff","cDataOverMeanMatchEff");
  TH1F * hDataOverFitMatchEffPos = (TH1F*)MatchEffPos->Clone();
  hDataOverFitMatchEffPos->Scale(1./meanMatchEffPos);
  TH1F * hDataOverFitMatchEffNeg = (TH1F*)MatchEffNeg->Clone();
  hDataOverFitMatchEffNeg->Scale(1./meanMatchEffNeg);
  TH2F * hAxesDataOverMeanMatchEff = new TH2F("hAxesDataOverMeanMatchEff","Value/Mean for TOF Matching Efficiency at p_{T} = 0.9 GeV/c",nRuns,0,nRuns,100,0.5,1.5);
  for (Int_t irun=0; irun<nRuns; irun++)
    hAxesDataOverMeanMatchEff->GetXaxis()->SetBinLabel(irun+1,Form("%i",runs[irun]));
  hAxesDataOverMeanMatchEff->DrawCopy();
  TLegend * lDataOverMeanMatchEff = new TLegend(.69,.69,.99,.99);
  hDataOverFitMatchEffPos->SetMarkerColor(kBlue);
  hDataOverFitMatchEffPos->SetMarkerStyle(Marker[0]);
  hDataOverFitMatchEffPos->SetMarkerSize(.75);
  hDataOverFitMatchEffPos->DrawCopy("histPsame");
  lDataOverMeanMatchEff->AddEntry(hDataOverFitMatchEffPos,"Pos","p");
  hDataOverFitMatchEffNeg->SetMarkerColor(kRed);
  hDataOverFitMatchEffNeg->SetMarkerStyle(Marker[1]);
  hDataOverFitMatchEffNeg->SetMarkerSize(.75);
  hDataOverFitMatchEffNeg->DrawCopy("histPsame");
  lDataOverMeanMatchEff->AddEntry(hDataOverFitMatchEffNeg,"Neg","p");
  lDataOverMeanMatchEff->DrawClone();
  // write to file
  fout->cd();
  cDataOverMeanMatchEff->Write();


  //--------------------
  // All rejected runs -
  //--------------------
  cout << "\n\n\n!!! LIST OF ALL REJECTED RUNS:\n";
  outFile << "\n\n\n!!! LIST OF ALL REJECTED RUNS:\n";
  Int_t nBadTotal=0;
  for (Int_t irun=0; irun<nRuns; irun++)
    {
      if (!isRunGood[irun])
	{
	  cout << runs[irun] << endl;
	  outFile << runs[irun] << endl;
	  nBadTotal++;
	}
    }
  cout << "Total number of rejected runs: " << nBadTotal << endl;
  outFile << "Total number of rejected runs: " << nBadTotal << endl;
  
  // close the output text file
  outFile.close();

  Printf("\n\n\n--- Leaving function FindOutliers() ---\n\n\n");
}






 FindOutliers.C:1
 FindOutliers.C:2
 FindOutliers.C:3
 FindOutliers.C:4
 FindOutliers.C:5
 FindOutliers.C:6
 FindOutliers.C:7
 FindOutliers.C:8
 FindOutliers.C:9
 FindOutliers.C:10
 FindOutliers.C:11
 FindOutliers.C:12
 FindOutliers.C:13
 FindOutliers.C:14
 FindOutliers.C:15
 FindOutliers.C:16
 FindOutliers.C:17
 FindOutliers.C:18
 FindOutliers.C:19
 FindOutliers.C:20
 FindOutliers.C:21
 FindOutliers.C:22
 FindOutliers.C:23
 FindOutliers.C:24
 FindOutliers.C:25
 FindOutliers.C:26
 FindOutliers.C:27
 FindOutliers.C:28
 FindOutliers.C:29
 FindOutliers.C:30
 FindOutliers.C:31
 FindOutliers.C:32
 FindOutliers.C:33
 FindOutliers.C:34
 FindOutliers.C:35
 FindOutliers.C:36
 FindOutliers.C:37
 FindOutliers.C:38
 FindOutliers.C:39
 FindOutliers.C:40
 FindOutliers.C:41
 FindOutliers.C:42
 FindOutliers.C:43
 FindOutliers.C:44
 FindOutliers.C:45
 FindOutliers.C:46
 FindOutliers.C:47
 FindOutliers.C:48
 FindOutliers.C:49
 FindOutliers.C:50
 FindOutliers.C:51
 FindOutliers.C:52
 FindOutliers.C:53
 FindOutliers.C:54
 FindOutliers.C:55
 FindOutliers.C:56
 FindOutliers.C:57
 FindOutliers.C:58
 FindOutliers.C:59
 FindOutliers.C:60
 FindOutliers.C:61
 FindOutliers.C:62
 FindOutliers.C:63
 FindOutliers.C:64
 FindOutliers.C:65
 FindOutliers.C:66
 FindOutliers.C:67
 FindOutliers.C:68
 FindOutliers.C:69
 FindOutliers.C:70
 FindOutliers.C:71
 FindOutliers.C:72
 FindOutliers.C:73
 FindOutliers.C:74
 FindOutliers.C:75
 FindOutliers.C:76
 FindOutliers.C:77
 FindOutliers.C:78
 FindOutliers.C:79
 FindOutliers.C:80
 FindOutliers.C:81
 FindOutliers.C:82
 FindOutliers.C:83
 FindOutliers.C:84
 FindOutliers.C:85
 FindOutliers.C:86
 FindOutliers.C:87
 FindOutliers.C:88
 FindOutliers.C:89
 FindOutliers.C:90
 FindOutliers.C:91
 FindOutliers.C:92
 FindOutliers.C:93
 FindOutliers.C:94
 FindOutliers.C:95
 FindOutliers.C:96
 FindOutliers.C:97
 FindOutliers.C:98
 FindOutliers.C:99
 FindOutliers.C:100
 FindOutliers.C:101
 FindOutliers.C:102
 FindOutliers.C:103
 FindOutliers.C:104
 FindOutliers.C:105
 FindOutliers.C:106
 FindOutliers.C:107
 FindOutliers.C:108
 FindOutliers.C:109
 FindOutliers.C:110
 FindOutliers.C:111
 FindOutliers.C:112
 FindOutliers.C:113
 FindOutliers.C:114
 FindOutliers.C:115
 FindOutliers.C:116
 FindOutliers.C:117
 FindOutliers.C:118
 FindOutliers.C:119
 FindOutliers.C:120
 FindOutliers.C:121
 FindOutliers.C:122
 FindOutliers.C:123
 FindOutliers.C:124
 FindOutliers.C:125
 FindOutliers.C:126
 FindOutliers.C:127
 FindOutliers.C:128
 FindOutliers.C:129
 FindOutliers.C:130
 FindOutliers.C:131
 FindOutliers.C:132
 FindOutliers.C:133
 FindOutliers.C:134
 FindOutliers.C:135
 FindOutliers.C:136
 FindOutliers.C:137
 FindOutliers.C:138
 FindOutliers.C:139
 FindOutliers.C:140
 FindOutliers.C:141
 FindOutliers.C:142
 FindOutliers.C:143
 FindOutliers.C:144
 FindOutliers.C:145
 FindOutliers.C:146
 FindOutliers.C:147
 FindOutliers.C:148
 FindOutliers.C:149
 FindOutliers.C:150
 FindOutliers.C:151
 FindOutliers.C:152
 FindOutliers.C:153
 FindOutliers.C:154
 FindOutliers.C:155
 FindOutliers.C:156
 FindOutliers.C:157
 FindOutliers.C:158
 FindOutliers.C:159
 FindOutliers.C:160
 FindOutliers.C:161
 FindOutliers.C:162
 FindOutliers.C:163
 FindOutliers.C:164
 FindOutliers.C:165
 FindOutliers.C:166
 FindOutliers.C:167
 FindOutliers.C:168
 FindOutliers.C:169
 FindOutliers.C:170
 FindOutliers.C:171
 FindOutliers.C:172
 FindOutliers.C:173
 FindOutliers.C:174
 FindOutliers.C:175
 FindOutliers.C:176
 FindOutliers.C:177
 FindOutliers.C:178
 FindOutliers.C:179
 FindOutliers.C:180
 FindOutliers.C:181
 FindOutliers.C:182
 FindOutliers.C:183
 FindOutliers.C:184
 FindOutliers.C:185
 FindOutliers.C:186
 FindOutliers.C:187
 FindOutliers.C:188
 FindOutliers.C:189
 FindOutliers.C:190
 FindOutliers.C:191
 FindOutliers.C:192
 FindOutliers.C:193
 FindOutliers.C:194
 FindOutliers.C:195
 FindOutliers.C:196
 FindOutliers.C:197
 FindOutliers.C:198
 FindOutliers.C:199
 FindOutliers.C:200
 FindOutliers.C:201
 FindOutliers.C:202
 FindOutliers.C:203
 FindOutliers.C:204
 FindOutliers.C:205
 FindOutliers.C:206
 FindOutliers.C:207
 FindOutliers.C:208
 FindOutliers.C:209
 FindOutliers.C:210
 FindOutliers.C:211
 FindOutliers.C:212
 FindOutliers.C:213
 FindOutliers.C:214
 FindOutliers.C:215
 FindOutliers.C:216
 FindOutliers.C:217
 FindOutliers.C:218
 FindOutliers.C:219
 FindOutliers.C:220
 FindOutliers.C:221
 FindOutliers.C:222
 FindOutliers.C:223
 FindOutliers.C:224
 FindOutliers.C:225
 FindOutliers.C:226
 FindOutliers.C:227
 FindOutliers.C:228
 FindOutliers.C:229
 FindOutliers.C:230
 FindOutliers.C:231
 FindOutliers.C:232
 FindOutliers.C:233
 FindOutliers.C:234
 FindOutliers.C:235
 FindOutliers.C:236
 FindOutliers.C:237
 FindOutliers.C:238
 FindOutliers.C:239
 FindOutliers.C:240
 FindOutliers.C:241
 FindOutliers.C:242
 FindOutliers.C:243
 FindOutliers.C:244
 FindOutliers.C:245
 FindOutliers.C:246
 FindOutliers.C:247
 FindOutliers.C:248
 FindOutliers.C:249
 FindOutliers.C:250
 FindOutliers.C:251
 FindOutliers.C:252
 FindOutliers.C:253
 FindOutliers.C:254
 FindOutliers.C:255
 FindOutliers.C:256
 FindOutliers.C:257
 FindOutliers.C:258
 FindOutliers.C:259
 FindOutliers.C:260
 FindOutliers.C:261
 FindOutliers.C:262
 FindOutliers.C:263
 FindOutliers.C:264
 FindOutliers.C:265
 FindOutliers.C:266
 FindOutliers.C:267
 FindOutliers.C:268
 FindOutliers.C:269
 FindOutliers.C:270
 FindOutliers.C:271
 FindOutliers.C:272
 FindOutliers.C:273
 FindOutliers.C:274
 FindOutliers.C:275
 FindOutliers.C:276
 FindOutliers.C:277
 FindOutliers.C:278
 FindOutliers.C:279
 FindOutliers.C:280
 FindOutliers.C:281
 FindOutliers.C:282
 FindOutliers.C:283
 FindOutliers.C:284
 FindOutliers.C:285
 FindOutliers.C:286
 FindOutliers.C:287
 FindOutliers.C:288
 FindOutliers.C:289
 FindOutliers.C:290
 FindOutliers.C:291
 FindOutliers.C:292
 FindOutliers.C:293
 FindOutliers.C:294
 FindOutliers.C:295
 FindOutliers.C:296
 FindOutliers.C:297
 FindOutliers.C:298
 FindOutliers.C:299
 FindOutliers.C:300
 FindOutliers.C:301
 FindOutliers.C:302
 FindOutliers.C:303
 FindOutliers.C:304
 FindOutliers.C:305
 FindOutliers.C:306
 FindOutliers.C:307
 FindOutliers.C:308
 FindOutliers.C:309
 FindOutliers.C:310
 FindOutliers.C:311
 FindOutliers.C:312
 FindOutliers.C:313
 FindOutliers.C:314
 FindOutliers.C:315
 FindOutliers.C:316
 FindOutliers.C:317
 FindOutliers.C:318
 FindOutliers.C:319
 FindOutliers.C:320
 FindOutliers.C:321
 FindOutliers.C:322
 FindOutliers.C:323
 FindOutliers.C:324
 FindOutliers.C:325
 FindOutliers.C:326
 FindOutliers.C:327
 FindOutliers.C:328
 FindOutliers.C:329
 FindOutliers.C:330
 FindOutliers.C:331
 FindOutliers.C:332
 FindOutliers.C:333
 FindOutliers.C:334
 FindOutliers.C:335
 FindOutliers.C:336
 FindOutliers.C:337
 FindOutliers.C:338
 FindOutliers.C:339
 FindOutliers.C:340
 FindOutliers.C:341
 FindOutliers.C:342
 FindOutliers.C:343
 FindOutliers.C:344
 FindOutliers.C:345
 FindOutliers.C:346
 FindOutliers.C:347
 FindOutliers.C:348
 FindOutliers.C:349
 FindOutliers.C:350
 FindOutliers.C:351
 FindOutliers.C:352
 FindOutliers.C:353
 FindOutliers.C:354
 FindOutliers.C:355
 FindOutliers.C:356
 FindOutliers.C:357
 FindOutliers.C:358
 FindOutliers.C:359
 FindOutliers.C:360
 FindOutliers.C:361
 FindOutliers.C:362
 FindOutliers.C:363
 FindOutliers.C:364
 FindOutliers.C:365
 FindOutliers.C:366
 FindOutliers.C:367
 FindOutliers.C:368
 FindOutliers.C:369
 FindOutliers.C:370
 FindOutliers.C:371
 FindOutliers.C:372
 FindOutliers.C:373
 FindOutliers.C:374
 FindOutliers.C:375
 FindOutliers.C:376
 FindOutliers.C:377
 FindOutliers.C:378
 FindOutliers.C:379
 FindOutliers.C:380
 FindOutliers.C:381
 FindOutliers.C:382
 FindOutliers.C:383
 FindOutliers.C:384
 FindOutliers.C:385
 FindOutliers.C:386
 FindOutliers.C:387
 FindOutliers.C:388
 FindOutliers.C:389
 FindOutliers.C:390
 FindOutliers.C:391
 FindOutliers.C:392
 FindOutliers.C:393
 FindOutliers.C:394
 FindOutliers.C:395
 FindOutliers.C:396
 FindOutliers.C:397
 FindOutliers.C:398
 FindOutliers.C:399
 FindOutliers.C:400
 FindOutliers.C:401
 FindOutliers.C:402
 FindOutliers.C:403
 FindOutliers.C:404
 FindOutliers.C:405
 FindOutliers.C:406
 FindOutliers.C:407
 FindOutliers.C:408
 FindOutliers.C:409
 FindOutliers.C:410
 FindOutliers.C:411
 FindOutliers.C:412
 FindOutliers.C:413
 FindOutliers.C:414
 FindOutliers.C:415
 FindOutliers.C:416
 FindOutliers.C:417
 FindOutliers.C:418
 FindOutliers.C:419
 FindOutliers.C:420
 FindOutliers.C:421
 FindOutliers.C:422
 FindOutliers.C:423
 FindOutliers.C:424
 FindOutliers.C:425
 FindOutliers.C:426
 FindOutliers.C:427
 FindOutliers.C:428
 FindOutliers.C:429
 FindOutliers.C:430
 FindOutliers.C:431
 FindOutliers.C:432
 FindOutliers.C:433
 FindOutliers.C:434
 FindOutliers.C:435
 FindOutliers.C:436
 FindOutliers.C:437
 FindOutliers.C:438
 FindOutliers.C:439
 FindOutliers.C:440
 FindOutliers.C:441
 FindOutliers.C:442
 FindOutliers.C:443
 FindOutliers.C:444
 FindOutliers.C:445
 FindOutliers.C:446
 FindOutliers.C:447
 FindOutliers.C:448
 FindOutliers.C:449
 FindOutliers.C:450
 FindOutliers.C:451
 FindOutliers.C:452
 FindOutliers.C:453
 FindOutliers.C:454
 FindOutliers.C:455
 FindOutliers.C:456
 FindOutliers.C:457
 FindOutliers.C:458
 FindOutliers.C:459
 FindOutliers.C:460
 FindOutliers.C:461
 FindOutliers.C:462
 FindOutliers.C:463
 FindOutliers.C:464
 FindOutliers.C:465
 FindOutliers.C:466
 FindOutliers.C:467
 FindOutliers.C:468
 FindOutliers.C:469
 FindOutliers.C:470
 FindOutliers.C:471
 FindOutliers.C:472
 FindOutliers.C:473
 FindOutliers.C:474
 FindOutliers.C:475
 FindOutliers.C:476
 FindOutliers.C:477
 FindOutliers.C:478
 FindOutliers.C:479
 FindOutliers.C:480
 FindOutliers.C:481
 FindOutliers.C:482
 FindOutliers.C:483
 FindOutliers.C:484
 FindOutliers.C:485
 FindOutliers.C:486
 FindOutliers.C:487
 FindOutliers.C:488
 FindOutliers.C:489
 FindOutliers.C:490
 FindOutliers.C:491
 FindOutliers.C:492
 FindOutliers.C:493
 FindOutliers.C:494
 FindOutliers.C:495
 FindOutliers.C:496
 FindOutliers.C:497
 FindOutliers.C:498
 FindOutliers.C:499
 FindOutliers.C:500
 FindOutliers.C:501
 FindOutliers.C:502
 FindOutliers.C:503
 FindOutliers.C:504
 FindOutliers.C:505
 FindOutliers.C:506
 FindOutliers.C:507
 FindOutliers.C:508
 FindOutliers.C:509
 FindOutliers.C:510
 FindOutliers.C:511
 FindOutliers.C:512
 FindOutliers.C:513
 FindOutliers.C:514
 FindOutliers.C:515
 FindOutliers.C:516
 FindOutliers.C:517
 FindOutliers.C:518
 FindOutliers.C:519
 FindOutliers.C:520
 FindOutliers.C:521
 FindOutliers.C:522
 FindOutliers.C:523
 FindOutliers.C:524
 FindOutliers.C:525
 FindOutliers.C:526
 FindOutliers.C:527
 FindOutliers.C:528
 FindOutliers.C:529
 FindOutliers.C:530
 FindOutliers.C:531
 FindOutliers.C:532
 FindOutliers.C:533
 FindOutliers.C:534
 FindOutliers.C:535
 FindOutliers.C:536
 FindOutliers.C:537
 FindOutliers.C:538
 FindOutliers.C:539
 FindOutliers.C:540
 FindOutliers.C:541
 FindOutliers.C:542
 FindOutliers.C:543
 FindOutliers.C:544
 FindOutliers.C:545
 FindOutliers.C:546
 FindOutliers.C:547
 FindOutliers.C:548
 FindOutliers.C:549
 FindOutliers.C:550
 FindOutliers.C:551
 FindOutliers.C:552
 FindOutliers.C:553
 FindOutliers.C:554
 FindOutliers.C:555
 FindOutliers.C:556
 FindOutliers.C:557
 FindOutliers.C:558
 FindOutliers.C:559
 FindOutliers.C:560
 FindOutliers.C:561
 FindOutliers.C:562
 FindOutliers.C:563
 FindOutliers.C:564
 FindOutliers.C:565
 FindOutliers.C:566
 FindOutliers.C:567
 FindOutliers.C:568
 FindOutliers.C:569
 FindOutliers.C:570
 FindOutliers.C:571
 FindOutliers.C:572
 FindOutliers.C:573
 FindOutliers.C:574
 FindOutliers.C:575
 FindOutliers.C:576
 FindOutliers.C:577
 FindOutliers.C:578
 FindOutliers.C:579
 FindOutliers.C:580
 FindOutliers.C:581
 FindOutliers.C:582
 FindOutliers.C:583
 FindOutliers.C:584
 FindOutliers.C:585
 FindOutliers.C:586
 FindOutliers.C:587
 FindOutliers.C:588
 FindOutliers.C:589
 FindOutliers.C:590
 FindOutliers.C:591
 FindOutliers.C:592
 FindOutliers.C:593
 FindOutliers.C:594
 FindOutliers.C:595
 FindOutliers.C:596
 FindOutliers.C:597
 FindOutliers.C:598
 FindOutliers.C:599
 FindOutliers.C:600
 FindOutliers.C:601
 FindOutliers.C:602
 FindOutliers.C:603
 FindOutliers.C:604
 FindOutliers.C:605
 FindOutliers.C:606
 FindOutliers.C:607
 FindOutliers.C:608
 FindOutliers.C:609
 FindOutliers.C:610
 FindOutliers.C:611
 FindOutliers.C:612
 FindOutliers.C:613
 FindOutliers.C:614
 FindOutliers.C:615
 FindOutliers.C:616
 FindOutliers.C:617
 FindOutliers.C:618
 FindOutliers.C:619
 FindOutliers.C:620
 FindOutliers.C:621
 FindOutliers.C:622
 FindOutliers.C:623
 FindOutliers.C:624
 FindOutliers.C:625
 FindOutliers.C:626
 FindOutliers.C:627
 FindOutliers.C:628
 FindOutliers.C:629
 FindOutliers.C:630
 FindOutliers.C:631
 FindOutliers.C:632
 FindOutliers.C:633
 FindOutliers.C:634
 FindOutliers.C:635
 FindOutliers.C:636
 FindOutliers.C:637
 FindOutliers.C:638
 FindOutliers.C:639
 FindOutliers.C:640
 FindOutliers.C:641
 FindOutliers.C:642
 FindOutliers.C:643
 FindOutliers.C:644
 FindOutliers.C:645
 FindOutliers.C:646
 FindOutliers.C:647
 FindOutliers.C:648
 FindOutliers.C:649
 FindOutliers.C:650
 FindOutliers.C:651
 FindOutliers.C:652
 FindOutliers.C:653
 FindOutliers.C:654
 FindOutliers.C:655
 FindOutliers.C:656
 FindOutliers.C:657
 FindOutliers.C:658
 FindOutliers.C:659
 FindOutliers.C:660
 FindOutliers.C:661
 FindOutliers.C:662
 FindOutliers.C:663
 FindOutliers.C:664
 FindOutliers.C:665
 FindOutliers.C:666
 FindOutliers.C:667
 FindOutliers.C:668
 FindOutliers.C:669
 FindOutliers.C:670
 FindOutliers.C:671
 FindOutliers.C:672
 FindOutliers.C:673
 FindOutliers.C:674
 FindOutliers.C:675
 FindOutliers.C:676
 FindOutliers.C:677
 FindOutliers.C:678
 FindOutliers.C:679
 FindOutliers.C:680
 FindOutliers.C:681
 FindOutliers.C:682
 FindOutliers.C:683
 FindOutliers.C:684
 FindOutliers.C:685
 FindOutliers.C:686
 FindOutliers.C:687
 FindOutliers.C:688
 FindOutliers.C:689
 FindOutliers.C:690
 FindOutliers.C:691
 FindOutliers.C:692
 FindOutliers.C:693
 FindOutliers.C:694
 FindOutliers.C:695
 FindOutliers.C:696
 FindOutliers.C:697
 FindOutliers.C:698
 FindOutliers.C:699
 FindOutliers.C:700
 FindOutliers.C:701
 FindOutliers.C:702
 FindOutliers.C:703
 FindOutliers.C:704
 FindOutliers.C:705
 FindOutliers.C:706
 FindOutliers.C:707
 FindOutliers.C:708
 FindOutliers.C:709
 FindOutliers.C:710
 FindOutliers.C:711
 FindOutliers.C:712
 FindOutliers.C:713
 FindOutliers.C:714
 FindOutliers.C:715
 FindOutliers.C:716
 FindOutliers.C:717
 FindOutliers.C:718
 FindOutliers.C:719
 FindOutliers.C:720
 FindOutliers.C:721
 FindOutliers.C:722
 FindOutliers.C:723
 FindOutliers.C:724
 FindOutliers.C:725
 FindOutliers.C:726
 FindOutliers.C:727
 FindOutliers.C:728
 FindOutliers.C:729
 FindOutliers.C:730
 FindOutliers.C:731
 FindOutliers.C:732
 FindOutliers.C:733
 FindOutliers.C:734
 FindOutliers.C:735
 FindOutliers.C:736
 FindOutliers.C:737
 FindOutliers.C:738
 FindOutliers.C:739
 FindOutliers.C:740
 FindOutliers.C:741
 FindOutliers.C:742
 FindOutliers.C:743
 FindOutliers.C:744
 FindOutliers.C:745
 FindOutliers.C:746
 FindOutliers.C:747
 FindOutliers.C:748
 FindOutliers.C:749
 FindOutliers.C:750
 FindOutliers.C:751
 FindOutliers.C:752
 FindOutliers.C:753
 FindOutliers.C:754
 FindOutliers.C:755
 FindOutliers.C:756
 FindOutliers.C:757
 FindOutliers.C:758
 FindOutliers.C:759
 FindOutliers.C:760
 FindOutliers.C:761
 FindOutliers.C:762
 FindOutliers.C:763
 FindOutliers.C:764
 FindOutliers.C:765
 FindOutliers.C:766
 FindOutliers.C:767
 FindOutliers.C:768
 FindOutliers.C:769
 FindOutliers.C:770
 FindOutliers.C:771
 FindOutliers.C:772
 FindOutliers.C:773
 FindOutliers.C:774
 FindOutliers.C:775
 FindOutliers.C:776
 FindOutliers.C:777
 FindOutliers.C:778
 FindOutliers.C:779
 FindOutliers.C:780
 FindOutliers.C:781
 FindOutliers.C:782
 FindOutliers.C:783
 FindOutliers.C:784
 FindOutliers.C:785
 FindOutliers.C:786
 FindOutliers.C:787
 FindOutliers.C:788
 FindOutliers.C:789
 FindOutliers.C:790
 FindOutliers.C:791
 FindOutliers.C:792
 FindOutliers.C:793
 FindOutliers.C:794
 FindOutliers.C:795
 FindOutliers.C:796
 FindOutliers.C:797
 FindOutliers.C:798
 FindOutliers.C:799
 FindOutliers.C:800
 FindOutliers.C:801
 FindOutliers.C:802
 FindOutliers.C:803
 FindOutliers.C:804
 FindOutliers.C:805
 FindOutliers.C:806
 FindOutliers.C:807
 FindOutliers.C:808
 FindOutliers.C:809
 FindOutliers.C:810
 FindOutliers.C:811
 FindOutliers.C:812
 FindOutliers.C:813
 FindOutliers.C:814
 FindOutliers.C:815
 FindOutliers.C:816
 FindOutliers.C:817
 FindOutliers.C:818
 FindOutliers.C:819
 FindOutliers.C:820
 FindOutliers.C:821
 FindOutliers.C:822
 FindOutliers.C:823
 FindOutliers.C:824
 FindOutliers.C:825
 FindOutliers.C:826
 FindOutliers.C:827
 FindOutliers.C:828
 FindOutliers.C:829
 FindOutliers.C:830
 FindOutliers.C:831
 FindOutliers.C:832
 FindOutliers.C:833
 FindOutliers.C:834
 FindOutliers.C:835
 FindOutliers.C:836
 FindOutliers.C:837
 FindOutliers.C:838
 FindOutliers.C:839
 FindOutliers.C:840
 FindOutliers.C:841
 FindOutliers.C:842
 FindOutliers.C:843
 FindOutliers.C:844
 FindOutliers.C:845
 FindOutliers.C:846
 FindOutliers.C:847
 FindOutliers.C:848
 FindOutliers.C:849
 FindOutliers.C:850
 FindOutliers.C:851
 FindOutliers.C:852
 FindOutliers.C:853
 FindOutliers.C:854
 FindOutliers.C:855
 FindOutliers.C:856
 FindOutliers.C:857
 FindOutliers.C:858
 FindOutliers.C:859
 FindOutliers.C:860
 FindOutliers.C:861
 FindOutliers.C:862
 FindOutliers.C:863
 FindOutliers.C:864
 FindOutliers.C:865
 FindOutliers.C:866
 FindOutliers.C:867
 FindOutliers.C:868
 FindOutliers.C:869
 FindOutliers.C:870
 FindOutliers.C:871
 FindOutliers.C:872
 FindOutliers.C:873
 FindOutliers.C:874
 FindOutliers.C:875
 FindOutliers.C:876
 FindOutliers.C:877
 FindOutliers.C:878
 FindOutliers.C:879
 FindOutliers.C:880
 FindOutliers.C:881
 FindOutliers.C:882
 FindOutliers.C:883
 FindOutliers.C:884
 FindOutliers.C:885
 FindOutliers.C:886
 FindOutliers.C:887
 FindOutliers.C:888
 FindOutliers.C:889
 FindOutliers.C:890
 FindOutliers.C:891
 FindOutliers.C:892
 FindOutliers.C:893
 FindOutliers.C:894
 FindOutliers.C:895
 FindOutliers.C:896
 FindOutliers.C:897
 FindOutliers.C:898
 FindOutliers.C:899
 FindOutliers.C:900
 FindOutliers.C:901
 FindOutliers.C:902
 FindOutliers.C:903
 FindOutliers.C:904
 FindOutliers.C:905
 FindOutliers.C:906
 FindOutliers.C:907
 FindOutliers.C:908
 FindOutliers.C:909
 FindOutliers.C:910
 FindOutliers.C:911
 FindOutliers.C:912
 FindOutliers.C:913
 FindOutliers.C:914
 FindOutliers.C:915
 FindOutliers.C:916
 FindOutliers.C:917
 FindOutliers.C:918
 FindOutliers.C:919
 FindOutliers.C:920
 FindOutliers.C:921
 FindOutliers.C:922
 FindOutliers.C:923
 FindOutliers.C:924
 FindOutliers.C:925
 FindOutliers.C:926
 FindOutliers.C:927
 FindOutliers.C:928
 FindOutliers.C:929
 FindOutliers.C:930
 FindOutliers.C:931
 FindOutliers.C:932
 FindOutliers.C:933
 FindOutliers.C:934
 FindOutliers.C:935
 FindOutliers.C:936
 FindOutliers.C:937
 FindOutliers.C:938
 FindOutliers.C:939
 FindOutliers.C:940
 FindOutliers.C:941
 FindOutliers.C:942
 FindOutliers.C:943
 FindOutliers.C:944
 FindOutliers.C:945
 FindOutliers.C:946
 FindOutliers.C:947
 FindOutliers.C:948
 FindOutliers.C:949
 FindOutliers.C:950
 FindOutliers.C:951
 FindOutliers.C:952
 FindOutliers.C:953
 FindOutliers.C:954
 FindOutliers.C:955
 FindOutliers.C:956
 FindOutliers.C:957
 FindOutliers.C:958
 FindOutliers.C:959
 FindOutliers.C:960
 FindOutliers.C:961
 FindOutliers.C:962
 FindOutliers.C:963
 FindOutliers.C:964
 FindOutliers.C:965
 FindOutliers.C:966
 FindOutliers.C:967
 FindOutliers.C:968
 FindOutliers.C:969
 FindOutliers.C:970
 FindOutliers.C:971
 FindOutliers.C:972
 FindOutliers.C:973
 FindOutliers.C:974
 FindOutliers.C:975
 FindOutliers.C:976
 FindOutliers.C:977
 FindOutliers.C:978
 FindOutliers.C:979
 FindOutliers.C:980
 FindOutliers.C:981
 FindOutliers.C:982
 FindOutliers.C:983
 FindOutliers.C:984
 FindOutliers.C:985
 FindOutliers.C:986
 FindOutliers.C:987
 FindOutliers.C:988
 FindOutliers.C:989
 FindOutliers.C:990
 FindOutliers.C:991
 FindOutliers.C:992
 FindOutliers.C:993
 FindOutliers.C:994
 FindOutliers.C:995
 FindOutliers.C:996
 FindOutliers.C:997
 FindOutliers.C:998
 FindOutliers.C:999
 FindOutliers.C:1000
 FindOutliers.C:1001
 FindOutliers.C:1002
 FindOutliers.C:1003
 FindOutliers.C:1004
 FindOutliers.C:1005
 FindOutliers.C:1006
 FindOutliers.C:1007
 FindOutliers.C:1008
 FindOutliers.C:1009
 FindOutliers.C:1010
 FindOutliers.C:1011
 FindOutliers.C:1012
 FindOutliers.C:1013
 FindOutliers.C:1014
 FindOutliers.C:1015
 FindOutliers.C:1016
 FindOutliers.C:1017
 FindOutliers.C:1018
 FindOutliers.C:1019
 FindOutliers.C:1020
 FindOutliers.C:1021
 FindOutliers.C:1022
 FindOutliers.C:1023
 FindOutliers.C:1024
 FindOutliers.C:1025
 FindOutliers.C:1026
 FindOutliers.C:1027
 FindOutliers.C:1028
 FindOutliers.C:1029
 FindOutliers.C:1030
 FindOutliers.C:1031
 FindOutliers.C:1032
 FindOutliers.C:1033
 FindOutliers.C:1034
 FindOutliers.C:1035
 FindOutliers.C:1036
 FindOutliers.C:1037
 FindOutliers.C:1038
 FindOutliers.C:1039
 FindOutliers.C:1040
 FindOutliers.C:1041
 FindOutliers.C:1042
 FindOutliers.C:1043
 FindOutliers.C:1044
 FindOutliers.C:1045
 FindOutliers.C:1046
 FindOutliers.C:1047
 FindOutliers.C:1048
 FindOutliers.C:1049
 FindOutliers.C:1050
 FindOutliers.C:1051
 FindOutliers.C:1052
 FindOutliers.C:1053
 FindOutliers.C:1054
 FindOutliers.C:1055
 FindOutliers.C:1056
 FindOutliers.C:1057
 FindOutliers.C:1058
 FindOutliers.C:1059
 FindOutliers.C:1060
 FindOutliers.C:1061
 FindOutliers.C:1062
 FindOutliers.C:1063
 FindOutliers.C:1064
 FindOutliers.C:1065
 FindOutliers.C:1066
 FindOutliers.C:1067
 FindOutliers.C:1068
 FindOutliers.C:1069
 FindOutliers.C:1070
 FindOutliers.C:1071
 FindOutliers.C:1072
 FindOutliers.C:1073
 FindOutliers.C:1074
 FindOutliers.C:1075
 FindOutliers.C:1076
 FindOutliers.C:1077
 FindOutliers.C:1078
 FindOutliers.C:1079
 FindOutliers.C:1080
 FindOutliers.C:1081
 FindOutliers.C:1082
 FindOutliers.C:1083
 FindOutliers.C:1084
 FindOutliers.C:1085
 FindOutliers.C:1086
 FindOutliers.C:1087
 FindOutliers.C:1088
 FindOutliers.C:1089
 FindOutliers.C:1090
 FindOutliers.C:1091
 FindOutliers.C:1092
 FindOutliers.C:1093
 FindOutliers.C:1094
 FindOutliers.C:1095
 FindOutliers.C:1096
 FindOutliers.C:1097
 FindOutliers.C:1098
 FindOutliers.C:1099
 FindOutliers.C:1100
 FindOutliers.C:1101
 FindOutliers.C:1102
 FindOutliers.C:1103
 FindOutliers.C:1104
 FindOutliers.C:1105
 FindOutliers.C:1106
 FindOutliers.C:1107
 FindOutliers.C:1108
 FindOutliers.C:1109
 FindOutliers.C:1110
 FindOutliers.C:1111
 FindOutliers.C:1112
 FindOutliers.C:1113
 FindOutliers.C:1114
 FindOutliers.C:1115
 FindOutliers.C:1116
 FindOutliers.C:1117
 FindOutliers.C:1118
 FindOutliers.C:1119
 FindOutliers.C:1120
 FindOutliers.C:1121
 FindOutliers.C:1122
 FindOutliers.C:1123
 FindOutliers.C:1124
 FindOutliers.C:1125
 FindOutliers.C:1126
 FindOutliers.C:1127
 FindOutliers.C:1128
 FindOutliers.C:1129
 FindOutliers.C:1130
 FindOutliers.C:1131