ROOT logo

class AliSpectraBothHistoManager;
class AliSpectraBothEventCuts; 
class AliSpectraBothTrackCuts;
TString Charge[]={"Pos","Neg"};
TString Sign[]={"Plus","Minus"};
TString Particle[]={"Pion","Kaon","Proton"};
TString symboles[]={"#pi^{+}","K^{+}","p","pi^{-}","K^{-}","#bar{p}"}; 
AliSpectraBothHistoManager* managerdata=0x0;
AliSpectraBothEventCuts* ecutsdata=0x0; 
AliSpectraBothTrackCuts* tcutsdata=0x0;
	
AliSpectraBothHistoManager* managermc=0x0;
AliSpectraBothEventCuts* ecutsmc=0x0; 
AliSpectraBothTrackCuts* tcutsmc=0x0;

Float_t TOFMatchingScalling[2]={-1,-1};
Int_t Color[3]={1,2,4};
Int_t Marker[6]={20,21,22,24,25,26};
Double_t Range[3]={0.3,0.3,0.5}; // LowPt range for pi k p


Double_t FitRange[2]={-2.0,2.0};
Double_t CutRange[2]={-3.0,3.0};
Double_t minptformaterial[6]={0.0,0.2,0.0,0.0,0.2,0.0};
Double_t maxptformaterial[6]={0.0,0.6,1.3,0.0,0.6,0.0};
Double_t minptforWD[6]={0.2,100.0,0.3,0.2,100.0,0.3};
Double_t maxptforWD[6]={1.5,-100.0,2.0,1.5,-100.0,2.0};
Double_t minRanges[3]={0.3,0.3,0.45};
Double_t maxRanges[3]={1.5,1.2,2.2};
Double_t TOFPIDsignalmatching[]={-1.0,-1.0,-1.0};
Double_t fMaxContaminationPIDMC=0.2;
TString filenames[]={"eff.root","pid.root","sec.root"};

enum ECharge_t {
  kPositive,
  kNegative,
  kNCharges
};
enum {
 kdodca=0x1, //dca fits are made 
 kgeantflukaKaon=0x2,// geant fluka correction is used for kaons 
 kgeantflukaProton=0x4, // geant fluka correction is used for protons and antiprotons
 knormalizationtoeventspassingPhySel=0x8,// spectra are divided by number of events passing physic selection   
 kveretxcorrectionandbadchunkscorr=0x10, // correction for difference in z vertex distribution in data and MC and correction for bad chunks is applied
 kmcisusedasdata=0x20, // the result of the looping over MC is used as data input 
 kdonotusedcacuts=0x40, // allows to use the constant dca cut for all pt bins not the pt dependet defined in stardrad track cuts 2011
 kuseprimaryPIDcont=0x80, //pid contamination is calculated using only primiary particle in this case K should use dca fits 
 knormalizationwithbin0integralsdata=0x100, // the normalization factor is calcualte using integral over z vertex distributions (in this case reconstructed vertex disitrbution uses z vertex for data) 
 knormalizationwithbin0integralsMC=0x200, //in this case reconstructed vertex disitrbution uses z vertex for data, those to options will be use only if knormalizationtoeventspassingPhySel is not set
 kuserangeonfigfile=0x400, // use of config file for dca fit settings
 kskipconcutonspectra=0x800, //do not use conPID<02 cut  useful for syst. studies
 kuseTOFmatchingcorrection=0x1000, // if set tof matching correction is applied.
 kuseTOFcorrforPIDsignalmatching=0x2000, // rescale the for spectra by the factor given in config files	
 kuseeffcorrectionfromfile=0x4000, //use the efficiency from the file specfied in config file			
 kusePIDcontaminatiofromfile=0x8000, //use the PID contamination from the file specfied in config file
 kuseseccontaminatiofromfile=0x10000 //use the secondary contamination from the file specfied in config file
 							
};	

Bool_t OpenFile(TString dirname, TString outputname, Bool_t mcflag,Bool_t mcasdata=false);
void AnalysisBoth (UInt_t options=0xF,TString outdate, TString outnamedata, TString outnamemc="",TString configfile="" )
{
gStyle->SetOptStat(0);	
	TH1::AddDirectory(kFALSE);
	gSystem->Load("libCore.so");  
	gSystem->Load("libPhysics.so");
	gSystem->Load("libTree");
	gSystem->Load("libMatrix");
	gSystem->Load("libSTEERBase");
	gSystem->Load("libESD");
	gSystem->Load("libAOD");
	gSystem->Load("libANALYSIS");
	gSystem->Load("libOADB");
	gSystem->Load("libANALYSISalice");
	gSystem->Load("libTENDER");
	gSystem->Load("libCORRFW");
	gSystem->Load("libPWGTools");
	gSystem->Load("libPWGLFspectra");
  	
  	gROOT->LoadMacro("$ALICE_ROOT/PWGLF/SPECTRA/PiKaPr/TestAOD/QAPlotsBoth.C");
	Double_t mass[3];
	mass[0]   = TDatabasePDG::Instance()->GetParticle("pi+")->Mass();
	mass[1]   = TDatabasePDG::Instance()->GetParticle("K+")->Mass();
	mass[2] = TDatabasePDG::Instance()->GetParticle("proton")->Mass();

	TFormula* dcacutxy=0x0;
	if(!(options&kdonotusedcacuts))
	{
	
		AliESDtrackCuts* esdtrackcuts= AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE);
		TString formulastring(esdtrackcuts->GetMaxDCAToVertexXYPtDep());	
		formulastring.ReplaceAll("pt","x");
		dcacutxy=new TFormula("dcacutxy",formulastring.Data());
	}
	if(options&kuserangeonfigfile)
		if(!ReadConfigFile(configfile))
			return;		
	TList* lout=new TList();
	

	TString indirname=Form("/output/train%s",outdate.Data());
	//TString indirname("/output/train24072012");
	if(outnamemc.Length()==0)
	outnamemc=outnamedata;
	cout<<indirname.Data()<<" "<<outnamemc.Data()<<endl;
	// Do the job 


	OpenFile(indirname,outnamemc,true);
	OpenFile(indirname,outnamedata,false,((Bool_t)(options&kmcisusedasdata)));
	if(!managermc||!managerdata)
	{
		cout<<managermc<<" "<<managerdata<<endl;
		return;	
	}
	TH1F* rawspectradata[6];
	TH1F* rawspectramc[6];
	TH1F* MCTruth[6];
	TH1F* eff[6];
	TH1F* contallMC[6];
	TH1F* contPID[6];
	TH1F* contWD[6];
	TH1F* contMat[6];
	TH1F* confinal[6];
	TH1F* contPIDpri[6];
	TH1F* contSecMC[6];
	
	TH1F* contfit[12];
	TH1F* contWDfit[12];
	TH1F* contMatfit[12];
	TH1F* primaryfit[12];

	
	
	TH1F* spectra[6];
	TH1F* spectraLeonardo[6];
	
	TH1F* corrLeonardo[6];
        TH1F* doubleconuntsdata[3]; 
	 TH1F* doubleconuntsMC[3]; 
	//GetSpectra(managerdata,rawspectradata,true);
	//GetSpectra(managermc,rawspectramc,true,true);
	
	GetPtHistFromPtDCAhisto("hHistPtRecSigma","SpectraMC",managermc,rawspectramc,dcacutxy);
	GetPtHistFromPtDCAhisto("hHistPtRecSigma","SpectraDATA",managerdata,rawspectradata,dcacutxy);
	GetPtHistFromPtDCAhisto("hHistPtRecTruePrimary","eff",managermc,eff,dcacutxy);
	GetPtHistFromPtDCAhisto("hHistPtRecTrue","conPID",managermc,contPID,dcacutxy);
	GetPtHistFromPtDCAhisto("hHistPtRecSigmaSecondaryWeakDecay","conWD",managermc,contWD,dcacutxy);
	GetPtHistFromPtDCAhisto("hHistPtRecSigmaSecondaryMaterial","conMat",managermc,contMat,dcacutxy);
	GetPtHistFromPtDCAhisto("hHistPtRecSigmaPrimary","conPIDprimary",managermc,contPIDpri,dcacutxy);

	
	Double_t neventsmcall = 1 ;  //if loop over MC is done after or befor events cuts this will be changed 
	Double_t neventsdata =  1;
	Double_t neventsmc =  1;

	//Normaliztion of MCtruth depends if the loop was done after of before ESD event cuts.
	//In currect code this cannot be check on the level of macro.
	//If the loop was done before MC should be done to all processed events (NumberOfProcessedEvents())
	//If loop was done after MC should be normalized to all accepted events (NumberOfEvents()) 
	// The option one will be alaways use.
	
	neventsmcall= ecutsmc->NumberOfProcessedEvents();
	if(options&knormalizationtoeventspassingPhySel)
	{
		//neventsmcall= ecutsmc->NumberOfProcessedEvents();
		 neventsdata=ecutsdata->NumberOfPhysSelEvents();
		 neventsmc=ecutsmc->NumberOfPhysSelEvents();
	}
	else if ((options&knormalizationwithbin0integralsdata)||(options&knormalizationwithbin0integralsMC))
	{
		neventsdata=Normaliztionwithbin0integrals(options);
		neventsmc=ecutsmc->NumberOfPhysSelEvents();
	}
	else
	{
		neventsdata=ecutsdata->NumberOfEvents(); //number of accepted events
		 neventsmc=ecutsmc->NumberOfEvents();
		neventsmcall= ecutsmc->NumberOfEvents();

	}
	GetMCTruth(MCTruth);
	cout<<neventsdata<<" Events"<<endl;
        cout<< neventsmc<<" Events "<<endl;
       if(neventsdata<1)
       {
               cout<<"No events DATA"<<endl;
               return;
       }
	if(neventsmc<1&&(((options&kusePIDcontaminatiofromfile)!=kusePIDcontaminatiofromfile)||((options&kuseseccontaminatiofromfile)!=kuseseccontaminatiofromfile)||((options&kuseseccontaminatiofromfile)!=kuseseccontaminatiofromfile)))
       {
               cout<<"No events MC"<<endl;
               return;
       }
	else if(neventsmc<1)
	{
		neventsmc=1; //dumpy normalization
		neventsmcall=1; //dumpy normalization

	}

	cout<<"A "<<neventsmc<<endl;
	TH1F* allgen=((TH1F*)managermc->GetPtHistogram1D("hHistPtGen",1,1))->Clone();
	allgen->SetName("AllGen");
	TH1F* allrecMC=GetOneHistFromPtDCAhisto("hHistPtRec","rawallMC",managermc,dcacutxy);
	TH1F* alleff=GetOneHistFromPtDCAhisto("hHistPtRecPrimary","effall",managermc,dcacutxy);
	TH1F* allrecdata=GetOneHistFromPtDCAhisto("hHistPtRec","rawalldata",managerdata,dcacutxy);
	
  	
	
	
	TH1F* spectraall=(TH1F*)allrecdata->Clone("recNch");
	spectraall->SetTitle("recNch");
	TH1F* contall=(TH1F*)allrecMC->Clone("contall");
	contall->SetTitle("contall");
	//contall->Add(alleff,-1);
	SubHistWithFullCorr(contall,alleff);
	alleff->Divide(alleff,allgen,1,1,"B");
	contall->Divide(contall,allrecMC,1,1,"B");
	
	GetCorrectedSpectra(spectraall,allrecdata,alleff,contall);
	Divideby2pipt(spectraall);

	allrecdata->Scale(1./neventsdata,"width");
	allgen->Scale(1./neventsmcall,"width");
	allrecMC->Scale(1./neventsmc,"width");
	spectraall->Scale(1./neventsdata,"width");


	lout->Add(allgen);
	lout->Add(allrecMC);
	lout->Add(alleff);
	lout->Add(allrecdata);
	lout->Add(spectraall);
	lout->Add(contall);
	
	for (int i=0;i<6;i++)
	{
	
		
		TString tmpname(rawspectramc[i]->GetTitle());
		tmpname.ReplaceAll("SpectraMC","%s");
		contallMC[i]=(TH1F*)rawspectramc[i]->Clone(Form(tmpname.Data(),"contallMC"));
		contallMC[i]->SetTitle(Form(tmpname.Data(),"contallMC"));
		contfit[i]=(TH1F*)rawspectramc[i]->Clone(Form(tmpname.Data(),"contfit"));
		contfit[i]->SetTitle(Form(tmpname.Data(),"contfit"));
		contWDfit[i]=(TH1F*)rawspectramc[i]->Clone(Form(tmpname.Data(),"contWDfit"));
		contWDfit[i]->SetTitle(Form(tmpname.Data(),"contWDfit"));
		contMatfit[i]=(TH1F*)rawspectramc[i]->Clone(Form(tmpname.Data(),"contMatfit"));
		contMatfit[i]->SetTitle(Form(tmpname.Data(),"contMatfit"));
		primaryfit[i]=(TH1F*)rawspectramc[i]->Clone(Form(tmpname.Data(),"primaryfit"));
		primaryfit[i]->SetTitle(Form(tmpname.Data(),"primaryfit"));
		contfit[i+6]=(TH1F*)rawspectramc[i]->Clone(Form(tmpname.Data(),"contfitonMC"));
		contfit[i+6]->SetTitle(Form(tmpname.Data(),"contfitonMC"));
		contWDfit[i+6]=(TH1F*)rawspectramc[i]->Clone(Form(tmpname.Data(),"contWDfitonMC"));
		contWDfit[i+6]->SetTitle(Form(tmpname.Data(),"contWDfitonMC"));
		contMatfit[i+6]=(TH1F*)rawspectramc[i]->Clone(Form(tmpname.Data(),"contMatfitonMC"));
		contMatfit[i+6]->SetTitle(Form(tmpname.Data(),"contMatfitonMC"));
		primaryfit[i+6]=(TH1F*)rawspectramc[i]->Clone(Form(tmpname.Data(),"primaryfitMC"));
		primaryfit[i+6]->SetTitle(Form(tmpname.Data(),"primaryfitMC"));
		
	
		
			
		contfit[i]->Reset();
		contWDfit[i]->Reset();
		contMatfit[i]->Reset();
		primaryfit[i]->Reset();
		

		contfit[i+6]->Reset();
		contWDfit[i+6]->Reset();
		contMatfit[i+6]->Reset();
		primaryfit[i+6]->Reset();
		
		SetBintoOne(primaryfit[i]);
		SetBintoOne(primaryfit[i+6]);		
		spectra[i]=(TH1F*)rawspectradata[i]->Clone(Form(tmpname.Data(),"SpectraFinal"));
		spectra[i]->SetTitle(Form(tmpname.Data(),"SpectraFinal"));
		spectraLeonardo[i]=(TH1F*)rawspectradata[i]->Clone(Form(tmpname.Data(),"SpectraFinalLeonardo"));
		spectraLeonardo[i]->SetTitle(Form(tmpname.Data(),"SpectraFinalLeonardo"));

		corrLeonardo[i]=(TH1F*)MCTruth[i]->Clone(Form(tmpname.Data(),"CorrFactLeonardo"));
		corrLeonardo[i]->SetTitle(Form(tmpname.Data(),"CorrFactLeonardo"));			
		corrLeonardo[i]->Divide(corrLeonardo[i],rawspectramc[i],1,1,"B");
		
		
		if((options&kusePIDcontaminatiofromfile)==kusePIDcontaminatiofromfile)
		{
			CopyCorrectionFromFile(filenames[1],"conPID",contPID);
			CopyCorrectionFromFile(filenames[1],"conPIDprimary",contPIDpri);

		}
		else
		{
			//contallMC[i]->Add(eff[i],-1.0);
			SubHistWithFullCorr(contallMC[i],eff[i]);
			//RecomputeErrors(contallMC[i]);
			contallMC[i]->Sumw2(); 
			contallMC[i]->Divide(contallMC[i],rawspectramc[i],1,1,"B");
			// contamintaion from PID but only primaries
			//contPIDpri[i]->Add(eff[i],-1.0);
			SubHistWithFullCorr(contPIDpri[i],eff[i]);
			//RecomputeErrors(contPIDpri[i]);
			contPIDpri[i]->Divide(contPIDpri[i],rawspectramc[i],1,1,"B");
		}

		if((options&kuseeffcorrectionfromfile)==kuseeffcorrectionfromfile)
			CopyCorrectionFromFile(filenames[0],"eff",eff);
		else
			eff[i]->Divide(eff[i],MCTruth[i],1,1,"B");
		
		
		contPID[i]->Sumw2();
		rawspectramc[i]->Sumw2();
		//contPID[i]->Add(contPID[i],rawspectramc[i],-1,1);
		SubHistWithFullCorr(contPID[i],rawspectramc[i]);
		contPID[i]->Scale(-1.0);

		//RecomputeErrors(contPID[i]);
		contPID[i]->ResetStats();
		contPID[i]->Sumw2();
		contPID[i]->Divide(contPID[i],rawspectramc[i],1,1,"B");
	
		if((options&kuseprimaryPIDcont)==kuseprimaryPIDcont)
			confinal[i]=(TH1F*)contPIDpri[i]->Clone(Form(tmpname.Data(),"confinal"));
		else	
			confinal[i]=(TH1F*)contPID[i]->Clone(Form(tmpname.Data(),"confinal"));
		confinal[i]->SetTitle(Form(tmpname.Data(),"confinal"));

		contSecMC[i]=(TH1F*)contWD[i]->Clone(Form(tmpname.Data(),"conSecMC"));
		contSecMC[i]->Add(contMat[i]);
		contWD[i]->Divide(contWD[i],rawspectramc[i],1,1,"B");
		contMat[i]->Divide(contMat[i],rawspectramc[i],1,1,"B");
		contSecMC[i]->Divide(contSecMC[i],rawspectramc[i],1,1,"B");
		if(i>2)
		{
			doubleconuntsdata[i-3]=(TH1F*)rawspectradata[i]->Clone(Form("DoublecountsDATA%s",Particle[i-3].Data()));
			doubleconuntsdata[i-3]->Reset();
			doubleconuntsMC[i-3]=(TH1F*)rawspectramc[i]->Clone(Form("DoublecountsMC%s",Particle[i-3].Data()));
			doubleconuntsMC[i-3]->Reset();

			CalculateDoubleCounts(doubleconuntsdata[i-3],rawspectradata,i-3,kTRUE);
			CalculateDoubleCounts(doubleconuntsMC[i-3],rawspectramc,i-3,kFALSE);

			
	
		}
	

	
		rawspectradata[i]->Scale(1./neventsdata,"width");
		rawspectramc[i]->Scale(1./neventsmc,"width");
		MCTruth[i]->Scale(1./neventsmcall,"width");
		spectraLeonardo[i]->Scale(1./neventsdata,"width");
	
	
	
		lout->Add(rawspectradata[i]);
		lout->Add(rawspectramc[i]);
		lout->Add(MCTruth[i]);
		lout->Add(eff[i]);
		lout->Add(contallMC[i]);
		lout->Add(contPID[i]);
		lout->Add(contWD[i]);
		lout->Add(contMat[i]);
		lout->Add(contfit[i]);
		lout->Add(contWDfit[i]);
		lout->Add(contMatfit[i]);
 		lout->Add(primaryfit[i]);	
		lout->Add(contfit[i+6]);
		lout->Add(contWDfit[i+6]);
		lout->Add(contMatfit[i+6]);
		lout->Add(primaryfit[i+6]);	
		lout->Add(spectra[i]);
		lout->Add(spectraLeonardo[i]);
		lout->Add(confinal[i]);
		lout->Add(contPIDpri[i]);
		lout->Add(contSecMC[i]);
		if(i>2)
		{
			lout->Add(doubleconuntsdata[i-3]);
			lout->Add(doubleconuntsMC[i-3]);
		}
	}
	outdate.ReplaceAll("/","_");
	configfile.ReplaceAll(".","_");
	TFile* fout=0x0;
	if(configfile.Length()>0&&(options&kuserangeonfigfile))
		fout=new TFile(Form("./results/ResMY_%s_%s_%#X_%s.root",outnamemc.Data(),outdate.Data(),options,configfile.Data()),"RECREATE");
	else
		fout=new TFile(Form("./results/ResMY_%s_%s_%#X.root",outnamemc.Data(),outdate.Data(),options),"RECREATE");
	if (((options&kdodca)==kdodca)&&((options&kuseseccontaminatiofromfile)!=kuseseccontaminatiofromfile))
		DCACorrectionMarek(managerdata,managermc,dcacutxy,fout,contfit,contWDfit,contMatfit,primaryfit);
	else if ((options&kuseseccontaminatiofromfile)==kuseseccontaminatiofromfile)
	{
		CopyCorrectionFromFile(filenames[2],"contfit",contfit);
		CopyCorrectionFromFile(filenames[2],"contWDfit",contWDfit);
		CopyCorrectionFromFile(filenames[2],"contMatfit",contMatfit);
		CopyCorrectionFromFile(filenames[2],"primaryfit",primaryfit);

	}
	else 
		cout<<"Secondary from MC"<<endl;
		

	for (int i=0;i<6;i++)
	{
			if(((options&kdodca)==kdodca)||((options&kuseseccontaminatiofromfile)==kuseseccontaminatiofromfile))
			{
				if((options&kuseprimaryPIDcont)||(i!=1&&i!=4)) //if we do not use cont PId only for primary  and this is a kaon that do not use fit
					confinal[i]->Add(contfit[i]);
				GetCorrectedSpectra(spectra[i],rawspectradata[i],eff[i],confinal[i]);
			}
			else
			{
				GetCorrectedSpectra(spectra[i],rawspectradata[i],eff[i],contallMC[i]);	
			}
			GetCorrectedSpectraLeonardo(spectraLeonardo[i],corrLeonardo[i],primaryfit[i],primaryfit[i+6]);
			if(options&kskipconcutonspectra)
				continue;
			if(options&kuseprimaryPIDcont)
			{
				CleanHisto(spectra[i],-1,100,contPIDpri[i]);
				CleanHisto(spectraLeonardo[i],-1,100,contPIDpri[i]);		
			}
			else
			{
				CleanHisto(spectra[i],-1,100,contPID[i]);
				CleanHisto(spectraLeonardo[i],-1,100,contPID[i]);
			}
			// Apply correction for wrongly simulated TOF signal in MC 
			if(options&kuseTOFcorrforPIDsignalmatching)
				TOFPIDsignalmatchingApply(spectra[i],TOFPIDsignalmatching[i%3]);
							
	}
	
	GFCorrection(spectra,tcutsdata->GetPtTOFMatching(),options);
	GFCorrection(spectraLeonardo,tcutsdata->GetPtTOFMatching(),options);
	
	Double_t ycut=tcutsdata->GetY();
	Double_t etacut=tcutsdata->GetEtaMax()-tcutsdata->GetEtaMin();
	if(etacut<0.00001)
	{
		cout<<"using eta window 1.6"<<endl; 
		etacut=1.6;

	}

	TH1F* allch=GetSumAllCh(spectra,mass,etacut);
	lout->Add(allch);	
       	if(options&kuseTOFmatchingcorrection)
	{	
		MatchingTOFEff(spectra,lout);
	 	MatchingTOFEff(spectraLeonardo);
		TOFMatchingForNch(spectraall);
	}
