def plot_garfield_exhaustive(ctx, normalization, zero_wire_locs, garfield_fileset, pdffile): ''' Plot all the Garfield current responses. ''' import wirecell.sigproc.garfield as gar dat = gar.load(garfield_fileset, normalization, zero_wire_locs) import wirecell.sigproc.plots as plots plots.garfield_exhaustive(dat, pdffile)
def convert_garfield(ctx, origin, speed, normalization, zero_wire_locs, garfield_fileset, wirecell_field_response_file): ''' Convert an archive of a Garfield fileset (zip, tar, tgz) into a Wire Cell field response file (.json with optional .gz or .bz2 compression). ''' import wirecell.sigproc.garfield as gar from wirecell.sigproc.response import rf1dtoschema import wirecell.sigproc.response.persist as per origin = eval(origin, units.__dict__) speed = eval(speed, units.__dict__) rflist = gar.load(garfield_fileset, normalization, zero_wire_locs) fr = rf1dtoschema(rflist, origin, speed) per.dump(wirecell_field_response_file, fr)
def plot_garfield_track_response(ctx, gain, shaping, tick, tick_padding, electrons, adc_gain, adc_voltage, adc_resolution, normalization, zero_wire_locs, ymin, ymax, regions, dump_data, garfield_fileset, pdffile): ''' Plot Garfield response assuming a perpendicular track. Note, defaults are chosen to reproduce the "ADC Waveform with 2D MicroBooNE Wire Plane Model" plot for the MicroBooNE noise paper. ''' import wirecell.sigproc.garfield as gar import wirecell.sigproc.response as res import wirecell.sigproc.plots as plots gain *= units.mV/units.fC shaping *= units.us tick *= units.us electrons *= units.eplus adc_gain *= 1.0 # unitless adc_voltage *= units.volt adc_resolution = 1<<adc_resolution adc_per_voltage = adc_gain*adc_resolution/adc_voltage dat = gar.load(garfield_fileset, normalization, zero_wire_locs) if regions: print ("Limiting to %d regions" % regions) dat = [r for r in dat if abs(r.region) in range(regions)] uvw = res.line(dat, electrons) detector = "" if "ub_" in garfield_fileset: detector = "MicroBooNE" if "dune_" in garfield_fileset: detector = "DUNE" print ('Using detector hints: "%s"' % detector) nwires = len(set([abs(r.region) for r in dat])) - 1 #msg = "%d electrons, +/- %d wires" % (electrons, nwires) msg="" fig,data = plots.plot_digitized_line(uvw, gain, shaping, adc_per_voltage = adc_per_voltage, detector = detector, ymin=ymin, ymax=ymax, msg=msg, tick_padding=tick_padding) print ("plotting to %s" % pdffile) fig.savefig(pdffile) if dump_data: print ("dumping data to %s" % dump_data) if dump_data.endswith(".npz"): import numpy numpy.savez(dump_data, data); if dump_data.endswith(".npy"): import numpy numpy.save(dump_data, data); if dump_data.endswith(".txt"): with open(dump_data,"wt") as fp: for line in data: line = '\t'.join(map(str, line)) fp.write(line+'\n') if dump_data.endswith(".json"): import json open(dump_data,"wt").write(json.dumps(data.tolist(), indent=4))