]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Add plotting macros
authordgangadh <dhevan.raja.gangadharan@cern.ch>
Thu, 17 Jul 2014 13:34:34 +0000 (15:34 +0200)
committerdgangadh <dhevan.raja.gangadharan@cern.ch>
Thu, 17 Jul 2014 13:34:34 +0000 (15:34 +0200)
PWGCF/FEMTOSCOPY/macros/Plot_FourPion.C [new file with mode: 0755]
PWGCF/FEMTOSCOPY/macros/Plot_plotsFourPion.C [new file with mode: 0755]

diff --git a/PWGCF/FEMTOSCOPY/macros/Plot_FourPion.C b/PWGCF/FEMTOSCOPY/macros/Plot_FourPion.C
new file mode 100755 (executable)
index 0000000..cb4024d
--- /dev/null
@@ -0,0 +1,1664 @@
+#include <math.h>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <Riostream.h>
+#include <assert.h>
+
+#include "TVector2.h"
+#include "TFile.h"
+#include "TString.h"
+#include "TF1.h"
+#include "TF3.h"
+#include "TH1.h"
+#include "TH2.h"
+#include "TH3.h"
+#include "TProfile.h"
+#include "TProfile2D.h"
+#include "TMath.h"
+#include "TText.h"
+#include "TRandom3.h"
+#include "TArray.h"
+#include "TLegend.h"
+#include "TStyle.h"
+#include "TMinuit.h"
+#include "TCanvas.h"
+#include "TLatex.h"
+#include "TPaveStats.h"
+#include "TASImage.h"
+
+#define BohrR 1963.6885 // Bohr Radius for pions
+#define FmToGeV 0.19733 // conversion to fm
+#define PI 3.1415926
+#define masspiC 0.1395702 // pi+ mass (GeV/c^2)
+
+using namespace std;
+// 0(standard), 1(fcSq=0.65), 2(fcSq=0.75), 3(B minus), 4(B plus), 
+// 5(Linear instead of Cubic,also fc^2=0.75), 6(10h), 7(MRC 10% increase), 8(MuonCorr 92% pion-pair purity)
+int FileSetting=0;
+//
+bool MCcase_def=kFALSE;// MC data?
+//
+int Mbin_def=0;// 0-9: centrality bin in widths of 5%
+bool SameCharge_def=0;// same-charge?
+int CHARGE_def=-1;// -1 or +1: + or - pions for same-charge case, --+ or -++,  ---+ or -+++
+int MixedCharge4pionType_def = 1;// 1(---+) or 2(--++)
+//
+int EDbin_def=0;// 0 or 1: Kt3 bin
+int TPNbin=3;// TPN bin for r3 and r4
+int Gbin = int( (0) /2. ) + 55;// +5 (Rcoh=0), +25 (Rcoh=Rch) or +55 for extended G range 
+int Ktbin_def=1;// 1(0.2-0.3),..., 6(0.7-0.8), 10 = Full Range
+//
+bool MRC=1;// Momentum Resolution Corrections?
+bool MuonCorrection=1;// correct for Muons?
+bool IncludeEW_def=kTRUE;// Include EdgeWorth coefficients?
+//
+int f_choice=0;// 0(Core/Halo), 1(40fm), 2(70fm), 3(100fm)
+//
+//
+bool SaveToFile_def=kFALSE;// Save outputs to file?
+bool GeneratedSignal=kFALSE;// Was the QS+FSI signal generated in MC? 
+//
+//
+//
+//
+
+bool PbPbcase=kTRUE;// always kTRUE
+int fFSIindex=0;
+int Ktlowbin;
+int Kthighbin;
+float TwoFrac;// Lambda parameter
+float OneFrac;// Lambda^{1/2}
+float ThreeFrac;// Lambda^{3/2}
+float FourFrac;// lambda^{4/2}
+double Qcut_pp = 0.6;// 0.6
+double Qcut_PbPb = 0.1;
+double NormQcutLow_pp = 1.0;
+double NormQcutHigh_pp = 1.5;
+double NormQcutLow_PbPb = .15;
+double NormQcutHigh_PbPb = .2;// was .175
+
+int ThreeParticleRebin=2;
+int FourParticleRebin=3;
+
+int RbinMRC;
+
+TH1D *fFSIss[12];
+TH1D *fFSIos[12];
+
+void SetFSICorrelations();
+void SetFSIindex(Float_t);
+Float_t FSICorrelation(Int_t, Int_t, Float_t);
+void SetMuonCorrections();
+void SetMomResCorrections();
+double Gamov(int, double);
+double cubicInterpolate(double[4], double);
+double bicubicInterpolate(double[4][4], double, double);
+double tricubicInterpolate(double[4][4][4], double, double, double);
+//
+float fact(float);
+
+
+TH1D *MRC_SC_2[2];
+TH1D *MRC_MC_2[2];
+TH1D *MRC_SC_3[3];
+TH1D *MRC_MC_3[4];
+TH1D *MRC_SC_4[5];
+TH1D *MRC_MC1_4[6];
+TH1D *MRC_MC2_4[6];
+
+
+double AvgQinvSS[30];
+double AvgQinvOS[30];
+double BinCentersQ4[20];
+
+//
+TH1D *C2muonCorrectionSC;
+TH1D *C2muonCorrectionMC;
+TH1D *WeightmuonCorrection;
+TH1D *C3muonCorrectionSC[2];
+TH1D *C3muonCorrectionMC[3];
+TH1D *C4muonCorrectionSC[4];
+TH1D *C4muonCorrectionMC1[5];
+TH1D *C4muonCorrectionMC2[5];
+
+
+void Plot_FourPion(bool SaveToFile=SaveToFile_def, bool MCcase=MCcase_def, bool SameCharge=SameCharge_def, int MixedCharge4pionType=MixedCharge4pionType_def, int EDbin=EDbin_def, int CHARGE=CHARGE_def, int Mbin=Mbin_def, int Ktbin=Ktbin_def){
+  
+  EDbin_def=EDbin;
+  SaveToFile_def=SaveToFile;
+  MCcase_def=MCcase;
+  CHARGE_def=CHARGE;
+  SameCharge_def=SameCharge;// 3-pion same-charge
+  MixedCharge4pionType_def=MixedCharge4pionType;
+  Mbin_def=Mbin;
+  Ktbin_def=Ktbin;
+  //
+  Ktlowbin=(Ktbin)*2+3;// kt bins are 0.5 GeV/c wide (0-0.5, 0.5-1.0 ...)
+  Kthighbin=(Ktbin)*2+4;
+  
+  //
+  if(FileSetting==1) TwoFrac=0.65;
+  else if(FileSetting==2 || FileSetting==5) TwoFrac=0.75;
+  else TwoFrac=0.7;
+
+  OneFrac = sqrt(TwoFrac);
+  ThreeFrac = pow(TwoFrac, 1.5);
+  FourFrac = pow(TwoFrac, 2.);
+
+  cout<<"Mbin = "<<Mbin<<"   KT3 = "<<EDbin<<"   Kt = "<<Ktbin<<"   SameCharge = "<<SameCharge<<endl;
+  if(!SameCharge) cout<<"4-pion MixedCharge type = "<<MixedCharge4pionType<<endl;
+  
+  if(Mbin==0) {RbinMRC=10;}
+  else if(Mbin==1) {RbinMRC=9;}
+  else if(Mbin<=3) {RbinMRC=8;}
+  else if(Mbin<=5) {RbinMRC=7;}
+  else {RbinMRC=6;}
+
+
+
+  float Cutoff_FullWeight_Q3[10]={0.065, 0.065, 0.075, 0.075, 0.075, 0.075, 0.085, 0.085, 0.085, 0.085};
+  float Cutoff_FullWeight_Q4[10]={0.115, 0.115, 0.115, 0.130, 0.130, 0.130, 0.145, 0.145, 0.145, 0.145};
+
+  //
+  // avg Qinv within the 5 MeV bins (0-5, 5-10,...) for true bin mean values.  From unsmeared HIJING 0-5% with input signal
+  double AvgQinvSS_temp[30]={0.00421164, 0.00796583, 0.0128473, 0.0178262, 0.0228416, 0.0276507, 0.0325368, 0.0376114, 0.0424707, 0.0476274, 0.0526015, 0.0575645, 0.0625478, 0.0675416, 0.0725359, 0.0775219, 0.0825521, 0.0875211, 0.0925303, 0.0975319, 0.102544, 0.10753, 0.112499, 0.117545, 0.122522, 0.127522, 0.132499, 0.137514, 0.142495, 0.147521};
+  double AvgQinvOS_temp[30]={0.00352789, 0.00797596, 0.0128895, 0.0177198, 0.0226397, 0.0276331, 0.0326309, 0.0376471, 0.0426217, 0.047567, 0.0525659, 0.0575472, 0.0625886, 0.0675261, 0.0725543, 0.077564, 0.0825617, 0.0875465, 0.092539, 0.0975348, 0.102529, 0.107527, 0.112506, 0.117531, 0.122536, 0.1275, 0.132508, 0.137508, 0.14251, 0.147511};
+  for(int i=0; i<30; i++){
+    AvgQinvSS[i] = AvgQinvSS_temp[i];
+    AvgQinvOS[i] = AvgQinvOS_temp[i];
+  }
+
+  
+  TH2D *TwoParticle_2d[2][2][2];// ch1,ch2,term
+  TH1D *TwoParticle[2][2][2];// ch1,ch2,term
+  double norm_2[2]={0};
+  //
+  TH1D *ThreeParticle[2][2][2][5];// ch1,ch2,ch3,term
+  TProfile *K3avg[2][2][2][4];
+  TH2D *TPFullWeight_ThreeParticle_2D[2];// charge
+  TH2D *TPNegFullWeight_ThreeParticle_2D[2];// charge
+  TH1D *TPN_ThreeParticle[2];// charge
+  TH1D *TPFullWeight_ThreeParticle[2];// charge
+  TH1D *TPNegFullWeight_ThreeParticle[2];// charge
+  double norm_3[5]={0};
+  //
+  TH1D *FourParticle[2][2][2][2][13];// ch1,ch2,ch3,ch4,term
+  TProfile *K4avg[2][2][2][2][12];
+  TH2D *TPFullWeight_FourParticle_2D[2];// charge
+  TH2D *TPNegFullWeight_FourParticle_2D[2];// charge
+  TH1D *TPFullWeight_FourParticle[2];// charge
+  TH1D *TPNegFullWeight_FourParticle[2];// charge
+  TH1D *TPN_FourParticle[2];// charge
+  double norm_4[13]={0};
+  
+
+  gStyle->SetOptStat(0);
+  gStyle->SetOptDate(0);
+  gStyle->SetOptFit(0111);
+
+  TFile *_file0;
+  if(PbPbcase){// PbPb
+    if(MCcase) {
+      if(Mbin<=1){
+       _file0 = new TFile("Results/PDC_12a17a.root","READ");
+      }
+    }else{
+      if(FileSetting==0) _file0 = new TFile("Results/PDC_11h_extendedGweights.root","READ");
+      if(FileSetting==5) _file0 = new TFile("Results/PDC_11h_Cubic_Linear.root","READ");
+      if(FileSetting==1 || FileSetting==2) _file0 = new TFile("Results/PDC_11h_Lam0p65_Lam0p75.root","READ");
+      if(FileSetting==3) _file0 = new TFile("Results/PDC_11h_Cubic_Linear_Bminus.root","READ");
+      if(FileSetting==4) _file0 = new TFile("Results/PDC_11h_Cubic_Linear_Bplus.root","READ");
+      if(FileSetting==6) _file0 = new TFile("Results/PDC_10h_Cubic_Linear.root","READ");
+      if(FileSetting==7 || FileSetting==8) _file0 = new TFile("Results/PDC_11h_MRC10percIncrease_Muon92percent.root","READ");
+    }
+  }else{// pp
+    cout<<"pp not currently supported"<<endl;
+    return;
+  }
+  
+  SetFSIindex(10.);
+  SetFSICorrelations();
+  SetMomResCorrections();
+  SetMuonCorrections();
+  //
+  /////////////////////////////////////////////////////////
+  
+
+  double NormQcutLow;
+  double NormQcutHigh;
+  if(PbPbcase) {
+    NormQcutLow = NormQcutLow_PbPb;
+    NormQcutHigh = NormQcutHigh_PbPb;
+  }else {
+    NormQcutLow = NormQcutLow_pp;
+    NormQcutHigh = NormQcutHigh_pp;
+  }
+
+  TList *MyList;
+  if(!MCcase){
+    TDirectoryFile *tdir = (TDirectoryFile*)_file0->Get("PWGCF.outputFourPionAnalysis.root");
+    if(FileSetting==2 || FileSetting==5 || FileSetting==8) MyList=(TList*)tdir->Get("FourPionOutput_2");
+    else MyList=(TList*)tdir->Get("FourPionOutput_1");
+    //MyList=(TList*)_file0->Get("MyList");
+  }else{
+    MyList=(TList*)_file0->Get("MyList");
+  }
+  _file0->Close();
+
+  TH1D *Events = (TH1D*)MyList->FindObject("fEvents2");
+  //
+
+  cout<<"#Events = "<<Events->Integral(Mbin+1,Mbin+1)<<endl;
+
+  
+  
+  ///////////////////////////////////
+  // Get Histograms
+  
+  // 2-particle
+  for(int c1=0; c1<2; c1++){
+    for(int c2=0; c2<2; c2++){
+      for(int term=0; term<2; term++){
+       
+       TString *name2 = new TString("TwoParticle_Charge1_");
+       *name2 += c1;
+       name2->Append("_Charge2_");
+       *name2 += c2;
+       name2->Append("_M_");
+       *name2 += Mbin;
+       name2->Append("_ED_");
+       *name2 += 0;// EDbin
+       name2->Append("_Term_");
+       *name2 += term+1;
+       
+       if( (c1+c2)==1 ) {if(c1!=0) continue;}// skip degenerate histogram
+       
+       TwoParticle_2d[c1][c2][term] = (TH2D*)MyList->FindObject(name2->Data());
+       TwoParticle_2d[c1][c2][term]->Sumw2();
+       TString *proname = new TString(name2->Data());
+       proname->Append("_pro");
+       
+       if(Ktbin==10) {Ktlowbin=1; Kthighbin=TwoParticle_2d[c1][c2][term]->GetNbinsX();}
+       TwoParticle[c1][c2][term] = (TH1D*)TwoParticle_2d[c1][c2][term]->ProjectionY(proname->Data(),Ktlowbin,Kthighbin);// bins:5-6 (kt:0.2-0.3)
+       
+       norm_2[term] = TwoParticle[c1][c2][term]->Integral(TwoParticle[c1][c2][term]->GetXaxis()->FindBin(NormQcutLow),TwoParticle[c1][c2][term]->GetXaxis()->FindBin(NormQcutHigh));
+       //if(c1==c2) cout<<"2-pion norms  "<<norm_2[term]<<endl;
+       TwoParticle[c1][c2][term]->Scale(norm_2[0]/norm_2[term]);
+       
+       TwoParticle[c1][c2][term]->SetMarkerStyle(20);
+       TwoParticle[c1][c2][term]->GetXaxis()->SetTitle("q_{inv} (GeV/c)");
+       TwoParticle[c1][c2][term]->GetYaxis()->SetTitle("C_{2}");
+       TwoParticle[c1][c2][term]->SetTitle("");
+       
+      }// term
+      
+    
+      // 3-particle
+      for(int c3=0; c3<2; c3++){
+       for(int term=0; term<5; term++){
+          
+         TString *name3 = new TString("ThreeParticle_Charge1_");
+         *name3 += c1;
+         name3->Append("_Charge2_");
+         *name3 += c2;
+         name3->Append("_Charge3_");
+         *name3 += c3;
+         name3->Append("_M_");
+         *name3 += Mbin;
+         name3->Append("_ED_");
+         *name3 += EDbin;
+         name3->Append("_Term_");
+         *name3 += term+1;
+         
+         TString *nameNorm3=new TString(name3->Data());
+         nameNorm3->Append("_Norm");
+         //
+         TString *nameK3=new TString(name3->Data());
+         nameK3->Append("_Kfactor");
+         //
+         TString *nameTPN3=new TString(name3->Data());
+         nameTPN3->Append("_TwoPartNorm");
+         //
+         TString *nameNegTPN3=new TString(name3->Data());
+         nameNegTPN3->Append("_TwoPartNegNorm");
+         //
+         name3->Append("_1D");
+         
+         ///////////////////////////////////////
+         // skip degenerate histograms
+         if( (c1+c2+c3)==1) {if(c1!=0 || c2!=0 || c3!=1) continue;}
+         if( (c1+c2+c3)==2) {if(c1!=0) continue;}
+         ////////////////////////////////////////
+         
+         norm_3[term] = ((TH1D*)MyList->FindObject(nameNorm3->Data()))->Integral();
+         ThreeParticle[c1][c2][c3][term] = (TH1D*)MyList->FindObject(name3->Data());
+         ThreeParticle[c1][c2][c3][term]->Sumw2();
+         //if(c1==c2 && c1==c3) cout<<"3-pion norms  "<<norm_3[term]<<endl;
+         ThreeParticle[c1][c2][c3][term]->Scale(norm_3[0]/norm_3[term]);
+         ThreeParticle[c1][c2][c3][term]->GetXaxis()->SetTitle("Q_{3} (GeV/c)");
+         ThreeParticle[c1][c2][c3][term]->GetYaxis()->SetTitle("C_{3}");
+         ThreeParticle[c1][c2][c3][term]->SetMarkerStyle(20);
+         ThreeParticle[c1][c2][c3][term]->SetTitle("");
+         //
+         ThreeParticle[c1][c2][c3][term]->Rebin(ThreeParticleRebin);
+         
+         //
+         if(term<4){
+           K3avg[c1][c2][c3][term] = (TProfile*)MyList->FindObject(nameK3->Data());
+           K3avg[c1][c2][c3][term]->Rebin(ThreeParticleRebin);
+         }
+         //
+         if(term==4 && c1==c2 && c1==c3){
+           TPFullWeight_ThreeParticle_2D[c1] = (TH2D*)MyList->FindObject(nameTPN3->Data());
+           TPFullWeight_ThreeParticle_2D[c1]->Scale(norm_3[0]/norm_3[term]);
+           TPFullWeight_ThreeParticle_2D[c1]->RebinY(ThreeParticleRebin);
+           //
+           TPNegFullWeight_ThreeParticle_2D[c1] = (TH2D*)MyList->FindObject(nameNegTPN3->Data());
+           TPNegFullWeight_ThreeParticle_2D[c1]->Scale(norm_3[0]/norm_3[term]);
+           TPNegFullWeight_ThreeParticle_2D[c1]->RebinY(ThreeParticleRebin);
+           //
+           for(int binx=1; binx<=TPFullWeight_ThreeParticle_2D[c1]->GetNbinsX(); binx++) {
+             for(int biny=1; biny<=TPFullWeight_ThreeParticle_2D[c1]->GetNbinsY(); biny++) {
+               TPFullWeight_ThreeParticle_2D[c1]->SetBinError(binx, biny, 0);
+             }
+           }
+           TString *proName=new TString(nameTPN3->Data()); TString *proNameNeg=new TString(nameNegTPN3->Data());
+           proName->Append("_pro");  proNameNeg->Append("_pro");
+           TPN_ThreeParticle[c1] = (TH1D*)TPFullWeight_ThreeParticle_2D[c1]->ProjectionY(proName->Data(), TPNbin, TPNbin);
+           //
+           proName->Append("_FullWeight"); proNameNeg->Append("_FullWeight");
+           TPFullWeight_ThreeParticle[c1] = (TH1D*)TPFullWeight_ThreeParticle_2D[c1]->ProjectionY(proName->Data(), Gbin, Gbin);
+           TPNegFullWeight_ThreeParticle[c1] = (TH1D*)TPNegFullWeight_ThreeParticle_2D[c1]->ProjectionY(proNameNeg->Data(), Gbin, Gbin);
+           proName->Append("_FullWeightDen"); proNameNeg->Append("_FullWeightDen");
+           TH1D *tempDen = (TH1D*)TPFullWeight_ThreeParticle_2D[c1]->ProjectionY(proName->Data(), 4, 4);
+           TH1D *tempDenNeg = (TH1D*)TPNegFullWeight_ThreeParticle_2D[c1]->ProjectionY(proNameNeg->Data(), 4, 4);
+           // Add Pos with Neg weights
+           tempDen->Add(tempDenNeg);
+           TPFullWeight_ThreeParticle[c1]->Add(TPNegFullWeight_ThreeParticle[c1]);
+           //
+           TPFullWeight_ThreeParticle[c1]->Add(tempDen);
+           TPFullWeight_ThreeParticle[c1]->Divide(tempDen);
+           TPFullWeight_ThreeParticle[c1]->SetLineColor(1);
+           //
+         }
+
+       }// term 3-particle
+
+       
+       // 4-particle
+       for(int c4=0; c4<2; c4++){
+         for(int term=0; term<13; term++){
+           
+           TString *name4 = new TString("FourParticle_Charge1_");
+           *name4 += c1;
+           name4->Append("_Charge2_");
+           *name4 += c2;
+           name4->Append("_Charge3_");
+           *name4 += c3;
+           name4->Append("_Charge4_");
+           *name4 += c4;
+           name4->Append("_M_");
+           *name4 += Mbin;
+           name4->Append("_ED_");
+           *name4 += EDbin;
+           name4->Append("_Term_");
+           *name4 += term+1;
+           
+           TString *nameNorm4=new TString(name4->Data());
+           nameNorm4->Append("_Norm");
+           //
+           TString *nameK4=new TString(name4->Data());
+           nameK4->Append("_Kfactor");
+           //
+           TString *nameTPN4=new TString(name4->Data());
+           nameTPN4->Append("_TwoPartNorm");
+           //
+           TString *nameNegTPN4=new TString(name4->Data());
+           nameNegTPN4->Append("_TwoPartNegNorm");
+           //
+           name4->Append("_1D");
+           ///////////////////////////////////////
+           // skip degenerate histograms
+           if( (c1+c2+c3+c4)==1) {if(c4!=1) continue;}
+           if( (c1+c2+c3+c4)==2) {if(c3+c4!=2) continue;}
+           if( (c1+c2+c3+c4)==3) {if(c1!=0) continue;}
+           /////////////////////////////////////////
+           norm_4[term] = ((TH1D*)MyList->FindObject(nameNorm4->Data()))->Integral();
+           //if( (c1+c2+c3+c4)==4) cout<<"4-pion norms  "<<norm_4[term]<<endl;
+           if(norm_4[term] > 0){
+             FourParticle[c1][c2][c3][c4][term] = (TH1D*)MyList->FindObject(name4->Data());
+             FourParticle[c1][c2][c3][c4][term]->Sumw2();
+             FourParticle[c1][c2][c3][c4][term]->Scale(norm_4[0]/norm_4[term]);
+             FourParticle[c1][c2][c3][c4][term]->GetXaxis()->SetTitle("Q_{4} (GeV/c)");
+             FourParticle[c1][c2][c3][c4][term]->GetYaxis()->SetTitle("C_{4}");
+             FourParticle[c1][c2][c3][c4][term]->SetMarkerStyle(20);
+             FourParticle[c1][c2][c3][c4][term]->SetTitle("");
+             //
+             FourParticle[c1][c2][c3][c4][term]->Rebin(FourParticleRebin);
+             
+           }else{
+             cout<<"normalization = 0."<<endl;
+           }         
+           if(term<12){
+             K4avg[c1][c2][c3][c4][term] = (TProfile*)MyList->FindObject(nameK4->Data());
+             K4avg[c1][c2][c3][c4][term]->Rebin(FourParticleRebin);
+           }
+           if(term==12 && c1==c2 && c1==c3 && c1==c4){
+            
+             TPFullWeight_FourParticle_2D[c1] = (TH2D*)MyList->FindObject(nameTPN4->Data());
+             TPFullWeight_FourParticle_2D[c1]->Scale(norm_4[0]/norm_4[term]);
+             TPFullWeight_FourParticle_2D[c1]->RebinY(FourParticleRebin);
+             //
+             TPNegFullWeight_FourParticle_2D[c1] = (TH2D*)MyList->FindObject(nameNegTPN4->Data());
+             TPNegFullWeight_FourParticle_2D[c1]->Scale(norm_4[0]/norm_4[term]);
+             TPNegFullWeight_FourParticle_2D[c1]->RebinY(FourParticleRebin);
+             //
+             for(int binx=1; binx<=TPFullWeight_FourParticle_2D[c1]->GetNbinsX(); binx++) {
+               for(int biny=1; biny<=TPFullWeight_FourParticle_2D[c1]->GetNbinsY(); biny++) {
+                 TPFullWeight_FourParticle_2D[c1]->SetBinError(binx, biny, 0);
+               }
+             }
+             TString *proName=new TString(nameTPN4->Data()); TString *proNegName=new TString(nameNegTPN4->Data());
+             proName->Append("_pro"); proNegName->Append("_pro"); 
+             TPN_FourParticle[c1] = (TH1D*)TPFullWeight_FourParticle_2D[c1]->ProjectionY(proName->Data(), TPNbin, TPNbin);
+             //
+             proName->Append("_FullWeight"); proNegName->Append("_FullWeight");
+             TPFullWeight_FourParticle[c1] = (TH1D*)TPFullWeight_FourParticle_2D[c1]->ProjectionY(proName->Data(), Gbin, Gbin);
+             TPNegFullWeight_FourParticle[c1] = (TH1D*)TPNegFullWeight_FourParticle_2D[c1]->ProjectionY(proNegName->Data(), Gbin, Gbin);
+             proName->Append("_FullWeightDen"); proNegName->Append("_FullWeightDen");
+             TH1D *tempDen = (TH1D*)TPFullWeight_FourParticle_2D[c1]->ProjectionY(proName->Data(), 4, 4);
+             TH1D *tempDenNeg = (TH1D*)TPNegFullWeight_FourParticle_2D[c1]->ProjectionY(proNegName->Data(), 4, 4);
+             //
+             // Add Pos and Neg Weights
+             tempDen->Add(tempDenNeg);
+             TPFullWeight_FourParticle[c1]->Add(TPNegFullWeight_FourParticle[c1]);
+             //
+             TPFullWeight_FourParticle[c1]->Add(tempDen);
+             TPFullWeight_FourParticle[c1]->Divide(tempDen);
+             TPFullWeight_FourParticle[c1]->SetLineColor(1);
+             /*TString *ErrName=new TString(nameTPN4->Data());
+             ErrName->Append("Err");
+             TH2D *temperr2D = (TH2D*)MyList->FindObject(ErrName->Data());
+             TH1D *temperr = (TH1D*)temperr2D->ProjectionY("tesst",4,4);
+             temperr->Rebin(FourParticleRebin);
+             cout.precision(8);
+             cout<<temperr->GetBinContent(3)<<endl;
+             cout<<(temperr->GetBinContent(5) / tempDen->GetBinContent(5))<<"  "<<TPFullWeight_FourParticle[c1]->GetBinContent(5)<<endl;
+             */
+           }
+         }// term 4-particle
+         
+       }// c4
+      }// c3
+    }// c2
+  }// c1
+    
+  TH1D *fTPNRejects3pion = (TH1D*)MyList->FindObject("fTPNRejects3pion2");
+  TH1D *fTPNRejects4pion1 = (TH1D*)MyList->FindObject("fTPNRejects4pion1");
+  cout<<"Done getting Histograms"<<endl;
+  
+  TF1 *Unity=new TF1("Unity","1",0,100);
+  Unity->SetLineStyle(2);
+
+
+  int ch1_2=0,ch2_2=0;
+  int ch1_3=0,ch2_3=0,ch3_3=0;
+  int ch1_4=0,ch2_4=0,ch3_4=0,ch4_4=0;
+  
+  if(SameCharge && CHARGE==+1) {ch1_2=1; ch2_2=1;   ch1_3=1; ch2_3=1; ch3_3=1;   ch1_4=1; ch2_4=1; ch3_4=1; ch4_4=1;}
+  if(!SameCharge){
+    ch1_2=0; ch2_2=1;
+    //
+    if(CHARGE==-1) { ch1_3=0; ch2_3=0; ch3_3=1; }
+    else { ch1_3=0; ch2_3=1; ch3_3=1; }
+    //
+    if(CHARGE==-1 && MixedCharge4pionType==1) {ch1_4=0; ch2_4=0; ch3_4=0; ch4_4=1;}
+    if(CHARGE==+1 && MixedCharge4pionType==1) {ch1_4=0; ch2_4=1; ch3_4=1; ch4_4=1;}
+    if(MixedCharge4pionType==2) {ch1_4=0; ch2_4=0; ch3_4=1; ch4_4=1;}
+  }
+  
+  ///////////////////////////////////////////////////////////
+  // 2-pion section
+  cout<<"2-pion section"<<endl;
+  
+  TCanvas *can1 = new TCanvas("can1", "can1",11,53,700,500);
+  can1->SetHighLightColor(2);
+  can1->Range(-0.7838115,-1.033258,0.7838115,1.033258);
+  gStyle->SetOptFit(0111);
+  can1->SetFillColor(10);
+  can1->SetBorderMode(0);
+  can1->SetBorderSize(2);
+  can1->SetGridx();
+  can1->SetGridy();
+  can1->SetFrameFillColor(0);
+  can1->SetFrameBorderMode(0);
+  can1->SetFrameBorderMode(0);
+  gPad->SetRightMargin(0.02); gPad->SetTopMargin(0.02);
+
+  TLegend *legend1 = new TLegend(.6,.67,.87,.87,NULL,"brNDC");
+  legend1->SetBorderSize(1);
+  legend1->SetTextSize(.04);// small .03; large .036 
+  legend1->SetFillColor(0);
+  
+  
+  TH1D *TERM1_2=(TH1D*)TwoParticle[ch1_2][ch2_2][0]->Clone();
+  TH1D *TERM2_2=(TH1D*)TwoParticle[ch1_2][ch2_2][1]->Clone();
+  //
+  if(SameCharge){
+    TERM1_2->Multiply(MRC_SC_2[0]);
+    TERM2_2->Multiply(MRC_SC_2[1]);
+  }else {
+    TERM1_2->Multiply(MRC_MC_2[0]);
+    TERM2_2->Multiply(MRC_MC_2[1]);
+  }
+  TH1D *C2=(TH1D*)TERM1_2->Clone();
+  C2->Divide(TERM2_2);
+  C2->GetXaxis()->SetRangeUser(0,0.1);
+  C2->SetMinimum(0.98); C2->SetMaximum(1.8);
+  C2->Draw();
+
+  TH1D *C2QS=(TH1D*)TERM1_2->Clone();
+  C2QS->Add(TERM2_2, -(1-TwoFrac));
+  C2QS->Scale(1/TwoFrac);
+  for(int bin=1; bin<=C2QS->GetNbinsX(); bin++) {
+    Float_t K2 = FSICorrelation(ch1_2, ch2_2, C2QS->GetXaxis()->GetBinCenter(bin));
+    C2QS->SetBinContent(bin, C2QS->GetBinContent(bin)/K2);
+    C2QS->SetBinError(bin, C2QS->GetBinError(bin)/K2);
+  }
+  C2QS->Divide(TERM2_2);
+  if(SameCharge && MuonCorrection) C2QS->Multiply(C2muonCorrectionSC);
+  if(!SameCharge && MuonCorrection) C2QS->Multiply(C2muonCorrectionMC);
+  C2QS->SetMarkerColor(2);
+  C2QS->Draw("same");
+
+
+  ///////////////////////////////////////////////////////////
+  // 3-pion 
+  cout<<"3-pion section"<<endl;
+  TCanvas *can2 = new TCanvas("can2", "can2",600,53,700,500);
+  can2->SetHighLightColor(2);
+  can2->Range(-0.7838115,-1.033258,0.7838115,1.033258);
+  gStyle->SetOptFit(0111);
+  can2->SetFillColor(10);
+  can2->SetBorderMode(0);
+  can2->SetBorderSize(2);
+  can2->SetGridx();
+  can2->SetGridy();
+  can2->SetFrameFillColor(0);
+  can2->SetFrameBorderMode(0);
+  can2->SetFrameBorderMode(0);
+  gPad->SetRightMargin(0.02); gPad->SetTopMargin(0.02);
+  TLegend *legend2 = (TLegend*)legend1->Clone();
+  legend2->SetX1(0.45); legend2->SetX2(0.95);  legend2->SetY1(0.6); legend2->SetY2(0.95);
+
+  TH1D *TERM1_3=(TH1D*)ThreeParticle[ch1_3][ch2_3][ch3_3][0]->Clone();
+  TH1D *TERM2_3=(TH1D*)ThreeParticle[ch1_3][ch2_3][ch3_3][1]->Clone();
+  TH1D *TERM3_3=(TH1D*)ThreeParticle[ch1_3][ch2_3][ch3_3][2]->Clone();
+  TH1D *TERM4_3=(TH1D*)ThreeParticle[ch1_3][ch2_3][ch3_3][3]->Clone();
+  TH1D *TERM5_3=(TH1D*)ThreeParticle[ch1_3][ch2_3][ch3_3][4]->Clone();
+  //
+  
+  if(SameCharge){
+    TERM1_3->Multiply(MRC_SC_3[0]);
+    TERM2_3->Multiply(MRC_SC_3[1]);
+    TERM3_3->Multiply(MRC_SC_3[1]);
+    TERM4_3->Multiply(MRC_SC_3[1]);
+    TERM5_3->Multiply(MRC_SC_3[2]);
+  }else{
+    if(CHARGE==-1){// --+ but MRC is stored as -++
+      TERM1_3->Multiply(MRC_MC_3[0]);
+      TERM2_3->Multiply(MRC_MC_3[2]);
+      TERM3_3->Multiply(MRC_MC_3[1]);
+      TERM4_3->Multiply(MRC_MC_3[1]);
+      TERM5_3->Multiply(MRC_MC_3[3]);
+    }else{
+      TERM1_3->Multiply(MRC_MC_3[0]);
+      TERM2_3->Multiply(MRC_MC_3[1]);
+      TERM3_3->Multiply(MRC_MC_3[1]);
+      TERM4_3->Multiply(MRC_MC_3[2]);
+      TERM5_3->Multiply(MRC_MC_3[3]);
+    }
+  }
+  //
+  float f33 = ThreeFrac;
+  float f32 = (1-OneFrac);
+  float f31 = pow(1-OneFrac,3) + 3*OneFrac*pow(1-OneFrac,2) - 3*(1-TwoFrac)*(1-OneFrac);
+  float TherminatorMod_f33[4]={1., 1.123, 1.022, 1.008};// Core/Halo, 40fm, 70fm, 100fm
+  float TherminatorMod_f32[4]={1., 0.844, 0.933, 0.967};
+  float TherminatorMod_f31[4]={1., 0.828, 0.982, 1.028};
+  f33 *= TherminatorMod_f33[f_choice];
+  f32 *= TherminatorMod_f32[f_choice];
+  f31 *= TherminatorMod_f31[f_choice];
+  
+  TH1D *N3QS = (TH1D*)TERM1_3->Clone();
+  N3QS->Add(TERM5_3, -f31);
+  N3QS->Add(TERM2_3, -f32);
+  N3QS->Add(TERM3_3, -f32);
+  N3QS->Add(TERM4_3, -f32);
+  N3QS->Scale(1/f33);
+  N3QS->Multiply(K3avg[ch1_3][ch2_3][ch3_3][0]);
+
+  
+  TH1D *C3QS = (TH1D*)N3QS->Clone();
+  C3QS->Divide(TERM5_3);
+  if(SameCharge) C3QS->Multiply(C3muonCorrectionSC[0]);
+  else C3QS->Multiply(C3muonCorrectionMC[0]);
+  
+  C3QS->SetMarkerStyle(20);
+  C3QS->SetMarkerColor(4);
+  C3QS->GetXaxis()->SetRangeUser(0,0.1);
+  C3QS->SetMinimum(0.9); C3QS->SetMaximum(5.0);
+  
+  TH1D *n3QS = (TH1D*)N3QS->Clone();
+  TH1D *c3QS = (TH1D*)N3QS->Clone();
+  for(int bin=1; bin<=n3QS->GetNbinsX(); bin++){
+    if(n3QS->GetBinContent(bin)==0) continue;
+    double MuonCorr1=1.0, MuonCorr2=1.0, MuonCorr3=1.0, MuonCorr4=1.0;
+    if(SameCharge){
+      MuonCorr1 = C3muonCorrectionSC[0]->GetBinContent(bin);
+      MuonCorr2 = C3muonCorrectionSC[1]->GetBinContent(bin);
+      MuonCorr3 = MuonCorr2;
+      MuonCorr4 = MuonCorr2;
+    }else if(CHARGE==-1){
+      MuonCorr1 = C3muonCorrectionMC[0]->GetBinContent(bin);
+      MuonCorr2 = C3muonCorrectionMC[2]->GetBinContent(bin);// --
+      MuonCorr3 = C3muonCorrectionMC[1]->GetBinContent(bin);// -+
+      MuonCorr4 = MuonCorr3;// -+
+    }else{
+      MuonCorr1 = C3muonCorrectionMC[0]->GetBinContent(bin);
+      MuonCorr2 = C3muonCorrectionMC[1]->GetBinContent(bin);// -+
+      MuonCorr3 = MuonCorr2;
+      MuonCorr4 = C3muonCorrectionMC[2]->GetBinContent(bin);
+    }
+    double value = n3QS->GetBinContent(bin) * MuonCorr1;
+    value -= ( TERM2_3->GetBinContent(bin) - (1-TwoFrac)*TERM5_3->GetBinContent(bin)) * K3avg[ch1_3][ch2_3][ch3_3][1]->GetBinContent(bin) / TwoFrac * MuonCorr2;
+    value -= ( TERM3_3->GetBinContent(bin) - (1-TwoFrac)*TERM5_3->GetBinContent(bin)) * K3avg[ch1_3][ch2_3][ch3_3][2]->GetBinContent(bin) / TwoFrac * MuonCorr3;
+    value -= ( TERM4_3->GetBinContent(bin) - (1-TwoFrac)*TERM5_3->GetBinContent(bin)) * K3avg[ch1_3][ch2_3][ch3_3][3]->GetBinContent(bin) / TwoFrac * MuonCorr4;
+    value -= TERM5_3->GetBinContent(bin)*(MuonCorr1 - MuonCorr2 - MuonCorr3 - MuonCorr4);
+    //
+    n3QS->SetBinContent(bin, value);
+    c3QS->SetBinContent(bin, value + TERM5_3->GetBinContent(bin));
+  }
+  c3QS->Divide(TERM5_3);
+
+  C3QS->Draw();
+  c3QS->Draw("same");
+  int lowBin = C3QS->GetXaxis()->FindBin(Cutoff_FullWeight_Q3[Mbin]);
+  int highBin = C3QS->GetXaxis()->FindBin(Cutoff_FullWeight_Q3[Mbin]);
+  double SF=C3QS->Integral(lowBin, highBin); SF /= TPFullWeight_ThreeParticle[ch1_3]->Integral(lowBin, highBin);
+  //TPFullWeight_ThreeParticle[ch1_3]->Scale(SF);
+  if(SameCharge) TPFullWeight_ThreeParticle[ch1_3]->Draw("same");
+  
+  //TH1D *C3raw = (TH1D*)TERM1_3->Clone();
+  //C3raw->Divide(TERM5_3);
+  //C3raw->SetMarkerColor(4);
+  //C3raw->Draw("same");
+
+  legend2->AddEntry(C3QS,"C_{3}^{QS}","p");
+  legend2->AddEntry(c3QS,"c_{3}^{QS}{2-pion removal}","p");
+  if(SameCharge) legend2->AddEntry(TPFullWeight_ThreeParticle[ch1_3],"C_{3}^{QS} built","l");
+  legend2->Draw("same");
+  
+
+  ///////////////////////////////////////
+  // C3QS built ratio
+  TCanvas *can2_2 = new TCanvas("can2_2", "can2_2",1200,53,700,500);
+  can2_2->SetHighLightColor(2);
+  can2_2->Range(-0.7838115,-1.033258,0.7838115,1.033258);
+  gStyle->SetOptFit(0111);
+  can2_2->SetFillColor(10);
+  can2_2->SetBorderMode(0);
+  can2_2->SetBorderSize(2);
+  can2_2->SetGridx();
+  can2_2->SetGridy();
+  can2_2->SetFrameFillColor(0);
+  can2_2->SetFrameBorderMode(0);
+  can2_2->SetFrameBorderMode(0);
+  gPad->SetRightMargin(0.02); gPad->SetTopMargin(0.02);
+  TLegend *legend2_2 = (TLegend*)legend1->Clone();
+  legend2_2->SetX1(0.25); legend2_2->SetX2(0.6);  legend2_2->SetY1(0.8); legend2_2->SetY2(0.95);
+
+  TH1D *C3QSratio = (TH1D*)C3QS->Clone();
+  //TH1D *Chi2NDF_PointSize_3 = new TH1D("Chi2NDF_PointSize_3","",40,-0.5,39.5);
+  //TH1D *Chi2NDF_FullSize_3 = new TH1D("Chi2NDF_FullSize_3","",40,-0.5,39.5);
+  TH1D *Chi2NDF_PointSize_3 = new TH1D("Chi2NDF_PointSize_3","",100,-0.5,99.5);
+  TH1D *Chi2NDF_FullSize_3 = new TH1D("Chi2NDF_FullSize_3","",100,-0.5,99.5);
+  Chi2NDF_PointSize_3->SetLineColor(4); Chi2NDF_FullSize_3->SetLineColor(2);
+  Chi2NDF_PointSize_3->SetMarkerColor(4); Chi2NDF_FullSize_3->SetMarkerColor(2);
+  Chi2NDF_PointSize_3->GetXaxis()->SetTitle("Coherent fraction (%)"); Chi2NDF_PointSize_3->GetYaxis()->SetTitle("3-pion  #chi^{2} / NDF");
+  
+  if(SameCharge){
+    
+    TH1D *tempDen = (TH1D*)TPFullWeight_ThreeParticle_2D[ch1_3]->ProjectionY("TPFullWeight3_Den", 4, 4);
+    TH1D *tempDenNeg = (TH1D*)TPNegFullWeight_ThreeParticle_2D[ch1_3]->ProjectionY("TPNegFullWeight3_Den", 4, 4);
+    tempDen->Add(tempDenNeg);// Add Pos and Neg Den
+
+    for(int binG=5; binG<=104; binG++){// was 44
+      TString *proName=new TString("TPFullWeight3_");
+      *proName += binG;
+      TH1D *tempNum = (TH1D*)TPFullWeight_ThreeParticle_2D[ch1_3]->ProjectionY(proName->Data(), binG, binG);
+      proName->Append("_Neg");
+      TH1D *tempNumNeg = (TH1D*)TPNegFullWeight_ThreeParticle_2D[ch1_3]->ProjectionY(proName->Data(), binG, binG);
+      //
+      // Add Pos and Neg Num
+      tempNum->Add(tempNumNeg);
+      //
+      tempNum->Add(tempDen);
+      tempNum->Divide(tempDen);
+      lowBin = C3QS->GetXaxis()->FindBin(Cutoff_FullWeight_Q3[Mbin]);
+      highBin = C3QS->GetXaxis()->FindBin(Cutoff_FullWeight_Q3[Mbin]);
+      SF=C3QS->Integral(lowBin, highBin);
+      SF /= tempNum->Integral(lowBin, highBin);
+      //tempNum->Scale(SF);
+      
+      double Chi2=0;
+      double NDF=0;
+      for(int binQ3=3; binQ3<=3; binQ3++){
+       if(tempNum->GetBinContent(binQ3) <=0) continue;
+       double value = C3QS->GetBinContent(binQ3) - tempNum->GetBinContent(binQ3);
+       double err = C3QS->GetBinError(binQ3);
+       if(err <=0) continue;
+
+       Chi2 += pow(value / err,2);
+       //
+       NDF += 1;
+      }
+      //if(binG<25) {Chi2NDF_PointSize_3->SetBinContent(1 + 2*(binG-5), sqrt(Chi2)/NDF); Chi2NDF_PointSize_3->SetBinError(1 + 2*(binG-5), 0.001);}
+      //else {Chi2NDF_FullSize_3->SetBinContent(1 + 2*(binG-25), sqrt(Chi2)/NDF); Chi2NDF_FullSize_3->SetBinError(1 + 2*(binG-25), 0.001);}
+      if(binG<55) {Chi2NDF_PointSize_3->SetBinContent(1 + 2*(binG-5), sqrt(Chi2)/NDF); Chi2NDF_PointSize_3->SetBinError(1 + 2*(binG-5), 0.001);}
+      else {Chi2NDF_FullSize_3->SetBinContent(1 + 2*(binG-55), sqrt(Chi2)/NDF); Chi2NDF_FullSize_3->SetBinError(1 + 2*(binG-55), 0.001);}
+      //if(NDF>0) cout<<binG<<"  "<<sqrt(Chi2)/NDF<<endl;
+    }
+    Chi2NDF_PointSize_3->SetMarkerStyle(20); Chi2NDF_FullSize_3->SetMarkerStyle(20);
+    
+    C3QSratio->Divide(TPFullWeight_ThreeParticle[ch1_3]);
+    //
+    C3QSratio->SetMinimum(0.94); C3QSratio->SetMaximum(1.02);
+    C3QSratio->GetYaxis()->SetTitleOffset(1.2);
+    C3QSratio->GetYaxis()->SetTitle("C_{3}^{QS} / C_{3}(built)");
+    C3QSratio->Draw();
+    Unity->Draw("same");
+
+    Chi2NDF_PointSize_3->Draw();
+    Chi2NDF_FullSize_3->Draw("same");
+    legend2_2->AddEntry(Chi2NDF_PointSize_3,"R_{coh}=0 (Point Source)","p");
+    legend2_2->AddEntry(Chi2NDF_FullSize_3,"R_{coh}=R_{ch}","p");
+    legend2_2->Draw("same");
+  }
+  
+  // r3
+  TH1D *r3;
+  if(SameCharge){
+    r3 = (TH1D*)n3QS->Clone();
+    TPN_ThreeParticle[ch1_3]->Multiply(MRC_SC_3[2]);
+    r3->Divide(TPN_ThreeParticle[ch1_3]);
+    r3->GetXaxis()->SetRangeUser(0,0.08);
+    r3->SetMinimum(0.5); r3->SetMaximum(2.5);
+    r3->GetYaxis()->SetTitle("r_{3}");
+    //
+    //r3->Draw();
+    //TPN_ThreeParticle[ch1_3]->Draw();
+    //fTPNRejects3pion->SetLineColor(2);
+    //fTPNRejects3pion->Draw("same");
+  }
+  
+
+  // Print 3-pion points
+  for(int bin=1; bin<=10; bin++){
+    //cout<<C3QS->GetBinContent(bin)<<", ";
+    //cout<<c3QS->GetBinContent(bin)<<", ";
+    //cout<<TPFullWeight_ThreeParticle[ch1_3]->GetBinContent(bin)<<", ";
+  }
+  //cout<<endl;
+  for(int bin=1; bin<=10; bin++){
+    //cout<<C3QS->GetBinError(bin)<<", ";
+    //cout<<c3QS->GetBinError(bin)<<", ";
+  }
+  //cout<<endl;
+
+
+  ////////////////////////////////////////////////////////////////
+  // 4-pion 
+  cout<<"4-pion section"<<endl;
+  
+  TCanvas *can3 = new TCanvas("can3", "can3",11,600,700,500);
+  can3->SetHighLightColor(2);
+  can3->Range(-0.7838115,-1.033258,0.7838115,1.033258);
+  gStyle->SetOptFit(0111);
+  can3->SetFillColor(10);
+  can3->SetBorderMode(0);
+  can3->SetBorderSize(2);
+  can3->SetGridx();
+  can3->SetGridy();
+  can3->SetFrameFillColor(0);
+  can3->SetFrameBorderMode(0);
+  can3->SetFrameBorderMode(0);
+  gPad->SetRightMargin(0.02); gPad->SetTopMargin(0.02);
+  TLegend *legend3 = (TLegend*)legend1->Clone();
+  legend3->SetX1(0.45); legend3->SetX2(0.98);  legend3->SetY1(0.6); legend3->SetY2(0.95);
+
+  TH1D *TERMS_4[13];
+  for(int index=0; index<13; index++){
+    TERMS_4[index] = (TH1D*)FourParticle[ch1_4][ch2_4][ch3_4][ch4_4][index]->Clone();
+    //
+    TH1D *MRC_temp; 
+    if(SameCharge){
+      if(index==0) MRC_temp = (TH1D*)MRC_SC_4[0]->Clone();
+      else if(index<=4) MRC_temp = (TH1D*)MRC_SC_4[1]->Clone();
+      else if(index<=10) MRC_temp = (TH1D*)MRC_SC_4[2]->Clone();
+      else if(index==11) MRC_temp = (TH1D*)MRC_SC_4[3]->Clone();
+      else MRC_temp = (TH1D*)MRC_SC_4[4]->Clone();    
+    }else if(CHARGE==-1 && MixedCharge4pionType==1){
+      if(index==0) MRC_temp = (TH1D*)MRC_MC1_4[0]->Clone();//0
+      else if(index!=1 && index<=4) MRC_temp = (TH1D*)MRC_MC1_4[1]->Clone();//1
+      else if(index==1) MRC_temp = (TH1D*)MRC_MC1_4[2]->Clone();//2
+      else if(index==7 || index==9 || index==10) MRC_temp = (TH1D*)MRC_MC1_4[3]->Clone();//3
+      else if(index!=12) MRC_temp = (TH1D*)MRC_MC1_4[4]->Clone();//4
+      else MRC_temp = (TH1D*)MRC_MC1_4[5]->Clone();//5
+    }else if(CHARGE==+1 && MixedCharge4pionType==1){
+      if(index==0) MRC_temp = (TH1D*)MRC_MC1_4[0]->Clone();
+      else if(index<=3) MRC_temp = (TH1D*)MRC_MC1_4[1]->Clone();
+      else if(index==4) MRC_temp = (TH1D*)MRC_MC1_4[2]->Clone();
+      else if(index==5 || index==6 || index==7) MRC_temp = (TH1D*)MRC_MC1_4[3]->Clone();
+      else if(index!=12) MRC_temp = (TH1D*)MRC_MC1_4[4]->Clone();
+      else MRC_temp = (TH1D*)MRC_MC1_4[5]->Clone();
+    }else{// --++
+      if(index==0) MRC_temp = (TH1D*)MRC_MC2_4[0]->Clone();
+      else if(index<=4) MRC_temp = (TH1D*)MRC_MC2_4[1]->Clone();
+      else if(index==5 || index==10) MRC_temp = (TH1D*)MRC_MC2_4[2]->Clone();
+      else if(index<=9) MRC_temp = (TH1D*)MRC_MC2_4[3]->Clone();
+      else if(index==11) MRC_temp = (TH1D*)MRC_MC2_4[4]->Clone();
+      else MRC_temp = (TH1D*)MRC_MC2_4[5]->Clone();
+    }
+    //
+    TERMS_4[index]->Multiply(MRC_temp);
+  }
+  
+  TH1D *C4raw=(TH1D*)TERMS_4[2]->Clone();
+  C4raw->Divide(TERMS_4[12]);
+  C4raw->GetXaxis()->SetRangeUser(0,0.2);
+
+  float f44 = FourFrac;
+  float f43 = (1-OneFrac);
+  float f42 = -pow(1-OneFrac,2);
+  float f41 = -3*pow(1-OneFrac,4) - 8*OneFrac*pow(1-OneFrac,3) + 6*(1-TwoFrac)*pow(1-OneFrac,2);
+  float TherminatorMod_f44[4]={1., 1.188, 1.008, 0.985};// Core/Halo, 40fm, 70fm, 100fm
+  float TherminatorMod_f43[4]={1., 0.885, 0.979, 1.026};
+  float TherminatorMod_f42[4]={1., 0.687, 0.99, 1.08};
+  float TherminatorMod_f41[4]={1., 0.806, 1.33, 1.548};
+  f44 *= TherminatorMod_f44[f_choice];
+  f43 *= TherminatorMod_f43[f_choice];
+  f42 *= TherminatorMod_f42[f_choice];
+  f41 *= TherminatorMod_f41[f_choice];
+  //cout<<f44 + 4*f43 + 6*f42 + f41<<endl;
+  //cout<<f44<<"  "<<f43<<"  "<<f42<<"  "<<f41<<endl;
+  
+  TH1D *N4QS=(TH1D*)TERMS_4[0]->Clone();
+  //
+  N4QS->Add(TERMS_4[1], -f43); 
+  N4QS->Add(TERMS_4[2], -f43);
+  N4QS->Add(TERMS_4[3], -f43);
+  N4QS->Add(TERMS_4[4], -f43);
+  //
+  N4QS->Add(TERMS_4[5], -f42);
+  N4QS->Add(TERMS_4[6], -f42);
+  N4QS->Add(TERMS_4[7], -f42);
+  N4QS->Add(TERMS_4[8], -f42);
+  N4QS->Add(TERMS_4[9], -f42);
+  N4QS->Add(TERMS_4[10], -f42);
+  //
+  N4QS->Add(TERMS_4[12], -f41);
+  //
+  N4QS->Scale(1/f44);
+  //K4avg[ch1_4][ch2_4][ch3_4][ch4_4][0]->Scale(1.005);// K factorization 
+  N4QS->Multiply(K4avg[ch1_4][ch2_4][ch3_4][ch4_4][0]);
+  //N4QS->Divide(K4avg[ch1_4][ch2_4][ch3_4][ch4_4][1]);
+  //N4QS->Divide(K4avg[ch1_4][ch2_4][ch3_4][ch4_4][11]);
+  
+  TH1D *C4QS=(TH1D*)N4QS->Clone();
+  C4QS->GetXaxis()->SetRangeUser(0,0.179);
+  C4QS->SetMinimum(0.5);
+  C4QS->SetMarkerColor(4);
+  //
+  /*TH1D *C4QS_basic=(TH1D*)TERMS_4[0]->Clone();
+  for(int ii=1; ii<=C4QS_basic->GetNbinsX(); ii++){
+    double value = C4QS_basic->GetBinContent(ii) - TERMS_4[12]->GetBinContent(ii);
+    value /= f44;
+    value += TERMS_4[12]->GetBinContent(ii);
+    C4QS_basic->SetBinContent(ii, value);
+    }
+  C4QS_basic->Divide(TERMS_4[12]);
+  //C4QS_basic->Multiply(K4avg[ch1_4][ch2_4][ch3_4][ch4_4][0]);
+  C4QS_basic->SetMarkerColor(1);
+  //C4QS_basic->Draw("same");
+  */
+  //
+  
+  TH1D *C4_pieces[12];
+  for(int i=0; i<12; i++){
+    C4_pieces[i]=(TH1D*)TERMS_4[i]->Clone();
+    C4_pieces[i]->Divide(TERMS_4[12]);
+    
+    if(i==0) C4_pieces[i]->SetMarkerColor(1);
+    else if(i<5) C4_pieces[i]->SetMarkerColor(2);
+    else if(i<10) C4_pieces[i]->SetMarkerColor(3);
+    else C4_pieces[i]->SetMarkerColor(4);
+  }
+  C4_pieces[0]->GetXaxis()->SetRangeUser(0,0.2);
+  C4_pieces[0]->SetMinimum(0.5); C4_pieces[0]->SetMaximum(3); 
+  //C4_pieces[0]->Draw();
+  //C4_pieces[1]->Draw("same");
+  //C4_pieces[5]->Draw("same");
+  //C4_pieces[11]->Draw("same");
+  //
+  
+  TH1D *C4_2pairs_FromSquares = (TH1D*)TERMS_4[5]->Clone();
+  C4_2pairs_FromSquares->Divide(TERMS_4[12]);
+  for(int bin=1; bin<=C4_2pairs_FromSquares->GetNbinsX(); bin++){
+    double value = C4_2pairs_FromSquares->GetBinContent(bin);
+    value -= 1;
+    value *= value;
+    value += 1;
+    C4_2pairs_FromSquares->SetBinContent(bin, value);
+  }
+  C4_2pairs_FromSquares->SetMarkerColor(6);
+  //C4_2pairs_FromSquares->Draw("same");
+  //
+  TH1D *C4QS_2pairs=(TH1D*)TERMS_4[11]->Clone();
+  C4QS_2pairs->Add(TERMS_4[12], -pow(1-TwoFrac,2));// N1^4
+  C4QS_2pairs->Add(TERMS_4[5], -2*TwoFrac*(1-TwoFrac));// N2 * N1^2
+  C4QS_2pairs->Scale(1/pow(TwoFrac,2));
+  C4QS_2pairs->Multiply(K4avg[ch1_4][ch2_4][ch3_4][ch4_4][11]);
+  C4QS_2pairs->Divide(TERMS_4[12]);
+  C4QS_2pairs->SetMarkerColor(6);
+  //C4QS_2pairs->Draw("same");
+  //
+  
+
+  
+  TH1D *n4QS = (TH1D*)N4QS->Clone();
+  TH1D *c4QS = (TH1D*)N4QS->Clone();
+  TH1D *c4QS_RemovalStage1 = (TH1D*)N4QS->Clone();
+  TH1D *c4QS_RemovalStage2 = (TH1D*)N4QS->Clone();
+  TH1D *c4QS_RemovalStage3 = (TH1D*)N4QS->Clone();
+
+
+  for(int bin=1; bin<=n4QS->GetNbinsX(); bin++){
+    if(n4QS->GetBinContent(bin)==0) continue;
+    bool exitCode=kFALSE;
+    for(int ii=0; ii<13; ii++) {if(TERMS_4[ii]->GetBinContent(bin) < 1) exitCode=kTRUE;}
+    if(exitCode) continue;
+    //cout<<TERMS_4[0]->GetBinContent(bin)<<endl;
+    //
+    double N4QSvalue = N4QS->GetBinContent(bin);
+    double SubtractionTerm[11] = {0};
+    double ErrorTerm[12] = {0};
+    ErrorTerm[0] = n4QS->GetBinError(bin);
+    //
+    // 3-pion terms
+    if(SameCharge || MixedCharge4pionType==1){
+      SubtractionTerm[0] = (TERMS_4[1]->GetBinContent(bin) - f32*TERMS_4[5]->GetBinContent(bin)  - f32*TERMS_4[6]->GetBinContent(bin)  - f32*TERMS_4[8]->GetBinContent(bin) - f31*TERMS_4[12]->GetBinContent(bin)) / f33;// 5 6 8
+      SubtractionTerm[0] *= K4avg[ch1_4][ch2_4][ch3_4][ch4_4][1]->GetBinContent(bin);
+      ErrorTerm[1] = sqrt(TERMS_4[1]->GetBinContent(bin) + f32*f32*TERMS_4[5]->GetBinContent(bin)  + f32*f32*TERMS_4[6]->GetBinContent(bin) + f32*f32*TERMS_4[8]->GetBinContent(bin) + f31*f31*TERMS_4[12]->GetBinContent(bin)) / f33;
+      ErrorTerm[1] *= K4avg[ch1_4][ch2_4][ch3_4][ch4_4][1]->GetBinContent(bin);
+      //
+      SubtractionTerm[1] = (TERMS_4[2]->GetBinContent(bin) - f32*TERMS_4[5]->GetBinContent(bin)  - f32*TERMS_4[7]->GetBinContent(bin)  - f32*TERMS_4[9]->GetBinContent(bin) - f31*TERMS_4[12]->GetBinContent(bin)) / f33;
+      SubtractionTerm[1] *= K4avg[ch1_4][ch2_4][ch3_4][ch4_4][2]->GetBinContent(bin);
+      ErrorTerm[2] = sqrt(TERMS_4[2]->GetBinContent(bin) + f32*f32*TERMS_4[5]->GetBinContent(bin)  + f32*f32*TERMS_4[7]->GetBinContent(bin) + f32*f32*TERMS_4[9]->GetBinContent(bin) + f31*f31*TERMS_4[12]->GetBinContent(bin)) / f33;
+      ErrorTerm[2] *= K4avg[ch1_4][ch2_4][ch3_4][ch4_4][2]->GetBinContent(bin);
+      //
+      SubtractionTerm[2] = (TERMS_4[3]->GetBinContent(bin) - f32*TERMS_4[6]->GetBinContent(bin)  - f32*TERMS_4[7]->GetBinContent(bin)  - f32*TERMS_4[10]->GetBinContent(bin) - f31*TERMS_4[12]->GetBinContent(bin)) / f33;
+      SubtractionTerm[2] *= K4avg[ch1_4][ch2_4][ch3_4][ch4_4][3]->GetBinContent(bin);
+      ErrorTerm[3] = sqrt(TERMS_4[3]->GetBinContent(bin) + f32*f32*TERMS_4[6]->GetBinContent(bin)  + f32*f32*TERMS_4[7]->GetBinContent(bin) + f32*f32*TERMS_4[10]->GetBinContent(bin) + f31*f31*TERMS_4[12]->GetBinContent(bin)) / f33;
+      ErrorTerm[3] *= K4avg[ch1_4][ch2_4][ch3_4][ch4_4][3]->GetBinContent(bin);
+      //
+      SubtractionTerm[3] = (TERMS_4[4]->GetBinContent(bin) - f32*TERMS_4[8]->GetBinContent(bin)  - f32*TERMS_4[9]->GetBinContent(bin)  - f32*TERMS_4[10]->GetBinContent(bin) - f31*TERMS_4[12]->GetBinContent(bin)) / f33;
+      SubtractionTerm[3] *= K4avg[ch1_4][ch2_4][ch3_4][ch4_4][4]->GetBinContent(bin);
+      ErrorTerm[4] = sqrt(TERMS_4[4]->GetBinContent(bin) + f32*f32*TERMS_4[8]->GetBinContent(bin)  + f32*f32*TERMS_4[9]->GetBinContent(bin) + f32*f32*TERMS_4[10]->GetBinContent(bin) + f31*f31*TERMS_4[12]->GetBinContent(bin)) / f33;
+      ErrorTerm[4] *= K4avg[ch1_4][ch2_4][ch3_4][ch4_4][4]->GetBinContent(bin);
+      //
+    }
+    // 2-pion terms
+    SubtractionTerm[4] = ( TERMS_4[5]->GetBinContent(bin) - (1-TwoFrac)*TERMS_4[12]->GetBinContent(bin)) * K4avg[ch1_4][ch2_4][ch3_4][ch4_4][5]->GetBinContent(bin) / TwoFrac;
+    ErrorTerm[5] = sqrt( TERMS_4[5]->GetBinContent(bin) + pow(1-TwoFrac,2)*TERMS_4[12]->GetBinContent(bin)) * K4avg[ch1_4][ch2_4][ch3_4][ch4_4][5]->GetBinContent(bin) / TwoFrac;
+    //
+    SubtractionTerm[5] = ( TERMS_4[6]->GetBinContent(bin) - (1-TwoFrac)*TERMS_4[12]->GetBinContent(bin)) * K4avg[ch1_4][ch2_4][ch3_4][ch4_4][6]->GetBinContent(bin) / TwoFrac;
+    ErrorTerm[6] = sqrt( TERMS_4[6]->GetBinContent(bin) + pow(1-TwoFrac,2)*TERMS_4[12]->GetBinContent(bin)) * K4avg[ch1_4][ch2_4][ch3_4][ch4_4][6]->GetBinContent(bin) / TwoFrac;
+    //
+    SubtractionTerm[6] = ( TERMS_4[7]->GetBinContent(bin) - (1-TwoFrac)*TERMS_4[12]->GetBinContent(bin)) * K4avg[ch1_4][ch2_4][ch3_4][ch4_4][7]->GetBinContent(bin) / TwoFrac;
+    ErrorTerm[7] = sqrt( TERMS_4[7]->GetBinContent(bin) + pow(1-TwoFrac,2)*TERMS_4[12]->GetBinContent(bin)) * K4avg[ch1_4][ch2_4][ch3_4][ch4_4][7]->GetBinContent(bin) / TwoFrac;
+    //
+    SubtractionTerm[7] = ( TERMS_4[8]->GetBinContent(bin) - (1-TwoFrac)*TERMS_4[12]->GetBinContent(bin)) * K4avg[ch1_4][ch2_4][ch3_4][ch4_4][8]->GetBinContent(bin) / TwoFrac;
+    ErrorTerm[8] = sqrt( TERMS_4[8]->GetBinContent(bin) + pow(1-TwoFrac,2)*TERMS_4[12]->GetBinContent(bin)) * K4avg[ch1_4][ch2_4][ch3_4][ch4_4][8]->GetBinContent(bin) / TwoFrac;
+    //
+    SubtractionTerm[8] = ( TERMS_4[9]->GetBinContent(bin) - (1-TwoFrac)*TERMS_4[12]->GetBinContent(bin)) * K4avg[ch1_4][ch2_4][ch3_4][ch4_4][9]->GetBinContent(bin) / TwoFrac;
+    ErrorTerm[9] = sqrt( TERMS_4[9]->GetBinContent(bin) + pow(1-TwoFrac,2)*TERMS_4[12]->GetBinContent(bin)) * K4avg[ch1_4][ch2_4][ch3_4][ch4_4][9]->GetBinContent(bin) / TwoFrac;
+    //
+    SubtractionTerm[9] = ( TERMS_4[10]->GetBinContent(bin) - (1-TwoFrac)*TERMS_4[12]->GetBinContent(bin)) * K4avg[ch1_4][ch2_4][ch3_4][ch4_4][10]->GetBinContent(bin) / TwoFrac;
+    ErrorTerm[10] = sqrt( TERMS_4[10]->GetBinContent(bin) + pow(1-TwoFrac,2)*TERMS_4[12]->GetBinContent(bin)) * K4avg[ch1_4][ch2_4][ch3_4][ch4_4][10]->GetBinContent(bin) / TwoFrac;
+    //
+    
+    //
+    // 2 2-pion terms: cos(q12*x12)*cos(q34*x34)
+    SubtractionTerm[10] = TERMS_4[11]->GetBinContent(bin);// N22
+    SubtractionTerm[10] -= 2*(1-TwoFrac) * TERMS_4[5]->GetBinContent(bin);
+    SubtractionTerm[10] += pow(1-TwoFrac,2) * TERMS_4[12]->GetBinContent(bin);
+    //
+    SubtractionTerm[10] /= pow(TwoFrac,2);
+    SubtractionTerm[10] *= K4avg[ch1_4][ch2_4][ch3_4][ch4_4][11]->GetBinContent(bin);
+    SubtractionTerm[10] -= 2*( TERMS_4[5]->GetBinContent(bin) - (1-TwoFrac)*TERMS_4[12]->GetBinContent(bin)) * K4avg[ch1_4][ch2_4][ch3_4][ch4_4][5]->GetBinContent(bin) / TwoFrac;
+    SubtractionTerm[10] += 2*TERMS_4[12]->GetBinContent(bin);
+    //
+    ErrorTerm[11] = TERMS_4[11]->GetBinContent(bin);
+    ErrorTerm[11] += pow(1-TwoFrac,4) * TERMS_4[12]->GetBinContent(bin);
+    ErrorTerm[11] += pow(2*(1-TwoFrac)*TwoFrac,2) * TERMS_4[5]->GetBinContent(bin);
+    ErrorTerm[11] = sqrt(ErrorTerm[11]);
+    ErrorTerm[11] /= pow(TwoFrac,2);
+    ErrorTerm[11] *= K4avg[ch1_4][ch2_4][ch3_4][ch4_4][11]->GetBinContent(bin);
+    ErrorTerm[11] = pow(ErrorTerm[11],2);
+    ErrorTerm[11] += pow( 2*sqrt(TERMS_4[5]->GetBinContent(bin) + pow(1-TwoFrac,2)*TERMS_4[12]->GetBinContent(bin)) * K4avg[ch1_4][ch2_4][ch3_4][ch4_4][5]->GetBinContent(bin) / TwoFrac, 2);
+    ErrorTerm[11] += 4*TERMS_4[12]->GetBinContent(bin);
+    ErrorTerm[11] = sqrt(ErrorTerm[11]);
+
+    //
+    double FinalValue[4]={0};
+    double FinalValue_e[4]={0};
+    if(SameCharge) {N4QSvalue *= C4muonCorrectionSC[0]->GetBinContent(bin); ErrorTerm[0] *= C4muonCorrectionSC[0]->GetBinContent(bin);}
+    else if(MixedCharge4pionType==1) {N4QSvalue *= C4muonCorrectionMC1[0]->GetBinContent(bin); ErrorTerm[0] *= C4muonCorrectionMC1[0]->GetBinContent(bin);}
+    else {N4QSvalue *= C4muonCorrectionMC2[0]->GetBinContent(bin); ErrorTerm[0] *= C4muonCorrectionMC2[0]->GetBinContent(bin);}
+    for(int ii=0; ii<4; ii++) {
+      FinalValue[ii] = N4QSvalue; 
+      FinalValue_e[ii] = pow(ErrorTerm[0],2);
+    }
+    
+    if(SameCharge) {
+      FinalValue[0] -= 4*(SubtractionTerm[0] - TERMS_4[12]->GetBinContent(bin)) * C4muonCorrectionSC[1]->GetBinContent(bin);
+      FinalValue[0] += 6*(SubtractionTerm[4] - TERMS_4[12]->GetBinContent(bin)) * C4muonCorrectionSC[2]->GetBinContent(bin);
+      FinalValue[0] -= 3*(SubtractionTerm[10] - TERMS_4[12]->GetBinContent(bin)) * C4muonCorrectionSC[3]->GetBinContent(bin);
+      FinalValue_e[0] += 4*pow(ErrorTerm[1]*C4muonCorrectionSC[1]->GetBinContent(bin),2);
+      FinalValue_e[0] += 6*pow(ErrorTerm[5]*C4muonCorrectionSC[2]->GetBinContent(bin),2);
+      FinalValue_e[0] += 3*pow(ErrorTerm[11]*C4muonCorrectionSC[3]->GetBinContent(bin),2);
+      FinalValue_e[0] += (4*C4muonCorrectionSC[1]->GetBinContent(bin) + 6*C4muonCorrectionSC[2]->GetBinContent(bin) + 3*C4muonCorrectionSC[3]->GetBinContent(bin)) * TERMS_4[12]->GetBinContent(bin);
+      //
+      FinalValue[1] -= 6*SubtractionTerm[4] - 6*TERMS_4[12]->GetBinContent(bin);// 2-pion removal
+      FinalValue_e[1] += 6*pow(ErrorTerm[5],2) + 6*TERMS_4[12]->GetBinContent(bin);
+      FinalValue[2] = FinalValue[1] - 3*SubtractionTerm[10] + 3*TERMS_4[12]->GetBinContent(bin);// further 2-pair removal
+      FinalValue_e[2] += FinalValue_e[1] + 3*pow(ErrorTerm[11],2) + 3*TERMS_4[12]->GetBinContent(bin);
+      FinalValue[3] = SubtractionTerm[10];
+    }else{
+      if(MixedCharge4pionType==1 && CHARGE==-1){
+       FinalValue[0] -= (SubtractionTerm[0] - TERMS_4[12]->GetBinContent(bin)) * C4muonCorrectionMC1[2]->GetBinContent(bin);
+       FinalValue_e[0] += pow(ErrorTerm[1]*C4muonCorrectionMC1[2]->GetBinContent(bin),2);
+       FinalValue[1] -= 3*SubtractionTerm[4] - 3*TERMS_4[12]->GetBinContent(bin);
+       FinalValue_e[1] += 3*pow(ErrorTerm[5],2) + 3*TERMS_4[12]->GetBinContent(bin);
+      }else if(MixedCharge4pionType==1 && CHARGE==+1){
+       FinalValue[0] -= (SubtractionTerm[8] - TERMS_4[12]->GetBinContent(bin)) * C4muonCorrectionMC1[2]->GetBinContent(bin);
+       FinalValue_e[0] += pow(ErrorTerm[4]*C4muonCorrectionMC1[2]->GetBinContent(bin),2);
+       FinalValue[1] -= 3*SubtractionTerm[9] - 3*TERMS_4[12]->GetBinContent(bin);
+       FinalValue_e[1] += 3*pow(ErrorTerm[10],2) + 3*TERMS_4[12]->GetBinContent(bin);
+      }else{// --++ case
+       FinalValue[0] -= 2*(SubtractionTerm[4] - TERMS_4[12]->GetBinContent(bin)) * C4muonCorrectionMC2[2]->GetBinContent(bin);
+       FinalValue[0] -= (SubtractionTerm[10] - TERMS_4[12]->GetBinContent(bin)) * C4muonCorrectionMC2[4]->GetBinContent(bin);
+       FinalValue_e[0] += 2*pow(ErrorTerm[5],2) + pow(ErrorTerm[11],2) + 2*TERMS_4[12]->GetBinContent(bin);
+       //
+       FinalValue[1] -= 2*(SubtractionTerm[4] - TERMS_4[12]->GetBinContent(bin)) * C4muonCorrectionMC2[2]->GetBinContent(bin);
+       FinalValue_e[1] += 2*pow(ErrorTerm[5],2) + 2*TERMS_4[12]->GetBinContent(bin);
+      }
+    }
+    
+    for(int ii=0; ii<4; ii++) FinalValue_e[ii] = sqrt(FinalValue_e[ii]);
+    //
+    
+    n4QS->SetBinContent(bin, FinalValue[0] - TERMS_4[12]->GetBinContent(bin)); 
+    n4QS->SetBinError(bin, sqrt( pow(FinalValue_e[0],2) + TERMS_4[12]->GetBinContent(bin)));
+    c4QS->SetBinContent(bin, FinalValue[0]);
+    c4QS->SetBinError(bin, FinalValue_e[0]);
+    C4QS->SetBinContent(bin, N4QSvalue);
+    C4QS->SetBinError(bin, ErrorTerm[0]);
+    //
+    c4QS_RemovalStage1->SetBinContent(bin, FinalValue[1]);
+    c4QS_RemovalStage1->SetBinError(bin, FinalValue_e[1]);
+    //
+    c4QS_RemovalStage2->SetBinContent(bin, FinalValue[2]);
+    c4QS_RemovalStage2->SetBinError(bin, FinalValue_e[2]);
+    //
+    c4QS_RemovalStage3->SetBinContent(bin, FinalValue[3]);
+    c4QS_RemovalStage3->SetBinError(bin, FinalValue_e[3]);
+        
+  }
+
+  C4QS->Divide(TERMS_4[12]);
+  c4QS->Divide(TERMS_4[12]);
+  c4QS->SetMarkerColor(1); c4QS->SetLineColor(1);
+  //
+  c4QS_RemovalStage1->Divide(TERMS_4[12]);
+  c4QS_RemovalStage1->SetMarkerColor(2); c4QS_RemovalStage1->SetLineColor(2); 
+  c4QS_RemovalStage2->Divide(TERMS_4[12]);
+  c4QS_RemovalStage2->SetMarkerColor(6); c4QS_RemovalStage2->SetLineColor(6); 
+  c4QS_RemovalStage3->Divide(TERMS_4[12]);
+  c4QS_RemovalStage3->SetMarkerColor(7); c4QS_RemovalStage3->SetLineColor(7); 
+  //
+  //
+     
+
+
+  if(SameCharge) C4QS->SetMaximum(9);
+  else if(MixedCharge4pionType==1) C4QS->SetMaximum(4);
+  else C4QS->SetMaximum(3);
+  
+  C4QS->Draw();
+  c4QS_RemovalStage1->Draw("same");
+  if(SameCharge) c4QS_RemovalStage2->Draw("same");
+  //c4QS_RemovalStage3->Draw("same");
+  c4QS->Draw("same");
+
+  
+  lowBin = C4QS->GetXaxis()->FindBin(Cutoff_FullWeight_Q4[Mbin]);
+  highBin = C4QS->GetXaxis()->FindBin(Cutoff_FullWeight_Q4[Mbin]);
+  SF=C4QS->Integral(lowBin, highBin); SF /= TPFullWeight_FourParticle[ch1_4]->Integral(lowBin, highBin);
+  //TPFullWeight_FourParticle[ch1_4]->Scale(SF);
+  if(SameCharge) TPFullWeight_FourParticle[ch1_4]->Draw("same");
+  
+  legend3->AddEntry(C4QS,"C_{4}^{QS}","p");
+  legend3->AddEntry(c4QS_RemovalStage1,"c_{4}^{QS}{2-pion removal}","p");
+  if(SameCharge) legend3->AddEntry(c4QS_RemovalStage2,"c_{4}^{QS}{2-pion+2-pair removal}","p");
+  if(SameCharge) legend3->AddEntry(c4QS,"c_{4}^{QS}{2-pion+2-pair+3-pion removal}","p");
+  if(!SameCharge && MixedCharge4pionType==1) legend3->AddEntry(c4QS,"c_{4}^{QS}{2-pion+3-pion removal}","p");
+  if(!SameCharge && MixedCharge4pionType==2) legend3->AddEntry(c4QS,"c_{4}^{QS}{2-pion+2-pair removal}","p");
+  //legend3->AddEntry(c4QS,"c_{4}^{QS}{2-pion+2-pair removal}","p");
+
+  if(SameCharge) legend3->AddEntry(TPFullWeight_FourParticle[ch1_4],"C_{4}^{QS} built","l");
+  legend3->Draw("same");
+
+  //K4avg[ch1_4][ch2_4][ch3_4][ch4_4][0]->Draw();
+
+  TH1D *C4QS_Syst = (TH1D*)C4QS->Clone();
+  C4QS_Syst->SetMarkerSize(0);
+  C4QS_Syst->SetFillStyle(1000);
+  C4QS_Syst->SetFillColor(kBlue-10);
+  for(int bin=1; bin<=C4QS_Syst->GetNbinsX(); bin++){
+    double SysPercent = 0.06*C4QS_Syst->GetBinCenter(bin);// f coefficients
+    C4QS_Syst->SetBinError(bin, SysPercent * C4QS_Syst->GetBinContent(bin));
+  }
+  //C4QS_Syst->Draw("E2 same");
+  //C4QS->Draw("same");
+  //C4raw->Draw();
+  
+  ////////////////////////////////////////////////////////////////
+  if(SameCharge){
+    TCanvas *can4 = new TCanvas("can4", "can4",600,600,700,500);
+    can4->SetHighLightColor(2);
+    can4->Range(-0.7838115,-1.033258,0.7838115,1.033258);
+    gStyle->SetOptFit(0111);
+    can4->SetFillColor(10);
+    can4->SetBorderMode(0);
+    can4->SetBorderSize(2);
+    can4->SetGridx();
+    can4->SetGridy();
+    can4->SetFrameFillColor(0);
+    can4->SetFrameBorderMode(0);
+    can4->SetFrameBorderMode(0);
+    gPad->SetRightMargin(0.02); gPad->SetTopMargin(0.02);
+    TLegend *legend3_2 = (TLegend*)legend1->Clone();
+    legend3_2->SetX1(0.45); legend3_2->SetX2(0.98);  legend3_2->SetY1(0.6); legend3_2->SetY2(0.95);
+    //
+    //TH1D *Chi2NDF_PointSize_4 = new TH1D("Chi2NDF_PointSize_4","",40,-0.5,39.5);
+    //TH1D *Chi2NDF_FullSize_4 = new TH1D("Chi2NDF_FullSize_4","",40,-0.5,39.5);
+    TH1D *Chi2NDF_PointSize_4 = new TH1D("Chi2NDF_PointSize_4","",100,-0.5,99.5);
+    TH1D *Chi2NDF_FullSize_4 = new TH1D("Chi2NDF_FullSize_4","",100,-0.5,99.5);
+    Chi2NDF_PointSize_4->SetLineColor(4); Chi2NDF_FullSize_4->SetLineColor(2);
+    Chi2NDF_PointSize_4->SetMarkerColor(4); Chi2NDF_FullSize_4->SetMarkerColor(2);
+    Chi2NDF_PointSize_4->GetXaxis()->SetTitle("Coherent fraction (%)"); Chi2NDF_PointSize_4->GetYaxis()->SetTitle("4-pion  #chi^{2} / NDF");
+    
+    
+    TH1D *tempDen = (TH1D*)TPFullWeight_FourParticle_2D[ch1_4]->ProjectionY("TPFullWeight4_Den", 4, 4);
+    TH1D *tempDenNeg = (TH1D*)TPNegFullWeight_FourParticle_2D[ch1_4]->ProjectionY("TPNegFullWeight4_Den", 4, 4);
+    tempDen->Add(tempDenNeg);// Add Pos and Neg Weight
+
+    for(int binG=5; binG<=104; binG++){// 44
+      TString *proName=new TString("TPFullWeight4_");
+      *proName += binG;
+      TH1D *tempNum = (TH1D*)TPFullWeight_FourParticle_2D[ch1_4]->ProjectionY(proName->Data(), binG, binG);
+      proName->Append("_Neg");
+      TH1D *tempNumNeg = (TH1D*)TPNegFullWeight_FourParticle_2D[ch1_4]->ProjectionY(proName->Data(), binG, binG);
+      //
+      // Add Pos and Neg Weights
+      tempNum->Add(tempNumNeg);
+      //
+      tempNum->Add(tempDen);
+      tempNum->Divide(tempDen);
+      lowBin = C4QS->GetXaxis()->FindBin(Cutoff_FullWeight_Q4[Mbin]);
+      highBin = C4QS->GetXaxis()->FindBin(Cutoff_FullWeight_Q4[Mbin]);
+      SF=C4QS->Integral(lowBin, highBin);
+      SF /= tempNum->Integral(lowBin, highBin);
+      //tempNum->Scale(SF);
+      
+      double Chi2=0;
+      double NDF=0;
+      for(int binQ4=4; binQ4<=4; binQ4++){
+       if(tempNum->GetBinContent(binQ4) <=0) continue;
+       double value = C4QS->GetBinContent(binQ4) - tempNum->GetBinContent(binQ4);
+       double err = pow(C4QS->GetBinError(binQ4),2);
+       //err += pow(C4QS_Syst->GetBinError(binQ4),2);
+       err = sqrt(err);
+       if(err<=0) continue;
+               
+       Chi2 += pow(value / err,2);
+       //
+       NDF += 1;
+      }
+      //if(binG<25) {Chi2NDF_PointSize_4->SetBinContent(1 + 2*(binG-5), sqrt(fabs(Chi2))/NDF); Chi2NDF_PointSize_4->SetBinError(1 + 2*(binG-5), 0.001);}
+      //else {Chi2NDF_FullSize_4->SetBinContent(1 + 2*(binG-25), sqrt(fabs(Chi2))/NDF); Chi2NDF_FullSize_4->SetBinError(1 + 2*(binG-25), 0.001);}
+      if(binG<55) {Chi2NDF_PointSize_4->SetBinContent(1 + 2*(binG-5), sqrt(fabs(Chi2))/NDF); Chi2NDF_PointSize_4->SetBinError(1 + 2*(binG-5), 0.001);}
+      else {Chi2NDF_FullSize_4->SetBinContent(1 + 2*(binG-55), sqrt(fabs(Chi2))/NDF); Chi2NDF_FullSize_4->SetBinError(1 + 2*(binG-55), 0.001);}
+    }
+    Chi2NDF_PointSize_4->SetMarkerStyle(20); Chi2NDF_FullSize_4->SetMarkerStyle(20);
+    
+
+    Chi2NDF_PointSize_4->Draw();
+    Chi2NDF_FullSize_4->Draw("same");
+    legend3_2->AddEntry(Chi2NDF_PointSize_4,"R_{coh}=0 (Point Source)","p");
+    legend3_2->AddEntry(Chi2NDF_FullSize_4,"R_{coh}=R_{ch}","p");
+    legend3_2->Draw("same");
+
+
+    
+  }
+
+  // Print 4-pion points
+  for(int bin=1; bin<=12; bin++){
+    cout<<C4QS->GetBinContent(bin)<<", ";
+    //cout<<c4QS->GetBinContent(bin)<<", ";
+    //cout<<TPFullWeight_FourParticle[ch1_4]->GetBinContent(bin)<<", ";
+    //cout<<C4raw->GetBinContent(bin)<<", ";
+    //cout<<K4avg[ch1_4][ch2_4][ch3_4][ch4_4][0]->GetBinContent(bin)<<", ";
+  }
+  cout<<endl;
+  for(int bin=1; bin<=12; bin++){
+    //cout<<C4QS->GetBinError(bin)<<", ";
+    //cout<<c4QS->GetBinError(bin)<<", ";
+    //cout<<C4raw->GetBinError(bin)<<", ";
+  }
+  //cout<<endl;
+  ////////////////////////////////////////////////////////////////
+  // r4
+  
+  TF1 *ChaoticLimit_r42 = new TF1("ChaoticLimit_r42","6",0,10);
+  ChaoticLimit_r42->SetLineStyle(2);
+  TH1D *r42;
+  if(SameCharge){
+    /*TCanvas *can5 = new TCanvas("can5", "can5",1200,600,700,500);
+    can5->SetHighLightColor(2);
+    can5->Range(-0.7838115,-1.033258,0.7838115,1.033258);
+    gStyle->SetOptFit(0111);
+    can5->SetFillColor(10);
+    can5->SetBorderMode(0);
+    can5->SetBorderSize(2);
+    can5->SetGridx();
+    can5->SetGridy();
+    can5->SetFrameFillColor(0);
+    can5->SetFrameBorderMode(0);
+    can5->SetFrameBorderMode(0);
+    gPad->SetRightMargin(0.02); gPad->SetTopMargin(0.02);*/
+
+    r42 = (TH1D*)n4QS->Clone();
+    TPN_FourParticle[ch1_4]->Multiply(MRC_SC_4[4]);
+    r42->Divide(TPN_FourParticle[ch1_4]);
+    r42->GetXaxis()->SetRangeUser(0,0.08);
+    r42->SetMinimum(0.5); r42->SetMaximum(14);
+    r42->GetYaxis()->SetTitle("r_{4}{2}");
+    //
+    //r42->Draw();
+    //ChaoticLimit_r42->Draw("same");
+    //TPN_FourParticle[ch1_4]->Draw();
+    //fTPNRejects4pion1->SetLineColor(2);
+    //fTPNRejects4pion1->Draw("same");
+  }
+  
+  //double EA = exp(-pow(0.005 * 10/FmToGeV,2)/2.);
+  //TF1 *C2mag = new TF1("C2mag","pow(1-x,2)*pow([0],2) + 2*x*(1-x)*[0]",0,1);
+  //C2mag->FixParameter(0, EA);
+  //TF1 *C4norm = new TF1("C4norm","( 6*pow(1-x,4)*pow([0],4) + 24*x*pow(1-x,3)*pow([0],3) + 4*(2*pow(1-x,3)*pow([0],3) + 6*x*pow(1-x,2)*pow([0],2)) + 3*pow(C2mag,2) + 6*C2mag + 1) / (6*pow(C2mag,2) + 8*pow(C2mag,1.5) + 3*pow(C2mag,2) + 6*C2mag + 1)",0,1);
+  //C4norm->FixParameter(0, EA);
+  //C4norm->Draw();
+
+  /*TF1 *C2mag = new TF1("C2mag","pow(1-[0],2)*exp(-pow(x*[1],2)/6.) + 2*[0]*(1-[0])*exp(-pow(x*[1],2)/12.)",0,0.2);
+  C2mag->FixParameter(0, 0.25);
+  C2mag->FixParameter(1, 10./FmToGeV);
+  TF1 *C4norm = new TF1("C4norm","( 6*pow(1-[0],4)*exp(-pow(x*[1],2)/3.) + 24*[0]*pow(1-[0],3)*exp(-pow(x*[1],2)/4.) + 4*(2*pow(1-[0],3)*exp(-pow(x*[1],2)/4.) + 6*[0]*pow(1-[0],2)*exp(-pow(x*[1],2)/6.)) + 3*pow(C2mag,2) + 6*C2mag + 1) / (6*pow(C2mag,2) + 8*pow(C2mag,1.5) + 3*pow(C2mag,2) + 6*C2mag + 1)",0,0.2);
+  C4norm->FixParameter(0, 0.25);
+  C4norm->FixParameter(1, 10./FmToGeV);*/
+  //C4norm->Draw();
+
+
+  if(SaveToFile){
+    TString *savefilename = new TString("OutFiles/OutFile");
+    if(MCcase) savefilename->Append("MonteCarlo");
+    //
+    if(SameCharge) savefilename->Append("SC");
+    else savefilename->Append("MC");
+    //
+    if(!SameCharge) *savefilename += MixedCharge4pionType_def;
+    //
+    if(CHARGE==1) savefilename->Append("_Pos_");
+    else savefilename->Append("_Neg_");
+    //
+    
+    savefilename->Append("KT_");
+    *savefilename += EDbin+1;
+    
+    savefilename->Append("_M");
+    *savefilename += Mbin;
+    savefilename->Append(".root");
+    TFile *savefile = new TFile(savefilename->Data(),"RECREATE");
+    //
+    C2->Write("C2");
+    C2QS->Write("C2QS");
+    C3QS->Write("C3QS");
+    c3QS->Write("c3QS");
+    C4QS->Write("C4QS");
+    c4QS->Write("c4QS");
+    c4QS_RemovalStage1->Write("c4QS_RemovalStage1");
+    if(SameCharge) {
+      r3->Write("r3");
+      r42->Write("r42");
+      c4QS_RemovalStage2->Write("c4QS_RemovalStage2");
+      TPFullWeight_ThreeParticle[ch1_3]->Write("C3QS_built");
+      TPFullWeight_FourParticle[ch1_4]->Write("C4QS_built");
+      //
+      TPFullWeight_ThreeParticle_2D[ch1_3]->Write("C3QS_built2D");
+      TPFullWeight_FourParticle_2D[ch1_4]->Write("C4QS_built2D");
+      TPNegFullWeight_ThreeParticle_2D[ch1_3]->Write("C3QS_Negbuilt2D");
+      TPNegFullWeight_FourParticle_2D[ch1_4]->Write("C4QS_Negbuilt2D");
+    }
+    //
+    savefile->Close();
+
+  }
+
+  
+}
+
+//________________________________________________________________________
+void SetFSICorrelations(){
+  // read in 2-particle and 3-particle FSI correlations = K2 & K3
+  // 2-particle input histo from file is binned in qinv.  3-particle in qinv of each pair
+  TFile *fsifile = new TFile("KFile.root","READ");
+  if(!fsifile->IsOpen()) {
+    cout<<"No FSI file found!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"<<endl;
+  }
+  
+  TH1D *temphistoSS[12];
+  TH1D *temphistoOS[12];
+  for(Int_t MB=0; MB<12; MB++) {
+    TString *nameK2SS = new TString("K2ss_");
+    *nameK2SS += MB;
+    temphistoSS[MB] = (TH1D*)fsifile->Get(nameK2SS->Data());
+    //
+    TString *nameK2OS = new TString("K2os_");
+    *nameK2OS += MB;
+    temphistoOS[MB] = (TH1D*)fsifile->Get(nameK2OS->Data());
+    //
+    fFSIss[MB] = (TH1D*)temphistoSS[MB]->Clone();
+    fFSIos[MB] = (TH1D*)temphistoOS[MB]->Clone();
+    fFSIss[MB]->SetDirectory(0);
+    fFSIos[MB]->SetDirectory(0);
+  }
+  //
+  
+  fsifile->Close();
+  
+}
+
+double Gamov(int chargeProduct, double qinv){
+  
+  double arg = chargeProduct*2.*PI/(BohrR*qinv/2.);
+  
+  return arg/(exp(arg)-1);
+}
+
+void SetMomResCorrections(){
+  TString *momresfilename = new TString("MomResFile");
+  if(FileSetting==7) momresfilename->Append("_10percentIncrease");
+  momresfilename->Append(".root");
+  
+  TFile *MomResFile = new TFile(momresfilename->Data(),"READ");
+  TString *proName[28];
+  for(int ii=0; ii<28; ii++){
+    proName[ii] = new TString("MRC_pro_");
+    *proName[ii] += ii;
+  }
+
+  MRC_SC_2[0] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_2_SC_term1"))->ProjectionY(proName[0]->Data(), RbinMRC, RbinMRC));
+  MRC_SC_2[1] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_2_SC_term2"))->ProjectionY(proName[1]->Data(), RbinMRC, RbinMRC));
+  MRC_SC_2[0]->SetDirectory(0); MRC_SC_2[1]->SetDirectory(0); 
+  //
+  MRC_MC_2[0] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_2_MC_term1"))->ProjectionY(proName[2]->Data(), RbinMRC, RbinMRC));
+  MRC_MC_2[1] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_2_MC_term2"))->ProjectionY(proName[3]->Data(), RbinMRC, RbinMRC));
+  MRC_MC_2[0]->SetDirectory(0); MRC_MC_2[1]->SetDirectory(0); 
+  //
+  MRC_SC_3[0] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_3_SC_term1"))->ProjectionY(proName[4]->Data(), RbinMRC, RbinMRC));
+  MRC_SC_3[1] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_3_SC_term2"))->ProjectionY(proName[5]->Data(), RbinMRC, RbinMRC));
+  MRC_SC_3[2] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_3_SC_term3"))->ProjectionY(proName[6]->Data(), RbinMRC, RbinMRC));
+  MRC_SC_3[0]->SetDirectory(0); MRC_SC_3[1]->SetDirectory(0); MRC_SC_3[2]->SetDirectory(0);
+  //
+  MRC_MC_3[0] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_3_MC_term1"))->ProjectionY(proName[7]->Data(), RbinMRC, RbinMRC));
+  MRC_MC_3[1] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_3_MC_term2"))->ProjectionY(proName[8]->Data(), RbinMRC, RbinMRC));
+  MRC_MC_3[2] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_3_MC_term3"))->ProjectionY(proName[9]->Data(), RbinMRC, RbinMRC));
+  MRC_MC_3[3] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_3_MC_term4"))->ProjectionY(proName[10]->Data(), RbinMRC, RbinMRC));
+  MRC_MC_3[0]->SetDirectory(0); MRC_MC_3[1]->SetDirectory(0); MRC_MC_3[2]->SetDirectory(0); MRC_MC_3[3]->SetDirectory(0);
+  //
+  MRC_SC_4[0] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_SC_term1"))->ProjectionY(proName[11]->Data(), RbinMRC, RbinMRC));
+  MRC_SC_4[1] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_SC_term2"))->ProjectionY(proName[12]->Data(), RbinMRC, RbinMRC));
+  MRC_SC_4[2] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_SC_term3"))->ProjectionY(proName[13]->Data(), RbinMRC, RbinMRC));
+  MRC_SC_4[3] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_SC_term4"))->ProjectionY(proName[14]->Data(), RbinMRC, RbinMRC));
+  MRC_SC_4[4] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_SC_term5"))->ProjectionY(proName[15]->Data(), RbinMRC, RbinMRC));
+  MRC_SC_4[0]->SetDirectory(0); MRC_SC_4[1]->SetDirectory(0); MRC_SC_4[2]->SetDirectory(0); MRC_SC_4[3]->SetDirectory(0);
+  MRC_SC_4[4]->SetDirectory(0);
+  //
+  MRC_MC1_4[0] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_MC1_term1"))->ProjectionY(proName[16]->Data(), RbinMRC, RbinMRC));
+  MRC_MC1_4[1] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_MC1_term2"))->ProjectionY(proName[17]->Data(), RbinMRC, RbinMRC));
+  MRC_MC1_4[2] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_MC1_term3"))->ProjectionY(proName[18]->Data(), RbinMRC, RbinMRC));
+  MRC_MC1_4[3] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_MC1_term4"))->ProjectionY(proName[19]->Data(), RbinMRC, RbinMRC));
+  MRC_MC1_4[4] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_MC1_term5"))->ProjectionY(proName[20]->Data(), RbinMRC, RbinMRC));
+  MRC_MC1_4[5] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_MC1_term6"))->ProjectionY(proName[21]->Data(), RbinMRC, RbinMRC));
+  MRC_MC1_4[0]->SetDirectory(0); MRC_MC1_4[1]->SetDirectory(0); MRC_MC1_4[2]->SetDirectory(0); MRC_MC1_4[3]->SetDirectory(0);
+  MRC_MC1_4[4]->SetDirectory(0); MRC_MC1_4[5]->SetDirectory(0);
+  //
+  MRC_MC2_4[0] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_MC2_term1"))->ProjectionY(proName[22]->Data(), RbinMRC, RbinMRC));
+  MRC_MC2_4[1] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_MC2_term2"))->ProjectionY(proName[23]->Data(), RbinMRC, RbinMRC));
+  MRC_MC2_4[2] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_MC2_term3"))->ProjectionY(proName[24]->Data(), RbinMRC, RbinMRC));
+  MRC_MC2_4[3] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_MC2_term4"))->ProjectionY(proName[25]->Data(), RbinMRC, RbinMRC));
+  MRC_MC2_4[4] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_MC2_term5"))->ProjectionY(proName[26]->Data(), RbinMRC, RbinMRC));
+  MRC_MC2_4[5] = (TH1D*)(((TH2D*)MomResFile->Get("MRC_4_MC2_term6"))->ProjectionY(proName[27]->Data(), RbinMRC, RbinMRC));
+  MRC_MC2_4[0]->SetDirectory(0); MRC_MC2_4[1]->SetDirectory(0); MRC_MC2_4[2]->SetDirectory(0); MRC_MC2_4[3]->SetDirectory(0);
+  MRC_MC2_4[4]->SetDirectory(0); MRC_MC2_4[5]->SetDirectory(0);
+
+  if(!MRC){
+    for(int bin=1; bin<=MRC_SC_2[0]->GetNbinsX(); bin++){
+      MRC_SC_2[0]->SetBinContent(bin, 1.0); MRC_SC_2[1]->SetBinContent(bin, 1.0);
+      MRC_MC_2[0]->SetBinContent(bin, 1.0); MRC_MC_2[1]->SetBinContent(bin, 1.0);
+    }
+    for(int bin=1; bin<=MRC_SC_3[0]->GetNbinsX(); bin++){
+      MRC_SC_3[0]->SetBinContent(bin, 1.0); MRC_SC_3[1]->SetBinContent(bin, 1.0); MRC_SC_3[2]->SetBinContent(bin, 1.0);
+      MRC_MC_3[0]->SetBinContent(bin, 1.0); MRC_MC_3[1]->SetBinContent(bin, 1.0); MRC_MC_3[2]->SetBinContent(bin, 1.0);
+      MRC_MC_3[3]->SetBinContent(bin, 1.0);
+    }
+    for(int bin=1; bin<=MRC_SC_4[0]->GetNbinsX(); bin++){
+      MRC_SC_4[0]->SetBinContent(bin, 1.0); MRC_SC_4[1]->SetBinContent(bin, 1.0); MRC_SC_4[2]->SetBinContent(bin, 1.0);
+      MRC_SC_4[3]->SetBinContent(bin, 1.0); MRC_SC_4[4]->SetBinContent(bin, 1.0);
+      MRC_MC1_4[0]->SetBinContent(bin, 1.0); MRC_MC1_4[1]->SetBinContent(bin, 1.0); MRC_MC1_4[2]->SetBinContent(bin, 1.0);
+      MRC_MC1_4[3]->SetBinContent(bin, 1.0); MRC_MC1_4[4]->SetBinContent(bin, 1.0); MRC_MC1_4[5]->SetBinContent(bin, 1.0);
+      //
+      MRC_MC2_4[0]->SetBinContent(bin, 1.0); MRC_MC2_4[1]->SetBinContent(bin, 1.0); MRC_MC2_4[2]->SetBinContent(bin, 1.0);
+      MRC_MC2_4[3]->SetBinContent(bin, 1.0); MRC_MC2_4[4]->SetBinContent(bin, 1.0); MRC_MC2_4[5]->SetBinContent(bin, 1.0);
+    }
+  }
+  MomResFile->Close();
+  
+}
+
+
+double cubicInterpolate (double p[4], double x) {
+  return p[1] + 0.5 * x*(p[2] - p[0] + x*(2.0*p[0] - 5.0*p[1] + 4.0*p[2] - p[3] + x*(3.0*(p[1] - p[2]) + p[3] - p[0])));// Paulinternet
+}
+double bicubicInterpolate (double p[4][4], double x, double y) {
+       double arr[4];
+       arr[0] = cubicInterpolate(p[0], y);
+       arr[1] = cubicInterpolate(p[1], y);
+       arr[2] = cubicInterpolate(p[2], y);
+       arr[3] = cubicInterpolate(p[3], y);
+       return cubicInterpolate(arr, x);
+}
+double tricubicInterpolate (double p[4][4][4], double x, double y, double z) {
+       double arr[4];
+       arr[0] = bicubicInterpolate(p[0], y, z);
+       arr[1] = bicubicInterpolate(p[1], y, z);
+       arr[2] = bicubicInterpolate(p[2], y, z);
+       arr[3] = bicubicInterpolate(p[3], y, z);
+       return cubicInterpolate(arr, x);
+}
+float fact(float n){
+  return (n < 1.00001) ? 1 : fact(n - 1) * n;
+}
+//________________________________________________________________________________________
+void SetMuonCorrections(){
+  TString *name = new TString("MuonCorrection");
+  if(FileSetting==8) name->Append("_92percent");
+  
+  name->Append(".root");
+  TFile *MuonFile=new TFile(name->Data(),"READ");
+  TString *proName[22];
+  for(int ii=0; ii<22; ii++){
+    proName[ii] = new TString("MuonCorr_pro_");
+    *proName[ii] += ii;
+  }
+  C2muonCorrectionSC = (TH1D*)(((TH2D*)MuonFile->Get("C2muonCorrection_SC"))->ProjectionY(proName[0]->Data(), RbinMRC, RbinMRC));
+  C2muonCorrectionMC = (TH1D*)(((TH2D*)MuonFile->Get("C2muonCorrection_MC"))->ProjectionY(proName[1]->Data(), RbinMRC, RbinMRC));
+  WeightmuonCorrection = (TH1D*)(((TH2D*)MuonFile->Get("WeightmuonCorrection"))->ProjectionY(proName[2]->Data(), RbinMRC, RbinMRC));
+  C2muonCorrectionSC->SetDirectory(0); C2muonCorrectionMC->SetDirectory(0); WeightmuonCorrection->SetDirectory(0);
+  //
+  C3muonCorrectionSC[0] = (TH1D*)(((TH2D*)MuonFile->Get("C3muonCorrection_SC_term1"))->ProjectionY(proName[3]->Data(), RbinMRC, RbinMRC));
+  C3muonCorrectionSC[1] = (TH1D*)(((TH2D*)MuonFile->Get("C3muonCorrection_SC_term2"))->ProjectionY(proName[4]->Data(), RbinMRC, RbinMRC));
+  C3muonCorrectionMC[0] = (TH1D*)(((TH2D*)MuonFile->Get("C3muonCorrection_MC_term1"))->ProjectionY(proName[5]->Data(), RbinMRC, RbinMRC));
+  C3muonCorrectionMC[1] = (TH1D*)(((TH2D*)MuonFile->Get("C3muonCorrection_MC_term2"))->ProjectionY(proName[6]->Data(), RbinMRC, RbinMRC));
+  C3muonCorrectionMC[2] = (TH1D*)(((TH2D*)MuonFile->Get("C3muonCorrection_MC_term3"))->ProjectionY(proName[7]->Data(), RbinMRC, RbinMRC));
+  C3muonCorrectionSC[0]->SetDirectory(0); C3muonCorrectionSC[1]->SetDirectory(0);
+  C3muonCorrectionMC[0]->SetDirectory(0); C3muonCorrectionMC[1]->SetDirectory(0); C3muonCorrectionMC[2]->SetDirectory(0);
+  //
+  C4muonCorrectionSC[0] = (TH1D*)(((TH2D*)MuonFile->Get("C4muonCorrection_SC_term1"))->ProjectionY(proName[8]->Data(), RbinMRC, RbinMRC));
+  C4muonCorrectionSC[1] = (TH1D*)(((TH2D*)MuonFile->Get("C4muonCorrection_SC_term2"))->ProjectionY(proName[9]->Data(), RbinMRC, RbinMRC));
+  C4muonCorrectionSC[2] = (TH1D*)(((TH2D*)MuonFile->Get("C4muonCorrection_SC_term3"))->ProjectionY(proName[10]->Data(), RbinMRC, RbinMRC));
+  C4muonCorrectionSC[3] = (TH1D*)(((TH2D*)MuonFile->Get("C4muonCorrection_SC_term4"))->ProjectionY(proName[11]->Data(), RbinMRC, RbinMRC));
+  C4muonCorrectionSC[0]->SetDirectory(0); C4muonCorrectionSC[1]->SetDirectory(0);
+  C4muonCorrectionSC[2]->SetDirectory(0); C4muonCorrectionSC[3]->SetDirectory(0);
+  //
+  C4muonCorrectionMC1[0] = (TH1D*)(((TH2D*)MuonFile->Get("C4muonCorrection_MC1_term1"))->ProjectionY(proName[12]->Data(), RbinMRC, RbinMRC));
+  C4muonCorrectionMC1[1] = (TH1D*)(((TH2D*)MuonFile->Get("C4muonCorrection_MC1_term2"))->ProjectionY(proName[13]->Data(), RbinMRC, RbinMRC));
+  C4muonCorrectionMC1[2] = (TH1D*)(((TH2D*)MuonFile->Get("C4muonCorrection_MC1_term3"))->ProjectionY(proName[14]->Data(), RbinMRC, RbinMRC));
+  C4muonCorrectionMC1[3] = (TH1D*)(((TH2D*)MuonFile->Get("C4muonCorrection_MC1_term4"))->ProjectionY(proName[15]->Data(), RbinMRC, RbinMRC));
+  C4muonCorrectionMC1[4] = (TH1D*)(((TH2D*)MuonFile->Get("C4muonCorrection_MC1_term5"))->ProjectionY(proName[16]->Data(), RbinMRC, RbinMRC));
+  C4muonCorrectionMC1[0]->SetDirectory(0); C4muonCorrectionMC1[1]->SetDirectory(0);
+  C4muonCorrectionMC1[2]->SetDirectory(0); C4muonCorrectionMC1[3]->SetDirectory(0); C4muonCorrectionMC1[4]->SetDirectory(0);
+  //
+  C4muonCorrectionMC2[0] = (TH1D*)(((TH2D*)MuonFile->Get("C4muonCorrection_MC2_term1"))->ProjectionY(proName[17]->Data(), RbinMRC, RbinMRC));
+  C4muonCorrectionMC2[1] = (TH1D*)(((TH2D*)MuonFile->Get("C4muonCorrection_MC2_term2"))->ProjectionY(proName[18]->Data(), RbinMRC, RbinMRC));
+  C4muonCorrectionMC2[2] = (TH1D*)(((TH2D*)MuonFile->Get("C4muonCorrection_MC2_term3"))->ProjectionY(proName[19]->Data(), RbinMRC, RbinMRC));
+  C4muonCorrectionMC2[3] = (TH1D*)(((TH2D*)MuonFile->Get("C4muonCorrection_MC2_term4"))->ProjectionY(proName[20]->Data(), RbinMRC, RbinMRC));
+  C4muonCorrectionMC2[4] = (TH1D*)C4muonCorrectionSC[3]->Clone();
+  C4muonCorrectionMC2[0]->SetDirectory(0); C4muonCorrectionMC2[1]->SetDirectory(0);
+  C4muonCorrectionMC2[2]->SetDirectory(0); C4muonCorrectionMC2[3]->SetDirectory(0); C4muonCorrectionMC2[4]->SetDirectory(0);
+  //
+  //
+  if(!MuonCorrection){
+    for(int bin=1; bin<=C2muonCorrectionSC->GetNbinsX(); bin++){
+      C2muonCorrectionSC->SetBinContent(bin, 1.0);
+      C2muonCorrectionMC->SetBinContent(bin, 1.0);
+      WeightmuonCorrection->SetBinContent(bin, 1.0);
+    }
+    for(int bin=1; bin<=C3muonCorrectionSC[0]->GetNbinsX(); bin++){
+      C3muonCorrectionSC[0]->SetBinContent(bin, 1.0); C3muonCorrectionSC[1]->SetBinContent(bin, 1.0);
+      C3muonCorrectionMC[0]->SetBinContent(bin, 1.0); C3muonCorrectionMC[1]->SetBinContent(bin, 1.0); C3muonCorrectionMC[2]->SetBinContent(bin, 1.0); 
+    }
+    for(int bin=1; bin<=C4muonCorrectionSC[0]->GetNbinsX(); bin++){
+      C4muonCorrectionSC[0]->SetBinContent(bin, 1.0); C4muonCorrectionSC[1]->SetBinContent(bin, 1.0); C4muonCorrectionSC[2]->SetBinContent(bin, 1.0);
+      C4muonCorrectionSC[3]->SetBinContent(bin, 1.0);
+      C4muonCorrectionMC1[0]->SetBinContent(bin, 1.0); C4muonCorrectionMC1[1]->SetBinContent(bin, 1.0); C4muonCorrectionMC1[2]->SetBinContent(bin, 1.0); 
+      C4muonCorrectionMC1[3]->SetBinContent(bin, 1.0); C4muonCorrectionMC1[4]->SetBinContent(bin, 1.0);
+      //
+      C4muonCorrectionMC2[0]->SetBinContent(bin, 1.0); C4muonCorrectionMC2[1]->SetBinContent(bin, 1.0); C4muonCorrectionMC2[2]->SetBinContent(bin, 1.0); 
+      C4muonCorrectionMC2[3]->SetBinContent(bin, 1.0); C4muonCorrectionMC2[4]->SetBinContent(bin, 1.0);
+    }
+  }
+  
+  MuonFile->Close();
+}
+//________________________________________________________________________
+void SetFSIindex(Float_t R){
+  if(!MCcase_def){
+    if(PbPbcase){
+      if(Mbin_def==0) fFSIindex = 0;//0-5%
+      else if(Mbin_def==1) fFSIindex = 1;//5-10%
+      else if(Mbin_def<=3) fFSIindex = 2;//10-20%
+      else if(Mbin_def<=5) fFSIindex = 3;//20-30%
+      else if(Mbin_def<=7) fFSIindex = 4;//30-40%
+      else if(Mbin_def<=9) fFSIindex = 5;//40-50%
+      else if(Mbin_def<=12) fFSIindex = 6;//40-50%
+      else if(Mbin_def<=15) fFSIindex = 7;//40-50%
+      else if(Mbin_def<=18) fFSIindex = 8;//40-50%
+      else fFSIindex = 8;//90-100%
+    }else fFSIindex = 9;// pp and pPb
+  }else{// FSI binning for MC 
+    if(R>=10.) fFSIindex = 0;
+    else if(R>=9.) fFSIindex = 1;
+    else if(R>=8.) fFSIindex = 2;
+    else if(R>=7.) fFSIindex = 3;
+    else if(R>=6.) fFSIindex = 4;
+    else if(R>=5.) fFSIindex = 5;
+    else if(R>=4.) fFSIindex = 6;
+    else if(R>=3.) fFSIindex = 7;
+    else if(R>=2.) fFSIindex = 8;
+    else fFSIindex = 9;
+  }
+}
+//________________________________________________________________________
+Float_t FSICorrelation(Int_t charge1, Int_t charge2, Float_t qinv){
+  // returns 2-particle Coulomb correlations = K2
+  Int_t qbinL = fFSIss[fFSIindex]->GetXaxis()->FindBin(qinv-fFSIss[fFSIindex]->GetXaxis()->GetBinWidth(1)/2.);
+  Int_t qbinH = qbinL+1;
+  if(qbinL <= 0) return 1.0;
+  if(qbinH > fFSIss[fFSIindex]->GetNbinsX()) {// Scaled Gamov approximation 
+    int chargeproduct = 1;
+    if(charge1!=charge2) {
+      chargeproduct = -1;
+      Float_t ScaleFac = (fFSIos[fFSIindex]->GetBinContent(fFSIos[fFSIindex]->GetNbinsX()-1) - 1);
+      ScaleFac /= (Gamov(chargeproduct, fFSIos[fFSIindex]->GetXaxis()->GetBinCenter(fFSIos[fFSIindex]->GetNbinsX()-1)) - 1);
+      return ( (Gamov(chargeproduct, qinv)-1)*ScaleFac + 1); 
+    }else{
+      Float_t ScaleFac = (fFSIss[fFSIindex]->GetBinContent(fFSIss[fFSIindex]->GetNbinsX()-1) - 1);
+      ScaleFac /= (Gamov(chargeproduct, fFSIss[fFSIindex]->GetXaxis()->GetBinCenter(fFSIss[fFSIindex]->GetNbinsX()-1)) - 1);
+      return ( (Gamov(chargeproduct, qinv)-1)*ScaleFac + 1);
+    }
+  }
+  
+  Float_t slope=0;
+  if(charge1==charge2){
+    slope = fFSIss[fFSIindex]->GetBinContent(qbinL) - fFSIss[fFSIindex]->GetBinContent(qbinH);
+    slope /= fFSIss[fFSIindex]->GetXaxis()->GetBinCenter(qbinL) - fFSIss[fFSIindex]->GetXaxis()->GetBinCenter(qbinH);
+    return (slope*(qinv - fFSIss[fFSIindex]->GetXaxis()->GetBinCenter(qbinL)) + fFSIss[fFSIindex]->GetBinContent(qbinL));
+  }else {
+    slope = fFSIos[fFSIindex]->GetBinContent(qbinL) - fFSIos[fFSIindex]->GetBinContent(qbinH);
+    slope /= fFSIos[fFSIindex]->GetXaxis()->GetBinCenter(qbinL) - fFSIos[fFSIindex]->GetXaxis()->GetBinCenter(qbinH);
+    return (slope*(qinv - fFSIos[fFSIindex]->GetXaxis()->GetBinCenter(qbinL)) + fFSIos[fFSIindex]->GetBinContent(qbinL));
+  }
+}
diff --git a/PWGCF/FEMTOSCOPY/macros/Plot_plotsFourPion.C b/PWGCF/FEMTOSCOPY/macros/Plot_plotsFourPion.C
new file mode 100755 (executable)
index 0000000..0e9bb7c
--- /dev/null
@@ -0,0 +1,1139 @@
+#include <math.h>
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <Riostream.h>
+
+#include "TVector2.h"
+#include "TFile.h"
+#include "TString.h"
+#include "TF1.h"
+#include "TH1.h"
+#include "TH2.h"
+#include "TH3.h"
+#include "TProfile.h"
+#include "TProfile2D.h"
+#include "TMath.h"
+#include "TText.h"
+#include "TRandom3.h"
+#include "TArray.h"
+#include "TLegend.h"
+#include "TStyle.h"
+#include "TMinuit.h"
+#include "TCanvas.h"
+#include "TPad.h"
+
+#define BohrR 1963.6885
+#define FmToGeV 0.19733 // conversion to fm
+#define PI 3.1415926
+#define masspiC 0.1395702 // pi+ mass (GeV/c^2)
+
+using namespace std;
+
+const int ChProdBOI=0;// 0=SameCharge, 1=MixedCharge1, 2=MixedCharge2
+const int KTBin=0;// Kt3 bin. 0=low Kt3 bin.  1=high Kt3 bin
+const int MBOI=0;// Centrality bin: 0-9
+const int GbinPlot=int( (34) /2. ) + 55;// +5 (Rcoh=0), +25 (Rcoh=Rch) or +55 for extended G range
+const int Q3binChi2= 4;// 2-5
+const int Q4binChi2= 7;// 3-7
+
+//
+//
+//
+int TextFont=42;// 63, or 42
+float SizeLabel=0.06;// 20(63 font), 0.08(42 font)
+float SizeLegend=0.04;// .08
+float SizeTitle=0.06;// 
+float SizeSpecif=0.045;// 
+float SF1=2/3.*0.95;
+float SF2=1/2.*0.95;
+
+double RightMargin=0.004;// 0.002
+//
+
+void Plot_plotsFourPion(){
+
+  gStyle->SetOptStat(0);
+  gStyle->SetOptDate(0);
+  
+  int Q3_meanpT[2][5]={{0,213,228,233,237},{0,316,336,354,366}};// low then high KT3
+  int Q4_meanpT[2][7]={{0,0,221,229,234,238,241},{0,0,325,335,344,351,355}};// low then high KT4
+
+  TFile *files[3][2][2][10];// SC/MC1/MC2, +/-, KT, MBINS
+  //
+
+  TH1D *C3QS[2][2][2][10];// SC/MC, +/-, KT, Mbin
+  TH1D *c3QS[2][2][2][10];// SC/MC, +/-, KT, Mbin
+  TH1D *C3QSBuilt[2][2][10];// +/-, KT, Mbin
+  TH2D *C3QSBuilt2D[2][2][10];// +/-, KT, Mbin
+  TH2D *C3QSNegBuilt2D[2][2][10];// +/-, KT, Mbin
+  //
+  TH1D *C4QS[3][2][2][10];// SC/MC, +/-, KT, Mbin
+  TH1D *c4QS[3][2][2][10];// SC/MC, +/-, KT, Mbin
+  TH1D *c4QSstage1[3][2][2][10];// SC/MC, +/-, KT, Mbin
+  TH1D *c4QSstage2[2][2][10];// +/-, KT, Mbin
+  TH1D *C4QSBuilt[2][2][10];// +/-, KT, Mbin
+  TH2D *C4QSBuilt2D[2][2][10];// +/-, KT, Mbin
+  TH2D *C4QSNegBuilt2D[2][2][10];// +/-, KT, Mbin
+  //
+  TH1D *r3[2][2][10];// +/-, KT, Mbin
+  TH1D *r42[2][2][10];// +/-, KT, Mbin
+  
+  //
+  //////////////////////////////
+
+  // Start File access
+  for(int mb=0; mb<10; mb++){
+    for(int ChComb=0; ChComb<3; ChComb++) {// SC or MC1 or MC2
+      for(int ch=0; ch<2; ch++) {// - or +
+       for(int KT=0; KT<2; KT++) {// KT bin
+         if(ChComb==2 && ch!=0) continue;
+
+         TString *name = new TString("OutFiles/OutFile");
+         if(ChComb==0) name->Append("SC");
+         else if(ChComb==1) name->Append("MC1");
+         else name->Append("MC2");
+         //
+         if(ch==0) name->Append("_Neg_");
+         else name->Append("_Pos_");
+         name->Append("KT_");
+         *name += KT+1;
+         name->Append("_M");
+         if(mb<10) {*name += mb;}
+         else {*name += 0;}
+         name->Append(".root");
+         files[ChComb][ch][KT][mb] = new TFile(name->Data(),"READ");
+         ///////////////////////////////
+         if(ChComb!=2){
+           C3QS[ChComb][ch][KT][mb]=(TH1D*)files[ChComb][ch][KT][mb]->Get("C3QS");
+           c3QS[ChComb][ch][KT][mb]=(TH1D*)files[ChComb][ch][KT][mb]->Get("c3QS");
+           C3QS[ChComb][ch][KT][mb]->SetDirectory(0); c3QS[ChComb][ch][KT][mb]->SetDirectory(0); 
+           C3QS[ChComb][ch][KT][mb]->GetXaxis()->SetLabelFont(TextFont);  C3QS[ChComb][ch][KT][mb]->GetYaxis()->SetLabelFont(TextFont);
+           c3QS[ChComb][ch][KT][mb]->GetXaxis()->SetLabelFont(TextFont);  c3QS[ChComb][ch][KT][mb]->GetYaxis()->SetLabelFont(TextFont);
+           C3QS[ChComb][ch][KT][mb]->GetXaxis()->SetTitleFont(TextFont);  C3QS[ChComb][ch][KT][mb]->GetYaxis()->SetTitleFont(TextFont);
+           c3QS[ChComb][ch][KT][mb]->GetXaxis()->SetTitleFont(TextFont);  c3QS[ChComb][ch][KT][mb]->GetYaxis()->SetTitleFont(TextFont);
+           C3QS[ChComb][ch][KT][mb]->GetXaxis()->SetTitle("#font[12]{Q}_{3} (GeV/#font[12]{c})");
+           c3QS[ChComb][ch][KT][mb]->GetXaxis()->SetTitle("#font[12]{Q}_{3} (GeV/#font[12]{c})");
+           C3QS[ChComb][ch][KT][mb]->GetYaxis()->SetTitle("#font[12]{C}_{3} or #font[12]{#bf{c}}_{3}");
+           c3QS[ChComb][ch][KT][mb]->GetYaxis()->SetTitle("#font[12]{#bf{c}}_{3}");
+         }
+         C4QS[ChComb][ch][KT][mb]=(TH1D*)files[ChComb][ch][KT][mb]->Get("C4QS");
+         c4QS[ChComb][ch][KT][mb]=(TH1D*)files[ChComb][ch][KT][mb]->Get("c4QS");
+         c4QSstage1[ChComb][ch][KT][mb]=(TH1D*)files[ChComb][ch][KT][mb]->Get("c4QS_RemovalStage1");
+         C4QS[ChComb][ch][KT][mb]->SetDirectory(0); c4QS[ChComb][ch][KT][mb]->SetDirectory(0); 
+         c4QSstage1[ChComb][ch][KT][mb]->SetDirectory(0);
+         C4QS[ChComb][ch][KT][mb]->GetXaxis()->SetTitle("#font[12]{Q}_{4} (GeV/#font[12]{c})");
+         c4QS[ChComb][ch][KT][mb]->GetXaxis()->SetTitle("#font[12]{Q}_{4} (GeV/#font[12]{c})");
+         C4QS[ChComb][ch][KT][mb]->GetYaxis()->SetTitle("#font[12]{C}_{4} or #font[12]{#bf{c}}_{4}");
+         c4QS[ChComb][ch][KT][mb]->GetYaxis()->SetTitle("#font[12]{#bf{c}}_{4}");
+         
+         if(ChComb==0){
+           c4QSstage2[ch][KT][mb]=(TH1D*)files[ChComb][ch][KT][mb]->Get("c4QS_RemovalStage2");
+           C3QSBuilt[ch][KT][mb]=(TH1D*)files[ChComb][ch][KT][mb]->Get("C3QS_built");
+           C4QSBuilt[ch][KT][mb]=(TH1D*)files[ChComb][ch][KT][mb]->Get("C4QS_built");
+           C3QSBuilt2D[ch][KT][mb]=(TH2D*)files[ChComb][ch][KT][mb]->Get("C3QS_built2D");
+           C4QSBuilt2D[ch][KT][mb]=(TH2D*)files[ChComb][ch][KT][mb]->Get("C4QS_built2D");
+           C3QSNegBuilt2D[ch][KT][mb]=(TH2D*)files[ChComb][ch][KT][mb]->Get("C3QS_Negbuilt2D");
+           C4QSNegBuilt2D[ch][KT][mb]=(TH2D*)files[ChComb][ch][KT][mb]->Get("C4QS_Negbuilt2D");
+           //
+           c4QSstage2[ch][KT][mb]->SetDirectory(0);  C3QSBuilt[ch][KT][mb]->SetDirectory(0);  C4QSBuilt[ch][KT][mb]->SetDirectory(0); 
+           C3QSBuilt2D[ch][KT][mb]->SetDirectory(0);  C4QSBuilt2D[ch][KT][mb]->SetDirectory(0); 
+           C3QSNegBuilt2D[ch][KT][mb]->SetDirectory(0);  C4QSNegBuilt2D[ch][KT][mb]->SetDirectory(0);
+           //
+           r3[ch][KT][mb]=(TH1D*)files[ChComb][ch][KT][mb]->Get("r3");
+           r3[ch][KT][mb]->SetDirectory(0);
+           //
+           r42[ch][KT][mb]=(TH1D*)files[ChComb][ch][KT][mb]->Get("r42");
+           r42[ch][KT][mb]->SetDirectory(0);
+           //
+           C4QS[ChComb][ch][KT][mb]->SetBinContent(2,100); C4QS[ChComb][ch][KT][mb]->SetBinError(2,100);
+           c4QS[ChComb][ch][KT][mb]->SetBinContent(2,100); c4QS[ChComb][ch][KT][mb]->SetBinError(2,100);
+           c4QSstage1[ChComb][ch][KT][mb]->SetBinContent(2,100); c4QSstage1[ChComb][ch][KT][mb]->SetBinError(2,100);
+           c4QSstage2[ch][KT][mb]->SetBinContent(2,100); c4QSstage2[ch][KT][mb]->SetBinError(2,100);
+         }
+         files[ChComb][ch][KT][mb]->Close();
+       }// KT
+      }// ch
+    }// ChComb
+  }// mb
+  
+  TF1 *Unity = new TF1("Unity","1",0,100);
+  Unity->SetLineStyle(2);
+  Unity->SetLineColor(1);
+
+  
+  
+  TH1D *C3QSmerged[2][2][10];// SC/MC, KT, Mbin
+  TH1D *c3QSmerged[2][2][10];// SC/MC, KT, Mbin
+  TH1D *C3QSBuiltmerged[2][10];// KT, Mbin
+  TH2D *C3QSBuiltmerged2D[2][10];// KT, Mbin
+  TH2D *C3QSNegBuiltmerged2D[2][10];// KT, Mbin
+  //
+  TH1D *C4QSmerged[3][2][10];// SC/MC, KT, Mbin
+  TH1D *c4QSmerged[3][2][10];// SC/MC, KT, Mbin
+  TH1D *c4QSstage1merged[3][2][10];// SC/MC, KT, Mbin
+  TH1D *c4QSstage2merged[2][10];// KT, Mbin
+  TH1D *C4QSBuiltmerged[2][10];// KT, Mbin
+  TH2D *C4QSBuiltmerged2D[2][10];// KT, Mbin
+  TH2D *C4QSNegBuiltmerged2D[2][10];// KT, Mbin
+  
+ for(int mb=0; mb<10; mb++){
+   for(int ChComb=0; ChComb<3; ChComb++) {
+     for(int KT=0; KT<2; KT++) {
+       if(ChComb!=2){
+        C3QSmerged[ChComb][KT][mb] = (TH1D*)C3QS[ChComb][0][KT][mb]->Clone();
+        c3QSmerged[ChComb][KT][mb] = (TH1D*)c3QS[ChComb][0][KT][mb]->Clone();
+       }
+       //
+       C4QSmerged[ChComb][KT][mb] = (TH1D*)C4QS[ChComb][0][KT][mb]->Clone();
+       c4QSmerged[ChComb][KT][mb] = (TH1D*)c4QS[ChComb][0][KT][mb]->Clone();
+       c4QSstage1merged[ChComb][KT][mb] = (TH1D*)c4QSstage1[ChComb][0][KT][mb]->Clone();
+       //
+       if(ChComb==0) {
+        c4QSstage2merged[KT][mb] = (TH1D*)c4QSstage2[0][KT][mb]->Clone();
+        C3QSBuiltmerged[KT][mb] = (TH1D*)C3QSBuilt[0][KT][mb]->Clone();
+        C4QSBuiltmerged[KT][mb] = (TH1D*)C4QSBuilt[0][KT][mb]->Clone();
+        C3QSBuiltmerged2D[KT][mb] = (TH2D*)C3QSBuilt2D[0][KT][mb]->Clone();
+        C4QSBuiltmerged2D[KT][mb] = (TH2D*)C4QSBuilt2D[0][KT][mb]->Clone();
+        C3QSNegBuiltmerged2D[KT][mb] = (TH2D*)C3QSNegBuilt2D[0][KT][mb]->Clone();
+        C4QSNegBuiltmerged2D[KT][mb] = (TH2D*)C4QSNegBuilt2D[0][KT][mb]->Clone();
+       }
+       
+       if(ChComb!=2){
+        for(int bin=1; bin<=C3QSmerged[ChComb][KT][mb]->GetNbinsX(); bin++){
+          double value=0, value_e=0;
+          value = (C3QS[ChComb][0][KT][mb]->GetBinContent(bin) + C3QS[ChComb][1][KT][mb]->GetBinContent(bin)) / 2.;
+          value_e = sqrt(pow(C3QS[ChComb][0][KT][mb]->GetBinError(bin),2) + pow(C3QS[ChComb][1][KT][mb]->GetBinError(bin),2)) / sqrt(2.);
+          C3QSmerged[ChComb][KT][mb]->SetBinContent(bin, value);  C3QSmerged[ChComb][KT][mb]->SetBinError(bin, value_e);
+          //
+          value = (c3QS[ChComb][0][KT][mb]->GetBinContent(bin) + c3QS[ChComb][1][KT][mb]->GetBinContent(bin)) / 2.;
+          value_e = sqrt(pow(c3QS[ChComb][0][KT][mb]->GetBinError(bin),2) + pow(c3QS[ChComb][1][KT][mb]->GetBinError(bin),2)) / sqrt(2.);
+          c3QSmerged[ChComb][KT][mb]->SetBinContent(bin, value);  c3QSmerged[ChComb][KT][mb]->SetBinError(bin, value_e);
+          //
+          if(ChComb==0){
+            value = (C3QSBuilt[0][KT][mb]->GetBinContent(bin) + C3QSBuilt[1][KT][mb]->GetBinContent(bin)) / 2.;
+            value_e = 0;
+            C3QSBuiltmerged[KT][mb]->SetBinContent(bin, value);  C3QSBuiltmerged[KT][mb]->SetBinError(bin, value_e);
+            //
+            for(int binG=1; binG<=C3QSBuiltmerged2D[KT][mb]->GetNbinsX(); binG++){
+              value = (C3QSBuilt2D[0][KT][mb]->GetBinContent(binG, bin) + C3QSBuilt2D[1][KT][mb]->GetBinContent(binG, bin)) / 2.;
+              value_e = 0;
+              C3QSBuiltmerged2D[KT][mb]->SetBinContent(binG, bin, value);  C3QSBuiltmerged2D[KT][mb]->SetBinError(binG, bin, value_e);
+              //
+              value = (C3QSNegBuilt2D[0][KT][mb]->GetBinContent(binG, bin) + C3QSNegBuilt2D[1][KT][mb]->GetBinContent(binG, bin)) / 2.;
+              value_e = 0;
+              C3QSNegBuiltmerged2D[KT][mb]->SetBinContent(binG, bin, value);  C3QSNegBuiltmerged2D[KT][mb]->SetBinError(binG, bin, value_e);
+            }
+          }
+        }
+       }
+       //cout<<ChComb<<"  "<<KT<<"  "<<mb<<endl;
+       //cout<<C4QS[ChComb][1][KT][mb]->GetBinContent(4)<<endl;
+       //
+       if(ChComb==2) continue;
+       for(int bin=1; bin<=C4QSmerged[ChComb][KT][mb]->GetNbinsX(); bin++){
+        double value = (C4QS[ChComb][0][KT][mb]->GetBinContent(bin) + C4QS[ChComb][1][KT][mb]->GetBinContent(bin)) / 2.;
+        double value_e = sqrt(pow(C4QS[ChComb][0][KT][mb]->GetBinError(bin),2) + pow(C4QS[ChComb][1][KT][mb]->GetBinError(bin),2)) / sqrt(2.);
+        C4QSmerged[ChComb][KT][mb]->SetBinContent(bin, value);  C4QSmerged[ChComb][KT][mb]->SetBinError(bin, value_e);
+        //
+        value = (c4QS[ChComb][0][KT][mb]->GetBinContent(bin) + c4QS[ChComb][1][KT][mb]->GetBinContent(bin)) / 2.;
+        value_e = sqrt(pow(c4QS[ChComb][0][KT][mb]->GetBinError(bin),2) + pow(c4QS[ChComb][1][KT][mb]->GetBinError(bin),2)) / sqrt(2.);
+        c4QSmerged[ChComb][KT][mb]->SetBinContent(bin, value);  c4QSmerged[ChComb][KT][mb]->SetBinError(bin, value_e);
+        //
+        value = (c4QSstage1[ChComb][0][KT][mb]->GetBinContent(bin) + c4QSstage1[ChComb][1][KT][mb]->GetBinContent(bin)) / 2.;
+        value_e = sqrt(pow(c4QSstage1[ChComb][0][KT][mb]->GetBinError(bin),2) + pow(c4QSstage1[ChComb][1][KT][mb]->GetBinError(bin),2)) / sqrt(2.);
+        c4QSstage1merged[ChComb][KT][mb]->SetBinContent(bin, value);  c4QSstage1merged[ChComb][KT][mb]->SetBinError(bin, value_e);
+        //
+        if(ChComb==0){
+          value = (c4QSstage2[0][KT][mb]->GetBinContent(bin) + c4QSstage2[1][KT][mb]->GetBinContent(bin)) / 2.;
+          value_e = sqrt(pow(c4QSstage2[0][KT][mb]->GetBinError(bin),2) + pow(c4QSstage2[1][KT][mb]->GetBinError(bin),2)) / sqrt(2.);
+          c4QSstage2merged[KT][mb]->SetBinContent(bin, value);  c4QSstage2merged[KT][mb]->SetBinError(bin, value_e);
+          //
+          value = (C4QSBuilt[0][KT][mb]->GetBinContent(bin) + C4QSBuilt[1][KT][mb]->GetBinContent(bin)) / 2.;
+          value_e = 0;
+          C4QSBuiltmerged[KT][mb]->SetBinContent(bin, value);  C4QSBuiltmerged[KT][mb]->SetBinError(bin, value_e);
+          //
+          for(int binG=1; binG<=C4QSBuiltmerged2D[KT][mb]->GetNbinsX(); binG++){
+            value = (C4QSBuilt2D[0][KT][mb]->GetBinContent(binG, bin) + C4QSBuilt2D[1][KT][mb]->GetBinContent(binG, bin)) / 2.;
+            value_e = 0;
+            C4QSBuiltmerged2D[KT][mb]->SetBinContent(binG, bin, value);  C4QSBuiltmerged2D[KT][mb]->SetBinError(binG, bin, value_e);
+            //
+            value = (C4QSNegBuilt2D[0][KT][mb]->GetBinContent(binG, bin) + C4QSNegBuilt2D[1][KT][mb]->GetBinContent(binG, bin)) / 2.;
+            value_e = 0;
+            C4QSNegBuiltmerged2D[KT][mb]->SetBinContent(binG, bin, value);  C4QSNegBuiltmerged2D[KT][mb]->SetBinError(binG, bin, value_e);
+          }
+        }
+       }
+       
+     }// KT
+   }// ChComb
+ }// mb
+  
+  // merge r3 histogram centralities
+ TH1D *r3merged[2];// KT
+ TH1D *r4merged[2];// KT
+  for(int KT=0; KT<2; KT++) {
+    r3merged[KT]=(TH1D*)r3[0][KT][0]->Clone();
+    r4merged[KT]=(TH1D*)r42[0][KT][0]->Clone();
+  }
+
+  double mergedValue_r3[2][20]={{0}};// KT
+  double mergedError_r3[2][20]={{0}};// KT
+  double ErrorWeightSum_r3[2][20]={{0}};// KT
+  double EnSum_r3[2][20]={{0}};// KT
+  //
+  double mergedValue_r4[2][20]={{0}};// KT
+  double mergedError_r4[2][20]={{0}};// KT
+  double ErrorWeightSum_r4[2][20]={{0}};// KT
+  double EnSum_r4[2][20]={{0}};// KT
+  for(int mb=0; mb<10; mb++){
+    for(int ch=0; ch<2; ch++) {
+      for(int KT=0; KT<2; KT++) {
+       for(int bin=1; bin<=20; bin++){
+         if(r3[ch][KT][mb]->GetBinError(bin) == 0) continue;
+         mergedValue_r3[KT][bin] += r3[ch][KT][mb]->GetBinContent(bin) / pow(r3[ch][KT][mb]->GetBinError(bin),2);
+         mergedError_r3[KT][bin] += pow(r3[ch][KT][mb]->GetBinError(bin),2) / pow(r3[ch][KT][mb]->GetBinError(bin),2);
+         ErrorWeightSum_r3[KT][bin] += 1.0 / pow(r3[ch][KT][mb]->GetBinError(bin),2);
+         EnSum_r3[KT][bin]++;
+       }// bin
+      }// KT
+    }// ch
+  }// mb
+  
+  for(int mb=0; mb<10; mb++){
+    for(int ch=0; ch<2; ch++) {
+      for(int KT=0; KT<2; KT++) {
+       for(int bin=1; bin<=20; bin++){
+         if(r42[ch][KT][mb]->GetBinError(bin) == 0) continue;
+         mergedValue_r4[KT][bin] += r42[ch][KT][mb]->GetBinContent(bin) / pow(r42[ch][KT][mb]->GetBinError(bin),2);
+         mergedError_r4[KT][bin] += pow(r42[ch][KT][mb]->GetBinError(bin),2) / pow(r42[ch][KT][mb]->GetBinError(bin),2);
+         ErrorWeightSum_r4[KT][bin] += 1.0 / pow(r42[ch][KT][mb]->GetBinError(bin),2);
+         EnSum_r4[KT][bin]++;
+       }// bin
+      }// KT
+    }// ch
+  }// mb
+
+
+  for(int bin=1; bin<=20; bin++){
+    for(int KT=0; KT<2; KT++) {
+      if(ErrorWeightSum_r3[KT][bin] ==0) continue;
+      if(EnSum_r3[KT][bin] == 0) continue;
+      r3merged[KT]->SetBinContent(bin, mergedValue_r3[KT][bin] / ErrorWeightSum_r3[KT][bin]);
+      r3merged[KT]->SetBinError(bin, sqrt(mergedError_r3[KT][bin] / ErrorWeightSum_r3[KT][bin]));
+    }
+  }
+  
+  for(int bin=1; bin<=20; bin++){
+    for(int KT=0; KT<2; KT++) {
+      if(ErrorWeightSum_r4[KT][bin] ==0) continue;
+      if(EnSum_r4[KT][bin] == 0) continue;
+      r4merged[KT]->SetBinContent(bin, mergedValue_r4[KT][bin] / ErrorWeightSum_r4[KT][bin]);
+      r4merged[KT]->SetBinError(bin, sqrt(mergedError_r4[KT][bin] / ErrorWeightSum_r4[KT][bin]) / sqrt(EnSum_r4[KT][bin]));
+    }
+  }
+  
+
+  //////////////////////////////////////////////////////////////////////////
+  // 3-pion
+  if(ChProdBOI!=2){
+    
+    TCanvas *can1 = new TCanvas("can1", "can1",10,0,700,600);// 11,53,700,500
+    can1->SetHighLightColor(2);
+    gStyle->SetOptFit(0111);
+    can1->SetFillColor(0);//10
+    can1->SetBorderMode(0);
+    can1->SetBorderSize(2);
+    can1->SetFrameFillColor(0);
+    can1->SetFrameBorderMode(0);
+    can1->SetFrameBorderMode(0);
+  
+  TPad *pad1 = new TPad("pad1","pad1",0.0,0.0,1.,1.);
+  //gPad->SetGridx(1);
+  //gPad->SetGridy(1);
+  gPad->SetTickx();
+  gPad->SetTicky();
+  pad1->SetTopMargin(0.0);//0.05
+  pad1->SetRightMargin(0.0);//1e-2
+  pad1->SetBottomMargin(0.0);//0.12
+  pad1->Draw();
+  pad1->cd(1);
+  gPad->SetLeftMargin(0.14); gPad->SetRightMargin(0.04);
+  gPad->SetTopMargin(0.03); gPad->SetBottomMargin(0.14);
+  TLegend *legend1 = new TLegend(.42,.5, .92,.8,NULL,"brNDC");//.45 or .4 for x1
+  legend1->SetBorderSize(0);
+  legend1->SetFillColor(0);
+  legend1->SetTextFont(TextFont);
+  legend1->SetTextSize(SizeLegend);
+
+  C3QSmerged[ChProdBOI][KTBin][MBOI]->GetXaxis()->SetTitleSize(SizeTitle);
+  C3QSmerged[ChProdBOI][KTBin][MBOI]->GetXaxis()->SetLabelSize(SizeLabel);
+  C3QSmerged[ChProdBOI][KTBin][MBOI]->GetYaxis()->SetTitleSize(SizeTitle);
+  C3QSmerged[ChProdBOI][KTBin][MBOI]->GetYaxis()->SetLabelSize(SizeLabel);
+  C3QSmerged[ChProdBOI][KTBin][MBOI]->GetXaxis()->SetTitleOffset(1.05);
+  C3QSmerged[ChProdBOI][KTBin][MBOI]->GetYaxis()->SetTitleOffset(1.1);
+  C3QSmerged[ChProdBOI][KTBin][MBOI]->GetXaxis()->SetNdivisions(606);
+  C3QSmerged[ChProdBOI][KTBin][MBOI]->GetYaxis()->SetNdivisions(505);
+  //
+  //TH1D *C3QS_Syst = new TH1D("C3QS_Syst","",200,0.,0.2);
+  //TH1D *C3QSBuilt_Syst = new TH1D("C3QSBuilt_Syst","",200,0.,0.2);
+  TH1D *C3QS_Syst = (TH1D*)C3QSmerged[ChProdBOI][KTBin][MBOI]->Clone();
+  TH1D *C3QSBuilt_Syst = (TH1D*)C3QSBuiltmerged[KTBin][MBOI]->Clone();
+
+  for(int bin=1; bin<=C3QS_Syst->GetNbinsX(); bin++){
+    double q3 = C3QS_Syst->GetXaxis()->GetBinCenter(bin);
+    C3QS_Syst->SetBinContent(bin, 4.7);
+    double syst1 = pow(0.001,2);// cc
+    syst1 += pow(0.002 - 0.002*q3/0.1,2);// 11h to 10h
+    syst1 += pow(0.9913 - 0.2231*q3 - 1,2);// f coefficients, r*<70
+    syst1 += pow(0.9847 + 0.358*q3 - 2.133*q3*q3 - 1,2);// MRC
+    syst1 += pow(0.975 + 0.4189*q3 - 2.055*q3*q3 - 1,2);// Muon, 92%
+    syst1 += pow(0.936 + 1.194*q3 - 5.912*q3*q3 - 1,2);// fc2 scale
+    syst1 += pow(0.125*exp(-61.38*q3),2);// K factorization
+    syst1 = sqrt(syst1);
+    syst1 *= C3QSmerged[ChProdBOI][KTBin][MBOI]->GetBinContent(bin);
+    C3QS_Syst->SetBinError(bin, syst1);
+    // Built
+    C3QSBuilt_Syst->SetBinContent(bin, 4.7);
+    double syst2 = pow(0.002 - 0.002*q3/0.1,2);// 11h to 10h
+    syst2 += pow(0.9856 + 0.3285*q3 - 1.897*q3*q3 - 1,2);// MRC
+    syst2 += pow(0.9786 + 0.421*q3 - 2.108*q3*q3 - 1,2);// Muon, 92%
+    syst2 += pow(0.946 + 0.849*q3 - 3.316*q3*q3 - 1,2);// fc2 scale
+    syst2 += pow(0.0103*exp(-41.68*q3),2);// Interpolator
+    syst2 = sqrt(syst2);
+    syst2 *= C3QSBuiltmerged[KTBin][MBOI]->GetBinContent(bin);
+    C3QSBuilt_Syst->SetBinError(bin, syst2);
+  }
+  double Syst_forChi2_3[15]={0};
+  for(int bin=1; bin<=15; bin++){
+    double q3 = C3QSmerged[ChProdBOI][KTBin][MBOI]->GetXaxis()->GetBinCenter(bin);
+    int SystBin = C3QSBuilt_Syst->GetXaxis()->FindBin(q3);
+    //Syst_forChi2_3[bin-1] = fabs(C3QS_Syst->GetBinError(SystBin) - C3QSBuilt_Syst->GetBinError(SystBin));
+    double SystPercent_Diff = sqrt(pow(0.125*exp(-61.38*q3*sqrt(2.)),2) + pow(0.9913 - 0.2231*q3 - 1,2) + pow(0.0103*exp(-41.68*q3),2));// K, f coefficients, Interpolator
+    Syst_forChi2_3[bin-1] = SystPercent_Diff * C3QSmerged[ChProdBOI][KTBin][MBOI]->GetBinContent(bin);
+    //cout<<Syst_forChi2_3[bin-1]<<endl;
+  }
+  C3QS_Syst->SetBinContent(1,100); C3QSBuilt_Syst->SetBinContent(1,100); 
+  C3QS_Syst->SetMarkerSize(0); C3QS_Syst->SetFillColor(kBlue-10);
+  C3QS_Syst->SetMarkerColor(kBlue-10);
+  C3QSBuilt_Syst->SetMarkerSize(0); C3QSBuilt_Syst->SetFillColor(1); //C3QSBuilt_Syst->SetFillStyle(3004);
+  C3QSBuilt_Syst->SetMarkerColor(1);
+  C3QS_Syst->GetXaxis()->SetRangeUser(0.01,0.2); C3QSBuilt_Syst->GetXaxis()->SetRangeUser(0.01,0.2);
+  //
+  C3QSBuiltmerged[KTBin][MBOI]->GetXaxis()->SetRange(2,15);
+  C3QSmerged[ChProdBOI][KTBin][MBOI]->SetMaximum(5.1);
+  C3QSmerged[ChProdBOI][KTBin][MBOI]->Draw();
+  C3QS_Syst->Draw("E2 same");
+  C3QSBuilt_Syst->Draw("E1 same");
+
+  C3QSmerged[ChProdBOI][KTBin][MBOI]->Draw("same");
+  c3QSmerged[ChProdBOI][KTBin][MBOI]->Draw("same");
+  C3QSBuiltmerged[KTBin][MBOI]->SetLineWidth(1.2);
+  if(ChProdBOI==0) C3QSBuiltmerged[KTBin][MBOI]->Draw("same");
+  //
+  TString *proName=new TString("C3QSbuilt_G"); TString *proNameNeg=new TString("C3QSNegbuilt_G");
+  TH1D *C3QSbuilt_G = (TH1D*)C3QSBuiltmerged2D[KTBin][MBOI]->ProjectionY(proName->Data(), GbinPlot, GbinPlot);
+  TH1D *C3QSNegbuilt_G = (TH1D*)C3QSNegBuiltmerged2D[KTBin][MBOI]->ProjectionY(proNameNeg->Data(), GbinPlot, GbinPlot);
+  proName->Append("_FullWeightDen"); proNameNeg->Append("_FullWeightDen");
+  TH1D *tempDen = (TH1D*)C3QSBuiltmerged2D[KTBin][MBOI]->ProjectionY(proName->Data(), 4, 4);
+  TH1D *tempDenNeg = (TH1D*)C3QSNegBuiltmerged2D[KTBin][MBOI]->ProjectionY(proNameNeg->Data(), 4, 4);
+  // Add Pos with Neg weights
+  tempDen->Add(tempDenNeg);
+  C3QSbuilt_G->Add(C3QSNegbuilt_G);
+  //  
+  C3QSbuilt_G->Add(tempDen);
+  C3QSbuilt_G->Divide(tempDen);
+  C3QSbuilt_G->SetLineColor(2);
+  C3QSbuilt_G->GetXaxis()->SetRange(2,15);
+  if(ChProdBOI==0) C3QSbuilt_G->Draw("same");
+
+  legend1->AddEntry(C3QSmerged[ChProdBOI][KTBin][MBOI],"#font[12]{C}_{3}^{QS}","p");
+  legend1->AddEntry(c3QSmerged[ChProdBOI][KTBin][MBOI],"#font[12]{#bf{c}}_{3}^{QS}","p");
+  if(ChProdBOI==0) legend1->AddEntry(C3QSBuiltmerged[KTBin][MBOI],"Built #font[12]{C}_{3}^{QS} (G=0%)","l");
+  if(ChProdBOI==0) legend1->AddEntry(C3QSbuilt_G,"Built #font[12]{C}_{3}^{QS} (G=34%, R_{coh}=R_{ch})","l");
+  legend1->Draw("same");
+
+  Unity->Draw("same");
+
+
+
+  
+
+  if(ChProdBOI==0){
+    TCanvas *can2 = new TCanvas("can2", "can2",800,0,700,600);// 11,53,700,500
+    can2->SetHighLightColor(2);
+    gStyle->SetOptFit(0111);
+    can2->SetFillColor(0);//10
+    can2->SetBorderMode(0);
+    can2->SetBorderSize(2);
+    can2->SetFrameFillColor(0);
+    can2->SetFrameBorderMode(0);
+    can2->SetFrameBorderMode(0);
+    
+    TPad *pad2 = new TPad("pad2","pad2",0.0,0.0,1.,1.);
+    gPad->SetTickx();
+    gPad->SetTicky();
+    pad2->SetTopMargin(0.0);//0.05
+    pad2->SetRightMargin(0.0);//1e-2
+    pad2->SetBottomMargin(0.0);//0.12
+    pad2->Draw();
+    pad2->cd(1);
+    gPad->SetLeftMargin(0.14); gPad->SetRightMargin(0.04);
+    gPad->SetTopMargin(0.03); gPad->SetBottomMargin(0.14);
+    TLegend *legend2 = new TLegend(.55,.75, .95,.95,NULL,"brNDC");//.45 or .4 for x1
+    legend2->SetBorderSize(0);
+    legend2->SetFillColor(0);
+    legend2->SetTextFont(TextFont);
+    legend2->SetTextSize(SizeLegend);
+
+    //TH1D *chi2_PointSize_3 = new TH1D("chi2_PointSize_3","",40,-0.5,39.5);
+    //TH1D *chi2_FullSize_3 = new TH1D("chi2_FullSize_3","",40,-0.5,39.5);
+    TH1D *chi2_PointSize_3 = new TH1D("chi2_PointSize_3","",100,-0.5,99.5);
+    TH1D *chi2_FullSize_3 = new TH1D("chi2_FullSize_3","",100,-0.5,99.5);
+    chi2_PointSize_3->SetLineColor(4); chi2_FullSize_3->SetLineColor(2);
+    chi2_PointSize_3->SetMarkerColor(4); chi2_FullSize_3->SetMarkerColor(2);
+    chi2_PointSize_3->GetXaxis()->SetTitle("Coherent fraction (%)"); chi2_PointSize_3->GetYaxis()->SetTitle("#sqrt{#chi^{2}}");
+    chi2_PointSize_3->GetXaxis()->SetTitleSize(SizeTitle);  chi2_PointSize_3->GetYaxis()->SetTitleSize(SizeTitle);
+    chi2_PointSize_3->GetXaxis()->SetLabelSize(SizeLabel);  chi2_PointSize_3->GetYaxis()->SetLabelSize(SizeLabel);
+    TH2D *chi2_2D_3 = new TH2D("chi2_2D_3","",5,0.5,5.5, 100,-0.5,99.5);
+       
+    TH1D *tempDen = (TH1D*)C3QSBuiltmerged2D[KTBin][MBOI]->ProjectionY("TPFullWeight3_Den", 4, 4);
+    TH1D *tempDenNeg = (TH1D*)C3QSNegBuiltmerged2D[KTBin][MBOI]->ProjectionY("TPNegFullWeight3_Den", 4, 4);
+    tempDen->Add(tempDenNeg);// Add Pos and Neg Den
+
+    for(int binG=5; binG<=104; binG++){// 44
+      TString *proName=new TString("TPFullWeight3_");
+      *proName += binG;
+      TH1D *tempNum = (TH1D*)C3QSBuiltmerged2D[KTBin][MBOI]->ProjectionY(proName->Data(), binG, binG);
+      proName->Append("_Neg");
+      TH1D *tempNumNeg = (TH1D*)C3QSNegBuiltmerged2D[KTBin][MBOI]->ProjectionY(proName->Data(), binG, binG);
+      //
+      // Add Pos and Neg Num
+      tempNum->Add(tempNumNeg);
+      //
+      tempNum->Add(tempDen);
+      tempNum->Divide(tempDen);
+      //lowBin = C3QS->GetXaxis()->FindBin(Cutoff_FullWeight_Q3[Mbin]);
+      //highBin = C3QS->GetXaxis()->FindBin(Cutoff_FullWeight_Q3[Mbin]);
+      //SF=C3QS->Integral(lowBin, highBin);
+      //SF /= tempNum->Integral(lowBin, highBin);
+      //tempNum->Scale(SF);
+      
+      double value = C3QSmerged[ChProdBOI][KTBin][MBOI]->GetBinContent(Q3binChi2) - tempNum->GetBinContent(Q3binChi2);
+      double err = pow(C3QSmerged[ChProdBOI][KTBin][MBOI]->GetBinError(Q3binChi2),2);// stat
+      err += pow(Syst_forChi2_3[Q3binChi2-1],2);// syst
+      err = sqrt(err);
+      if(err <=0) continue;
+      double Chi2 = pow(value / err,2);
+      //
+      
+      //if(binG<25) {chi2_PointSize_3->SetBinContent(1 + 2*(binG-5), sqrt(Chi2)); chi2_PointSize_3->SetBinError(1 + 2*(binG-5), 0.001);}
+      //else {chi2_FullSize_3->SetBinContent(1 + 2*(binG-25), sqrt(Chi2)); chi2_FullSize_3->SetBinError(1 + 2*(binG-25), 0.001);}
+      if(binG<55) {chi2_PointSize_3->SetBinContent(1 + 2*(binG-5), sqrt(Chi2)); chi2_PointSize_3->SetBinError(1 + 2*(binG-5), 0.001);}
+      else {chi2_FullSize_3->SetBinContent(1 + 2*(binG-55), sqrt(Chi2)); chi2_FullSize_3->SetBinError(1 + 2*(binG-55), 0.001);}
+      //
+      Chi2=0;
+      double NDF=0;
+      for(int binQ3=2; binQ3<=5; binQ3++){
+       if(tempNum->GetBinContent(binQ3) <=0) continue;
+       double value = C3QSmerged[ChProdBOI][KTBin][MBOI]->GetBinContent(binQ3) - tempNum->GetBinContent(binQ3);
+       double err = pow(C3QSmerged[ChProdBOI][KTBin][MBOI]->GetBinError(binQ3),2);// stat
+       err += pow(Syst_forChi2_3[binQ3-1],2);// syst
+       err = sqrt(err);
+       if(err <=0) continue;
+       Chi2 = pow(value / err,2);
+       //
+       chi2_2D_3->SetBinContent(binQ3, binG-4, sqrt(Chi2));
+      }
+
+
+    }
+    chi2_PointSize_3->SetMarkerStyle(20); chi2_FullSize_3->SetMarkerStyle(20);
+    chi2_PointSize_3->SetMinimum(0); chi2_PointSize_3->SetMaximum(13); 
+    chi2_PointSize_3->Draw();
+    chi2_FullSize_3->Draw("same");
+    TString *Q3binName = new TString("0.0");
+    *Q3binName += Q3binChi2-1;
+    Q3binName->Append(" < #font[12]{Q_{3}} < 0.0");
+    *Q3binName += Q3binChi2;
+    Q3binName->Append(" GeV/#font[12]{c}");
+    legend2->SetHeader(Q3binName->Data());
+    legend2->AddEntry(chi2_PointSize_3,"R_{coh}=0","p");
+    legend2->AddEntry(chi2_FullSize_3,"R_{coh}=R_{ch}","p");
+    legend2->Draw("same");
+
+    TString *meanpTName3 = new TString("#LT #font[12]{p}_{T} #GT = 0.");
+    *meanpTName3 += Q3_meanpT[KTBin][Q3binChi2-1];
+    meanpTName3->Append(" GeV/#font[12]{c}");
+    TLatex *Specif_pT3 = new TLatex(0.15,0.9,meanpTName3->Data());
+    Specif_pT3->SetNDC();
+    Specif_pT3->SetTextFont(TextFont);
+    Specif_pT3->SetTextSize(SizeSpecif);
+    Specif_pT3->Draw("same");
+
+    TString *SaveNameChi2_3 = new TString("ChiSq_C3_bin");
+    *SaveNameChi2_3 += Q3binChi2;
+    SaveNameChi2_3->Append("_K");
+    *SaveNameChi2_3 += KTBin;
+    SaveNameChi2_3->Append("_M");
+    *SaveNameChi2_3 += MBOI;
+    SaveNameChi2_3->Append(".eps");
+    //can2->SaveAs(SaveNameChi2_3->Data());
+
+
+
+
+    ///////////////////////////////////////////////////////////////////////////
+    // G versus Q3
+
+    TCanvas *can2_2 = new TCanvas("can2_2", "can2_2",1300,0,700,600);// 11,53,700,500
+    can2_2->SetHighLightColor(2);
+    gStyle->SetOptFit(0111);
+    can2_2->SetFillColor(0);//10
+    can2_2->SetBorderMode(0);
+    can2_2->SetBorderSize(2);
+    can2_2->SetFrameFillColor(0);
+    can2_2->SetFrameBorderMode(0);
+    can2_2->SetFrameBorderMode(0);
+    
+    TPad *pad2_2 = new TPad("pad2_2","pad2_2",0.0,0.0,1.,1.);
+    gPad->SetTickx();
+    gPad->SetTicky();
+    pad2_2->SetTopMargin(0.0);//0.05
+    pad2_2->SetRightMargin(0.0);//1e-2
+    pad2_2->SetBottomMargin(0.0);//0.12
+    pad2_2->Draw();
+    pad2_2->cd(1);
+    gPad->SetLeftMargin(0.14); gPad->SetRightMargin(0.04);
+    gPad->SetTopMargin(0.03); gPad->SetBottomMargin(0.14);
+    TLegend *legend2_2 = new TLegend(.15,.15, .35,.35,NULL,"brNDC");//.45 or .4 for x1
+    legend2_2->SetBorderSize(0);
+    legend2_2->SetFillColor(0);
+    legend2_2->SetTextFont(TextFont);
+    legend2_2->SetTextSize(SizeLegend);
+
+    TH1D *GversusQ3_Point = new TH1D("GversusQ3_Point","",5,0,0.05);
+    TH1D *GversusQ3_Full = new TH1D("GversusQ3_Full","",5,0,0.05);
+    for(int binQ3=2; binQ3<=5; binQ3++){
+      double minG = 0;
+      double minG_e1=0, minG_e2=0;
+      double minChi=100;
+      // Point Source
+      for(int binG=1; binG<=50; binG++){// min
+       if(minChi > chi2_2D_3->GetBinContent(binQ3, binG)) {
+         minChi = chi2_2D_3->GetBinContent(binQ3, binG);
+         minG = 2*(binG-1);
+       }
+      }
+      //cout<<binQ3<<"  "<<minChi<<"  "<<minG<<endl;
+      for(int binG=1; binG<=50; binG++){// error
+       if(minG > 0) {
+         if(fabs(minChi - chi2_2D_3->GetBinContent(binQ3, binG)) < 1.) {
+           if(minG>2*(binG-1)) minG_e1 = fabs(minG - 2*(binG-1)); 
+           else minG_e2 = fabs(minG - 2*(binG-1));
+         }
+       }else{
+         if(fabs(minChi - chi2_2D_3->GetBinContent(binQ3, binG)) < 1.) {
+           minG_e1 = fabs(minG - 2*(binG-1)); 
+         }
+       }
+      }
+      GversusQ3_Point->SetBinContent(binQ3, minG);
+      if(minG_e1 > minG_e2) GversusQ3_Point->SetBinError(binQ3, minG_e1);
+      else GversusQ3_Point->SetBinError(binQ3, minG_e2);
+      //
+      // Full Source
+      minG = 0;
+      minG_e1 = 0, minG_e2=0;
+      minChi=100;
+      for(int binG=51; binG<=100; binG++){// min
+       if(minChi > chi2_2D_3->GetBinContent(binQ3, binG)) {
+         minChi = chi2_2D_3->GetBinContent(binQ3, binG);
+         minG = 2*(binG-51);
+       }
+      }
+      for(int binG=51; binG<=100; binG++){// error
+       if(minG > 0) {
+         if(fabs(minChi - chi2_2D_3->GetBinContent(binQ3, binG)) < 1.) {
+           if(minG>2*(binG-51)) minG_e1 = fabs(minG - 2*(binG-51)); 
+           else minG_e2 = fabs(minG - 2*(binG-51));
+         }
+       }else{
+         if(fabs(minChi - chi2_2D_3->GetBinContent(binQ3, binG)) < 1.) {
+           minG_e1 = fabs(minG - 2*(binG-51)); 
+         }
+       }
+      }
+      //cout<<binQ3<<"  "<<minG<<"  "<<minG_e<<endl;
+      GversusQ3_Full->SetBinContent(binQ3, minG);
+      if(minG_e1 > minG_e2) GversusQ3_Full->SetBinError(binQ3, minG_e1);
+      else GversusQ3_Full->SetBinError(binQ3, minG_e2);
+    }
+    //
+    GversusQ3_Point->SetMarkerStyle(20); GversusQ3_Point->SetMarkerColor(4); GversusQ3_Point->SetLineColor(4);
+    GversusQ3_Full->SetMarkerStyle(20); GversusQ3_Full->SetMarkerColor(2); GversusQ3_Full->SetLineColor(2);
+    GversusQ3_Point->SetMinimum(0); GversusQ3_Point->SetMaximum(80); 
+    GversusQ3_Point->GetXaxis()->SetTitle("#font[12]{Q_{3}} (GeV/#font[12]{c})"); GversusQ3_Point->GetYaxis()->SetTitle("Coherent fraction (%)");
+    GversusQ3_Point->GetXaxis()->SetTitleSize(SizeTitle);  GversusQ3_Point->GetYaxis()->SetTitleSize(SizeTitle);
+    GversusQ3_Point->GetXaxis()->SetLabelSize(SizeLabel);  GversusQ3_Point->GetYaxis()->SetLabelSize(SizeLabel);
+    GversusQ3_Point->GetXaxis()->SetNdivisions(404); GversusQ3_Point->GetYaxis()->SetNdivisions(505);
+    GversusQ3_Point->Draw();
+    GversusQ3_Full->Draw("same");
+    //
+    legend2_2->AddEntry(GversusQ3_Point,"R_{coh}=0","p");
+    legend2_2->AddEntry(GversusQ3_Full,"R_{coh}=R_{ch}","p");
+    legend2_2->Draw("same");
+
+
+  }
+  }// ChProdBOI!=2  
+
+
+
+
+  //////////////////////////////////////////////////////////////////////////
+  // 4-pion
+  TCanvas *can3 = new TCanvas("can3", "can3",10,700,700,600);// 11,53,700,500
+  can3->SetHighLightColor(2);
+  gStyle->SetOptFit(0111);
+  can3->SetFillColor(0);//10
+  can3->SetBorderMode(0);
+  can3->SetBorderSize(2);
+  can3->SetFrameFillColor(0);
+  can3->SetFrameBorderMode(0);
+  can3->SetFrameBorderMode(0);
+  
+  TPad *pad3 = new TPad("pad3","pad3",0.0,0.0,1.,1.);
+  //gPad->SetGridx(1);
+  //gPad->SetGridy(1);
+  gPad->SetTickx();
+  gPad->SetTicky();
+  pad3->SetTopMargin(0.0);//0.05
+  pad3->SetRightMargin(0.0);//1e-2
+  pad3->SetBottomMargin(0.0);//0.12
+  pad3->Draw();
+  pad3->cd(1);
+  gPad->SetLeftMargin(0.14); gPad->SetRightMargin(0.04);
+  gPad->SetTopMargin(0.03); gPad->SetBottomMargin(0.14);
+  
+  TLegend *legend3 = new TLegend(.45,.4, .85,.8,NULL,"brNDC");//.45 or .4 for x1
+  legend3->SetBorderSize(0);
+  legend3->SetFillColor(0);
+  legend3->SetTextFont(TextFont);
+  legend3->SetTextSize(SizeLegend);
+
+  
+  C4QSmerged[ChProdBOI][KTBin][MBOI]->GetXaxis()->SetTitleSize(SizeTitle);
+  C4QSmerged[ChProdBOI][KTBin][MBOI]->GetXaxis()->SetLabelSize(SizeLabel);
+  C4QSmerged[ChProdBOI][KTBin][MBOI]->GetYaxis()->SetTitleSize(SizeTitle);
+  C4QSmerged[ChProdBOI][KTBin][MBOI]->GetYaxis()->SetLabelSize(SizeLabel);
+  C4QSmerged[ChProdBOI][KTBin][MBOI]->GetXaxis()->SetTitleOffset(1.05);
+  C4QSmerged[ChProdBOI][KTBin][MBOI]->GetYaxis()->SetTitleOffset(1.1);
+  C4QSmerged[ChProdBOI][KTBin][MBOI]->GetXaxis()->SetNdivisions(606);
+  C4QSmerged[ChProdBOI][KTBin][MBOI]->GetYaxis()->SetNdivisions(505);
+  //
+  TString *proName4=new TString("C4QSbuilt_G"); TString *proNameNeg4=new TString("C4QSNegbuilt_G");
+  TH1D *C4QSbuilt_G = (TH1D*)C4QSBuiltmerged2D[KTBin][MBOI]->ProjectionY(proName4->Data(), GbinPlot, GbinPlot);
+  TH1D *C4QSNegbuilt_G = (TH1D*)C4QSNegBuiltmerged2D[KTBin][MBOI]->ProjectionY(proNameNeg4->Data(), GbinPlot, GbinPlot);
+  proName4->Append("_FullWeightDen"); proNameNeg4->Append("_FullWeightDen");
+  TH1D *tempDen4 = (TH1D*)C4QSBuiltmerged2D[KTBin][MBOI]->ProjectionY(proName4->Data(), 4, 4);
+  TH1D *tempDenNeg4 = (TH1D*)C4QSNegBuiltmerged2D[KTBin][MBOI]->ProjectionY(proNameNeg4->Data(), 4, 4);
+  // Add Pos with Neg weights
+  tempDen4->Add(tempDenNeg4);
+  C4QSbuilt_G->Add(C4QSNegbuilt_G);
+  //  
+  C4QSbuilt_G->Add(tempDen4);
+  C4QSbuilt_G->Divide(tempDen4);
+  C4QSbuilt_G->SetLineColor(2);
+  //
+  C4QSmerged[ChProdBOI][KTBin][MBOI]->SetMaximum(8.8);
+  C4QSBuiltmerged[KTBin][MBOI]->GetXaxis()->SetRange(3,15);
+  C4QSbuilt_G->GetXaxis()->SetRange(3,15);
+  //
+  //TH1D *C4QS_Syst = new TH1D("C4QS_Syst","",200,0.,0.2);
+  //TH1D *C4QSBuilt_Syst = new TH1D("C4QSBuilt_Syst","",200,0.,0.2);
+  TH1D *C4QS_Syst = (TH1D*)C4QSmerged[ChProdBOI][KTBin][MBOI]->Clone();
+  TH1D *C4QSBuilt_Syst = (TH1D*)C4QSBuiltmerged[KTBin][MBOI]->Clone();
+
+  for(int bin=1; bin<=C4QS_Syst->GetNbinsX(); bin++){
+    double q4 = C4QS_Syst->GetXaxis()->GetBinCenter(bin);
+    C4QS_Syst->SetBinContent(bin, 8.);
+    double syst1 = pow(0.001,2);// cc
+    syst1 += pow(0.004 - 0.004*q4/0.18,2);// 11h to 10h
+    syst1 += pow(0.9975 - 0.09*q4 - 1,2);// f coefficients, r*<70
+    syst1 += pow(0.9814 + 0.2471*q4 - 0.8312*q4*q4 - 1,2);// MRC
+    syst1 += pow(0.9635 + 0.3475*q4 - 0.9729*q4*q4 - 1,2);// Muon, 92%
+    syst1 += pow(0.900 + 1.126*q4 - 3.354*q4*q4 - 1,2);// fc2 scale
+    syst1 += pow(0.125*exp(-61.38*q4),2);// K factorization
+    syst1 = sqrt(syst1);
+    syst1 *= C4QSmerged[ChProdBOI][KTBin][MBOI]->GetBinContent(bin);
+    C4QS_Syst->SetBinError(bin, syst1);
+    // Built
+    C4QSBuilt_Syst->SetBinContent(bin, 8.);
+    double syst2 = pow(0.004 - 0.004*q4/0.18,2);// 11h to 10h
+    syst2 += pow(0.9793 + 0.2857*q4 - 0.9888*q4*q4 - 1,2);// MRC
+    syst2 += pow(0.9725 + 0.2991*q4 - 0.8058*q4*q4 - 1,2);// Muon, 92%
+    syst2 += pow(0.905 + 1.03*q4 - 2.977*q4*q4 - 1,2);// fc2 scale
+    syst2 += pow(0.0379*exp(-42.82*q4),2);// Interpolator
+    syst2 = sqrt(syst2);
+    syst2 *= C4QSBuiltmerged[KTBin][MBOI]->GetBinContent(bin);
+    C4QSBuilt_Syst->SetBinError(bin, syst2);
+  }
+  C4QS_Syst->SetBinContent(2,100); C4QSBuilt_Syst->SetBinContent(2,100); 
+  C4QS_Syst->SetMarkerSize(0); C4QS_Syst->SetFillColor(kBlue-10);
+  C4QS_Syst->SetMarkerColor(kBlue-10);
+  C4QSBuilt_Syst->SetMarkerSize(0); C4QSBuilt_Syst->SetFillColor(1); //C4QSBuilt_Syst->SetFillStyle(3004);
+  C4QSBuilt_Syst->SetMarkerColor(1);
+  C4QS_Syst->GetXaxis()->SetRangeUser(0.03,0.2); C4QSBuilt_Syst->GetXaxis()->SetRangeUser(0.03,0.2);
+  double Syst_forChi2_4[15]={0};
+  for(int bin=1; bin<=15; bin++){
+    double q4 = C4QSmerged[ChProdBOI][KTBin][MBOI]->GetXaxis()->GetBinCenter(bin);
+    int SystBin = C4QSBuilt_Syst->GetXaxis()->FindBin(q4);
+    //Syst_forChi2_4[bin-1] = fabs(C4QS_Syst->GetBinError(SystBin) - C4QSBuilt_Syst->GetBinError(SystBin));
+    double SystPercent_Diff = sqrt(pow(0.125*exp(-61.38*q4),2) + pow(0.9975 - 0.09*q4 - 1,2) + pow(0.0379*exp(-42.82*q4),2));// K, f coefficients, Interpolator
+    Syst_forChi2_4[bin-1] = SystPercent_Diff * C4QSmerged[ChProdBOI][KTBin][MBOI]->GetBinContent(bin);
+  }
+  //
+  /*for(int bin=1; bin<=C4QSmerged[ChProdBOI][KTBin][MBOI]->GetNbinsX(); bin++){
+    C4QSmerged[ChProdBOI][KTBin][MBOI]->SetBinContent(bin, fabs(C4QSmerged[ChProdBOI][KTBin][MBOI]->GetBinContent(bin) - 1));
+    C4QSBuiltmerged[KTBin][MBOI]->SetBinContent(bin, fabs(C4QSBuiltmerged[KTBin][MBOI]->GetBinContent(bin) - 1));
+    }*/
+  C4QSmerged[ChProdBOI][KTBin][MBOI]->SetBinContent(1,100); C4QSmerged[ChProdBOI][KTBin][MBOI]->SetBinError(1,100);
+  C4QSmerged[ChProdBOI][KTBin][MBOI]->Draw();
+  C4QS_Syst->Draw("E2 same");
+  C4QSBuilt_Syst->Draw("E1 same");
+  C4QSmerged[ChProdBOI][KTBin][MBOI]->Draw("same");
+  
+  c4QSstage1merged[ChProdBOI][KTBin][MBOI]->Draw("same");
+  if(ChProdBOI==0) c4QSstage2merged[KTBin][MBOI]->Draw("same");
+  c4QSmerged[ChProdBOI][KTBin][MBOI]->Draw("same");
+  C4QSBuiltmerged[KTBin][MBOI]->SetLineWidth(1.2);
+  if(ChProdBOI==0) C4QSBuiltmerged[KTBin][MBOI]->Draw("same");
+  
+  if(ChProdBOI==0) C4QSbuilt_G->Draw("same");
+
+  legend3->AddEntry(C4QSmerged[ChProdBOI][KTBin][MBOI],"#font[12]{C}_{4}^{QS}","p");
+  legend3->AddEntry(c4QSstage1merged[ChProdBOI][KTBin][MBOI],"#font[12]{#bf{c}}_{4}^{QS} 2-pion removal","p");
+  if(ChProdBOI==0) legend3->AddEntry(c4QSstage2merged[KTBin][MBOI],"#font[12]{#bf{c}}_{4}^{QS} 2-pion + 2-pair removal","p");
+  legend3->AddEntry(c4QSmerged[ChProdBOI][KTBin][MBOI],"#font[12]{#bf{c}}_{4}^{QS}","p");
+  if(ChProdBOI==0) legend3->AddEntry(C4QSBuiltmerged[KTBin][MBOI],"Built #font[12]{C}_{4}^{QS} (G=0%)","l");
+  if(ChProdBOI==0) legend3->AddEntry(C4QSbuilt_G,"Built #font[12]{C}_{4}^{QS} (G=34%, R_{coh}=R_{ch})","l");
+  legend3->Draw("same");
+  
+  /*TF1 *Gauss_c4Fit=new TF1("Gauss_c4Fit","[0]*(1+[1]*exp(-pow(x*[2]/0.19733,2)/3.))",0,1);
+  Gauss_c4Fit->SetParameter(0,1); Gauss_c4Fit->SetParameter(1,3); Gauss_c4Fit->SetParameter(2,8); 
+  Gauss_c4Fit->SetParName(0,"N");  Gauss_c4Fit->SetParName(1,"#lambda_{4}"); Gauss_c4Fit->SetParName(2,"R");
+  c4QSmerged[ChProdBOI][KTBin][MBOI]->Fit(Gauss_c4Fit,"IME","",0.03,0.14);
+  Gauss_c4Fit->Draw("same");*/
+
+  // hight KT4 reference
+  double y_ref[12]={0, 0, 1.00133, 0.980848, 0.988251, 0.994434, 0.999677, 1.00269, 1.00642, 1.00881, 1.01082, 1.01554};
+  double y_ref_e[12]={0, 0, 0.054465, 0.00678447, 0.00194947, 0.000799564, 0.00039767, 0.000222628, 0.000135335, 8.75305e-05, 6.31392e-05, 5.53329e-05};
+
+  TH1D *Ratio=(TH1D*)C4QSmerged[ChProdBOI][KTBin][MBOI]->Clone();
+  Ratio->Divide(C4QSBuiltmerged[KTBin][MBOI]);
+  Ratio->GetYaxis()->SetTitle("#font[12]{C_{4}^{QS}} / #font[12]{C_{4}^{QS}}(built)");
+  Ratio->SetMinimum(0.85); Ratio->SetMaximum(1.05);
+  TH1D *DoubleRatio =(TH1D*)Ratio->Clone();
+  DoubleRatio->GetYaxis()->SetTitle("Low K_{T,4} ratio / High K_{T,4} ratio");
+
+  for(int bin=1; bin<=12; bin++){
+    if(y_ref[bin-1]==0) continue;
+    double value = Ratio->GetBinContent(bin) / y_ref[bin-1];
+    double value_e = sqrt(pow(Ratio->GetBinError(bin) / y_ref[bin-1],2) + pow(y_ref_e[bin-1]*Ratio->GetBinContent(bin) /y_ref[bin-1]/y_ref[bin-1],2));
+    DoubleRatio->SetBinContent(bin, value);
+    DoubleRatio->SetBinError(bin, value_e);
+  }
+  //Ratio->Draw();
+  //DoubleRatio->Draw();
+
+  //for(int bin=1; bin<=12; bin++) cout<<Ratio->GetBinContent(bin)<<", ";
+  //cout<<endl;
+  //for(int bin=1; bin<=12; bin++) cout<<Ratio->GetBinError(bin)<<", ";
+  //cout<<endl;
+  
+  Unity->Draw("same");
+
+  
+  if(ChProdBOI==0){// chi2
+    TCanvas *can4 = new TCanvas("can4", "can4",800,700,700,600);// 11,53,700,500
+    can4->SetHighLightColor(2);
+    gStyle->SetOptFit(0111);
+    can4->SetFillColor(0);//10
+    can4->SetBorderMode(0);
+    can4->SetBorderSize(2);
+    can4->SetFrameFillColor(0);
+    can4->SetFrameBorderMode(0);
+    can4->SetFrameBorderMode(0);
+    
+    TPad *pad4 = new TPad("pad4","pad4",0.0,0.0,1.,1.);
+    gPad->SetTickx();
+    gPad->SetTicky();
+    pad4->SetTopMargin(0.0);//0.05
+    pad4->SetRightMargin(0.0);//1e-2
+    pad4->SetBottomMargin(0.0);//0.12
+    pad4->Draw();
+    pad4->cd(1);
+    gPad->SetLeftMargin(0.14); gPad->SetRightMargin(0.04);
+    gPad->SetTopMargin(0.03); gPad->SetBottomMargin(0.14);
+
+    TLegend *legend4 = new TLegend(.15,.65, .4,.85,NULL,"brNDC");//.45 or .4 for x1
+    legend4->SetBorderSize(0);
+    legend4->SetFillColor(0);
+    legend4->SetTextFont(TextFont);
+    legend4->SetTextSize(SizeLegend);
+
+    //TH1D *chi2_PointSize_4 = new TH1D("chi2_PointSize_4","",40,-0.5,39.5);
+    //TH1D *chi2_FullSize_4 = new TH1D("chi2_FullSize_4","",40,-0.5,39.5);
+    TH1D *chi2_PointSize_4 = new TH1D("chi2_PointSize_4","",100,-0.5,99.5);
+    TH1D *chi2_FullSize_4 = new TH1D("chi2_FullSize_4","",100,-0.5,99.5);
+    chi2_PointSize_4->SetLineColor(4); chi2_FullSize_4->SetLineColor(2);
+    chi2_PointSize_4->SetMarkerColor(4); chi2_FullSize_4->SetMarkerColor(2);
+    chi2_PointSize_4->GetXaxis()->SetTitle("Coherent fraction (%)"); chi2_PointSize_4->GetYaxis()->SetTitle("#sqrt{#chi^{2}}");
+    chi2_PointSize_4->GetXaxis()->SetTitleSize(SizeTitle);  chi2_PointSize_4->GetYaxis()->SetTitleSize(SizeTitle);
+    chi2_PointSize_4->GetXaxis()->SetLabelSize(SizeLabel);  chi2_PointSize_4->GetYaxis()->SetLabelSize(SizeLabel);
+    chi2_PointSize_4->GetYaxis()->SetNdivisions(505);
+    TH2D *chi2_2D_4 = new TH2D("chi2_2D_4","",7,0.5,7.5, 100,-0.5,99.5);
+       
+
+    TH1D *tempDen = (TH1D*)C4QSBuiltmerged2D[KTBin][MBOI]->ProjectionY("TPFullWeight4_Den", 4, 4);
+    TH1D *tempDenNeg = (TH1D*)C4QSNegBuiltmerged2D[KTBin][MBOI]->ProjectionY("TPNegFullWeight4_Den", 4, 4);
+    tempDen->Add(tempDenNeg);// Add Pos and Neg Weight
+
+    for(int binG=5; binG<=104; binG++){// 44
+      TString *proName=new TString("TPFullWeight4_");
+      *proName += binG;
+      TH1D *tempNum = (TH1D*)C4QSBuiltmerged2D[KTBin][MBOI]->ProjectionY(proName->Data(), binG, binG);
+      proName->Append("_Neg");
+      TH1D *tempNumNeg = (TH1D*)C4QSNegBuiltmerged2D[KTBin][MBOI]->ProjectionY(proName->Data(), binG, binG);
+      //
+      // Add Pos and Neg Weights
+      tempNum->Add(tempNumNeg);
+      //
+      tempNum->Add(tempDen);
+      tempNum->Divide(tempDen);
+      //lowBin = C4QS->GetXaxis()->FindBin(Cutoff_FullWeight_Q4[Mbin]);
+      //highBin = C4QS->GetXaxis()->FindBin(Cutoff_FullWeight_Q4[Mbin]);
+      //SF=C4QS->Integral(lowBin, highBin);
+      //SF /= tempNum->Integral(lowBin, highBin);
+      //tempNum->Scale(SF);
+      
+
+      if(tempNum->GetBinContent(Q4binChi2) <=0) continue;
+      double value = C4QSmerged[ChProdBOI][KTBin][MBOI]->GetBinContent(Q4binChi2) - tempNum->GetBinContent(Q4binChi2);
+      double err = pow(C4QSmerged[ChProdBOI][KTBin][MBOI]->GetBinError(Q4binChi2),2);
+      err += pow(Syst_forChi2_4[Q4binChi2-1],2);
+      err = sqrt(err);
+      if(err<=0) continue;
+      double Chi2 = pow(value / err,2);
+      //
+      
+      //if(binG<25) {chi2_PointSize_4->SetBinContent(1 + 2*(binG-5), sqrt(fabs(Chi2))); chi2_PointSize_4->SetBinError(1 + 2*(binG-5), 0.001);}
+      //else {chi2_FullSize_4->SetBinContent(1 + 2*(binG-25), sqrt(fabs(Chi2))); chi2_FullSize_4->SetBinError(1 + 2*(binG-25), 0.001);}
+      if(binG<55) {chi2_PointSize_4->SetBinContent(1 + 2*(binG-5), sqrt(fabs(Chi2))); chi2_PointSize_4->SetBinError(1 + 2*(binG-5), 0.001);}
+      else {chi2_FullSize_4->SetBinContent(1 + 2*(binG-55), sqrt(fabs(Chi2))); chi2_FullSize_4->SetBinError(1 + 2*(binG-55), 0.001);}
+      //
+      
+      for(int binQ4=3; binQ4<=7; binQ4++){
+       if(tempNum->GetBinContent(binQ4) <=0) continue;
+       double value = C4QSmerged[ChProdBOI][KTBin][MBOI]->GetBinContent(binQ4) - tempNum->GetBinContent(binQ4);
+       double err = pow(C4QSmerged[ChProdBOI][KTBin][MBOI]->GetBinError(binQ4),2);
+       err += pow(Syst_forChi2_4[binQ4-1],2);
+       err = sqrt(err);
+       if(err<=0) continue;
+       Chi2 = pow(value / err,2);
+       //
+       chi2_2D_4->SetBinContent(binQ4, binG-4, sqrt(fabs(Chi2)));
+      }
+      
+    }
+    chi2_PointSize_4->SetMarkerStyle(20); chi2_FullSize_4->SetMarkerStyle(20);
+    chi2_PointSize_4->SetMinimum(0); chi2_PointSize_4->SetMaximum(13);
+    
+    TString *Q4binName = new TString("0.0");
+    
+    if(int((Q4binChi2-1)*1.5*10)%10 == 0) *Q4binName += int((Q4binChi2-1)*1.5);
+    else {*Q4binName += int((Q4binChi2-1)*1.5); *Q4binName += 5;}
+    Q4binName->Append(" < #font[12]{Q_{4}} < 0.0");
+    if(int((Q4binChi2)*1.5*10)%10 == 0) *Q4binName += int((Q4binChi2)*1.5);
+    else {*Q4binName += int((Q4binChi2)*1.5); *Q4binName += 5;}
+    Q4binName->Append(" GeV/#font[12]{c}");
+    legend4->SetHeader(Q4binName->Data());
+    chi2_PointSize_4->Draw();
+    chi2_FullSize_4->Draw("same");
+    legend4->AddEntry(chi2_PointSize_4,"R_{coh}=0","p");
+    legend4->AddEntry(chi2_FullSize_4,"R_{coh}=R_{ch}","p");
+    legend4->Draw("same");
+
+    TString *meanpTName = new TString("#LT #font[12]{p}_{T} #GT = 0.");
+    *meanpTName += Q4_meanpT[KTBin][Q4binChi2-1];
+    meanpTName->Append(" GeV/#font[12]{c}");
+    TLatex *Specif_pT = new TLatex(0.15,0.9,meanpTName->Data());
+    Specif_pT->SetNDC();
+    Specif_pT->SetTextFont(TextFont);
+    Specif_pT->SetTextSize(SizeSpecif);
+    Specif_pT->Draw("same");
+   
+
+    TString *SaveNameChi2_4 = new TString("ChiSq_C4_bin");
+    *SaveNameChi2_4 += Q4binChi2;
+    SaveNameChi2_4->Append("_K");
+    *SaveNameChi2_4 += KTBin;
+    SaveNameChi2_4->Append("_M");
+    *SaveNameChi2_4 += MBOI;
+    SaveNameChi2_4->Append(".eps");
+    //can4->SaveAs(SaveNameChi2_4->Data());
+    
+
+
+
+    ///////////////////////////////////////////////////////////////////////////
+    // G versus Q4
+
+    TCanvas *can5 = new TCanvas("can5", "can5",1300,700,700,600);// 11,53,700,500
+    can5->SetHighLightColor(2);
+    gStyle->SetOptFit(0111);
+    can5->SetFillColor(0);//10
+    can5->SetBorderMode(0);
+    can5->SetBorderSize(2);
+    can5->SetFrameFillColor(0);
+    can5->SetFrameBorderMode(0);
+    can5->SetFrameBorderMode(0);
+    
+    TPad *pad5 = new TPad("pad5","pad5",0.0,0.0,1.,1.);
+    gPad->SetTickx();
+    gPad->SetTicky();
+    pad5->SetTopMargin(0.0);//0.05
+    pad5->SetRightMargin(0.0);//1e-2
+    pad5->SetBottomMargin(0.0);//0.12
+    pad5->Draw();
+    pad5->cd(1);
+    gPad->SetLeftMargin(0.14); gPad->SetRightMargin(0.04);
+    gPad->SetTopMargin(0.03); gPad->SetBottomMargin(0.14);
+
+    TLegend *legend5 = new TLegend(.15,.75, .3,.95,NULL,"brNDC");//.45 or .4 for x1
+    legend5->SetBorderSize(0);
+    legend5->SetFillColor(0);
+    legend5->SetTextFont(TextFont);
+    legend5->SetTextSize(SizeLegend);
+
+    TH1D *GversusQ4_Point = new TH1D("GversusQ4_Point","",7,0,0.105);
+    TH1D *GversusQ4_Full = new TH1D("GversusQ4_Full","",7,0,0.105);
+    for(int binQ4=3; binQ4<=7; binQ4++){
+      double minG = 0;
+      double minG_e1 = 0, minG_e2=0;
+      double minChi=100;
+      // Point Source
+      for(int binG=1; binG<=50; binG++){// min
+       if(minChi > chi2_2D_4->GetBinContent(binQ4, binG)) {
+         minChi = chi2_2D_4->GetBinContent(binQ4, binG);
+         minG = 2*(binG-1);
+       }
+      }
+      //cout<<binQ4<<"  "<<minChi<<endl;
+      for(int binG=1; binG<=50; binG++){// error
+       if(minG > 0) {
+         if(fabs(minChi - chi2_2D_4->GetBinContent(binQ4, binG)) < 1.) {
+           if(minG>2*(binG-1)) minG_e1 = fabs(minG - 2*(binG-1)); 
+           else minG_e2 = fabs(minG - 2*(binG-1));
+         }
+       }else{
+         if(fabs(minChi - chi2_2D_4->GetBinContent(binQ4, binG)) < 1.) {
+           minG_e1 = fabs(minG - 2*(binG-1)); 
+         }
+       }
+      }
+      GversusQ4_Point->SetBinContent(binQ4, minG);
+      if(minG_e1>minG_e2) GversusQ4_Point->SetBinError(binQ4, minG_e1);
+      else GversusQ4_Point->SetBinError(binQ4, minG_e2);
+      //
+      // Full Source
+      minG = 0;
+      minG_e1 = 0, minG_e2=0;
+      minChi=100;
+      for(int binG=51; binG<=100; binG++){// min
+       if(minChi > chi2_2D_4->GetBinContent(binQ4, binG)) {
+         minChi = chi2_2D_4->GetBinContent(binQ4, binG);
+         minG = 2*(binG-51);
+       }
+      }
+      for(int binG=51; binG<=100; binG++){// error
+       if(minG > 0) {
+         if(fabs(minChi - chi2_2D_4->GetBinContent(binQ4, binG)) < 1.) {
+           if(minG>2*(binG-51)) minG_e1 = fabs(minG - 2*(binG-51)); 
+           else minG_e2 = fabs(minG - 2*(binG-51));
+         }
+       }else{
+         if(fabs(minChi - chi2_2D_4->GetBinContent(binQ4, binG)) < 1.) {
+           minG_e1 = fabs(minG - 2*(binG-51)); 
+         }
+       }
+      }
+      //cout<<binQ4<<"  "<<minG<<"  "<<minG_e<<endl;
+      GversusQ4_Full->SetBinContent(binQ4, minG);
+      if(minG_e1>minG_e2) GversusQ4_Full->SetBinError(binQ4, minG_e1);
+      else GversusQ4_Full->SetBinError(binQ4, minG_e2);
+    }
+    //
+    GversusQ4_Point->SetMarkerStyle(20); GversusQ4_Point->SetMarkerColor(4); GversusQ4_Point->SetLineColor(4);
+    GversusQ4_Full->SetMarkerStyle(20); GversusQ4_Full->SetMarkerColor(2); GversusQ4_Full->SetLineColor(2);
+    GversusQ4_Point->SetMinimum(0); GversusQ4_Point->SetMaximum(40); 
+    GversusQ4_Point->GetXaxis()->SetTitle("#font[12]{Q_{4}} (GeV/#font[12]{c})"); GversusQ4_Point->GetYaxis()->SetTitle("Coherent fraction (%)");
+    GversusQ4_Point->GetXaxis()->SetTitleSize(SizeTitle);  GversusQ4_Point->GetYaxis()->SetTitleSize(SizeTitle);
+    GversusQ4_Point->GetXaxis()->SetLabelSize(SizeLabel);  GversusQ4_Point->GetYaxis()->SetLabelSize(SizeLabel);
+    GversusQ4_Point->GetYaxis()->SetNdivisions(505);
+    GversusQ4_Point->Draw();
+    GversusQ4_Full->Draw("same");
+    //
+    legend5->AddEntry(GversusQ4_Point,"R_{coh}=0","p");
+    legend5->AddEntry(GversusQ4_Full,"R_{coh}=R_{ch}","p");
+    legend5->Draw("same");
+
+  }
+
+  
+
+
+  //////////////////////////////////////////////////////////////////////////
+  // r3
+  /* TCanvas *can1 = new TCanvas("can1", "can1",10,0,600,600);// 11,53,700,500
+  can1->SetHighLightColor(2);
+  gStyle->SetOptFit(0111);
+  can1->SetFillColor(0);//10
+  can1->SetBorderMode(0);
+  can1->SetBorderSize(2);
+  can1->SetFrameFillColor(0);
+  can1->SetFrameBorderMode(0);
+  can1->SetFrameBorderMode(0);
+  
+  TPad *pad1 = new TPad("pad1","pad1",0.0,0.0,1.,1.);
+  gPad->SetGridx(1);
+  gPad->SetGridy(1);
+  gPad->SetTickx();
+  gPad->SetTicky();
+  pad1->SetTopMargin(0.02);//0.05
+  pad1->SetRightMargin(0.01);//1e-2
+  pad1->SetBottomMargin(0.07);//0.12
+  pad1->Draw();
+  pad1->cd(1);
+  gPad->SetLeftMargin(0.14);
+  gPad->SetRightMargin(0.03);
+  
+  r3merged[0]->SetMinimum(1.45); r3merged[0]->SetMaximum(2.45); 
+  r3merged[1]->SetMarkerColor(2); r3merged[1]->SetLineColor(2); 
+  //r3merged[0]->Draw();
+  //r3merged[1]->Draw("same");
+  //
+  r4merged[0]->SetMinimum(1.45); r4merged[0]->SetMaximum(10.45); 
+  r4merged[1]->SetMarkerColor(2); r4merged[1]->SetLineColor(2);
+  r4merged[0]->Draw();
+  r4merged[1]->Draw("same");
+  */
+
+}
+