Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Proto4ShowerCalibFit.m
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file Proto4ShowerCalibFit.m
1 
2 clear all
3 close all
4 
5 global Ndata;
6 global DataSet;
7 global low_tower_IDs;
8 
9 %%
10 
11 DataFolder = 'E:/tmp/Transfer Buffer/ShowerCalib/';
12 
13 % FileID = {'Rot45','THP','UIUC18','UpTilt5', 'ShowerDepth'};
14 % FileID = {'dst'};
15 % FileID = {'ShowerCalib','ShowerCalib_tilted'};
16 
17 
18 FileID = {'5thPositionScan_dst','6thPositionScan_dst'};
20 
21 energy_scale = 0.55*8/3000;
23 
24 
25 sim_const = 3/100;
26 sim_stat = 12/100;
27 Ndata = 64;
28 InitConst = [ones(1, 64) ];
29 
30 zero_sup = -1000; %zero suppression disabled
31 
32 %%
33 
34 for i = 1:size(FileList,2)
35 
36  FileList{i} = [DataFolder FileList{i} '.lst_EMCalCalib.root.dat'];
37 
38 end
39 
40 %%
41 
43 
44 %% Readin
45 % global DataSet
46 DataSet =struct('FileID',{},'E',{},'DE',{},'data',{}, 'accept',{});
47 
48 N_Runs = 0;
49 % for i = 1:1
50 for i = 1:size(FileList,2)
51  filename = FileList{i};
52  fprintf('processing %s\n', filename);
53 
54  data = textread(filename);
55  % disp(size(data));
56 
57  data(:,1) = ones(size(data(:,1))) * fixed_energy; % force fix beam energy settings.
58 
59  energys = data(:,1);
60  energy = unique(energys);
61  data = data(:,2:(1+Ndata));
62 
64 
65  energy = energy(energy<=8 & energy>2);
66 
67  for j=1:size(energy, 1)
68 
69  N_Runs = N_Runs +1;
70  fprintf('processing %s - %.0f GeV @ %d\n', filename,energy(j), N_Runs );
71 
72  DataSet(N_Runs).FileID = FileID{i};
73  DataSet(N_Runs).E = energy(j);
74  DataSet(N_Runs).DE = sqrt( sim_const.^2 + sim_stat.^2./DataSet(i).E ) ;
75 
76  DataSet(N_Runs).data = data(energys == energy(j),:);
77  % DataSet(N_Runs).data = DataSet(N_Runs).data .* (DataSet(N_Runs).data>zero_sup);
78 
80 
81  DataSet(N_Runs).data = DataSet(N_Runs).data(total_E > 1, :);
82  DataSet(N_Runs).accept = ones(size(data, 1), 1);
83 
84  end
85 
86 end
87 
88 %%
89 DrawDataSet(DataSet, InitConst, 'Inputs');
90 
91 SaveCanvas([DataFolder 'EnergyCalibFIt'],gcf);
92 
93 
94 
95 
96 %%
97 
98 figure('name',['DrawDataSet_EnergyFraction'],'PaperPositionMode','auto', ...
99  'position',[100,0,1800,900]) ;
100 
101 SumFraction = [];
102 
103 
104 for i = 1:N_Runs
105  subplot(1,2,i);
106  total_E = ones(size(DataSet(i).data)) .*DataSet(i).E;
107  Fraction = DataSet(i).data ./ total_E;
108  MeanFraction = mean(Fraction, 1);
109  MeanFraction = reshape(MeanFraction, 8, 8);
110 
111  SumFraction = [SumFraction; Fraction];
112 
113  imagesc(0:7, 0:7, MeanFraction);
114  colorbar
115  set(gca,'YDir','normal')
116 
117  title(sprintf('%s, E = %.1f GeV', DataSet(i).FileID, DataSet(i).E));
118  xlabel('Column ID');
119  ylabel('Row ID');
120 
121 end
122 
123 SaveCanvas([DataFolder 'EnergyCalibFIt'],gcf);
124 %%
125 
126 
127 
128 figure('name',['DrawDataSet_EnergyDistribution'],'PaperPositionMode','auto', ...
129  'position',[100,0,1900,1400]) ;
130 
131 for col = 1:8
132  for row = 1:8
133  idx = col + (row - 1)*8;
134 
135  subplot(8,8,idx);
136 
137  histogram( DataSet(i).data(:,idx),[0.:.1:16]);
138 
139  set(gca,'XLim',[0,16])
140  set(gca,'YScale','log')
141  title(sprintf('Row%d Col%d', row-1, col-1));
142 
143  end
144 end
145 
146 %%
147 
148 figure('name',['DrawDataSet_EnergyFractionSum'],'PaperPositionMode','auto', ...
149  'position',[100,0,1900,400]) ;
150 
151 subplot(1,3,1);
152 
153 MeanFraction = mean(SumFraction, 1);
154 MeanFraction = reshape(MeanFraction, 8, 8);
155 
156 imagesc(0:7, 0:7, MeanFraction);
157 colorbar
158 set(gca,'YDir','normal');
159 
160 title(sprintf('Sum all data'));
161 xlabel('Column ID');
162 ylabel('Row ID');
163 
164 subplot(1,3,2);
165 
166 hist(reshape(MeanFraction,size(MeanFraction,1) * size(MeanFraction,2),1),100);
167 title('fraction of shower energy carried by each tower');
168 xlabel('MeanFraction');
169 
170 subplot(1,3,3);
171 
172 low_tower_IDs =reshape( MeanFraction<0.001, 1, Ndata);
173 % low_tower_IDs =reshape( MeanFraction<0.0001, 1, Ndata);
174 
175 imagesc(0:7, 0:7, reshape(low_tower_IDs, 8, 8));
176 colorbar
177 set(gca,'YDir','normal');
178 
179 title(sprintf('Low hit towers'));
180 xlabel('Column ID');
181 ylabel('Row ID');
182 
183 SaveCanvas([DataFolder 'EnergyCalibFIt'],gcf);
184 
185 % return
186 %%
187 
188 % InitConst_RunScale = [InitConst ones(1, N_Runs)];
189 InitConst_RunScale = [InitConst ];
190 % InitConst_RunScale = [InitConst ];
191 
192 data_selection(InitConst_RunScale,10);
193 disp(object_function(InitConst_RunScale));
194 
195 % disp(object_function(InitConst_RunScale, 2));
196 % disp(object_function(InitConst_RunScale, 1));
197 
198 %%
199 
200 x = InitConst_RunScale;
201 
202 options = optimset('Display','iter','TolX',1, 'MaxFunEvals', 100000,'MaxIter',40000,'PlotFcns',@optimplotfval );
203 
204 data_selection(x,8);
205 disp(object_function(x));
206 
207 x = fminsearch(@(x) object_function(x), x,...
208  options);
209 
210 %%
211 options = optimset('Display','iter','TolX',1, 'MaxFunEvals', 100000,'MaxIter',40000,'PlotFcns',@optimplotfval );
212 %
213 data_selection(x,4);
214 disp(object_function(x));
215 
216 x = fminsearch(@(x) object_function(x), x,...
217  options);
218 
219 
220 %%
221 options = optimset('Display','iter','TolX',1, 'MaxFunEvals', 100000,'MaxIter',40000,'PlotFcns',@optimplotfval );
222 %
223 data_selection(x,2);
224 disp(object_function(x));
225 
226 x = fminsearch(@(x) object_function(x), x,...
227  options);
228 
229 
230 %%
231 
232 data_selection(x,2);
233 
234 calib_const = x(1:Ndata);
235 % E_scale = x((Ndata+1):(Ndata + N_Runs));
236 E_scale = ones(N_Runs);
237 
238 
239 figure('name',['CalibConst'],'PaperPositionMode','auto', ...
240  'position',[100,0,1800,400]) ;
241 
242 subplot(1,3,1);
243 
244 plot(calib_const);
245 title(sprintf('Calibration constant'));
246 xlabel('Col * 8 + Row');
247 ylabel('Calibration New / Old');
248 
249 subplot(1,3,2);
250 
251 imagesc(0:7, 0:7, reshape(calib_const, 8, 8));
252 colorbar
253 set(gca,'YDir','normal')
254 
255 title(sprintf('Calibration constant, New / Old'));
256 xlabel('Column ID');
257 ylabel('Row ID');
258 
259 
260 subplot(1,3,3);
261 
262 plot(E_scale,'x');
263 title(sprintf('Energy scale constant, mean = %.2f', mean(E_scale)));
264 xlabel('Run ID');
265 ylabel('Energy scale New / Old');
266 set(gca,'YLim',[0.5,1.5])
267 grid on
268 
269 
270 SaveCanvas([DataFolder 'EnergyCalibFIt'],gcf);
271 %%
272 
273 % figure('name',['CalibConstVSModuleDensity'],'PaperPositionMode','auto', ...
274 % 'position',[100,0,1300,1000]) ;
275 %
276 % ModuleDensity =[
277 % 10.19 8.47 8.96 9.77
278 % 9.74 9.96 10.00 9.87
279 % 9.25 9.83 9.32 10.10
280 % 9.59 9.39 10.06 9.62
281 % 9.48 9.5 9.34 9.33
282 % 9.43 9.34 9.39 9.55
283 % 9.21 9.55 9.3 9.3
284 % 9.5 9.6 9.3 9.24
285 % ];
286 %
287 % ModuleDensity = ModuleDensity(8:-1:1,:);
288 %
289 % ModuleDensity = [ModuleDensity(:,1) ModuleDensity(:,1) ModuleDensity(:,2) ModuleDensity(:,2) ModuleDensity(:,3) ModuleDensity(:,3) ModuleDensity(:,4) ModuleDensity(:,4)];
290 %
291 % subplot(2,2,1);
292 % imagesc(0:7, 0:7,ModuleDensity);
293 % colorbar
294 % set(gca,'YDir','normal')
295 %
296 % title(sprintf('Module Density (g/cm^3)'));
297 % xlabel('Column ID');
298 % ylabel('Row ID');
299 %
300 %
301 % subplot(2,2,2);
302 %
303 % imagesc(0:7, 0:7, reshape(calib_const, 8, 8));
304 % colorbar
305 % set(gca,'YDir','normal');
306 %
307 % title(sprintf('Calibration constant, New / Old'));
308 % xlabel('Column ID');
309 % ylabel('Row ID');
310 %
311 %
312 % subplot(2,2,3);
313 %
314 % [calib_const_col, calib_const_row]= meshgrid(0:7,0:7);
315 %
316 % calib_const_col = reshape(calib_const_col,1,64);
317 % calib_const_row = reshape(calib_const_row,1,64);
318 % % IDs = ~low_tower_IDs;
319 % IDs = (calib_const_col >=3 & calib_const_col<=5 & calib_const_row>=4 & calib_const_row<=6);
320 %
321 % dens = reshape(ModuleDensity,1, 8* 8);
322 % dens = dens(IDs);
323 %
324 % plot(calib_const(IDs),dens, 'o');
325 % title(sprintf('THP 3x3, Calibration adjustment VS density'));
326 % xlabel('Calibration constant, New / Old');
327 % ylabel('Module Density');
328 %
329 % subplot(2,2,4);
330 %
331 %
332 % IDs = ~low_tower_IDs;
333 % % IDs = (calib_const_col >=3 & calib_const_col<=5 & calib_const_row>=4 & calib_const_row<=6);
334 %
335 % dens = reshape(ModuleDensity,1, 8* 8);
336 % dens = dens(IDs);
337 %
338 % plot(calib_const(IDs),dens, 'o');
339 % title(sprintf('All calibrated modules, Calibration adjustment VS density'));
340 % xlabel('Calibration constant, New / Old');
341 % ylabel('Module Density');
342 %
343 % SaveCanvas([DataFolder 'EnergyCalibFIt'],gcf);
344 
345 
346 
347 %%
348 
349 DrawDataSet(DataSet,calib_const,'Optimized');
350 SaveCanvas([DataFolder 'EnergyCalibFIt'],gcf);
351 
352 %% Save out
353 %
354 % for i = 1:N_Runs
355 % filename = sprintf('%s/calirbated_%d_%.0f.dat',DataFolder, DataSet(i).FileID, DataSet(i).E );
356 %
357 %
358 % total_E = sum( DataSet(i).data*InitConst', 2) ;
360 %
361 % dlmwrite(filename,[total_E calib_total_E]);
362 % end
363 
364 save([DataFolder 'fit.mat']);
365 % save('goodfit.mat');
366 
367 %%
368 
369 [calib_const_col, calib_const_row]= meshgrid(0:7,0:7);
370 
371 A = [reshape(calib_const_col,1,64); reshape(calib_const_row,1,64); calib_const];
372 
373 
374 fileID = fopen([DataFolder 'ShowerCalibFit_CablibConst.dat'],'w');
375 % fprintf(fileID,'%d - %d \n',);
376 
377 fprintf(fileID,'%d\t%d\t%f\n',A);
378 
379 
380 fclose(fileID);
381 
382 disp([DataFolder 'ShowerCalibFit_CablibConst.dat'])
383 
384 %%
385 
386 figure('name',['DrawDataSet_EnergyDistribution_AfterCalibration'],'PaperPositionMode','auto', ...
387  'position',[100,0,1900,1400]) ;
388 
389 for col = 1:8
390  for row = 1:8
391  idx = col + (row - 1)*8;
392 
393  subplot(8,8,idx);
394 
395  histogram( DataSet(i).data(:,idx) * calib_const(idx),[0.:.1:16]);
396 
397  set(gca,'XLim',[0,16]);
398  set(gca,'YScale','log');
399  title(sprintf('Row%d Col%d', row-1, col-1));
400 
401  end
402 end
403