ROOT logo
//Christine Nattrass, University of Tennessee at Knoxville
//This macro is to calculate the contributions to Et from various particles based on Levy fits to ALICE data at 900 GeV
//It uses d^2N/dpTdy from the papers, weighs it by Et, and integrates over all pT. 
//A=0 for mesons
//A=1 for antinucleons since they would anihilate in the calorimeter if they were observed by a calorimeter
//A=-1 for nucleons since they would not anihilate and their mass would not be measured
//At the end this is used to calculate the pid calculation correction
class AliAnalysisLevyPtModified{
public:
  virtual ~AliAnalysisLevyPtModified(){;};
  

  Double_t Evaluate(Double_t *pt, Double_t *par)
  {
    Double_t ldNdy  = par[0];
    Double_t l2pi   = 2*TMath::Pi();
    Double_t lTemp = par[1];
    Double_t lPower = par[2];
    Double_t lMass  = par[3];
    Double_t A = par[4];
    Double_t lMassEt  = par[5];//only used for calculating Et
    //this is the Et we would calculate if we had identified the particle as having a mass lMassEt
    Double_t Et = TMath::Sqrt(pt[0]*pt[0]+lMassEt*lMassEt)+A*lMassEt;
    
    Double_t lBigCoef = ((lPower-1)*(lPower-2)) / (l2pi*lPower*lTemp*(lPower*lTemp+lMass*(lPower-2)));
    Double_t lInPower = 1 + (TMath::Sqrt(pt[0]*pt[0]+lMass*lMass)-lMass) / (lPower*lTemp);
    //This is the density of particles times the Et weight
    return ldNdy *Et* pt[0] * lBigCoef * TMath::Power(lInPower,(-1)*lPower);
  }
  ClassDef(AliAnalysisLevyPtModified, 1);
};
class AliAnalysisLevyPtModifiedStrangeness{
public:
  virtual ~AliAnalysisLevyPtModifiedStrangeness(){;};
  

  Double_t Evaluate(Double_t *pt, Double_t *par)
  {
    Double_t ldNdy  = par[0];
    Double_t l2pi   = 2*TMath::Pi();
    Double_t lTemp = par[1];
    Double_t lPower = par[2];
    Double_t lMass  = par[3];
    Double_t A = par[4];
    Double_t lMassEt  = par[5];//only used for calculating Et
    //this is the Et we would calculate if we had identified the particle as having a mass lMassEt
    Double_t Et = TMath::Sqrt(pt[0]*pt[0]+lMassEt*lMassEt)+A*lMassEt;
    
    Double_t lBigCoef = ((lPower-1)*(lPower-2)) / (l2pi*lPower*lTemp*(lPower*lTemp+lMass*(lPower-2)));
    Double_t lInPower = 1 + (TMath::Sqrt(pt[0]*pt[0]+lMass*lMass)-lMass) / (lPower*lTemp);
    Double_t strangeness = (0.4333333*pt[0]-0.0666666)/(0.2333333333*pt[0]-0.01666666);
    if(strangeness<1.0 || pt[0]<0.1) strangeness = 1.0;
    //This is the density of particles times the Et weight
    return ldNdy *strangeness* Et* pt[0] * lBigCoef * TMath::Power(lInPower,(-1)*lPower);
  }
  ClassDef(AliAnalysisLevyPtModifiedStrangeness, 1);
};
class AliAnalysisLevyPtModifiedBaryonEnhanced{
public:
  virtual ~AliAnalysisLevyPtModifiedBaryonEnhanced(){;};
  

  Double_t Evaluate(Double_t *pt, Double_t *par)
  {
    Double_t ldNdy  = par[0];
    Double_t l2pi   = 2*TMath::Pi();
    Double_t lTemp = par[1];
    Double_t lPower = par[2];
    Double_t lMass  = par[3];
    Double_t A = par[4];
    Double_t lMassEt  = par[5];//only used for calculating Et
    Double_t lBary0 = par[6];
    Double_t lBary1 = par[7];
    Double_t lBary2 = par[8];
    Double_t lBary3 = par[9];
    Double_t lBary4 = par[10];
    Double_t lBary5 = par[11];
    //this is the Et we would calculate if we had identified the particle as having a mass lMassEt
    Double_t Et = TMath::Sqrt(pt[0]*pt[0]+lMassEt*lMassEt)+A*lMassEt;
    
    Double_t lBigCoef = ((lPower-1)*(lPower-2)) / (l2pi*lPower*lTemp*(lPower*lTemp+lMass*(lPower-2)));
    Double_t lInPower = 1 + (TMath::Sqrt(pt[0]*pt[0]+lMass*lMass)-lMass) / (lPower*lTemp);
    //this is the baryon enhancement factor
    Double_t baryonEnhancement = lBary0*pow(pt[0],lBary1)*exp(-pow(pt[0]/lBary2,lBary3))/(lBary4+lBary5*pt[0]);
    if(baryonEnhancement<1.0) baryonEnhancement = 1.0;
    Double_t strangeness = (0.4333333*pt[0]-0.0666666)/(0.2333333333*pt[0]-0.01666666);
    if(strangeness<1.0 || pt[0]<0.1) strangeness = 1.0;
    //This is the density of particles times the Et weight
    return ldNdy *Et*strangeness* baryonEnhancement*pt[0] * lBigCoef * TMath::Power(lInPower,(-1)*lPower);  }
  ClassDef(AliAnalysisLevyPtModifiedBaryonEnhanced, 1);
};
class AliAnalysisLevyPtModifiedStrangenessBaryonEnhanced{
public:
  virtual ~AliAnalysisLevyPtModifiedStrangenessBaryonEnhanced(){;};
  

  Double_t Evaluate(Double_t *pt, Double_t *par)
  {
    Double_t ldNdy  = par[0];
    Double_t l2pi   = 2*TMath::Pi();
    Double_t lTemp = par[1];
    Double_t lPower = par[2];
    Double_t lMass  = par[3];
    Double_t A = par[4];
    Double_t lMassEt  = par[5];//only used for calculating Et
    Double_t lBary0 = par[6];
    Double_t lBary1 = par[7];
    Double_t lBary2 = par[8];
    Double_t lBary3 = par[9];
    Double_t lBary4 = par[10];
    Double_t lBary5 = par[11];
    //this is the Et we would calculate if we had identified the particle as having a mass lMassEt
    Double_t Et = TMath::Sqrt(pt[0]*pt[0]+lMassEt*lMassEt)+A*lMassEt;
    
    Double_t lBigCoef = ((lPower-1)*(lPower-2)) / (l2pi*lPower*lTemp*(lPower*lTemp+lMass*(lPower-2)));
    Double_t lInPower = 1 + (TMath::Sqrt(pt[0]*pt[0]+lMass*lMass)-lMass) / (lPower*lTemp);
    //this is the baryon enhancement factor
    Double_t baryonEnhancement = lBary0*pow(pt[0],lBary1)*exp(-pow(pt[0]/lBary2,lBary3))/(lBary4+lBary5*pt[0]);
    if(baryonEnhancement<1.0) baryonEnhancement = 1.0;
    //This is the density of particles times the Et weight
    return ldNdy *Et* baryonEnhancement*pt[0] * lBigCoef * TMath::Power(lInPower,(-1)*lPower);  }
  ClassDef(AliAnalysisLevyPtModifiedStrangenessBaryonEnhanced, 1);
};

