ROOT logo
TH1* bayneseffdiv(TH1* numerator, TH1* denominator,Char_t* name);
TH2* bayneseffdiv2D(TH2* numerator, TH2* denominator,Char_t* name) ;
TH2F* flip(TH2F* orig,Char_t* name){
  float nbinx  = orig->GetXaxis()->GetNbins();
  float xlow = orig->GetXaxis()->GetBinLowEdge(1); 
  float xhigh = orig->GetXaxis()->GetBinLowEdge(nbinx+1); 
  float nbiny  = orig->GetYaxis()->GetNbins();
  float ylow= orig->GetYaxis()->GetBinLowEdge(1); 
  float yhigh = orig->GetYaxis()->GetBinLowEdge(nbiny+1); 
  TH2F *output = new TH2F(name,orig->GetTitle(),nbiny,ylow,yhigh,nbinx,xlow,xhigh);
  for(int i = 1;i<=nbinx;i++){
    for(int j = 1;j<=nbiny;j++){
      output->SetBinContent(j,i,orig->GetBinContent(i,j));
    }
  }
  return output;
}
void SetStyles(TH1 *histo,int marker, int color){
  histo->Sumw2();
  histo->SetMarkerStyle(marker);
  histo->SetMarkerColor(color);
  histo->SetLineColor(color);
  //histo->GetXaxis()->SetTitle(xtitle);
  //histo->GetYaxis()->SetTitle(ytitle);
}
Int_t colors[] = {0,TColor::kRed, TColor::kOrange, TColor::kGreen+3, TColor::kBlue, TColor::kBlack, 
		    TColor::kRed, TColor::kOrange, TColor::kGreen+3, TColor::kBlue, TColor::kBlack, 
		    TColor::kRed, TColor::kOrange, TColor::kGreen+3, TColor::kBlue, TColor::kBlack, 
		    TColor::kRed, TColor::kOrange, TColor::kGreen+3, TColor::kBlue, TColor::kBlack};
Int_t markers[] = {20,21,22,23,33, 24,25,26,32,27, 20,21,22,23,33, 24,25,26,32,27};

