ROOT logo
Float_t QAPlotsBoth( AliSpectraBothHistoManager* hman_data, AliSpectraBothHistoManager* hman_mc,
	      AliSpectraBothEventCuts* ecuts_data, AliSpectraBothEventCuts* ecuts_mc,
	      AliSpectraBothTrackCuts* tcuts_data, AliSpectraBothTrackCuts* tcuts_mc,
	      TList * flistqa,TList * flistcanvas,Bool_t fullicorr=kTRUE)
{
TString pidmethods[3]={"TPC","TOF","TPCTOF"};	
	Double_t neventsdata =  ecutsdata->NumberOfPhysSelEvents();
	Double_t neventsmc =  ecutsmc->NumberOfPhysSelEvents();
	
	
	
	for(Int_t ipart=0;ipart<3;ipart++)
	{
			
			for(Int_t imethod=0;imethod<3;imethod++)
			{
				if(!hman_data->GetNSigHistogram(Form("hHistNSig%sPt%s",Particle[ipart].Data(),pidmethods[imethod].Data())))
					continue;
				 TH2F *nsig_data = (TH2F*)((TH2F*)hman_data->GetNSigHistogram(Form("hHistNSig%sPt%s",Particle[ipart].Data(),pidmethods[imethod].Data())))->Clone();
				// nsig_data->RebinX(20);			 
				// nsig_data->RebinY(4);
				// nsig_data->Sumw2();
				if(!nsig_data)
					continue;

				if(!hman_mc->GetNSigHistogram(Form("hHistNSig%sPt%s",Particle[ipart].Data(),pidmethods[imethod].Data())))
					continue;
				 TH2F *nsig_mc = (TH2F*)((TH2F*)hman_mc->GetNSigHistogram(Form("hHistNSig%sPt%s",Particle[ipart].Data(),pidmethods[imethod].Data())))->Clone();
				 //nsig_mc->RebinX(20);			 
				// nsig_mc->RebinY(4);
				// nsig_mc->Sumw2();
				if(!nsig_mc)
					continue;
				 

				Int_t ibin=1;
				Float_t binsize=nsig_mc->GetXaxis()->GetBinWidth(1);

				TH1F* maxposdata=(TH1F*)nsig_data->ProjectionX(Form("%s%sdatamaxpos",Particle[ipart].Data(),pidmethods[imethod].Data()),-1,-1);
				maxposdata->Reset();
				maxposdata->SetTitle(";p_{T} (GeV/c);max in (-2,2)");
				TH1F* maxposmc=(TH1F*)nsig_data->ProjectionX(Form("%s%smcmaxpos",Particle[ipart].Data(),pidmethods[imethod].Data()),-1,-1);
				maxposmc->Reset();
				maxposmc->SetTitle(";p_{T} (GeV/c);max in (-2,2)");

	
				 while (ibin*binsize<3.0)
				 {
					// TCanvas* c=new TCanvas(Form("canvas%s%s%d",Particle[ipart].Data(),pidmethods[imethod].Data(),ibin),Form("canvas%s%s%d",Particle[ipart].Data(),pidmethods[imethod].Data(),ibin),700,500);
					
					 TH1F *nsig_data_Proj1=(TH1F*)nsig_data->ProjectionY(Form("%s%sdata[%.2f,%.2f]",Particle[ipart].Data(),pidmethods[imethod].Data(),nsig_data->GetXaxis()->GetBinLowEdge(ibin),nsig_data->GetXaxis()->GetBinUpEdge(ibin)),ibin,ibin);
					 TH1F *nsig_mc_Proj1=(TH1F*)nsig_mc->ProjectionY(Form("%s%smc[%.2f,%.2f]",Particle[ipart].Data(),pidmethods[imethod].Data(),nsig_mc->GetXaxis()->GetBinLowEdge(ibin),nsig_mc->GetXaxis()->GetBinUpEdge(ibin)),ibin,ibin);
					 nsig_data_Proj1->GetXaxis()->SetRangeUser(-3,3);
					 nsig_data_Proj1->SetLineColor(kRed);
					 if(nsig_data_Proj1->Integral()<1&&nsig_mc_Proj1->Integral()<1)
					 {	
						ibin++;	
						continue;
					 } 
									//	nsig_data_Proj1->Sumw2();
				//	nsig_mc_Proj1->Sumw2();
					  //nsig_data_Proj1->GetXaxis()->SetRangeUser(-5,5);
					 
					 //c->cd()->SetLogy();
					 //nsig_data_Proj1->Draw();
					 //nsig_mc_Proj1->Draw("same");
					nsig_data_Proj1->GetXaxis()->SetRange(nsig_data_Proj1->GetXaxis()->FindBin(-2.0),nsig_data_Proj1->GetXaxis()->FindBin(2.0));
					if(nsig_data_Proj1->GetMaximumBin()<=nsig_data_Proj1->GetXaxis()->FindBin(2.0)&&nsig_data_Proj1->GetMaximumBin()>=nsig_data_Proj1->GetXaxis()->FindBin(-2.0))
					{
						maxposdata->SetBinContent(ibin,nsig_data_Proj1->GetXaxis()->GetBinCenter(nsig_data_Proj1->GetMaximumBin()));	
						maxposdata->SetBinError(ibin,nsig_data_Proj1->GetXaxis()->GetBinWidth(nsig_data_Proj1->GetMaximumBin())/2.0);	
	 				}
				//cout<<Form("%s%sdatamaxpos",Particle[ipart].Data(),pidmethods[imethod].Data())<<" "<<nsig_data_Proj1->GetMaximumBin()<<" "<<nsig_data_Proj1->GetXaxis()->FindBin(2.0)<<" "<<nsig_data_Proj1->GetXaxis()->FindBin(-2.0)<<" "<<nsig_data_Proj1->GetXaxis()->GetBinCenter(nsig_data_Proj1->GetMaximumBin())<<" "<<ibin<<endl;

					nsig_data_Proj1->GetXaxis()->SetRange(0,nsig_data_Proj1->GetXaxis()->GetNbins());
									
					nsig_mc_Proj1->GetXaxis()->SetRange(nsig_mc_Proj1->GetXaxis()->FindBin(-2.0),nsig_mc_Proj1->GetXaxis()->FindBin(2.0));
					if(nsig_mc_Proj1->GetMaximumBin()<=nsig_mc_Proj1->GetXaxis()->FindBin(2.0)&&nsig_mc_Proj1->GetMaximumBin()>=nsig_mc_Proj1->GetXaxis()->FindBin(-2.0))
					{
						maxposmc->SetBinContent(ibin,nsig_mc_Proj1->GetXaxis()->GetBinCenter(nsig_mc_Proj1->GetMaximumBin()));	
						maxposmc->SetBinError(ibin,nsig_mc_Proj1->GetXaxis()->GetBinWidth(nsig_mc_Proj1->GetMaximumBin())/2.0);	
	 				}
				//		cout<<Form("%s%smcmaxpos",Particle[ipart].Data(),pidmethods[imethod].Data())<<" "<<nsig_mc_Proj1->GetMaximumBin()<<" "<<nsig_mc_Proj1->GetXaxis()->FindBin(2.0)<<" "<<nsig_mc_Proj1->GetXaxis()->FindBin(-2.0)<<" "<<ibin<<" "<<nsig_mc_Proj1->GetXaxis()->GetBinCenter(nsig_mc_Proj1->GetMaximumBin())<<endl;

					nsig_mc_Proj1->GetXaxis()->SetRange(0,nsig_mc_Proj1->GetXaxis()->GetNbins());

					if(neventsdata>0.0&&neventsmc>0.0)
					{
						nsig_data_Proj1->Sumw2();
						nsig_mc_Proj1->Sumw2();
						nsig_data_Proj1->Scale(1.0/neventsdata);
					 	nsig_mc_Proj1->Scale(1.0/neventsmc);
					}
					
					flistqa->Add(nsig_data_Proj1);
					flistqa->Add(nsig_mc_Proj1);
					ibin++;
				 }
				flistqa->Add(maxposmc);
				flistqa->Add(maxposdata);
			}
	}
	TH1F* fHistoVtxAftSeldata=(TH1F*)ecuts_data->GetHistoVtxAftSel();
	TH1F* fHistoVtxAftSelmc=(TH1F*)ecuts_mc->GetHistoVtxAftSel();
	Int_t binstartx=1;	
         while(fHistoVtxAftSeldata->GetBinContent(binstartx)<1&&binstartx<fHistoVtxAftSeldata->GetXaxis()->GetNbins())
                binstartx++;
        binstartx++;
	flistcanvas->Add(plot_on_canvas("vertex",fHistoVtxAftSeldata,fHistoVtxAftSelmc));
	/*

	TF1* fdata=new TF1("dataveretxfit","gausn");
	TF1* fmc=new TF1("mcveretxfit","gausn");
	//we strat fit a second not empty bin
	Float_t minfit=fHistoVtxAftSeldata->GetXaxis()->GetBinCenter(binstartx);
	cout<<"fit starts "<<minfit<<endl;
	fHistoVtxAftSeldata->Fit("dataveretxfit","0","",minfit,-1.0*minfit);
	fHistoVtxAftSelmc->Fit("mcveretxfit","0","",minfit,-1.0*minfit);
	Float_t datavertexratio=fHistoVtxAftSeldata->Integral(-1,-1,"width")/fdata->GetParameter(0);
	Float_t mcvertexratio=fHistoVtxAftSelmc->Integral(-1,-1,"width")/fmc->GetParameter(0);
	*/
	//Event cut histo 
	//TH1I* histodata=ecuts_data->GetHistoVtxAftSel();
	//TH1I* histomc=ecuts_mc->GetHistoVtxAftSel();
	
	Int_t events_data=ecuts_data->GetHistoVtxAftSel()->GetEntries();
	Int_t events_mc=ecuts_mc->GetHistoVtxAftSel()->GetEntries();

	if(events_data==0&&events_mc==0)
		return 0;


	Float_t datavertexratio=((Float_t)(events_data))/((Float_t)ecuts_data->GetHistoVtxAftSelwithoutZvertexCut()->GetEntries());
         Float_t mcvertexratio=((Float_t)(events_mc))/((Float_t)ecuts_mc->GetHistoVtxAftSelwithoutZvertexCut()->GetEntries());
	 TH1F* fHistoEtaAftSeldata=(TH1F*)ecuts_data->GetHistoEtaAftSel();
	 TH1F* fHistoEtaAftSelmc=(TH1F*)ecuts_mc->GetHistoEtaAftSel();
	flistcanvas->Add(plot_on_canvas("ETA",fHistoEtaAftSeldata,fHistoEtaAftSelmc));


	 TH1F* fITSclustershistdata=(TH1F*)tcuts_data->GetHistoNclustersITS();
 	  TH1F* fITSclustershistmc=(TH1F*)tcuts_mc->GetHistoNclustersITS();

	flistcanvas->Add(plot_on_canvas("NITS",fITSclustershistdata,fITSclustershistmc));
	cout<<" data "<<datavertexratio<<" mc "<<mcvertexratio<<endl;
	
	TH2F* hmul=(TH2F*)hman_mc->GetGenMulvsRawMulHistogram("hHistGenMulvsRawMul");	
	hmul->Sumw2();	
	TCanvas* cbc=new TCanvas("broken chunks","broken chunks",1200,600);
	cbc->Divide(2,1);
	cbc->cd(1);
	hmul->Draw();
	cbc->cd(2);
	TH1F* nonzero=(TH1F*)hmul->ProjectionX("nonzerotracks",2,-1);
	nonzero->SetMarkerColor(kRed);
	nonzero->SetMarkerStyle(21);
	TH1F* binzero=(TH1F*)hmul->ProjectionX("binzerotracks",1,1);
	binzero->SetMarkerColor(kBlack);
	binzero->SetMarkerStyle(22);
	binzero->Sumw2();
	nonzero->Sumw2();
	binzero->Divide(nonzero);
	TF1* badchunk=new TF1("badchunkfit","pol0",10,40);
	binzero->Fit("badchunkfit","R");
	Float_t badchunksfraction=badchunk->GetParameter(0);
	cout<<"Bad chunks "<<badchunksfraction<<endl;
	if(badchunksfraction<0.005)
	{
		badchunksfraction=0.0; //only applied if higer than 0.5%
		cout<<"reset bad chunks correction"<<badchunksfraction<<endl;

	}
	
	
	binzero->Draw("E1");
	flistcanvas->Add(cbc);
	if(TMath::Abs(hmul->GetEntries()/events_mc-1.0)>0.001)
		cout<<"MC merging problem"<<endl;
	if(TMath::Abs(hman_data->GetGenMulvsRawMulHistogram("hHistGenMulvsRawMul")->GetEntries()/events_data-1.0)>0.001)
		cout<<"Data merging problem"<<endl;
	
	if(fullicorr)
		return (1.0-badchunksfraction)*mcvertexratio/datavertexratio;
	else 
		return (1.0-badchunksfraction)*mcvertexratio;
}
TCanvas* plot_on_canvas(TString name, TH1* h1,TH1* h2)
{
	TCanvas* cvrt=new TCanvas(name.Data(),name.Data(),600,600);
	cvrt->cd();
	h1->SetLineColor(kRed);
	h2->SetLineColor(kBlue);
	h1->Sumw2();
	h2->Sumw2();
	TLegend *lvtr=new TLegend(0.2,0.2,0.5,0.3,"","NDC");
	lvtr->SetLineColor(kWhite);
	lvtr->AddEntry(h1,"data","l");
	lvtr->AddEntry(h2,"MC","l");
	if(h1->GetBinContent(h1->GetXaxis()->FindBin(0.0))>0.0&&h2->GetBinContent(h2->GetXaxis()->FindBin(0.0))>0.0)
	{
		h1->Scale(1.0/h1->GetBinContent(h1->GetXaxis()->FindBin(0.0)));
		h2->Scale(1.0/h2->GetBinContent(h2->GetXaxis()->FindBin(0.0)));
        }
	h1->DrawCopy("L");
	h2->DrawCopy("Lsame");
	lvtr->Draw();
	return cvrt;
}

 QAPlotsBoth.C:1
 QAPlotsBoth.C:2
 QAPlotsBoth.C:3
 QAPlotsBoth.C:4
 QAPlotsBoth.C:5
 QAPlotsBoth.C:6
 QAPlotsBoth.C:7
 QAPlotsBoth.C:8
 QAPlotsBoth.C:9
 QAPlotsBoth.C:10
 QAPlotsBoth.C:11
 QAPlotsBoth.C:12
 QAPlotsBoth.C:13
 QAPlotsBoth.C:14
 QAPlotsBoth.C:15
 QAPlotsBoth.C:16
 QAPlotsBoth.C:17
 QAPlotsBoth.C:18
 QAPlotsBoth.C:19
 QAPlotsBoth.C:20
 QAPlotsBoth.C:21
 QAPlotsBoth.C:22
 QAPlotsBoth.C:23
 QAPlotsBoth.C:24
 QAPlotsBoth.C:25
 QAPlotsBoth.C:26
 QAPlotsBoth.C:27
 QAPlotsBoth.C:28
 QAPlotsBoth.C:29
 QAPlotsBoth.C:30
 QAPlotsBoth.C:31
 QAPlotsBoth.C:32
 QAPlotsBoth.C:33
 QAPlotsBoth.C:34
 QAPlotsBoth.C:35
 QAPlotsBoth.C:36
 QAPlotsBoth.C:37
 QAPlotsBoth.C:38
 QAPlotsBoth.C:39
 QAPlotsBoth.C:40
 QAPlotsBoth.C:41
 QAPlotsBoth.C:42
 QAPlotsBoth.C:43
 QAPlotsBoth.C:44
 QAPlotsBoth.C:45
 QAPlotsBoth.C:46
 QAPlotsBoth.C:47
 QAPlotsBoth.C:48
 QAPlotsBoth.C:49
 QAPlotsBoth.C:50
 QAPlotsBoth.C:51
 QAPlotsBoth.C:52
 QAPlotsBoth.C:53
 QAPlotsBoth.C:54
 QAPlotsBoth.C:55
 QAPlotsBoth.C:56
 QAPlotsBoth.C:57
 QAPlotsBoth.C:58
 QAPlotsBoth.C:59
 QAPlotsBoth.C:60
 QAPlotsBoth.C:61
 QAPlotsBoth.C:62
 QAPlotsBoth.C:63
 QAPlotsBoth.C:64
 QAPlotsBoth.C:65
 QAPlotsBoth.C:66
 QAPlotsBoth.C:67
 QAPlotsBoth.C:68
 QAPlotsBoth.C:69
 QAPlotsBoth.C:70
 QAPlotsBoth.C:71
 QAPlotsBoth.C:72
 QAPlotsBoth.C:73
 QAPlotsBoth.C:74
 QAPlotsBoth.C:75
 QAPlotsBoth.C:76
 QAPlotsBoth.C:77
 QAPlotsBoth.C:78
 QAPlotsBoth.C:79
 QAPlotsBoth.C:80
 QAPlotsBoth.C:81
 QAPlotsBoth.C:82
 QAPlotsBoth.C:83
 QAPlotsBoth.C:84
 QAPlotsBoth.C:85
 QAPlotsBoth.C:86
 QAPlotsBoth.C:87
 QAPlotsBoth.C:88
 QAPlotsBoth.C:89
 QAPlotsBoth.C:90
 QAPlotsBoth.C:91
 QAPlotsBoth.C:92
 QAPlotsBoth.C:93
 QAPlotsBoth.C:94
 QAPlotsBoth.C:95
 QAPlotsBoth.C:96
 QAPlotsBoth.C:97
 QAPlotsBoth.C:98
 QAPlotsBoth.C:99
 QAPlotsBoth.C:100
 QAPlotsBoth.C:101
 QAPlotsBoth.C:102
 QAPlotsBoth.C:103
 QAPlotsBoth.C:104
 QAPlotsBoth.C:105
 QAPlotsBoth.C:106
 QAPlotsBoth.C:107
 QAPlotsBoth.C:108
 QAPlotsBoth.C:109
 QAPlotsBoth.C:110
 QAPlotsBoth.C:111
 QAPlotsBoth.C:112
 QAPlotsBoth.C:113
 QAPlotsBoth.C:114
 QAPlotsBoth.C:115
 QAPlotsBoth.C:116
 QAPlotsBoth.C:117
 QAPlotsBoth.C:118
 QAPlotsBoth.C:119
 QAPlotsBoth.C:120
 QAPlotsBoth.C:121
 QAPlotsBoth.C:122
 QAPlotsBoth.C:123
 QAPlotsBoth.C:124
 QAPlotsBoth.C:125
 QAPlotsBoth.C:126
 QAPlotsBoth.C:127
 QAPlotsBoth.C:128
 QAPlotsBoth.C:129
 QAPlotsBoth.C:130
 QAPlotsBoth.C:131
 QAPlotsBoth.C:132
 QAPlotsBoth.C:133
 QAPlotsBoth.C:134
 QAPlotsBoth.C:135
 QAPlotsBoth.C:136
 QAPlotsBoth.C:137
 QAPlotsBoth.C:138
 QAPlotsBoth.C:139
 QAPlotsBoth.C:140
 QAPlotsBoth.C:141
 QAPlotsBoth.C:142
 QAPlotsBoth.C:143
 QAPlotsBoth.C:144
 QAPlotsBoth.C:145
 QAPlotsBoth.C:146
 QAPlotsBoth.C:147
 QAPlotsBoth.C:148
 QAPlotsBoth.C:149
 QAPlotsBoth.C:150
 QAPlotsBoth.C:151
 QAPlotsBoth.C:152
 QAPlotsBoth.C:153
 QAPlotsBoth.C:154
 QAPlotsBoth.C:155
 QAPlotsBoth.C:156
 QAPlotsBoth.C:157
 QAPlotsBoth.C:158
 QAPlotsBoth.C:159
 QAPlotsBoth.C:160
 QAPlotsBoth.C:161
 QAPlotsBoth.C:162
 QAPlotsBoth.C:163
 QAPlotsBoth.C:164
 QAPlotsBoth.C:165
 QAPlotsBoth.C:166
 QAPlotsBoth.C:167
 QAPlotsBoth.C:168
 QAPlotsBoth.C:169
 QAPlotsBoth.C:170
 QAPlotsBoth.C:171
 QAPlotsBoth.C:172
 QAPlotsBoth.C:173
 QAPlotsBoth.C:174
 QAPlotsBoth.C:175
 QAPlotsBoth.C:176
 QAPlotsBoth.C:177
 QAPlotsBoth.C:178
 QAPlotsBoth.C:179
 QAPlotsBoth.C:180
 QAPlotsBoth.C:181
 QAPlotsBoth.C:182
 QAPlotsBoth.C:183
 QAPlotsBoth.C:184
 QAPlotsBoth.C:185
 QAPlotsBoth.C:186
 QAPlotsBoth.C:187
 QAPlotsBoth.C:188
 QAPlotsBoth.C:189
 QAPlotsBoth.C:190
 QAPlotsBoth.C:191
 QAPlotsBoth.C:192
 QAPlotsBoth.C:193
 QAPlotsBoth.C:194
 QAPlotsBoth.C:195
 QAPlotsBoth.C:196
 QAPlotsBoth.C:197
 QAPlotsBoth.C:198
 QAPlotsBoth.C:199
 QAPlotsBoth.C:200
 QAPlotsBoth.C:201
 QAPlotsBoth.C:202
 QAPlotsBoth.C:203
 QAPlotsBoth.C:204
 QAPlotsBoth.C:205
 QAPlotsBoth.C:206
 QAPlotsBoth.C:207
 QAPlotsBoth.C:208
 QAPlotsBoth.C:209