Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Proto2ShowerCalibFit.m
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file Proto2ShowerCalibFit.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/ShowerCalib/';
12 
13 % FileID = {'Rot45','THP','UIUC18','UpTilt5', 'ShowerDepth'};
14 FileID = {'Rot45','THP','UIUC18','UIUC21','Tilt0', 'ShowerDepth'};
16 
17 sim_const = 3/100;
18 sim_stat = 12/100;
19 Ndata = 64;
20 InitConst = [ones(1, 64) ];
21 
22 zero_sup = -1000; %zero suppression disabled
23 
24 %%
25 
26 for i = 1:size(FileList,2)
27 
28  FileList{i} = [DataFolder FileList{i} '.lst_EMCalCalib.root.dat'];
29 
30 end
31 
32 %%
33 
35 
36 %% Readin
37 % global DataSet
38 DataSet =struct('FileID',{},'E',{},'DE',{},'data',{}, 'accept',{});
39 
40 N_Runs = 0;
41 % for i = 1:1
42 for i = 1:size(FileList,2)
43  filename = FileList{i};
44  fprintf('processing %s\n', filename);
45 
46  data = textread(filename);
47  % disp(size(data));
48 
49  energys = data(:,1);
50  energy = unique(energys);
51  data = data(:,2:(1+Ndata));
52 
53  energy = energy(energy<=8 & energy>2);
54 
55  for j=1:size(energy, 1)
56 
57  N_Runs = N_Runs +1;
58  fprintf('processing %s - %.0f GeV @ %d\n', filename,energy(j), N_Runs );
59 
60  DataSet(N_Runs).FileID = FileID{i};
61  DataSet(N_Runs).E = energy(j);
62  DataSet(N_Runs).DE = sqrt( sim_const.^2 + sim_stat.^2./DataSet(i).E ) ;
63 
64  DataSet(N_Runs).data = data(energys == energy(j),:);
65  DataSet(N_Runs).data = DataSet(N_Runs).data .* (DataSet(N_Runs).data>zero_sup);
66 
68 
69  DataSet(N_Runs).data = DataSet(N_Runs).data(total_E > DataSet(N_Runs).E/2, :);
70  DataSet(N_Runs).accept = ones(size(data, 1), 1);
71 
72  end
73 
74 end
75 
76 %%
77 DrawDataSet(DataSet, InitConst, 'Inputs');
78 
79 SaveCanvas([DataFolder 'EnergyCalibFIt'],gcf);
80 
81 
82 
83 %%
84 
85 figure('name',['DrawDataSet_EnergyFraction'],'PaperPositionMode','auto', ...
86  'position',[100,0,1800,1000]) ;
87 
88 SumFraction = [];
89 
90 for i = 1:N_Runs
91  subplot(4,4,i);
92  total_E = ones(size(DataSet(i).data)) .*DataSet(i).E;
93  Fraction = DataSet(i).data ./ total_E;
94  MeanFraction = mean(Fraction, 1);
95  MeanFraction = reshape(MeanFraction, 8, 8);
96 
97  SumFraction = [SumFraction; Fraction];
98 
99  imagesc(0:7, 0:7, MeanFraction);
100  colorbar
101  set(gca,'YDir','normal')
102 
103  title(sprintf('%s, E = %.1f GeV', DataSet(i).FileID, DataSet(i).E));
104  xlabel('Column ID');
105  ylabel('Row ID');
106 end
107 
108 SaveCanvas([DataFolder 'EnergyCalibFIt'],gcf);
109 %%
110 
111 figure('name',['DrawDataSet_EnergyFractionSum'],'PaperPositionMode','auto', ...
112  'position',[100,0,1900,400]) ;
113 
114 subplot(1,3,1);
115 
116 MeanFraction = mean(SumFraction, 1);
117 MeanFraction = reshape(MeanFraction, 8, 8);
118 
119 imagesc(0:7, 0:7, MeanFraction);
120 colorbar
121 set(gca,'YDir','normal');
122 
123 title(sprintf('Sum all data'));
124 xlabel('Column ID');
125 ylabel('Row ID');
126 
127 subplot(1,3,2);
128 
129 hist(reshape(MeanFraction,size(MeanFraction,1) * size(MeanFraction,2),1),100);
130 title('fraction of shower energy carried by each tower');
131 xlabel('MeanFraction');
132 
133 subplot(1,3,3);
134 
135 low_tower_IDs =reshape( MeanFraction<0.004, 1, Ndata);
136 
137 imagesc(0:7, 0:7, reshape(low_tower_IDs, 8, 8));
138 colorbar
139 set(gca,'YDir','normal');
140 
141 title(sprintf('Low hit towers'));
142 xlabel('Column ID');
143 ylabel('Row ID');
144 
145 SaveCanvas([DataFolder 'EnergyCalibFIt'],gcf);
146 
147 % return
148 %%
149 
150 InitConst_RunScale = [InitConst ones(1, N_Runs)];
151 % InitConst_RunScale = [InitConst ];
152 
153 data_selection(InitConst_RunScale,10);
154 disp(object_function(InitConst_RunScale));
155 
156 % disp(object_function(InitConst_RunScale, 2));
157 % disp(object_function(InitConst_RunScale, 1));
158 
159 %%
160 
161 x = InitConst_RunScale;
162 
163 options = optimset('Display','iter','TolX',1, 'MaxFunEvals', 100000,'MaxIter',40000,'PlotFcns',@optimplotfval );
164 
165 data_selection(x,8);
166 disp(object_function(x));
167 
168 x = fminsearch(@(x) object_function(x), x,...
169  options);
170 
171 %%
172 options = optimset('Display','iter','TolX',1, 'MaxFunEvals', 100000,'MaxIter',40000,'PlotFcns',@optimplotfval );
173 %
174 data_selection(x,4);
175 disp(object_function(x));
176 
177 x = fminsearch(@(x) object_function(x), x,...
178  options);
179 
180 
181 %%
182 options = optimset('Display','iter','TolX',1, 'MaxFunEvals', 100000,'MaxIter',40000,'PlotFcns',@optimplotfval );
183 %
184 data_selection(x,2);
185 disp(object_function(x));
186 
187 x = fminsearch(@(x) object_function(x), x,...
188  options);
189 
190 
191 %%
192 
193 data_selection(x,2);
194 
195 calib_const = x(1:Ndata);
196 E_scale = x((Ndata+1):(Ndata + N_Runs));
197 
198 
199 figure('name',['CalibConst'],'PaperPositionMode','auto', ...
200  'position',[100,0,1800,400]) ;
201 
202 subplot(1,3,1);
203 
204 
205 plot(calib_const);
206 title(sprintf('Calibration constant'));
207 xlabel('Col * 8 + Row');
208 ylabel('Calibration New / Old');
209 
210 subplot(1,3,2);
211 
212 imagesc(0:7, 0:7, reshape(calib_const, 8, 8));
213 colorbar
214 set(gca,'YDir','normal')
215 
216 title(sprintf('Calibration constant, New / Old'));
217 xlabel('Column ID');
218 ylabel('Row ID');
219 
220 
221 subplot(1,3,3);
222 
223 plot(E_scale);
224 title(sprintf('Energy scale constant, mean = %.1f', mean(E_scale)));
225 xlabel('Run ID');
226 ylabel('Energy scale New / Old');
227 
228 
229 SaveCanvas([DataFolder 'EnergyCalibFIt'],gcf);
230 %%
231 
232 DrawDataSet(DataSet,calib_const,'Optimized');
233 SaveCanvas([DataFolder 'EnergyCalibFIt'],gcf);
234 
235 %% Save out
236 %
237 % for i = 1:N_Runs
238 % filename = sprintf('%s/calirbated_%d_%.0f.dat',DataFolder, DataSet(i).FileID, DataSet(i).E );
239 %
240 %
241 % total_E = sum( DataSet(i).data*InitConst', 2) ;
243 %
244 % dlmwrite(filename,[total_E calib_total_E]);
245 % end
246 
247 save([DataFolder 'fit.mat']);
248 % save('goodfit.mat');
249 
250 %%
251 
252 [calib_const_col, calib_const_row]= meshgrid(0:7,0:7);
253 
254 A = [reshape(calib_const_col,1,64); reshape(calib_const_row,1,64); calib_const];
255 
256 fileID = fopen([DataFolder 'ShowerCalibFit_CablibConst.dat'],'w');
257 % fprintf(fileID,'%d - %d \n',);
258 
259 fprintf(fileID,'%d\t%d\t%f\n',A);
260 
261 
262 fclose(fileID);
263 
264 
265 
266