void PlotNeutronDeposits(TString filename = "rootFiles/LHC11a10a_bis/Et.ESD.simPbPb.EMCal.LHC11a10a_bis.Run139465.root"){
  gROOT->LoadMacro("macros/loadLibraries.C");
  loadLibraries();
   TFile *f = TFile::Open(filename, "READ");
    TList *l = dynamic_cast<TList*>(f->Get("out1"));
    TString histoname = "fHistNeutronsEtVsCent";
    TH2F *histo = l->FindObject(histoname.Data());
    histoname = "fHistNeutronsNumVsCent";
    TH2F *histoNum = l->FindObject(histoname.Data());
    TString outfilename = "/tmp/";
    TString calocorrfilename = "calocorrections.";
    TString det = "";
    if(filename.Contains("EMC")){
      outfilename +="EMCAL";
      calocorrfilename +="EMCAL";
      det += "Emcal";
    }
    else{
      outfilename +="PHOS";
      calocorrfilename +="PHOS";
      det += "Phos";
    }
    calocorrfilename +=".root";
    TString textfilename = "Neutrons"+det+".dat";
  TH2F  *fHistGammasGeneratedMult = l->FindObject("fHistGammasGeneratedCent");
  TH2F  *fHistGammasFoundMult = l->FindObject("fHistGammasFoundCent");
  TH2F  *fHistGammasFoundOutOfAccCent = l->FindObject("fHistGammasFoundOutOfAccCent");
  fHistGammasFoundMult->Add(fHistGammasFoundOutOfAccCent);
  // TH2F *gammaEff2D = (TH2F*) bayneseffdiv2D(fHistGammasFoundMult,fHistGammasGeneratedMult,"gammaEff2D");

    TCanvas *c1 = new TCanvas("c1","<E_{T}>",600,400);
    c1->SetTopMargin(0.02);
    c1->SetRightMargin(0.02);
    c1->SetBorderSize(0);
    c1->SetFillColor(0);
    c1->SetFillColor(0);
    c1->SetBorderMode(0);
    c1->SetFrameFillColor(0);
    c1->SetFrameBorderMode(0);
    TH1D *prof = histo->ProfileY();
    histo->Draw("colz");
    //prof->Draw("same");

    TCanvas *c3 = new TCanvas("c3","<E_{T}>",600,400);
    c3->SetTopMargin(0.02);
    c3->SetRightMargin(0.02);
    c3->SetBorderSize(0);
    c3->SetFillColor(0);
    c3->SetFillColor(0);
    c3->SetBorderMode(0);
    c3->SetFrameFillColor(0);
    c3->SetFrameBorderMode(0);
    //for(int i=1;i<=18;i++){
      
    //}
    prof->Draw();
    prof->GetYaxis()->SetTitle("<E_{T}>");
    prof->GetXaxis()->SetTitle("centrality bin");
    TString outfilename1 = outfilename+"Et.png";
    c3->SaveAs(outfilename1.Data());

    TCanvas *c2 = new TCanvas("c2","<Num>",600,400);
    c2->SetTopMargin(0.02);
    c2->SetRightMargin(0.02);
    c2->SetBorderSize(0);
    c2->SetFillColor(0);
    c2->SetFillColor(0);
    c2->SetBorderMode(0);
    c2->SetFrameFillColor(0);
    c2->SetFrameBorderMode(0);
    TH1D *profNum = histoNum->ProfileY();
    histoNum->Draw("colz");
    //profNum->Draw("same");

    TCanvas *c4 = new TCanvas("c4","<Num>",600,400);
    c4->SetTopMargin(0.02);
    c4->SetRightMargin(0.02);
    c4->SetBorderSize(0);
    c4->SetFillColor(0);
    c4->SetFillColor(0);
    c4->SetBorderMode(0);
    c4->SetFrameFillColor(0);
    c4->SetFrameBorderMode(0);
    profNum->Draw("same");
    profNum->GetYaxis()->SetTitle("<N_{neutrons}>");
    profNum->GetXaxis()->SetTitle("centrality bin");
    TString outfilename2 = outfilename+"Num.png";
    c4->SaveAs(outfilename2.Data());

    TFile *calocorrfile = TFile::Open(calocorrfilename, "READ");
    TString recoEffName = "ReCorrections";
    recoEffName += det;

    AliAnalysisEtRecEffCorrection *recoEff = (AliAnalysisEtRecEffCorrection *) calocorrfile->Get(recoEffName.Data());

    cout<<"I am here"<<endl;
    ofstream myfile;
    myfile.open (textfilename.Data());
    for(int i=0;i<20;i++){
      Float_t et = prof->GetBinContent(i+1);
      Float_t num = profNum->GetBinContent(i+1);
      Float_t eff = recoEff->ReconstructionEfficiency(et,i);
      float neutroncorr = 0;
      if(eff>0) neutroncorr = et*num/eff;
      float error = 0;
      cout<<"et*num/eff = "<<et<<"*"<<num<<"/"<<eff<<" "<< neutroncorr<<endl;
      myfile<<neutroncorr<<" "<<error<<endl;
    }
    myfile.close();
//     return;
//     TCanvas *c5 = new TCanvas("c5","<Num>",600,400);
//     c5->SetTopMargin(0.02);
//     c5->SetRightMargin(0.02);
//     c5->SetBorderSize(0);
//     c5->SetFillColor(0);
//     c5->SetFillColor(0);
//     c5->SetBorderMode(0);
//     c5->SetFrameFillColor(0);
//     c5->SetFrameBorderMode(0);


    TCanvas *c6 = new TCanvas("c6","<Num>",600,400);
    c6->SetTopMargin(0.02);
    c6->SetRightMargin(0.02);
    c6->SetBorderSize(0);
    c6->SetFillColor(0);
    c6->SetFillColor(0);
    c6->SetBorderMode(0);
    c6->SetFrameFillColor(0);
    c6->SetFrameBorderMode(0);
    c6->SetLogz();
    TH2F *histoNumAlt = flip(histoNum,"histoNumAlt");
    TH1D *profNumAlt = histoNum->ProfileY();
    histoNumAlt->Draw("colz");
    profNum->Draw("same");

}

