ROOT logo
//=======================================================================//
//Macro to draw the main results of the charge fluctuation analysis:
//=======================================================================//

//+++++++++++++++++++++GLOBAL VARIABLES+++++++++++++++++++++//
const Int_t nCentralityBins = 20;
//Double_t gCentralityPercentile[nCentralityBins] = {2.5,7.5,12.5,17.5,22.5,27.5,32.5,37.5,42.5,47.5,52.5,57.5,62.5,67.5,72.5,77.5,82.5,87.5,92.5,97.5};
//Double_t gCentralityPercentileError[nCentralityBins] = {0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5};
Double_t gCentralityPercentile[nCentralityBins] = {5.,15.,25.,35.,45.,55.,65.,75.,85.,95.};
Double_t gCentralityPercentileError[nCentralityBins] = {0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5};

//================================ALICE================================//
Double_t gNuDynALICEData[nCentralityBins] = {10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.};
Double_t gNuDynALICEDataError[nCentralityBins] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
Double_t gNetChargeALICEData[nCentralityBins] = {10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.};
Double_t gNetChargeALICEDataError[nCentralityBins] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
Double_t gNetChargeRmsALICEData[nCentralityBins] = {10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.,10.};
Double_t gNetChargeRmsALICEDataError[nCentralityBins] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
//================================ALICE================================//
//+++++++++++++++++++++END OF VARIABLES+++++++++++++++++++++//

//_____________________________________________________//
void drawCentralityDependence(const char*resultPath = "../LHC10h/Pass1_4Plus/20CentralityBins/") {
  //Draws the nu_dyn vs centrality percentile
  SetDataPoints(resultPath);
  //================================================//
  //ALICE PbPb @ 2.76 TeV
  TGraphErrors *grALICEDataNudyn = new TGraphErrors(nCentralityBins,
						    gCentralityPercentile,
						    gNuDynALICEData,
						    gCentralityPercentileError,
						    gNuDynALICEDataError);
  grALICEDataNudyn->SetMarkerStyle(20);
  grALICEDataNudyn->SetMarkerColor(2);

  TGraphErrors *grALICEDataNetCharge = new TGraphErrors(nCentralityBins,
							gCentralityPercentile,
							gNetChargeALICEData,
							gCentralityPercentileError,
							gNetChargeALICEDataError);
  grALICEDataNetCharge->SetMarkerStyle(20);
  grALICEDataNetCharge->SetMarkerColor(2);

  TGraphErrors *grALICEDataNetChargeRms = new TGraphErrors(nCentralityBins,
							   gCentralityPercentile,
							   gNetChargeRmsALICEData,
							   gCentralityPercentileError,
							   gNetChargeRmsALICEDataError);
  grALICEDataNetChargeRms->SetMarkerStyle(20);
  grALICEDataNetChargeRms->SetMarkerColor(2);
  
  //_____________________________________________________//
  //Draw the results
  //_____________________________________________________//
  TLatex *latex = new TLatex();
  latex->SetTextSize(0.035);

  //====================================//
  //Results vs centrality
  TH2F *gEmpty1 = new TH2F("gEmpty1",
			   ";Centrality percentile;",
			   nCentralityBins,0,100,10000,-0.1,50.);
  gEmpty1->SetStats(kFALSE);
  gEmpty1->GetYaxis()->SetTitleOffset(1.5);
  gEmpty1->GetXaxis()->SetTitleOffset(1.5);
  gEmpty1->GetYaxis()->SetNdivisions(10);
  gEmpty1->GetXaxis()->SetNdivisions(10);

  TF1 *f1 = new TF1("f1","0",0,1000);
  f1->SetLineColor(1); f1->SetLineStyle(3); f1->SetLineWidth(2);

  //============================================================//
  //nu_{dyn.}
  TCanvas *c1 = new TCanvas("c1","Centrality dependence: nu_dyn",
			    0,0,500,500);
  c1->SetFillColor(10); c1->SetHighLightColor(10);
  c1->SetLeftMargin(0.15); c1->SetBottomMargin(0.15);
  c1->SetGridx(); c1->SetGridy();
  gEmpty1->GetYaxis()->SetRangeUser(-0.08,0.01);
  gEmpty1->GetYaxis()->SetTitle("#nu_{dyn.}");
  gEmpty1->DrawCopy();
  f1->Draw("same");
  grALICEDataNudyn->Draw("P");

  DrawMarker(47., 0.0043, 20, 1.6, 2);
  latex->DrawLatex(52.,0.0035,"PbPb @ #sqrt{s_{NN}} = 2.76 TeV");

  c1->SaveAs("centralityPercentileDependenceNuDyn.png");

  //============================================================//
  //net charge
  TCanvas *c2 = new TCanvas("c2","Centrality dependence: net charge",
			    100,100,500,500);
  c2->SetFillColor(10); c2->SetHighLightColor(10);
  c2->SetLeftMargin(0.15); c2->SetBottomMargin(0.15);
  c2->SetGridx(); c2->SetGridy();
  gEmpty1->GetYaxis()->SetRangeUser(0.0,10.0);
  gEmpty1->GetYaxis()->SetTitle("#LT #Delta Q = N_{+} - N_{-}#GT");
  gEmpty1->DrawCopy();
  grALICEDataNetCharge->Draw("P");

  DrawMarker(47., 8.3, 20, 1.6, 2);
  latex->DrawLatex(52.,8.1,"PbPb @ #sqrt{s_{NN}} = 2.76 TeV");

  c2->SaveAs("centralityPercentileDependenceNetCharge.png");

  //============================================================//
  //rms net charge
  TCanvas *c3 = new TCanvas("c3","Centrality dependence: net charge rms",
			    200,200,500,500);
  c3->SetFillColor(10); c3->SetHighLightColor(10);
  c3->SetLeftMargin(0.15); c3->SetBottomMargin(0.15);
  c3->SetGridx(); c3->SetGridy();
  gEmpty1->GetYaxis()->SetRangeUser(0.0,40.0);
  gEmpty1->GetYaxis()->SetTitle("#sigma_{#Delta Q}");
  gEmpty1->DrawCopy();
  grALICEDataNetChargeRms->Draw("P");

  DrawMarker(47., 38.3, 20, 1.6, 2);
  latex->DrawLatex(52.,38.1,"PbPb @ #sqrt{s_{NN}} = 2.76 TeV");

  c3->SaveAs("centralityPercentileDependenceNetChargeRms.png");
}