//	lout->ls();
	fout->cd();	
	TList* listqa=new TList();
	TList* canvaslist=new TList();
	Float_t vertexcorrection=1.0;
	Float_t corrbadchunksvtx=1.0;
	if ((options&knormalizationwithbin0integralsdata)||(options&knormalizationwithbin0integralsMC))
		corrbadchunksvtx=QAPlotsBoth(managerdata,managermc,ecutsdata,ecutsmc,tcutsdata,tcutsmc,listqa,canvaslist,0);
	else
		corrbadchunksvtx=QAPlotsBoth(managerdata,managermc,ecutsdata,ecutsmc,tcutsdata,tcutsmc,listqa,canvaslist,1);
	if (options&kveretxcorrectionandbadchunkscorr)
		vertexcorrection=corrbadchunksvtx;
	cout<<" VTX corr="<<vertexcorrection<<endl;
	if(TMath::Abs(ycut)>0.0)
		vertexcorrection=vertexcorrection/(2.0*ycut);
	for (int i=0;i<6;i++)
	{
		spectra[i]->Scale(vertexcorrection);
		spectraLeonardo[i]->Scale(vertexcorrection);
		if(TMath::Abs(ycut)>0.0)
		{
			rawspectradata[i]->Scale(1.0/(2.0*ycut));
                	rawspectramc[i]->Scale(1.0/(2.0*ycut));
                	MCTruth[i]->Scale(1.0/(2.0*ycut));
		}
	}	
	allch->Scale(vertexcorrection);
	spectraall->Scale(vertexcorrection/etacut);

	//spectraall->Scale(1.0/1.6);
	lout->Write("output",TObject::kSingleKey);	
	listqa->Write("outputQA",TObject::kSingleKey);
	canvaslist->Write("outputcanvas",TObject::kSingleKey);

	fout->Close();
	//Normaliztionwithbin0integrals();

}