TH1* bayneseffdiv(TH1* numerator, TH1* denominator,Char_t* name) 
{
    if(!numerator){
      cerr<<"Error:  numerator does not exist!"<<endl;
      return NULL;
    }
    if(!denominator){
      cerr<<"Error:  denominator does not exist!"<<endl;
      return NULL;
    }
    TH1* result = (TH1*)numerator->Clone(name);
    Int_t nbins = numerator->GetNbinsX();
    for (Int_t ibin=0; ibin<= nbins+1; ++ibin) {
      Double_t numeratorVal = numerator->GetBinContent(ibin);
      Double_t denominatorVal = denominator->GetBinContent(ibin);
      // Check if the errors are right or the thing is scaled
      Double_t numeratorValErr = numerator->GetBinError(ibin);
      if (!(numeratorValErr==0. || numeratorVal ==0.) ) {
	Double_t rescale = numeratorValErr*numeratorValErr/numeratorVal;
	numeratorVal /= rescale;
      }
      Double_t denominatorValErr = denominator->GetBinError(ibin);
      if (!(denominatorValErr==0. || denominatorVal==0. )) {
	Double_t rescale = denominatorValErr*denominatorValErr/denominatorVal;
	denominatorVal /= rescale;
      }
      Double_t quotient = 0.;
      if (denominatorVal!=0.) {
	quotient = numeratorVal/denominatorVal;
      }
      Double_t quotientErr=0;
      quotientErr = TMath::Sqrt(
				(numeratorVal+1.0)/(denominatorVal+2.0)*
				((numeratorVal+2.0)/(denominatorVal+3.0)-(numeratorVal+1.0)/(denominatorVal+2.0)));
      result->SetBinContent(ibin,quotient);
      result->SetBinError(ibin,quotientErr);
      //cout<<"Setting bin "<<ibin<<" to "<<quotient<<" "<<numeratorVal<<"/"<<denominatorVal<<endl;
    }
    return result;
}