//_______________________________________________________________//
void SetDataPoints(const char* resultPath) {
  //Calculate the mean and the statistical error of the data points
  const Int_t nRuns = 7;
  Double_t nuDyn[nRuns][nCentralityBins];
  Double_t gNetCharge[nRuns][nCentralityBins];
  Double_t gNetChargeRms[nRuns][nCentralityBins];
  Double_t nuDyn[nRuns][nCentralityBins];
  Int_t nEvents[nRuns][nCentralityBins];
  Int_t nRunNumbers[nRuns] = {137161,137431,137549,
			      137595,137638,137639,137693};
  Int_t gCentrality;
  Double_t netChargeValues[nCentralityBins] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,
					   0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
  Double_t netChargeValuesError[nCentralityBins] = {0.,0.,0.,0.,0.,0.,0.,0.,
						    0.,0.,0.,0.,0.,0.,0.,0.,
						    0.,0.,0.,0.};
  Double_t netChargeRmsValues[nCentralityBins] = {0.,0.,0.,0.,0.,0.,0.,
						  0.,0.,0.,0.,0.,0.,0.,
						  0.,0.,0.,0.,0.,0.};
  Double_t netChargeRmsValuesError[nCentralityBins] = {0.,0.,0.,0.,0.,0.,0.,0.,
						       0.,0.,0.,0.,0.,0.,0.,0.,
						    0.,0.,0.,0.};
  Double_t nuDynValues[nCentralityBins] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,
					   0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
  Double_t nuDynValuesError[nCentralityBins] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,
						0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};
  Double_t nEventsValues[nCentralityBins] = {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,
					     0.,0.,0.,0.,0.,0.,0.,0.,0.,0.};

  TString inputFileName;
  for(Int_t iRun = 0; iRun < nRuns; iRun++) {
    ifstream inputAscii;
    Printf("Adding run %d",nRunNumbers[iRun]);
    inputFileName = resultPath;
    inputFileName += "/output."; inputFileName += nRunNumbers[iRun];
    inputFileName += ".txt";

    //Printf("Filename: %s",inputFileName.Data());
    inputAscii.open(inputFileName.Data());
    for(Int_t iCentrality = 0; iCentrality < nCentralityBins; iCentrality++) {
      inputAscii>>gCentrality>>nuDyn[iRun][iCentrality]>>gNetCharge[iRun][iCentrality]>>gNetChargeRms[iRun][iCentrality]>>nEvents[iRun][iCentrality];
      //cout<<nuDyn[iRun][iCentrality]<<" "<<nEvents[iRun][iCentrality]<<endl;
    }
    inputAscii.close();
  }

  Int_t nRunCounter = 0;
  for(Int_t iCentrality = 0; iCentrality < nCentralityBins; iCentrality++) {
    for(Int_t iRun = 0; iRun < nRuns; iRun++) {
      nuDynValues[iCentrality] += nuDyn[iRun][iCentrality]*nEvents[iRun][iCentrality];
      netChargeValues[iCentrality] += gNetCharge[iRun][iCentrality]*nEvents[iRun][iCentrality];
      netChargeRmsValues[iCentrality] += gNetChargeRms[iRun][iCentrality]*nEvents[iRun][iCentrality];
      nEventsValues[iCentrality] += nEvents[iRun][iCentrality];
    }

    if(nEventsValues[iCentrality] != 0) {
      nRunCounter += 1;

      netChargeValues[iCentrality] /= nEventsValues[iCentrality];
      netChargeRmsValues[iCentrality] /= nEventsValues[iCentrality];
      nuDynValues[iCentrality] /= nEventsValues[iCentrality];
    }
    else {
      netChargeValues[iCentrality] = 999.;
      netChargeRmsValues[iCentrality] = 999.;
      nuDynValues[iCentrality] = 999.;
    }

    gNetChargeALICEData[iCentrality] = netChargeValues[iCentrality];
    gNetChargeRmsALICEData[iCentrality] = netChargeRmsValues[iCentrality];
    gNuDynALICEData[iCentrality] = nuDynValues[iCentrality];
  }

  ofstream outputAscii;
  outputAscii.open("output.txt");
  for(Int_t iCentrality = 0; iCentrality < nCentralityBins; iCentrality++) {
    for(Int_t iRun = 0; iRun < nRuns; iRun++) {
      netChargeValuesError[iCentrality] += TMath::Power((netChargeValues[iCentrality]-gNetCharge[iRun][iCentrality]),2);
      netChargeRmsValuesError[iCentrality] += TMath::Power((netChargeRmsValues[iCentrality]-gNetChargeRms[iRun][iCentrality]),2);
      nuDynValuesError[iCentrality] += TMath::Power((nuDynValues[iCentrality]-nuDyn[iRun][iCentrality]),2);
    }
    gNetChargeALICEDataError[iCentrality] = TMath::Sqrt(netChargeValuesError[iCentrality]/(nRunCounter*(nRunCounter-1)));
    gNetChargeRmsALICEDataError[iCentrality] = TMath::Sqrt(netChargeRmsValuesError[iCentrality]/(nRunCounter*(nRunCounter-1)));
    gNuDynALICEDataError[iCentrality] = TMath::Sqrt(nuDynValuesError[iCentrality]/(nRunCounter*(nRunCounter-1)));
    Printf("Centrality: %d - nu_dyn: %lf +- %lf - Net charge: %lf +- %lf - RMS: %lf - %lf",iCentrality+1,
	   gNuDynALICEData[iCentrality],
	   gNuDynALICEDataError[iCentrality],
	   gNetChargeALICEData[iCentrality],
	   gNetChargeALICEDataError[iCentrality],
	   gNetChargeRmsALICEData[iCentrality],
	   gNetChargeRmsALICEDataError[iCentrality]);

    outputAscii<<iCentrality+1<<" "<<gNuDynALICEData[iCentrality]<<" "<<gNuDynALICEDataError[iCentrality]<<" "<<gNetChargeALICEData[iCentrality]<<" "<<gNetChargeALICEDataError[iCentrality]<<" "<<gNetChargeRmsALICEData[iCentrality]<<" "<<gNetChargeRmsALICEDataError[iCentrality]<<endl;
  }
  outputAscii.close();

}


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