]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG0/dNdEta/systematicsAnalysis.C
adding macro that applies the corrections and visualizes the result
[u/mrichter/AliRoot.git] / PWG0 / dNdEta / systematicsAnalysis.C
CommitLineData
b541c64c 1changeProductionCrossSections() {
2 //
3 // calculates dN/dEta from the standard correction and from
4 // corrections that has been evaluated with different relative cross
5 // sections (of single diff, double diff and non diff). The ratios
6 // (standard to changed x-section) of the different dN/deta
7 // distributions are saved to a file.
8 //
9
10 gSystem->Load("libPWG0base");
11
12 // folder names in systematics root file
13 const Char_t* folderNames[] = {"triggerBiasDD","triggerBiasSD","triggerBiasND","vertexRecoDD","vertexRecoSD","vertexRecoND"};
14
15 const Char_t* changes[] = {"pythia","ddmore","ddless","sdmore","sdless", "dmore", "dless"};
16
17 Float_t scalesDD[] = {1.0, 1.5, 0.5, 1.0, 1.0, 1.5, 0.5};
18 Float_t scalesSD[] = {1.0, 1.0, 1.0, 1.5, 0.5, 1.5, 0.5};
19
20 // cross section from Pythia
21 //Float_t sigmaND = 55.2;
22 //Float_t sigmaDD = 9.78;
23 //Float_t sigmaSD = 14.30;
24
25 // getting data
26 TFile* finCorr = TFile::Open("analysis_esd.root");
27 dNdEtaAnalysis* analysis = new dNdEtaAnalysis("dndeta", "dndeta");
28 analysis->LoadHistograms();
29
30 // getting corrections
31 AlidNdEtaCorrection* correctionStandard = new AlidNdEtaCorrection("dndeta_correction","dndeta_correction");
32
33 TFile* finCorr = TFile::Open("correction_map.root");
34 correctionStandard->LoadHistograms();
35
36 // getting corrections for pure SD, DD and ND
37 TFile* finSyst = TFile::Open("systematics.root");
38 AlidNdEtaCorrection* correctionsSyst[7];
39 for (Int_t i=0; i<6; i++) {
40 correctionsSyst[i] = new AlidNdEtaCorrection(folderNames[i],folderNames[i]);
41 correctionsSyst[i]->LoadHistograms();
42 }
43
44 TH1F* hRatios[21];
45 for (Int_t j=0; j<3; j++) { // j = 0 (change vtx), j = 1 (change trg), j = 2 (change both)
46
47 for (Int_t i=0; i<7; i++) { // changes in cross section
48
49 // temporary correction with changed cross sections
50 AlidNdEtaCorrection* correctionTmp = (AlidNdEtaCorrection*)correctionStandard->Clone();;
51
52 correctionTmp->Reset();
53
54 if (j==0 || j==2) {
55 //correctionTmp->GetVertexRecoCorrection()->Reset();
56 //correctionTmp->GetVertexRecoCorrection()->Add(correctionsSyst[3]->GetVertexRecoCorrection(),scalesDD[i]);
57 //correctionTmp->GetVertexRecoCorrection()->Add(correctionsSyst[4]->GetVertexRecoCorrection(),scalesSD[i]);
58 //correctionTmp->GetVertexRecoCorrection()->Add(correctionsSyst[5]->GetVertexRecoCorrection(),1);
59
60 correctionTmp->Add(correctionsSyst[3], scalesDD[i]);
61 correctionTmp->Add(correctionsSyst[4], scalesSD[i]);
62 correctionTmp->Add(correctionsSyst[5], 1);
63 }
64 if (j==1 || j==2) {
65 //correctionTmp->GetTriggerBiasCorrectionINEL()->Reset();
66 //correctionTmp->GetTriggerBiasCorrectionINEL()->Add(correctionsSyst[0]->GetTriggerBiasCorrectionINEL(),scalesDD[i]);
67 //correctionTmp->GetTriggerBiasCorrectionINEL()->Add(correctionsSyst[1]->GetTriggerBiasCorrectionINEL(),scalesSD[i]);
68 //correctionTmp->GetTriggerBiasCorrectionINEL()->Add(correctionsSyst[2]->GetTriggerBiasCorrectionINEL(),1);
69
70 correctionTmp->Add(correctionsSyst[0], scalesDD[i]);
71 correctionTmp->Add(correctionsSyst[1], scalesSD[i]);
72 correctionTmp->Add(correctionsSyst[2], 1);
73 }
74 correctionTmp->Finish();
75
76 dNdEtaAnalysis* analysisTmp = (dNdEtaAnalysis*)analysis->Clone();
77 analysisTmp->Finish(correctionTmp, 0.3, AlidNdEtaCorrection::kINEL);
78
79 Int_t counter = i + j*7;
80
81 hRatios[counter] = (TH1F*)analysisTmp->GetdNdEtaHistogram(2)->Clone();
82
83 TString name("ratio");
84 if (j==0) name.Append("_vetexReco_");
85 if (j==1) name.Append("_triggerBias_");
86 if (j==2) name.Append("_vertexReco_triggerBias_");
87 name.Append(changes[i]);
88 hRatios[counter]->SetName(name.Data());
89 name.Append(Form(" (DD #times %0.1f, SD #times %0.1f)",scalesDD[i],scalesSD[i]));
90 hRatios[counter]->SetTitle(name.Data());
91 hRatios[counter]->SetYTitle("ratio (Pythia x-sections)/(changed x-sections)");
92
93 delete analysisTmp;
94 delete correctionTmp;
95 }
96 }
97
98 for (Int_t i=1; i<21; i++)
99 hRatios[i]->Divide(hRatios[0],hRatios[i],1,1);
100 hRatios[0]->Divide(hRatios[0],hRatios[0],1,1);
101
102 TFile* fout = new TFile("systematics_xsections.root","RECREATE");
103
104 for (Int_t i=0; i<21; i++)
105 hRatios[i]->Write();
106
107 fout->Write();
108 fout->Close();
109}
110
111changeParticleComposition() {
112 //
113 // calculates dN/dEta from the standard correction and from
114 // corrections that has been evaluated with different relative
115 // abundancies of kaons and protons and save the ratios in a file
116
117 gSystem->Load("libPWG0base");
118
119 const Char_t* folderNames[] = {"correction_0","correction_1","correction_2","correction_3"};
120 Float_t scalesPi[] = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
121 Float_t scalesK[] = {0.5, 1.5, 1.0, 1.0, 0.5, 1.5};
122 Float_t scalesP[] = {1.0, 1.0, 0.5, 1.5, 0.5, 1.5};
123
124 // getting data
125 TFile* finCorr = TFile::Open("analysis_esd.root");
126 dNdEtaAnalysis* analysis = new dNdEtaAnalysis("dndeta", "dndeta");
127 analysis->LoadHistograms();
128
129 // getting corrections for pi, K, p and other particles
130 TFile* finSyst = TFile::Open("systematics.root");
131 AlidNdEtaCorrection* correctionsSyst[4];
132 for (Int_t i=0; i<4; i++) {
133 correctionsSyst[i] = new AlidNdEtaCorrection(folderNames[i],folderNames[i]);
134 correctionsSyst[i]->LoadHistograms();
135 }
136 AlidNdEtaCorrection* correctionAll = (AlidNdEtaCorrection*) correctionsSyst[0]->Clone();
137 correctionAll->Reset();
138 correctionAll->Add(correctionsSyst[0]);
139 correctionAll->Add(correctionsSyst[1]);
140 correctionAll->Add(correctionsSyst[2]);
141 correctionAll->Add(correctionsSyst[3]);
142 correctionAll->Finish();
143 analysis->Finish(correctionAll, 0.3, AlidNdEtaCorrection::kINEL);
144
145 TH1F* hRatios[6];
146 for (Int_t i=0; i<6; i++) {
147 // temporary correction with changed particle composistion
148 AlidNdEtaCorrection* correctionTmp = (AlidNdEtaCorrection*)correctionAll->Clone();
149
150 correctionTmp->Reset();
151
152 correctionTmp->Add(correctionsSyst[0],scalesPi[i]);
153 correctionTmp->Add(correctionsSyst[1],scalesK[i]);
154 correctionTmp->Add(correctionsSyst[2],scalesP[i]);
155 correctionTmp->Add(correctionsSyst[3],1);
156
157 correctionTmp->Finish();
158
159 dNdEtaAnalysis* analysisTmp = (dNdEtaAnalysis*)analysis->Clone();
160 analysisTmp->Finish(correctionTmp, 0.3, AlidNdEtaCorrection::kINEL);
161
162 hRatios[i] = (TH1F*)analysisTmp->GetdNdEtaHistogram(2)->Clone();
163 hRatios[i]->Divide((TH1F*)analysis->GetdNdEtaHistogram(2)->Clone(),hRatios[i],1,1,"B");
164
165 TString name(Form("ratio_%d",i));
166 hRatios[i]->SetName(name.Data());
167 name = TString(Form("#pi #times %0.1f, K #times %0.1f, p #times %0.1f",scalesPi[i],scalesK[i],scalesP[i]));
168 hRatios[i]->SetTitle(name.Data());
169 hRatios[i]->SetYTitle("ratio (standard/changed compositions)");
170 }
171
172 TFile* fout = new TFile("systematics_composition.root","RECREATE");
173
174 for (Int_t i=0; i<6; i++)
175 hRatios[i]->Write();
176
177 fout->Write();
178 fout->Close();
179
180
181}