@@ -65,9 +65,9 @@ def wedge_test(lining:str = "solveS", solve_at = 0, z0 = np.arange(-15, 15.5, 0.
65
65
66
66
for i in range (len (test_lines )):
67
67
for patch in cover .patches :
68
- if patch .contains (test_lines [i ]):
68
+ if patch .contains (test_lines [i ]):
69
69
percentage_accepted += 1
70
- break
70
+ break
71
71
72
72
73
73
percentage_accepted = percentage_accepted / lines
@@ -104,6 +104,235 @@ def wedge_test(lining:str = "solveS", solve_at = 0, z0 = np.arange(-15, 15.5, 0.
104
104
plt .savefig (f"Figures/wedge_test({ lining } _{ v .replace ('.' ,'' )} _{ at } _n{ n } )" )
105
105
plt .show ()
106
106
107
+ def z099 (lining :str = "solveS" , accept = 0.999 , start = 'odd' , n = 16 , wedges = [0 , 128 ], v = 'v3' , savefig = False ):
108
+ solve_at = [0 ]
109
+ real_solve = [0 ]
110
+ reached = False
111
+ z0 = np .arange (- 15 , 15.5 , 0.5 )
112
+ lines = 1000
113
+ left_index = 0
114
+ right_index = 60
115
+ last_left = 30
116
+ last_right = 31
117
+ rf = False
118
+ lf = False
119
+
120
+ while reached == False :
121
+ mean_list = np .zeros ((len (z0 ), wedges [1 ]- wedges [0 ]))
122
+ num_covers = []
123
+ PRF = []
124
+ file = f'wedgeData_{ v } _128.txt'
125
+
126
+ with open (file ) as f :
127
+ for ik , k in enumerate (np .arange (wedges [0 ], wedges [1 ])):
128
+ d = np .array (ast .literal_eval (f .readline ()))
129
+ env = Environment ()
130
+ data = DataSet (env = env )
131
+ data .input_data (d , add = True )
132
+ cover = Cover (env , data )
133
+ cover .solve (z0 = solve_at , lining = lining , n = n , show = False )
134
+ num_covers .append (cover .n_patches )
135
+ out = []
136
+
137
+ for layer in range (env .layers ):
138
+ for point in data .array [layer ]:
139
+
140
+ num_in = 0
141
+ for patch in cover .patches :
142
+ if patch .contains_p (point , layer ):
143
+ num_in += 1
144
+
145
+ out .append (num_in )
146
+ PRF .append (out )
147
+
148
+ for iz , z in enumerate (np .array (z0 )):
149
+ percentage_accepted = 0
150
+
151
+ lg = LineGenerator (env , z )
152
+ test_lines = lg .generateEvenGrid (lines )
153
+
154
+ for i in range (len (test_lines )):
155
+ for patch in cover .patches :
156
+ if patch .contains (test_lines [i ]):
157
+ percentage_accepted += 1
158
+ break
159
+
160
+
161
+ percentage_accepted = percentage_accepted / lines
162
+ mean_list [iz , ik ] = mean_list [iz , ik ] + percentage_accepted
163
+ z0_means = np .mean (mean_list , axis = 1 )
164
+ if np .all (z0_means > accept ):
165
+ break
166
+ if np .all (z0_means [left_index :last_left ] > accept ):
167
+ real_solve = np .append (real_solve , [z0 [left_index ]])
168
+ print ('new left' , z0 [left_index ])
169
+ last_left = left_index
170
+ left_index = - 1
171
+ if np .all (z0_means [last_right :right_index ] > accept ):
172
+ real_solve = np .append (real_solve , [z0 [right_index ]])
173
+ print ('new right' , z0 [right_index ])
174
+ last_right = right_index
175
+ right_index = 61
176
+ left_index += 1
177
+ right_index -= 1
178
+ real_solve = np .unique (real_solve )
179
+ solve_at = np .copy (real_solve )
180
+
181
+ solve_at = np .append (solve_at , z0 [left_index ])
182
+ solve_at = np .append (solve_at ,z0 [right_index ])
183
+ solve_at = np .unique (solve_at )
184
+ print (left_index )
185
+ print (right_index )
186
+ print (np .sort (real_solve ))
187
+
188
+ ymin = accept
189
+ mean_num = format (np .mean (num_covers ), ".1f" )
190
+ std_num = format (np .std (num_covers ), ".1f" )
191
+
192
+ plt .scatter (z0 , np .mean (mean_list , axis = 1 ), color = 'r' , s = 10 )
193
+ plt .plot (z0 , np .mean (mean_list , axis = 1 ), color = 'k' )
194
+ plt .xlabel ('z0 offset [cm]' , fontsize = 16 )
195
+ plt .ylabel ('Acceptance' , fontsize = 16 )
196
+ plt .ylim (ymin , 1.0 )
197
+ plt .title (f'{ lining } ' , fontsize = 16 )
198
+ PRFm = format (np .mean (out ), '.2f' )
199
+ PRFs = format (np .std (out ), '.2f' )
200
+ plt .legend ([f"Number of Patches: { mean_num } " + r'$\pm$' + f"{ std_num } \n Point Repetition Factor: { PRFm } " + r'$\pm$' + f"{ PRFs } \n Patches with " + r'$z_0$' + f" = { np .sort (np .round (np .array (solve_at ), 2 ), axis = 0 )} \n ppl = { n } , " + r'$N_{wedges}$ ' + f"= { wedges [1 ]} , { v } events" ],
201
+ loc = 8 , fontsize = 12 )
202
+ if savefig == True :
203
+ try :
204
+ at = len (solve_at )
205
+ except :
206
+ at = solve_at
207
+ plt .savefig (f"Figures/minimal_z0_odd_({ lining } _{ v .replace ('.' ,'' )} _n{ n } )" )
208
+ plt .show ()
209
+
210
+
211
+ def wedge_test_old (lining :str = "solveS" , solve_at = 0 , z0 = np .arange (- 15 , 15.5 , 0.5 ), n = 16 , wedges = [0 , 128 ], lines = 1000 , savefig = False , v = 'v2' ):
212
+ mean_list = np .zeros ((len (z0 ), wedges [1 ]- wedges [0 ]))
213
+ num_covers = []
214
+ PRF = []
215
+ file = f'wedgeData_{ v } _128.txt'
216
+
217
+ with open (file ) as f :
218
+ for ik , k in enumerate (np .arange (wedges [0 ], wedges [1 ])):
219
+ d = np .array (ast .literal_eval (f .readline ()))
220
+ env = Environment ()
221
+ data = DataSet (env = env , n_points = 150 )
222
+ data .input_data (d , add = True )
223
+ cover = Cover (env , data )
224
+ cover .solve (z0 = solve_at , lining = lining , n = n , show = False )
225
+ #data.plot(True)
226
+ num_covers .append (cover .n_patches )
227
+ out = []
228
+
229
+ for layer in range (env .layers ):
230
+ for point in data .array [layer ]:
231
+
232
+ num_in = 0
233
+ for patch in cover .patches :
234
+ if patch .contains_p (point , layer ):
235
+ num_in += 1
236
+
237
+ out .append (num_in )
238
+ PRF .append (out )
239
+
240
+ for iz , z in enumerate (np .array (z0 )):
241
+ percentage_accepted = 0
242
+
243
+ lg = LineGenerator (env , z )
244
+ test_lines = lg .generateEvenGrid (lines )
245
+
246
+ for i in range (len (test_lines )):
247
+ for patch in cover .patches :
248
+ if patch .contains (test_lines [i ]):
249
+ percentage_accepted += 1
250
+ break
251
+
252
+
253
+ percentage_accepted = percentage_accepted / lines
254
+ mean_list [iz , ik ] = mean_list [iz , ik ] + percentage_accepted
255
+ #print(ik)
256
+ mean_accept = format (np .mean (mean_list ), ".3f" )
257
+ mean_num = format (np .mean (num_covers ), ".1f" )
258
+ std_num = format (np .std (num_covers ), ".1f" )
259
+ if type (solve_at ) == float :
260
+ ymin = 0
261
+ elif type (solve_at ) == int :
262
+ ymin = 0
263
+ else :
264
+ ymin = 0.90
265
+
266
+ plt .scatter (z0 , np .mean (mean_list , axis = 1 ), color = 'r' , s = 10 )
267
+ plt .plot (z0 , np .mean (mean_list , axis = 1 ), color = 'k' )
268
+ plt .xlabel ('z0 offset [cm]' , fontsize = 16 )
269
+ plt .ylabel ('Acceptance' , fontsize = 16 )
270
+ plt .ylim (ymin , 1.0 )
271
+ plt .title (f'{ lining } ' , fontsize = 16 )
272
+ PRFm = format (np .mean (out ), '.2f' )
273
+ PRFs = format (np .std (out ), '.2f' )
274
+ plt .legend ([f"Number of Patches: { mean_num } " + r'$\pm$' + f"{ std_num } \n Point Repetition Factor: { PRFm } " + r'$\pm$' + f"{ PRFs } \n Patches with " + r'$z_0$' + f" = { np .round (np .array (solve_at ), 2 )} \n ppl = { n } , " + r'$N_{wedges}$ ' + f"= { wedges [1 ]} , { v } events" ],
275
+ loc = 8 , fontsize = 12 )
276
+ if savefig == True :
277
+ try :
278
+ at = len (solve_at )
279
+ except :
280
+ at = solve_at
281
+ plt .savefig (f"Figures/wedge_test({ lining } _{ v .replace ('.' ,'' )} _{ at } _n{ n } )" )
282
+ if np .mean (np .mean (mean_list , axis = 1 )) > 0.999 :
283
+ plt .show ()
284
+ return np .mean (np .mean (mean_list , axis = 1 ))
285
+ else :
286
+ plt .clf ()
287
+ return np .mean (np .mean (mean_list , axis = 1 ))
288
+
289
+ def wedgeSlopePlot (lining :str = "solveS" , events = 128 , lines = 1000 , z0 = 0 , savefig = False , show = True , v = 'v2' ):
290
+
291
+ percentage_accepted = [0 for _ in range (lines )]
292
+
293
+
294
+ file = open (f'wedgeData_{ v } _128.txt' )
295
+ ''' for i in range(7):
296
+ line = file.readline()'''
297
+ for k in range (events ):
298
+ line = file .readline ()
299
+ env = Environment ()
300
+ data = DataSet (env , n_points = 150 )
301
+ d = np .array (ast .literal_eval (line ))
302
+ data .input_data (d , add = True )
303
+ cover = Cover (env , data )
304
+ cover .solve (lining = lining , z0 = z0 , show = False )
305
+
306
+ lg = LineGenerator (env , z0 )
307
+ test_lines = lg .generateEvenGrid (lines )
308
+ co_tan = []
309
+
310
+
311
+ for i in range (len (test_lines )):
312
+ co_tan .append (100 / test_lines [i ].slope )
313
+ for patch in cover .patches :
314
+ if patch .contains (test_lines [i ]):
315
+ percentage_accepted [i ] += 1
316
+ break
317
+
318
+
319
+ percentage_accepted = [x / events for x in percentage_accepted ]
320
+ mean_accept = format (np .mean (percentage_accepted ), ".3f" )
321
+
322
+ if show == False :
323
+ return np .mean (percentage_accepted )
324
+
325
+ print (f"({ lining } ) - { mean_accept } " )
326
+ plt .plot (co_tan , percentage_accepted , c = "b" , label = "Mean acceptance: " + mean_accept )
327
+
328
+ plt .title (f"Acceptance Rate ({ lining } )" , fontsize = '20' )
329
+ plt .xlabel ("dZ/dr" , fontsize = '16' )
330
+ plt .ylabel ("Acceptance Probability" , fontsize = '16' )
331
+ plt .legend (fontsize = '16' )
332
+ if savefig == True :
333
+ plt .savefig (f"Figures/Acceptance_Rate_({ lining } )" )
334
+ plt .show ()
335
+
107
336
def numCovers (clustering :str = "" , lining :str = "solveS" , events = 1000 , savefig = False , ideal = False ):
108
337
# Runs a bunch of iterations by generating 1000 datasets and
109
338
# computing the cover. Then, it just looks at how many covers is
@@ -341,127 +570,3 @@ def duplicates(lining:str = "solveS", z0 = 0, events=1000, ideal=False):
341
570
342
571
print (f'{ lining } - mean: { np .mean (dupes )} std: { np .std (dupes )} ' )
343
572
344
- def wedge_test_old (lining :str = "solveS" , solve_at = 0 , z0 = np .arange (- 15 , 15.5 , 0.5 ), n = 16 , wedges = [0 , 128 ], lines = 1000 , savefig = False , v = 'v2' ):
345
- mean_list = np .zeros ((len (z0 ), wedges [1 ]- wedges [0 ]))
346
- num_covers = []
347
- PRF = []
348
- file = f'wedgeData_{ v } _128.txt'
349
-
350
- with open (file ) as f :
351
- for ik , k in enumerate (np .arange (wedges [0 ], wedges [1 ])):
352
- d = np .array (ast .literal_eval (f .readline ()))
353
- env = Environment ()
354
- data = DataSet (env = env , n_points = 150 )
355
- data .input_data (d , add = True )
356
- cover = Cover (env , data )
357
- cover .solve (z0 = solve_at , lining = lining , n = n , show = False )
358
- #data.plot(True)
359
- num_covers .append (cover .n_patches )
360
- out = []
361
-
362
- for layer in range (env .layers ):
363
- for point in data .array [layer ]:
364
-
365
- num_in = 0
366
- for patch in cover .patches :
367
- if patch .contains_p (point , layer ):
368
- num_in += 1
369
-
370
- out .append (num_in )
371
- PRF .append (out )
372
-
373
- for iz , z in enumerate (np .array (z0 )):
374
- percentage_accepted = 0
375
-
376
- lg = LineGenerator (env , z )
377
- test_lines = lg .generateEvenGrid (lines )
378
-
379
- for i in range (len (test_lines )):
380
- for patch in cover .patches :
381
- if patch .contains (test_lines [i ]):
382
- percentage_accepted += 1
383
- break
384
-
385
-
386
- percentage_accepted = percentage_accepted / lines
387
- mean_list [iz , ik ] = mean_list [iz , ik ] + percentage_accepted
388
- #print(ik)
389
- mean_accept = format (np .mean (mean_list ), ".3f" )
390
- mean_num = format (np .mean (num_covers ), ".1f" )
391
- std_num = format (np .std (num_covers ), ".1f" )
392
- if type (solve_at ) == float :
393
- ymin = 0
394
- elif type (solve_at ) == int :
395
- ymin = 0
396
- else :
397
- ymin = 0.90
398
-
399
- plt .scatter (z0 , np .mean (mean_list , axis = 1 ), color = 'r' , s = 10 )
400
- plt .plot (z0 , np .mean (mean_list , axis = 1 ), color = 'k' )
401
- plt .xlabel ('z0 offset [cm]' , fontsize = 16 )
402
- plt .ylabel ('Acceptance' , fontsize = 16 )
403
- plt .ylim (ymin , 1.0 )
404
- plt .title (f'{ lining } ' , fontsize = 16 )
405
- PRFm = format (np .mean (out ), '.2f' )
406
- PRFs = format (np .std (out ), '.2f' )
407
- plt .legend ([f"Number of Patches: { mean_num } " + r'$\pm$' + f"{ std_num } \n Point Repetition Factor: { PRFm } " + r'$\pm$' + f"{ PRFs } \n Patches with " + r'$z_0$' + f" = { np .round (np .array (solve_at ), 2 )} \n ppl = { n } , " + r'$N_{wedges}$ ' + f"= { wedges [1 ]} , { v } events" ],
408
- loc = 8 , fontsize = 12 )
409
- if savefig == True :
410
- try :
411
- at = len (solve_at )
412
- except :
413
- at = solve_at
414
- plt .savefig (f"Figures/wedge_test({ lining } _{ v .replace ('.' ,'' )} _{ at } _n{ n } )" )
415
- if np .mean (np .mean (mean_list , axis = 1 )) > 0.999 :
416
- plt .show ()
417
- return np .mean (np .mean (mean_list , axis = 1 ))
418
- else :
419
- plt .clf ()
420
- return np .mean (np .mean (mean_list , axis = 1 ))
421
-
422
- def wedgeSlopePlot (lining :str = "solveS" , events = 128 , lines = 1000 , z0 = 0 , savefig = False , show = True , v = 'v2' ):
423
-
424
- percentage_accepted = [0 for _ in range (lines )]
425
-
426
-
427
- file = open (f'wedgeData_{ v } _128.txt' )
428
- ''' for i in range(7):
429
- line = file.readline()'''
430
- for k in range (events ):
431
- line = file .readline ()
432
- env = Environment ()
433
- data = DataSet (env , n_points = 150 )
434
- d = np .array (ast .literal_eval (line ))
435
- data .input_data (d , add = True )
436
- cover = Cover (env , data )
437
- cover .solve (lining = lining , z0 = z0 , show = False )
438
-
439
- lg = LineGenerator (env , z0 )
440
- test_lines = lg .generateEvenGrid (lines )
441
- co_tan = []
442
-
443
-
444
- for i in range (len (test_lines )):
445
- co_tan .append (100 / test_lines [i ].slope )
446
- for patch in cover .patches :
447
- if patch .contains (test_lines [i ]):
448
- percentage_accepted [i ] += 1
449
- break
450
-
451
-
452
- percentage_accepted = [x / events for x in percentage_accepted ]
453
- mean_accept = format (np .mean (percentage_accepted ), ".3f" )
454
-
455
- if show == False :
456
- return np .mean (percentage_accepted )
457
-
458
- print (f"({ lining } ) - { mean_accept } " )
459
- plt .plot (co_tan , percentage_accepted , c = "b" , label = "Mean acceptance: " + mean_accept )
460
-
461
- plt .title (f"Acceptance Rate ({ lining } )" , fontsize = '20' )
462
- plt .xlabel ("dZ/dr" , fontsize = '16' )
463
- plt .ylabel ("Acceptance Probability" , fontsize = '16' )
464
- plt .legend (fontsize = '16' )
465
- if savefig == True :
466
- plt .savefig (f"Figures/Acceptance_Rate_({ lining } )" )
467
- plt .show ()
0 commit comments