ROOT logo
#include "TTree.h"
#include "TCanvas.h"
#include "TF1.h"
#include "TFitResult.h"
#include "TH1D.h"
#include "TH2D.h"
#include "TGraphErrors.h"
#include "TList.h"
#include "TString.h"
#include "TFile.h"
#include "TMath.h"
#include "TDatime.h"

#include "TSpline.h"
#include "AliPID.h"

#include <iostream>
#include "ProgressBar.h"
#include "THnSparseDefinitions.h"

//________________________________________________________________________
void FitSlicesY(TH2 *hist, Double_t heightFractionForRange, Int_t cutThreshold, TString fitOption, TObjArray *arr)
{
  //heightPercentageForRange
  // custom slices fit
  //

  if (!hist) return;
  if (!arr) return;

  // If old style is to be used
  /*
  hist->FitSlicesY(0, 0, -1, cutThreshold, fitOption.Data(), arr);
  return;
  */
  
  
  arr->Clear();
  arr->SetOwner();
  arr->Expand(4);
  
  TAxis *axis=hist->GetXaxis();
  const TArrayD *bins = axis->GetXbins();
  TH1D** hList = new TH1D*[4];
  
  for (Int_t i = 0; i < 4; i++) {
    delete gDirectory->FindObject(Form("%s_%d", hist->GetName(), i));
    
    if (bins->fN == 0) {
      hList[i] = new TH1D(Form("%s_%d", hist->GetName(), i), i < 3 ? Form("Fitted value of par[%d]", i) : "Chi2/NDF",
                          hist->GetNbinsX(), axis->GetXmin(), axis->GetXmax());
    } else {
      hList[i] = new TH1D(Form("%s_%d", hist->GetName(), i), i < 3 ? Form("Fitted value of par[%d]", i) : "Chi2/NDF", hist->GetNbinsX(), bins->fArray);
    }
    
    (*arr)[i] = hList[i];
  }
  
  for (Int_t ibin=axis->GetFirst(); ibin<=axis->GetLast(); ++ibin){
    TH1 *h=hist->ProjectionY("_temp",ibin,ibin);
    if (!h)
      continue;
    
    if (h->GetEntries() < cutThreshold) {
      delete h;
      continue;
    }
    
    // Average around maximum bin -> Might catch some outliers
    Int_t maxBin = h->GetMaximumBin();
    Double_t maxVal = h->GetBinContent(maxBin);
    
    if (maxVal < 2) { // It could happen that all entries are in overflow/underflow; don't fit in this case
      delete h;
      continue;
    }
    
    UChar_t usedBins = 1;
    if (maxBin > 1) {
      maxVal += h->GetBinContent(maxBin - 1);
      usedBins++;
    }
    if (maxBin < h->GetNbinsX()) {
      maxVal += h->GetBinContent(maxBin + 1);
      usedBins++;
    }
    maxVal /= usedBins;
    
    Double_t thresholdFraction = heightFractionForRange * maxVal; 
    Int_t lowThrBin = TMath::Max(1, h->FindFirstBinAbove(thresholdFraction));
    Int_t highThrBin = TMath::Min(h->GetNbinsX(), h->FindLastBinAbove(thresholdFraction));
    
    Double_t lowThreshold = h->GetBinCenter(lowThrBin);
    Double_t highThreshold = h->GetBinCenter(highThrBin);

    TFitResultPtr res = h->Fit("gaus", Form("%sS", fitOption.Data()), "", lowThreshold, highThreshold);
    
    if ((Int_t)res == 0) {
      Int_t resBin = ibin;
      hList[0]->SetBinContent(resBin,res->GetParams()[0]);
      hList[0]->SetBinError(resBin,res->GetErrors()[0]);
      hList[1]->SetBinContent(resBin,res->GetParams()[1]);
      hList[1]->SetBinError(resBin,res->GetErrors()[1]);
      hList[2]->SetBinContent(resBin,res->GetParams()[2]);
      hList[2]->SetBinError(resBin,res->GetErrors()[2]);
      hList[3]->SetBinContent(resBin,res->Ndf()>0?res->Chi2()/res->Ndf():0);
    }
    
    delete h;
  }
  
  delete [] hList;
}