void CorrPIDLevyFit(bool hadronic = false){
  //pt cuts where we can identify things
  float protoncut = 0.9+0.25;
  float protoncuterr = 0.25;
  float kaoncut = 0.45+0.25;
  float kaoncuterr = 0.25;
  //pt cut
  float ptcut = 0.1;
// particle          & $\frac{dN}{dy}$    & T (GeV)           & n               & $\frac{dE_T}{dy}$& a &\ET \\ \hline
// $\pi^{+}+\pi^{-}$ & 2.977  $\pm$ 0.15  & 0.126 $\pm$ 0.001 & 7.82 $\pm$ 0.1  &                  &   &     \\
  AliAnalysisLevyPtModified *function = new AliAnalysisLevyPtModified();
  fPion = new TF1("fPion",function, &AliAnalysisLevyPtModified::Evaluate,0,50,6,"AliAnalysisLevyPtModified","Evaluate");
  fPion->SetParameter(0,2.977);//dN/dy
  fPion->SetParameter(1,0.126);//T
  fPion->SetParameter(2,7.82);//n
  fPion->SetParameter(3,0.13957);//mass
  fPion->SetParameter(4,0);//A=0 for pions
  fPion->SetParameter(5,0.13957);//mass et
  float integralPion = fPion->Integral(ptcut,50);
  float integralErrPion = integralPion*0.007/2.977;
  float myerrorPionT = 0.0;
  float myerrorPionn = 0.0;
  float tmpPion;
  float T = 0.126;
  float Terr = 0.001;
  float n = 7.82;
  float nerr = 0.1;
  fPion->SetParameter(1,T+Terr);//T
  tmpPion = fPion->Integral(ptcut,50);
  myerrorPionT = TMath::Abs(integralPion-tmpPion);
  fPion->SetParameter(1,T-Terr);//T
  tmpPion = fPion->Integral(ptcut,50);
  if(TMath::Abs(integralPion-tmpPion)>myerrorPionT) myerrorPionT = TMath::Abs(integralPion-tmpPion);
  fPion->SetParameter(1,T);//T
  fPion->SetParameter(2,n+nerr);//n
  tmpPion = fPion->Integral(ptcut,50);
  myerrorPionn = TMath::Abs(integralPion-tmpPion);
  fPion->SetParameter(2,n-nerr);//n
  tmpPion = fPion->Integral(ptcut,50);
  if(TMath::Abs(integralPion-tmpPion)>myerrorPionn) myerrorPionn = TMath::Abs(integralPion-tmpPion);
  //This isn't strictly correct because the errors on the parameters should be correlated but it's close
  //To get the correct error one would have to fit the spectra data to get the covariance matrix...
  cout<<"Errors: dN/dy "<<integralErrPion<<" T "<<myerrorPionT<<" n "<<myerrorPionn<<endl;
  integralErrPion = TMath::Sqrt(TMath::Power(integralErrPion,2)+TMath::Power(myerrorPionT,2)+TMath::Power(myerrorPionn,2));
  cout<<"Pion Et = "<<integralPion<<"$\\pm$"<<integralErrPion<<endl;




// particle          & $\frac{dN}{dy}$    & T (GeV)           & n               & $\frac{dE_T}{dy}$& a &\ET \\ \hline
// $K^{+}+K^{-}$     & 0.366 $\pm$ 0.03   & 0.160 $\pm$ 0.006 & 6.087 $\pm$ 0.4 &                  &   &     \\
  fKaon = new TF1("fKaon",function, &AliAnalysisLevyPtModified::Evaluate,0,50,6,"AliAnalysisLevyPtModified","Evaluate");
  fKaon->SetParameter(0,0.366);//dN/dy
  fKaon->SetParameter(1,0.160);//T
  fKaon->SetParameter(2,6.087);//n
  fKaon->SetParameter(3,0.493677);//mass
  fKaon->SetParameter(4,0);//A=0 for kaons
  fKaon->SetParameter(5,0.493677);//mass et
  fKaonStrange = new TF1("fKaonStrange",function, &AliAnalysisLevyPtModifiedStrangeness::Evaluate,0,50,6,"AliAnalysisLevyPtModifiedStrangeness","Evaluate");
  for(int i=0;i<6;i++){fKaonStrange->SetParameter(i,fKaon->GetParameter(i));}
  float integralKaon = fKaon->Integral(ptcut,50);
  float integralKaonStrange = fKaonStrange->Integral(ptcut,50);
  float integralErrKaon = integralKaon*0.006/0.366;
  float myerrorKaonT = 0.0;
  float myerrorKaonn = 0.0;
  float tmpKaon;
  float T = 0.160;
  float Terr = 0.006;
  float n = 6.087;
  float nerr = 0.4;
  fKaon->SetParameter(1,T+Terr);//T
  tmpKaon = fKaon->Integral(ptcut,50);
  myerrorKaonT = TMath::Abs(integralKaon-tmpKaon);
  fKaon->SetParameter(1,T-Terr);//T
  tmpKaon = fKaon->Integral(ptcut,50);
  if(TMath::Abs(integralKaon-tmpKaon)>myerrorKaonT) myerrorKaonT = TMath::Abs(integralKaon-tmpKaon);
  fKaon->SetParameter(1,T);//T
  fKaon->SetParameter(2,n+nerr);//n
  tmpKaon = fKaon->Integral(ptcut,50);
  myerrorKaonn = TMath::Abs(integralKaon-tmpKaon);
  fKaon->SetParameter(2,n-nerr);//n
  tmpKaon = fKaon->Integral(ptcut,50);
  if(TMath::Abs(integralKaon-tmpKaon)>myerrorKaonn) myerrorKaonn = TMath::Abs(integralKaon-tmpKaon);
  //This isn't strictly correct because the errors on the parameters should be correlated but it's close
  cout<<"Errors: dN/dy "<<integralErrKaon<<" T "<<myerrorKaonT<<" n "<<myerrorKaonn<<endl;
  integralErrKaon = TMath::Sqrt(TMath::Power(integralErrKaon,2)+TMath::Power(myerrorKaonT,2)+TMath::Power(myerrorKaonn,2));
  cout<<"Kaon Et = "<<integralKaon<<"$\\pm$"<<integralErrKaon<<endl;
  cout<<"Kaon Et Strangeness Enhanced = "<<integralKaonStrange<<endl;
  //now calculate the integral for kaons we can identify:
  float integralKaonLowPtMean = fKaon->Integral(ptcut,kaoncut);
  float integralKaonLowPtPlus = fKaon->Integral(ptcut,kaoncut+kaoncuterr);
  float integralKaonLowPtMinus = fKaon->Integral(ptcut,kaoncut-kaoncuterr);
  float integralKaonStrangeLowPtMinus = fKaonStrange->Integral(ptcut,kaoncut-kaoncuterr);
  //now we switch the kaon mass to the pion mass
  fKaon->SetParameter(5,0.13957);//mass et
  fKaonStrange->SetParameter(5,0.13957);//mass et
  //and do the integrals
  float integralKaonHighPtMean = fKaon->Integral(kaoncut,50);
  float integralKaonHighPtPlus = fKaon->Integral(kaoncut+kaoncuterr,50);
  float integralKaonHighPtMinus = fKaon->Integral(kaoncut-kaoncuterr,50);
  float integralKaonStrangeHighPtMinus = fKaonStrange->Integral(kaoncut-kaoncuterr,50);
  float integralKaonNoID = fKaon->Integral(ptcut,50);
  cout<<"Kaon Et as pion = "<<integralKaonHighPtMean+integralKaonLowPtMean<<endl;
  cout<<"Kaon Et Strange as pion = "<<integralKaonStrangeHighPtMinus+integralKaonStrangeLowPtMinus<<endl;
  TF1 *fKaonPion = fKaon->Clone("fKaonPion");
  //and change it back just to avoid confusion
  fKaon->SetParameter(5,0.493677);//mass et
  fKaonStrange->SetParameter(5,0.493677);//mass et

// particle          & $\frac{dN}{dy}$    & T (GeV)           & n               & $\frac{dE_T}{dy}$& a &\ET \\ \hline
// $p + \bar{p}$     &  0.157 $\pm$ 0.012 & 0.196 $\pm$ 0.009 & 8.6 $\pm$ 1.1   &                  &   &     \\
  fProton = new TF1("fProton",function, &AliAnalysisLevyPtModified::Evaluate,0,50,6,"AliAnalysisLevyPtModified","Evaluate");
  fProton->SetParameter(0,0.08);//dN/dy
  fProton->SetParameter(1,0.196);//T
  fProton->SetParameter(2,8.6);//n
  fProton->SetParameter(3,0.938272);//mass
  fProton->SetParameter(4,-1);//A=0 for protons
  fProton->SetParameter(5,0.938272);//mass et
  fProtonEnhanced = new TF1("fProtonEnhanced",function, &AliAnalysisLevyPtModifiedBaryonEnhanced::Evaluate,0,50,12,"AliAnalysisLevyPtModifiedBaryonEnhanced","Evaluate");
  for(int i=0;i<6;i++){fProtonEnhanced->SetParameter(i,fProton->GetParameter(i));}//set all of the spectra parameters to their normal values
  //and now set the baryon enhancement parameters
  fProtonEnhanced->SetParameter(6,0.900878);
  fProtonEnhanced->SetParameter(7,1.38882);
  fProtonEnhanced->SetParameter(8,2.6361);
  fProtonEnhanced->SetParameter(9,1.37751);
  fProtonEnhanced->SetParameter(10,0.5);
  fProtonEnhanced->SetParameter(11,-0.03);
  float integralProton = fProton->Integral(ptcut,50);
  float integralErrProton = integralProton*0.002/0.08;
  float myerrorProtonT = 0.0;
  float myerrorProtonn = 0.0;
  float tmpProton;
  float T = 0.196;
  float Terr = 0.009;
  float n = 8.6;
  float nerr = 1.1;
  fProton->SetParameter(1,T+Terr);//T
  tmpProton = fProton->Integral(ptcut,50);
  myerrorProtonT = TMath::Abs(integralProton-tmpProton);
  fProton->SetParameter(1,T-Terr);//T
  tmpProton = fProton->Integral(ptcut,50);
  if(TMath::Abs(integralProton-tmpProton)>myerrorProtonT) myerrorProtonT = TMath::Abs(integralProton-tmpProton);
  fProton->SetParameter(1,T);//T
  fProton->SetParameter(2,n+nerr);//n
  tmpProton = fProton->Integral(ptcut,50);
  myerrorProtonn = TMath::Abs(integralProton-tmpProton);
  fProton->SetParameter(2,n-nerr);//n
  tmpProton = fProton->Integral(ptcut,50);
  if(TMath::Abs(integralProton-tmpProton)>myerrorProtonn) myerrorProtonn = TMath::Abs(integralProton-tmpProton);
  //This isn't strictly correct because the errors on the parameters should be correlated but it's close
  cout<<"Errors: dN/dy "<<integralErrProton<<" T "<<myerrorProtonT<<" n "<<myerrorProtonn<<endl;
  integralErrProton = TMath::Sqrt(TMath::Power(integralErrProton,2)+TMath::Power(myerrorProtonT,2)+TMath::Power(myerrorProtonn,2));
  cout<<"Proton Et = "<<integralProton<<"$\\pm$"<<integralErrProton<<endl;
  //now calculate the integral for kaons we can identify:
  float integralProtonLowPtMean = fProton->Integral(ptcut,protoncut);
  float integralProtonLowPtPlus = fProton->Integral(ptcut,protoncut+protoncuterr);
  float integralProtonLowPtMinus = fProton->Integral(ptcut,protoncut-protoncuterr);
  float integralProtonEnhancedTrue =integralProtonLowPtMinus+ fProtonEnhanced->Integral(protoncut-protoncuterr,50);
  fProtonEnhanced->SetParameter(6,1.2*fProtonEnhanced->GetParameter(6));
  float integralProtonReallyEnhancedTrue = integralProtonLowPtMinus+ fProtonEnhanced->Integral(protoncut-protoncuterr,50);
  fProtonEnhanced->SetParameter(6,1.0/1.2*fProtonEnhanced->GetParameter(6));
  //now we switch the kaon mass to the pion mass
  fProton->SetParameter(5,0.13957);//mass et
  fProton->SetParameter(4,0);//A=0 for pions
  //and do the integrals
  float integralProtonHighPtMean = fProton->Integral(protoncut,50);
  float integralProtonHighPtPlus = fProton->Integral(protoncut+protoncuterr,50);
  float integralProtonHighPtMinus = fProton->Integral(protoncut-protoncuterr,50);

  //now we switch the kaon mass to the pion mass
  fProtonEnhanced->SetParameter(5,0.13957);//mass et
  fProtonEnhanced->SetParameter(4,0);//A=0 for pions
  float integralProtonHighPtMinusEnhanced = fProtonEnhanced->Integral(protoncut-protoncuterr,50);
  fProtonEnhanced->SetParameter(6,1.2*fProtonEnhanced->GetParameter(6));
  float integralProtonHighPtMinusReallyEnhanced = fProtonEnhanced->Integral(protoncut-protoncuterr,50);
  fProtonEnhanced->SetParameter(6,1.0/1.2*fProtonEnhanced->GetParameter(6));

  float integralProtonNoID = fProton->Integral(ptcut,50);
  float integralProtonEnhancedNoID = integralProtonHighPtMinusEnhanced+integralProtonLowPtMinus;
  float integralProtonReallyEnhancedNoID = integralProtonHighPtMinusReallyEnhanced+integralProtonLowPtMinus;
  cout<<"Proton Et as pion = "<<integralProtonHighPtMean+integralProtonLowPtMean<<endl;
  cout<<"Proton Et really enhanced = "<<integralProtonReallyEnhancedTrue<<"("<<integralProtonHighPtMinusReallyEnhanced+integralProtonLowPtMinus<<")"<<endl;
  TF1 *fProtonPion = fProton->Clone("fProtonPion");
  //and change it back just to avoid confusion
  fProton->SetParameter(5,0.938272);//mass et
  fProton->SetParameter(4,-1);//A=0 for protons
  fProtonEnhanced->SetParameter(5,0.938272);//mass et
  fProtonEnhanced->SetParameter(4,-1);//A=0 for protons



  //Antiprotons...
  fProton->SetParameter(0,0.077);//dN/dy
  fProton->SetParameter(2,n);//n
  fProton->SetParameter(4,1);//A=0 for protons
  fAntiProtonEnhanced = new TF1("fAntiProtonEnhanced",function, &AliAnalysisLevyPtModifiedBaryonEnhanced::Evaluate,0,50,12,"AliAnalysisLevyPtModifiedBaryonEnhanced","Evaluate");
  for(int i=0;i<6;i++){fAntiProtonEnhanced->SetParameter(i,fProton->GetParameter(i));}//set all of the spectra parameters to their normal values
  //and now set the baryon enhancement parameters
  fAntiProtonEnhanced->SetParameter(6,0.900878);
  fAntiProtonEnhanced->SetParameter(7,1.38882);
  fAntiProtonEnhanced->SetParameter(8,2.6361);
  fAntiProtonEnhanced->SetParameter(9,1.37751);
  fAntiProtonEnhanced->SetParameter(10,0.5);
  fAntiProtonEnhanced->SetParameter(11,-0.03);
  float integralAntiProton = fProton->Integral(ptcut,50);
  float integralErrAntiProton = integralAntiProton*0.002/0.077;
  float myerrorAntiProtonT = 0.0;
  float myerrorAntiProtonn = 0.0;
  float tmpAntiProton;
  float T = 0.196;
  float Terr = 0.009;
  float n = 8.6;
  float nerr = 1.1;
  fProton->SetParameter(1,T+Terr);//T
  tmpAntiProton = fProton->Integral(ptcut,50);
  myerrorAntiProtonT = TMath::Abs(integralAntiProton-tmpAntiProton);
  fProton->SetParameter(1,T-Terr);//T
  tmpAntiProton = fProton->Integral(ptcut,50);
  if(TMath::Abs(integralAntiProton-tmpAntiProton)>myerrorAntiProtonT) myerrorAntiProtonT = TMath::Abs(integralAntiProton-tmpAntiProton);
  fProton->SetParameter(1,T);//T
  fProton->SetParameter(2,n+nerr);//n
  tmpAntiProton = fProton->Integral(ptcut,50);
  myerrorAntiProtonn = TMath::Abs(integralAntiProton-tmpAntiProton);
  fProton->SetParameter(2,n-nerr);//n
  tmpAntiProton = fProton->Integral(ptcut,50);
  if(TMath::Abs(integralAntiProton-tmpAntiProton)>myerrorAntiProtonn) myerrorAntiProtonn = TMath::Abs(integralAntiProton-tmpAntiProton);
  //This isn't strictly correct because the errors on the parameters should be correlated but it's close
  cout<<"Errors: dN/dy "<<integralErrAntiProton<<" T "<<myerrorAntiProtonT<<" n "<<myerrorAntiProtonn<<endl;
  integralErrAntiProton = TMath::Sqrt(TMath::Power(integralErrAntiProton,2)+TMath::Power(myerrorAntiProtonT,2)+TMath::Power(myerrorAntiProtonn,2));
  cout<<"AntiProton Et = "<<integralAntiProton<<"$\\pm$"<<integralErrAntiProton<<endl;
  TF1 *fAntiProton = fProton->Clone("fAntiProton");
  //now calculate the integral for kaons we can identify:
  float integralAntiProtonLowPtMean = fProton->Integral(ptcut,protoncut);
  float integralAntiProtonLowPtPlus = fProton->Integral(ptcut,protoncut+protoncuterr);
  float integralAntiProtonLowPtMinus = fProton->Integral(ptcut,protoncut-protoncuterr);
  float integralAntiProtonEnhancedTrue =integralAntiProtonLowPtMinus+ fAntiProtonEnhanced->Integral(protoncut-protoncuterr,50);
  fAntiProtonEnhanced->SetParameter(6,1.2*fAntiProtonEnhanced->GetParameter(6));
  float integralAntiProtonReallyEnhancedTrue = integralAntiProtonLowPtMinus+ fAntiProtonEnhanced->Integral(protoncut-protoncuterr,50);
  fAntiProtonEnhanced->SetParameter(6,1.0/1.2*fAntiProtonEnhanced->GetParameter(6));
  //now we switch the kaon mass to the pion mass
  fProton->SetParameter(5,0.13957);//mass et
  fProton->SetParameter(4,0);//A=0 for pions
  //and do the integrals
  float integralAntiProtonHighPtMean = fProton->Integral(protoncut,50);
  float integralAntiProtonHighPtPlus = fProton->Integral(protoncut+protoncuterr,50);
  float integralAntiProtonHighPtMinus = fProton->Integral(protoncut-protoncuterr,50);

  //now we switch the kaon mass to the pion mass
  fAntiProtonEnhanced->SetParameter(5,0.13957);//mass et
  fAntiProtonEnhanced->SetParameter(4,0);//A=0 for pions
  float integralAntiProtonHighPtMinusEnhanced = fAntiProtonEnhanced->Integral(protoncut-protoncuterr,50);
  fAntiProtonEnhanced->SetParameter(6,1.2*fAntiProtonEnhanced->GetParameter(6));
  float integralAntiProtonHighPtMinusReallyEnhanced = fAntiProtonEnhanced->Integral(protoncut-protoncuterr,50);
  fAntiProtonEnhanced->SetParameter(6,1.0/1.2*fAntiProtonEnhanced->GetParameter(6));

  float integralAntiProtonNoID = fProton->Integral(ptcut,50);
  cout<<"AntiProton Et as pion = "<<integralAntiProtonHighPtMean+integralAntiProtonLowPtMean<<endl;
  cout<<"AntiProton Et really enhanced = "<<integralAntiProtonReallyEnhancedTrue<<"("<<integralAntiProtonHighPtMinusReallyEnhanced+integralAntiProtonLowPtMinus<<")"<<endl;
  TF1 *fAntiProtonPion = fProton->Clone("fAntiProtonPion");
  //and change it back just to avoid confusion
  fProton->SetParameter(5,0.938272);//mass
  //cout<<"CHECK "<<fProton->GetParameter(5)<<endl;
  fProton->SetParameter(4,-1);//A=0 for protons
  fAntiProtonEnhanced->SetParameter(5,0.938272);//mass et
  fAntiProtonEnhanced->SetParameter(4,-1);//A=0 for protons

  float totTrue = integralPion + integralKaon + integralProton + integralAntiProton;
  float totTrueErr = TMath::Sqrt(TMath::Power(integralErrAntiProton,2)+TMath::Power(integralErrProton,2)+TMath::Power(integralErrKaon,2)+TMath::Power(integralErrPion,2));
  float totTrueEnhanced = integralPion + integralKaon + integralProtonEnhancedTrue + integralAntiProtonEnhancedTrue;
  float totTrueReallyEnhanced = integralPion + integralKaon + integralProtonReallyEnhancedTrue + integralAntiProtonReallyEnhancedTrue;
  float totTrueStrange = integralPion + integralKaonStrange + integralProton + integralAntiProton;
  float totTrueStrangeEnhanced = integralPion + integralKaonStrange + integralProtonReallyEnhancedTrue + integralAntiProtonReallyEnhancedTrue;
  cout<<"totEt "<<totTrue<<"+/-"<<totTrueErr<<endl;

  float measEt = integralPion+integralKaonLowPtMean+integralKaonHighPtMean+integralProtonLowPtMean+integralProtonHighPtMean+integralAntiProtonLowPtMean+integralAntiProtonHighPtMean;
  float measEtPlus = integralPion+integralKaonLowPtPlus+integralKaonHighPtPlus+integralProtonLowPtPlus+integralProtonHighPtPlus+integralAntiProtonLowPtPlus+integralAntiProtonHighPtPlus;
  float measEtMinus = integralPion+integralKaonLowPtMinus+integralKaonHighPtMinus+integralProtonLowPtMinus+integralProtonHighPtMinus+integralAntiProtonLowPtMinus+integralAntiProtonHighPtMinus;
  float measEtMinusStrange = integralPion+integralKaonStrangeLowPtMinus+integralKaonStrangeHighPtMinus+integralProtonLowPtMinus+integralProtonHighPtMinus+integralAntiProtonLowPtMinus+integralAntiProtonHighPtMinus;
  float measEtEnhanced = integralPion+integralKaonLowPtMinus+integralKaonHighPtMinus+integralProtonLowPtMinus+integralProtonHighPtMinusEnhanced+integralAntiProtonLowPtMinus+integralAntiProtonHighPtMinusEnhanced;
  float measEtReallyEnhanced = integralPion+integralKaonLowPtMinus+integralKaonHighPtMinus+integralProtonLowPtMinus+integralProtonHighPtMinusReallyEnhanced+integralAntiProtonLowPtMinus+integralAntiProtonHighPtMinusReallyEnhanced;
  cout<<"measEt "<<measEt<<" "<<measEtPlus<<" "<<measEtMinus<<endl;
  float measEtStrangeEnhanced = integralPion+integralKaonStrangeLowPtMinus+integralKaonStrangeHighPtMinus+integralProtonLowPtMinus+integralProtonHighPtMinusReallyEnhanced+integralAntiProtonLowPtMinus+integralAntiProtonHighPtMinusReallyEnhanced;
  cout<<"measEt "<<measEt<<" "<<measEtPlus<<" "<<measEtMinus<<endl;
  float measNoID = integralPion+integralKaonNoID+integralProtonNoID+integralAntiProtonNoID;

  float fpid = measEt/totTrue;
  float fpiderr = fpid*totTrueErr/totTrue;
  float fpidsyserr = TMath::Abs(measEtMinus-measEt)/totTrue;
  float fnopid = measNoID/totTrue;
  float fnopiderr = fnopid*totTrueErr/totTrue;
  if(TMath::Abs(measEtPlus-measEt)> fpidsyserr) fpidsyserr = TMath::Abs(measEtPlus-measEt);
  cout<<"fpid "<<fpid<<" +/- "<<fpiderr<<" +/- "<<fpidsyserr<<endl;
  cout<<"fpid (no pt uncertainty) "<<measEtMinus/totTrue<<" +/- "<<(measEtMinus/totTrue)*totTrueErr/totTrue<<endl;
  cout<<"For no id fpid "<<fnopid<<" +/- "<<fnopiderr<<endl;
  cout<<"fpid enhanced "<<measEtEnhanced/totTrueEnhanced<<endl;
  cout<<"fpid strange "<<measEtMinusStrange/totTrueStrange<<endl;
  cout<<"fpid strange enhanced "<<measEtStrangeEnhanced/totTrueStrangeEnhanced<<endl;
  cout<<"fpid really enhanced "<<measEtReallyEnhanced/totTrueReallyEnhanced<<endl;



  gStyle->SetOptTitle(0);
  gStyle->SetOptStat(0);
  gStyle->SetOptFit(0);
  TCanvas *c1 = new TCanvas("c1","c1",500,400);
  c1->SetTopMargin(0.02);
  c1->SetRightMargin(0.02);
  c1->SetBorderSize(0);
  c1->SetFillColor(0);
  c1->SetFillColor(0);
  c1->SetBorderMode(0);
  c1->SetFrameFillColor(0);
  c1->SetFrameBorderMode(0);
  c1->SetLogy();
  fPion->SetLineColor(1);
  fKaon->SetLineColor(2);
  fKaonPion->SetLineColor(2);
  fKaonPion->SetLineStyle(2);
  fProton->SetLineColor(4);
  fProtonPion->SetLineColor(4);
  fProtonPion->SetLineStyle(2);
  fAntiProton->SetLineColor(TColor::kCyan);
  fAntiProtonPion->SetLineColor(TColor::kCyan);
  fAntiProtonPion->SetLineStyle(2);
//   cout<<"Kaon pion mass "<<Form("%2.4f",fKaonPion->GetParameter(5))<<" A "<<fKaonPion->GetParameter(4)<<endl;
//   cout<<"Proton pion mass "<<fProtonPion->GetParameter(5)<<" A "<<fProtonPion->GetParameter(4)<<endl;
//   cout<<"AntiProton pion mass "<<fAntiProtonPion->GetParameter(5)<<" A "<<fAntiProtonPion->GetParameter(4)<<endl;
//   cout<<"Kaon mass "<<Form("%2.4f",fKaon->GetParameter(5))<<" A "<<fKaon->GetParameter(4)<<endl;
//   cout<<"Proton mass "<<fProton->GetParameter(5)<<" A "<<fProton->GetParameter(4)<<endl;
//   cout<<"AntiProton mass "<<fAntiProton->GetParameter(5)<<" A "<<fAntiProton->GetParameter(4)<<endl;
  TH1F *frame = new TH1F("frame","frame",1,0,2);
  frame->GetYaxis()->SetTitle("1/N_{eve}d^{2}NE_{T}/dydp_{T}");
  frame->GetXaxis()->SetTitle("p_{T}");
  //fPion->SetRange(0,2);
  frame->SetMinimum(1e-4);
  frame->SetMaximum(0.5);
  frame->Draw();
  fPion->Draw("same");
  fKaon->Draw("same");
  fProton->Draw("same");
  fAntiProton->Draw("same");
  fKaonPion->Draw("same");
  fProtonPion->Draw("same");
  fAntiProtonPion->Draw("same");
  TLegend *leg = new  TLegend(0.782258,0.774194,0.925403,0.962366);
  leg->AddEntry(fPion,"#pi");
  leg->AddEntry(fProton,"p");
  leg->AddEntry(fKaon,"K");
  leg->AddEntry(fAntiProton,"#bar{p}");
  leg->SetFillStyle(0);
  leg->SetFillColor(0);
  leg->SetBorderSize(0);
  leg->SetTextSize(0.06);
 leg->Draw();
 TLine *lineProton = new TLine(protoncut-protoncuterr,frame->GetMinimum(),protoncut-protoncuterr,frame->GetMaximum());
 lineProton->SetLineColor(fProton->GetLineColor());
 lineProton->SetLineStyle(3);
 lineProton->SetLineWidth(2);
 lineProton->Draw();
 TLine *lineKaon = new TLine(kaoncut-kaoncuterr,frame->GetMinimum(),kaoncut-kaoncuterr,frame->GetMaximum());
 lineKaon->SetLineColor(fKaon->GetLineColor());
 lineKaon->SetLineStyle(3);
 lineKaon->SetLineWidth(2);
 lineKaon->Draw();
 

  TCanvas *c2 = new TCanvas("c2","c2",500,400);
  c2->SetTopMargin(0.02);
  c2->SetRightMargin(0.02);
  c2->SetBorderSize(0);
  c2->SetFillColor(0);
  c2->SetFillColor(0);
  c2->SetBorderMode(0);
  c2->SetFrameFillColor(0);
  c2->SetFrameBorderMode(0);
  c2->SetLogy();
  fPionSpectrum = (TF1*) fPion->Clone("fPionSpectrum");
  fKaonSpectrum = (TF1*) fKaon->Clone("fKaonSpectrum");
  fProtonSpectrum = (TF1*) fProton->Clone("fProtonSpectrum");
  fAntiProtonSpectrum = (TF1*) fAntiProton->Clone("fAntiProtonSpectrum");
  fPionSpectrum->SetLineColor(1);
  fKaonSpectrum->SetLineColor(2);
  fProtonSpectrum->SetLineColor(4);
  fAntiProtonSpectrum->SetLineColor(TColor::kCyan);
  fKaonSpectrum->SetParameter(5,0.0);//mass et
  fProtonSpectrum->SetParameter(5,0.0);//mass et
  fPionSpectrum->SetParameter(5,0.0);//mass et
  fAntiProtonSpectrum->SetParameter(5,0.0);//mass et
  TH1F *frame2 = new TH1F("frame2","frame2",1,0,2);
  frame2->GetYaxis()->SetTitle("1/N_{eve}d^{2}N/dydp_{T}");
  frame2->GetXaxis()->SetTitle("p_{T}");
  //fPionSpectrum->SetRange(0,2);
  frame2->SetMinimum(1e-5);
  frame2->SetMaximum(1);
  frame2->Draw();
  fPionSpectrum->Draw("same");
  fKaonSpectrum->Draw("same");
  fProtonSpectrum->Draw("same");
  //fAntiProtonSpectrum->Draw("same");
  TLegend *leg2 = new  TLegend(0.782258,0.774194,0.925403,0.962366);
  leg2->AddEntry(fPionSpectrum,"#pi");
  leg2->AddEntry(fProtonSpectrum,"p,#bar{p}");
  leg2->AddEntry(fKaonSpectrum,"K");
  leg2->SetFillStyle(0);
  leg2->SetFillColor(0);
  leg2->SetBorderSize(0);
  leg2->SetTextSize(0.06);
 leg2->Draw();

  TCanvas *c3 = new TCanvas("c3","c3",500,400);
  c3->SetTopMargin(0.02);
  c3->SetRightMargin(0.02);
  c3->SetBorderSize(0);
  c3->SetFillColor(0);
  c3->SetFillColor(0);
  c3->SetBorderMode(0);
  c3->SetFrameFillColor(0);
  c3->SetFrameBorderMode(0);
  //c3->SetLogy();
  TH1F *frame3 = new TH1F("frame3","frame3",1,0,2);
  frame3->GetYaxis()->SetTitle("E_{T}");
  frame3->GetXaxis()->SetTitle("p_{T}");
  //fPionSpectrum->SetRange(0,2);
  frame3->SetMinimum(0.0);
  frame3->SetMaximum(4);
  frame3->Draw();

  TF1 *fPionEt = new TF1("fPionEt","sqrt(x*x+[0]*[0])",0,2);
  fPionEt->SetParameter(0,0.13957);
  fPionEt->Draw("same");
  TF1 *fKaonEt = new TF1("fKaonEt","sqrt(x*x+[0]*[0])",0,2);
  fKaonEt->SetParameter(0,0.493677);
  fKaonEt->Draw("same");
  TF1 *fProtonEt = new TF1("fProtonEt","sqrt(x*x+[0]*[0])-[0]",0,2);
  fProtonEt->SetParameter(0,0.938272);
  fProtonEt->Draw("same");
  TF1 *fAntiProtonEt = new TF1("fAntiProtonEt","sqrt(x*x+[0]*[0])+[0]",0,2);
  fAntiProtonEt->SetParameter(0,0.938272);
  fAntiProtonEt->Draw("same");
  fPionEt->SetLineColor(1);
  fKaonEt->SetLineColor(2);
  fProtonEt->SetLineColor(4);
  fAntiProtonEt->SetLineColor(TColor::kCyan);
  TLegend *leg3 = new  TLegend(0.782258,0.774194,0.925403,0.962366);
  leg3->AddEntry(fPionEt,"#pi");
  leg3->AddEntry(fProtonEt,"p");
  leg3->AddEntry(fAntiProtonEt,"#bar{p}");
  leg3->AddEntry(fKaonEt,"K");
  leg3->SetFillStyle(0);
  leg3->SetFillColor(0);
  leg3->SetBorderSize(0);
  leg3->SetTextSize(0.06);
  leg3->Draw();

  c1->SaveAs("pics/PIDEtweight.eps");
  c2->SaveAs("pics/PIDSpectra.eps");
  c3->SaveAs("pics/PIDEt.eps");


}

 CorrPIDLevyFit.C:1
 CorrPIDLevyFit.C:2
 CorrPIDLevyFit.C:3
 CorrPIDLevyFit.C:4
 CorrPIDLevyFit.C:5
 CorrPIDLevyFit.C:6
 CorrPIDLevyFit.C:7
 CorrPIDLevyFit.C:8
 CorrPIDLevyFit.C:9
 CorrPIDLevyFit.C:10
 CorrPIDLevyFit.C:11
 CorrPIDLevyFit.C:12
 CorrPIDLevyFit.C:13
 CorrPIDLevyFit.C:14
 CorrPIDLevyFit.C:15
 CorrPIDLevyFit.C:16
 CorrPIDLevyFit.C:17
 CorrPIDLevyFit.C:18
 CorrPIDLevyFit.C:19
 CorrPIDLevyFit.C:20
 CorrPIDLevyFit.C:21
 CorrPIDLevyFit.C:22
 CorrPIDLevyFit.C:23
 CorrPIDLevyFit.C:24
 CorrPIDLevyFit.C:25
 CorrPIDLevyFit.C:26
 CorrPIDLevyFit.C:27
 CorrPIDLevyFit.C:28
 CorrPIDLevyFit.C:29
 CorrPIDLevyFit.C:30
 CorrPIDLevyFit.C:31
 CorrPIDLevyFit.C:32
 CorrPIDLevyFit.C:33
 CorrPIDLevyFit.C:34
 CorrPIDLevyFit.C:35
 CorrPIDLevyFit.C:36
 CorrPIDLevyFit.C:37
 CorrPIDLevyFit.C:38
 CorrPIDLevyFit.C:39
 CorrPIDLevyFit.C:40
 CorrPIDLevyFit.C:41
 CorrPIDLevyFit.C:42
 CorrPIDLevyFit.C:43
 CorrPIDLevyFit.C:44
 CorrPIDLevyFit.C:45
 CorrPIDLevyFit.C:46
 CorrPIDLevyFit.C:47
 CorrPIDLevyFit.C:48
 CorrPIDLevyFit.C:49
 CorrPIDLevyFit.C:50
 CorrPIDLevyFit.C:51
 CorrPIDLevyFit.C:52
 CorrPIDLevyFit.C:53
 CorrPIDLevyFit.C:54
 CorrPIDLevyFit.C:55
 CorrPIDLevyFit.C:56
 CorrPIDLevyFit.C:57
 CorrPIDLevyFit.C:58
 CorrPIDLevyFit.C:59
 CorrPIDLevyFit.C:60
 CorrPIDLevyFit.C:61
 CorrPIDLevyFit.C:62
 CorrPIDLevyFit.C:63
 CorrPIDLevyFit.C:64
 CorrPIDLevyFit.C:65
 CorrPIDLevyFit.C:66
 CorrPIDLevyFit.C:67
 CorrPIDLevyFit.C:68
 CorrPIDLevyFit.C:69
 CorrPIDLevyFit.C:70
 CorrPIDLevyFit.C:71
 CorrPIDLevyFit.C:72
 CorrPIDLevyFit.C:73
 CorrPIDLevyFit.C:74
 CorrPIDLevyFit.C:75
 CorrPIDLevyFit.C:76
 CorrPIDLevyFit.C:77
 CorrPIDLevyFit.C:78
 CorrPIDLevyFit.C:79
 CorrPIDLevyFit.C:80
 CorrPIDLevyFit.C:81
 CorrPIDLevyFit.C:82
 CorrPIDLevyFit.C:83
 CorrPIDLevyFit.C:84
 CorrPIDLevyFit.C:85
 CorrPIDLevyFit.C:86
 CorrPIDLevyFit.C:87
 CorrPIDLevyFit.C:88
 CorrPIDLevyFit.C:89
 CorrPIDLevyFit.C:90
 CorrPIDLevyFit.C:91
 CorrPIDLevyFit.C:92
 CorrPIDLevyFit.C:93
 CorrPIDLevyFit.C:94
 CorrPIDLevyFit.C:95
 CorrPIDLevyFit.C:96
 CorrPIDLevyFit.C:97
 CorrPIDLevyFit.C:98
 CorrPIDLevyFit.C:99
 CorrPIDLevyFit.C:100
 CorrPIDLevyFit.C:101
 CorrPIDLevyFit.C:102
 CorrPIDLevyFit.C:103
 CorrPIDLevyFit.C:104
 CorrPIDLevyFit.C:105
 CorrPIDLevyFit.C:106
 CorrPIDLevyFit.C:107
 CorrPIDLevyFit.C:108
 CorrPIDLevyFit.C:109
 CorrPIDLevyFit.C:110
 CorrPIDLevyFit.C:111
 CorrPIDLevyFit.C:112
 CorrPIDLevyFit.C:113
 CorrPIDLevyFit.C:114
 CorrPIDLevyFit.C:115
 CorrPIDLevyFit.C:116
 CorrPIDLevyFit.C:117
 CorrPIDLevyFit.C:118
 CorrPIDLevyFit.C:119
 CorrPIDLevyFit.C:120
 CorrPIDLevyFit.C:121
 CorrPIDLevyFit.C:122
 CorrPIDLevyFit.C:123
 CorrPIDLevyFit.C:124
 CorrPIDLevyFit.C:125
 CorrPIDLevyFit.C:126
 CorrPIDLevyFit.C:127
 CorrPIDLevyFit.C:128
 CorrPIDLevyFit.C:129
 CorrPIDLevyFit.C:130
 CorrPIDLevyFit.C:131
 CorrPIDLevyFit.C:132
 CorrPIDLevyFit.C:133
 CorrPIDLevyFit.C:134
 CorrPIDLevyFit.C:135
 CorrPIDLevyFit.C:136
 CorrPIDLevyFit.C:137
 CorrPIDLevyFit.C:138
 CorrPIDLevyFit.C:139
 CorrPIDLevyFit.C:140
 CorrPIDLevyFit.C:141
 CorrPIDLevyFit.C:142
 CorrPIDLevyFit.C:143
 CorrPIDLevyFit.C:144
 CorrPIDLevyFit.C:145
 CorrPIDLevyFit.C:146
 CorrPIDLevyFit.C:147
 CorrPIDLevyFit.C:148
 CorrPIDLevyFit.C:149
 CorrPIDLevyFit.C:150
 CorrPIDLevyFit.C:151
 CorrPIDLevyFit.C:152
 CorrPIDLevyFit.C:153
 CorrPIDLevyFit.C:154
 CorrPIDLevyFit.C:155
 CorrPIDLevyFit.C:156
 CorrPIDLevyFit.C:157
 CorrPIDLevyFit.C:158
 CorrPIDLevyFit.C:159
 CorrPIDLevyFit.C:160
 CorrPIDLevyFit.C:161
 CorrPIDLevyFit.C:162
 CorrPIDLevyFit.C:163
 CorrPIDLevyFit.C:164
 CorrPIDLevyFit.C:165
 CorrPIDLevyFit.C:166
 CorrPIDLevyFit.C:167
 CorrPIDLevyFit.C:168
 CorrPIDLevyFit.C:169
 CorrPIDLevyFit.C:170
 CorrPIDLevyFit.C:171
 CorrPIDLevyFit.C:172
 CorrPIDLevyFit.C:173
 CorrPIDLevyFit.C:174
 CorrPIDLevyFit.C:175
 CorrPIDLevyFit.C:176
 CorrPIDLevyFit.C:177
 CorrPIDLevyFit.C:178
 CorrPIDLevyFit.C:179
 CorrPIDLevyFit.C:180
 CorrPIDLevyFit.C:181
 CorrPIDLevyFit.C:182
 CorrPIDLevyFit.C:183
 CorrPIDLevyFit.C:184
 CorrPIDLevyFit.C:185
 CorrPIDLevyFit.C:186
 CorrPIDLevyFit.C:187
 CorrPIDLevyFit.C:188
 CorrPIDLevyFit.C:189
 CorrPIDLevyFit.C:190
 CorrPIDLevyFit.C:191
 CorrPIDLevyFit.C:192
 CorrPIDLevyFit.C:193
 CorrPIDLevyFit.C:194
 CorrPIDLevyFit.C:195
 CorrPIDLevyFit.C:196
 CorrPIDLevyFit.C:197
 CorrPIDLevyFit.C:198
 CorrPIDLevyFit.C:199
 CorrPIDLevyFit.C:200
 CorrPIDLevyFit.C:201
 CorrPIDLevyFit.C:202
 CorrPIDLevyFit.C:203
 CorrPIDLevyFit.C:204
 CorrPIDLevyFit.C:205
 CorrPIDLevyFit.C:206
 CorrPIDLevyFit.C:207
 CorrPIDLevyFit.C:208
 CorrPIDLevyFit.C:209
 CorrPIDLevyFit.C:210
 CorrPIDLevyFit.C:211
 CorrPIDLevyFit.C:212
 CorrPIDLevyFit.C:213
 CorrPIDLevyFit.C:214
 CorrPIDLevyFit.C:215
 CorrPIDLevyFit.C:216
 CorrPIDLevyFit.C:217
 CorrPIDLevyFit.C:218
 CorrPIDLevyFit.C:219
 CorrPIDLevyFit.C:220
 CorrPIDLevyFit.C:221
 CorrPIDLevyFit.C:222
 CorrPIDLevyFit.C:223
 CorrPIDLevyFit.C:224
 CorrPIDLevyFit.C:225
 CorrPIDLevyFit.C:226
 CorrPIDLevyFit.C:227
 CorrPIDLevyFit.C:228
 CorrPIDLevyFit.C:229
 CorrPIDLevyFit.C:230
 CorrPIDLevyFit.C:231
 CorrPIDLevyFit.C:232
 CorrPIDLevyFit.C:233
 CorrPIDLevyFit.C:234
 CorrPIDLevyFit.C:235
 CorrPIDLevyFit.C:236
 CorrPIDLevyFit.C:237
 CorrPIDLevyFit.C:238
 CorrPIDLevyFit.C:239
 CorrPIDLevyFit.C:240
 CorrPIDLevyFit.C:241
 CorrPIDLevyFit.C:242
 CorrPIDLevyFit.C:243
 CorrPIDLevyFit.C:244
 CorrPIDLevyFit.C:245
 CorrPIDLevyFit.C:246
 CorrPIDLevyFit.C:247
 CorrPIDLevyFit.C:248
 CorrPIDLevyFit.C:249
 CorrPIDLevyFit.C:250
 CorrPIDLevyFit.C:251
 CorrPIDLevyFit.C:252
 CorrPIDLevyFit.C:253
 CorrPIDLevyFit.C:254
 CorrPIDLevyFit.C:255
 CorrPIDLevyFit.C:256
 CorrPIDLevyFit.C:257
 CorrPIDLevyFit.C:258
 CorrPIDLevyFit.C:259
 CorrPIDLevyFit.C:260
 CorrPIDLevyFit.C:261
 CorrPIDLevyFit.C:262
 CorrPIDLevyFit.C:263
 CorrPIDLevyFit.C:264
 CorrPIDLevyFit.C:265
 CorrPIDLevyFit.C:266
 CorrPIDLevyFit.C:267
 CorrPIDLevyFit.C:268
 CorrPIDLevyFit.C:269
 CorrPIDLevyFit.C:270
 CorrPIDLevyFit.C:271
 CorrPIDLevyFit.C:272
 CorrPIDLevyFit.C:273
 CorrPIDLevyFit.C:274
 CorrPIDLevyFit.C:275
 CorrPIDLevyFit.C:276
 CorrPIDLevyFit.C:277
 CorrPIDLevyFit.C:278
 CorrPIDLevyFit.C:279
 CorrPIDLevyFit.C:280
 CorrPIDLevyFit.C:281
 CorrPIDLevyFit.C:282
 CorrPIDLevyFit.C:283
 CorrPIDLevyFit.C:284
 CorrPIDLevyFit.C:285
 CorrPIDLevyFit.C:286
 CorrPIDLevyFit.C:287
 CorrPIDLevyFit.C:288
 CorrPIDLevyFit.C:289
 CorrPIDLevyFit.C:290
 CorrPIDLevyFit.C:291
 CorrPIDLevyFit.C:292
 CorrPIDLevyFit.C:293
 CorrPIDLevyFit.C:294
 CorrPIDLevyFit.C:295
 CorrPIDLevyFit.C:296
 CorrPIDLevyFit.C:297
 CorrPIDLevyFit.C:298
 CorrPIDLevyFit.C:299
 CorrPIDLevyFit.C:300
 CorrPIDLevyFit.C:301
 CorrPIDLevyFit.C:302
 CorrPIDLevyFit.C:303
 CorrPIDLevyFit.C:304
 CorrPIDLevyFit.C:305
 CorrPIDLevyFit.C:306
 CorrPIDLevyFit.C:307
 CorrPIDLevyFit.C:308
 CorrPIDLevyFit.C:309
 CorrPIDLevyFit.C:310
 CorrPIDLevyFit.C:311
 CorrPIDLevyFit.C:312
 CorrPIDLevyFit.C:313
 CorrPIDLevyFit.C:314
 CorrPIDLevyFit.C:315
 CorrPIDLevyFit.C:316
 CorrPIDLevyFit.C:317
 CorrPIDLevyFit.C:318
 CorrPIDLevyFit.C:319
 CorrPIDLevyFit.C:320
 CorrPIDLevyFit.C:321
 CorrPIDLevyFit.C:322
 CorrPIDLevyFit.C:323
 CorrPIDLevyFit.C:324
 CorrPIDLevyFit.C:325
 CorrPIDLevyFit.C:326
 CorrPIDLevyFit.C:327
 CorrPIDLevyFit.C:328
 CorrPIDLevyFit.C:329
 CorrPIDLevyFit.C:330
 CorrPIDLevyFit.C:331
 CorrPIDLevyFit.C:332
 CorrPIDLevyFit.C:333
 CorrPIDLevyFit.C:334
 CorrPIDLevyFit.C:335
 CorrPIDLevyFit.C:336
 CorrPIDLevyFit.C:337
 CorrPIDLevyFit.C:338
 CorrPIDLevyFit.C:339
 CorrPIDLevyFit.C:340
 CorrPIDLevyFit.C:341
 CorrPIDLevyFit.C:342
 CorrPIDLevyFit.C:343
 CorrPIDLevyFit.C:344
 CorrPIDLevyFit.C:345
 CorrPIDLevyFit.C:346
 CorrPIDLevyFit.C:347
 CorrPIDLevyFit.C:348
 CorrPIDLevyFit.C:349
 CorrPIDLevyFit.C:350
 CorrPIDLevyFit.C:351
 CorrPIDLevyFit.C:352
 CorrPIDLevyFit.C:353
 CorrPIDLevyFit.C:354
 CorrPIDLevyFit.C:355
 CorrPIDLevyFit.C:356
 CorrPIDLevyFit.C:357
 CorrPIDLevyFit.C:358
 CorrPIDLevyFit.C:359
 CorrPIDLevyFit.C:360
 CorrPIDLevyFit.C:361
 CorrPIDLevyFit.C:362
 CorrPIDLevyFit.C:363
 CorrPIDLevyFit.C:364
 CorrPIDLevyFit.C:365
 CorrPIDLevyFit.C:366
 CorrPIDLevyFit.C:367
 CorrPIDLevyFit.C:368
 CorrPIDLevyFit.C:369
 CorrPIDLevyFit.C:370
 CorrPIDLevyFit.C:371
 CorrPIDLevyFit.C:372
 CorrPIDLevyFit.C:373
 CorrPIDLevyFit.C:374
 CorrPIDLevyFit.C:375
 CorrPIDLevyFit.C:376
 CorrPIDLevyFit.C:377
 CorrPIDLevyFit.C:378
 CorrPIDLevyFit.C:379
 CorrPIDLevyFit.C:380
 CorrPIDLevyFit.C:381
 CorrPIDLevyFit.C:382
 CorrPIDLevyFit.C:383
 CorrPIDLevyFit.C:384
 CorrPIDLevyFit.C:385
 CorrPIDLevyFit.C:386
 CorrPIDLevyFit.C:387
 CorrPIDLevyFit.C:388
 CorrPIDLevyFit.C:389
 CorrPIDLevyFit.C:390
 CorrPIDLevyFit.C:391
 CorrPIDLevyFit.C:392
 CorrPIDLevyFit.C:393
 CorrPIDLevyFit.C:394
 CorrPIDLevyFit.C:395
 CorrPIDLevyFit.C:396
 CorrPIDLevyFit.C:397
 CorrPIDLevyFit.C:398
 CorrPIDLevyFit.C:399
 CorrPIDLevyFit.C:400
 CorrPIDLevyFit.C:401
 CorrPIDLevyFit.C:402
 CorrPIDLevyFit.C:403
 CorrPIDLevyFit.C:404
 CorrPIDLevyFit.C:405
 CorrPIDLevyFit.C:406
 CorrPIDLevyFit.C:407
 CorrPIDLevyFit.C:408
 CorrPIDLevyFit.C:409
 CorrPIDLevyFit.C:410
 CorrPIDLevyFit.C:411
 CorrPIDLevyFit.C:412
 CorrPIDLevyFit.C:413
 CorrPIDLevyFit.C:414
 CorrPIDLevyFit.C:415
 CorrPIDLevyFit.C:416
 CorrPIDLevyFit.C:417
 CorrPIDLevyFit.C:418
 CorrPIDLevyFit.C:419
 CorrPIDLevyFit.C:420
 CorrPIDLevyFit.C:421
 CorrPIDLevyFit.C:422
 CorrPIDLevyFit.C:423
 CorrPIDLevyFit.C:424
 CorrPIDLevyFit.C:425
 CorrPIDLevyFit.C:426
 CorrPIDLevyFit.C:427
 CorrPIDLevyFit.C:428
 CorrPIDLevyFit.C:429
 CorrPIDLevyFit.C:430
 CorrPIDLevyFit.C:431
 CorrPIDLevyFit.C:432
 CorrPIDLevyFit.C:433
 CorrPIDLevyFit.C:434
 CorrPIDLevyFit.C:435
 CorrPIDLevyFit.C:436
 CorrPIDLevyFit.C:437
 CorrPIDLevyFit.C:438
 CorrPIDLevyFit.C:439
 CorrPIDLevyFit.C:440
 CorrPIDLevyFit.C:441
 CorrPIDLevyFit.C:442
 CorrPIDLevyFit.C:443
 CorrPIDLevyFit.C:444
 CorrPIDLevyFit.C:445
 CorrPIDLevyFit.C:446
 CorrPIDLevyFit.C:447
 CorrPIDLevyFit.C:448
 CorrPIDLevyFit.C:449
 CorrPIDLevyFit.C:450
 CorrPIDLevyFit.C:451
 CorrPIDLevyFit.C:452
 CorrPIDLevyFit.C:453
 CorrPIDLevyFit.C:454
 CorrPIDLevyFit.C:455
 CorrPIDLevyFit.C:456
 CorrPIDLevyFit.C:457
 CorrPIDLevyFit.C:458
 CorrPIDLevyFit.C:459
 CorrPIDLevyFit.C:460
 CorrPIDLevyFit.C:461
 CorrPIDLevyFit.C:462
 CorrPIDLevyFit.C:463
 CorrPIDLevyFit.C:464
 CorrPIDLevyFit.C:465
 CorrPIDLevyFit.C:466
 CorrPIDLevyFit.C:467
 CorrPIDLevyFit.C:468
 CorrPIDLevyFit.C:469
 CorrPIDLevyFit.C:470
 CorrPIDLevyFit.C:471
 CorrPIDLevyFit.C:472
 CorrPIDLevyFit.C:473
 CorrPIDLevyFit.C:474
 CorrPIDLevyFit.C:475
 CorrPIDLevyFit.C:476
 CorrPIDLevyFit.C:477
 CorrPIDLevyFit.C:478
 CorrPIDLevyFit.C:479
 CorrPIDLevyFit.C:480
 CorrPIDLevyFit.C:481
 CorrPIDLevyFit.C:482
 CorrPIDLevyFit.C:483
 CorrPIDLevyFit.C:484
 CorrPIDLevyFit.C:485
 CorrPIDLevyFit.C:486
 CorrPIDLevyFit.C:487
 CorrPIDLevyFit.C:488
 CorrPIDLevyFit.C:489
 CorrPIDLevyFit.C:490
 CorrPIDLevyFit.C:491
 CorrPIDLevyFit.C:492
 CorrPIDLevyFit.C:493
 CorrPIDLevyFit.C:494
 CorrPIDLevyFit.C:495
 CorrPIDLevyFit.C:496
 CorrPIDLevyFit.C:497
 CorrPIDLevyFit.C:498
 CorrPIDLevyFit.C:499
 CorrPIDLevyFit.C:500
 CorrPIDLevyFit.C:501
 CorrPIDLevyFit.C:502
 CorrPIDLevyFit.C:503
 CorrPIDLevyFit.C:504
 CorrPIDLevyFit.C:505
 CorrPIDLevyFit.C:506
 CorrPIDLevyFit.C:507
 CorrPIDLevyFit.C:508
 CorrPIDLevyFit.C:509
 CorrPIDLevyFit.C:510
 CorrPIDLevyFit.C:511
 CorrPIDLevyFit.C:512
 CorrPIDLevyFit.C:513
 CorrPIDLevyFit.C:514
 CorrPIDLevyFit.C:515
 CorrPIDLevyFit.C:516
 CorrPIDLevyFit.C:517
 CorrPIDLevyFit.C:518
 CorrPIDLevyFit.C:519
 CorrPIDLevyFit.C:520
 CorrPIDLevyFit.C:521
 CorrPIDLevyFit.C:522
 CorrPIDLevyFit.C:523
 CorrPIDLevyFit.C:524
 CorrPIDLevyFit.C:525
 CorrPIDLevyFit.C:526
 CorrPIDLevyFit.C:527
 CorrPIDLevyFit.C:528
 CorrPIDLevyFit.C:529
 CorrPIDLevyFit.C:530
 CorrPIDLevyFit.C:531
 CorrPIDLevyFit.C:532
 CorrPIDLevyFit.C:533
 CorrPIDLevyFit.C:534
 CorrPIDLevyFit.C:535
 CorrPIDLevyFit.C:536
 CorrPIDLevyFit.C:537
 CorrPIDLevyFit.C:538
 CorrPIDLevyFit.C:539
 CorrPIDLevyFit.C:540
 CorrPIDLevyFit.C:541
 CorrPIDLevyFit.C:542
 CorrPIDLevyFit.C:543
 CorrPIDLevyFit.C:544
 CorrPIDLevyFit.C:545
 CorrPIDLevyFit.C:546
 CorrPIDLevyFit.C:547
 CorrPIDLevyFit.C:548
 CorrPIDLevyFit.C:549
 CorrPIDLevyFit.C:550
 CorrPIDLevyFit.C:551
 CorrPIDLevyFit.C:552
 CorrPIDLevyFit.C:553
 CorrPIDLevyFit.C:554
 CorrPIDLevyFit.C:555
 CorrPIDLevyFit.C:556
 CorrPIDLevyFit.C:557
 CorrPIDLevyFit.C:558
 CorrPIDLevyFit.C:559
 CorrPIDLevyFit.C:560
 CorrPIDLevyFit.C:561
 CorrPIDLevyFit.C:562
 CorrPIDLevyFit.C:563
 CorrPIDLevyFit.C:564
 CorrPIDLevyFit.C:565
 CorrPIDLevyFit.C:566
 CorrPIDLevyFit.C:567
 CorrPIDLevyFit.C:568
 CorrPIDLevyFit.C:569
 CorrPIDLevyFit.C:570
 CorrPIDLevyFit.C:571
 CorrPIDLevyFit.C:572
 CorrPIDLevyFit.C:573
 CorrPIDLevyFit.C:574
 CorrPIDLevyFit.C:575
 CorrPIDLevyFit.C:576
 CorrPIDLevyFit.C:577
 CorrPIDLevyFit.C:578
 CorrPIDLevyFit.C:579
 CorrPIDLevyFit.C:580
 CorrPIDLevyFit.C:581
 CorrPIDLevyFit.C:582
 CorrPIDLevyFit.C:583
 CorrPIDLevyFit.C:584
 CorrPIDLevyFit.C:585
 CorrPIDLevyFit.C:586