TH2* bayneseffdiv2D(TH2* numerator, TH2* denominator,Char_t* name) 
{
  if(!numerator){
    cerr<<"Error:  numerator does not exist!"<<endl;
    return NULL;
  }
  if(!denominator){
    cerr<<"Error:  denominator does not exist!"<<endl;
    return NULL;
  }
  TH2* result = (TH2*)numerator->Clone(name);
  Int_t nbinsX = numerator->GetNbinsX();
  Int_t nbinsY = numerator->GetNbinsY();
  for (Int_t ibin=0; ibin<= nbinsX+1; ++ibin) {
    for (Int_t jbin=0; jbin<= nbinsY+1; ++jbin) {
      Double_t numeratorVal = numerator->GetBinContent(ibin,jbin);
      Double_t denominatorVal = denominator->GetBinContent(ibin,jbin);
      // Check if the errors are right or the thing is scaled
      Double_t numeratorValErr = numerator->GetBinError(ibin,jbin);
      if (!(numeratorValErr==0. || numeratorVal ==0.) ) {
	Double_t rescale = numeratorValErr*numeratorValErr/numeratorVal;
	numeratorVal /= rescale;
      }
      Double_t denominatorValErr = denominator->GetBinError(ibin,jbin);
      if (!(denominatorValErr==0. || denominatorVal==0. )) {
	Double_t rescale = denominatorValErr*denominatorValErr/denominatorVal;
	denominatorVal /= rescale;
      }
      Double_t quotient = 0.;
      if (denominatorVal!=0.) {
	quotient = numeratorVal/denominatorVal;
      }
      Double_t quotientErr=0;
      quotientErr = TMath::Sqrt(
				(numeratorVal+1.0)/(denominatorVal+2.0)*
				((numeratorVal+2.0)/(denominatorVal+3.0)-(numeratorVal+1.0)/(denominatorVal+2.0)));
      result->SetBinContent(ibin,jbin,quotient);
      result->SetBinError(ibin,jbin,quotientErr);
      //cout<<"Setting bin "<<ibin<<" to "<<quotient<<" "<<numeratorVal<<"/"<<denominatorVal<<endl;
    }
  }
  return result;
}
 PlotNeutronDeposits.C:1
 PlotNeutronDeposits.C:2
 PlotNeutronDeposits.C:3
 PlotNeutronDeposits.C:4
 PlotNeutronDeposits.C:5
 PlotNeutronDeposits.C:6
 PlotNeutronDeposits.C:7
 PlotNeutronDeposits.C:8
 PlotNeutronDeposits.C:9
 PlotNeutronDeposits.C:10
 PlotNeutronDeposits.C:11
 PlotNeutronDeposits.C:12
 PlotNeutronDeposits.C:13
 PlotNeutronDeposits.C:14
 PlotNeutronDeposits.C:15
 PlotNeutronDeposits.C:16
 PlotNeutronDeposits.C:17
 PlotNeutronDeposits.C:18
 PlotNeutronDeposits.C:19
 PlotNeutronDeposits.C:20
 PlotNeutronDeposits.C:21
 PlotNeutronDeposits.C:22
 PlotNeutronDeposits.C:23
 PlotNeutronDeposits.C:24
 PlotNeutronDeposits.C:25
 PlotNeutronDeposits.C:26
 PlotNeutronDeposits.C:27
 PlotNeutronDeposits.C:28
 PlotNeutronDeposits.C:29
 PlotNeutronDeposits.C:30
 PlotNeutronDeposits.C:31
 PlotNeutronDeposits.C:32
 PlotNeutronDeposits.C:33
 PlotNeutronDeposits.C:34
 PlotNeutronDeposits.C:35
 PlotNeutronDeposits.C:36
 PlotNeutronDeposits.C:37
 PlotNeutronDeposits.C:38
 PlotNeutronDeposits.C:39
 PlotNeutronDeposits.C:40
 PlotNeutronDeposits.C:41
 PlotNeutronDeposits.C:42
 PlotNeutronDeposits.C:43
 PlotNeutronDeposits.C:44
 PlotNeutronDeposits.C:45
 PlotNeutronDeposits.C:46
 PlotNeutronDeposits.C:47
 PlotNeutronDeposits.C:48
 PlotNeutronDeposits.C:49
 PlotNeutronDeposits.C:50
 PlotNeutronDeposits.C:51
 PlotNeutronDeposits.C:52
 PlotNeutronDeposits.C:53
 PlotNeutronDeposits.C:54
 PlotNeutronDeposits.C:55
 PlotNeutronDeposits.C:56
 PlotNeutronDeposits.C:57
 PlotNeutronDeposits.C:58
 PlotNeutronDeposits.C:59
 PlotNeutronDeposits.C:60
 PlotNeutronDeposits.C:61
 PlotNeutronDeposits.C:62
 PlotNeutronDeposits.C:63
 PlotNeutronDeposits.C:64
 PlotNeutronDeposits.C:65
 PlotNeutronDeposits.C:66
 PlotNeutronDeposits.C:67
 PlotNeutronDeposits.C:68
 PlotNeutronDeposits.C:69
 PlotNeutronDeposits.C:70
 PlotNeutronDeposits.C:71
 PlotNeutronDeposits.C:72
 PlotNeutronDeposits.C:73
 PlotNeutronDeposits.C:74
 PlotNeutronDeposits.C:75
 PlotNeutronDeposits.C:76
 PlotNeutronDeposits.C:77
 PlotNeutronDeposits.C:78
 PlotNeutronDeposits.C:79
 PlotNeutronDeposits.C:80
 PlotNeutronDeposits.C:81
 PlotNeutronDeposits.C:82
 PlotNeutronDeposits.C:83
 PlotNeutronDeposits.C:84
 PlotNeutronDeposits.C:85
 PlotNeutronDeposits.C:86
 PlotNeutronDeposits.C:87
 PlotNeutronDeposits.C:88
 PlotNeutronDeposits.C:89
 PlotNeutronDeposits.C:90
 PlotNeutronDeposits.C:91
 PlotNeutronDeposits.C:92
 PlotNeutronDeposits.C:93
 PlotNeutronDeposits.C:94
 PlotNeutronDeposits.C:95
 PlotNeutronDeposits.C:96
 PlotNeutronDeposits.C:97
 PlotNeutronDeposits.C:98
 PlotNeutronDeposits.C:99
 PlotNeutronDeposits.C:100
 PlotNeutronDeposits.C:101
 PlotNeutronDeposits.C:102
 PlotNeutronDeposits.C:103
 PlotNeutronDeposits.C:104
 PlotNeutronDeposits.C:105
 PlotNeutronDeposits.C:106
 PlotNeutronDeposits.C:107
 PlotNeutronDeposits.C:108
 PlotNeutronDeposits.C:109
 PlotNeutronDeposits.C:110
 PlotNeutronDeposits.C:111
 PlotNeutronDeposits.C:112
 PlotNeutronDeposits.C:113
 PlotNeutronDeposits.C:114
 PlotNeutronDeposits.C:115
 PlotNeutronDeposits.C:116
 PlotNeutronDeposits.C:117
 PlotNeutronDeposits.C:118
 PlotNeutronDeposits.C:119
 PlotNeutronDeposits.C:120
 PlotNeutronDeposits.C:121
 PlotNeutronDeposits.C:122
 PlotNeutronDeposits.C:123
 PlotNeutronDeposits.C:124
 PlotNeutronDeposits.C:125
 PlotNeutronDeposits.C:126
 PlotNeutronDeposits.C:127
 PlotNeutronDeposits.C:128
 PlotNeutronDeposits.C:129
 PlotNeutronDeposits.C:130
 PlotNeutronDeposits.C:131
 PlotNeutronDeposits.C:132
 PlotNeutronDeposits.C:133
 PlotNeutronDeposits.C:134
 PlotNeutronDeposits.C:135
 PlotNeutronDeposits.C:136
 PlotNeutronDeposits.C:137
 PlotNeutronDeposits.C:138
 PlotNeutronDeposits.C:139
 PlotNeutronDeposits.C:140
 PlotNeutronDeposits.C:141
 PlotNeutronDeposits.C:142
 PlotNeutronDeposits.C:143
 PlotNeutronDeposits.C:144
 PlotNeutronDeposits.C:145
 PlotNeutronDeposits.C:146
 PlotNeutronDeposits.C:147
 PlotNeutronDeposits.C:148
 PlotNeutronDeposits.C:149
 PlotNeutronDeposits.C:150
 PlotNeutronDeposits.C:151
 PlotNeutronDeposits.C:152
 PlotNeutronDeposits.C:153
 PlotNeutronDeposits.C:154
 PlotNeutronDeposits.C:155
 PlotNeutronDeposits.C:156
 PlotNeutronDeposits.C:157
 PlotNeutronDeposits.C:158
 PlotNeutronDeposits.C:159
 PlotNeutronDeposits.C:160
 PlotNeutronDeposits.C:161
 PlotNeutronDeposits.C:162
 PlotNeutronDeposits.C:163
 PlotNeutronDeposits.C:164
 PlotNeutronDeposits.C:165
 PlotNeutronDeposits.C:166
 PlotNeutronDeposits.C:167
 PlotNeutronDeposits.C:168
 PlotNeutronDeposits.C:169
 PlotNeutronDeposits.C:170
 PlotNeutronDeposits.C:171
 PlotNeutronDeposits.C:172
 PlotNeutronDeposits.C:173
 PlotNeutronDeposits.C:174
 PlotNeutronDeposits.C:175
 PlotNeutronDeposits.C:176
 PlotNeutronDeposits.C:177
 PlotNeutronDeposits.C:178
 PlotNeutronDeposits.C:179
 PlotNeutronDeposits.C:180
 PlotNeutronDeposits.C:181
 PlotNeutronDeposits.C:182
 PlotNeutronDeposits.C:183
 PlotNeutronDeposits.C:184
 PlotNeutronDeposits.C:185
 PlotNeutronDeposits.C:186
 PlotNeutronDeposits.C:187
 PlotNeutronDeposits.C:188
 PlotNeutronDeposits.C:189
 PlotNeutronDeposits.C:190
 PlotNeutronDeposits.C:191
 PlotNeutronDeposits.C:192
 PlotNeutronDeposits.C:193
 PlotNeutronDeposits.C:194
 PlotNeutronDeposits.C:195
 PlotNeutronDeposits.C:196
 PlotNeutronDeposits.C:197
 PlotNeutronDeposits.C:198
 PlotNeutronDeposits.C:199
 PlotNeutronDeposits.C:200
 PlotNeutronDeposits.C:201
 PlotNeutronDeposits.C:202
 PlotNeutronDeposits.C:203
 PlotNeutronDeposits.C:204
 PlotNeutronDeposits.C:205
 PlotNeutronDeposits.C:206
 PlotNeutronDeposits.C:207
 PlotNeutronDeposits.C:208
 PlotNeutronDeposits.C:209
 PlotNeutronDeposits.C:210
 PlotNeutronDeposits.C:211
 PlotNeutronDeposits.C:212
 PlotNeutronDeposits.C:213
 PlotNeutronDeposits.C:214
 PlotNeutronDeposits.C:215
 PlotNeutronDeposits.C:216
 PlotNeutronDeposits.C:217
 PlotNeutronDeposits.C:218
 PlotNeutronDeposits.C:219
 PlotNeutronDeposits.C:220
 PlotNeutronDeposits.C:221
 PlotNeutronDeposits.C:222
 PlotNeutronDeposits.C:223
 PlotNeutronDeposits.C:224
 PlotNeutronDeposits.C:225
 PlotNeutronDeposits.C:226
 PlotNeutronDeposits.C:227
 PlotNeutronDeposits.C:228
 PlotNeutronDeposits.C:229
 PlotNeutronDeposits.C:230
 PlotNeutronDeposits.C:231
 PlotNeutronDeposits.C:232
 PlotNeutronDeposits.C:233
 PlotNeutronDeposits.C:234
 PlotNeutronDeposits.C:235
 PlotNeutronDeposits.C:236
 PlotNeutronDeposits.C:237
 PlotNeutronDeposits.C:238
 PlotNeutronDeposits.C:239
 PlotNeutronDeposits.C:240
 PlotNeutronDeposits.C:241
 PlotNeutronDeposits.C:242
 PlotNeutronDeposits.C:243
 PlotNeutronDeposits.C:244
 PlotNeutronDeposits.C:245
 PlotNeutronDeposits.C:246
 PlotNeutronDeposits.C:247
 PlotNeutronDeposits.C:248
 PlotNeutronDeposits.C:249
 PlotNeutronDeposits.C:250
 PlotNeutronDeposits.C:251
 PlotNeutronDeposits.C:252
 PlotNeutronDeposits.C:253
 PlotNeutronDeposits.C:254
 PlotNeutronDeposits.C:255