Bool_t   OpenFile(TString dirname,TString outputname, Bool_t mcflag, Bool_t mcasdata)
{
	

	TString nameFile = Form("./%s/AnalysisResults%s.root",dirname.Data(),(mcflag?"MC":"DATA"));
	TFile *file = TFile::Open(nameFile.Data());
	if(!file)
	{
		cout<<"no file"<<endl;
		return false;
	}	
	TString sname=Form("OutputBothSpectraTask_%s_%s",(mcflag?"MC":"Data"),outputname.Data());
	if(mcasdata)
	{
		cout<<"using MC as data "<<endl;
		sname=Form("OutputBothSpectraTask_%s_%s","MC",outputname.Data());
	}
	file->ls();
	TDirectoryFile *dir=(TDirectoryFile*)file->Get(sname.Data());
	if(!dir)
	{
	//	cout<<"no dir "<<sname.Data()<<endl;	
		if(mcasdata)
		{
			cout<<"using MC as data "<<endl;
			sname=Form("OutputAODSpectraTask_%s_%s","MC",outputname.Data());
		}
		else	
			sname=Form("OutputAODSpectraTask_%s_%s",(mcflag?"MC":"Data"),outputname.Data());
	//	cout<<"trying "<<sname.Data()<<endl;
		dir=(TDirectoryFile*)file->Get(sname.Data());
		if(!dir)
		{
			cout<<"no dir "<<sname.Data()<<endl;
			return false;
		}
	}
	cout << " -- Info about " <<(mcflag?"MC":"DATA") <<" -- "<< endl;
	if(mcflag)
	{
		managermc= (AliSpectraBothHistoManager*) dir->Get("SpectraHistos");	
		ecutsmc = (AliSpectraBothEventCuts*) dir->Get("Event Cuts");
		tcutsmc = (AliSpectraBothTrackCuts*) dir->Get("Track Cuts");
		ecutsmc->PrintCuts();
		tcutsmc->PrintCuts();
		if(!managermc||!ecutsmc||!tcutsmc)
			return false;
		if(managermc->GetGenMulvsRawMulHistogram("hHistGenMulvsRawMul")->GetEntries()!=ecutsmc->GetHistoCuts()->GetBinContent(3))
			cout<<"Please check MC file possible problem with merging"<<" "<<managermc->GetGenMulvsRawMulHistogram("hHistGenMulvsRawMul")->GetEntries()<<" "<<ecutsmc->GetHistoCuts()->GetBinContent(3)<<endl;
	}
	else
	{
		managerdata= (AliSpectraBothHistoManager*) dir->Get("SpectraHistos");	
		ecutsdata = (AliSpectraBothEventCuts*) dir->Get("Event Cuts");
		tcutsdata = (AliSpectraBothTrackCuts*) dir->Get("Track Cuts");
		ecutsdata->PrintCuts();
		tcutsdata->PrintCuts();
		if(!managerdata||!ecutsdata||!tcutsdata)
			return false;
		if(managerdata->GetGenMulvsRawMulHistogram("hHistGenMulvsRawMul")->GetEntries()!=ecutsdata->GetHistoCuts()->GetBinContent(3))
			cout<<"Please check DATA file possible problem with merging"<<" "<<managerdata->GetGenMulvsRawMulHistogram("hHistGenMulvsRawMul")->GetEntries()<<" "<<ecutsdata->GetHistoCuts()->GetBinContent(3)<<endl;

	}
	return true;
}

 void GetMCTruth(TH1F** MCTruth)
 {
	for(Int_t icharge=0;icharge<2;icharge++)
	{
		for(Int_t ipart=0;ipart<3;ipart++)
		{
			Int_t index=ipart+3*icharge;
			TString hname=Form("hHistPtGenTruePrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data());
			MCTruth[index]=(TH1F*)((TH1F*)managermc->GetPtHistogram1D(hname.Data(),1,1))->Clone();
			MCTruth[index]->SetName(Form("MCTruth_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
			MCTruth[index]->SetTitle(Form("MCTruth_%s%s",Particle[ipart].Data(),Sign[icharge].Data()));
			MCTruth[index]->Sumw2(); 
		}
	}
}

TH1F* GetOneHistFromPtDCAhisto(TString name,TString hnameout,AliSpectraBothHistoManager* hman,TFormula* dcacutxy)
{
			histo =(TH1F*)((TH1F*) hman->GetPtHistogram1D(name.Data(),-1,-1))->Clone();
			histo->SetName(hnameout.Data());
			histo->SetTitle(hnameout.Data());
		  
			if(dcacutxy)
			{
				for(int ibin=1;ibin<histo->GetNbinsX();ibin++)
				{
					Double_t lowedge=histo->GetBinLowEdge(ibin);
					Float_t cut=dcacutxy->Eval(lowedge);
					TH1F* dcahist=(TH1F*)hman->GetDCAHistogram1D(name.Data(),lowedge,lowedge);
//					Float_t inyield=dcahist->Integral(dcahist->GetXaxis()->FindBin(-1.0*cut),dcahist->GetXaxis()->FindBin(cut));
					Float_t testyield=0.0;
					Float_t testerror=0.0; 	
					for (int itest=dcahist->GetXaxis()->FindBin(-1.0*cut);itest<=dcahist->GetXaxis()->FindBin(cut);itest++)
					{
						testyield+=dcahist->GetBinContent(itest);
						testerror+=dcahist->GetBinError(itest)*dcahist->GetBinError(itest);
					}
//					cout<<"corr data "<<histo->GetBinContent(ibin)<<" "<<inyield<<" "<<dcahist->Integral()<<" "<<hnameout.Data()<<endl;
//					cout<<"test dca "<<lowedge<<" "<<dcacutxy->Eval(lowedge)<<" "<<dcacutxy->Eval(histo->GetXaxis()->GetBinUpEdge(ibin))<<" "<<dcahist->GetBinLowEdge(dcahist->GetXaxis()->FindBin(-1.0*cut))<<" "<<dcahist->GetXaxis()->GetBinUpEdge(dcahist->GetXaxis()->FindBin(-1.0*cut))<<endl;

//					cout<<testyield<<" "<<TMath::Sqrt(testerror)<<" error2 "<<inyield<<" "<<TMath::Sqrt(inyield)<<endl;
						
					//histo->SetBinContent(ibin,inyield);
					//histo->SetBinError(ibin,TMath::Sqrt(inyield));
					histo->SetBinContent(ibin,testyield);
					histo->SetBinError(ibin,TMath::Sqrt(testerror));

				}
			}
			histo->Sumw2();
			return histo;
}



	
void GetPtHistFromPtDCAhisto(TString hnamein, TString hnameout, AliSpectraBothHistoManager* hman,TH1F** histo,TFormula* dcacutxy)
{
	//Float_t min[3]={0.3,0.3,0.45};
	//Float_t max[3]={1.5,1.2,2.2};
	for(Int_t icharge=0;icharge<2;icharge++)
	{
		for(Int_t ipart=0;ipart<3;ipart++)
		{
			Int_t index=ipart+3*icharge;
			Printf("Getting %s",hnamein.Data());
			TString nameinfinal=Form("%s%s%s",hnamein.Data(),Particle[ipart].Data(),Sign[icharge].Data());
			TString nameoutfinal=Form("%s%s%s",hnameout.Data(),Particle[ipart].Data(),Sign[icharge].Data());
			
			
			histo[index]=GetOneHistFromPtDCAhisto(nameinfinal,nameoutfinal,hman,dcacutxy);
			CleanHisto(histo[index],minRanges[ipart],maxRanges[ipart]);
		}
	} 
}
void CleanHisto(TH1F* h, Float_t minV, Float_t maxV,TH1* contpid=0x0)
{
	for (int i=0;i<=h->GetNbinsX();i++)
	{	
		if(h->GetXaxis()->GetBinCenter(i)<minV||h->GetXaxis()->GetBinCenter(i)>maxV)
		{
			h->SetBinContent(i,0);
			h->SetBinError(i,0);
		}	
		if(contpid)
		{
			if(contpid->GetBinContent(i)>fMaxContaminationPIDMC)
			{
				h->SetBinContent(i,0);
				h->SetBinError(i,0);
			}
		}
	}
}


void DCACorrectionMarek(AliSpectraBothHistoManager* hman_data, AliSpectraBothHistoManager* hman_mc,TFormula* fun,TFile *fout,TH1F** hcon,TH1F** hconWD,TH1F** hconMat,TH1F** hprimary)
{
  printf("\n\n-> DCA Correction");  
  
 
  Printf("\DCACorr");
  TString sample[2]={"data","mc"};
  ofstream debug("debugDCA.txt");
  TList* listofdcafits=new TList();
  for(Int_t icharge=0;icharge<2;icharge++)
  {
		for(Int_t ipart=0;ipart<3;ipart++)
		{
			Int_t index=ipart+3*icharge;
			for(Int_t isample=0;isample<2;isample++)
			{

				for(Int_t ibin_data=7;ibin_data<40;ibin_data++)
				{	
						
					Double_t lowedge=hcon[index]->GetBinLowEdge(ibin_data);
					Double_t binwidth=hcon[index]->GetBinWidth(ibin_data);
					debug<<"NEW "<<Particle[ipart].Data()<<" "<<Sign[icharge].Data()<<" "<<lowedge<<endl;
					if(fun)
					{						
						CutRange[1]=fun->Eval(lowedge);
						CutRange[0]=-1.0*CutRange[1];
					}	
					debug<<"cut  "<<CutRange[1]<<" "<<CutRange[0]<<endl;		
	     				Short_t fitsettings=DCAfitsettings(lowedge+0.5*binwidth,index);
					debug<<"settings "<< fitsettings<<endl;
					if(fitsettings==0)
						continue;	
						
					TCanvas *cDCA=new TCanvas(Form("cDCA%d%s%s%sbin%d",index,sample[isample].Data(),Particle[ipart].Data(),Sign[icharge].Data(),ibin_data),Form("cDCA%d%s%s%sbin%d",index,sample[isample].Data(),Particle[ipart].Data(),Sign[icharge].Data(),ibin_data),1700,1500);
					cDCA->SetMargin(0.1,0.02,0.1,0.02);
					TLegend* Leg1 = new TLegend(0.6,0.6,0.85,0.85,"","NDC");
					Leg1->SetFillStyle(kFALSE);
					Leg1->SetLineColor(kWhite);
					Leg1->SetBorderSize(0);

					
					if(isample==0)
						TH1F *hToFit =(TH1F*) ((TH1F*)hman_data->GetDCAHistogram1D(Form("hHistPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge))->Clone();
					if(isample==1)
						TH1F *hToFit =(TH1F*) ((TH1F*)hman_mc->GetDCAHistogram1D(Form("hHistPtRecSigma%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge))->Clone();
					debug<<Particle[ipart].Data()<<" "<<Sign[icharge].Data()<<" "<<lowedge<<endl;
					TH1F *hmc1=(TH1F*) ((TH1F*)hman_mc->GetDCAHistogram1D(Form("hHistPtRecSigmaPrimary%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge))->Clone();
					TH1F *hmc2=(TH1F*) ((TH1F*)hman_mc->GetDCAHistogram1D(Form("hHistPtRecSigmaSecondaryWeakDecay%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge))->Clone();
					TH1F *hmc3=(TH1F*) ((TH1F*)hman_mc->GetDCAHistogram1D(Form("hHistPtRecSigmaSecondaryMaterial%s%s",Particle[ipart].Data(),Sign[icharge].Data()),lowedge,lowedge))->Clone();
					Double_t minentries=100;
					debug<<hToFit->GetEntries()<<" "<<hmc1->GetEntries()<<" "<<hmc2->GetEntries()<<" "<<hmc3->GetEntries()<<endl;
					debug<<((fitsettings&0x1)&&hmc2->GetEntries()<=minentries)<<" "<<((fitsettings&0x2)&&hmc3->GetEntries()<=minentries)<<endl;
					cout<<hToFit->GetEntries()<<" "<<hmc1->GetEntries()<<" "<<hmc2->GetEntries()<<" "<<hmc3->GetEntries()<<endl;
                                        cout<<((fitsettings&0x1)&&hmc2->GetEntries()<=minentries)<<" "<<((fitsettings&0x2)&&hmc3->GetEntries()<=minentries)<<endl;
					if(hToFit->GetEntries()<=minentries || hmc1->GetEntries()<=minentries || ((fitsettings&0x1)&&hmc2->GetEntries()<=minentries) || ((fitsettings&0x2)&&hmc3->GetEntries()<=minentries))
						continue;
					hToFit->Sumw2();
					hmc1->Sumw2();
					hmc2->Sumw2();
					hmc3->Sumw2();
					
					Float_t corrforrebinning[4]={1.0,1.0,1.0,1.0};	
					Int_t binCutRange[]={hmc1->GetXaxis()->FindBin(CutRange[0]),hmc1->GetXaxis()->FindBin(CutRange[1])};			

					
					if(hmc3->GetNbinsX()>300)
					{
					
						corrforrebinning[0]=hToFit->Integral(binCutRange[0],binCutRange[1]);
						corrforrebinning[1]=hmc1->Integral(binCutRange[0],binCutRange[1]);
						corrforrebinning[2]=hmc2->Integral(binCutRange[0],binCutRange[1]);
						corrforrebinning[3]=hmc3->Integral(binCutRange[0],binCutRange[1]);

						hToFit->Rebin(30);
						hmc1->Rebin(30);
						hmc2->Rebin(30);
						hmc3->Rebin(30);

						binCutRange[0]=hmc1->GetXaxis()->FindBin(CutRange[0]);
						binCutRange[1]=hmc1->GetXaxis()->FindBin(CutRange[1]);


						//after rebbing we lose resolution of the dca this correction also us to do obtain inside used dca

						if(hToFit->Integral(binCutRange[0],binCutRange[1])>0.0)
							corrforrebinning[0]=corrforrebinning[0]/hToFit->Integral(binCutRange[0],binCutRange[1]);
						else	
							corrforrebinning[0]=1.0;
						if(hmc1->Integral(binCutRange[0],binCutRange[1])>0.0)
							corrforrebinning[1]=corrforrebinning[1]/hmc1->Integral(binCutRange[0],binCutRange[1]);
						else	
							corrforrebinning[1]=1.0;
						if(hmc2->Integral(binCutRange[0],binCutRange[1])>0.0)
							corrforrebinning[2]=corrforrebinning[2]/hmc2->Integral(binCutRange[0],binCutRange[1]);
						else	
							corrforrebinning[2]=1.0;
						if(hmc3->Integral(binCutRange[0],binCutRange[1])>0.0)
							corrforrebinning[3]=corrforrebinning[3]/hmc3->Integral(binCutRange[0],binCutRange[1]);
						else	
							corrforrebinning[3]=1.0;
							


					}

					cDCA->cd();
					gPad->SetGridy();
					gPad->SetGridx();
					gPad->SetLogy();
	 
					TObjArray *mc=0x0;
					Int_t Npar=3;	
					if(fitsettings==3)
						mc = new TObjArray(3);        // MC histograms are put in this array
					else
					{
						mc = new TObjArray(2);
						Npar=2;
					}
						
					mc->Add(hmc1);
					if(fitsettings&0x1)
						mc->Add(hmc2);
					if(fitsettings&0x2)
						mc->Add(hmc3);
					TFractionFitter* fit = new TFractionFitter(hToFit,mc); // initialise
					fit->Constrain(0,0.0,1.0);               // constrain fraction 1 to be between 0 and 1
  					Double_t defaultStep = 0.01;
					for (int iparm = 0; iparm < Npar; ++iparm) 
					{
      						TString name("frac"); name += iparm;
						if(iparm==0)
							fit->GetFitter()->SetParameter(iparm,name.Data(),0.85,0.01,0.0,1.0);
						else if (Npar==2)
							fit->GetFitter()->SetParameter(iparm,name.Data(),0.15,0.01,0.0,1.0);
						else
							fit->GetFitter()->SetParameter(iparm,name.Data(),0.075,0.01,0.0,1.0);
	
					}
					if(fitsettings&0x1)
						fit->Constrain(1,0.0,1.0);               // constrain fraction 1 to be between 0 and 1
					if(fitsettings&0x2)
						fit->Constrain(1+(fitsettings&0x1),0.0,1.0);               // constrain fraction 1 to be between 0 and 1
					
					Int_t binFitRange[]={hmc1->GetXaxis()->FindBin(FitRange[0]),hmc1->GetXaxis()->FindBin(FitRange[1])};			
					fit->SetRangeX(binFitRange[0],binFitRange[1]);
					hToFit->GetXaxis()->SetRange(binFitRange[0],binFitRange[1]);
				//	hToFit->SetTitle(Form("DCA distr - %s %s %s %lf",sample[isample].Data(),Particle[ipart].Data(),Sign[icharge].Data(),lowedge));
					hToFit->SetTitle("");
					Int_t status = fit->Fit();               // perform the fit
					cout << "fit status: " << status << endl;
					debug<<"fit status: " << status << endl;
		
					if (status == 0)
					{ 	
						Double_t v1=0.0,v2=0.0,v3=0.0;
						Double_t ev1=0.0,ev2=0.0,ev3=0.0;
						Double_t cov=0.0;
						                   
						// check on fit status
						TH1F* result = (TH1F*) fit->GetPlot();
						TH1F* PrimMCPred=(TH1F*)fit->GetMCPrediction(0);
						
						TH1F* secStMCPred=0X0;
					
						TH1F* secMCPred=0x0;
	    
						//first method, use directly the fit result
						fit->GetResult(0,v1,ev1);

						if(fitsettings&0x1)
						{
							fit->GetResult(1,v2,ev2);
							secStMCPred=(TH1F*)fit->GetMCPrediction(1);

						}
						if(fitsettings&0x2)
						{
							fit->GetResult(1+(fitsettings&0x1),v3,ev3);
							secMCPred=(TH1F*)fit->GetMCPrediction(1+(fitsettings&0x1));
							if(fitsettings&0x1)
								cov=fit->GetFitter()->GetCovarianceMatrixElement(1,2);


						}
						
					
						debug<<v1<<" "<<ev1<<" "<<v2<<" "<<ev2<<" "<<v3<<" "<<ev3<<" "<<" "<<cov<<endl;
					
	    					// becuase dca cut range is not a fit range the results from TFractionFitter should be rescale
						// This can be done in two ways or use input histograms or output histograms
						// The difference between those two methods should be on the level of statistical error	 	
	   					// I use output histograms 
						
 						// Method 1 input histo 	

						Float_t normalizationdata=hToFit->Integral(hToFit->GetXaxis()->FindBin(CutRange[0]),hToFit->GetXaxis()->FindBin(CutRange[1]))/hToFit->Integral(binFitRange[0],binFitRange[1]);
						normalizationdata*=corrforrebinning[0];

						Float_t normalizationmc1=(hmc1->Integral(binCutRange[0],binCutRange[1])/hmc1->Integral(binFitRange[0],binFitRange[1]))/normalizationdata;
						Float_t normalizationmc2=0.0;
						if(fitsettings&0x1)
							normalizationmc2=(hmc2->Integral(binCutRange[0],binCutRange[1])/hmc2->Integral(binFitRange[0],binFitRange[1]))/normalizationdata;
						Float_t normalizationmc3=0.0;
						if(fitsettings&0x2)
							normalizationmc3=(hmc3->Integral(binCutRange[0],binCutRange[1])/hmc3->Integral(binFitRange[0],binFitRange[1]))/normalizationdata;

						normalizationmc1*=corrforrebinning[1];
						normalizationmc2*=corrforrebinning[2];
						normalizationmc3*=corrforrebinning[3];

						debug<<"After Nor"<<endl;
						debug<<v1*normalizationmc1<<" "<<ev1*normalizationmc1<<" "<<v2*normalizationmc2<<" "<<ev2*normalizationmc2<<" "<<v3*normalizationmc3<<" "<<ev3*normalizationmc3<<" "<<endl;
						debug<<1.0-v1*normalizationmc1<<" "<<ev1*normalizationmc1<<" "<<v2*normalizationmc2+v3*normalizationmc3<<" "<<TMath::Sqrt(ev2*ev2*normalizationmc2*normalizationmc2+ev3*ev3*normalizationmc3*normalizationmc3+cov*normalizationmc3*normalizationmc2)<<endl;
						debug<<"addtional info"<<endl;


					       //Method 2 output histo		

						Float_t normalizationdata1=result->Integral(binCutRange[0],binCutRange[1])/result->Integral(binFitRange[0],binFitRange[1]);
						

						// if the cut range is bigger the fit range we should calculate the normalization factor for data using the data histogram 
						// because result histogram has entries only in fits range 	 
						if(FitRange[0]>CutRange[0]||FitRange[1]<CutRange[1])	
							normalizationdata1=normalizationdata;
					
						normalizationdata1*=corrforrebinning[0];


						Float_t normalizationmc11=(PrimMCPred->Integral(binCutRange[0],binCutRange[1])/PrimMCPred->Integral(binFitRange[0],binFitRange[1]))/normalizationdata1;
						Float_t normalizationmc21=0.0;
						if(fitsettings&0x1)
							normalizationmc21=(secStMCPred->Integral(binCutRange[0],binCutRange[1])/secStMCPred->Integral(binFitRange[0],binFitRange[1]))/normalizationdata1;
						Float_t normalizationmc31=0.0;
						if(fitsettings&0x2)
							normalizationmc31=(secMCPred->Integral(binCutRange[0],binCutRange[1])/secMCPred->Integral(binFitRange[0],binFitRange[1]))/normalizationdata1;
						
						normalizationmc11*=corrforrebinning[1];
						normalizationmc21*=corrforrebinning[2];
						normalizationmc31*=corrforrebinning[3];

						debug<<"After Nor 2"<<endl;
						debug<<v1*normalizationmc11<<" "<<ev1*normalizationmc11<<" "<<v2*normalizationmc21<<" "<<ev2*normalizationmc21<<" "<<v3*normalizationmc31<<" "<<ev3*normalizationmc31<<endl;
						
						debug<<1.0-v1*normalizationmc11<<" "<<ev1*normalizationmc11<<" "<<v2*normalizationmc21+v3*normalizationmc31<<" "<<TMath::Sqrt(ev2*ev2*normalizationmc21*normalizationmc21+ev3*ev3*normalizationmc31*normalizationmc31+cov*normalizationmc31*normalizationmc21)<<endl;
					
						
						hconWD[index+6*isample]->SetBinContent(ibin_data,v2*normalizationmc21);
						hconWD[index+6*isample]->SetBinError(ibin_data,ev2*normalizationmc21);
						hconMat[index+6*isample]->SetBinContent(ibin_data,v3*normalizationmc31);
						hconMat[index+6*isample]->SetBinError(ibin_data,ev3*normalizationmc31);
						hprimary[index+6*isample]->SetBinContent(ibin_data,v1*normalizationmc11);
						hprimary[index+6*isample]->SetBinError(ibin_data,ev1*normalizationmc11);
						hcon[index+6*isample]->SetBinContent(ibin_data,v2*normalizationmc21+v3*normalizationmc31);
						hcon[index+6*isample]->SetBinError(ibin_data,TMath::Sqrt(ev2*ev2*normalizationmc21*normalizationmc21+ev3*ev3*normalizationmc31*normalizationmc31+cov*normalizationmc31*normalizationmc21));
						
						
						
						//Drawing section
						result->Scale(1.0/result->Integral(result->GetXaxis()->FindBin(FitRange[0]),result->GetXaxis()->FindBin(FitRange[1])));
						hToFit->Scale(1.0/hToFit->Integral(hToFit->GetXaxis()->FindBin(FitRange[0]),hToFit->GetXaxis()->FindBin(FitRange[1])));
						PrimMCPred->Scale(v1/PrimMCPred->Integral(PrimMCPred->GetXaxis()->FindBin(FitRange[0]),PrimMCPred->GetXaxis()->FindBin(FitRange[1])));

						hToFit->SetMinimum(0.0001);
						hToFit->GetXaxis()->SetTitle("DCA_{xy} (cm)");
						hToFit->GetYaxis()->SetTitle("N_{counts}/N_{counts}(-3cm;3cm)");
						hToFit->GetYaxis()->SetTitleOffset(1.3);
						hToFit->DrawClone("E1x0");
						Leg1->AddEntry(hToFit,"data","p");
						result->SetTitle("Fit result");
						result->SetLineColor(kBlack);
						Leg1->AddEntry(result,"fit result","l");
						result->DrawClone("histsame");
					
						PrimMCPred->SetLineColor(kGreen+2);
						PrimMCPred->SetLineStyle(2);
						 PrimMCPred->SetLineWidth(3.0);
						Leg1->AddEntry(PrimMCPred,"primaries","l");
						PrimMCPred->DrawClone("histsame");
						if(fitsettings&0x1)
						{

							secStMCPred->Scale(v2/secStMCPred->Integral(secStMCPred->GetXaxis()->FindBin(FitRange[0]),secStMCPred->GetXaxis()->FindBin(FitRange[1])));
							secStMCPred->SetLineColor(kRed);
							secStMCPred->SetLineWidth(3.0);

							secStMCPred->SetLineStyle(3);
							Leg1->AddEntry(secStMCPred,"weak decays","l");
							secStMCPred->DrawClone("histsame");

						}
						if(fitsettings&0x2)
						{
							
							secMCPred->Scale(v3/secMCPred->Integral(secMCPred->GetXaxis()->FindBin(FitRange[0]),secMCPred->GetXaxis()->FindBin(FitRange[1])));
							secMCPred->SetLineColor(kBlue);
							secMCPred->SetLineWidth(3.0);

							secMCPred->SetLineStyle(4);	
							Leg1->AddEntry(secMCPred,"material","l");
							secMCPred->DrawClone("histsame");
	    
						}   
					}				
					else
					{
						hconWD[index+6*isample]->SetBinContent(ibin_data,0.0);
						hconWD[index+6*isample]->SetBinError(ibin_data,0.0);
						hconMat[index+6*isample]->SetBinContent(ibin_data,0.0);
						hconMat[index+6*isample]->SetBinError(ibin_data,0.0);					
						hcon[index+6*isample]->SetBinContent(ibin_data,0.0);
						hcon[index+6*isample]->SetBinError(ibin_data,0.0);
						hprimary[index+6*isample]->SetBinContent(ibin_data,1.0);
						hprimary[index+6*isample]->SetBinError(ibin_data,0.0);
					}
					Leg1->DrawClone();
					TLatex* texttitle=new TLatex();
					texttitle->SetNDC();
					texttitle->SetTextSize(0.04);
					texttitle->DrawLatex(0.12,0.92,Form("%s %.2f<#it{p}_{T} < %.2f (GeV/#it{c})",symboles[index].Data(),lowedge,binwidth+lowedge));
					listofdcafits->Add(cDCA);
					
					//cDCA->Write();
					delete hToFit;
				}
	

			}

		}
	}
	fout->cd();
	listofdcafits->Write("DCAfits",TObject::kSingleKey);	
}

void RecomputeErrors(TH1* h)
{
	for (int i=0; i<=h->GetXaxis()->GetNbins(); i++)
	{
		cout<<h->GetBinContent(i)<<" "<<h->GetBinError(i)<<" error "<<TMath::Sqrt(h->GetBinContent(i))<<endl;
		h->SetBinError(i,TMath::Sqrt(h->GetBinContent(i)));
	}
	h->Sumw2(); 	
}
void SetBintoOne(TH1* h)
{
	for (int i=0;i<=h->GetXaxis()->GetNbins(); i++) 
	{
		h->SetBinContent(i,1);
		h->SetBinError(i,0);
	}
}


void GetCorrectedSpectra(TH1F* corr,TH1F* raw,TH1F* eff, TH1F* con)
{
	for (int i=0;i<=corr->GetXaxis()->GetNbins(); i++) 
	{
		corr->SetBinContent(i,1);
		corr->SetBinError(i,0);
	}
	corr->Sumw2(); 
	corr->Add(con,-1);
	corr->Sumw2(); 	
	corr->Divide(eff);
	corr->Sumw2(); 
	corr->Multiply(raw);
	corr->Sumw2(); 
}
void GetCorrectedSpectraLeonardo(TH1F* spectra,TH1F* correction, TH1F* hprimaryData,TH1F* hprimaryMC)
{
	spectra->Sumw2(); 
	spectra->Multiply(correction);
	spectra->Sumw2(); 
	hprimaryData->Sumw2(); 
	spectra->Multiply(hprimaryData);
	hprimaryMC->Sumw2(); 
	spectra->Divide(hprimaryMC);
}

void GFCorrection(TH1F **Spectra,Float_t tofpt,UInt_t options)
{
	if (options&kgeantflukaKaon)
	{		
	 	 //Geant/Fluka Correction
	  	Printf("\nGF correction for Kaons");
	  	//Getting GF For Kaons in TPC
	  	TGraph *gGFCorrectionKaonPlus=new TGraph();
	  	gGFCorrectionKaonPlus->SetName("gGFCorrectionKaonPlus");
	  	gGFCorrectionKaonPlus->SetTitle("gGFCorrectionKaonPlus");
	  	TGraph *gGFCorrectionKaonMinus=new TGraph();
	  	gGFCorrectionKaonMinus->SetName("gGFCorrectionKaonMinus");
	  	gGFCorrectionKaonMinus->SetTitle("gGFCorrectionKaonMinus");
	 	 TString fnameGeanFlukaK="GFCorrection/correctionForCrossSection.321.root";
  	  	TFile *fGeanFlukaK= TFile::Open(fnameGeanFlukaK.Data());
	  	if (!fGeanFlukaK)
		{
			fnameGeanFlukaK="$ALICE_ROOT/PWGLF/SPECTRA/PiKaPr/TestAOD/correctionForCrossSection.321.root";
			fGeanFlukaK= TFile::Open(fnameGeanFlukaK.Data());
			if (!fGeanFlukaK)
				return;
		}
	  	TH1F *hGeantFlukaKPos=(TH1F*)fGeanFlukaK->Get("gHistCorrectionForCrossSectionParticles");
	  	TH1F *hGeantFlukaKNeg=(TH1F*)fGeanFlukaK->Get("gHistCorrectionForCrossSectionAntiParticles");
	  	//getting GF func for Kaons with TOF
	  	TF1 *fGFKPosTracking;
	  	fGFKPosTracking = TrackingEff_geantflukaCorrection(3,kPositive);
	  	TF1 *fGFKNegTracking;
	 	 fGFKNegTracking = TrackingEff_geantflukaCorrection(3,kNegative);
	 	 TF1 *fGFKPosMatching;
	 	 fGFKPosMatching = TOFmatchMC_geantflukaCorrection(3,kPositive);
	 	 TF1 *fGFKNegMatching;
	 	 fGFKNegMatching = TOFmatchMC_geantflukaCorrection(3,kNegative);
		 if(tcutsdata->GetUseTypeDependedTOFCut())
			tofpt=tcutsdata->GetPtTOFMatchingKaon();

	 	 for(Int_t binK=0;binK<=Spectra[1]->GetNbinsX();binK++)
	  	{
			if(Spectra[1]->GetBinCenter(binK)<tofpt)
			{//use TPC GeantFlukaCorrection
				Float_t FlukaCorrKPos=hGeantFlukaKPos->GetBinContent(hGeantFlukaKPos->FindBin(Spectra[1]->GetBinCenter(binK)));
				Float_t FlukaCorrKNeg=hGeantFlukaKNeg->GetBinContent(hGeantFlukaKNeg->FindBin(Spectra[4]->GetBinCenter(binK)));
			//	Printf("TPC Geant/Fluka: pt:%f  Pos:%f  Neg:%f",Spectra[1]->GetBinCenter(binK),FlukaCorrKPos,FlukaCorrKNeg);
				Spectra[1]->SetBinContent(binK,Spectra[1]->GetBinContent(binK)*FlukaCorrKPos);
				Spectra[4]->SetBinContent(binK,Spectra[4]->GetBinContent(binK)*FlukaCorrKNeg);
				Spectra[1]->SetBinError(binK,Spectra[1]->GetBinError(binK)*FlukaCorrKPos);
				Spectra[4]->SetBinError(binK,Spectra[4]->GetBinError(binK)*FlukaCorrKNeg);
				gGFCorrectionKaonPlus->SetPoint(binK,Spectra[1]->GetBinCenter(binK),FlukaCorrKPos);
				gGFCorrectionKaonMinus->SetPoint(binK,Spectra[4]->GetBinCenter(binK),FlukaCorrKNeg);
			}
			else
			{
				gGFCorrectionKaonPlus->SetPoint(binK,Spectra[1]->GetBinCenter(binK),0);
				gGFCorrectionKaonMinus->SetPoint(binK,Spectra[4]->GetBinCenter(binK),0);
				Float_t FlukaCorrKPosTracking=fGFKPosTracking->Eval(Spectra[1]->GetBinCenter(binK));
				Float_t FlukaCorrKNegTracking=fGFKNegTracking->Eval(Spectra[1]->GetBinCenter(binK));
			//	Printf("TPC/TOF Geant/Fluka Tracking: pt:%f  Pos:%f  Neg:%f",Spectra[1]->GetBinCenter(binK),FlukaCorrKPosTracking,FlukaCorrKNegTracking);
				Spectra[1]->SetBinContent(binK,Spectra[1]->GetBinContent(binK)*FlukaCorrKPosTracking);
				Spectra[4]->SetBinContent(binK,Spectra[4]->GetBinContent(binK)*FlukaCorrKNegTracking);
				Spectra[1]->SetBinError(binK,Spectra[1]->GetBinError(binK)*FlukaCorrKPosTracking);
				Spectra[4]->SetBinError(binK,Spectra[4]->GetBinError(binK)*FlukaCorrKNegTracking);
				Float_t FlukaCorrKPosMatching=fGFKPosMatching->Eval(Spectra[1]->GetBinCenter(binK));
				Float_t FlukaCorrKNegMatching=fGFKNegMatching->Eval(Spectra[1]->GetBinCenter(binK));
			//	Printf("TPC/TOF Geant/Fluka Matching: pt:%f  Pos:%f  Neg:%f",Spectra[1]->GetBinCenter(binK),FlukaCorrKPosMatching,FlukaCorrKNegMatching);
				Spectra[1]->SetBinContent(binK,Spectra[1]->GetBinContent(binK)*FlukaCorrKPosMatching);
				Spectra[4]->SetBinContent(binK,Spectra[4]->GetBinContent(binK)*FlukaCorrKNegMatching);
				Spectra[1]->SetBinError(binK,Spectra[1]->GetBinError(binK)*FlukaCorrKPosMatching);
				Spectra[4]->SetBinError(binK,Spectra[4]->GetBinError(binK)*FlukaCorrKNegMatching);
			}
	  	}
	  }
	  if(!(options&kgeantflukaProton))	
		return;
	  //Geant Fluka for P in TPC
	  Printf("\nGF correction for Protons");
	  const Int_t kNCharge=2;
	  Int_t kPos=0;
	  Int_t kNeg=1;
          TString fnameGFProtons= "GFCorrection/correctionForCrossSection.root";
	  TFile* fGFProtons = TFile::Open(fnameGFProtons.Data());
	  if (!fGFProtons)
	  { 
		fnameGFProtons="$ALICE_ROOT/PWGLF/SPECTRA/PiKaPr/TestAOD/correctionForCrossSection.root";
		fGFProtons = TFile::Open(fnameGFProtons.Data());
		if (!fGFProtons)
			return;
	  }
		


	  TH2D * hCorrFluka[kNCharge];
	  TH2D * hCorrFluka[2];
	  hCorrFluka[kPos] = (TH2D*)fGFProtons->Get("gHistCorrectionForCrossSectionProtons");
	  hCorrFluka[kNeg] = (TH2D*)fGFProtons->Get("gHistCorrectionForCrossSectionAntiProtons");
	  //getting GF func for Kaons with TPCTOF
	  TF1 *fGFpPosTracking;
	  fGFpPosTracking = TrackingEff_geantflukaCorrection(4,kPositive);
	  TF1 *fGFpNegTracking;
	  fGFpNegTracking = TrackingEff_geantflukaCorrection(4,kNegative);
	  TF1 *fGFpPosMatching;
	  fGFpPosMatching = TOFmatchMC_geantflukaCorrection(4,kPositive);
	  TF1 *fGFpNegMatching;
	  fGFpNegMatching = TOFmatchMC_geantflukaCorrection(4,kNegative);
	  
	 
	   Int_t nbins = Spectra[2]->GetNbinsX();
	   if(tcutsdata->GetUseTypeDependedTOFCut())
		tofpt=tcutsdata->GetPtTOFMatchingProton();

		for(Int_t ibin = 0; ibin < nbins; ibin++)
		{
			if(Spectra[2]->GetBinCenter(ibin)<tofpt)
			{//use TPC GeantFlukaCorrection
				for(Int_t icharge = 0; icharge < kNCharge; icharge++)
				{
					Int_t nbinsy=hCorrFluka[icharge]->GetNbinsY();
					Float_t pt = Spectra[2]->GetBinCenter(ibin);
					Float_t minPtCorrection = hCorrFluka[icharge]->GetYaxis()->GetBinLowEdge(1);
					Float_t maxPtCorrection = hCorrFluka[icharge]->GetYaxis()->GetBinLowEdge(nbinsy+1);
					if (pt < minPtCorrection) 
						pt = minPtCorrection+0.0001;
					if (pt > maxPtCorrection) 
						pt = maxPtCorrection;
					Float_t correction = hCorrFluka[icharge]->GetBinContent(1,hCorrFluka[icharge]->GetYaxis()->FindBin(pt));
				
					if (correction > 0.0) 
					{// If the bin is empty this is a  0
			//			cout<<icharge<<" "<<ibin<<" "<<correction<<endl;
						Spectra[icharge*3+2]->SetBinContent(ibin,Spectra[icharge*3+2]->GetBinContent(ibin)*correction);
						Spectra[icharge*3+2]->SetBinError(ibin,Spectra[icharge*3+2]->GetBinError(ibin)*correction);
					}
					else if (Spectra[icharge*3+2]->GetBinContent(ibin) > 0.0) 
					{ 
						// If we are skipping a non-empty bin, we notify the user
						cout << "Fluka/GEANT: Not correcting bin "<<ibin << " for " <<"protons Pt:"<< pt<< endl;
						cout << " Bin content: " << Spectra[icharge*3+2]->GetBinContent(ibin)  << endl;
					}
				}
			}
			else
			{
				Float_t FlukaCorrpPosTracking=fGFpPosTracking->Eval(Spectra[2]->GetBinCenter(ibin));
				Float_t FlukaCorrpNegTracking=fGFpNegTracking->Eval(Spectra[2]->GetBinCenter(ibin));
			//	Printf("TPC/TOF Geant/Fluka Tracking: pt:%f  Pos:%f  Neg:%f",Spectra[2]->GetBinCenter(ibin),FlukaCorrpPosTracking,FlukaCorrpNegTracking);
				Spectra[2]->SetBinContent(ibin,Spectra[2]->GetBinContent(ibin)*FlukaCorrpPosTracking);
				Spectra[5]->SetBinContent(ibin,Spectra[5]->GetBinContent(ibin)*FlukaCorrpNegTracking);
				Spectra[2]->SetBinError(ibin,Spectra[2]->GetBinError(ibin)*FlukaCorrpPosTracking);
				Spectra[5]->SetBinError(ibin,Spectra[5]->GetBinError(ibin)*FlukaCorrpNegTracking);
				Float_t FlukaCorrpPosMatching=fGFpPosMatching->Eval(Spectra[2]->GetBinCenter(ibin));
				Float_t FlukaCorrpNegMatching=fGFpNegMatching->Eval(Spectra[2]->GetBinCenter(ibin));
			//	Printf("TPC/TOF Geant/Fluka Matching: pt:%f  Pos:%f  Neg:%f",Spectra[2]->GetBinCenter(ibin),FlukaCorrpPosMatching,FlukaCorrpNegMatching);
				Spectra[2]->SetBinContent(ibin,Spectra[2]->GetBinContent(ibin)*FlukaCorrpPosMatching);
				Spectra[5]->SetBinContent(ibin,Spectra[5]->GetBinContent(ibin)*FlukaCorrpNegMatching);
				Spectra[2]->SetBinError(ibin,Spectra[2]->GetBinError(ibin)*FlukaCorrpPosMatching);
				Spectra[5]->SetBinError(ibin,Spectra[5]->GetBinError(ibin)*FlukaCorrpNegMatching);
			}		
		}
	 fGeanFlukaK->Close();
	 delete fGeanFlukaK;
}


///////////
TF1 *
TrackingEff_geantflukaCorrection(Int_t ipart, Int_t icharge)
{

  if (ipart == 3 && icharge == kNegative) {
    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "TrackingPtGeantFlukaCorrectionKaMinus(x)", 0., 5.);
    return f;
  }
  else if (ipart == 4 && icharge == kNegative) {
    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "TrackingPtGeantFlukaCorrectionPrMinus(x)", 0., 5.);
  }
  else
    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "TrackingPtGeantFlukaCorrectionNull(x)", 0., 5.);

  return f;
}

Double_t
TrackingPtGeantFlukaCorrectionNull(Double_t pTmc)
{
  return 1.;
}

Double_t
TrackingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
{
  return (1 - 0.129758 *TMath::Exp(-pTmc*0.679612));
}

Double_t
TrackingPtGeantFlukaCorrectionKaMinus(Double_t pTmc)
{
  return TMath::Min((0.972865 + 0.0117093*pTmc), 1.);
}
///////////////////////////////////////////
TF1 *
TOFmatchMC_geantflukaCorrection(Int_t ipart, Int_t icharge)
{

  if (ipart == 3 && icharge == kNegative) {
    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "MatchingPtGeantFlukaCorrectionKaMinus(x)", 0., 5.);
    return f;
  }
  else if (ipart == 4 && icharge == kNegative) {
    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "MatchingPtGeantFlukaCorrectionPrMinus(x)", 0., 5.);
  }
  else
    TF1 *f = new TF1(Form("fGeantFluka_%s_%s", AliPID::ParticleName(ipart), Sign[icharge]), "MatchingPtGeantFlukaCorrectionNull(x)", 0., 5.);

  return f;
}


Double_t
MatchingPtGeantFlukaCorrectionNull(Double_t pTmc)
{
  return 1.;
}

Double_t 
MatchingPtGeantFlukaCorrectionPrMinus(Double_t pTmc)
{
  Float_t ptTPCoutP =pTmc*(1-6.81059e-01*TMath::Exp(-pTmc*4.20094));
  return (TMath::Power(1 - 0.129758*TMath::Exp(-ptTPCoutP*0.679612),0.07162/0.03471));
}

Double_t
MatchingPtGeantFlukaCorrectionKaMinus(Double_t pTmc)
{
  Float_t ptTPCoutK=pTmc*(1- 3.37297e-03/pTmc/pTmc - 3.26544e-03/pTmc);
  return TMath::Min((TMath::Power(0.972865 + 0.0117093*ptTPCoutK,0.07162/0.03471)), 1.);
}
void MatchingTOFEff(TH1F** Spectra, TList* list=0x0)
{
	  if(TOFMatchingScalling[0]<0.0&&TOFMatchingScalling[1]<0.0)
	  {
		TH1F *hMatcEffPos_data=(TH1F*)tcutsdata->GetHistoNMatchedPos();
		  hMatcEffPos_data->Sumw2();
		  //hMatcEffPos_data->Divide((TH1F*)tcutsdata->GetHistoNSelectedPos());
		  hMatcEffPos_data->Divide(hMatcEffPos_data,(TH1F*)tcutsdata->GetHistoNSelectedPos(),1,1,"B");
		  hMatcEffPos_data->SetTitle("Matching Eff Pos - data");
		  TH1F *hMatcEffNeg_data=(TH1F*)tcutsdata->GetHistoNMatchedNeg();
		  hMatcEffNeg_data->Sumw2();
		  //hMatcEffNeg_data->Divide((TH1F*)tcutsdata->GetHistoNSelectedNeg());
		  hMatcEffNeg_data->Divide(hMatcEffNeg_data,(TH1F*)tcutsdata->GetHistoNSelectedNeg(),1,1,"B");
		  hMatcEffNeg_data->SetTitle("Matching Eff Neg - data");
		  TH1F *hMatcEffPos_mc=(TH1F*)tcutsmc->GetHistoNMatchedPos();
		  hMatcEffPos_mc->Sumw2();
		  //hMatcEffPos_mc->Divide((TH1F*)tcutsmc->GetHistoNSelectedPos());
		  hMatcEffPos_mc->Divide(hMatcEffPos_mc,(TH1F*)tcutsmc->GetHistoNSelectedPos(),1,1,"B");
		  hMatcEffPos_mc->SetTitle("Matching Eff Pos - mc");
		  TH1F *hMatcEffNeg_mc=(TH1F*)tcutsmc->GetHistoNMatchedNeg();
		  hMatcEffNeg_mc->Sumw2();
		  //hMatcEffNeg_mc->Divide((TH1F*)tcutsmc->GetHistoNSelectedNeg());
		  hMatcEffNeg_mc->Divide(hMatcEffNeg_mc,(TH1F*)tcutsmc->GetHistoNSelectedNeg(),1,1,"B");
		  hMatcEffNeg_mc->SetTitle("Matching Eff Neg - mc");


		  hMatcEffPos_data->Divide(hMatcEffPos_mc);
		  hMatcEffNeg_data->Divide(hMatcEffNeg_mc);
		  hMatcEffPos_data->SetName("MatchingTOFPos");
		  hMatcEffNeg_data->SetName("MatchingTOFNeg");
		  
		  
		  TF1 *pol0MatchPos_data=new TF1("pol0MatchPos_data","pol0",.6,5);
		  hMatcEffPos_data->Fit("pol0MatchPos_data","MNR");
		  TF1 *pol0MatchNeg_data=new TF1("pol0MatchNeg_data","pol0",.6,5);
		  hMatcEffNeg_data->Fit("pol0MatchNeg_data","MNR");
		
		list->Add(hMatcEffPos_data);
		  list->Add(hMatcEffNeg_data);
		
			
		  TOFMatchingScalling[0]=pol0MatchPos_data->GetParameter(0);
		  TOFMatchingScalling[1]=pol0MatchNeg_data->GetParameter(0);

	  }
	  //Correction spectra for matching efficiency
	  //For the moment I'm using the inclusive correction
	  for(Int_t ipart=0;ipart<3;ipart++)
	  {
		  
		for(Int_t ibin=1;ibin<Spectra[ipart]->GetNbinsX();ibin++)
		{
			Float_t ptspectra=Spectra[ipart]->GetBinCenter(ibin);
			if(ptspectra<tcutsdata->GetPtTOFMatching())
				continue;
		  //Spectra[ipart]->SetBinContent(ibin,( Spectra[ipart]->GetBinContent(ibin)/hMatcEffPos_data->GetBinContent(hMatcEffPos_data->FindBin(ptspectra))));
		  //Spectra[ipart+3]->SetBinContent(ibin,( Spectra[ipart+3]->GetBinContent(ibin)/hMatcEffNeg_data->GetBinContent(hMatcEffNeg_data->FindBin(ptspectra))));
			Spectra[ipart]->SetBinContent(ibin,( Spectra[ipart]->GetBinContent(ibin)/TOFMatchingScalling[0]));
			Spectra[ipart+3]->SetBinContent(ibin,( Spectra[ipart+3]->GetBinContent(ibin)/TOFMatchingScalling[1]));
		}
	  }
}
Double_t eta2y(Double_t pt, Double_t mass, Double_t eta)
{
  Double_t mt = TMath::Sqrt(mass * mass + pt * pt);
  return TMath::ASinH(pt / mt * TMath::SinH(eta));
}

TH1* GetSumAllCh(TH1F** spectra, Double_t* mass,Double_t etacut)
{
	TH1F* allch=(((TH1F*))spectra[0]->Clone("allCh"));
	allch->Reset();
	for (int i=0;i<6;i++)
	{
		Double_t masstmp=mass[i%3];
		for (int j=1;j<spectra[i]->GetXaxis()->GetNbins();j++)
		{
			Float_t value=spectra[i]->GetBinContent(j);
			Float_t error=spectra[i]->GetBinError(j);
			if(value>0.0)
			{
				Float_t pt=spectra[i]->GetXaxis()->GetBinCenter(j);
				Float_t mt2=masstmp*masstmp+pt*pt;		
				Float_t mt=TMath::Sqrt(mt2);
				Float_t maxy=eta2y(pt,masstmp,etacut/2.0);
				Float_t conver=maxy*(TMath::Sqrt(1-masstmp*masstmp/(mt2*TMath::CosH(maxy)*TMath::CosH(maxy)))+TMath::Sqrt(1-masstmp*masstmp/(mt2*TMath::CosH(0.0)*TMath::CosH(0.0))));
				conver=conver/etacut;
				//cout<<maxy<<" "<<conver<<" "<<masstmp<<""<<spectra[i]->GetName()<<endl;
				Float_t bincontent=allch->GetBinContent(j);
				Float_t binerror=allch->GetBinError(j);
				bincontent+=conver*value;
				binerror=TMath::Sqrt(binerror*binerror+conver*conver*error*error);
				allch->SetBinContent(j,bincontent);
				allch->SetBinError(j,binerror);
			}
			
		}
	}
	Divideby2pipt(allch);
	allch->SetTitle("N_{ch};p_{T} (GeV/c);1/(2 #pi p_{T})dN/p_{T} |#eta|<0.8");		
	return allch;
}

void Divideby2pipt(TH1* hist)
{

	for (int i=1;i<hist->GetXaxis()->GetNbins();i++)
	{
		Float_t value=hist->GetBinContent(i);
		Float_t error=hist->GetBinError(i);
		Float_t pt=hist->GetXaxis()->GetBinCenter(i);
		hist->SetBinContent(i,value/(2.0*TMath::Pi()*pt));
		hist->SetBinError(i,error/(2.0*TMath::Pi()*pt));

	}
}

Short_t DCAfitsettings (Float_t pt, Int_t type)
{
	Short_t value=0x0;
	if (pt<maxptformaterial[type]&&pt>minptformaterial[type])
		value=value+2;
	if (pt<maxptforWD[type]&&pt>minptforWD[type])
		value=value+1;
	return value;	

} 

Float_t Normaliztionwithbin0integrals(UInt_t options)
{
	
	TH1F* bin0mcRec=(TH1F*)ecutsmc->GetHistoVtxGenerated()->Clone("Bin0_rec");
	TH1F* bin0mcMC=(TH1F*)ecutsmc->GetHistoVtxGenerated()->Clone("Bin0_MC");

	TH1F* vertexmc=ecutsmc->GetHistoVtxAftSelwithoutZvertexCut(); 
	TH1F* vertexmcMCz=ecutsmc->GetHistoVtxAftSelwithoutZvertexCutusingMCz(); 
	TH1F* vertexdata=ecutsdata->GetHistoVtxAftSelwithoutZvertexCut();

	TH1I* histodata=ecutsdata->GetHistoCuts();
	TH1I* histomc=ecutsmc->GetHistoCuts();

	Float_t dataevents=(Float_t)histodata->GetBinContent(3);
	//cout<<histodata->GetBinContent(2)<<endl;
	Float_t databin0events=((Float_t)histodata->GetBinContent(2))-((Float_t)histodata->GetBinContent(4));	

	bin0mcRec->Sumw2();
	bin0mcMC->Sumw2();
		
	bin0mcRec->Add(vertexmc,-1);
	bin0mcMC->Add(vertexmcMCz,-1);
	
	bin0mcRec->Divide(vertexmc);
	bin0mcMC->Divide(vertexmcMCz);
	
	bin0mcRec->Multiply(vertexdata);
	bin0mcMC->Multiply(vertexdata);
	
	Float_t bin0mcRecN=0.0;
	Float_t bin0mcMCN=0.0;

	for (int i=0;i<=bin0mcRec->GetXaxis()->GetNbins();i++)
	{
		bin0mcRecN+=bin0mcRec->GetBinContent(i);
		bin0mcMCN+=bin0mcMC->GetBinContent(i);

	}
	bin0mcRec->Scale(databin0events/bin0mcRecN);
	bin0mcMC->Scale(databin0events/bin0mcMCN);		
	
	Int_t binmin=bin0mcRec->GetXaxis()->FindBin(-10);
	Int_t binmax=bin0mcRec->GetXaxis()->FindBin(10)-1;
	cout<<	bin0mcRec->GetXaxis()->GetBinLowEdge(binmin)<<" "<<bin0mcRec->GetXaxis()->GetBinUpEdge(binmax)<<endl;
	cout<<bin0mcRecN<<" "<<bin0mcMCN<<" "<<databin0events<<endl;	
	cout<<dataevents<<" normalization "<<dataevents+bin0mcRec->Integral(binmin,binmax)<<" "<<dataevents+bin0mcMC->Integral(binmin,binmax)<<endl;
	cout<<histodata->GetBinContent(2)<<" "<<histodata->GetBinContent(4)<<endl;
	if ((options&knormalizationwithbin0integralsdata)==knormalizationwithbin0integralsdata)
		return 	dataevents+bin0mcRec->Integral(binmin,binmax);
 	else if ((options&kknormalizationwithbin0integralsMC)==knormalizationwithbin0integralsMC)   
		return dataevents+bin0mcMC->Integral(binmin,binmax) ;
	else
		return 1;		
}
 

Bool_t ReadConfigFile(TString configfile)
{
	ifstream infile(configfile.Data());
	if(infile.is_open()==false)
		return false;
	TString namesofSetting[]={"CutRangeMin","CutRangeMax","FitRangeMin","FitRangeMax","MinMatPionPlus","MaxMatPionPlus","MinMatKaonPlus","MaxMatKaonPlus","MinMatProtonPlus","MaxMatProtonPlus","MinMatPionMinus","MaxMatPionMinus","MinMatKaonMinus","MaxMatKaonMinus","MinMatProtonMinus","MaxMatProtonMinus","MinWDPionPlus","MaxWDPionPlus","MinWDKaonPlus","MaxWDKaonPlus","MinWDProtonPlus","MaxWDProtonPlus","MinWDPionMinus","MaxWDPionMinus","MinWDKaonMinus","MaxWDKaonMinus","MinWDProtonMinus","MaxWDProtonMinus","MaxContaminationPIDMC","MinPions","MaxPions","MinKaons","MaxKaons","MinProtons","MaxProtons","TOFPIDsignalmatchPion","TOFPIDsignalmatchKaon","TOFPIDsignalmatchProton","NamefileEff","NameFilePIDcon","NameFileSeccon"};	

	char buffer[256];
	while (infile.eof()==false)
	{
		buffer[0]='#'; 
		while (buffer[0]=='#'&&infile.eof()==false)
			infile.getline(buffer,256);
		TString tmpstring(buffer);
		cout<<buffer<<endl;
		if(tmpstring.Contains(namesofSetting[0]))
			CutRange[0]=(tmpstring.Remove(0,namesofSetting[0].Length()+1)).Atof();
		else if (tmpstring.Contains(namesofSetting[1]))
			CutRange[1]=(tmpstring.Remove(0,namesofSetting[1].Length()+1)).Atof();	
		else if (tmpstring.Contains(namesofSetting[2]))
			FitRange[0]=(tmpstring.Remove(0,namesofSetting[2].Length()+1)).Atof();
		else if (tmpstring.Contains(namesofSetting[3]))
			FitRange[1]=(tmpstring.Remove(0,namesofSetting[3].Length()+1)).Atof();
		else if (tmpstring.Contains(namesofSetting[4]))
			minptformaterial[0]=(tmpstring.Remove(0,namesofSetting[4].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[5]))
			maxptformaterial[0]=(tmpstring.Remove(0,namesofSetting[5].Length()+1)).Atof();	
		else if (tmpstring.Contains(namesofSetting[6]))
			minptformaterial[1]=(tmpstring.Remove(0,namesofSetting[6].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[7]))
			maxptformaterial[1]=(tmpstring.Remove(0,namesofSetting[7].Length()+1)).Atof();	
		else if (tmpstring.Contains(namesofSetting[8]))
			minptformaterial[2]=(tmpstring.Remove(0,namesofSetting[8].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[9]))
			maxptformaterial[2]=(tmpstring.Remove(0,namesofSetting[9].Length()+1)).Atof();
		else if (tmpstring.Contains(namesofSetting[10]))
			minptformaterial[3]=(tmpstring.Remove(0,namesofSetting[10].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[11]))
			maxptformaterial[3]=(tmpstring.Remove(0,namesofSetting[11].Length()+1)).Atof();
		else if (tmpstring.Contains(namesofSetting[12]))
			minptformaterial[4]=(tmpstring.Remove(0,namesofSetting[12].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[13]))
			maxptformaterial[4]=(tmpstring.Remove(0,namesofSetting[13].Length()+1)).Atof();
		else if (tmpstring.Contains(namesofSetting[14]))
			minptformaterial[5]=(tmpstring.Remove(0,namesofSetting[14].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[15]))
			maxptformaterial[5]=(tmpstring.Remove(0,namesofSetting[15].Length()+1)).Atof();
		else if (tmpstring.Contains(namesofSetting[16]))
			minptforWD[0]=(tmpstring.Remove(0,namesofSetting[16].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[17]))
			maxptforWD[0]=(tmpstring.Remove(0,namesofSetting[17].Length()+1)).Atof();	
		else if (tmpstring.Contains(namesofSetting[18]))
			minptforWD[1]=(tmpstring.Remove(0,namesofSetting[18].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[19]))
			maxptforWD[1]=(tmpstring.Remove(0,namesofSetting[19].Length()+1)).Atof();	
		else if (tmpstring.Contains(namesofSetting[20]))
			minptforWD[2]=(tmpstring.Remove(0,namesofSetting[20].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[21]))
			maxptforWD[2]=(tmpstring.Remove(0,namesofSetting[21].Length()+1)).Atof();
		else if (tmpstring.Contains(namesofSetting[22]))
			minptforWD[3]=(tmpstring.Remove(0,namesofSetting[22].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[23]))
			maxptforWD[3]=(tmpstring.Remove(0,namesofSetting[23].Length()+1)).Atof();
		else if (tmpstring.Contains(namesofSetting[24]))
			minptforWD[4]=(tmpstring.Remove(0,namesofSetting[24].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[25]))
			maxptforWD[4]=(tmpstring.Remove(0,namesofSetting[25].Length()+1)).Atof();
		else if (tmpstring.Contains(namesofSetting[26]))
			minptforWD[5]=(tmpstring.Remove(0,namesofSetting[26].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[27]))
			maxptforWD[5]=(tmpstring.Remove(0,namesofSetting[27].Length()+1)).Atof();				
		else if (tmpstring.Contains(namesofSetting[28]))
			fMaxContaminationPIDMC=(tmpstring.Remove(0,namesofSetting[28].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[29]))
			minRanges[0]=(tmpstring.Remove(0,namesofSetting[29].Length()+1)).Atof();
		else if (tmpstring.Contains(namesofSetting[30]))
			maxRanges[0]=(tmpstring.Remove(0,namesofSetting[30].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[31]))
			minRanges[1]=(tmpstring.Remove(0,namesofSetting[31].Length()+1)).Atof();
		else if (tmpstring.Contains(namesofSetting[32]))
			maxRanges[1]=(tmpstring.Remove(0,namesofSetting[32].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[33]))
			minRanges[2]=(tmpstring.Remove(0,namesofSetting[33].Length()+1)).Atof();
		else if (tmpstring.Contains(namesofSetting[34]))
			maxRanges[2]=(tmpstring.Remove(0,namesofSetting[34].Length()+1)).Atof();		
	        else if (tmpstring.Contains(namesofSetting[35]))
			TOFPIDsignalmatching[0]=(tmpstring.Remove(0,namesofSetting[35].Length()+1)).Atof();		
		else if (tmpstring.Contains(namesofSetting[36]))
			TOFPIDsignalmatching[1]=(tmpstring.Remove(0,namesofSetting[36].Length()+1)).Atof();
		else if (tmpstring.Contains(namesofSetting[37]))
			TOFPIDsignalmatching[2]=(tmpstring.Remove(0,namesofSetting[37].Length()+1)).Atof();	
		else if (tmpstring.Contains(namesofSetting[38]))
			filenames[0]=tmpstring.Remove(0,namesofSetting[38].Length()+1);
		else if (tmpstring.Contains(namesofSetting[39]))
			filenames[1]=tmpstring.Remove(0,namesofSetting[39].Length()+1);
		else if (tmpstring.Contains(namesofSetting[40]))
			filenames[2]=tmpstring.Remove(0,namesofSetting[40].Length()+1);
		else 
			continue;


//	Double_t minRanges[3]={0.3,0.3,0.45};
//Double_t maxRanges[3]={1.5,1.2,2.2};
//Double_t fMaxContaminationPIDMC=0.2;



	}
	for(int i=0;i<6;i++)
		cout<<minptformaterial[i]<<" "<<maxptformaterial[i]<<" "<<minptforWD[i]<<" "<<maxptforWD[i]<<endl;
	cout<<FitRange[0]<<" "<<FitRange[1]<<" "<<CutRange[0]<<CutRange[1]<<endl;
	if(FitRange[0]>=FitRange[1])	
	{
		cout<<"A"<<endl;				
		return false;
	}
	if(CutRange[0]>=CutRange[1])
	{	
		cout<<"B"<<endl;				
		return false;
	}
	for(int i=0;i<6;i++)
	{
		if((minptformaterial[i]>maxptformaterial[i]&&minptformaterial[i]>0.0)||minptformaterial[i]<0.0||maxptformaterial[i]<0.0)
		{
			cout<<"C"<<endl;
			return false;
		}
		if((minptforWD[i]>maxptforWD[i]&&minptforWD[i]>0.0)||minptforWD[i]<0.0||maxptforWD[i]<0.0)
		{
			cout<<"D"<<endl;
			return false;
		}
	}
	for(int i=0;i<3;i++)
		if(minRanges[i]>maxRanges[i])
			return false;
		

	return true;
}

void SubHistWithFullCorr(TH1F* h1, TH1F* h2, Float_t factor1=1.0, Float_t factor2=1.0)
{
	if(h1->GetNbinsX()!=h2->GetNbinsX())
		return;
	for (int i=0;i<=h1->GetNbinsX();i++)
	{
		Float_t tmpvalue=factor1*h1->GetBinContent(i)-factor2*h2->GetBinContent(i);
		Float_t tmperror=TMath::Abs(factor1*factor1*h1->GetBinError(i)*h1->GetBinError(i)-factor2*factor2*h2->GetBinError(i)*h2->GetBinError(i));
		h1->SetBinContent(i,tmpvalue);
		h1->SetBinError(i,TMath::Sqrt(tmperror));
	}		
	
}

void TOFMatchingForNch(TH1* h)
{
	 if(TOFMatchingScalling[0]>0.0&&TOFMatchingScalling[1]>0.0)
	 {
		Float_t factor=0.5*TOFMatchingScalling[0]+0.5*TOFMatchingScalling[1];
		for(Int_t ibin=1;ibin<h->GetNbinsX();ibin++)
		{
			Float_t ptspectra=h->GetBinCenter(ibin);
			if(ptspectra<tcutsdata->GetPtTOFMatching())
				continue;
			h->SetBinContent(ibin,(h->GetBinContent(ibin)/factor));
		}

	 }
	  else
		return;			


}
void TOFPIDsignalmatchingApply(TH1* h, Float_t factor)
{
	if(factor<0.0)
		return;
	for(Int_t ibin=1;ibin<h->GetNbinsX();ibin++)
	{
		Float_t ptspectra=h->GetBinCenter(ibin);
		if(ptspectra<tcutsdata->GetPtTOFMatching())
			continue;
		h->SetBinContent(ibin,(h->GetBinContent(ibin)*factor));

	}

}
void CalculateDoubleCounts(TH1* doubleconunts,TH1** rawspectra,Int_t ipar, Bool_t dataflag)
{
	TH2F* tmphist=0x0;	
	if (dataflag)
	 	tmphist=(TH2F*)managerdata->GetGenMulvsRawMulHistogram("hHistDoubleCounts");	
	else
		tmphist=(TH2F*)managermc->GetGenMulvsRawMulHistogram("hHistDoubleCounts");

	if(!tmphist)	
		return;
	TH1F* tmphist1=(TH1F*)rawspectra[ipar]->Clone("test");
	tmphist1->Add(rawspectra[ipar+3]);
	doubleconunts->Add(tmphist->ProjectionX(doubleconunts->GetName(),1,1));
	if(ipar!=2)
		doubleconunts->Add(tmphist->ProjectionX("pi+k",2,2));			
	if(ipar!=1)
		doubleconunts->Add(tmphist->ProjectionX("pi+p",3,3));
	if(ipar!=0)
		doubleconunts->Add(tmphist->ProjectionX("k+p",4,4));
	doubleconunts->Divide(doubleconunts,tmphist1,1,1,"B");

	delete tmphist1;
	

}

void CopyCorrectionFromFile(TString filename,TString correctionname,TH1F** corrtab)
{
	TFile* ftmp=TFile::Open(filename.Data());
	TString tmp("tmp");
	TList* ltmp=(TList*)ftmp->Get("output");

	for(Int_t icharge=0;icharge<2;icharge++)
        {
                for(Int_t ipart=0;ipart<3;ipart++)
                {
                        Int_t index=ipart+3*icharge;
                        tmp.Form("%s%s%s",correctionname.Data(),Particle[ipart].Data(),Sign[icharge].Data());
			TH1* histtmp=(TH1*)ltmp->FindObject(tmp.Data());
			if(!histtmp)
				continue;
			for(Int_t ibin=1;ibin<=histtmp->GetNbinsX();ibin++)
			{
				Float_t content=histtmp->GetBinContent(ibin);
				Float_t error=histtmp->GetBinError(ibin);
				Int_t bin=corrtab[index]->FindBin(histtmp->GetBinCenter(ibin));
				corrtab[index]->SetBinContent(bin,content);
				corrtab[index]->SetBinError(bin,error);
				
			}  
		}
	}
	delete ltmp;
	ftmp->Close();
}			
 AnalysisBoth.C:1
 AnalysisBoth.C:2
 AnalysisBoth.C:3
 AnalysisBoth.C:4
 AnalysisBoth.C:5
 AnalysisBoth.C:6
 AnalysisBoth.C:7
 AnalysisBoth.C:8
 AnalysisBoth.C:9
 AnalysisBoth.C:10
 AnalysisBoth.C:11
 AnalysisBoth.C:12
 AnalysisBoth.C:13
 AnalysisBoth.C:14
 AnalysisBoth.C:15
 AnalysisBoth.C:16
 AnalysisBoth.C:17
 AnalysisBoth.C:18
 AnalysisBoth.C:19
 AnalysisBoth.C:20
 AnalysisBoth.C:21
 AnalysisBoth.C:22
 AnalysisBoth.C:23
 AnalysisBoth.C:24
 AnalysisBoth.C:25
 AnalysisBoth.C:26
 AnalysisBoth.C:27
 AnalysisBoth.C:28
 AnalysisBoth.C:29
 AnalysisBoth.C:30
 AnalysisBoth.C:31
 AnalysisBoth.C:32
 AnalysisBoth.C:33
 AnalysisBoth.C:34
 AnalysisBoth.C:35
 AnalysisBoth.C:36
 AnalysisBoth.C:37
 AnalysisBoth.C:38
 AnalysisBoth.C:39
 AnalysisBoth.C:40
 AnalysisBoth.C:41
 AnalysisBoth.C:42
 AnalysisBoth.C:43
 AnalysisBoth.C:44
 AnalysisBoth.C:45
 AnalysisBoth.C:46
 AnalysisBoth.C:47
 AnalysisBoth.C:48
 AnalysisBoth.C:49
 AnalysisBoth.C:50
 AnalysisBoth.C:51
 AnalysisBoth.C:52
 AnalysisBoth.C:53
 AnalysisBoth.C:54
 AnalysisBoth.C:55
 AnalysisBoth.C:56
 AnalysisBoth.C:57
 AnalysisBoth.C:58
 AnalysisBoth.C:59
 AnalysisBoth.C:60
 AnalysisBoth.C:61
 AnalysisBoth.C:62
 AnalysisBoth.C:63
 AnalysisBoth.C:64
 AnalysisBoth.C:65
 AnalysisBoth.C:66
 AnalysisBoth.C:67
 AnalysisBoth.C:68
 AnalysisBoth.C:69
 AnalysisBoth.C:70
 AnalysisBoth.C:71
 AnalysisBoth.C:72
 AnalysisBoth.C:73
 AnalysisBoth.C:74
 AnalysisBoth.C:75
 AnalysisBoth.C:76
 AnalysisBoth.C:77
 AnalysisBoth.C:78
 AnalysisBoth.C:79
 AnalysisBoth.C:80
 AnalysisBoth.C:81
 AnalysisBoth.C:82
 AnalysisBoth.C:83
 AnalysisBoth.C:84
 AnalysisBoth.C:85
 AnalysisBoth.C:86
 AnalysisBoth.C:87
 AnalysisBoth.C:88
 AnalysisBoth.C:89
 AnalysisBoth.C:90
 AnalysisBoth.C:91
 AnalysisBoth.C:92
 AnalysisBoth.C:93
 AnalysisBoth.C:94
 AnalysisBoth.C:95
 AnalysisBoth.C:96
 AnalysisBoth.C:97
 AnalysisBoth.C:98
 AnalysisBoth.C:99
 AnalysisBoth.C:100
 AnalysisBoth.C:101
 AnalysisBoth.C:102
 AnalysisBoth.C:103
 AnalysisBoth.C:104
 AnalysisBoth.C:105
 AnalysisBoth.C:106
 AnalysisBoth.C:107
 AnalysisBoth.C:108
 AnalysisBoth.C:109
 AnalysisBoth.C:110
 AnalysisBoth.C:111
 AnalysisBoth.C:112
 AnalysisBoth.C:113
 AnalysisBoth.C:114
 AnalysisBoth.C:115
 AnalysisBoth.C:116
 AnalysisBoth.C:117
 AnalysisBoth.C:118
 AnalysisBoth.C:119
 AnalysisBoth.C:120
 AnalysisBoth.C:121
 AnalysisBoth.C:122
 AnalysisBoth.C:123
 AnalysisBoth.C:124
 AnalysisBoth.C:125
 AnalysisBoth.C:126
 AnalysisBoth.C:127
 AnalysisBoth.C:128
 AnalysisBoth.C:129
 AnalysisBoth.C:130
 AnalysisBoth.C:131
 AnalysisBoth.C:132
 AnalysisBoth.C:133
 AnalysisBoth.C:134
 AnalysisBoth.C:135
 AnalysisBoth.C:136
 AnalysisBoth.C:137
 AnalysisBoth.C:138
 AnalysisBoth.C:139
 AnalysisBoth.C:140
 AnalysisBoth.C:141
 AnalysisBoth.C:142
 AnalysisBoth.C:143
 AnalysisBoth.C:144
 AnalysisBoth.C:145
 AnalysisBoth.C:146
 AnalysisBoth.C:147
 AnalysisBoth.C:148
 AnalysisBoth.C:149
 AnalysisBoth.C:150
 AnalysisBoth.C:151
 AnalysisBoth.C:152
 AnalysisBoth.C:153
 AnalysisBoth.C:154
 AnalysisBoth.C:155
 AnalysisBoth.C:156
 AnalysisBoth.C:157
 AnalysisBoth.C:158
 AnalysisBoth.C:159
 AnalysisBoth.C:160
 AnalysisBoth.C:161
 AnalysisBoth.C:162
 AnalysisBoth.C:163
 AnalysisBoth.C:164
 AnalysisBoth.C:165
 AnalysisBoth.C:166
 AnalysisBoth.C:167
 AnalysisBoth.C:168
 AnalysisBoth.C:169
 AnalysisBoth.C:170
 AnalysisBoth.C:171
 AnalysisBoth.C:172
 AnalysisBoth.C:173
 AnalysisBoth.C:174
 AnalysisBoth.C:175
 AnalysisBoth.C:176
 AnalysisBoth.C:177
 AnalysisBoth.C:178
 AnalysisBoth.C:179
 AnalysisBoth.C:180
 AnalysisBoth.C:181
 AnalysisBoth.C:182
 AnalysisBoth.C:183
 AnalysisBoth.C:184
 AnalysisBoth.C:185
 AnalysisBoth.C:186
 AnalysisBoth.C:187
 AnalysisBoth.C:188
 AnalysisBoth.C:189
 AnalysisBoth.C:190
 AnalysisBoth.C:191
 AnalysisBoth.C:192
 AnalysisBoth.C:193
 AnalysisBoth.C:194
 AnalysisBoth.C:195
 AnalysisBoth.C:196
 AnalysisBoth.C:197
 AnalysisBoth.C:198
 AnalysisBoth.C:199
 AnalysisBoth.C:200
 AnalysisBoth.C:201
 AnalysisBoth.C:202
 AnalysisBoth.C:203
 AnalysisBoth.C:204
 AnalysisBoth.C:205
 AnalysisBoth.C:206
 AnalysisBoth.C:207
 AnalysisBoth.C:208
 AnalysisBoth.C:209
 AnalysisBoth.C:210
 AnalysisBoth.C:211
 AnalysisBoth.C:212
 AnalysisBoth.C:213
 AnalysisBoth.C:214
 AnalysisBoth.C:215
 AnalysisBoth.C:216
 AnalysisBoth.C:217
 AnalysisBoth.C:218
 AnalysisBoth.C:219
 AnalysisBoth.C:220
 AnalysisBoth.C:221
 AnalysisBoth.C:222
 AnalysisBoth.C:223
 AnalysisBoth.C:224
 AnalysisBoth.C:225
 AnalysisBoth.C:226
 AnalysisBoth.C:227
 AnalysisBoth.C:228
 AnalysisBoth.C:229
 AnalysisBoth.C:230
 AnalysisBoth.C:231
 AnalysisBoth.C:232
 AnalysisBoth.C:233
 AnalysisBoth.C:234
 AnalysisBoth.C:235
 AnalysisBoth.C:236
 AnalysisBoth.C:237
 AnalysisBoth.C:238
 AnalysisBoth.C:239
 AnalysisBoth.C:240
 AnalysisBoth.C:241
 AnalysisBoth.C:242
 AnalysisBoth.C:243
 AnalysisBoth.C:244
 AnalysisBoth.C:245
 AnalysisBoth.C:246
 AnalysisBoth.C:247
 AnalysisBoth.C:248
 AnalysisBoth.C:249
 AnalysisBoth.C:250
 AnalysisBoth.C:251
 AnalysisBoth.C:252
 AnalysisBoth.C:253
 AnalysisBoth.C:254
 AnalysisBoth.C:255
 AnalysisBoth.C:256
 AnalysisBoth.C:257
 AnalysisBoth.C:258
 AnalysisBoth.C:259
 AnalysisBoth.C:260
 AnalysisBoth.C:261
 AnalysisBoth.C:262
 AnalysisBoth.C:263
 AnalysisBoth.C:264
 AnalysisBoth.C:265
 AnalysisBoth.C:266
 AnalysisBoth.C:267
 AnalysisBoth.C:268
 AnalysisBoth.C:269
 AnalysisBoth.C:270
 AnalysisBoth.C:271
 AnalysisBoth.C:272
 AnalysisBoth.C:273
 AnalysisBoth.C:274
 AnalysisBoth.C:275
 AnalysisBoth.C:276
 AnalysisBoth.C:277
 AnalysisBoth.C:278
 AnalysisBoth.C:279
 AnalysisBoth.C:280
 AnalysisBoth.C:281
 AnalysisBoth.C:282
 AnalysisBoth.C:283
 AnalysisBoth.C:284
 AnalysisBoth.C:285
 AnalysisBoth.C:286
 AnalysisBoth.C:287
 AnalysisBoth.C:288
 AnalysisBoth.C:289
 AnalysisBoth.C:290
 AnalysisBoth.C:291
 AnalysisBoth.C:292
 AnalysisBoth.C:293
 AnalysisBoth.C:294
 AnalysisBoth.C:295
 AnalysisBoth.C:296
 AnalysisBoth.C:297
 AnalysisBoth.C:298
 AnalysisBoth.C:299
 AnalysisBoth.C:300
 AnalysisBoth.C:301
 AnalysisBoth.C:302
 AnalysisBoth.C:303
 AnalysisBoth.C:304
 AnalysisBoth.C:305
 AnalysisBoth.C:306
 AnalysisBoth.C:307
 AnalysisBoth.C:308
 AnalysisBoth.C:309
 AnalysisBoth.C:310
 AnalysisBoth.C:311
 AnalysisBoth.C:312
 AnalysisBoth.C:313
 AnalysisBoth.C:314
 AnalysisBoth.C:315
 AnalysisBoth.C:316
 AnalysisBoth.C:317
 AnalysisBoth.C:318
 AnalysisBoth.C:319
 AnalysisBoth.C:320
 AnalysisBoth.C:321
 AnalysisBoth.C:322
 AnalysisBoth.C:323
 AnalysisBoth.C:324
 AnalysisBoth.C:325
 AnalysisBoth.C:326
 AnalysisBoth.C:327
 AnalysisBoth.C:328
 AnalysisBoth.C:329
 AnalysisBoth.C:330
 AnalysisBoth.C:331
 AnalysisBoth.C:332
 AnalysisBoth.C:333
 AnalysisBoth.C:334
 AnalysisBoth.C:335
 AnalysisBoth.C:336
 AnalysisBoth.C:337
 AnalysisBoth.C:338
 AnalysisBoth.C:339
 AnalysisBoth.C:340
 AnalysisBoth.C:341
 AnalysisBoth.C:342
 AnalysisBoth.C:343
 AnalysisBoth.C:344
 AnalysisBoth.C:345
 AnalysisBoth.C:346
 AnalysisBoth.C:347
 AnalysisBoth.C:348
 AnalysisBoth.C:349
 AnalysisBoth.C:350
 AnalysisBoth.C:351
 AnalysisBoth.C:352
 AnalysisBoth.C:353
 AnalysisBoth.C:354
 AnalysisBoth.C:355
 AnalysisBoth.C:356
 AnalysisBoth.C:357
 AnalysisBoth.C:358
 AnalysisBoth.C:359
 AnalysisBoth.C:360
 AnalysisBoth.C:361
 AnalysisBoth.C:362
 AnalysisBoth.C:363
 AnalysisBoth.C:364
 AnalysisBoth.C:365
 AnalysisBoth.C:366
 AnalysisBoth.C:367
 AnalysisBoth.C:368
 AnalysisBoth.C:369
 AnalysisBoth.C:370
 AnalysisBoth.C:371
 AnalysisBoth.C:372
 AnalysisBoth.C:373
 AnalysisBoth.C:374
 AnalysisBoth.C:375
 AnalysisBoth.C:376
 AnalysisBoth.C:377
 AnalysisBoth.C:378
 AnalysisBoth.C:379
 AnalysisBoth.C:380
 AnalysisBoth.C:381
 AnalysisBoth.C:382
 AnalysisBoth.C:383
 AnalysisBoth.C:384
 AnalysisBoth.C:385
 AnalysisBoth.C:386
 AnalysisBoth.C:387
 AnalysisBoth.C:388
 AnalysisBoth.C:389
 AnalysisBoth.C:390
 AnalysisBoth.C:391
 AnalysisBoth.C:392
 AnalysisBoth.C:393
 AnalysisBoth.C:394
 AnalysisBoth.C:395
 AnalysisBoth.C:396
 AnalysisBoth.C:397
 AnalysisBoth.C:398
 AnalysisBoth.C:399
 AnalysisBoth.C:400
 AnalysisBoth.C:401
 AnalysisBoth.C:402
 AnalysisBoth.C:403
 AnalysisBoth.C:404
 AnalysisBoth.C:405
 AnalysisBoth.C:406
 AnalysisBoth.C:407
 AnalysisBoth.C:408
 AnalysisBoth.C:409
 AnalysisBoth.C:410
 AnalysisBoth.C:411
 AnalysisBoth.C:412
 AnalysisBoth.C:413
 AnalysisBoth.C:414
 AnalysisBoth.C:415
 AnalysisBoth.C:416
 AnalysisBoth.C:417
 AnalysisBoth.C:418
 AnalysisBoth.C:419
 AnalysisBoth.C:420
 AnalysisBoth.C:421
 AnalysisBoth.C:422
 AnalysisBoth.C:423
 AnalysisBoth.C:424
 AnalysisBoth.C:425
 AnalysisBoth.C:426
 AnalysisBoth.C:427
 AnalysisBoth.C:428
 AnalysisBoth.C:429
 AnalysisBoth.C:430
 AnalysisBoth.C:431
 AnalysisBoth.C:432
 AnalysisBoth.C:433
 AnalysisBoth.C:434
 AnalysisBoth.C:435
 AnalysisBoth.C:436
 AnalysisBoth.C:437
 AnalysisBoth.C:438
 AnalysisBoth.C:439
 AnalysisBoth.C:440
 AnalysisBoth.C:441
 AnalysisBoth.C:442
 AnalysisBoth.C:443
 AnalysisBoth.C:444
 AnalysisBoth.C:445
 AnalysisBoth.C:446
 AnalysisBoth.C:447
 AnalysisBoth.C:448
 AnalysisBoth.C:449
 AnalysisBoth.C:450
 AnalysisBoth.C:451
 AnalysisBoth.C:452
 AnalysisBoth.C:453
 AnalysisBoth.C:454
 AnalysisBoth.C:455
 AnalysisBoth.C:456
 AnalysisBoth.C:457
 AnalysisBoth.C:458
 AnalysisBoth.C:459
 AnalysisBoth.C:460
 AnalysisBoth.C:461
 AnalysisBoth.C:462
 AnalysisBoth.C:463
 AnalysisBoth.C:464
 AnalysisBoth.C:465
 AnalysisBoth.C:466
 AnalysisBoth.C:467
 AnalysisBoth.C:468
 AnalysisBoth.C:469
 AnalysisBoth.C:470
 AnalysisBoth.C:471
 AnalysisBoth.C:472
 AnalysisBoth.C:473
 AnalysisBoth.C:474
 AnalysisBoth.C:475
 AnalysisBoth.C:476
 AnalysisBoth.C:477
 AnalysisBoth.C:478
 AnalysisBoth.C:479
 AnalysisBoth.C:480
 AnalysisBoth.C:481
 AnalysisBoth.C:482
 AnalysisBoth.C:483
 AnalysisBoth.C:484
 AnalysisBoth.C:485
 AnalysisBoth.C:486
 AnalysisBoth.C:487
 AnalysisBoth.C:488
 AnalysisBoth.C:489
 AnalysisBoth.C:490
 AnalysisBoth.C:491
 AnalysisBoth.C:492
 AnalysisBoth.C:493
 AnalysisBoth.C:494
 AnalysisBoth.C:495
 AnalysisBoth.C:496
 AnalysisBoth.C:497
 AnalysisBoth.C:498
 AnalysisBoth.C:499
 AnalysisBoth.C:500
 AnalysisBoth.C:501
 AnalysisBoth.C:502
 AnalysisBoth.C:503
 AnalysisBoth.C:504
 AnalysisBoth.C:505
 AnalysisBoth.C:506
 AnalysisBoth.C:507
 AnalysisBoth.C:508
 AnalysisBoth.C:509
 AnalysisBoth.C:510
 AnalysisBoth.C:511
 AnalysisBoth.C:512
 AnalysisBoth.C:513
 AnalysisBoth.C:514
 AnalysisBoth.C:515
 AnalysisBoth.C:516
 AnalysisBoth.C:517
 AnalysisBoth.C:518
 AnalysisBoth.C:519
 AnalysisBoth.C:520
 AnalysisBoth.C:521
 AnalysisBoth.C:522
 AnalysisBoth.C:523
 AnalysisBoth.C:524
 AnalysisBoth.C:525
 AnalysisBoth.C:526
 AnalysisBoth.C:527
 AnalysisBoth.C:528
 AnalysisBoth.C:529
 AnalysisBoth.C:530
 AnalysisBoth.C:531
 AnalysisBoth.C:532
 AnalysisBoth.C:533
 AnalysisBoth.C:534
 AnalysisBoth.C:535
 AnalysisBoth.C:536
 AnalysisBoth.C:537
 AnalysisBoth.C:538
 AnalysisBoth.C:539
 AnalysisBoth.C:540
 AnalysisBoth.C:541
 AnalysisBoth.C:542
 AnalysisBoth.C:543
 AnalysisBoth.C:544
 AnalysisBoth.C:545
 AnalysisBoth.C:546
 AnalysisBoth.C:547
 AnalysisBoth.C:548
 AnalysisBoth.C:549
 AnalysisBoth.C:550
 AnalysisBoth.C:551
 AnalysisBoth.C:552
 AnalysisBoth.C:553
 AnalysisBoth.C:554
 AnalysisBoth.C:555
 AnalysisBoth.C:556
 AnalysisBoth.C:557
 AnalysisBoth.C:558
 AnalysisBoth.C:559
 AnalysisBoth.C:560
 AnalysisBoth.C:561
 AnalysisBoth.C:562
 AnalysisBoth.C:563
 AnalysisBoth.C:564
 AnalysisBoth.C:565
 AnalysisBoth.C:566
 AnalysisBoth.C:567
 AnalysisBoth.C:568
 AnalysisBoth.C:569
 AnalysisBoth.C:570
 AnalysisBoth.C:571
 AnalysisBoth.C:572
 AnalysisBoth.C:573
 AnalysisBoth.C:574
 AnalysisBoth.C:575
 AnalysisBoth.C:576
 AnalysisBoth.C:577
 AnalysisBoth.C:578
 AnalysisBoth.C:579
 AnalysisBoth.C:580
 AnalysisBoth.C:581
 AnalysisBoth.C:582
 AnalysisBoth.C:583
 AnalysisBoth.C:584
 AnalysisBoth.C:585
 AnalysisBoth.C:586
 AnalysisBoth.C:587
 AnalysisBoth.C:588
 AnalysisBoth.C:589
 AnalysisBoth.C:590
 AnalysisBoth.C:591
 AnalysisBoth.C:592
 AnalysisBoth.C:593
 AnalysisBoth.C:594
 AnalysisBoth.C:595
 AnalysisBoth.C:596
 AnalysisBoth.C:597
 AnalysisBoth.C:598
 AnalysisBoth.C:599
 AnalysisBoth.C:600
 AnalysisBoth.C:601
 AnalysisBoth.C:602
 AnalysisBoth.C:603
 AnalysisBoth.C:604
 AnalysisBoth.C:605
 AnalysisBoth.C:606
 AnalysisBoth.C:607
 AnalysisBoth.C:608
 AnalysisBoth.C:609
 AnalysisBoth.C:610
 AnalysisBoth.C:611
 AnalysisBoth.C:612
 AnalysisBoth.C:613
 AnalysisBoth.C:614
 AnalysisBoth.C:615
 AnalysisBoth.C:616
 AnalysisBoth.C:617
 AnalysisBoth.C:618
 AnalysisBoth.C:619
 AnalysisBoth.C:620
 AnalysisBoth.C:621
 AnalysisBoth.C:622
 AnalysisBoth.C:623
 AnalysisBoth.C:624
 AnalysisBoth.C:625
 AnalysisBoth.C:626
 AnalysisBoth.C:627
 AnalysisBoth.C:628
 AnalysisBoth.C:629
 AnalysisBoth.C:630
 AnalysisBoth.C:631
 AnalysisBoth.C:632
 AnalysisBoth.C:633
 AnalysisBoth.C:634
 AnalysisBoth.C:635
 AnalysisBoth.C:636
 AnalysisBoth.C:637
 AnalysisBoth.C:638
 AnalysisBoth.C:639
 AnalysisBoth.C:640
 AnalysisBoth.C:641
 AnalysisBoth.C:642
 AnalysisBoth.C:643
 AnalysisBoth.C:644
 AnalysisBoth.C:645
 AnalysisBoth.C:646
 AnalysisBoth.C:647
 AnalysisBoth.C:648
 AnalysisBoth.C:649
 AnalysisBoth.C:650
 AnalysisBoth.C:651
 AnalysisBoth.C:652
 AnalysisBoth.C:653
 AnalysisBoth.C:654
 AnalysisBoth.C:655
 AnalysisBoth.C:656
 AnalysisBoth.C:657
 AnalysisBoth.C:658
 AnalysisBoth.C:659
 AnalysisBoth.C:660
 AnalysisBoth.C:661
 AnalysisBoth.C:662
 AnalysisBoth.C:663
 AnalysisBoth.C:664
 AnalysisBoth.C:665
 AnalysisBoth.C:666
 AnalysisBoth.C:667
 AnalysisBoth.C:668
 AnalysisBoth.C:669
 AnalysisBoth.C:670
 AnalysisBoth.C:671
 AnalysisBoth.C:672
 AnalysisBoth.C:673
 AnalysisBoth.C:674
 AnalysisBoth.C:675
 AnalysisBoth.C:676
 AnalysisBoth.C:677
 AnalysisBoth.C:678
 AnalysisBoth.C:679
 AnalysisBoth.C:680
 AnalysisBoth.C:681
 AnalysisBoth.C:682
 AnalysisBoth.C:683
 AnalysisBoth.C:684
 AnalysisBoth.C:685
 AnalysisBoth.C:686
 AnalysisBoth.C:687
 AnalysisBoth.C:688
 AnalysisBoth.C:689
 AnalysisBoth.C:690
 AnalysisBoth.C:691
 AnalysisBoth.C:692
 AnalysisBoth.C:693
 AnalysisBoth.C:694
 AnalysisBoth.C:695
 AnalysisBoth.C:696
 AnalysisBoth.C:697
 AnalysisBoth.C:698
 AnalysisBoth.C:699
 AnalysisBoth.C:700
 AnalysisBoth.C:701
 AnalysisBoth.C:702
 AnalysisBoth.C:703
 AnalysisBoth.C:704
 AnalysisBoth.C:705
 AnalysisBoth.C:706
 AnalysisBoth.C:707
 AnalysisBoth.C:708
 AnalysisBoth.C:709
 AnalysisBoth.C:710
 AnalysisBoth.C:711
 AnalysisBoth.C:712
 AnalysisBoth.C:713
 AnalysisBoth.C:714
 AnalysisBoth.C:715
 AnalysisBoth.C:716
 AnalysisBoth.C:717
 AnalysisBoth.C:718
 AnalysisBoth.C:719
 AnalysisBoth.C:720
 AnalysisBoth.C:721
 AnalysisBoth.C:722
 AnalysisBoth.C:723
 AnalysisBoth.C:724
 AnalysisBoth.C:725
 AnalysisBoth.C:726
 AnalysisBoth.C:727
 AnalysisBoth.C:728
 AnalysisBoth.C:729
 AnalysisBoth.C:730
 AnalysisBoth.C:731
 AnalysisBoth.C:732
 AnalysisBoth.C:733
 AnalysisBoth.C:734
 AnalysisBoth.C:735
 AnalysisBoth.C:736
 AnalysisBoth.C:737
 AnalysisBoth.C:738
 AnalysisBoth.C:739
 AnalysisBoth.C:740
 AnalysisBoth.C:741
 AnalysisBoth.C:742
 AnalysisBoth.C:743
 AnalysisBoth.C:744
 AnalysisBoth.C:745
 AnalysisBoth.C:746
 AnalysisBoth.C:747
 AnalysisBoth.C:748
 AnalysisBoth.C:749
 AnalysisBoth.C:750
 AnalysisBoth.C:751
 AnalysisBoth.C:752
 AnalysisBoth.C:753
 AnalysisBoth.C:754
 AnalysisBoth.C:755
 AnalysisBoth.C:756
 AnalysisBoth.C:757
 AnalysisBoth.C:758
 AnalysisBoth.C:759
 AnalysisBoth.C:760
 AnalysisBoth.C:761
 AnalysisBoth.C:762
 AnalysisBoth.C:763
 AnalysisBoth.C:764
 AnalysisBoth.C:765
 AnalysisBoth.C:766
 AnalysisBoth.C:767
 AnalysisBoth.C:768
 AnalysisBoth.C:769
 AnalysisBoth.C:770
 AnalysisBoth.C:771
 AnalysisBoth.C:772
 AnalysisBoth.C:773
 AnalysisBoth.C:774
 AnalysisBoth.C:775
 AnalysisBoth.C:776
 AnalysisBoth.C:777
 AnalysisBoth.C:778
 AnalysisBoth.C:779
 AnalysisBoth.C:780
 AnalysisBoth.C:781
 AnalysisBoth.C:782
 AnalysisBoth.C:783
 AnalysisBoth.C:784
 AnalysisBoth.C:785
 AnalysisBoth.C:786
 AnalysisBoth.C:787
 AnalysisBoth.C:788
 AnalysisBoth.C:789
 AnalysisBoth.C:790
 AnalysisBoth.C:791
 AnalysisBoth.C:792
 AnalysisBoth.C:793
 AnalysisBoth.C:794
 AnalysisBoth.C:795
 AnalysisBoth.C:796
 AnalysisBoth.C:797
 AnalysisBoth.C:798
 AnalysisBoth.C:799
 AnalysisBoth.C:800
 AnalysisBoth.C:801
 AnalysisBoth.C:802
 AnalysisBoth.C:803
 AnalysisBoth.C:804
 AnalysisBoth.C:805
 AnalysisBoth.C:806
 AnalysisBoth.C:807
 AnalysisBoth.C:808
 AnalysisBoth.C:809
 AnalysisBoth.C:810
 AnalysisBoth.C:811
 AnalysisBoth.C:812
 AnalysisBoth.C:813
 AnalysisBoth.C:814
 AnalysisBoth.C:815
 AnalysisBoth.C:816
 AnalysisBoth.C:817
 AnalysisBoth.C:818
 AnalysisBoth.C:819
 AnalysisBoth.C:820
 AnalysisBoth.C:821
 AnalysisBoth.C:822
 AnalysisBoth.C:823
 AnalysisBoth.C:824
 AnalysisBoth.C:825
 AnalysisBoth.C:826
 AnalysisBoth.C:827
 AnalysisBoth.C:828
 AnalysisBoth.C:829
 AnalysisBoth.C:830
 AnalysisBoth.C:831
 AnalysisBoth.C:832
 AnalysisBoth.C:833
 AnalysisBoth.C:834
 AnalysisBoth.C:835
 AnalysisBoth.C:836
 AnalysisBoth.C:837
 AnalysisBoth.C:838
 AnalysisBoth.C:839
 AnalysisBoth.C:840
 AnalysisBoth.C:841
 AnalysisBoth.C:842
 AnalysisBoth.C:843
 AnalysisBoth.C:844
 AnalysisBoth.C:845
 AnalysisBoth.C:846
 AnalysisBoth.C:847
 AnalysisBoth.C:848
 AnalysisBoth.C:849
 AnalysisBoth.C:850
 AnalysisBoth.C:851
 AnalysisBoth.C:852
 AnalysisBoth.C:853
 AnalysisBoth.C:854
 AnalysisBoth.C:855
 AnalysisBoth.C:856
 AnalysisBoth.C:857
 AnalysisBoth.C:858
 AnalysisBoth.C:859
 AnalysisBoth.C:860
 AnalysisBoth.C:861
 AnalysisBoth.C:862
 AnalysisBoth.C:863
 AnalysisBoth.C:864
 AnalysisBoth.C:865
 AnalysisBoth.C:866
 AnalysisBoth.C:867
 AnalysisBoth.C:868
 AnalysisBoth.C:869
 AnalysisBoth.C:870
 AnalysisBoth.C:871
 AnalysisBoth.C:872
 AnalysisBoth.C:873
 AnalysisBoth.C:874
 AnalysisBoth.C:875
 AnalysisBoth.C:876
 AnalysisBoth.C:877
 AnalysisBoth.C:878
 AnalysisBoth.C:879
 AnalysisBoth.C:880
 AnalysisBoth.C:881
 AnalysisBoth.C:882
 AnalysisBoth.C:883
 AnalysisBoth.C:884
 AnalysisBoth.C:885
 AnalysisBoth.C:886
 AnalysisBoth.C:887
 AnalysisBoth.C:888
 AnalysisBoth.C:889
 AnalysisBoth.C:890
 AnalysisBoth.C:891
 AnalysisBoth.C:892
 AnalysisBoth.C:893
 AnalysisBoth.C:894
 AnalysisBoth.C:895
 AnalysisBoth.C:896
 AnalysisBoth.C:897
 AnalysisBoth.C:898
 AnalysisBoth.C:899
 AnalysisBoth.C:900
 AnalysisBoth.C:901
 AnalysisBoth.C:902
 AnalysisBoth.C:903
 AnalysisBoth.C:904
 AnalysisBoth.C:905
 AnalysisBoth.C:906
 AnalysisBoth.C:907
 AnalysisBoth.C:908
 AnalysisBoth.C:909
 AnalysisBoth.C:910
 AnalysisBoth.C:911
 AnalysisBoth.C:912
 AnalysisBoth.C:913
 AnalysisBoth.C:914
 AnalysisBoth.C:915
 AnalysisBoth.C:916
 AnalysisBoth.C:917
 AnalysisBoth.C:918
 AnalysisBoth.C:919
 AnalysisBoth.C:920
 AnalysisBoth.C:921
 AnalysisBoth.C:922
 AnalysisBoth.C:923
 AnalysisBoth.C:924
 AnalysisBoth.C:925
 AnalysisBoth.C:926
 AnalysisBoth.C:927
 AnalysisBoth.C:928
 AnalysisBoth.C:929
 AnalysisBoth.C:930
 AnalysisBoth.C:931
 AnalysisBoth.C:932
 AnalysisBoth.C:933
 AnalysisBoth.C:934
 AnalysisBoth.C:935
 AnalysisBoth.C:936
 AnalysisBoth.C:937
 AnalysisBoth.C:938
 AnalysisBoth.C:939
 AnalysisBoth.C:940
 AnalysisBoth.C:941
 AnalysisBoth.C:942
 AnalysisBoth.C:943
 AnalysisBoth.C:944
 AnalysisBoth.C:945
 AnalysisBoth.C:946
 AnalysisBoth.C:947
 AnalysisBoth.C:948
 AnalysisBoth.C:949
 AnalysisBoth.C:950
 AnalysisBoth.C:951
 AnalysisBoth.C:952
 AnalysisBoth.C:953
 AnalysisBoth.C:954
 AnalysisBoth.C:955
 AnalysisBoth.C:956
 AnalysisBoth.C:957
 AnalysisBoth.C:958
 AnalysisBoth.C:959
 AnalysisBoth.C:960
 AnalysisBoth.C:961
 AnalysisBoth.C:962
 AnalysisBoth.C:963
 AnalysisBoth.C:964
 AnalysisBoth.C:965
 AnalysisBoth.C:966
 AnalysisBoth.C:967
 AnalysisBoth.C:968
 AnalysisBoth.C:969
 AnalysisBoth.C:970
 AnalysisBoth.C:971
 AnalysisBoth.C:972
 AnalysisBoth.C:973
 AnalysisBoth.C:974
 AnalysisBoth.C:975
 AnalysisBoth.C:976
 AnalysisBoth.C:977
 AnalysisBoth.C:978
 AnalysisBoth.C:979
 AnalysisBoth.C:980
 AnalysisBoth.C:981
 AnalysisBoth.C:982
 AnalysisBoth.C:983
 AnalysisBoth.C:984
 AnalysisBoth.C:985
 AnalysisBoth.C:986
 AnalysisBoth.C:987
 AnalysisBoth.C:988
 AnalysisBoth.C:989
 AnalysisBoth.C:990
 AnalysisBoth.C:991
 AnalysisBoth.C:992
 AnalysisBoth.C:993
 AnalysisBoth.C:994
 AnalysisBoth.C:995
 AnalysisBoth.C:996
 AnalysisBoth.C:997
 AnalysisBoth.C:998
 AnalysisBoth.C:999
 AnalysisBoth.C:1000
 AnalysisBoth.C:1001
 AnalysisBoth.C:1002
 AnalysisBoth.C:1003
 AnalysisBoth.C:1004
 AnalysisBoth.C:1005
 AnalysisBoth.C:1006
 AnalysisBoth.C:1007
 AnalysisBoth.C:1008
 AnalysisBoth.C:1009
 AnalysisBoth.C:1010
 AnalysisBoth.C:1011
 AnalysisBoth.C:1012
 AnalysisBoth.C:1013
 AnalysisBoth.C:1014
 AnalysisBoth.C:1015
 AnalysisBoth.C:1016
 AnalysisBoth.C:1017
 AnalysisBoth.C:1018
 AnalysisBoth.C:1019
 AnalysisBoth.C:1020
 AnalysisBoth.C:1021
 AnalysisBoth.C:1022
 AnalysisBoth.C:1023
 AnalysisBoth.C:1024
 AnalysisBoth.C:1025
 AnalysisBoth.C:1026
 AnalysisBoth.C:1027
 AnalysisBoth.C:1028
 AnalysisBoth.C:1029
 AnalysisBoth.C:1030
 AnalysisBoth.C:1031
 AnalysisBoth.C:1032
 AnalysisBoth.C:1033
 AnalysisBoth.C:1034
 AnalysisBoth.C:1035
 AnalysisBoth.C:1036
 AnalysisBoth.C:1037
 AnalysisBoth.C:1038
 AnalysisBoth.C:1039
 AnalysisBoth.C:1040
 AnalysisBoth.C:1041
 AnalysisBoth.C:1042
 AnalysisBoth.C:1043
 AnalysisBoth.C:1044
 AnalysisBoth.C:1045
 AnalysisBoth.C:1046
 AnalysisBoth.C:1047
 AnalysisBoth.C:1048
 AnalysisBoth.C:1049
 AnalysisBoth.C:1050
 AnalysisBoth.C:1051
 AnalysisBoth.C:1052
 AnalysisBoth.C:1053
 AnalysisBoth.C:1054
 AnalysisBoth.C:1055
 AnalysisBoth.C:1056
 AnalysisBoth.C:1057
 AnalysisBoth.C:1058
 AnalysisBoth.C:1059
 AnalysisBoth.C:1060
 AnalysisBoth.C:1061
 AnalysisBoth.C:1062
 AnalysisBoth.C:1063
 AnalysisBoth.C:1064
 AnalysisBoth.C:1065
 AnalysisBoth.C:1066
 AnalysisBoth.C:1067
 AnalysisBoth.C:1068
 AnalysisBoth.C:1069
 AnalysisBoth.C:1070
 AnalysisBoth.C:1071
 AnalysisBoth.C:1072
 AnalysisBoth.C:1073
 AnalysisBoth.C:1074
 AnalysisBoth.C:1075
 AnalysisBoth.C:1076
 AnalysisBoth.C:1077
 AnalysisBoth.C:1078
 AnalysisBoth.C:1079
 AnalysisBoth.C:1080
 AnalysisBoth.C:1081
 AnalysisBoth.C:1082
 AnalysisBoth.C:1083
 AnalysisBoth.C:1084
 AnalysisBoth.C:1085
 AnalysisBoth.C:1086
 AnalysisBoth.C:1087
 AnalysisBoth.C:1088
 AnalysisBoth.C:1089
 AnalysisBoth.C:1090
 AnalysisBoth.C:1091
 AnalysisBoth.C:1092
 AnalysisBoth.C:1093
 AnalysisBoth.C:1094
 AnalysisBoth.C:1095
 AnalysisBoth.C:1096
 AnalysisBoth.C:1097
 AnalysisBoth.C:1098
 AnalysisBoth.C:1099
 AnalysisBoth.C:1100
 AnalysisBoth.C:1101
 AnalysisBoth.C:1102
 AnalysisBoth.C:1103
 AnalysisBoth.C:1104
 AnalysisBoth.C:1105
 AnalysisBoth.C:1106
 AnalysisBoth.C:1107
 AnalysisBoth.C:1108
 AnalysisBoth.C:1109
 AnalysisBoth.C:1110
 AnalysisBoth.C:1111
 AnalysisBoth.C:1112
 AnalysisBoth.C:1113
 AnalysisBoth.C:1114
 AnalysisBoth.C:1115
 AnalysisBoth.C:1116
 AnalysisBoth.C:1117
 AnalysisBoth.C:1118
 AnalysisBoth.C:1119
 AnalysisBoth.C:1120
 AnalysisBoth.C:1121
 AnalysisBoth.C:1122
 AnalysisBoth.C:1123
 AnalysisBoth.C:1124
 AnalysisBoth.C:1125
 AnalysisBoth.C:1126
 AnalysisBoth.C:1127
 AnalysisBoth.C:1128
 AnalysisBoth.C:1129
 AnalysisBoth.C:1130
 AnalysisBoth.C:1131
 AnalysisBoth.C:1132
 AnalysisBoth.C:1133
 AnalysisBoth.C:1134
 AnalysisBoth.C:1135
 AnalysisBoth.C:1136
 AnalysisBoth.C:1137
 AnalysisBoth.C:1138
 AnalysisBoth.C:1139
 AnalysisBoth.C:1140
 AnalysisBoth.C:1141
 AnalysisBoth.C:1142
 AnalysisBoth.C:1143
 AnalysisBoth.C:1144
 AnalysisBoth.C:1145
 AnalysisBoth.C:1146
 AnalysisBoth.C:1147
 AnalysisBoth.C:1148
 AnalysisBoth.C:1149
 AnalysisBoth.C:1150
 AnalysisBoth.C:1151
 AnalysisBoth.C:1152
 AnalysisBoth.C:1153
 AnalysisBoth.C:1154
 AnalysisBoth.C:1155
 AnalysisBoth.C:1156
 AnalysisBoth.C:1157
 AnalysisBoth.C:1158
 AnalysisBoth.C:1159
 AnalysisBoth.C:1160
 AnalysisBoth.C:1161
 AnalysisBoth.C:1162
 AnalysisBoth.C:1163
 AnalysisBoth.C:1164
 AnalysisBoth.C:1165
 AnalysisBoth.C:1166
 AnalysisBoth.C:1167
 AnalysisBoth.C:1168
 AnalysisBoth.C:1169
 AnalysisBoth.C:1170
 AnalysisBoth.C:1171
 AnalysisBoth.C:1172
 AnalysisBoth.C:1173
 AnalysisBoth.C:1174
 AnalysisBoth.C:1175
 AnalysisBoth.C:1176
 AnalysisBoth.C:1177
 AnalysisBoth.C:1178
 AnalysisBoth.C:1179
 AnalysisBoth.C:1180
 AnalysisBoth.C:1181
 AnalysisBoth.C:1182
 AnalysisBoth.C:1183
 AnalysisBoth.C:1184
 AnalysisBoth.C:1185
 AnalysisBoth.C:1186
 AnalysisBoth.C:1187
 AnalysisBoth.C:1188
 AnalysisBoth.C:1189
 AnalysisBoth.C:1190
 AnalysisBoth.C:1191
 AnalysisBoth.C:1192
 AnalysisBoth.C:1193
 AnalysisBoth.C:1194
 AnalysisBoth.C:1195
 AnalysisBoth.C:1196
 AnalysisBoth.C:1197
 AnalysisBoth.C:1198
 AnalysisBoth.C:1199
 AnalysisBoth.C:1200
 AnalysisBoth.C:1201
 AnalysisBoth.C:1202
 AnalysisBoth.C:1203
 AnalysisBoth.C:1204
 AnalysisBoth.C:1205
 AnalysisBoth.C:1206
 AnalysisBoth.C:1207
 AnalysisBoth.C:1208
 AnalysisBoth.C:1209
 AnalysisBoth.C:1210
 AnalysisBoth.C:1211
 AnalysisBoth.C:1212
 AnalysisBoth.C:1213
 AnalysisBoth.C:1214
 AnalysisBoth.C:1215
 AnalysisBoth.C:1216
 AnalysisBoth.C:1217
 AnalysisBoth.C:1218
 AnalysisBoth.C:1219
 AnalysisBoth.C:1220
 AnalysisBoth.C:1221
 AnalysisBoth.C:1222
 AnalysisBoth.C:1223
 AnalysisBoth.C:1224
 AnalysisBoth.C:1225
 AnalysisBoth.C:1226
 AnalysisBoth.C:1227
 AnalysisBoth.C:1228
 AnalysisBoth.C:1229
 AnalysisBoth.C:1230
 AnalysisBoth.C:1231
 AnalysisBoth.C:1232
 AnalysisBoth.C:1233
 AnalysisBoth.C:1234
 AnalysisBoth.C:1235
 AnalysisBoth.C:1236
 AnalysisBoth.C:1237
 AnalysisBoth.C:1238
 AnalysisBoth.C:1239
 AnalysisBoth.C:1240
 AnalysisBoth.C:1241
 AnalysisBoth.C:1242
 AnalysisBoth.C:1243
 AnalysisBoth.C:1244
 AnalysisBoth.C:1245
 AnalysisBoth.C:1246
 AnalysisBoth.C:1247
 AnalysisBoth.C:1248
 AnalysisBoth.C:1249
 AnalysisBoth.C:1250
 AnalysisBoth.C:1251
 AnalysisBoth.C:1252
 AnalysisBoth.C:1253
 AnalysisBoth.C:1254
 AnalysisBoth.C:1255
 AnalysisBoth.C:1256
 AnalysisBoth.C:1257
 AnalysisBoth.C:1258
 AnalysisBoth.C:1259
 AnalysisBoth.C:1260
 AnalysisBoth.C:1261
 AnalysisBoth.C:1262
 AnalysisBoth.C:1263
 AnalysisBoth.C:1264
 AnalysisBoth.C:1265
 AnalysisBoth.C:1266
 AnalysisBoth.C:1267
 AnalysisBoth.C:1268
 AnalysisBoth.C:1269
 AnalysisBoth.C:1270
 AnalysisBoth.C:1271
 AnalysisBoth.C:1272
 AnalysisBoth.C:1273
 AnalysisBoth.C:1274
 AnalysisBoth.C:1275
 AnalysisBoth.C:1276
 AnalysisBoth.C:1277
 AnalysisBoth.C:1278
 AnalysisBoth.C:1279
 AnalysisBoth.C:1280
 AnalysisBoth.C:1281
 AnalysisBoth.C:1282
 AnalysisBoth.C:1283
 AnalysisBoth.C:1284
 AnalysisBoth.C:1285
 AnalysisBoth.C:1286
 AnalysisBoth.C:1287
 AnalysisBoth.C:1288
 AnalysisBoth.C:1289
 AnalysisBoth.C:1290
 AnalysisBoth.C:1291
 AnalysisBoth.C:1292
 AnalysisBoth.C:1293
 AnalysisBoth.C:1294
 AnalysisBoth.C:1295
 AnalysisBoth.C:1296
 AnalysisBoth.C:1297
 AnalysisBoth.C:1298
 AnalysisBoth.C:1299
 AnalysisBoth.C:1300
 AnalysisBoth.C:1301
 AnalysisBoth.C:1302
 AnalysisBoth.C:1303
 AnalysisBoth.C:1304
 AnalysisBoth.C:1305
 AnalysisBoth.C:1306
 AnalysisBoth.C:1307
 AnalysisBoth.C:1308
 AnalysisBoth.C:1309
 AnalysisBoth.C:1310
 AnalysisBoth.C:1311
 AnalysisBoth.C:1312
 AnalysisBoth.C:1313
 AnalysisBoth.C:1314
 AnalysisBoth.C:1315
 AnalysisBoth.C:1316
 AnalysisBoth.C:1317
 AnalysisBoth.C:1318
 AnalysisBoth.C:1319
 AnalysisBoth.C:1320
 AnalysisBoth.C:1321
 AnalysisBoth.C:1322
 AnalysisBoth.C:1323
 AnalysisBoth.C:1324
 AnalysisBoth.C:1325
 AnalysisBoth.C:1326
 AnalysisBoth.C:1327
 AnalysisBoth.C:1328
 AnalysisBoth.C:1329
 AnalysisBoth.C:1330
 AnalysisBoth.C:1331
 AnalysisBoth.C:1332
 AnalysisBoth.C:1333
 AnalysisBoth.C:1334
 AnalysisBoth.C:1335
 AnalysisBoth.C:1336
 AnalysisBoth.C:1337
 AnalysisBoth.C:1338
 AnalysisBoth.C:1339
 AnalysisBoth.C:1340
 AnalysisBoth.C:1341
 AnalysisBoth.C:1342
 AnalysisBoth.C:1343
 AnalysisBoth.C:1344
 AnalysisBoth.C:1345
 AnalysisBoth.C:1346
 AnalysisBoth.C:1347
 AnalysisBoth.C:1348
 AnalysisBoth.C:1349
 AnalysisBoth.C:1350
 AnalysisBoth.C:1351
 AnalysisBoth.C:1352
 AnalysisBoth.C:1353
 AnalysisBoth.C:1354
 AnalysisBoth.C:1355
 AnalysisBoth.C:1356
 AnalysisBoth.C:1357
 AnalysisBoth.C:1358
 AnalysisBoth.C:1359
 AnalysisBoth.C:1360
 AnalysisBoth.C:1361
 AnalysisBoth.C:1362
 AnalysisBoth.C:1363
 AnalysisBoth.C:1364
 AnalysisBoth.C:1365
 AnalysisBoth.C:1366
 AnalysisBoth.C:1367
 AnalysisBoth.C:1368
 AnalysisBoth.C:1369
 AnalysisBoth.C:1370
 AnalysisBoth.C:1371
 AnalysisBoth.C:1372
 AnalysisBoth.C:1373
 AnalysisBoth.C:1374
 AnalysisBoth.C:1375
 AnalysisBoth.C:1376
 AnalysisBoth.C:1377
 AnalysisBoth.C:1378
 AnalysisBoth.C:1379
 AnalysisBoth.C:1380
 AnalysisBoth.C:1381
 AnalysisBoth.C:1382
 AnalysisBoth.C:1383
 AnalysisBoth.C:1384
 AnalysisBoth.C:1385
 AnalysisBoth.C:1386
 AnalysisBoth.C:1387
 AnalysisBoth.C:1388
 AnalysisBoth.C:1389
 AnalysisBoth.C:1390
 AnalysisBoth.C:1391
 AnalysisBoth.C:1392
 AnalysisBoth.C:1393
 AnalysisBoth.C:1394
 AnalysisBoth.C:1395
 AnalysisBoth.C:1396
 AnalysisBoth.C:1397
 AnalysisBoth.C:1398
 AnalysisBoth.C:1399
 AnalysisBoth.C:1400
 AnalysisBoth.C:1401
 AnalysisBoth.C:1402
 AnalysisBoth.C:1403
 AnalysisBoth.C:1404
 AnalysisBoth.C:1405
 AnalysisBoth.C:1406
 AnalysisBoth.C:1407
 AnalysisBoth.C:1408
 AnalysisBoth.C:1409
 AnalysisBoth.C:1410
 AnalysisBoth.C:1411
 AnalysisBoth.C:1412
 AnalysisBoth.C:1413
 AnalysisBoth.C:1414
 AnalysisBoth.C:1415
 AnalysisBoth.C:1416
 AnalysisBoth.C:1417
 AnalysisBoth.C:1418
 AnalysisBoth.C:1419
 AnalysisBoth.C:1420
 AnalysisBoth.C:1421
 AnalysisBoth.C:1422
 AnalysisBoth.C:1423
 AnalysisBoth.C:1424
 AnalysisBoth.C:1425
 AnalysisBoth.C:1426
 AnalysisBoth.C:1427
 AnalysisBoth.C:1428
 AnalysisBoth.C:1429
 AnalysisBoth.C:1430
 AnalysisBoth.C:1431
 AnalysisBoth.C:1432
 AnalysisBoth.C:1433
 AnalysisBoth.C:1434
 AnalysisBoth.C:1435
 AnalysisBoth.C:1436
 AnalysisBoth.C:1437
 AnalysisBoth.C:1438
 AnalysisBoth.C:1439
 AnalysisBoth.C:1440
 AnalysisBoth.C:1441
 AnalysisBoth.C:1442
 AnalysisBoth.C:1443
 AnalysisBoth.C:1444
 AnalysisBoth.C:1445
 AnalysisBoth.C:1446
 AnalysisBoth.C:1447
 AnalysisBoth.C:1448
 AnalysisBoth.C:1449
 AnalysisBoth.C:1450
 AnalysisBoth.C:1451
 AnalysisBoth.C:1452
 AnalysisBoth.C:1453
 AnalysisBoth.C:1454
 AnalysisBoth.C:1455
 AnalysisBoth.C:1456
 AnalysisBoth.C:1457
 AnalysisBoth.C:1458
 AnalysisBoth.C:1459
 AnalysisBoth.C:1460
 AnalysisBoth.C:1461
 AnalysisBoth.C:1462
 AnalysisBoth.C:1463
 AnalysisBoth.C:1464
 AnalysisBoth.C:1465
 AnalysisBoth.C:1466
 AnalysisBoth.C:1467
 AnalysisBoth.C:1468
 AnalysisBoth.C:1469
 AnalysisBoth.C:1470
 AnalysisBoth.C:1471
 AnalysisBoth.C:1472
 AnalysisBoth.C:1473
 AnalysisBoth.C:1474
 AnalysisBoth.C:1475
 AnalysisBoth.C:1476
 AnalysisBoth.C:1477
 AnalysisBoth.C:1478
 AnalysisBoth.C:1479
 AnalysisBoth.C:1480
 AnalysisBoth.C:1481
 AnalysisBoth.C:1482
 AnalysisBoth.C:1483
 AnalysisBoth.C:1484
 AnalysisBoth.C:1485
 AnalysisBoth.C:1486
 AnalysisBoth.C:1487
 AnalysisBoth.C:1488
 AnalysisBoth.C:1489
 AnalysisBoth.C:1490
 AnalysisBoth.C:1491
 AnalysisBoth.C:1492
 AnalysisBoth.C:1493
 AnalysisBoth.C:1494
 AnalysisBoth.C:1495
 AnalysisBoth.C:1496
 AnalysisBoth.C:1497
 AnalysisBoth.C:1498
 AnalysisBoth.C:1499
 AnalysisBoth.C:1500
 AnalysisBoth.C:1501
 AnalysisBoth.C:1502
 AnalysisBoth.C:1503
 AnalysisBoth.C:1504
 AnalysisBoth.C:1505
 AnalysisBoth.C:1506
 AnalysisBoth.C:1507
 AnalysisBoth.C:1508
 AnalysisBoth.C:1509
 AnalysisBoth.C:1510
 AnalysisBoth.C:1511
 AnalysisBoth.C:1512
 AnalysisBoth.C:1513
 AnalysisBoth.C:1514
 AnalysisBoth.C:1515
 AnalysisBoth.C:1516
 AnalysisBoth.C:1517
 AnalysisBoth.C:1518
 AnalysisBoth.C:1519
 AnalysisBoth.C:1520
 AnalysisBoth.C:1521
 AnalysisBoth.C:1522
 AnalysisBoth.C:1523
 AnalysisBoth.C:1524
 AnalysisBoth.C:1525
 AnalysisBoth.C:1526
 AnalysisBoth.C:1527
 AnalysisBoth.C:1528
 AnalysisBoth.C:1529
 AnalysisBoth.C:1530
 AnalysisBoth.C:1531
 AnalysisBoth.C:1532
 AnalysisBoth.C:1533
 AnalysisBoth.C:1534
 AnalysisBoth.C:1535
 AnalysisBoth.C:1536
 AnalysisBoth.C:1537
 AnalysisBoth.C:1538
 AnalysisBoth.C:1539
 AnalysisBoth.C:1540
 AnalysisBoth.C:1541
 AnalysisBoth.C:1542
 AnalysisBoth.C:1543
 AnalysisBoth.C:1544
 AnalysisBoth.C:1545
 AnalysisBoth.C:1546
 AnalysisBoth.C:1547
 AnalysisBoth.C:1548
 AnalysisBoth.C:1549
 AnalysisBoth.C:1550
 AnalysisBoth.C:1551
 AnalysisBoth.C:1552
 AnalysisBoth.C:1553
 AnalysisBoth.C:1554
 AnalysisBoth.C:1555
 AnalysisBoth.C:1556
 AnalysisBoth.C:1557
 AnalysisBoth.C:1558
 AnalysisBoth.C:1559
 AnalysisBoth.C:1560
 AnalysisBoth.C:1561
 AnalysisBoth.C:1562
 AnalysisBoth.C:1563
 AnalysisBoth.C:1564
 AnalysisBoth.C:1565
 AnalysisBoth.C:1566
 AnalysisBoth.C:1567
 AnalysisBoth.C:1568
 AnalysisBoth.C:1569
 AnalysisBoth.C:1570
 AnalysisBoth.C:1571
 AnalysisBoth.C:1572
 AnalysisBoth.C:1573
 AnalysisBoth.C:1574
 AnalysisBoth.C:1575
 AnalysisBoth.C:1576
 AnalysisBoth.C:1577
 AnalysisBoth.C:1578
 AnalysisBoth.C:1579
 AnalysisBoth.C:1580
 AnalysisBoth.C:1581
 AnalysisBoth.C:1582
 AnalysisBoth.C:1583
 AnalysisBoth.C:1584
 AnalysisBoth.C:1585
 AnalysisBoth.C:1586
 AnalysisBoth.C:1587
 AnalysisBoth.C:1588
 AnalysisBoth.C:1589
 AnalysisBoth.C:1590
 AnalysisBoth.C:1591
 AnalysisBoth.C:1592
 AnalysisBoth.C:1593
 AnalysisBoth.C:1594
 AnalysisBoth.C:1595
 AnalysisBoth.C:1596
 AnalysisBoth.C:1597
 AnalysisBoth.C:1598
 AnalysisBoth.C:1599
 AnalysisBoth.C:1600
 AnalysisBoth.C:1601
 AnalysisBoth.C:1602
 AnalysisBoth.C:1603
 AnalysisBoth.C:1604
 AnalysisBoth.C:1605
 AnalysisBoth.C:1606
 AnalysisBoth.C:1607
 AnalysisBoth.C:1608
 AnalysisBoth.C:1609
 AnalysisBoth.C:1610
 AnalysisBoth.C:1611
 AnalysisBoth.C:1612
 AnalysisBoth.C:1613
 AnalysisBoth.C:1614
 AnalysisBoth.C:1615
 AnalysisBoth.C:1616
 AnalysisBoth.C:1617
 AnalysisBoth.C:1618
 AnalysisBoth.C:1619
 AnalysisBoth.C:1620
 AnalysisBoth.C:1621
 AnalysisBoth.C:1622
 AnalysisBoth.C:1623
 AnalysisBoth.C:1624
 AnalysisBoth.C:1625
 AnalysisBoth.C:1626
 AnalysisBoth.C:1627
 AnalysisBoth.C:1628
 AnalysisBoth.C:1629
 AnalysisBoth.C:1630
 AnalysisBoth.C:1631
 AnalysisBoth.C:1632
 AnalysisBoth.C:1633
 AnalysisBoth.C:1634
 AnalysisBoth.C:1635
 AnalysisBoth.C:1636
 AnalysisBoth.C:1637
 AnalysisBoth.C:1638
 AnalysisBoth.C:1639
 AnalysisBoth.C:1640
 AnalysisBoth.C:1641
 AnalysisBoth.C:1642
 AnalysisBoth.C:1643
 AnalysisBoth.C:1644
 AnalysisBoth.C:1645
 AnalysisBoth.C:1646
 AnalysisBoth.C:1647
 AnalysisBoth.C:1648
 AnalysisBoth.C:1649
 AnalysisBoth.C:1650
 AnalysisBoth.C:1651
 AnalysisBoth.C:1652
 AnalysisBoth.C:1653
 AnalysisBoth.C:1654
 AnalysisBoth.C:1655
 AnalysisBoth.C:1656
 AnalysisBoth.C:1657
 AnalysisBoth.C:1658
 AnalysisBoth.C:1659
 AnalysisBoth.C:1660
 AnalysisBoth.C:1661
 AnalysisBoth.C:1662
 AnalysisBoth.C:1663
 AnalysisBoth.C:1664
 AnalysisBoth.C:1665
 AnalysisBoth.C:1666
 AnalysisBoth.C:1667
 AnalysisBoth.C:1668
 AnalysisBoth.C:1669
 AnalysisBoth.C:1670
 AnalysisBoth.C:1671
 AnalysisBoth.C:1672
 AnalysisBoth.C:1673
 AnalysisBoth.C:1674
 AnalysisBoth.C:1675
 AnalysisBoth.C:1676
 AnalysisBoth.C:1677
 AnalysisBoth.C:1678
 AnalysisBoth.C:1679
 AnalysisBoth.C:1680
 AnalysisBoth.C:1681
 AnalysisBoth.C:1682
 AnalysisBoth.C:1683
 AnalysisBoth.C:1684
 AnalysisBoth.C:1685
 AnalysisBoth.C:1686
 AnalysisBoth.C:1687
 AnalysisBoth.C:1688
 AnalysisBoth.C:1689
 AnalysisBoth.C:1690
 AnalysisBoth.C:1691
 AnalysisBoth.C:1692
 AnalysisBoth.C:1693
 AnalysisBoth.C:1694
 AnalysisBoth.C:1695
 AnalysisBoth.C:1696
 AnalysisBoth.C:1697
 AnalysisBoth.C:1698
 AnalysisBoth.C:1699
 AnalysisBoth.C:1700
 AnalysisBoth.C:1701
 AnalysisBoth.C:1702
 AnalysisBoth.C:1703
 AnalysisBoth.C:1704
 AnalysisBoth.C:1705