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

//+++++++++++++++++++++GLOBAL VARIABLES+++++++++++++++++++++//
const Int_t nCentralityBins = 20;

Double_t gNParticipants[nCentralityBins] = {382.646,329.213,280.911,238.617,201.81,169.339,141.067,116.208,94.2515,75.4558,59.4054,45.7565,34.4839,25.3127,18.0293,12.6535,8.84139,6.16348,4.37454,3.06182};
Double_t gNParticipantsError[nCentralityBins] = {16.9428,18.0505,17.0971,16.2076,15.5418,14.9458,14.3174,13.9067,13.2661,12.6134,11.8133,11.0495,10.0939,8.99737,7.7884,6.48725,5.21602,3.91988,2.78741,1.75066};
//Double_t gNParticipants[nCentralityBins] = {356.132,260.175,185.76,128.428,84.5666,52.3432,29.7072,15.2207,7.47192,3.71973};//10 bins
//Double_t gNParticipantsError[nCentralityBins] = {31.8228,26.9093,22.3767,18.8802,15.9735,13.3103,10.5806,7.62745,4.78538,2.41942};//10 bins

//================================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 drawNpartDependence(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,
						    gNParticipants,
						    gNuDynALICEData,
						    gNParticipantsError,
						    gNuDynALICEDataError);
  grALICEDataNudyn->SetMarkerStyle(20);
  grALICEDataNudyn->SetMarkerColor(2);

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

  TGraphErrors *grALICEDataNetChargeRms = new TGraphErrors(nCentralityBins,
							   gNParticipants,
							   gNetChargeRmsALICEData,
							   gNParticipantsError,
							   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",
			   ";N_{part.};",
			   100,0,400,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(40., 0.0043, 20, 1.6, 2);
  latex->DrawLatex(50.,0.0033,"PbPb @ #sqrt{s_{NN}} = 2.76 TeV");

  c1->SaveAs("NparticipantsDependenceNuDyn.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(40., 8.3, 20, 1.6, 2);
  latex->DrawLatex(50.,8.1,"PbPb @ #sqrt{s_{NN}} = 2.76 TeV");

  c2->SaveAs("NparticipantsDependenceNetCharge.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(40., 38., 20, 1.6, 2);
  latex->DrawLatex(50.,37.,"PbPb @ #sqrt{s_{NN}} = 2.76 TeV");

  c3->SaveAs("NparticipantsDependenceNetChargeRms.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];
  }

  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]);
  }

}


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