//__________________________________________________________________________________________
Int_t extractMultiplicityDependence(TString pathTree, Double_t widthFactor /*=1*/, Int_t multStepSize /*= 400*/, Bool_t isMC,
                                    Bool_t correct = kFALSE, TString fileNameTree = "bhess_PIDetaTree.root", TString treeName = "fTree",
                                    TString pathNameSplines = "splines_10h.pass2.root", TString splineName = "TSPLINE3_DATA_PROTON_LHC10H_PASS2_PBPB_MEAN") 
{ 
  const Double_t massProton = AliPID::ParticleMass(AliPID::kProton);
  const Double_t massPion = AliPID::ParticleMass(AliPID::kPion);
  
  Double_t mass = massProton;
  
  
  // Extract the data tree               
  TFile* fTree = TFile::Open(Form("%s/%s", pathTree.Data(), fileNameTree.Data()));
  if (!fTree)  {
    std::cout << "Failed to open file \"" << Form("%s/%s", pathTree.Data(), fileNameTree.Data()) << "\"!" << std::endl;
    return -1;
  }
  
  TTree* tree = dynamic_cast<TTree*>(fTree->Get(treeName.Data()));
  if (!tree) {
    std::cout << "Failed to load data tree!" << std::endl;
    return -1;
  }
  
  // Output file
  TDatime daTime;
  TString savefileName = Form("%s_multiplicityDependence_%04d_%02d_%02d__%02d_%02d.root", fileNameTree.ReplaceAll(".root", "").Data(),
                              daTime.GetYear(), daTime.GetMonth(), daTime.GetDay(), daTime.GetHour(), daTime.GetMinute());
  
  TFile* fSave = TFile::Open(Form("%s/%s", pathTree.Data(), savefileName.Data()), "recreate");
  if (!fSave) {
    std::cout << "Failed to open save file \"" << Form("%s/%s", pathTree.Data(), savefileName.Data()) << "\"!" << std::endl;
    return -1;
  }
  
  Long64_t nTreeEntries = tree->GetEntriesFast();
  
  Double_t pTPC = 0.; 
  Double_t dEdx = 0.; 
  //Double_t dEdxExpected = 0.;
  Double_t tanTheta = 0.; 
  UShort_t tpcSignalN = 0.;
  Int_t fMultiplicity = 0.; 
  UChar_t pidType = 0;
  
  tree->SetBranchStatus("*", 0); // Disable all branches
  tree->SetBranchStatus("pTPC", 1);
  tree->SetBranchStatus("dEdx", 1);
  //tree->SetBranchStatus("dEdxExpected", 1);
  tree->SetBranchStatus("tanTheta", 1);
  tree->SetBranchStatus("fMultiplicity", 1);
  tree->SetBranchStatus("tpcSignalN", 1);
  tree->SetBranchStatus("pidType", 1);
    
  
  tree->SetBranchAddress("pTPC", &pTPC);
  tree->SetBranchAddress("dEdx", &dEdx);
  //tree->SetBranchAddress("dEdxExpecttanThetaCentered", &dEdxExpected);
  tree->SetBranchAddress("tanTheta", &tanTheta);
  tree->SetBranchAddress("fMultiplicity", &fMultiplicity);
  tree->SetBranchAddress("tpcSignalN", &tpcSignalN);
  tree->SetBranchAddress("pidType", &pidType);
  
  const Int_t numMultBins = TMath::Ceil((20000. - 0.) / multStepSize);
  
  const Int_t numPbins = 24;
  Double_t pBinEdges[numPbins * 2] = {
    0.3, 0.3 + 0.005*widthFactor,
    0.35, 0.35 + 0.005*widthFactor,
    0.4, 0.4 + 0.005*widthFactor,
    0.45, 0.45 + 0.005*widthFactor,
    0.5, 0.5 + 0.005*widthFactor,
    0.55, 0.55 + 0.005*widthFactor,
    0.6, 0.6 + 0.005*widthFactor,
    0.65, 0.65 + 0.005*widthFactor,
    0.7, 0.7 + 0.005*widthFactor,
    0.8, 0.8 + 0.01*widthFactor,
    0.9, 0.9 + 0.01*widthFactor,
    1.0, 1.0 + 0.01*widthFactor,
    1.1, 1.1 + 0.01*widthFactor,
    1.2, 1.2 + 0.01*widthFactor,
    1.3, 1.3 + 0.01*widthFactor,
    1.4, 1.4 + 0.01*widthFactor,
    1.5, 1.5 + 0.01*widthFactor,
    1.6, 1.6 + 0.02*widthFactor,
    1.7, 1.7 + 0.02*widthFactor,
    1.8, 1.8 + 0.02*widthFactor,
    1.9, 1.9 + 0.02*widthFactor,
    2.0, 2.0 + 0.1*widthFactor,
    2.5, 2.5 + 0.1*widthFactor,
    3.0, 3.0 + 0.15*widthFactor };
    
  const Int_t numTanThetaBins = 10;
  
  Double_t tanThetaBinEdges[numTanThetaBins * 2] = {
    -1.0, -0.8,
    -0.8, -0.6,
    -0.6, -0.4,
    -0.4, -0.2,
    -0.2, 0.0,
    0.0, 0.2,
    0.2, 0.4,
    0.4, 0.6,
    0.6, 0.8,
    0.8, 1.0 };
    /*TODO tanThetaAbs
  Double_t tanThetaBinEdges[numTanThetaBins * 2] = {
    0.0, 0.1,
    0.1, 0.2,
    0.2, 0.3,
    0.3, 0.4,
    0.4, 0.5,
    0.5, 0.6,
    0.6, 0.7,
    0.7, 0.8,
    0.8, 0.9,
    0.9, 1.0 };*/
    
  TH2D* h2[numPbins][numTanThetaBins];
  TH2D* h2AllEta[numPbins];
  
  for (Int_t i = 0; i < numPbins; i++) {
    h2AllEta[i] = new TH2D(Form("h2AllEta_%d", i), Form("p %.2f - %.2f GeV/c, all #eta; Multiplicity; dEdx", pBinEdges[2*i], pBinEdges[2*i+1]),
                           numMultBins, 0, 20000, 590, 10.0, 600.0);
    
    for (Int_t j = 0; j < numTanThetaBins; j++) {
      h2[i][j] = new TH2D(Form("h2_%d_%d", i, j), Form("p %.2f - %.2f GeV/c & %.2f < tanTheta #leq %.2f; Multiplicity; dEdx",
      //TODO tanThetaAbs h2[i][j] = new TH2D(Form("h2_%d_%d", i, j), Form("p %.2f - %.2f GeV/c & %.2f < |tanTheta| #leq %.2f; Multiplicity; dEdx",
                                                       pBinEdges[2*i], pBinEdges[2*i+1], tanThetaBinEdges[2*j], tanThetaBinEdges[2*j+1]),
                          numMultBins, 0, 20000, 590, 10.0, 600.0);
    }
  }
  
  TSpline3* splProton = 0x0;
  
  if (correct) {
    printf("CORRECTING data for multiplicity dependence...TODO OBSOLETE - DO NOT USE!!!!\n");
    
    TFile* f = 0x0;
    f = TFile::Open(pathNameSplines.Data());
    if (!f)  {
      std::cout << "Failed to open spline file \"" << pathNameSplines.Data() << "\"!" << std::endl;
      return -1;
    }
    
    splProton = (TSpline3*)f->Get(splineName.Data());
    if (!splProton) {
      std::cout << "Failed to load splines: " << splineName.Data() << "!" << std::endl;
      return -1;
    }    
    
    if (splineName.Contains("PION")){
      printf("Pion mass assumed: %f...\n", massPion);
      mass = massPion;
    }
    else {
      printf("Proton mass assumed: %f...\n", massProton);
      mass = massProton;
    }
  }
  else
    printf("NOT CORRECTING data for multiplicity dependence...\n");

  progressbar(0.);
  
  TF1 cutFunc("cutFunc","50./TMath::Power(x,1.3)", 0.05, 6);
  
  TF1 corrFunc("corrFunc", "pol2", 0, 0.01);
  corrFunc.SetParameter(0, 5.5e-6);
  corrFunc.SetParameter(1, -0.00436);
  corrFunc.SetParameter(2, 0.103);
  
  for (Long64_t i = 0; i < nTreeEntries; i++) {
    tree->GetEntry(i);
    
    if (i % 100000 == 0)
      progressbar(100. * (((Double_t)i) / nTreeEntries));

    // Filter tracks according to shape recognition
    //if (tpcSignalN < 60 || (!isMC && dEdx < cutFunc.Eval(pTPC))) continue;
    if (dEdx <= 0 || tpcSignalN < 60) {
      continue;
    }
    
    if (!isMC) {
      if ((pTPC < 0.6 && pidType != kTPCid) ||               // No V0s/TOF below 0.6 due to bad statistics
      //if ((pTPC < 0.6 && pidType == kTPCandTOFid) ||         // No TOF below 0.6 GeV/c due to bad statistics
          //TODO NOW Maybe don't use this line since the tails get fewer V0's than the main peak, so the tails are overall reduced (pTPC >= 0.6 && pTPC < pThreholdV0cut && pidType != kTPCandTOFid) || // Do not mix V0's and TOF in this range
          (pTPC >= 0.6 && pTPC < 0.9 && pidType != kTPCandTOFid) ||
          (pTPC >= 0.9 && pidType != kV0idPlusTOFaccepted && pidType != kV0idNoTOF))      // Only V0's WITH TOF above pThreholdV0cut due to contamination
        continue;
    }
  
    // CORRECT multiplicity dependence -> WARNING: Better take into account the eta dependence for dEdxSplines for the determination of corrFactor!!!
    if (correct) {
      Double_t dEdxSplines = 50. * splProton->Eval(pTPC / mass);
      Double_t dEdxSplinesInv = 1. / dEdxSplines;
      Double_t relSlope = corrFunc.Eval(dEdxSplinesInv);
      Double_t corrFactor = relSlope * fMultiplicity;
      dEdx /= 1. + corrFactor;
    }
    
    
    
    //TODO tanThetaAbs Double_t absTanTheta = TMath::Abs(tanTheta);
    
    for (Int_t j = 0; j < numPbins; j++) {
      if (pTPC >= pBinEdges[2*j] && pTPC < pBinEdges[2*j+1]) {
        h2AllEta[j]->Fill(fMultiplicity, dEdx);
        
        for (Int_t k = 0; k < numTanThetaBins; k++) {
          if (tanTheta >= tanThetaBinEdges[2*k] && tanTheta < tanThetaBinEdges[2*k+1]) {
          //TODO tanThetaAbs if (absTanTheta >= tanThetaBinEdges[2*k] && absTanTheta < tanThetaBinEdges[2*k+1]) {
            h2[j][k]->Fill(fMultiplicity, dEdx);
            break;
          }
        }
        break;
      }
    }
  }

  progressbar(100.);
  
  printf("\n\n");

  
  const Double_t MCfitThreshold = 0.006;
  const Double_t heightFractionForRange = 0.1;
  TObjArray arr;
  
  { // Fitting for all eta
    TGraphErrors* gSlvsOffset = new TGraphErrors(numPbins);
    TGraphErrors* gSlvsInvOffset = new TGraphErrors(numPbins);
    
    TGraphErrors* gSigmaSlopevsdEdx = new TGraphErrors(numPbins);
    TGraphErrors* gSigmaSlopevsInvdEdx = new TGraphErrors(numPbins);
    
    fSave->mkdir("allTanTheta");
    
    for (Int_t i = 0; i < numPbins; i++) {
      gSlvsOffset->SetPoint(i, -10, 0);
      gSlvsOffset->SetPointError(i, 0, 0);
          
      gSlvsInvOffset->SetPoint(i, -10, 0);
      gSlvsInvOffset->SetPointError(i, 0, 0);
      
      gSigmaSlopevsdEdx->SetPoint(i, -10, 0);
      gSigmaSlopevsdEdx->SetPointError(i, 0, 0);
      
      gSigmaSlopevsInvdEdx->SetPoint(i, -10, 0);
      gSigmaSlopevsInvdEdx->SetPointError(i, 0, 0);
      
      if (h2AllEta[i]->GetEntries() < 10)
        continue;
      
      printf("Momentum %.2f - %.2f GeV/c, all eta:\n", pBinEdges[2*i], pBinEdges[2*i+1]);
      TCanvas* c = new TCanvas(Form("canv_pBin%d_allEta", i), Form("canv_pBin%d_allEta", i), 100,10,1380,800);
      FitSlicesY(h2AllEta[i], heightFractionForRange, 10, "QN", &arr);
      h2AllEta[i]->GetYaxis()->SetRange(h2AllEta[i]->FindFirstBinAbove(1, 2), h2AllEta[i]->FindLastBinAbove(1,2));
      h2AllEta[i]->Draw("colz");
      
      TH1D* hMean = (TH1D*)arr.At(1);//new TH1D((TH1D&)*arr.At(1));
      TH1D* hSigma = (TH1D*)arr.At(2);//new TH1D((TH1D&)*arr.At(2));
      hMean->SetName(Form("hMean_allEta_pBin%d", i));
      hSigma->SetName(Form("hSigma_allEta_pBin%d", i));
      hSigma->SetLineColor(kMagenta);
      
      TH1D* hSigmaRel = new TH1D(*hSigma);
      hSigmaRel->SetName(Form("hSigmaRel_allEta_pBin%d", i));
      hSigmaRel->Divide(hMean);
      hSigmaRel->SetLineColor(kMagenta + 2);
      
      TFitResultPtr fitRes = hMean->Fit("pol1", "s", "same", 0, 12000);
      TFitResultPtr fitResSigma = hSigmaRel->Fit("pol1", "s", "same", 0, 12000);
      
      hMean->DrawClone("same");
      
      if (((Int_t)fitRes) != 0) {
        printf("Fit failed!\n");
      }
      else {
        Double_t p0 = fitRes->GetParams()[0];
        Double_t p1 = fitRes->GetParams()[1];
        Double_t err0 = fitRes->GetErrors()[0];
        Double_t err1 = fitRes->GetErrors()[1];
        
        Double_t totError = 99999;
        if (p0 != 0 && p1 != 0) {
          totError = TMath::Abs(p1 / p0 * TMath::Sqrt(TMath::Power(err0 / p0, 2) + TMath::Power(err1 / p1, 2)));
        }
        printf("Result: p1 / p0 = %f / %f = %e\n\n", p1, p0, (p0 != 0 ? p1 / p0 : -99999));
        if (p0 > 0) {
          gSlvsOffset->SetPoint(i, p0, p1/p0);
          gSlvsOffset->SetPointError(i, err0, totError);
          
          gSlvsInvOffset->SetPoint(i, 1./p0, p1/p0);
          gSlvsInvOffset->SetPointError(i, TMath::Abs(err0/p0/p0), totError);
          
          // Only makes sense, if valid p0 available
          if (((Int_t)fitResSigma) != 0) {
            printf("Sigma fit failed!\n");
          }
          else {
            Double_t pSigma0 = fitResSigma->GetParams()[0];
            Double_t errSigma0 = fitResSigma->GetErrors()[0];
            
            Double_t pSigma1 = fitResSigma->GetParams()[1];
            Double_t errSigma1 = fitResSigma->GetErrors()[1];
            
            printf("Result sigma: pSigma1 / pSigma0 = %f / %f = %e\n\n", pSigma1, pSigma0, (pSigma0 != 0 ? pSigma1 / pSigma0 : -99999));
            
            Double_t totErrorSigma = 99999;
            if (pSigma0 != 0 && pSigma1 != 0) {
              totErrorSigma = TMath::Abs(pSigma1 / pSigma0 * TMath::Sqrt(TMath::Power(errSigma0 / pSigma0, 2) + TMath::Power(errSigma1 / pSigma1, 2)));
            }
            
            if (pSigma0 > 0) {          
              gSigmaSlopevsdEdx->SetPoint(i, p0, pSigma1/pSigma0);
              gSigmaSlopevsdEdx->SetPointError(i, err0, totErrorSigma);
                
              gSigmaSlopevsInvdEdx->SetPoint(i, 1./p0, pSigma1/pSigma0);
              gSigmaSlopevsInvdEdx->SetPointError(i, TMath::Abs(err0/p0/p0), totErrorSigma);
              
               // Set artificially large errors for points with positive slope vs. multiplicity
              // (negative slope makes physically no sense and is most likely due to uncertainties)
              if (pSigma1 < 0) {
                gSigmaSlopevsdEdx->SetPointError(i, err0, 1000);
                gSigmaSlopevsInvdEdx->SetPointError(i, TMath::Abs(err0/p0/p0), 1000);
              }
            }
          }
        }
      }
      
      fSave->cd("allTanTheta");
      c->Write();
      hSigma->Write();
      hSigmaRel->Write();
      arr.Clear();
    }
  
    gSlvsOffset->SetName("slopes_AllEta");
    gSlvsOffset->SetTitle("Rel. slope vs. offset (all #eta)");
    gSlvsOffset->SetMarkerColor(kBlack);
    gSlvsOffset->SetLineColor(kBlack);
    gSlvsOffset->SetMarkerStyle(20);
    gSlvsOffset->Draw("Ap");
    gSlvsOffset->GetHistogram()->GetXaxis()->SetTitle("dEdx (offset)");
    gSlvsOffset->GetHistogram()->GetYaxis()->SetTitle("Multiplicity slope/offset");
    gSlvsOffset->Fit("pol2", "W EX0", "same", 50, 300);
    TF1* fitFuncResult = dynamic_cast<TF1*>(gSlvsOffset->GetListOfFunctions()->At(0));
    if (fitFuncResult)
      fitFuncResult->SetLineColor(kBlack);
    
    gSlvsInvOffset->SetName("slopes2_AllEta");
    gSlvsInvOffset->SetTitle("Rel. slope vs. 1./offset (all #eta)");
    gSlvsInvOffset->SetMarkerColor(kBlack);
    gSlvsInvOffset->SetLineColor(kBlack);
    gSlvsInvOffset->SetMarkerStyle(20);
    gSlvsInvOffset->Draw("Ap");
    gSlvsInvOffset->GetHistogram()->GetXaxis()->SetTitle("1./dEdx (1./offset)");
    gSlvsInvOffset->GetHistogram()->GetYaxis()->SetTitle("Multiplicity slope/offset");
    
    TFitResultPtr fitRes = gSlvsInvOffset->Fit("pol2", "S 0 W EX0", "", 0, 0.02);//isMC ? MCfitThreshold : 0., 0.018); // Estimate pol2 params for subsequent fit
    //TODO NEW Introduced parameter [4]
    TF1 fitFunc("fitFunc", "[0] + [1]*TMath::Max([4], TMath::Min(x, [3])) + [2] * TMath::Power(TMath::Max([4], TMath::Min(x, [3])), 2)", 0., 0.2);
    //TF1 fitFunc("fitFunc", "[0] + [1]*TMath::Min(x, [3]) + [2] * TMath::Power(TMath::Min(x, [3]), 2)", 0., 0.1);

    
    //TF1* fitFuncResult2 = dynamic_cast<TF1*>(gSlvsInvOffset->GetListOfFunctions()->At(0));
    if ((Int_t)fitRes == 0)
      fitFunc.SetParameters(fitRes->GetParams());
    fitFunc.SetParameter(3, isMC ? 0.1 : 0.018);
    fitFunc.SetParLimits(3, isMC ? 0.014 : 0.01, 0.2);//TODO NEW
    // No lower threshold for data
    if (isMC) {
      fitFunc.SetParameter(4, MCfitThreshold);
      fitFunc.SetParLimits(4, 0., 0.01);
    }
    else
      fitFunc.FixParameter(4, 0.);
    
    fitFunc.SetLineColor(kBlack);
    
    gSlvsInvOffset->Fit(&fitFunc, "EX0", "same", /*TODO NEW isMC ? MCfitThreshold : */0., 0.2);
    
    
    
    gSigmaSlopevsdEdx->SetName("sigmaSlopes_AllEta");
    gSigmaSlopevsdEdx->SetTitle("Sigma rel slope vs. dEdx offset (all #eta)");
    gSigmaSlopevsdEdx->SetMarkerColor(kBlack);
    gSigmaSlopevsdEdx->SetLineColor(kBlack);
    gSigmaSlopevsdEdx->SetMarkerStyle(20);
    gSigmaSlopevsdEdx->Draw("Ap");
    gSigmaSlopevsdEdx->GetHistogram()->GetXaxis()->SetTitle("dEdx (offset)");
    gSigmaSlopevsdEdx->GetHistogram()->GetYaxis()->SetTitle("Multiplicity sigma rel. slope");
    
    gSigmaSlopevsInvdEdx->SetName("sigmaSlopes2_AllEta");
    gSigmaSlopevsInvdEdx->SetTitle("Sigma rel slope vs. 1./dEdx offset (all #eta)");
    gSigmaSlopevsInvdEdx->SetMarkerColor(kBlack);
    gSigmaSlopevsInvdEdx->SetLineColor(kBlack);
    gSigmaSlopevsInvdEdx->SetMarkerStyle(20);
    gSigmaSlopevsInvdEdx->Draw("Ap");
    gSigmaSlopevsInvdEdx->GetHistogram()->GetXaxis()->SetTitle("1./dEdx (1./offset)");
    gSigmaSlopevsInvdEdx->GetHistogram()->GetYaxis()->SetTitle("Multiplicity sigma rel. slope");
    
    TFitResultPtr fitRes2 = gSigmaSlopevsInvdEdx->Fit("pol2", "S 0 W EX0", "same", 0., 0.012); // Estimate pol2 params for subsequent fit
    TF1 fitFuncSigma("fitFuncSigma_AllEta", "TMath::Max(0, [0] + [1]*TMath::Min(x, [3]) + [2] * TMath::Power(TMath::Min(x, [3]), 2))", 0., 0.2);
    if ((Int_t)fitRes2 == 0)
      fitFuncSigma.SetParameters(fitRes2->GetParams());
    fitFuncSigma.SetParameter(3, 0.012);
    fitFuncSigma.SetParLimits(3, 0.01, 0.2);
    
    fitFuncSigma.SetLineColor(kBlack);
    
    gSigmaSlopevsInvdEdx->Fit(&fitFuncSigma, "EX0", "same", 0., 0.2);
    
    
    fSave->cd("allTanTheta");
    gSlvsOffset->Write();
    gSlvsInvOffset->Write();
    
    gSigmaSlopevsdEdx->Write();
    gSigmaSlopevsInvdEdx->Write();
  }
  
  
  TGraphErrors* gSlvsTanTheta[numPbins];
  for (Int_t j = 0; j < numPbins; j++) {
    gSlvsTanTheta[j] = new TGraphErrors(numTanThetaBins);
    gSlvsTanTheta[j]->SetName(Form("tanThetaSlopes_pBin%d", j));
    gSlvsTanTheta[j]->SetTitle(Form("Rel. slope vs. tanTheta (%.4f #leq pTPC/(GeV/c) < %.4f)", pBinEdges[2*j], pBinEdges[2*j+1]));
    gSlvsTanTheta[j]->SetMarkerColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));
    gSlvsTanTheta[j]->SetLineColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));
    gSlvsTanTheta[j]->SetMarkerStyle(20);
  }
  
  TGraphErrors* gSigmaSlopevsTanTheta[numPbins];
  for (Int_t j = 0; j < numPbins; j++) {
    gSigmaSlopevsTanTheta[j] = new TGraphErrors(numTanThetaBins);
    gSigmaSlopevsTanTheta[j]->SetName(Form("tanThetaSigmaSlopes_pBin%d", j));
    gSigmaSlopevsTanTheta[j]->SetTitle(Form("Rel. sigma slope vs. tanTheta (%.4f #leq pTPC/(GeV/c) < %.4f)", pBinEdges[2*j], pBinEdges[2*j+1]));
    gSigmaSlopevsTanTheta[j]->SetMarkerColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));
    gSigmaSlopevsTanTheta[j]->SetLineColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));
    gSigmaSlopevsTanTheta[j]->SetMarkerStyle(20);
  }
  
  printf("\n\n\n");
  
  // Fitting for eta bins
  for (Int_t j = 0; j < numTanThetaBins; j++) {
    printf("%.2f < tanTheta <= %.2f:\n", tanThetaBinEdges[2*j], tanThetaBinEdges[2*j+1]); //TODO absTanTheta
    
    TGraphErrors* gSlvsOffset = new TGraphErrors(numPbins);
    TGraphErrors* gSlvsInvOffset = new TGraphErrors(numPbins);
    
    TGraphErrors* gSigmaSlopevsdEdx = new TGraphErrors(numPbins);
    TGraphErrors* gSigmaSlopevsInvdEdx = new TGraphErrors(numPbins);
    
    fSave->mkdir(Form("tanThetaBin%d", j));
    
    for (Int_t i = 0; i < numPbins; i++) {
      gSlvsOffset->SetPoint(i, -10, 0);
      gSlvsOffset->SetPointError(i, 0, 0);
          
      gSlvsInvOffset->SetPoint(i, -10, 0);
      gSlvsInvOffset->SetPointError(i, 0, 0);
      
      gSlvsTanTheta[i]->SetPoint(j, -10, 0);
      gSlvsTanTheta[i]->SetPointError(j, 0, 0);
      
      gSigmaSlopevsTanTheta[i]->SetPoint(j, -10, 0);
      gSigmaSlopevsTanTheta[i]->SetPointError(j, 0, 0);
      
      gSigmaSlopevsdEdx->SetPoint(i, -10, 0);
      gSigmaSlopevsdEdx->SetPointError(i, 0, 0);
      
      gSigmaSlopevsInvdEdx->SetPoint(i, -10, 0);
      gSigmaSlopevsInvdEdx->SetPointError(i, 0, 0);
      
      if (h2[i][j]->GetEntries() < 10)
        continue;
      
      printf("Momentum %.2f - %.2f GeV/c:\n", pBinEdges[2*i], pBinEdges[2*i+1]);
      TCanvas* c = new TCanvas(Form("canv_pBin%d_tanThetaBin%d", i, j), Form("canv_pBin%d_tanThetaBin_%d", i, j), 100,10,1380,800);
      FitSlicesY(h2[i][j], heightFractionForRange, 10, "QN", &arr);
      h2[i][j]->GetYaxis()->SetRange(h2[i][j]->FindFirstBinAbove(1, 2), h2[i][j]->FindLastBinAbove(1,2));
      h2[i][j]->Draw("colz");
      
      TH1D* hMean = (TH1D*)arr.At(1);//new TH1D((TH1D&)*arr.At(1));
      TH1D* hSigma = (TH1D*)arr.At(2);//new TH1D((TH1D&)*arr.At(2));
      hMean->SetName(Form("hMean_pBin%d_tanThetaBin_%d", i, j));
      hSigma->SetName(Form("hSigma_pBin%d_tanThetaBin_%d", i, j));
      hSigma->SetLineColor(kMagenta);
      
      TH1D* hSigmaRel = new TH1D(*hSigma);
      hSigmaRel->SetName(Form("hSigmaRel_pBin%d_tanThetaBin_%d", i, j));
      hSigmaRel->Divide(hMean);
      hSigmaRel->SetLineColor(kMagenta + 2);
      TFitResultPtr fitRes = hMean->Fit("pol1", "s", "same", 0, 12000);
      TFitResultPtr fitResSigma = hSigmaRel->Fit("pol1", "s", "same", 0, 12000);
      
      hMean->DrawClone("same");
      
      if (((Int_t)fitRes) != 0) {
        printf("Fit failed!\n");
      }
      else {
        Double_t p0 = fitRes->GetParams()[0];
        Double_t p1 = fitRes->GetParams()[1];
        Double_t err0 = fitRes->GetErrors()[0];
        Double_t err1 = fitRes->GetErrors()[1];
        
        Double_t totError = 99999;
        if (p0 != 0 && p1 != 0) {
          totError = TMath::Abs(p1 / p0 * TMath::Sqrt(TMath::Power(err0 / p0, 2) + TMath::Power(err1 / p1, 2)));
        }
        printf("Result: p1 / p0 = %f / %f = %e\n\n", p1, p0, (p0 != 0 ? p1 / p0 : -99999));
        if (p0 > 0) {
          gSlvsOffset->SetPoint(i, p0, p1/pSigma0);
          gSlvsOffset->SetPointError(i, err0, totError);
          
          gSlvsInvOffset->SetPoint(i, 1./p0, p1/pSigma0);
          gSlvsInvOffset->SetPointError(i, TMath::Abs(err0/p0/p0), totError);
          
          
          gSlvsTanTheta[i]->SetPoint(j, (tanThetaBinEdges[2*j] + tanThetaBinEdges[2*j+1]) / 2., p1/pSigma0);
          gSlvsTanTheta[i]->SetPointError(j, (tanThetaBinEdges[2*j+1] - tanThetaBinEdges[2*j]) / 2., totError); 
          
          // Only makes sense, if valid p0 available
          if (((Int_t)fitResSigma) != 0) {
            printf("Sigma fit failed!\n");
          }
          else {
            Double_t pSigma0 = fitResSigma->GetParams()[0];
            Double_t errSigma0 = fitResSigma->GetErrors()[0];
            
            Double_t pSigma1 = fitResSigma->GetParams()[1];
            Double_t errSigma1 = fitResSigma->GetErrors()[1];
            
            printf("Result sigma: pSigma1 / pSigma0 = %f / %f = %e\n\n", pSigma1, pSigma0, (pSigma0 != 0 ? pSigma1 / pSigma0 : -99999));
            
            Double_t totErrorSigma = 99999;
            if (pSigma0 != 0 && pSigma1 != 0) {
              totErrorSigma = TMath::Abs(pSigma1 / pSigma0 * TMath::Sqrt(TMath::Power(errSigma0 / pSigma0, 2) + TMath::Power(errSigma1 / pSigma1, 2)));
            }
            
            if (pSigma0 > 0) {          
              gSigmaSlopevsdEdx->SetPoint(i, p0, pSigma1/pSigma0);
              gSigmaSlopevsdEdx->SetPointError(i, err0, totErrorSigma);
                
              gSigmaSlopevsInvdEdx->SetPoint(i, 1./p0, pSigma1/pSigma0);
              gSigmaSlopevsInvdEdx->SetPointError(i, TMath::Abs(err0/p0/p0), totErrorSigma);
              
              gSigmaSlopevsTanTheta[i]->SetPoint(j, (tanThetaBinEdges[2*j] + tanThetaBinEdges[2*j+1]) / 2., pSigma1/pSigma0);
              gSigmaSlopevsTanTheta[i]->SetPointError(j, (tanThetaBinEdges[2*j+1] - tanThetaBinEdges[2*j]) / 2., totErrorSigma); 
              
              // Set artificially large errors for points with positive slope vs. multiplicity
              // (negative slope makes physically no sense and is most likely due to uncertainties)
              if (pSigma1 < 0) {
                gSigmaSlopevsdEdx->SetPointError(i, err0, 1000);
                gSigmaSlopevsInvdEdx->SetPointError(i, TMath::Abs(err0/p0/p0), 1000);
                gSigmaSlopevsTanTheta[i]->SetPointError(j, (tanThetaBinEdges[2*j+1] - tanThetaBinEdges[2*j]) / 2., 1000); 
              }
            }
          }
        }
      }
      
      fSave->cd(Form("tanThetaBin%d", j));
      c->Write();
      hSigma->Write();
      hSigmaRel->Write();
      arr.Clear();
    }
    
    
    gSlvsOffset->SetName(Form("slopes_tanTheta%d", j));
    gSlvsOffset->SetTitle(Form("Rel. slope vs. offset (%.2f < tanTheta #leq %.2f)", tanThetaBinEdges[2*j], tanThetaBinEdges[2*j+1]));//TODO tanThetaAbs
    gSlvsOffset->SetMarkerColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));//   (2 + ((j > 2) ? j + 1 : j));
    gSlvsOffset->SetLineColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));//(2 + ((j > 2) ? j + 1 : j));
    gSlvsOffset->SetMarkerStyle(20);
    gSlvsOffset->Draw("Ap");
    gSlvsOffset->GetHistogram()->GetXaxis()->SetTitle("dEdx (offset)");
    gSlvsOffset->GetHistogram()->GetYaxis()->SetTitle("Multiplicity slope/offset");
    gSlvsOffset->Fit("pol2", "W Ex0", "same", 10, 2000);
    TF1* fitFuncResult = dynamic_cast<TF1*>(gSlvsOffset->GetListOfFunctions()->At(0));
    if (fitFuncResult)
      fitFuncResult->SetLineColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));//(2 + ((j > 2) ? j + 1 : j));
    
    gSlvsInvOffset->SetName(Form("slopes2_tanTheta%d", j));
    gSlvsInvOffset->SetTitle(Form("Rel. slope vs. 1./offset (%.2f < tanTheta #leq %.2f)", tanThetaBinEdges[2*j], tanThetaBinEdges[2*j+1]));//TODO tanThetaAbs
    gSlvsInvOffset->SetMarkerColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));//(2 + ((j > 2) ? j + 1 : j));
    gSlvsInvOffset->SetLineColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));//(2 + ((j > 2) ? j + 1 : j));
    gSlvsInvOffset->SetMarkerStyle(20);
    gSlvsInvOffset->Draw("Ap");
    gSlvsInvOffset->GetHistogram()->GetXaxis()->SetTitle("1./dEdx (1./offset)");
    gSlvsInvOffset->GetHistogram()->GetYaxis()->SetTitle("Multiplicity slope/offset");
    
    TFitResultPtr fitRes = gSlvsInvOffset->Fit("pol2", "S 0 W EX0", "same", isMC ? MCfitThreshold : 0., 0.018); // Estimate pol2 params for subsequent fit
    //TODO NEW Introduced parameter [4]
    TF1 fitFunc(Form("fitFunc_tanTheta%d", j), "[0] + [1]*TMath::Max([4], TMath::Min(x, [3])) + [2] * TMath::Power(TMath::Max([4], TMath::Min(x, [3])), 2)", 0., 0.2);
    //TF1 fitFunc(Form("fitFunc_tanTheta%d", j), "[0] + [1]*TMath::Min(x, [3]) + [2] * TMath::Power(TMath::Min(x, [3]), 2)", 0., 0.1);
    if ((Int_t)fitRes == 0)
      fitFunc.SetParameters(fitRes->GetParams());
    fitFunc.SetParameter(3, isMC ? 0.1 : 0.018);
    fitFunc.SetParLimits(3, isMC ? 0.014 : 0.01, 0.2);//TODO NEW
    // No lower threshold for data
    if (isMC) {
      fitFunc.SetParameter(4, MCfitThreshold);
      fitFunc.SetParLimits(4, 0., 0.01);
    }
    else
      fitFunc.FixParameter(4, 0.);
    
    fitFunc.SetLineColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));//(2 + ((j > 2) ? j + 1 : j));
    
    gSlvsInvOffset->Fit(&fitFunc, "EX0", "same", /*TODO NEW isMC ? MCfitThreshold : */0., 0.2);
    
    
    
    gSigmaSlopevsdEdx->SetName(Form("sigmaSlopes_tanTheta%d", j));
    gSigmaSlopevsdEdx->SetTitle(Form("Sigma rel slope vs. dEdx offset (%.2f < tanTheta #leq %.2f)", tanThetaBinEdges[2*j], 
                                     tanThetaBinEdges[2*j+1]));//TODO tanThetaAbs
    gSigmaSlopevsdEdx->SetMarkerColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));
    gSigmaSlopevsdEdx->SetLineColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));
    gSigmaSlopevsdEdx->SetMarkerStyle(20);
    gSigmaSlopevsdEdx->Draw("Ap");
    gSigmaSlopevsdEdx->GetHistogram()->GetXaxis()->SetTitle("dEdx (offset)");
    gSigmaSlopevsdEdx->GetHistogram()->GetYaxis()->SetTitle("Multiplicity sigma rel. slope");
    
    gSigmaSlopevsInvdEdx->SetName(Form("sigmaSlopes2_tanTheta%d", j));
    gSigmaSlopevsInvdEdx->SetTitle(Form("Sigma rel slope vs. 1./dEdx offset (%.2f < tanTheta #leq %.2f)", tanThetaBinEdges[2*j],
                                        tanThetaBinEdges[2*j+1]));//TODO tanThetaAbs
    gSigmaSlopevsInvdEdx->SetMarkerColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));
    gSigmaSlopevsInvdEdx->SetLineColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));
    gSigmaSlopevsInvdEdx->SetMarkerStyle(20);
    gSigmaSlopevsInvdEdx->Draw("Ap");
    gSigmaSlopevsInvdEdx->GetHistogram()->GetXaxis()->SetTitle("1./dEdx (1./offset)");
    gSigmaSlopevsInvdEdx->GetHistogram()->GetYaxis()->SetTitle("Multiplicity sigma rel. slope");
    
    
    TFitResultPtr fitRes2 = gSigmaSlopevsInvdEdx->Fit("pol2", "S 0 W EX0", "same", 0., 0.012); // Estimate pol2 params for subsequent fit
    TF1 fitFuncSigma(Form("fitFuncSigma_tanTheta%d", j), "TMath::Max(0, [0] + [1]*TMath::Min(x, [3]) + [2] * TMath::Power(TMath::Min(x, [3]), 2))",
                     0., 0.2);
    if ((Int_t)fitRes2 == 0)
      fitFuncSigma.SetParameters(fitRes2->GetParams());
    fitFuncSigma.SetParameter(3, 0.012);
    fitFuncSigma.SetParLimits(3, 0.006, 0.2); //TODO was 3, 0.01, 0.2
    
    fitFuncSigma.SetLineColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));//(2 + ((j > 2) ? j + 1 : j));
    
    gSigmaSlopevsInvdEdx->Fit(&fitFuncSigma, "EX0", "same", 0., 0.2);
    
    
    fSave->cd(Form("tanThetaBin%d", j));
    gSlvsOffset->Write();
    gSlvsInvOffset->Write();
    
    gSigmaSlopevsdEdx->Write();
    gSigmaSlopevsInvdEdx->Write();
    
    printf("\n\n\n");
  }
  
  
  
  
  fSave->mkdir("tanThetaFits");
  fSave->cd("tanThetaFits");

  for (Int_t j = 0; j < numPbins; j++) {
    /*
    // Scale graphs, just that first bin sits at +-1
    Double_t scale = 1.0;
    for (Int_t k = 0; k < gSlvsTanTheta[j]->GetN(); k++) {
      if (k == 0) {
        scale = 1. / TMath::Max(1e-10, TMath::Abs(gSlvsTanTheta[j]->GetY()[k]));
      }
      
      gSlvsTanTheta[j]->SetPoint(k, gSlvsTanTheta[j]->GetX()[k], gSlvsTanTheta[j]->GetY()[k] * scale);
      gSlvsTanTheta[j]->SetPointError(k, gSlvsTanTheta[j]->GetEX()[k], gSlvsTanTheta[j]->GetEY()[k] * scale);
    }
    */
    
    // Shift graphs, just that reference bin sits at 0
    Double_t shift = 0.0;
    const Int_t refBin = 7;
    shift = gSlvsTanTheta[j]->GetY()[refBin];
    
    for (Int_t k = 0; k < gSlvsTanTheta[j]->GetN(); k++) {      
      gSlvsTanTheta[j]->SetPoint(k, gSlvsTanTheta[j]->GetX()[k], gSlvsTanTheta[j]->GetY()[k] - shift);
    }
    
    gSlvsTanTheta[j]->Draw("Ap");
    gSlvsTanTheta[j]->GetHistogram()->GetXaxis()->SetTitle("tan(#Theta)");//TODO tanThetaAbs
    gSlvsTanTheta[j]->GetHistogram()->GetYaxis()->SetTitle("Multiplicity slope/offset");
    
    gSlvsTanTheta[j]->Fit("pol2", "EX0", "same", tanThetaBinEdges[0], tanThetaBinEdges[numTanThetaBins * 2 - 1]);
    
    TF1* fitFuncResult = dynamic_cast<TF1*>(gSlvsTanTheta[j]->GetListOfFunctions()->At(0));
    if (fitFuncResult)
      fitFuncResult->SetLineColor((j == 7) ? kBlack : (2 + ((j > 2) ? j + 1 : j)));
    gSlvsTanTheta[j]->Write();
    
    gSigmaSlopevsTanTheta[j]->Draw("Ap");
    gSigmaSlopevsTanTheta[j]->GetHistogram()->GetXaxis()->SetTitle("tanTheta");//TODO tanThetaAbs
    gSigmaSlopevsTanTheta[j]->GetHistogram()->GetYaxis()->SetTitle("Multiplicity rel. sigma slope");
    gSigmaSlopevsTanTheta[j]->Write();
  }
  
  fSave->cd();
  if (correct)
    corrFunc.Write();
  
  
  TNamed* settings = new TNamed(Form("Settings: widthFactor %f, multStepSize %d, isMC %d, correct %d, pathNameSplines %s, splineName %s\n",
                                     widthFactor, multStepSize, isMC, correct, pathNameSplines.Data(), splineName.Data()), "");
  settings->Write();
  fSave->Close();
  
  
  return 0;
}
 extractMultiplicityDependence.C:1
 extractMultiplicityDependence.C:2
 extractMultiplicityDependence.C:3
 extractMultiplicityDependence.C:4
 extractMultiplicityDependence.C:5
 extractMultiplicityDependence.C:6
 extractMultiplicityDependence.C:7
 extractMultiplicityDependence.C:8
 extractMultiplicityDependence.C:9
 extractMultiplicityDependence.C:10
 extractMultiplicityDependence.C:11
 extractMultiplicityDependence.C:12
 extractMultiplicityDependence.C:13
 extractMultiplicityDependence.C:14
 extractMultiplicityDependence.C:15
 extractMultiplicityDependence.C:16
 extractMultiplicityDependence.C:17
 extractMultiplicityDependence.C:18
 extractMultiplicityDependence.C:19
 extractMultiplicityDependence.C:20
 extractMultiplicityDependence.C:21
 extractMultiplicityDependence.C:22
 extractMultiplicityDependence.C:23
 extractMultiplicityDependence.C:24
 extractMultiplicityDependence.C:25
 extractMultiplicityDependence.C:26
 extractMultiplicityDependence.C:27
 extractMultiplicityDependence.C:28
 extractMultiplicityDependence.C:29
 extractMultiplicityDependence.C:30
 extractMultiplicityDependence.C:31
 extractMultiplicityDependence.C:32
 extractMultiplicityDependence.C:33
 extractMultiplicityDependence.C:34
 extractMultiplicityDependence.C:35
 extractMultiplicityDependence.C:36
 extractMultiplicityDependence.C:37
 extractMultiplicityDependence.C:38
 extractMultiplicityDependence.C:39
 extractMultiplicityDependence.C:40
 extractMultiplicityDependence.C:41
 extractMultiplicityDependence.C:42
 extractMultiplicityDependence.C:43
 extractMultiplicityDependence.C:44
 extractMultiplicityDependence.C:45
 extractMultiplicityDependence.C:46
 extractMultiplicityDependence.C:47
 extractMultiplicityDependence.C:48
 extractMultiplicityDependence.C:49
 extractMultiplicityDependence.C:50
 extractMultiplicityDependence.C:51
 extractMultiplicityDependence.C:52
 extractMultiplicityDependence.C:53
 extractMultiplicityDependence.C:54
 extractMultiplicityDependence.C:55
 extractMultiplicityDependence.C:56
 extractMultiplicityDependence.C:57
 extractMultiplicityDependence.C:58
 extractMultiplicityDependence.C:59
 extractMultiplicityDependence.C:60
 extractMultiplicityDependence.C:61
 extractMultiplicityDependence.C:62
 extractMultiplicityDependence.C:63
 extractMultiplicityDependence.C:64
 extractMultiplicityDependence.C:65
 extractMultiplicityDependence.C:66
 extractMultiplicityDependence.C:67
 extractMultiplicityDependence.C:68
 extractMultiplicityDependence.C:69
 extractMultiplicityDependence.C:70
 extractMultiplicityDependence.C:71
 extractMultiplicityDependence.C:72
 extractMultiplicityDependence.C:73
 extractMultiplicityDependence.C:74
 extractMultiplicityDependence.C:75
 extractMultiplicityDependence.C:76
 extractMultiplicityDependence.C:77
 extractMultiplicityDependence.C:78
 extractMultiplicityDependence.C:79
 extractMultiplicityDependence.C:80
 extractMultiplicityDependence.C:81
 extractMultiplicityDependence.C:82
 extractMultiplicityDependence.C:83
 extractMultiplicityDependence.C:84
 extractMultiplicityDependence.C:85
 extractMultiplicityDependence.C:86
 extractMultiplicityDependence.C:87
 extractMultiplicityDependence.C:88
 extractMultiplicityDependence.C:89
 extractMultiplicityDependence.C:90
 extractMultiplicityDependence.C:91
 extractMultiplicityDependence.C:92
 extractMultiplicityDependence.C:93
 extractMultiplicityDependence.C:94
 extractMultiplicityDependence.C:95
 extractMultiplicityDependence.C:96
 extractMultiplicityDependence.C:97
 extractMultiplicityDependence.C:98
 extractMultiplicityDependence.C:99
 extractMultiplicityDependence.C:100
 extractMultiplicityDependence.C:101
 extractMultiplicityDependence.C:102
 extractMultiplicityDependence.C:103
 extractMultiplicityDependence.C:104
 extractMultiplicityDependence.C:105
 extractMultiplicityDependence.C:106
 extractMultiplicityDependence.C:107
 extractMultiplicityDependence.C:108
 extractMultiplicityDependence.C:109
 extractMultiplicityDependence.C:110
 extractMultiplicityDependence.C:111
 extractMultiplicityDependence.C:112
 extractMultiplicityDependence.C:113
 extractMultiplicityDependence.C:114
 extractMultiplicityDependence.C:115
 extractMultiplicityDependence.C:116
 extractMultiplicityDependence.C:117
 extractMultiplicityDependence.C:118
 extractMultiplicityDependence.C:119
 extractMultiplicityDependence.C:120
 extractMultiplicityDependence.C:121
 extractMultiplicityDependence.C:122
 extractMultiplicityDependence.C:123
 extractMultiplicityDependence.C:124
 extractMultiplicityDependence.C:125
 extractMultiplicityDependence.C:126
 extractMultiplicityDependence.C:127
 extractMultiplicityDependence.C:128
 extractMultiplicityDependence.C:129
 extractMultiplicityDependence.C:130
 extractMultiplicityDependence.C:131
 extractMultiplicityDependence.C:132
 extractMultiplicityDependence.C:133
 extractMultiplicityDependence.C:134
 extractMultiplicityDependence.C:135
 extractMultiplicityDependence.C:136
 extractMultiplicityDependence.C:137
 extractMultiplicityDependence.C:138
 extractMultiplicityDependence.C:139
 extractMultiplicityDependence.C:140
 extractMultiplicityDependence.C:141
 extractMultiplicityDependence.C:142
 extractMultiplicityDependence.C:143
 extractMultiplicityDependence.C:144
 extractMultiplicityDependence.C:145
 extractMultiplicityDependence.C:146
 extractMultiplicityDependence.C:147
 extractMultiplicityDependence.C:148
 extractMultiplicityDependence.C:149
 extractMultiplicityDependence.C:150
 extractMultiplicityDependence.C:151
 extractMultiplicityDependence.C:152
 extractMultiplicityDependence.C:153
 extractMultiplicityDependence.C:154
 extractMultiplicityDependence.C:155
 extractMultiplicityDependence.C:156
 extractMultiplicityDependence.C:157
 extractMultiplicityDependence.C:158
 extractMultiplicityDependence.C:159
 extractMultiplicityDependence.C:160
 extractMultiplicityDependence.C:161
 extractMultiplicityDependence.C:162
 extractMultiplicityDependence.C:163
 extractMultiplicityDependence.C:164
 extractMultiplicityDependence.C:165
 extractMultiplicityDependence.C:166
 extractMultiplicityDependence.C:167
 extractMultiplicityDependence.C:168
 extractMultiplicityDependence.C:169
 extractMultiplicityDependence.C:170
 extractMultiplicityDependence.C:171
 extractMultiplicityDependence.C:172
 extractMultiplicityDependence.C:173
 extractMultiplicityDependence.C:174
 extractMultiplicityDependence.C:175
 extractMultiplicityDependence.C:176
 extractMultiplicityDependence.C:177
 extractMultiplicityDependence.C:178
 extractMultiplicityDependence.C:179
 extractMultiplicityDependence.C:180
 extractMultiplicityDependence.C:181
 extractMultiplicityDependence.C:182
 extractMultiplicityDependence.C:183
 extractMultiplicityDependence.C:184
 extractMultiplicityDependence.C:185
 extractMultiplicityDependence.C:186
 extractMultiplicityDependence.C:187
 extractMultiplicityDependence.C:188
 extractMultiplicityDependence.C:189
 extractMultiplicityDependence.C:190
 extractMultiplicityDependence.C:191
 extractMultiplicityDependence.C:192
 extractMultiplicityDependence.C:193
 extractMultiplicityDependence.C:194
 extractMultiplicityDependence.C:195
 extractMultiplicityDependence.C:196
 extractMultiplicityDependence.C:197
 extractMultiplicityDependence.C:198
 extractMultiplicityDependence.C:199
 extractMultiplicityDependence.C:200
 extractMultiplicityDependence.C:201
 extractMultiplicityDependence.C:202
 extractMultiplicityDependence.C:203
 extractMultiplicityDependence.C:204
 extractMultiplicityDependence.C:205
 extractMultiplicityDependence.C:206
 extractMultiplicityDependence.C:207
 extractMultiplicityDependence.C:208
 extractMultiplicityDependence.C:209
 extractMultiplicityDependence.C:210
 extractMultiplicityDependence.C:211
 extractMultiplicityDependence.C:212
 extractMultiplicityDependence.C:213
 extractMultiplicityDependence.C:214
 extractMultiplicityDependence.C:215
 extractMultiplicityDependence.C:216
 extractMultiplicityDependence.C:217
 extractMultiplicityDependence.C:218
 extractMultiplicityDependence.C:219
 extractMultiplicityDependence.C:220
 extractMultiplicityDependence.C:221
 extractMultiplicityDependence.C:222
 extractMultiplicityDependence.C:223
 extractMultiplicityDependence.C:224
 extractMultiplicityDependence.C:225
 extractMultiplicityDependence.C:226
 extractMultiplicityDependence.C:227
 extractMultiplicityDependence.C:228
 extractMultiplicityDependence.C:229
 extractMultiplicityDependence.C:230
 extractMultiplicityDependence.C:231
 extractMultiplicityDependence.C:232
 extractMultiplicityDependence.C:233
 extractMultiplicityDependence.C:234
 extractMultiplicityDependence.C:235
 extractMultiplicityDependence.C:236
 extractMultiplicityDependence.C:237
 extractMultiplicityDependence.C:238
 extractMultiplicityDependence.C:239
 extractMultiplicityDependence.C:240
 extractMultiplicityDependence.C:241
 extractMultiplicityDependence.C:242
 extractMultiplicityDependence.C:243
 extractMultiplicityDependence.C:244
 extractMultiplicityDependence.C:245
 extractMultiplicityDependence.C:246
 extractMultiplicityDependence.C:247
 extractMultiplicityDependence.C:248
 extractMultiplicityDependence.C:249
 extractMultiplicityDependence.C:250
 extractMultiplicityDependence.C:251
 extractMultiplicityDependence.C:252
 extractMultiplicityDependence.C:253
 extractMultiplicityDependence.C:254
 extractMultiplicityDependence.C:255
 extractMultiplicityDependence.C:256
 extractMultiplicityDependence.C:257
 extractMultiplicityDependence.C:258
 extractMultiplicityDependence.C:259
 extractMultiplicityDependence.C:260
 extractMultiplicityDependence.C:261
 extractMultiplicityDependence.C:262
 extractMultiplicityDependence.C:263
 extractMultiplicityDependence.C:264
 extractMultiplicityDependence.C:265
 extractMultiplicityDependence.C:266
 extractMultiplicityDependence.C:267
 extractMultiplicityDependence.C:268
 extractMultiplicityDependence.C:269
 extractMultiplicityDependence.C:270
 extractMultiplicityDependence.C:271
 extractMultiplicityDependence.C:272
 extractMultiplicityDependence.C:273
 extractMultiplicityDependence.C:274
 extractMultiplicityDependence.C:275
 extractMultiplicityDependence.C:276
 extractMultiplicityDependence.C:277
 extractMultiplicityDependence.C:278
 extractMultiplicityDependence.C:279
 extractMultiplicityDependence.C:280
 extractMultiplicityDependence.C:281
 extractMultiplicityDependence.C:282
 extractMultiplicityDependence.C:283
 extractMultiplicityDependence.C:284
 extractMultiplicityDependence.C:285
 extractMultiplicityDependence.C:286
 extractMultiplicityDependence.C:287
 extractMultiplicityDependence.C:288
 extractMultiplicityDependence.C:289
 extractMultiplicityDependence.C:290
 extractMultiplicityDependence.C:291
 extractMultiplicityDependence.C:292
 extractMultiplicityDependence.C:293
 extractMultiplicityDependence.C:294
 extractMultiplicityDependence.C:295
 extractMultiplicityDependence.C:296
 extractMultiplicityDependence.C:297
 extractMultiplicityDependence.C:298
 extractMultiplicityDependence.C:299
 extractMultiplicityDependence.C:300
 extractMultiplicityDependence.C:301
 extractMultiplicityDependence.C:302
 extractMultiplicityDependence.C:303
 extractMultiplicityDependence.C:304
 extractMultiplicityDependence.C:305
 extractMultiplicityDependence.C:306
 extractMultiplicityDependence.C:307
 extractMultiplicityDependence.C:308
 extractMultiplicityDependence.C:309
 extractMultiplicityDependence.C:310
 extractMultiplicityDependence.C:311
 extractMultiplicityDependence.C:312
 extractMultiplicityDependence.C:313
 extractMultiplicityDependence.C:314
 extractMultiplicityDependence.C:315
 extractMultiplicityDependence.C:316
 extractMultiplicityDependence.C:317
 extractMultiplicityDependence.C:318
 extractMultiplicityDependence.C:319
 extractMultiplicityDependence.C:320
 extractMultiplicityDependence.C:321
 extractMultiplicityDependence.C:322
 extractMultiplicityDependence.C:323
 extractMultiplicityDependence.C:324
 extractMultiplicityDependence.C:325
 extractMultiplicityDependence.C:326
 extractMultiplicityDependence.C:327
 extractMultiplicityDependence.C:328
 extractMultiplicityDependence.C:329
 extractMultiplicityDependence.C:330
 extractMultiplicityDependence.C:331
 extractMultiplicityDependence.C:332
 extractMultiplicityDependence.C:333
 extractMultiplicityDependence.C:334
 extractMultiplicityDependence.C:335
 extractMultiplicityDependence.C:336
 extractMultiplicityDependence.C:337
 extractMultiplicityDependence.C:338
 extractMultiplicityDependence.C:339
 extractMultiplicityDependence.C:340
 extractMultiplicityDependence.C:341
 extractMultiplicityDependence.C:342
 extractMultiplicityDependence.C:343
 extractMultiplicityDependence.C:344
 extractMultiplicityDependence.C:345
 extractMultiplicityDependence.C:346
 extractMultiplicityDependence.C:347
 extractMultiplicityDependence.C:348
 extractMultiplicityDependence.C:349
 extractMultiplicityDependence.C:350
 extractMultiplicityDependence.C:351
 extractMultiplicityDependence.C:352
 extractMultiplicityDependence.C:353
 extractMultiplicityDependence.C:354
 extractMultiplicityDependence.C:355
 extractMultiplicityDependence.C:356
 extractMultiplicityDependence.C:357
 extractMultiplicityDependence.C:358
 extractMultiplicityDependence.C:359
 extractMultiplicityDependence.C:360
 extractMultiplicityDependence.C:361
 extractMultiplicityDependence.C:362
 extractMultiplicityDependence.C:363
 extractMultiplicityDependence.C:364
 extractMultiplicityDependence.C:365
 extractMultiplicityDependence.C:366
 extractMultiplicityDependence.C:367
 extractMultiplicityDependence.C:368
 extractMultiplicityDependence.C:369
 extractMultiplicityDependence.C:370
 extractMultiplicityDependence.C:371
 extractMultiplicityDependence.C:372
 extractMultiplicityDependence.C:373
 extractMultiplicityDependence.C:374
 extractMultiplicityDependence.C:375
 extractMultiplicityDependence.C:376
 extractMultiplicityDependence.C:377
 extractMultiplicityDependence.C:378
 extractMultiplicityDependence.C:379
 extractMultiplicityDependence.C:380
 extractMultiplicityDependence.C:381
 extractMultiplicityDependence.C:382
 extractMultiplicityDependence.C:383
 extractMultiplicityDependence.C:384
 extractMultiplicityDependence.C:385
 extractMultiplicityDependence.C:386
 extractMultiplicityDependence.C:387
 extractMultiplicityDependence.C:388
 extractMultiplicityDependence.C:389
 extractMultiplicityDependence.C:390
 extractMultiplicityDependence.C:391
 extractMultiplicityDependence.C:392
 extractMultiplicityDependence.C:393
 extractMultiplicityDependence.C:394
 extractMultiplicityDependence.C:395
 extractMultiplicityDependence.C:396
 extractMultiplicityDependence.C:397
 extractMultiplicityDependence.C:398
 extractMultiplicityDependence.C:399
 extractMultiplicityDependence.C:400
 extractMultiplicityDependence.C:401
 extractMultiplicityDependence.C:402
 extractMultiplicityDependence.C:403
 extractMultiplicityDependence.C:404
 extractMultiplicityDependence.C:405
 extractMultiplicityDependence.C:406
 extractMultiplicityDependence.C:407
 extractMultiplicityDependence.C:408
 extractMultiplicityDependence.C:409
 extractMultiplicityDependence.C:410
 extractMultiplicityDependence.C:411
 extractMultiplicityDependence.C:412
 extractMultiplicityDependence.C:413
 extractMultiplicityDependence.C:414
 extractMultiplicityDependence.C:415
 extractMultiplicityDependence.C:416
 extractMultiplicityDependence.C:417
 extractMultiplicityDependence.C:418
 extractMultiplicityDependence.C:419
 extractMultiplicityDependence.C:420
 extractMultiplicityDependence.C:421
 extractMultiplicityDependence.C:422
 extractMultiplicityDependence.C:423
 extractMultiplicityDependence.C:424
 extractMultiplicityDependence.C:425
 extractMultiplicityDependence.C:426
 extractMultiplicityDependence.C:427
 extractMultiplicityDependence.C:428
 extractMultiplicityDependence.C:429
 extractMultiplicityDependence.C:430
 extractMultiplicityDependence.C:431
 extractMultiplicityDependence.C:432
 extractMultiplicityDependence.C:433
 extractMultiplicityDependence.C:434
 extractMultiplicityDependence.C:435
 extractMultiplicityDependence.C:436
 extractMultiplicityDependence.C:437
 extractMultiplicityDependence.C:438
 extractMultiplicityDependence.C:439
 extractMultiplicityDependence.C:440
 extractMultiplicityDependence.C:441
 extractMultiplicityDependence.C:442
 extractMultiplicityDependence.C:443
 extractMultiplicityDependence.C:444
 extractMultiplicityDependence.C:445
 extractMultiplicityDependence.C:446
 extractMultiplicityDependence.C:447
 extractMultiplicityDependence.C:448
 extractMultiplicityDependence.C:449
 extractMultiplicityDependence.C:450
 extractMultiplicityDependence.C:451
 extractMultiplicityDependence.C:452
 extractMultiplicityDependence.C:453
 extractMultiplicityDependence.C:454
 extractMultiplicityDependence.C:455
 extractMultiplicityDependence.C:456
 extractMultiplicityDependence.C:457
 extractMultiplicityDependence.C:458
 extractMultiplicityDependence.C:459
 extractMultiplicityDependence.C:460
 extractMultiplicityDependence.C:461
 extractMultiplicityDependence.C:462
 extractMultiplicityDependence.C:463
 extractMultiplicityDependence.C:464
 extractMultiplicityDependence.C:465
 extractMultiplicityDependence.C:466
 extractMultiplicityDependence.C:467
 extractMultiplicityDependence.C:468
 extractMultiplicityDependence.C:469
 extractMultiplicityDependence.C:470
 extractMultiplicityDependence.C:471
 extractMultiplicityDependence.C:472
 extractMultiplicityDependence.C:473
 extractMultiplicityDependence.C:474
 extractMultiplicityDependence.C:475
 extractMultiplicityDependence.C:476
 extractMultiplicityDependence.C:477
 extractMultiplicityDependence.C:478
 extractMultiplicityDependence.C:479
 extractMultiplicityDependence.C:480
 extractMultiplicityDependence.C:481
 extractMultiplicityDependence.C:482
 extractMultiplicityDependence.C:483
 extractMultiplicityDependence.C:484
 extractMultiplicityDependence.C:485
 extractMultiplicityDependence.C:486
 extractMultiplicityDependence.C:487
 extractMultiplicityDependence.C:488
 extractMultiplicityDependence.C:489
 extractMultiplicityDependence.C:490
 extractMultiplicityDependence.C:491
 extractMultiplicityDependence.C:492
 extractMultiplicityDependence.C:493
 extractMultiplicityDependence.C:494
 extractMultiplicityDependence.C:495
 extractMultiplicityDependence.C:496
 extractMultiplicityDependence.C:497
 extractMultiplicityDependence.C:498
 extractMultiplicityDependence.C:499
 extractMultiplicityDependence.C:500
 extractMultiplicityDependence.C:501
 extractMultiplicityDependence.C:502
 extractMultiplicityDependence.C:503
 extractMultiplicityDependence.C:504
 extractMultiplicityDependence.C:505
 extractMultiplicityDependence.C:506
 extractMultiplicityDependence.C:507
 extractMultiplicityDependence.C:508
 extractMultiplicityDependence.C:509
 extractMultiplicityDependence.C:510
 extractMultiplicityDependence.C:511
 extractMultiplicityDependence.C:512
 extractMultiplicityDependence.C:513
 extractMultiplicityDependence.C:514
 extractMultiplicityDependence.C:515
 extractMultiplicityDependence.C:516
 extractMultiplicityDependence.C:517
 extractMultiplicityDependence.C:518
 extractMultiplicityDependence.C:519
 extractMultiplicityDependence.C:520
 extractMultiplicityDependence.C:521
 extractMultiplicityDependence.C:522
 extractMultiplicityDependence.C:523
 extractMultiplicityDependence.C:524
 extractMultiplicityDependence.C:525
 extractMultiplicityDependence.C:526
 extractMultiplicityDependence.C:527
 extractMultiplicityDependence.C:528
 extractMultiplicityDependence.C:529
 extractMultiplicityDependence.C:530
 extractMultiplicityDependence.C:531
 extractMultiplicityDependence.C:532
 extractMultiplicityDependence.C:533
 extractMultiplicityDependence.C:534
 extractMultiplicityDependence.C:535
 extractMultiplicityDependence.C:536
 extractMultiplicityDependence.C:537
 extractMultiplicityDependence.C:538
 extractMultiplicityDependence.C:539
 extractMultiplicityDependence.C:540
 extractMultiplicityDependence.C:541
 extractMultiplicityDependence.C:542
 extractMultiplicityDependence.C:543
 extractMultiplicityDependence.C:544
 extractMultiplicityDependence.C:545
 extractMultiplicityDependence.C:546
 extractMultiplicityDependence.C:547
 extractMultiplicityDependence.C:548
 extractMultiplicityDependence.C:549
 extractMultiplicityDependence.C:550
 extractMultiplicityDependence.C:551
 extractMultiplicityDependence.C:552
 extractMultiplicityDependence.C:553
 extractMultiplicityDependence.C:554
 extractMultiplicityDependence.C:555
 extractMultiplicityDependence.C:556
 extractMultiplicityDependence.C:557
 extractMultiplicityDependence.C:558
 extractMultiplicityDependence.C:559
 extractMultiplicityDependence.C:560
 extractMultiplicityDependence.C:561
 extractMultiplicityDependence.C:562
 extractMultiplicityDependence.C:563
 extractMultiplicityDependence.C:564
 extractMultiplicityDependence.C:565
 extractMultiplicityDependence.C:566
 extractMultiplicityDependence.C:567
 extractMultiplicityDependence.C:568
 extractMultiplicityDependence.C:569
 extractMultiplicityDependence.C:570
 extractMultiplicityDependence.C:571
 extractMultiplicityDependence.C:572
 extractMultiplicityDependence.C:573
 extractMultiplicityDependence.C:574
 extractMultiplicityDependence.C:575
 extractMultiplicityDependence.C:576
 extractMultiplicityDependence.C:577
 extractMultiplicityDependence.C:578
 extractMultiplicityDependence.C:579
 extractMultiplicityDependence.C:580
 extractMultiplicityDependence.C:581
 extractMultiplicityDependence.C:582
 extractMultiplicityDependence.C:583
 extractMultiplicityDependence.C:584
 extractMultiplicityDependence.C:585
 extractMultiplicityDependence.C:586
 extractMultiplicityDependence.C:587
 extractMultiplicityDependence.C:588
 extractMultiplicityDependence.C:589
 extractMultiplicityDependence.C:590
 extractMultiplicityDependence.C:591
 extractMultiplicityDependence.C:592
 extractMultiplicityDependence.C:593
 extractMultiplicityDependence.C:594
 extractMultiplicityDependence.C:595
 extractMultiplicityDependence.C:596
 extractMultiplicityDependence.C:597
 extractMultiplicityDependence.C:598
 extractMultiplicityDependence.C:599
 extractMultiplicityDependence.C:600
 extractMultiplicityDependence.C:601
 extractMultiplicityDependence.C:602
 extractMultiplicityDependence.C:603
 extractMultiplicityDependence.C:604
 extractMultiplicityDependence.C:605
 extractMultiplicityDependence.C:606
 extractMultiplicityDependence.C:607
 extractMultiplicityDependence.C:608
 extractMultiplicityDependence.C:609
 extractMultiplicityDependence.C:610
 extractMultiplicityDependence.C:611
 extractMultiplicityDependence.C:612
 extractMultiplicityDependence.C:613
 extractMultiplicityDependence.C:614
 extractMultiplicityDependence.C:615
 extractMultiplicityDependence.C:616
 extractMultiplicityDependence.C:617
 extractMultiplicityDependence.C:618
 extractMultiplicityDependence.C:619
 extractMultiplicityDependence.C:620
 extractMultiplicityDependence.C:621
 extractMultiplicityDependence.C:622
 extractMultiplicityDependence.C:623
 extractMultiplicityDependence.C:624
 extractMultiplicityDependence.C:625
 extractMultiplicityDependence.C:626
 extractMultiplicityDependence.C:627
 extractMultiplicityDependence.C:628
 extractMultiplicityDependence.C:629
 extractMultiplicityDependence.C:630
 extractMultiplicityDependence.C:631
 extractMultiplicityDependence.C:632
 extractMultiplicityDependence.C:633
 extractMultiplicityDependence.C:634
 extractMultiplicityDependence.C:635
 extractMultiplicityDependence.C:636
 extractMultiplicityDependence.C:637
 extractMultiplicityDependence.C:638
 extractMultiplicityDependence.C:639
 extractMultiplicityDependence.C:640
 extractMultiplicityDependence.C:641
 extractMultiplicityDependence.C:642
 extractMultiplicityDependence.C:643
 extractMultiplicityDependence.C:644
 extractMultiplicityDependence.C:645
 extractMultiplicityDependence.C:646
 extractMultiplicityDependence.C:647
 extractMultiplicityDependence.C:648
 extractMultiplicityDependence.C:649
 extractMultiplicityDependence.C:650
 extractMultiplicityDependence.C:651
 extractMultiplicityDependence.C:652
 extractMultiplicityDependence.C:653
 extractMultiplicityDependence.C:654
 extractMultiplicityDependence.C:655
 extractMultiplicityDependence.C:656
 extractMultiplicityDependence.C:657
 extractMultiplicityDependence.C:658
 extractMultiplicityDependence.C:659
 extractMultiplicityDependence.C:660
 extractMultiplicityDependence.C:661
 extractMultiplicityDependence.C:662
 extractMultiplicityDependence.C:663
 extractMultiplicityDependence.C:664
 extractMultiplicityDependence.C:665
 extractMultiplicityDependence.C:666
 extractMultiplicityDependence.C:667
 extractMultiplicityDependence.C:668
 extractMultiplicityDependence.C:669
 extractMultiplicityDependence.C:670
 extractMultiplicityDependence.C:671
 extractMultiplicityDependence.C:672
 extractMultiplicityDependence.C:673
 extractMultiplicityDependence.C:674
 extractMultiplicityDependence.C:675
 extractMultiplicityDependence.C:676
 extractMultiplicityDependence.C:677
 extractMultiplicityDependence.C:678
 extractMultiplicityDependence.C:679
 extractMultiplicityDependence.C:680
 extractMultiplicityDependence.C:681
 extractMultiplicityDependence.C:682
 extractMultiplicityDependence.C:683
 extractMultiplicityDependence.C:684
 extractMultiplicityDependence.C:685
 extractMultiplicityDependence.C:686
 extractMultiplicityDependence.C:687
 extractMultiplicityDependence.C:688
 extractMultiplicityDependence.C:689
 extractMultiplicityDependence.C:690
 extractMultiplicityDependence.C:691
 extractMultiplicityDependence.C:692
 extractMultiplicityDependence.C:693
 extractMultiplicityDependence.C:694
 extractMultiplicityDependence.C:695
 extractMultiplicityDependence.C:696
 extractMultiplicityDependence.C:697
 extractMultiplicityDependence.C:698
 extractMultiplicityDependence.C:699
 extractMultiplicityDependence.C:700
 extractMultiplicityDependence.C:701
 extractMultiplicityDependence.C:702
 extractMultiplicityDependence.C:703
 extractMultiplicityDependence.C:704
 extractMultiplicityDependence.C:705
 extractMultiplicityDependence.C:706
 extractMultiplicityDependence.C:707
 extractMultiplicityDependence.C:708
 extractMultiplicityDependence.C:709
 extractMultiplicityDependence.C:710
 extractMultiplicityDependence.C:711
 extractMultiplicityDependence.C:712
 extractMultiplicityDependence.C:713
 extractMultiplicityDependence.C:714
 extractMultiplicityDependence.C:715
 extractMultiplicityDependence.C:716
 extractMultiplicityDependence.C:717
 extractMultiplicityDependence.C:718
 extractMultiplicityDependence.C:719
 extractMultiplicityDependence.C:720
 extractMultiplicityDependence.C:721
 extractMultiplicityDependence.C:722
 extractMultiplicityDependence.C:723
 extractMultiplicityDependence.C:724
 extractMultiplicityDependence.C:725
 extractMultiplicityDependence.C:726
 extractMultiplicityDependence.C:727
 extractMultiplicityDependence.C:728
 extractMultiplicityDependence.C:729
 extractMultiplicityDependence.C:730
 extractMultiplicityDependence.C:731
 extractMultiplicityDependence.C:732
 extractMultiplicityDependence.C:733
 extractMultiplicityDependence.C:734
 extractMultiplicityDependence.C:735
 extractMultiplicityDependence.C:736
 extractMultiplicityDependence.C:737
 extractMultiplicityDependence.C:738
 extractMultiplicityDependence.C:739
 extractMultiplicityDependence.C:740
 extractMultiplicityDependence.C:741
 extractMultiplicityDependence.C:742
 extractMultiplicityDependence.C:743
 extractMultiplicityDependence.C:744
 extractMultiplicityDependence.C:745
 extractMultiplicityDependence.C:746
 extractMultiplicityDependence.C:747
 extractMultiplicityDependence.C:748
 extractMultiplicityDependence.C:749
 extractMultiplicityDependence.C:750
 extractMultiplicityDependence.C:751
 extractMultiplicityDependence.C:752
 extractMultiplicityDependence.C:753
 extractMultiplicityDependence.C:754
 extractMultiplicityDependence.C:755
 extractMultiplicityDependence.C:756
 extractMultiplicityDependence.C:757
 extractMultiplicityDependence.C:758
 extractMultiplicityDependence.C:759
 extractMultiplicityDependence.C:760
 extractMultiplicityDependence.C:761
 extractMultiplicityDependence.C:762
 extractMultiplicityDependence.C:763
 extractMultiplicityDependence.C:764
 extractMultiplicityDependence.C:765
 extractMultiplicityDependence.C:766
 extractMultiplicityDependence.C:767
 extractMultiplicityDependence.C:768
 extractMultiplicityDependence.C:769
 extractMultiplicityDependence.C:770
 extractMultiplicityDependence.C:771
 extractMultiplicityDependence.C:772
 extractMultiplicityDependence.C:773
 extractMultiplicityDependence.C:774
 extractMultiplicityDependence.C:775
 extractMultiplicityDependence.C:776
 extractMultiplicityDependence.C:777
 extractMultiplicityDependence.C:778
 extractMultiplicityDependence.C:779
 extractMultiplicityDependence.C:780
 extractMultiplicityDependence.C:781
 extractMultiplicityDependence.C:782
 extractMultiplicityDependence.C:783
 extractMultiplicityDependence.C:784
 extractMultiplicityDependence.C:785
 extractMultiplicityDependence.C:786
 extractMultiplicityDependence.C:787
 extractMultiplicityDependence.C:788
 extractMultiplicityDependence.C:789
 extractMultiplicityDependence.C:790
 extractMultiplicityDependence.C:791
 extractMultiplicityDependence.C:792
 extractMultiplicityDependence.C:793
 extractMultiplicityDependence.C:794
 extractMultiplicityDependence.C:795
 extractMultiplicityDependence.C:796
 extractMultiplicityDependence.C:797
 extractMultiplicityDependence.C:798
 extractMultiplicityDependence.C:799
 extractMultiplicityDependence.C:800
 extractMultiplicityDependence.C:801
 extractMultiplicityDependence.C:802
 extractMultiplicityDependence.C:803
 extractMultiplicityDependence.C:804
 extractMultiplicityDependence.C:805
 extractMultiplicityDependence.C:806
 extractMultiplicityDependence.C:807
 extractMultiplicityDependence.C:808
 extractMultiplicityDependence.C:809
 extractMultiplicityDependence.C:810
 extractMultiplicityDependence.C:811
 extractMultiplicityDependence.C:812
 extractMultiplicityDependence.C:813
 extractMultiplicityDependence.C:814
 extractMultiplicityDependence.C:815
 extractMultiplicityDependence.C:816
 extractMultiplicityDependence.C:817
 extractMultiplicityDependence.C:818
 extractMultiplicityDependence.C:819
 extractMultiplicityDependence.C:820
 extractMultiplicityDependence.C:821
 extractMultiplicityDependence.C:822
 extractMultiplicityDependence.C:823
 extractMultiplicityDependence.C:824
 extractMultiplicityDependence.C:825
 extractMultiplicityDependence.C:826
 extractMultiplicityDependence.C:827
 extractMultiplicityDependence.C:828
 extractMultiplicityDependence.C:829
 extractMultiplicityDependence.C:830
 extractMultiplicityDependence.C:831
 extractMultiplicityDependence.C:832
 extractMultiplicityDependence.C:833
 extractMultiplicityDependence.C:834
 extractMultiplicityDependence.C:835
 extractMultiplicityDependence.C:836
 extractMultiplicityDependence.C:837
 extractMultiplicityDependence.C:838
 extractMultiplicityDependence.C:839
 extractMultiplicityDependence.C:840