diff --git a/.gitignore b/.gitignore index 255f524f9..bf4224e7f 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,6 @@ calgrind.* *.hdf wct-deps.dot + +.direnv +.envrc diff --git a/apps/inc/WireCellApps/Main.h b/apps/inc/WireCellApps/Main.h index 562a841dc..06e91c378 100644 --- a/apps/inc/WireCellApps/Main.h +++ b/apps/inc/WireCellApps/Main.h @@ -91,11 +91,18 @@ namespace WireCell { /// Call to finalize any terminal components. void finalize(); + /// Return the compiled version string + std::string version() const; + private: ConfigManager m_cfgmgr; std::vector m_plugins, m_apps, m_cfgfiles, m_load_path; Persist::externalvars_t m_extvars, m_extcode, m_tlavars, m_tlacode; Log::logptr_t l; + + // Limit number of threads. 0 means set no limit. This is + // only relevant if we are built with TBB support + int m_threads{0}; }; } // namespace WireCell diff --git a/apps/src/Main.cxx b/apps/src/Main.cxx index 3f34a1018..d3db3b9d7 100644 --- a/apps/src/Main.cxx +++ b/apps/src/Main.cxx @@ -3,6 +3,7 @@ #include "WireCellApps/Main.h" +#include "WireCellUtil/Version.h" #include "WireCellUtil/NamedFactory.h" #include "WireCellUtil/String.h" #include "WireCellUtil/Point.h" @@ -10,6 +11,7 @@ #include "WireCellIface/IConfigurable.h" #include "WireCellIface/ITerminal.h" #include "WireCellIface/IApplication.h" +#include "WireCellIface/INamed.h" #include #include @@ -25,6 +27,10 @@ #include #endif +#if HAVE_TBB_LIB +#include +#endif + using namespace WireCell; using namespace std; namespace po = boost::program_options; @@ -79,7 +85,16 @@ int Main::cmdline(int argc, char* argv[]) "specify a Jsonnet top level arguments variable=") ("path,P", po::value >(), - "add to JSON/Jsonnet search path"); + "add to JSON/Jsonnet search path") +#if HAVE_TBB_LIB + ("threads,t", po::value(), + "limit number of threads used") +#endif + + ("version,v", + "print the compiled version to stdout") + + ; // clang-format on po::variables_map opts; @@ -171,6 +186,16 @@ int Main::cmdline(int argc, char* argv[]) } } +#ifdef HAVE_TBB_LIB + if (opts.count("threads")) { + m_threads = opts["threads"].as(); + } +#endif + + if (opts.count("version")) { + std::cout << version() << std::endl; + } + // Maybe make this cmdline configurable. For now, set all // backends the same. Log::set_pattern("[%H:%M:%S.%03e] %L [%^%=8n%$] %v"); @@ -178,6 +203,11 @@ int Main::cmdline(int argc, char* argv[]) return 0; } +std::string Main::version() const +{ + return WireCell::version; +} + void Main::add_plugin(const std::string& libname) { m_plugins.push_back(libname); } void Main::add_app(const std::string& tn) { m_apps.push_back(tn); } @@ -209,6 +239,9 @@ void Main::add_path(const std::string& dirname) { m_load_path.push_back(dirname) void Main::initialize() { + // Here we got thought the boot-up sequence steps. + + // Load configuration files for (auto filename : m_cfgfiles) { l->info("loading config file {} ...", filename); Persist::Parser p(m_load_path, m_extvars, m_extcode, m_tlavars, m_tlacode); @@ -217,7 +250,7 @@ void Main::initialize() l->info("...done"); } - // Find if we have our special configuration entry + // Find if we have our own special configuration entry int ind = m_cfgmgr.index("wire-cell"); Configuration main_cfg = m_cfgmgr.pop(ind); if (!main_cfg.isNull()) { @@ -243,11 +276,9 @@ void Main::initialize() pm.add(pname, lname); } - // Apply any user configuration. This is a two step. First, just - // assure all the components referenced in the configuration - // sequence can be instantiated. Then, find them again and - // actually configure them. This way, any problems fails fast. + // Apply any component configuration sequence. + // Instantiation for (auto c : m_cfgmgr.all()) { if (c.isNull()) { continue; // allow and ignore any totally empty configurations @@ -265,6 +296,23 @@ void Main::initialize() l->info("constructing app: \"{}\"", c); Factory::lookup_tn(c); } + + // Give any named components their name. + for (auto c : m_cfgmgr.all()) { + if (c.isNull()) { + continue; // allow and ignore any totally empty configurations + } + string type = get(c, "type"); + string name = get(c, "name"); + auto namobj = Factory::find_maybe(type, name); // doesn't throw. + if (!namobj) { + continue; + } + namobj->set_name(name); + } + + // Finally, ask any configurables for their default, merge with + // user config and give back. for (auto c : m_cfgmgr.all()) { if (c.isNull()) { continue; // allow and ignore any totally empty configurations @@ -295,12 +343,28 @@ void Main::operator()() auto a = Factory::find(type, name); // throws app_objs.push_back(a); } + l->debug("executing {} apps, thread limit {}:", + m_apps.size(), m_threads); + +#if HAVE_TBB_LIB + std::unique_ptr gc; + if (m_threads) { + gc = std::make_unique( + tbb::global_control::max_allowed_parallelism, + m_threads); + } + l->debug("executing {} apps, thread limit {}:", + m_apps.size(), m_threads); +#else l->debug("executing {} apps:", m_apps.size()); +#endif + for (size_t ind = 0; ind < m_apps.size(); ++ind) { auto aobj = app_objs[ind]; l->debug("executing app: \"{}\"", m_apps[ind]); aobj->execute(); // throws } + } void Main::finalize() diff --git a/apps/wscript_build b/apps/wscript_build index f3809e1d9..68bd9f262 100644 --- a/apps/wscript_build +++ b/apps/wscript_build @@ -1,3 +1,8 @@ -bld.smplpkg('WireCellApps', use='WireCellIface FFTWTHREADS') +if 'HAVE_TBB' in bld.env: + bld.smplpkg('WireCellApps', use='WireCellIface FFTWTHREADS TBB') +else: + bld.smplpkg('WireCellApps', use='WireCellIface FFTWTHREADS') + + # app_use='WireCellUtil JSONNET', # test_use='WireCellUtil DYNAMO BOOST JSONCPP JSONNET') diff --git a/aux/inc/WireCellAux/ClusterHelpers.h b/aux/inc/WireCellAux/ClusterHelpers.h new file mode 100644 index 000000000..5061cc3d7 --- /dev/null +++ b/aux/inc/WireCellAux/ClusterHelpers.h @@ -0,0 +1,33 @@ +// Provide some helper functions for working with ICluster + +#ifndef WIRECELLAUX_CLUSTERJSONIFY +#define WIRECELLAUX_CLUSTERJSONIFY + +#include "WireCellUtil/Configuration.h" +#include "WireCellIface/IFrame.h" +#include "WireCellIface/ISlice.h" +#include "WireCellIface/ICluster.h" + +#include + +namespace WireCell::Aux { + /// Return JSON representation of the cluster. + Json::Value jsonify(const ICluster::pointer& cluster, + double drift_speed); + + /// Return name for the cluster in a canonical form suitable for + /// use as a file name. It only includes info related directly to + /// the cluster (the ident). + std::string name(const ICluster::pointer& cluster); + + /// Return the slices in the cluster. + ISlice::vector find_slices(const ICluster::pointer& cluster); + + /// Return the frame of the first slice in the cluster. Note, in + /// principle, clusters can span frames. + IFrame::pointer find_frame(const ICluster::pointer& cluster); + +} + +#endif + diff --git a/aux/inc/WireCellAux/Configurable.h b/aux/inc/WireCellAux/Configurable.h new file mode 100644 index 000000000..2b2cf88d9 --- /dev/null +++ b/aux/inc/WireCellAux/Configurable.h @@ -0,0 +1,64 @@ +/** A base class providing auto-configuration. + + This works in conjunction with a config struct which is produced + via shema codegen. + + To use + + 1) Inherit your MyConfigurable class from + Configurable instead of directly + IConfigurable. + + 2) If migrating from old, remove configure() and + default_configure() methods. + + 3) If you configure() method held non-configuration related + initialization, it may move into configured(). + + 4) Use the protected m_cfg object to access the configuration + struct including any "service" type components "used" by yours. + + */ + + +#ifndef WIRECELLAUX_CONFIGURABLE +#define WIRECELLAUX_CONFIGURABLE + +#include "WireCellUtil/nljs2jcpp.hpp" // remove when ditch JsonCPP + +#include "WireCellIface/IConfigurable.h" + +namespace WireCell::Aux { + + template + class Configurable : public IConfigurable { + public: + using cfg_type = CfgStruct; + + // Subclass may implement in order to get post-config entry. + virtual void configured() { } + + // Subclass need not but MAY overide IF it also calls. + virtual void configure(const WireCell::Configuration& jcfg) + { + nljs_t nljs = jcfg; + m_cfg = nljs.get(); + configured(); + } + + // Subclass need not but MAY overide IF it also calls. + virtual WireCell::Configuration default_configuration() const + { + const nljs_t nljs = m_cfg; + return nljs.get(); + } + + protected: + // Subclass should use m_cfg directly. + cfg_type m_cfg; + }; + +} + + +#endif diff --git a/aux/inc/WireCellAux/DepoTools.h b/aux/inc/WireCellAux/DepoTools.h new file mode 100644 index 000000000..84aee74c6 --- /dev/null +++ b/aux/inc/WireCellAux/DepoTools.h @@ -0,0 +1,29 @@ +/** + Some helper functions operating on IDepo + */ +#ifndef WIRECELLAUX_DEPOTOOLS +#define WIRECELLAUX_DEPOTOOLS + +#include "WireCellIface/IDepo.h" +#include "WireCellUtil/Array.h" + +namespace WireCell::Aux { + + /** Fill data and info arrays from IDepoSet. + + The "data" array will be shaped (ndepos,7) and each + 7-tuple holds: (time, charge, x, y, z, long, tran). + + The "info" array is integer and shaped (nedpos, 4). Each + 4-tuple holds: (id, pdg, gen, child). + + If "priors" is true, then run the depos through flatten() in + order to save them and give non-zero gen and child. O.w., + only those depos in pass directly in the vector are saved. + */ + void fill(Array::array_xxf& data, Array::array_xxi& info, + const IDepo::vector& depos, bool priors = true); + +} + +#endif diff --git a/aux/inc/WireCellAux/FrameTools.h b/aux/inc/WireCellAux/FrameTools.h index 9103a7484..d56dcaea3 100644 --- a/aux/inc/WireCellAux/FrameTools.h +++ b/aux/inc/WireCellAux/FrameTools.h @@ -6,12 +6,19 @@ #include "WireCellIface/IFrame.h" #include "WireCellUtil/Array.h" +#include "WireCellUtil/Logging.h" namespace WireCell { - namespace aux { + namespace Aux { - // Print some info to cerr about frame - void dump_frame(WireCell::IFrame::pointer frame); + /// Return a canonical name for the frame. + std::string name(const WireCell::IFrame::pointer& frame); + + /// Print some info to cerr about frame. If log is null, use stderr. + void dump_frame(WireCell::IFrame::pointer frame, Log::logptr_t log = nullptr); + + /// Return brief info string summarizing frame and trace tag. + std::string taginfo(const WireCell::IFrame::pointer& frame); /// Return a vector of traces which have no trace tags. Here, /// any frame tags are ignored. Returned vector of traces has @@ -106,7 +113,7 @@ namespace WireCell { /// outside of any individual trace. IFrame::pointer sum(std::vector frames, int ident); - } // namespace aux + } // namespace Aux } // namespace WireCell #endif diff --git a/aux/inc/WireCellAux/Logger.h b/aux/inc/WireCellAux/Logger.h new file mode 100644 index 000000000..4c0a3c213 --- /dev/null +++ b/aux/inc/WireCellAux/Logger.h @@ -0,0 +1,79 @@ +/** A base class to help normalize logging. + + All components which log are encouraged to inherit from + Aux::Logger. + + To convert a component from using its own logger directly to + participating in named logging follow these steps. + + 1) In your .h file change: + + #include "WireCellUtil/Logging.h" + + to + + #include "WireCellAux/Logger.h" + + 2) Add "public Aux::Logger" in the class ineritance chain. + + 3) Delete the old Log::logptr_t data member from the class def. + + 4) In your .cxx constructor delete initialization of the old + logger member and initialize the base class by adding: + + Aux::Logger("TypeName", "grp") + + to the start of the constructor's initialization list. Replace + "grp" with sub-package short name or other short identifier (eg + "img" or also "glue" is conventionally used for fans regardless of + what package provides them). + + 5) At top of .cxx, add WireCell::INamed in the WIRECELL_FACTORY() + macro list of interfaces. + + 6) In body of .cxx code replace use of old data member with "log" + (if not already using that variable name). + + 7) In all message body strings remove any class identifier strings + as they are not provided by the new "log". + */ + +#ifndef WIRECELLAUX_LOGGER +#define WIRECELLAUX_LOGGER + +#include "WireCellUtil/Logging.h" +#include "WireCellIface/INamed.h" + +namespace WireCell::Aux { + + /** A logger base. + * + * This makes the component an INamed + */ + class Logger : virtual public INamed { + std::string m_iname, m_tname, m_gname; + + public: + + // Pass in the concrete configurable name such as given to + // WIRECELL_FACTORY. The group name is recomended to be the + // short sub package name (eg "gen", "sigproc" or "img"). + Logger(const std::string& type_name, + const std::string& group_name = "aux"); + virtual ~Logger(); + + // INamed interface + virtual void set_name(const std::string& name); + virtual std::string get_name() const; + + + protected: + + // Subclasses are encouraged to use this "log" instead of + // making their own. + WireCell::Log::logptr_t log; + + }; +} + +#endif diff --git a/aux/inc/WireCellAux/PlaneSelector.h b/aux/inc/WireCellAux/PlaneSelector.h new file mode 100644 index 000000000..987765b4d --- /dev/null +++ b/aux/inc/WireCellAux/PlaneSelector.h @@ -0,0 +1,47 @@ +/** + Make a new output frame selecting just traces from the configured + wire plane. + */ + +#ifndef WIRECELLAUX_PLANESELECTOR +#define WIRECELLAUX_PLANESELECTOR + +#include "WireCellIface/IFrameFilter.h" +#include "WireCellIface/IConfigurable.h" +#include "WireCellUtil/TagRules.h" +#include "WireCellAux/Logger.h" + +#include +#include +#include + +namespace WireCell::Aux { + + class PlaneSelector : public Aux::Logger, + public IFrameFilter, + public IConfigurable + { + public: + PlaneSelector(); + virtual ~PlaneSelector(); + + /// IFrameFilter interface. + virtual bool operator()(const input_pointer& in, output_pointer& out); + + /// IConfigurable interface. + virtual void configure(const WireCell::Configuration& config); + virtual WireCell::Configuration default_configuration() const; + + private: + std::vector m_tags; + tagrules::Context m_ft; + int m_count{0}; + + // The channel ident numbers we will select + std::unordered_set m_chids; + + }; + +} // namespace WireCell::Aux + +#endif diff --git a/aux/inc/WireCellAux/PlaneTools.h b/aux/inc/WireCellAux/PlaneTools.h new file mode 100644 index 000000000..8b1eb3809 --- /dev/null +++ b/aux/inc/WireCellAux/PlaneTools.h @@ -0,0 +1,22 @@ +/** Some tools that operate on anode plane related interfaces. + */ + +#ifndef WIRECELL_PLANETOOLS +#define WIRECELL_PLANETOOLS + +#include "WireCellIface/IAnodePlane.h" + +namespace WireCell { + namespace Aux { + + /// Return an ordered vector of channels for the given wire + /// plane index (in [0,1,2]). Order is "face major" in that + /// a two-faced anode will have face 0 channels first + /// followed by face 1 channels. W/in a face the order is + /// determined by the order of channels w/in the face. + IChannel::vector plane_channels(IAnodePlane::pointer anode, + int wire_plane_index); + + } +} +#endif diff --git a/aux/src/ClusterHelpers.cxx b/aux/src/ClusterHelpers.cxx new file mode 100644 index 000000000..32de6f234 --- /dev/null +++ b/aux/src/ClusterHelpers.cxx @@ -0,0 +1,238 @@ +#include "WireCellAux/ClusterHelpers.h" + +#include "WireCellIface/IChannel.h" +#include "WireCellIface/IAnodeFace.h" +#include "WireCellIface/IWire.h" +#include "WireCellIface/IBlob.h" +#include "WireCellIface/ISlice.h" +#include "WireCellIface/IFrame.h" + +#include "WireCellUtil/Units.h" +#include "WireCellUtil/String.h" + +using namespace WireCell; + +static Json::Value size_stringer(const cluster_node_t& n) { return Json::nullValue; } + +static Json::Value jpoint(const Point& p) +{ + Json::Value ret; + for (int ind = 0; ind < 3; ++ind) { + ret[ind] = p[ind]; + } + return ret; +} + +static Json::Value channel_jsoner(const cluster_node_t& n) +{ + IChannel::pointer ich = std::get(n.ptr); + Json::Value ret = Json::objectValue; + ret["ident"] = ich->ident(); + ret["index"] = ich->index(); + ret["wpid"] = ich->planeid().ident(); + return ret; +} + +static Json::Value wire_jsoner(const cluster_node_t& n) +{ + IWire::pointer iwire = std::get(n.ptr); + Json::Value ret = Json::objectValue; + ret["ident"] = iwire->ident(); + ret["index"] = iwire->index(); + ret["wpid"] = iwire->planeid().ident(); + ret["chid"] = iwire->channel(); + ret["seg"] = iwire->segment(); + auto r = iwire->ray(); + ret["tail"] = jpoint(r.first); + ret["head"] = jpoint(r.second); + return ret; +} + +// this one needs extra info +struct blob_jsoner { + double drift_speed; + + blob_jsoner(double ds) + : drift_speed(ds) + { + } + + Json::Value operator()(const cluster_node_t& n) + { + IBlob::pointer iblob = std::get(n.ptr); + IAnodeFace::pointer iface = iblob->face(); + IWirePlane::vector iplanes = iface->planes(); + IWire::pointer iwire = iplanes[2]->wires()[0]; + const double xplane = iwire->center().x(); + + // fixme: this is not a particularly portable way to go for all wire geometries. + const double xsign = iface->ident() == 0 ? 1.0 : -1.0; + + ISlice::pointer islice = iblob->slice(); + // set X based on time with knowledge of local drift + // direction as given by the face. + double x0 = xplane + xsign * (islice->start() - 250.0 * units::us) * drift_speed; // FIXME: -250us hardcoded + + const auto& coords = iface->raygrid(); + + Json::Value ret = Json::objectValue; + ret["span"] = islice->span() * drift_speed; + ret["ident"] = iblob->ident(); + ret["value"] = iblob->value(); + ret["error"] = iblob->uncertainty(); + ret["faceid"] = iblob->face()->ident(); + ret["sliceid"] = iblob->slice()->ident(); + Json::Value jcorners = Json::arrayValue; + const auto& blob = iblob->shape(); + for (const auto& c : blob.corners()) { + Json::Value j = jpoint(coords.ray_crossing(c.first, c.second)); + j[0] = x0; + jcorners.append(j); + } + ret["corners"] = jcorners; + + //-- strip info is redunant with edges connected to wire vertices. + // Json::Value jstrips = Json::arrayValue; + // for (const auto& strip : blob.strips()) { + // int plane_ind = strip.layer - 2; // fixme + // if (plane_ind <0) { continue; } + // Json ::Value j = Json::objectValue; + // j["wpid"] = iplanes[plane_ind]->planeid().ident(); + // j["planeind"] = plane_ind; + // j["wip1"] = strip.bounds.first; + // j["wip2"] = strip.bounds.second; + // Json::Value jwires = Json::arrayValue; + // const auto& wires = iplanes[plane_ind]->wires(); + // for (auto wip = strip.bounds.first; wip < strip.bounds.second; ++wip) { + // jwires.append(wires[wip]->ident()); + // } + // j["wids"] = jwires; + // jstrips.append(j); + // } + // ret["strips"] = jstrips; + + return ret; + } +}; + +static +Json::Value slice_jsoner(const cluster_node_t& n) +{ + ISlice::pointer islice = std::get(n.ptr); + Json::Value ret = Json::objectValue; + + ret["ident"] = islice->ident(); + ret["frameid"] = islice->frame()->ident(); + ret["start"] = islice->start(); + ret["span"] = islice->span(); + Json::Value jact = Json::objectValue; + for (const auto& it : islice->activity()) { + jact[String::format("%d", it.first->ident())] = it.second; + } + ret["activity"] = jact; + return ret; +} + +static +Json::Value measurement_jsoner(const cluster_node_t& n) +{ + IChannel::shared_vector ichv = std::get(n.ptr); + Json::Value ret = Json::objectValue; + Json::Value j = Json::arrayValue; + for (auto ich : *ichv) { + j.append(ich->ident()); + ret["wpid"] = ich->planeid().ident(); // last one wins, but they should all be the same + } + ret["chids"] = j; + return ret; +} + +Json::Value WireCell::Aux::jsonify(const ICluster::pointer& cluster, + double drift_speed) +{ + std::vector > jsoners{ + size_stringer, channel_jsoner, wire_jsoner, blob_jsoner(drift_speed), slice_jsoner, measurement_jsoner}; + auto asjson = [&](const cluster_node_t& n) { return jsoners[n.ptr.index()](n); }; + + /* + * - vertices :: a list of graph vertices + * - edges :: a list of graph edges + * + * A vertex is represented as a JSON object with the following attributes + * - ident :: an indexable ID number for the node, and referred to in "edges" + * - type :: the letter "code" used in ICluster: one in "sbcwm" + * - data :: an object holding information about the corresponding vertex object + * + * An edge is a pair of vertex ident numbers. + * + */ + const auto& gr = cluster->graph(); + + Json::Value jvertices = Json::arrayValue; + for (auto vtx : boost::make_iterator_range(boost::vertices(gr))) { + const auto& vobj = gr[vtx]; + if (!vobj.ptr.index()) { + // warn? + continue; + } + Json::Value jvtx = Json::objectValue; + jvtx["ident"] = (int) vtx; + jvtx["type"] = String::format("%c", vobj.code()); + jvtx["data"] = asjson(vobj); + + jvertices.append(jvtx); + } + + Json::Value jedges = Json::arrayValue; + for (auto eit : boost::make_iterator_range(boost::edges(gr))) { + Json::Value jedge = Json::arrayValue; + jedge[0] = (int) boost::source(eit, gr); + jedge[1] = (int) boost::target(eit, gr); + jedges.append(jedge); + } + + Json::Value top = Json::objectValue; + top["vertices"] = jvertices; + top["edges"] = jedges; + + return top; +} + +// maybe useful to export +ISlice::vector WireCell::Aux::find_slices(const ICluster::pointer& cluster) +{ + ISlice::vector ret; + const auto& gr = cluster->graph(); + for (auto vtx : boost::make_iterator_range(boost::vertices(gr))) { + const auto& vobj = gr[vtx]; + if (vobj.ptr.index() != 4) { + continue; + } + + ISlice::pointer islice = std::get(vobj.ptr); + ret.push_back(islice); + } + return ret; +} + +IFrame::pointer WireCell::Aux::find_frame(const ICluster::pointer& cluster) +{ + const auto& gr = cluster->graph(); + for (auto vtx : boost::make_iterator_range(boost::vertices(gr))) { + const auto& vobj = gr[vtx]; + if (vobj.ptr.index() != 4) { + continue; + } + + ISlice::pointer islice = std::get(vobj.ptr); + return islice->frame(); + } + return nullptr; +} + +std::string WireCell::Aux::name(const ICluster::pointer& cluster) +{ + std::stringstream ss; + ss << "cluster_" << cluster->ident(); + return ss.str(); +} diff --git a/aux/src/DepoTools.cxx b/aux/src/DepoTools.cxx new file mode 100644 index 000000000..d8fd7dfc0 --- /dev/null +++ b/aux/src/DepoTools.cxx @@ -0,0 +1,89 @@ +#include "WireCellAux/DepoTools.h" + +using namespace WireCell; + + +// perhaps this should be exported? +struct DepoGenChild { + IDepo::pointer depo; + size_t gen, child; +}; +using DepoGenChilds = std::vector; + + +static void push_depo(DepoGenChilds& dp, + IDepo::pointer depo, + size_t gen = 0, size_t childid = 0) +{ + dp.emplace_back(DepoGenChild{depo, gen, childid}); + auto prior = depo->prior(); + if (!prior) { + return; + } + push_depo(dp, prior, gen + 1, dp.size()); +} + + +static +DepoGenChilds flatten(const IDepo::vector& depos) +{ + DepoGenChilds ret; + for (auto depo : depos) { + push_depo(ret, depo); + } + return ret; +} + + +static +DepoGenChilds fake_flatten(const IDepo::vector& depos) +{ + DepoGenChilds ret; + for (auto depo : depos) { + ret.push_back(DepoGenChild{depo, 0,0}); + } + return ret; +} + + +void Aux::fill(Array::array_xxf& data, Array::array_xxi& info, + const IDepo::vector& your_depos, bool prior) +{ + DepoGenChilds fdepos; + if (prior) { + fdepos = flatten(your_depos); + } + else { + fdepos = fake_flatten(your_depos); + } + + const size_t nfdepos = fdepos.size(); + + size_t nrows = fdepos.size(); + + // time, charge, x, y, z, dlong, dtran + const size_t ndata = 7; + data = Array::array_xxf::Zero(nrows, ndata); + + // ID, pdg, gen, child + const size_t ninfo = 4; + info = Array::array_xxi::Zero(nrows, ninfo); + + for (size_t idepo = 0; idepo != nfdepos; ++idepo) { + const auto& depogc = fdepos[idepo]; + const auto& depo = depogc.depo; + data(idepo, 0) = depo->time(); + data(idepo, 1) = depo->charge(); + data(idepo, 2) = depo->pos().x(); + data(idepo, 3) = depo->pos().y(); + data(idepo, 4) = depo->pos().z(); + data(idepo, 5) = depo->extent_long(); + data(idepo, 6) = depo->extent_tran(); + info(idepo, 0) = depo->id(); + info(idepo, 1) = depo->pdg(); + info(idepo, 2) = depogc.gen; + info(idepo, 3) = depogc.child; + } + +} + diff --git a/aux/src/FrameTools.cxx b/aux/src/FrameTools.cxx index 7e79b4ddb..0261302f5 100644 --- a/aux/src/FrameTools.cxx +++ b/aux/src/FrameTools.cxx @@ -9,13 +9,26 @@ #include #include #include +#include using namespace WireCell; -int aux::frmtcmp(IFrame::pointer frame, double time) +std::string Aux::name(const WireCell::IFrame::pointer& frame) +{ + if (!frame) { + return "(null frame)"; + } + + std::stringstream ss; + ss << "frame_" << frame->ident(); + return ss.str(); + +} + +int Aux::frmtcmp(IFrame::pointer frame, double time) { auto traces = frame->traces(); - auto tbin_mm = aux::tbin_range(*traces.get()); + auto tbin_mm = Aux::tbin_range(*traces.get()); const double tref = frame->time(); const double tick = frame->tick(); @@ -30,8 +43,11 @@ int aux::frmtcmp(IFrame::pointer frame, double time) } return 0; } -std::pair aux::split(IFrame::pointer frame, double time) +std::pair Aux::split(IFrame::pointer frame, double time) { + if (!frame) { + return std::pair(nullptr, nullptr); + } int cmp = frmtcmp(frame, time); if (cmp < 0) { return std::pair(frame, nullptr); @@ -82,8 +98,12 @@ std::pair aux::split(IFrame::pointer frame, do return std::pair(mframe, pframe); } -ITrace::vector aux::untagged_traces(IFrame::pointer frame) +ITrace::vector Aux::untagged_traces(IFrame::pointer frame) { + ITrace::vector ret; + if (!frame) { + return ret; + } auto traces = frame->traces(); size_t ntraces = traces->size(); @@ -96,19 +116,21 @@ ITrace::vector aux::untagged_traces(IFrame::pointer frame) std::iota(all.begin(), all.end(), 0); std::set_difference(all.begin(), all.end(), tagged.begin(), tagged.end(), std::inserter(untagged, untagged.begin())); - ITrace::vector ret; for (size_t ind : untagged) { ret.push_back(traces->at(ind)); } return ret; } -ITrace::vector aux::tagged_traces(IFrame::pointer frame, IFrame::tag_t tag) +ITrace::vector Aux::tagged_traces(IFrame::pointer frame, IFrame::tag_t tag) { + ITrace::vector ret; + if (!frame) { + return ret; + } if (tag == "") { return untagged_traces(frame); } - ITrace::vector ret; auto const& all_traces = frame->traces(); for (size_t index : frame->tagged_traces(tag)) { ret.push_back(all_traces->at(index)); @@ -123,17 +145,17 @@ ITrace::vector aux::tagged_traces(IFrame::pointer frame, IFrame::tag_t tag) return *all_traces; // must make copy of shared pointers } -aux::channel_list aux::channels(const ITrace::vector& traces) +Aux::channel_list Aux::channels(const ITrace::vector& traces) { const auto nchans = traces.size(); - aux::channel_list ret(nchans, 0); + Aux::channel_list ret(nchans, 0); for (size_t ind = 0; ind != nchans; ++ind) { ret[ind] = traces[ind]->channel(); } return ret; } -std::pair aux::tbin_range(const ITrace::vector& traces) +std::pair Aux::tbin_range(const ITrace::vector& traces) { const auto siz = traces.size(); std::vector tbins(siz), tlens(siz); @@ -147,7 +169,7 @@ std::pair aux::tbin_range(const ITrace::vector& traces) *std::max_element(tlens.begin(), tlens.end())); } -void aux::fill(Array::array_xxf& array, const ITrace::vector& traces, channel_list::iterator chit, +void Aux::fill(Array::array_xxf& array, const ITrace::vector& traces, channel_list::iterator chit, channel_list::iterator chend, int tbin) { std::unordered_map index; @@ -192,8 +214,31 @@ void aux::fill(Array::array_xxf& array, const ITrace::vector& traces, channel_li } -void aux::dump_frame(WireCell::IFrame::pointer frame) +std::string Aux::taginfo(const WireCell::IFrame::pointer& frame) +{ + std::stringstream info; + info << "frame " << frame->ident() << " with " + << frame->traces()->size() << " traces tagged:[ "; + for (const auto& tag : frame->frame_tags()) { + info << tag << " "; + } + + auto ttags = frame->trace_tags(); + info << "] " << ttags.size() << " traces:[ "; + + for (const auto& tag : ttags) { + const auto& taglist = frame->tagged_traces(tag); + info << tag << ":" << taglist.size() << " "; + } + info << "]"; + return info.str(); +} + + +void Aux::dump_frame(WireCell::IFrame::pointer frame, Log::logptr_t log) { + std::stringstream info; + auto traces = frame->traces(); const size_t ntraces = traces->size(); std::vector means, rmses, lengths, tbins; @@ -208,16 +253,16 @@ void aux::dump_frame(WireCell::IFrame::pointer frame) tbins.push_back(trace->tbin()); if (std::isnan(mr.second)) { - std::cerr << "Frame: channel " << trace->channel() << " rms is NaN\n"; + info << "Frame: channel " << trace->channel() << " rms is NaN\n"; } for (int ind = 0; ind < nsamps; ++ind) { float val = charge[ind]; if (std::isnan(val)) { - std::cerr << "Frame: channel " << trace->channel() << " sample " << ind << " is NaN\n"; + info << "Frame: channel " << trace->channel() << " sample " << ind << " is NaN\n"; } if (std::isinf(val)) { - std::cerr << "Frame: channel " << trace->channel() << " sample " << ind << " is INF\n"; + info << "Frame: channel " << trace->channel() << " sample " << ind << " is INF\n"; } } } @@ -225,15 +270,21 @@ void aux::dump_frame(WireCell::IFrame::pointer frame) double totrms = sqrt(Waveform::sum(rmses)); double meanlen = Waveform::sum(lengths) / ntraces; double meantbin = Waveform::sum(tbins) / ntraces; - std::cerr << "Frame: " << ntraces << " traces," - << " =" << meanmean << " TotRMS=" << totrms << " =" << meantbin << " =" << meanlen - << std::endl; + info << "Frame: " << ntraces << " traces," + << " =" << meanmean << " TotRMS=" << totrms << " =" << meantbin << " =" << meanlen + << "\n"; for (auto it : frame->masks()) { - std::cerr << "\t" << it.first << " : " << it.second.size() << std::endl; + info << "\t" << it.first << " : " << it.second.size() << "\n"; + } + if (log) { + log->debug(info.str()); + } + else { + std::cerr << info.str(); } } -void aux::raster(WireCell::Array::array_xxf& block, WireCell::ITrace::vector traces, +void Aux::raster(WireCell::Array::array_xxf& block, WireCell::ITrace::vector traces, const std::vector& channels) { const size_t nchannels = channels.size(); @@ -271,7 +322,7 @@ void aux::raster(WireCell::Array::array_xxf& block, WireCell::ITrace::vector tra typedef std::pair*> tbin_charge_t; typedef std::map > channel_index_t; -IFrame::pointer aux::sum(std::vector frames, int ident) +IFrame::pointer Aux::sum(std::vector frames, int ident) { // Extract starting times and ticks of all frames const int nframes = frames.size(); diff --git a/aux/src/Logger.cxx b/aux/src/Logger.cxx new file mode 100644 index 000000000..38e695ebf --- /dev/null +++ b/aux/src/Logger.cxx @@ -0,0 +1,51 @@ +#include "WireCellAux/Logger.h" + +#include + +using namespace WireCell; + +Aux::Logger::Logger(const std::string& type_name, + const std::string& group_name) + : m_iname("") + , m_tname(type_name) + , m_gname(group_name) + , log(Log::logger(group_name)) // this will likely get a logger with shared sinks +{ +} + +Aux::Logger::~Logger() {} + +static +std::string centered(std::string s, size_t target, char space = ' ') +{ + for (size_t now = s.size(); now < target; ++now) { + if (now%2) { + s.insert(s.end(), space); + } + else { + s.insert(s.begin(), space); + } + } + return s; +} + +void Aux::Logger::set_name(const std::string& name) +{ + m_iname = name; + + std::string lname = m_gname + "/" + m_tname + ":" + m_iname; + + log = Log::logger(lname, false); // uniqe sinks so we can set unique pattern + + std::stringstream ss; + ss << "[%H:%M:%S.%03e] %L [" << centered(m_gname, 8) << "] <" << m_tname << ":" << m_iname << "> %v"; + + log->set_pattern(ss.str()); + + log->debug("logging to \"{}\"", lname); +} + +std::string Aux::Logger::get_name() const +{ + return m_iname; +} diff --git a/aux/src/PlaneSelector.cxx b/aux/src/PlaneSelector.cxx new file mode 100644 index 000000000..924c4d62e --- /dev/null +++ b/aux/src/PlaneSelector.cxx @@ -0,0 +1,159 @@ +#include "WireCellAux/PlaneSelector.h" +#include "WireCellIface/SimpleFrame.h" +#include "WireCellIface/IAnodePlane.h" +#include "WireCellAux/FrameTools.h" +#include "WireCellAux/PlaneTools.h" + +#include "WireCellUtil/NamedFactory.h" + +#include + +WIRECELL_FACTORY(PlaneSelector, WireCell::Aux::PlaneSelector, + WireCell::IFrameFilter, WireCell::IConfigurable) + +using namespace WireCell; + +Aux::PlaneSelector::PlaneSelector() + : Aux::Logger("PlaneSelector", "glue") +{ +} + +Aux::PlaneSelector::~PlaneSelector() {} + +WireCell::Configuration Aux::PlaneSelector::default_configuration() const +{ + Configuration cfg; + + /// The anode to match + cfg["anode"] = "AnodePlane"; + + /// The plane number. Currently this is interpreted as the plane + /// index in [0,1,2]. For 2-faced anodes, this will select + /// channels with this plane index from both faces in face-minor + /// order (first face 0 channels then face 1 channels). + cfg["plane"] = 0; + + // A future extension may add a "method" config parameter which is + // used to interpret "plane" number against "ident", "ilayer" or + // "index" (which "index" being the default and current + // interpretation). + + /// Input trace tags to consider for selection. If this list is + /// empty, all traces are considered for selection and all input + /// tags will be transfered via tag rules. If tags are given then + /// only input traces of these tags are considered. + cfg["tags"] = Json::arrayValue; + + /// Rules to govern the output frame and trace tags based on input + /// frame and trace tags. There is no map from input frame or + /// trace tags then it will be kept for the output frame or trace + /// tag. + cfg["tag_rules"] = Json::arrayValue; + + return cfg; +} + +void Aux::PlaneSelector::configure(const WireCell::Configuration& cfg) +{ + int wire_plane_index = get(cfg, "plane", 0); + + // We only need the anode temporarily to build set of channel IDs + // that we care about. + std::string anode_tn = get(cfg, "anode", "AnodePlane"); + auto anode = Factory::find_tn(anode_tn); + auto chans = Aux::plane_channels(anode, wire_plane_index); + m_chids.clear(); + for (const auto& ichan : chans) { + m_chids.insert(ichan->ident()); + } + { + auto chmm = std::minmax_element(m_chids.begin(), m_chids.end()); + log->debug("anode={} plane={} nchans={} in=[{},{}]", + anode_tn, wire_plane_index, m_chids.size(), + *chmm.first, *chmm.second); + } + + auto jtags = cfg["tags"]; + m_tags.clear(); + for (auto jtag : cfg["tags"]) { + m_tags.push_back(jtag.asString()); + } + + auto tr = cfg["tag_rules"]; + m_ft.configure(tr); +} + + +bool Aux::PlaneSelector::operator()(const input_pointer& in, + output_pointer& out) +{ + out = nullptr; + if (!in) { + log->debug("see EOS at call={}", m_count); + ++m_count; + return true; // eos + } + + IFrame::tag_list_t my_tags = m_tags; + if (my_tags.empty()) { + my_tags = in->trace_tags(); + my_tags.push_back(""); // marker for "untagged traces" + } + + ITrace::vector out_traces; + std::map tagged_indices; + + for (const auto& my_tag : my_tags) { + ITrace::vector traces; + if (my_tag.empty()) { + traces = Aux::untagged_traces(in); + } + else { + traces = Aux::tagged_traces(in, my_tag); + } + + IFrame::trace_list_t indices; + for (auto itrace : traces) { + int chid = itrace->channel(); + if (m_chids.find(chid) == m_chids.end()) { + continue; + } + indices.push_back(out_traces.size()); + out_traces.push_back(itrace); + } + + auto new_tags = m_ft.transform(0, "trace", {my_tag}); + if (new_tags.empty()) { + log->debug("call={} no transform, keeping input tag: {}", m_count, my_tag); + new_tags.insert(my_tag); + } + for (auto new_tag : new_tags) { + tagged_indices[new_tag] = indices; + } + } + + auto sf = new SimpleFrame(in->ident(), in->time(), out_traces, in->tick()); + for (auto& [new_tag,indices] : tagged_indices) { + sf->tag_traces(new_tag, indices); + } + + std::vector frame_tags = in->frame_tags(); + if (frame_tags.empty()) { + frame_tags.push_back(""); + } + auto new_tags = m_ft.transform(0, "frame", frame_tags); + for (auto new_tag : new_tags) { + if (new_tag.empty()) { + continue; + } + sf->tag_frame(new_tag); + } + out = IFrame::pointer(sf); + + log->debug("call={} input {}", m_count, Aux::taginfo(in)); + log->debug("call={} output {}", m_count, Aux::taginfo(out)); + + ++m_count; + return true; +} + diff --git a/aux/src/PlaneTools.cxx b/aux/src/PlaneTools.cxx new file mode 100644 index 000000000..a871fb291 --- /dev/null +++ b/aux/src/PlaneTools.cxx @@ -0,0 +1,25 @@ +#include "WireCellAux/PlaneTools.h" + +using namespace WireCell; + +IChannel::vector Aux::plane_channels(IAnodePlane::pointer anode, + int wire_plane_index) +{ + IChannel::vector ret; + for (auto face : anode->faces()) { + if (!face) { // A null face means one sided AnodePlane. + continue; // Can be "back" or "front" face. + } + for (auto plane : face->planes()) { + if (wire_plane_index != plane->planeid().index()) { + continue; + } + // These IChannel vectors are ordered in same order as wire-in-plane. + const auto& ichans = plane->channels(); + // Append + ret.reserve(ret.size() + ichans.size()); + ret.insert(ret.end(), ichans.begin(), ichans.end()); + } + } + return ret; +} diff --git a/aux/src/TaggedFrameTensorSet.cxx b/aux/src/TaggedFrameTensorSet.cxx index 220557b83..2c12a697b 100644 --- a/aux/src/TaggedFrameTensorSet.cxx +++ b/aux/src/TaggedFrameTensorSet.cxx @@ -50,7 +50,7 @@ bool Aux::TaggedFrameTensorSet::operator()(const input_pointer& in, output_point continue; } - auto traces = aux::tagged_traces(in, tag); + auto traces = Aux::tagged_traces(in, tag); if (traces.empty()) { log->warn("Frame->Tensor: no traces for tag '{}', skipping", tag); continue; @@ -60,7 +60,7 @@ bool Aux::TaggedFrameTensorSet::operator()(const input_pointer& in, output_point float pad = get(jten, "pad", 0.0); - auto mm_tbin = aux::tbin_range(traces); + auto mm_tbin = Aux::tbin_range(traces); int tbin0 = mm_tbin.first; // traces may be degenerate/overlapping in channels and ticks. diff --git a/aux/test/test_frameutil.cxx b/aux/test/test_frameutil.cxx index a321fff64..1fe5970b0 100644 --- a/aux/test/test_frameutil.cxx +++ b/aux/test/test_frameutil.cxx @@ -33,7 +33,7 @@ int main() auto f2 = make_shared(noise_frame_ident, noise_start_time, noise_traces, tick); const int summed_ident = 1; - auto f3 = aux::sum({f1, f2}, summed_ident); + auto f3 = Aux::sum({f1, f2}, summed_ident); Assert(f3); Assert(f3->ident() == summed_ident); Assert(f3->time() == noise_start_time); diff --git a/aux/test/test_planetools.cxx b/aux/test/test_planetools.cxx new file mode 100644 index 000000000..85adf08e1 --- /dev/null +++ b/aux/test/test_planetools.cxx @@ -0,0 +1,54 @@ +#include "WireCellUtil/PluginManager.h" +#include "WireCellUtil/Persist.h" +#include "WireCellUtil/NamedFactory.h" +#include "WireCellIface/IConfigurable.h" +#include "WireCellIface/IAnodePlane.h" +#include "WireCellAux/PlaneTools.h" + +#include +#include +#include + +using namespace WireCell; + +int main() +{ + auto params = Persist::load("pgrapher/experiment/pdsp/params.jsonnet"); + + PluginManager& pm = PluginManager::instance(); + pm.add("WireCellGen"); + { + auto icfg = Factory::lookup_tn("WireSchemaFile"); + auto cfg = icfg->default_configuration(); + cfg["filename"] = "protodune-wires-larsoft-v4.json.bz2"; + icfg->configure(cfg); + } + { + auto icfg = Factory::lookup_tn("AnodePlane"); + auto cfg = icfg->default_configuration(); + cfg["ident"] = 0; + cfg["wire_schema"] ="WireSchemaFile"; + cfg["faces"] = params["det"]["volumes"][0]["faces"]; + icfg->configure(cfg); + } + + auto anode = Factory::find_tn("AnodePlane"); + assert(anode); + + const std::vector sizes{800,800,960}; + + for (int wpi=0; wpi<3; ++wpi) { + auto ichans = Aux::plane_channels(anode, wpi); + std::cerr << wpi << " " << ichans.size() << "\n"; + assert (ichans.size() == sizes[wpi]); + std::unordered_set chanset; + for (auto ichan : ichans) { + std::cerr << ichan->ident() << " "; + chanset.insert(ichan->ident()); + } + assert (chanset.size() == sizes[wpi]); // no dupes! + std::cerr << "\n"; + } + + return 0; +} diff --git a/cfg/cfgschema.jsonnet b/cfg/cfgschema.jsonnet new file mode 100644 index 000000000..92d139166 --- /dev/null +++ b/cfg/cfgschema.jsonnet @@ -0,0 +1,43 @@ +/** Support for defining component configuration object schema. + +Each configurable component shall define a schema for a record it +expects to receieve as configuration. + +Each schema is defined in a namespace patterened after the package +name and the component class name. + +*/ + +local moo = import "moo.jsonnet"; + +// the main output object: +function (pkg, comp) { + + // Set path convention incorporating package and component names. + // + // This reflects in things outside of codegen control so do not + // change it unless you really know what you are getting into. + // local fs_path = ["WireCell" + pkg, "Cfg"], + local ns_path = ["WireCell", pkg, "Cfg", comp], + + // A schema factory used to make types "in" a package namespace. + // Use this in a "working object" context to define needed final + // schema using local object keys to refer to intermediate schema. + // A configurable component should use the component() function to + // make a special record representing. If the component is also a + // node, it should use node() + schema :: moo.oschema.schema(ns_path) { + local s = self, + + // make a configurable component record enforcing its type name + component(fields, doc="") :: s.record("Config", fields, doc=doc), + }, + + // Call this on the "working object" to produce final schema + // sequence. Note, if any types outside the path are referred to + // by types in hier, they must be prepended to the type sequence + // returned by build() prior to final output. + build(hier) :: moo.oschema.sort_select(hier, ns_path), +} + + diff --git a/cfg/pgraph.jsonnet b/cfg/pgraph.jsonnet index 956e19a13..20523c3b4 100644 --- a/cfg/pgraph.jsonnet +++ b/cfg/pgraph.jsonnet @@ -296,5 +296,29 @@ local wc = import "wirecell.jsonnet"; [$.edge(fanout, pipelines[n], n, 0) for n in std.range(0, fanmult-1)], name=name), }.ret, + + + // A "tap" is a sink which is adapted to look like a filter + // via a 2-way fanout. The "fout" names the fanout type and + // the "sink" is a full pnode. + tap :: function(fout, sink, name="tap", tag_rules=[]) { + local fanout = $.pnode({ + type: fout, + name: name, + data: { + multiplicity: 2, + tag_rules: tag_rules, + }, + }, nin=1, nout=2), + + ret: $.intern(innodes=[fanout], + outnodes=[fanout], + centernodes=[sink], + edges=[$.edge(fanout, sink, 1, 0)], + name=name), + }.ret, + + }, // fan + } diff --git a/cfg/pgrapher/common/helpers.jsonnet b/cfg/pgrapher/common/helpers.jsonnet new file mode 100644 index 000000000..6f1eff549 --- /dev/null +++ b/cfg/pgrapher/common/helpers.jsonnet @@ -0,0 +1,11 @@ +// This merely collects individual helpers +{ + gen: import "helpers/gen.jsonnet", + aux: import "helpers/aux.jsonnet", + io: import "helpers/io.jsonnet", + utils: import "helpers/utils.jsonnet", + nf :: import "helpers/nf.jsonnet", + sp :: import "helpers/sp.jsonnet", + dnnroi :: import "helpers/dnnroi.jsonnet", +} + diff --git a/cfg/pgrapher/common/helpers/aux.jsonnet b/cfg/pgrapher/common/helpers/aux.jsonnet new file mode 100644 index 000000000..0aa977a4a --- /dev/null +++ b/cfg/pgrapher/common/helpers/aux.jsonnet @@ -0,0 +1,62 @@ +// Helper functions to build configuration objects for "auxiliary" +// components. For now, you may find these actually implemented in +// "gen" or "sigproc" but are used elsewhere and really should be +// moved into "aux" or another, generic plugin. + +local wc = import "wirecell.jsonnet"; + +{ + // Configure "wire" geometry and channel map to load from file + wires(filename) :: { + type:"WireSchemaFile", + name: filename, + data: {filename: filename} + }, + + // Define array of anode configurations in terms of wires and over + // volumes (eg, as found at params.vols) + anodes(wires, volumes) :: [ { + type: "AnodePlane", + name: "%d" % vol.wires, + data: { + ident: vol.wires, + wire_schema: wc.tn(wires), + faces: vol.faces, + }, + uses: [wires] + } for vol in volumes], + + + // Configure a field respones object by filename. + fr(filename) :: { + type: "FieldResponse", + name: filename, + data: { filename: filename } + }, + + // Configure a "short" response for cold electronics model + cer(shaping, gain, postgain, nticks, tick=0.5*wc.us, name="") :: + { + type: "ColdElecResponse", + name: "", // some dets may have more than 1 + data: { + shaping: shaping, + gain: gain, + postgain: postgain, + nticks: nticks, + tick: tick, + }, + }, + + // Configure "long" RC response + rc(width, nticks, tick=0.5*wc.us, name="") :: { + type: "RCResponse", + name: name, + data: { + width: width, + nticks: nticks, + tick: tick, + } + }, + +} diff --git a/cfg/pgrapher/common/helpers/dnnroi.jsonnet b/cfg/pgrapher/common/helpers/dnnroi.jsonnet new file mode 100644 index 000000000..2fc1a116f --- /dev/null +++ b/cfg/pgrapher/common/helpers/dnnroi.jsonnet @@ -0,0 +1,84 @@ +// This produces a function to configure DNN-ROI for one APA given +// anode and torch service (ts) objects. +// +// The prefix is prepended to all internal node names if uniqueness +// beyond anode ID is needed. The output_scale allows for an ad-hoc +// scaling of dnnroi output. The U and W planes will go through +// dnnroi while hte W plane will be shunted. What comes out will be a +// unified frame with frame tag "dnnspN" where "N" is the anode ID. + +local wc = import "wirecell.jsonnet"; +local pg = import "pgraph.jsonnet"; + + +function (anode, ts, prefix="dnnroi", output_scale=1.0) + local apaid = anode.data.ident; + local prename = prefix + std.toString(apaid); + local intags = ['loose_lf%d'%apaid, 'mp2_roi%d'%apaid, + 'mp3_roi%d'%apaid]; + + local dnnroi_u = pg.pnode({ + type: "DNNROIFinding", + name: prename+"u", + data: { + anode: wc.tn(anode), + plane: 0, + intags: intags, + decon_charge_tag: "decon_charge%d" %apaid, + outtag: "dnnsp%du"%apaid, + output_scale: output_scale, + forward: wc.tn(ts) + } + }, nin=1, nout=1, uses=[ts, anode]); + local dnnroi_v = pg.pnode({ + type: "DNNROIFinding", + name: prename+"v", + data: { + anode: wc.tn(anode), + plane: 1, + intags: intags, + decon_charge_tag: "decon_charge%d" %apaid, + outtag: "dnnsp%dv"%apaid, + output_scale: output_scale, + forward: wc.tn(ts) + } + }, nin=1, nout=1, uses=[ts, anode]); + local dnnroi_w = pg.pnode({ + type: "PlaneSelector", + name: prename+"w", + data: { + anode: wc.tn(anode), + plane: 2, + tags: ["gauss%d"%apaid], + tag_rules: [{ + frame: {".*":"DNNROIFinding"}, + trace: {["gauss%d"%apaid]:"dnnsp%dw"%apaid}, + }], + } + }, nin=1, nout=1, uses=[anode]); + + local dnnpipes = [dnnroi_u, dnnroi_v, dnnroi_w]; + local dnnfanout = pg.pnode({ + type: "FrameFanout", + name: prename, + data: { + multiplicity: 3 + } + }, nin=1, nout=3); + + local dnnfanin = pg.pnode({ + type: "FrameFanin", + name: prename, + data: { + multiplicity: 3, + tag_rules: [{ + frame: {".*": "dnnsp%d" % apaid}, + } for plane in ["u", "v", "w"]] + }, + }, nin=3, nout=1); + + pg.intern(innodes=[dnnfanout], + outnodes=[dnnfanin], + centernodes=dnnpipes, + edges=[pg.edge(dnnfanout, dnnpipes[ind], ind, 0) for ind in [0,1,2]] + + [pg.edge(dnnpipes[ind], dnnfanin, 0, ind) for ind in [0,1,2]]) diff --git a/cfg/pgrapher/common/helpers/gen.jsonnet b/cfg/pgrapher/common/helpers/gen.jsonnet new file mode 100644 index 000000000..9bbaa6611 --- /dev/null +++ b/cfg/pgrapher/common/helpers/gen.jsonnet @@ -0,0 +1,170 @@ +// Helpers to make configuration objects for components in the "gen" +// package. See also aux.jsonnet. + +local wc = import "wirecell.jsonnet"; +local pg = import "pgraph.jsonnet"; +local u = import "utils.jsonnet"; + +{ + default_seeds: [0, 1, 2, 3, 4], + + /// Configure a random generator + random(seeds = $.default_seeds, generator="default") :: { + type: "Random", + name: generator + "-" + + std.join('-', std.map(std.toString,seeds)), + data: { + generator: generator, + seeds: seeds, + } + }, + + /// Source of depos from ideal lines of ionization + track_depos(tracks, name="", step=1.0*wc.mm) :: pg.pnode({ + type: "TrackDepos", + name: name, + data: { + step_size: step, + tracks: tracks, + } + }, nin=0, nout=1), + + + /// Make a drifter for all volumes. If loadby="set" we use the + /// depo set drifter and call this function again recursively to + /// make the "singular" drifter. Note: singular depos can lead to + /// a pathological slowdown in Pgrapher execution (TbbFlow is + /// okay). + drifter(vols, lar, rnd=$.random(), time_offset=0, + fluctuate=true, loadby="set") :: + if loadby=="set" + then pg.pnode({ + type: 'DepoSetDrifter', + data: { + drifter: "Drifter" + } + }, nin=1, nout=1, uses=[$.drifter(vols, lar, rnd, + time_offset, fluctuate, + "singular")]) + else pg.pnode({ + local xregions = wc.unique_list(std.flattenArrays([ + v.faces for v in vols])), + + type: "Drifter", + data: lar { + rng: wc.tn(rnd), + xregions: xregions, + time_offset: time_offset, + fluctuate: fluctuate, + }, + }, nin=1, nout=1, uses=[rnd]), + + // Collect individual depos into a set. See commen about singular + // depos. + bagger(daq) :: pg.pnode({ + type:'DepoBagger', + data: { + gate: [0, daq.nticks*daq.tick], + }, + }, nin=1, nout=1), + + + // see aux.jsonnet for individual responses + + // Return "PlaneImpactResponse" objects for all planes. + // fr is a field response object (see fr() above). + // srs is list of "short response" config objects, eg cer() + // lrs is list of "long response" config objects, eg rc() + pirs(fr, srs, lrs) :: [ { + type: "PlaneImpactResponse", + name : std.toString(plane), + data : { + plane: plane, + field_response: wc.tn(fr), + short_responses: [wc.tn(r) for r in srs], + // this needs to be big enough for convolving FR*CE + overall_short_padding: 200*wc.us, + long_responses: [wc.tn(r) for r in lrs], + // this needs to be big enough to convolve RC + long_padding: 1.5*wc.ms, + }, + uses: [fr] + srs + lrs, + } for plane in [0,1,2]], + + // signal simulation + signal(anode, pirs, daq, lar, rnd=$.random()) :: + pg.pipeline([ + pg.pnode({ + type:'DepoTransform', + name: u.idents(anode), + data: { + rng: wc.tn(rnd), + anode: wc.tn(anode), + pirs: [wc.tn(p) for p in pirs], + fluctuate: true, + drift_speed: lar.drift_speed, + first_frame_number: 0, + readout_time: daq.nticks*daq.tick, + start_time: 0, + tick: daq.tick, + nsigma: 3, + }, + }, nin=1, nout=1, uses=pirs + [anode, rnd]), + + pg.pnode({ + type: 'Reframer', + name: u.idents(anode), + data: { + anode: wc.tn(anode), + tags: [], + fill: 0.0, + tbin: 0, + toffset: 0, + nticks: daq.nticks, + }, + }, nin=1, nout=1, uses=[anode])]), + + + // Return a frame filter config that will add in noise. + noise(anode, filename, daq, chstat=null, rnd=$.random()) :: + local cs = if std.type(chstat) == "null" + then {tn:"", uses:[]} + else {tn:wc.tn(chstat), uses:[chstat]}; + local noise_model = { + type: "EmpiricalNoiseModel", + name: u.idents(anode), + data: { + anode: wc.tn(anode), + chanstat: cs.tn, + spectra_file: filename, + nsamples: daq.nticks, + period: daq.tick, + wire_length_scale: 1.0*wc.cm, // optimization binning + }, + uses: [anode] + cs.uses, + }; + + pg.pnode({ + type: "AddNoise", + name: noise_model.name, + data: { + rng: wc.tn(rnd), + model: wc.tn(noise_model), + nsamples: daq.nticks, + replacement_percentage: 0.02, // random optimization + }}, nin=1, nout=1, uses=[rnd, noise_model]), + + + // digitizer simulation + digi(anode, adc) :: + local apaid = anode.data.ident; + pg.pnode({ + type: "Digitizer", + name: '%d' % apaid, + data : adc { + anode: wc.tn(anode), + frame_tag: "orig%d"%apaid, + } + }, nin=1, nout=1, uses=[anode]), + +} diff --git a/cfg/pgrapher/common/helpers/io.jsonnet b/cfg/pgrapher/common/helpers/io.jsonnet new file mode 100644 index 000000000..77cf5413b --- /dev/null +++ b/cfg/pgrapher/common/helpers/io.jsonnet @@ -0,0 +1,40 @@ +// Helpers to make configuration objects for file input/output +// components. + +local pg = import "pgraph.jsonnet"; + +{ + // If a frame is written out "dense" it the sink needs to know + // what the bounds are in channel IDs (rows) and ticks (columns). + frame_bounds(nchannels, nticks, first_chid=0, first_tick=0) :: { + chbeg: first_chid, chend: first_chid+nchannels, + tbbeg: first_tick, tbend: first_tick+nticks + }, + + /// Sink a stream of frames to file. + frame_file_sink(filename, tags=[], + digitize=false, dense=null) :: + pg.pnode({ + type: "FrameFileSink", + name: filename, + data: { + outname: filename, + tags: tags, + digitize: digitize, + dense: dense, + }, + }, nin=1, nout=0), + + + + // Like a frame_file_sink but pass input frames both to output + // port 0 and to a sink. + frame_file_tap(filename, tags=[], digitize=false, dense=null) :: + pg.fan.tap('FrameFanout', + $.frame_file_sink(filename, + tags=tags, + digitize=digitize, + dense=dense), filename), + + +} diff --git a/cfg/pgrapher/common/helpers/nf.jsonnet b/cfg/pgrapher/common/helpers/nf.jsonnet new file mode 100644 index 000000000..9c666f1b1 --- /dev/null +++ b/cfg/pgrapher/common/helpers/nf.jsonnet @@ -0,0 +1,43 @@ +local wc = import "wirecell.jsonnet"; +local pg = import "pgraph.jsonnet"; +local u = import "utils.jsonnet"; + +function(anode, fr, chndb, nsamples, tick=0.5*wc.us, rms_cuts=[]) + local single = { + type: 'pdOneChannelNoise', + name: u.idents(anode), + data: { + noisedb: wc.tn(chndb), + anode: wc.tn(anode), + resmp: [ + ], + }, + }; + // In principle there may be multiple filters of each of each + // type. Define them above and collect them by type here. + local filters = { + channel: [ single, ], + group: [ ], + status: [ ], + }; + // return value + pg.pnode({ + local name = u.idents(anode), + type: 'OmnibusNoiseFilter', + name: name, + data: { + // Nonzero forces the number of ticks in the waveform + nticks: 0, + // channel bin ranges are ignored + // only when the channelmask is merged to `bad` + maskmap: {sticky: "bad", ledge: "bad", noisy: "bad"}, + channel_filters: [wc.tn(f) for f in filters.channel], + grouped_filters: [wc.tn(f) for f in filters.group], + channel_status_filters: [wc.tn(f) for f in filters.status], + noisedb: wc.tn(chndb), + intraces: 'orig' + name, + outtraces: 'raw' + name, + }, + }, nin=1, nout=1, uses=[chndb, anode] + filters.channel + filters.group + filters.status) + + diff --git a/cfg/pgrapher/common/helpers/sp.jsonnet b/cfg/pgrapher/common/helpers/sp.jsonnet new file mode 100644 index 000000000..38728d496 --- /dev/null +++ b/cfg/pgrapher/common/helpers/sp.jsonnet @@ -0,0 +1,84 @@ +// Helpers to construct config objects for components related to +// signal processing. + +local wc = import "wirecell.jsonnet"; +local pg = import "pgraph.jsonnet"; + + +// Signal processing. +// +// Note, spfilt are a list of filter objects which MUST match +// hard-wired names in the C++, sorry. See, eg +// pgrapher/experiment/pdsp/sp-filters.jsonnet. +function(anode, fieldresp, elecresp, spfilt, adcpermv, perchan=null, override={}) + local apaid = anode.data.ident; + + // if perchan file name is given we need to add this to a + // "uses" list and to set the name in OmnibusSigProc. + local pcresp = { + type: "PerChannelResponse", + data: { + filename: perchan + } + }; + local pc = if std.type(perchan) == "null" + then {tn:"", uses:[]} + else {tn:wc.tn(pcresp), uses:[pcresp]}; + + // return + pg.pnode({ + type: 'OmnibusSigProc', + name: '%d' % apaid, + data: { + /** + * Optimized SP parameters (May 2019) + * Associated tuning in sp-filters.jsonnet + */ + anode: wc.tn(anode), + field_response: wc.tn(fieldresp), + elecresponse: wc.tn(elecresp), + ftoffset: 0.0, // default 0.0 + ctoffset: 1.0*wc.microsecond, // default -8.0 + per_chan_resp: pc.tn, + fft_flag: 0, // 1 is faster but higher memory, 0 is slightly slower but lower memory + postgain: 1.0, // default 1.2 + ADC_mV: adcpermv, // 4096 / (1400.0 * wc.mV), + troi_col_th_factor: 5.0, // default 5 + troi_ind_th_factor: 3.0, // default 3 + lroi_rebin: 6, // default 6 + lroi_th_factor: 3.5, // default 3.5 + lroi_th_factor1: 0.7, // default 0.7 + lroi_jump_one_bin: 1, // default 0 + + r_th_factor: 3.0, // default 3 + r_fake_signal_low_th: 375, // default 500 + r_fake_signal_high_th: 750, // default 1000 + r_fake_signal_low_th_ind_factor: 1.0, // default 1 + r_fake_signal_high_th_ind_factor: 1.0, // default 1 + r_th_peak: 3.0, // default 3.0 + r_sep_peak: 6.0, // default 6.0 + r_low_peak_sep_threshold_pre: 1200, // default 1200 + + // frame tags + wiener_tag: 'wiener%d' % apaid, + wiener_threshold_tag: 'threshold%d' % apaid, + decon_charge_tag: 'decon_charge%d' % apaid, + gauss_tag: 'gauss%d' % apaid, + + use_roi_debug_mode: false, + tight_lf_tag: 'tight_lf%d' % apaid, + loose_lf_tag: 'loose_lf%d' % apaid, + cleanup_roi_tag: 'cleanup_roi%d' % apaid, + break_roi_loop1_tag: 'break_roi_1st%d' % apaid, + break_roi_loop2_tag: 'break_roi_2nd%d' % apaid, + shrink_roi_tag: 'shrink_roi%d' % apaid, + extend_roi_tag: 'extend_roi%d' % apaid, + + use_multi_plane_protection: false, + mp3_roi_tag: 'mp3_roi%d' % apaid, + mp2_roi_tag: 'mp2_roi%d' % apaid, + + isWrapped: false, + // process_planes: [0, 2], + } + override + }, nin=1, nout=1, uses=[anode, fieldresp, elecresp] + pc.uses + spfilt) diff --git a/cfg/pgrapher/common/helpers/utils.jsonnet b/cfg/pgrapher/common/helpers/utils.jsonnet new file mode 100644 index 000000000..19e31618b --- /dev/null +++ b/cfg/pgrapher/common/helpers/utils.jsonnet @@ -0,0 +1,43 @@ +// Utility helper functions. + +local pg = import "pgraph.jsonnet"; + +{ + // Return an ident as a string, eg for an anode + idents(obj) :: std.toString(obj.data.ident), + + // Return ADC counts per voltage given params.adc object + adcpermv(adc) :: + ((1 << adc.resolution)-1) / (adc.fullscale[1]-adc.fullscale[0]), + + + local basic_plugins = [ + "WireCellSio", "WireCellAux", + "WireCellGen", "WireCellSigProc", "WireCellImg", + "WireCellApps"], + + local app_plugins = { + 'TbbFlow': ["WireCellTbb"], + 'PGrapher': ["WireCellPgraph"], + }, + + main(graph, app='Pgrapher', extra_plugins = []) :: + local plugins = std.set(basic_plugins + extra_plugins + app_plugins[app]); + local appcfg = { + type: app, + data: { + edges: pg.edges(graph) + }, + }; + local cmdline = { + type: "wire-cell", + data: { + plugins: plugins, + apps: [appcfg.type] + } + }; + [cmdline] + pg.uses(graph) + [appcfg], + +} + + diff --git a/cfg/pgrapher/experiment/dune-vd/params.jsonnet b/cfg/pgrapher/experiment/dune-vd/params.jsonnet index e21d4dd66..b441e5be0 100644 --- a/cfg/pgrapher/experiment/dune-vd/params.jsonnet +++ b/cfg/pgrapher/experiment/dune-vd/params.jsonnet @@ -4,7 +4,7 @@ local wc = import "wirecell.jsonnet"; local base = import "pgrapher/common/params.jsonnet"; -base { +function(response_plane) base { // This section will be overwritten in simparams.jsonnet det : { @@ -14,11 +14,11 @@ base { // Only one CRP is defined in this geometry // CRMs are oneside anodes - response_plane: 10*wc.cm, // relative to collection wires + response_plane: response_plane, - local upper_crp_x = 300.507*wc.cm, + local upper_crp_x = 325.00*wc.cm, //300.507*wc.cm, local upper_resp_x = upper_crp_x-self.response_plane, - local cathode_x = 0*wc.cm, + local cathode_x = -325.00*wc.cm, volumes: [ { @@ -96,21 +96,17 @@ base { files: { // Standard wire geometry with 2 wire planes and third dummy induction - // wires: "dunevd-wires-twoplanes.json.bz2", - // wires: "dunevd10kt_3view_v1_1x6x6.json.bz2", - wires: "dunevd10kt_3view_30deg_v1_1x6x6.json.bz2", + wires: "dunevd10kt-1x6x6-3view30deg-wires-v1.json.bz2", // Based on the simulations made for the 50L prototype fields: [ - "pcbro-response-avg.json.bz2", + "dunevd-resp-isoc3views.json.bz2", ], // fixme: this is for microboone and probably bogus for // protodune because (at least) the span of MB wire lengths do // not cover pdsp's. - // noise: "protodune-noise-spectra-v1.json.bz2", - noise: "dunevd10kt_3view_30deg_noise_spectra_v1.json.bz2", - + noise: "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", chresp: null, diff --git a/cfg/pgrapher/experiment/dune-vd/wcls-nf-sp.fcl b/cfg/pgrapher/experiment/dune-vd/wcls-nf-sp.fcl new file mode 100644 index 000000000..0b191f68b --- /dev/null +++ b/cfg/pgrapher/experiment/dune-vd/wcls-nf-sp.fcl @@ -0,0 +1,141 @@ +# #include "protoDUNE_reco_data_Dec2018.fcl" +#include "services_dune.fcl" + +process_name: wclsdatanfsp + +services: +{ + #message: @local::dune_message_services_prod_debug + TimeTracker: {} + RandomNumberGenerator: {} + # @table::dunefdvd_simulation_services + @table::protodune_services + # @table::protodune_rawdecoding_services + # @table::protodune_simulation_services + # @table::protodune_data_services + TFileService: { + closeFileFast: true # default + fileName: "%ifb_raw_anal.root" + tmpDir: "" # default + } + IFBeam: {} +} + + +source: { + module_type: RootInput + saveMemoryObjectThreshold: 10485760 + + #inputCommands: ["drop *", "keep raw::RawDigits_*_*_*"] + #inputCommands: ["drop *", "keep *_*_*_Swizzler"] +} + +physics :{ + producers: { + nfspl1 : { + module_type : WireCellToolkit + wcls_main: { + tool_type: WCLS + apps: ["Pgrapher"] + + logsinks: ["stdout"] + loglevels: ["debug", "pgraph:info"] + + # Libraries in which to look for WCT components + plugins: ["WireCellGen", "WireCellSigProc", "WireCellRoot", "WireCellPgraph", "WireCellLarsoft"] + + # The tool marshals the art::Event to these visitors before. + # See notes below in params. + inputers: ["wclsRawFrameSource" + # To use wclsMultiChannelNoiseDB you must also put epoch:dynamic below + # and you must have geo::Geometry service in your environment. + # ,"wclsMultiChannelNoiseDB" + ] + + # or after the WCT app is run. These names MUST be used identically in the Jsonnet + # fixme: https://github.com/WireCell/larwirecell/issues/3 + #outputers: ["wclsFrameSaver:nfsaver", "wclsFrameSaver:spsaver"] + outputers: ["wclsFrameSaver:spsaver"] + + # This sets the "main" Jsonnet file which provides the + # configuration for the Wire-Cell Toolkit components. It is + # take as relative to entries in WIRECELL_PATH. + configs: ["pgrapher/experiment/dune-vd/wcls-nf-sp.jsonnet"] + + # Set the "external variables" required by the Jsonnet. + # ext-var, string + params : { + # This locates the input raw::RawDigit collection in the art::Event + raw_input_label: "tpcrawdecoder:daq" + # raw_input_label: "simmer:orig" + #raw_input_label: "caldata" + + # Set "data" vs. "sim". The epoch below probably should follow suit. + reality: "data" + # reality: "sim" + + # if epoch is "dynamic" you MUST add + # "wclsMultiChannelNoiseDB" to "inputers" and must NOT + # add it if not "dynamic" + # epoch: "dynamic" + # epoch: "perfect" + epoch: "after" + + # Save output signal waveforms (recob::Wire) in "sparse" or "dense" form + signal_output_form: "sparse" + + # file: wires + # dunevd10kt-1x6x6-3view-wires-v1.json.bz2 + # dunevd10kt-1x6x6-3view30deg-wires-v1.json.bz2 + # dunevd10kt-1x6x6-2view-wires-v1.json.bz2 + files_wires: "dunevd10kt-1x6x6-3view30deg-wires-v1.json.bz2" + + # file: fields + # 3view30: dunevd-resp-isoc3views-18d92.json.bz2 + # 2view: pcbro-response-avg-12d50.json.bz2 + files_fields: "dunevd-resp-isoc3views-18d92.json.bz2" + } + # ext-code, code + structs : { + # for nticks calculation in common/params.jsonnet: elec + driftSpeed: 1.565 + + # used in ChannelSelector + # 3view: 864; 3view30deg: 900; 2view: 928 + channel_per_crm: 900 + + # response plane, related to which field response is used [cm] + # 3view30: dunevd-resp-isoc3views-18d92.json.bz2: 18.92 + # 2view: pcbro-response-avg-12d50.json.bz2: 12.50 + response_plane: 18.92 + } + } + } + } + + p1 : [ nfspl1 ] + trigger_paths : [ p1 ] + + o1 : [ out1 ] + end_paths: [ o1 ] +} + +outputs:{ + out1: { + module_type: RootOutput + fileName: "output.root" + #SelectEvents: [p1] + saveMemoryObjectThreshold: 10485760 + + outputCommands : [ + "keep *_*_*_*" + # "drop *_nfspl1_raw_*", + # "drop *_nfspl1_threshold_*", + # "drop *_nfspl1_wiener_*", + # "drop *_nfspl1_gauss_*", + # "drop *_wcNoiseFilter_*_*", + # "drop *_daq_*_*" + ] + + } +} diff --git a/cfg/pgrapher/experiment/dune-vd/wcls-nf-sp.jsonnet b/cfg/pgrapher/experiment/dune-vd/wcls-nf-sp.jsonnet new file mode 100644 index 000000000..a0438bbf9 --- /dev/null +++ b/cfg/pgrapher/experiment/dune-vd/wcls-nf-sp.jsonnet @@ -0,0 +1,220 @@ +// This is a main entry point to configure a WC/LS job that applies +// noise filtering and signal processing to existing RawDigits. The +// FHiCL is expected to provide the following parameters as attributes +// in the "params" structure. +// +// epoch: the hardware noise fix expoch: "before", "after", "dynamic" or "perfect" +// reality: whether we are running on "data" or "sim"ulation. +// raw_input_label: the art::Event inputTag for the input RawDigit +// +// see the .fcl of the same name for an example +// +// Manual testing, eg: +// +// jsonnet -V reality=data -V epoch=dynamic -V raw_input_label=daq \\ +// -V signal_output_form=sparse \\ +// -J cfg cfg/pgrapher/experiment/uboone/wcls-nf-sp.jsonnet +// +// jsonnet -V reality=sim -V epoch=perfect -V raw_input_label=daq \\ +// -V signal_output_form=sparse \\ +// -J cfg cfg/pgrapher/experiment/uboone/wcls-nf-sp.jsonnet + + +local epoch = std.extVar('epoch'); // eg "dynamic", "after", "before", "perfect" +local reality = std.extVar('reality'); +local sigoutform = std.extVar('signal_output_form'); // eg "sparse" or "dense" + + +local wc = import 'wirecell.jsonnet'; +local g = import 'pgraph.jsonnet'; + +local raw_input_label = std.extVar('raw_input_label'); // eg "daq" + +local base = import 'pgrapher/experiment/dune-vd/params.jsonnet'; +local response_plane = std.extVar('response_plane')*wc.cm; +local channel_per_crm = std.extVar('channel_per_crm'); +local params = base(response_plane) { + lar: super.lar { + drift_speed: std.extVar('driftSpeed') * wc.mm / wc.us, + }, + files: super.files { + wires: std.extVar('files_wires'), + fields: [ std.extVar('files_fields'), ], + }, +}; + +local tools_maker = import 'pgrapher/common/tools.jsonnet'; +local tools = tools_maker(params); +local nanodes = std.length(tools.anodes); +local anode_iota = std.range(0, nanodes - 1); + +local wcls_maker = import 'pgrapher/ui/wcls/nodes.jsonnet'; +local wcls = wcls_maker(params, tools); + +//local nf_maker = import "pgrapher/experiment/pdsp/nf.jsonnet"; +//local chndb_maker = import "pgrapher/experiment/pdsp/chndb.jsonnet"; + +local sp_maker = import 'pgrapher/experiment/dune-vd/sp.jsonnet'; + +//local chndbm = chndb_maker(params, tools); +//local chndb = if epoch == "dynamic" then chndbm.wcls_multi(name="") else chndbm.wct(epoch); + + +// Collect the WC/LS input converters for use below. Make sure the +// "name" argument matches what is used in the FHiCL that loads this +// file. In particular if there is no ":" in the inputer then name +// must be the emtpy string. +local wcls_input = { + adc_digits: g.pnode({ + type: 'wclsRawFrameSource', + name: '', + data: { + art_tag: raw_input_label, + frame_tags: ['orig'], // this is a WCT designator + // nticks: params.daq.nticks, + }, + }, nin=0, nout=1), + +}; + +// Collect all the wc/ls output converters for use below. Note the +// "name" MUST match what is used in theh "outputers" parameter in the +// FHiCL that loads this file. +local mega_anode = { + type: 'MegaAnodePlane', + name: 'meganodes', + data: { + anodes_tn: [wc.tn(anode) for anode in tools.anodes], + }, +}; +local wcls_output = { + // The noise filtered "ADC" values. These are truncated for + // art::Event but left as floats for the WCT SP. Note, the tag + // "raw" is somewhat historical as the output is not equivalent to + // "raw data". + nf_digits: g.pnode({ + type: 'wclsFrameSaver', + name: 'nfsaver', + data: { + // anode: wc.tn(tools.anode), + anode: wc.tn(mega_anode), + digitize: true, // true means save as RawDigit, else recob::Wire + frame_tags: ['raw'], + // nticks: params.daq.nticks, + chanmaskmaps: ['bad'], + }, + }, nin=1, nout=1, uses=[mega_anode]), + + + // The output of signal processing. Note, there are two signal + // sets each created with its own filter. The "gauss" one is best + // for charge reconstruction, the "wiener" is best for S/N + // separation. Both are used in downstream WC code. + sp_signals: g.pnode({ + type: 'wclsFrameSaver', + name: 'spsaver', + data: { + // anode: wc.tn(tools.anode), + anode: wc.tn(mega_anode), + digitize: false, // true means save as RawDigit, else recob::Wire + frame_tags: ['gauss', 'wiener'], + frame_scale: [0.005, 0.005], + // nticks: params.daq.nticks, + chanmaskmaps: [], + nticks: -1, + }, + }, nin=1, nout=1, uses=[mega_anode]), +}; + +// local perfect = import 'chndb-perfect.jsonnet'; +local base = import 'chndb-base.jsonnet'; +local chndb = [{ + type: 'OmniChannelNoiseDB', + name: 'ocndbperfect%d' % n, + // data: perfect(params, tools.anodes[n], tools.field, n), + data: base(params, tools.anodes[n], tools.field, n), + uses: [tools.anodes[n], tools.field], // pnode extension +} for n in std.range(0, std.length(tools.anodes) - 1)]; + +// local nf_maker = import 'pgrapher/experiment/dune10kt-1x2x6/nf.jsonnet'; +// local nf_pipes = [nf_maker(params, tools.anodes[n], chndb[n], n, name='nf%d' % n) for n in std.range(0, std.length(tools.anodes) - 1)]; + +local sp = sp_maker(params, tools, { sparse: sigoutform == 'sparse' }); +local sp_pipes = [sp.make_sigproc(a) for a in tools.anodes]; + +local chsel_pipes = [ + g.pnode({ + type: 'ChannelSelector', + name: 'chsel%d' % n, + data: { + channels: std.range(channel_per_crm * n, channel_per_crm * (n + 1) - 1), // 3view30: 900 + }, + }, nin=1, nout=1) + for n in std.range(0, std.length(tools.anodes) - 1) +]; + + +local spmagnify = [ + g.pnode({ + type: 'MagnifySink', + name: 'spmag%d' % n, + data: { + output_filename: 'dune-vd-sp-check.root', + root_file_mode: 'UPDATE', + frames: ['gauss%d' % n ], + trace_has_tag: false, + anode: wc.tn(tools.anodes[n]), + }, + }, nin=1, nout=1) for n in std.range(0, std.length(tools.anodes) - 1)]; + + +local spmagnify_pipe = [g.pipeline([spmagnify[n]], name='spmagnifypipes%d' % n) for n in anode_iota]; + +local nfsp_pipes = [ + g.pipeline([ + chsel_pipes[n], + sp_pipes[n], + spmagnify_pipe[n], + ], + 'nfsp_pipe_%d' % n) + for n in anode_iota +]; + + +local f = import 'pgrapher/experiment/dune-vd/funcs.jsonnet'; +local outtags = ['gauss%d' % n for n in std.range(0, std.length(tools.anodes) - 1)]; +local fanpipe = f.multifanpipe('FrameFanout', nfsp_pipes, 'FrameFanin', 6, 'sn_mag_nf', outtags); + +local retagger = g.pnode({ + type: 'Retagger', + data: { + // Note: retagger keeps tag_rules an array to be like frame fanin/fanout. + tag_rules: [{ + // Retagger also handles "frame" and "trace" like fanin/fanout + // merge separately all traces like gaussN to gauss. + frame: { + '.*': 'retagger', + }, + merge: { + 'gauss\\d+': 'gauss', + 'wiener\\d+': 'wiener', + }, + }], + }, +}, nin=1, nout=1); + +local sink = g.pnode({ type: 'DumpFrames' }, nin=1, nout=0); + + +// local graph = g.pipeline([wcls_input.adc_digits, rootfile_creation_frames, fanpipe, retagger, wcls_output.sp_signals, sink]); +local graph = g.pipeline([wcls_input.adc_digits, fanpipe, retagger, wcls_output.sp_signals, sink]); + +local app = { + type: 'Pgrapher', + data: { + edges: g.edges(graph), + }, +}; + +// Finally, the configuration sequence +g.uses(graph) + [app] diff --git a/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-2view.json b/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-2view.json new file mode 100644 index 000000000..c5c4c77b0 --- /dev/null +++ b/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-2view.json @@ -0,0 +1,5897 @@ +[ + { + "data": { + "art_tag": "IonAndScint", + "assn_art_tag": "", + "model": "", + "scale": -1 + }, + "name": "", + "type": "wclsSimDepoSource" + }, + { + "data": { + "generator": "default", + "seeds": [ + 0, + 1, + 2, + 3, + 4 + ] + }, + "type": "Random" + }, + { + "data": { + "DL": 3.9999999999999998e-07, + "DT": 8.8000000000000015e-07, + "ar39activity": 1.6021764870000004e-34, + "density": 8669456899850258432, + "drift_speed": 0.001565, + "fluctuate": true, + "lifetime": 10400000, + "rng": "Random", + "time_offset": 0, + "xregions": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ] + }, + "type": "Drifter" + }, + { + "data": { + "filename": "dunevd10kt-1x6x6-2view-wires-v1.json.bz2" + }, + "type": "WireSchemaFile" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 0, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm0", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 1, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm1", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 2, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm2", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 3, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm3", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 4, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm4", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 5, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm5", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 6, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm6", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 7, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm7", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 8, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm8", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 9, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm9", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 10, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm10", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 11, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm11", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 12, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm12", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 13, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm13", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 14, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm14", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 15, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm15", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 16, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm16", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 17, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm17", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 18, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm18", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 19, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm19", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 20, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm20", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 21, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm21", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 22, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm22", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 23, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm23", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 24, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm24", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 25, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm25", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 26, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm26", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 27, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm27", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 28, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm28", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 29, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm29", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 30, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm30", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 31, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm31", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 32, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm32", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 33, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm33", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 34, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm34", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3125 + }, + null + ], + "ident": 35, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm35", + "type": "AnodePlane" + }, + { + "data": { + "anodes_tn": [ + "AnodePlane:crm0", + "AnodePlane:crm1", + "AnodePlane:crm2", + "AnodePlane:crm3", + "AnodePlane:crm4", + "AnodePlane:crm5", + "AnodePlane:crm6", + "AnodePlane:crm7", + "AnodePlane:crm8", + "AnodePlane:crm9", + "AnodePlane:crm10", + "AnodePlane:crm11", + "AnodePlane:crm12", + "AnodePlane:crm13", + "AnodePlane:crm14", + "AnodePlane:crm15", + "AnodePlane:crm16", + "AnodePlane:crm17", + "AnodePlane:crm18", + "AnodePlane:crm19", + "AnodePlane:crm20", + "AnodePlane:crm21", + "AnodePlane:crm22", + "AnodePlane:crm23", + "AnodePlane:crm24", + "AnodePlane:crm25", + "AnodePlane:crm26", + "AnodePlane:crm27", + "AnodePlane:crm28", + "AnodePlane:crm29", + "AnodePlane:crm30", + "AnodePlane:crm31", + "AnodePlane:crm32", + "AnodePlane:crm33", + "AnodePlane:crm34", + "AnodePlane:crm35" + ], + "artlabel": "simpleSC", + "drift_speed": 0.001565, + "g4_ref_time": 0, + "nsigma": 3, + "readout_time": 4687500, + "response_plane": 125, + "rng": "Random", + "start_time": -250000, + "tick": 500, + "u_time_offset": 0, + "u_to_rp": 125, + "use_energy": true, + "v_time_offset": 0, + "v_to_rp": 125, + "y_time_offset": 0, + "y_to_rp": 125 + }, + "name": "postdrift", + "type": "wclsSimChannelSink" + }, + { + "data": { + "gate": [ + -63897.76357827476, + 4687602.2364217248 + ] + }, + "name": "bagger", + "type": "DepoBagger" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer1", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_00", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_01", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_02", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_03", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_04", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_05", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_00", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_01", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_02", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_03", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_04", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_05", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer3", + "type": "FrameFanin" + }, + { + "data": { + "filename": "pcbro-response-avg-12d50.json.bz2" + }, + "name": "field0", + "type": "FieldResponse" + }, + { + "data": { + "gain": 1.9226117844000003e-12, + "nticks": 9503, + "postgain": 1, + "shaping": 1200, + "tick": 500 + }, + "type": "ColdElecResponse" + }, + { + "data": { + "nticks": 9503, + "tick": 500, + "width": 1000000 + }, + "type": "RCResponse" + }, + { + "data": { + "magnitude": 1, + "nticks": 9503, + "start": 0, + "tick": 500, + "time_smear": 1000 + }, + "type": "ResponseSys" + }, + { + "data": { + "field_response": "FieldResponse:field0", + "long_padding": 1500000, + "long_responses": [ + "RCResponse", + "RCResponse" + ], + "nticks": 9503, + "overall_short_padding": 200000, + "plane": 0, + "short_responses": [ + "ColdElecResponse" + ], + "tick": 500 + }, + "name": "PIRfield0plane0", + "type": "PlaneImpactResponse" + }, + { + "data": { + "field_response": "FieldResponse:field0", + "long_padding": 1500000, + "long_responses": [ + "RCResponse", + "RCResponse" + ], + "nticks": 9503, + "overall_short_padding": 200000, + "plane": 1, + "short_responses": [ + "ColdElecResponse" + ], + "tick": 500 + }, + "name": "PIRfield0plane1", + "type": "PlaneImpactResponse" + }, + { + "data": { + "field_response": "FieldResponse:field0", + "long_padding": 1500000, + "long_responses": [ + "RCResponse", + "RCResponse" + ], + "nticks": 9503, + "overall_short_padding": 200000, + "plane": 2, + "short_responses": [ + "ColdElecResponse" + ], + "tick": 500 + }, + "name": "PIRfield0plane2", + "type": "PlaneImpactResponse" + }, + { + "data": { + "anode": "AnodePlane:crm0", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor0", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm0", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer0", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm0", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm0", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm0", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm0", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm0", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig0", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer0", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm1", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor1", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm1", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer1", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm1", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm1", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm1", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm1", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm1", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig1", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer1", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm2", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor2", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm2", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer2", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm2", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm2", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm2", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm2", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm2", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig2", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer2", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm3", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor3", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm3", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer3", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm3", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm3", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm3", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm3", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm3", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig3", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer3", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm4", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor4", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm4", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer4", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm4", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm4", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm4", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm4", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm4", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig4", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer4", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm5", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor5", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm5", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer5", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm5", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm5", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm5", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm5", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm5", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig5", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer5", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm6", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor6", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm6", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer6", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm6", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm6", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm6", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm6", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm6", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig6", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer6", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm7", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor7", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm7", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer7", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm7", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm7", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm7", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm7", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm7", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig7", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer7", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm8", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor8", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm8", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer8", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm8", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm8", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm8", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm8", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm8", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig8", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer8", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm9", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor9", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm9", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer9", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm9", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm9", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm9", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm9", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm9", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig9", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer9", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm10", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor10", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm10", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer10", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm10", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm10", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm10", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm10", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm10", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig10", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer10", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm11", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor11", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm11", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer11", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm11", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm11", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm11", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm11", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm11", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig11", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer11", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm12", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor12", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm12", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer12", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm12", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm12", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm12", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm12", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm12", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig12", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer12", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm13", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor13", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm13", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer13", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm13", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm13", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm13", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm13", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm13", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig13", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer13", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm14", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor14", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm14", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer14", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm14", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm14", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm14", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm14", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm14", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig14", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer14", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm15", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor15", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm15", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer15", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm15", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm15", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm15", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm15", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm15", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig15", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer15", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm16", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor16", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm16", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer16", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm16", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm16", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm16", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm16", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm16", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig16", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer16", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm17", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor17", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm17", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer17", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm17", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm17", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm17", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm17", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm17", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig17", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer17", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm18", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor18", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm18", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer18", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm18", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm18", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm18", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm18", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm18", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig18", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer18", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm19", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor19", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm19", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer19", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm19", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm19", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm19", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm19", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm19", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig19", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer19", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm20", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor20", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm20", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer20", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm20", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm20", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm20", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm20", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm20", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig20", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer20", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm21", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor21", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm21", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer21", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm21", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm21", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm21", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm21", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm21", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig21", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer21", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm22", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor22", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm22", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer22", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm22", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm22", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm22", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm22", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm22", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig22", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer22", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm23", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor23", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm23", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer23", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm23", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm23", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm23", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm23", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm23", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig23", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer23", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm24", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor24", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm24", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer24", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm24", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm24", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm24", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm24", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm24", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig24", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer24", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm25", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor25", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm25", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer25", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm25", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm25", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm25", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm25", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm25", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig25", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer25", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm26", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor26", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm26", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer26", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm26", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm26", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm26", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm26", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm26", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig26", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer26", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm27", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor27", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm27", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer27", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm27", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm27", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm27", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm27", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm27", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig27", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer27", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm28", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor28", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm28", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer28", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm28", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm28", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm28", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm28", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm28", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig28", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer28", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm29", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor29", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm29", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer29", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm29", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm29", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm29", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm29", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm29", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig29", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer29", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm30", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor30", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm30", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer30", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm30", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm30", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm30", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm30", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm30", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig30", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer30", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm31", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor31", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm31", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer31", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm31", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm31", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm31", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm31", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm31", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig31", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer31", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm32", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor32", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm32", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer32", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm32", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm32", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm32", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm32", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm32", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig32", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer32", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm33", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor33", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm33", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer33", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm33", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm33", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm33", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm33", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm33", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig33", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer33", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm34", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor34", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm34", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer34", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm34", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm34", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm34", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm34", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm34", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig34", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer34", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm35", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor35", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm35", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer35", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm35", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-2view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm35", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm35", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm35", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm35", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig35", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer35", + "type": "Digitizer" + }, + { + "data": { + "tag_rules": [ + { + "frame": { + ".*": "orig" + }, + "merge": { + "orig\\d+": "daq" + } + } + ] + }, + "type": "Retagger" + }, + { + "data": { + "anodes_tn": [ + "AnodePlane:crm0", + "AnodePlane:crm1", + "AnodePlane:crm2", + "AnodePlane:crm3", + "AnodePlane:crm4", + "AnodePlane:crm5", + "AnodePlane:crm6", + "AnodePlane:crm7", + "AnodePlane:crm8", + "AnodePlane:crm9", + "AnodePlane:crm10", + "AnodePlane:crm11", + "AnodePlane:crm12", + "AnodePlane:crm13", + "AnodePlane:crm14", + "AnodePlane:crm15", + "AnodePlane:crm16", + "AnodePlane:crm17", + "AnodePlane:crm18", + "AnodePlane:crm19", + "AnodePlane:crm20", + "AnodePlane:crm21", + "AnodePlane:crm22", + "AnodePlane:crm23", + "AnodePlane:crm24", + "AnodePlane:crm25", + "AnodePlane:crm26", + "AnodePlane:crm27", + "AnodePlane:crm28", + "AnodePlane:crm29", + "AnodePlane:crm30", + "AnodePlane:crm31", + "AnodePlane:crm32", + "AnodePlane:crm33", + "AnodePlane:crm34", + "AnodePlane:crm35" + ] + }, + "name": "meganodes", + "type": "MegaAnodePlane" + }, + { + "data": { + "anode": "MegaAnodePlane:meganodes", + "digitize": true, + "frame_tags": [ + "daq" + ], + "pedestal_mean": "native" + }, + "name": "simdigits", + "type": "wclsFrameSaver" + }, + { + "type": "DumpFrames" + }, + { + "data": { + "edges": [ + { + "head": { + "node": "Drifter", + "port": 0 + }, + "tail": { + "node": "wclsSimDepoSource", + "port": 0 + } + }, + { + "head": { + "node": "wclsSimChannelSink:postdrift", + "port": 0 + }, + "tail": { + "node": "Drifter", + "port": 0 + } + }, + { + "head": { + "node": "DepoBagger:bagger", + "port": 0 + }, + "tail": { + "node": "wclsSimChannelSink:postdrift", + "port": 0 + } + }, + { + "head": { + "node": "DepoSetFanout:layer1", + "port": 0 + }, + "tail": { + "node": "DepoBagger:bagger", + "port": 0 + } + }, + { + "head": { + "node": "Retagger", + "port": 0 + }, + "tail": { + "node": "FrameFanin:layer3", + "port": 0 + } + }, + { + "head": { + "node": "wclsFrameSaver:simdigits", + "port": 0 + }, + "tail": { + "node": "Retagger", + "port": 0 + } + }, + { + "head": { + "node": "DumpFrames", + "port": 0 + }, + "tail": { + "node": "wclsFrameSaver:simdigits", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor0", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor1", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor2", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor3", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor4", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor5", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor6", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor7", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor8", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor9", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor10", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor11", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor12", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor13", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor14", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor15", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor16", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor17", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor18", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor19", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor20", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor21", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor22", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor23", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor24", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor25", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor26", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor27", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor28", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor29", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor30", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor31", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor32", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor33", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor34", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor35", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 5 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer0", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer1", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer2", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer3", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer4", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer5", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer6", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer7", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer8", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer9", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer10", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer11", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer12", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer13", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer14", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer15", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer16", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer17", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer18", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer19", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer20", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer21", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer22", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer23", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer24", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer25", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer26", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer27", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer28", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer29", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer30", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer31", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer32", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer33", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer34", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer35", + "port": 0 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_00", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 0 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_01", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 1 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_02", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 2 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_03", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 3 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_04", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 4 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_05", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 5 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 0 + }, + "tail": { + "node": "FrameFanin:layer4_00", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 1 + }, + "tail": { + "node": "FrameFanin:layer4_01", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 2 + }, + "tail": { + "node": "FrameFanin:layer4_02", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 3 + }, + "tail": { + "node": "FrameFanin:layer4_03", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 4 + }, + "tail": { + "node": "FrameFanin:layer4_04", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 5 + }, + "tail": { + "node": "FrameFanin:layer4_05", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer0", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor0", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm0", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer0", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer0", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm0", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer1", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor1", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm1", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer1", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer1", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm1", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer2", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor2", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm2", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer2", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer2", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm2", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer3", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor3", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm3", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer3", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer3", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm3", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer4", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor4", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm4", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer4", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer4", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm4", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer5", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor5", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm5", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer5", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer5", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm5", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer6", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor6", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm6", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer6", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer6", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm6", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer7", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor7", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm7", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer7", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer7", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm7", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer8", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor8", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm8", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer8", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer8", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm8", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer9", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor9", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm9", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer9", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer9", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm9", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer10", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor10", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm10", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer10", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer10", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm10", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer11", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor11", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm11", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer11", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer11", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm11", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer12", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor12", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm12", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer12", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer12", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm12", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer13", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor13", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm13", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer13", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer13", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm13", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer14", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor14", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm14", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer14", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer14", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm14", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer15", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor15", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm15", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer15", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer15", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm15", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer16", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor16", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm16", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer16", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer16", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm16", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer17", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor17", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm17", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer17", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer17", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm17", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer18", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor18", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm18", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer18", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer18", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm18", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer19", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor19", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm19", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer19", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer19", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm19", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer20", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor20", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm20", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer20", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer20", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm20", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer21", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor21", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm21", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer21", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer21", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm21", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer22", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor22", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm22", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer22", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer22", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm22", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer23", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor23", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm23", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer23", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer23", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm23", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer24", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor24", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm24", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer24", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer24", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm24", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer25", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor25", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm25", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer25", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer25", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm25", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer26", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor26", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm26", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer26", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer26", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm26", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer27", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor27", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm27", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer27", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer27", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm27", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer28", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor28", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm28", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer28", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer28", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm28", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer29", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor29", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm29", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer29", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer29", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm29", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer30", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor30", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm30", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer30", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer30", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm30", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer31", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor31", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm31", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer31", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer31", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm31", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer32", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor32", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm32", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer32", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer32", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm32", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer33", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor33", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm33", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer33", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer33", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm33", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer34", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor34", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm34", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer34", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer34", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm34", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer35", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor35", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm35", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer35", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer35", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm35", + "port": 0 + } + } + ] + }, + "type": "Pgrapher" + } +] diff --git a/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-3view.json b/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-3view.json new file mode 100644 index 000000000..057a43111 --- /dev/null +++ b/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-3view.json @@ -0,0 +1,5897 @@ +[ + { + "data": { + "art_tag": "IonAndScint", + "assn_art_tag": "", + "model": "", + "scale": -1 + }, + "name": "", + "type": "wclsSimDepoSource" + }, + { + "data": { + "generator": "default", + "seeds": [ + 0, + 1, + 2, + 3, + 4 + ] + }, + "type": "Random" + }, + { + "data": { + "DL": 3.9999999999999998e-07, + "DT": 8.8000000000000015e-07, + "ar39activity": 1.6021764870000004e-34, + "density": 8669456899850258432, + "drift_speed": 0.001565, + "fluctuate": true, + "lifetime": 10400000, + "rng": "Random", + "time_offset": 0, + "xregions": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ] + }, + "type": "Drifter" + }, + { + "data": { + "filename": "dunevd10kt-1x6x6-3view-wires-v1.json.bz2" + }, + "type": "WireSchemaFile" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 0, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm0", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 1, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm1", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 2, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm2", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 3, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm3", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 4, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm4", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 5, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm5", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 6, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm6", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 7, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm7", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 8, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm8", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 9, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm9", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 10, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm10", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 11, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm11", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 12, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm12", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 13, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm13", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 14, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm14", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 15, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm15", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 16, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm16", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 17, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm17", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 18, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm18", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 19, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm19", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 20, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm20", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 21, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm21", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 22, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm22", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 23, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm23", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 24, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm24", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 25, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm25", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 26, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm26", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 27, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm27", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 28, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm28", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 29, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm29", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 30, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm30", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 31, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm31", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 32, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm32", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 33, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm33", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 34, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm34", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 35, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm35", + "type": "AnodePlane" + }, + { + "data": { + "anodes_tn": [ + "AnodePlane:crm0", + "AnodePlane:crm1", + "AnodePlane:crm2", + "AnodePlane:crm3", + "AnodePlane:crm4", + "AnodePlane:crm5", + "AnodePlane:crm6", + "AnodePlane:crm7", + "AnodePlane:crm8", + "AnodePlane:crm9", + "AnodePlane:crm10", + "AnodePlane:crm11", + "AnodePlane:crm12", + "AnodePlane:crm13", + "AnodePlane:crm14", + "AnodePlane:crm15", + "AnodePlane:crm16", + "AnodePlane:crm17", + "AnodePlane:crm18", + "AnodePlane:crm19", + "AnodePlane:crm20", + "AnodePlane:crm21", + "AnodePlane:crm22", + "AnodePlane:crm23", + "AnodePlane:crm24", + "AnodePlane:crm25", + "AnodePlane:crm26", + "AnodePlane:crm27", + "AnodePlane:crm28", + "AnodePlane:crm29", + "AnodePlane:crm30", + "AnodePlane:crm31", + "AnodePlane:crm32", + "AnodePlane:crm33", + "AnodePlane:crm34", + "AnodePlane:crm35" + ], + "artlabel": "simpleSC", + "drift_speed": 0.001565, + "g4_ref_time": 0, + "nsigma": 3, + "readout_time": 4687500, + "response_plane": 189.20000000000002, + "rng": "Random", + "start_time": -250000, + "tick": 500, + "u_time_offset": 0, + "u_to_rp": 189.20000000000002, + "use_energy": true, + "v_time_offset": 0, + "v_to_rp": 189.20000000000002, + "y_time_offset": 0, + "y_to_rp": 189.20000000000002 + }, + "name": "postdrift", + "type": "wclsSimChannelSink" + }, + { + "data": { + "gate": [ + -63897.76357827476, + 4687602.2364217248 + ] + }, + "name": "bagger", + "type": "DepoBagger" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer1", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_00", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_01", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_02", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_03", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_04", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_05", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_00", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_01", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_02", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_03", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_04", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_05", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer3", + "type": "FrameFanin" + }, + { + "data": { + "filename": "dunevd-resp-isoc3views-18d92.json.bz2" + }, + "name": "field0", + "type": "FieldResponse" + }, + { + "data": { + "gain": 1.9226117844000003e-12, + "nticks": 9503, + "postgain": 1, + "shaping": 1200, + "tick": 500 + }, + "type": "ColdElecResponse" + }, + { + "data": { + "nticks": 9503, + "tick": 500, + "width": 1000000 + }, + "type": "RCResponse" + }, + { + "data": { + "magnitude": 1, + "nticks": 9503, + "start": 0, + "tick": 500, + "time_smear": 1000 + }, + "type": "ResponseSys" + }, + { + "data": { + "field_response": "FieldResponse:field0", + "long_padding": 1500000, + "long_responses": [ + "RCResponse", + "RCResponse" + ], + "nticks": 9503, + "overall_short_padding": 200000, + "plane": 0, + "short_responses": [ + "ColdElecResponse" + ], + "tick": 500 + }, + "name": "PIRfield0plane0", + "type": "PlaneImpactResponse" + }, + { + "data": { + "field_response": "FieldResponse:field0", + "long_padding": 1500000, + "long_responses": [ + "RCResponse", + "RCResponse" + ], + "nticks": 9503, + "overall_short_padding": 200000, + "plane": 1, + "short_responses": [ + "ColdElecResponse" + ], + "tick": 500 + }, + "name": "PIRfield0plane1", + "type": "PlaneImpactResponse" + }, + { + "data": { + "field_response": "FieldResponse:field0", + "long_padding": 1500000, + "long_responses": [ + "RCResponse", + "RCResponse" + ], + "nticks": 9503, + "overall_short_padding": 200000, + "plane": 2, + "short_responses": [ + "ColdElecResponse" + ], + "tick": 500 + }, + "name": "PIRfield0plane2", + "type": "PlaneImpactResponse" + }, + { + "data": { + "anode": "AnodePlane:crm0", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor0", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm0", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer0", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm0", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm0", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm0", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm0", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm0", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig0", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer0", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm1", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor1", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm1", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer1", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm1", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm1", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm1", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm1", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm1", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig1", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer1", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm2", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor2", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm2", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer2", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm2", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm2", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm2", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm2", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm2", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig2", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer2", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm3", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor3", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm3", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer3", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm3", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm3", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm3", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm3", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm3", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig3", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer3", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm4", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor4", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm4", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer4", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm4", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm4", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm4", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm4", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm4", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig4", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer4", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm5", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor5", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm5", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer5", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm5", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm5", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm5", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm5", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm5", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig5", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer5", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm6", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor6", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm6", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer6", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm6", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm6", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm6", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm6", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm6", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig6", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer6", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm7", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor7", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm7", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer7", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm7", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm7", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm7", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm7", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm7", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig7", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer7", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm8", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor8", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm8", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer8", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm8", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm8", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm8", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm8", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm8", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig8", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer8", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm9", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor9", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm9", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer9", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm9", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm9", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm9", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm9", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm9", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig9", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer9", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm10", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor10", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm10", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer10", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm10", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm10", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm10", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm10", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm10", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig10", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer10", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm11", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor11", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm11", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer11", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm11", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm11", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm11", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm11", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm11", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig11", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer11", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm12", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor12", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm12", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer12", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm12", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm12", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm12", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm12", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm12", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig12", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer12", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm13", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor13", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm13", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer13", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm13", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm13", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm13", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm13", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm13", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig13", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer13", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm14", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor14", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm14", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer14", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm14", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm14", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm14", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm14", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm14", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig14", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer14", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm15", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor15", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm15", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer15", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm15", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm15", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm15", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm15", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm15", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig15", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer15", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm16", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor16", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm16", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer16", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm16", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm16", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm16", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm16", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm16", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig16", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer16", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm17", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor17", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm17", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer17", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm17", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm17", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm17", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm17", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm17", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig17", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer17", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm18", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor18", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm18", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer18", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm18", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm18", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm18", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm18", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm18", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig18", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer18", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm19", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor19", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm19", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer19", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm19", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm19", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm19", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm19", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm19", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig19", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer19", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm20", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor20", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm20", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer20", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm20", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm20", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm20", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm20", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm20", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig20", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer20", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm21", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor21", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm21", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer21", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm21", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm21", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm21", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm21", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm21", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig21", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer21", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm22", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor22", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm22", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer22", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm22", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm22", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm22", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm22", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm22", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig22", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer22", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm23", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor23", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm23", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer23", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm23", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm23", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm23", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm23", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm23", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig23", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer23", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm24", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor24", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm24", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer24", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm24", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm24", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm24", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm24", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm24", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig24", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer24", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm25", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor25", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm25", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer25", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm25", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm25", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm25", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm25", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm25", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig25", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer25", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm26", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor26", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm26", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer26", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm26", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm26", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm26", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm26", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm26", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig26", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer26", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm27", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor27", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm27", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer27", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm27", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm27", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm27", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm27", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm27", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig27", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer27", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm28", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor28", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm28", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer28", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm28", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm28", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm28", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm28", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm28", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig28", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer28", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm29", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor29", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm29", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer29", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm29", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm29", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm29", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm29", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm29", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig29", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer29", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm30", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor30", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm30", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer30", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm30", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm30", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm30", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm30", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm30", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig30", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer30", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm31", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor31", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm31", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer31", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm31", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm31", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm31", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm31", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm31", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig31", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer31", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm32", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor32", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm32", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer32", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm32", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm32", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm32", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm32", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm32", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig32", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer32", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm33", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor33", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm33", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer33", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm33", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm33", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm33", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm33", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm33", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig33", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer33", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm34", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor34", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm34", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer34", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm34", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm34", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm34", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm34", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm34", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig34", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer34", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm35", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor35", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm35", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer35", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm35", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm35", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm35", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm35", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm35", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig35", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer35", + "type": "Digitizer" + }, + { + "data": { + "tag_rules": [ + { + "frame": { + ".*": "orig" + }, + "merge": { + "orig\\d+": "daq" + } + } + ] + }, + "type": "Retagger" + }, + { + "data": { + "anodes_tn": [ + "AnodePlane:crm0", + "AnodePlane:crm1", + "AnodePlane:crm2", + "AnodePlane:crm3", + "AnodePlane:crm4", + "AnodePlane:crm5", + "AnodePlane:crm6", + "AnodePlane:crm7", + "AnodePlane:crm8", + "AnodePlane:crm9", + "AnodePlane:crm10", + "AnodePlane:crm11", + "AnodePlane:crm12", + "AnodePlane:crm13", + "AnodePlane:crm14", + "AnodePlane:crm15", + "AnodePlane:crm16", + "AnodePlane:crm17", + "AnodePlane:crm18", + "AnodePlane:crm19", + "AnodePlane:crm20", + "AnodePlane:crm21", + "AnodePlane:crm22", + "AnodePlane:crm23", + "AnodePlane:crm24", + "AnodePlane:crm25", + "AnodePlane:crm26", + "AnodePlane:crm27", + "AnodePlane:crm28", + "AnodePlane:crm29", + "AnodePlane:crm30", + "AnodePlane:crm31", + "AnodePlane:crm32", + "AnodePlane:crm33", + "AnodePlane:crm34", + "AnodePlane:crm35" + ] + }, + "name": "meganodes", + "type": "MegaAnodePlane" + }, + { + "data": { + "anode": "MegaAnodePlane:meganodes", + "digitize": true, + "frame_tags": [ + "daq" + ], + "pedestal_mean": "native" + }, + "name": "simdigits", + "type": "wclsFrameSaver" + }, + { + "type": "DumpFrames" + }, + { + "data": { + "edges": [ + { + "head": { + "node": "Drifter", + "port": 0 + }, + "tail": { + "node": "wclsSimDepoSource", + "port": 0 + } + }, + { + "head": { + "node": "wclsSimChannelSink:postdrift", + "port": 0 + }, + "tail": { + "node": "Drifter", + "port": 0 + } + }, + { + "head": { + "node": "DepoBagger:bagger", + "port": 0 + }, + "tail": { + "node": "wclsSimChannelSink:postdrift", + "port": 0 + } + }, + { + "head": { + "node": "DepoSetFanout:layer1", + "port": 0 + }, + "tail": { + "node": "DepoBagger:bagger", + "port": 0 + } + }, + { + "head": { + "node": "Retagger", + "port": 0 + }, + "tail": { + "node": "FrameFanin:layer3", + "port": 0 + } + }, + { + "head": { + "node": "wclsFrameSaver:simdigits", + "port": 0 + }, + "tail": { + "node": "Retagger", + "port": 0 + } + }, + { + "head": { + "node": "DumpFrames", + "port": 0 + }, + "tail": { + "node": "wclsFrameSaver:simdigits", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor0", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor1", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor2", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor3", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor4", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor5", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor6", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor7", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor8", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor9", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor10", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor11", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor12", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor13", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor14", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor15", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor16", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor17", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor18", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor19", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor20", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor21", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor22", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor23", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor24", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor25", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor26", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor27", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor28", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor29", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor30", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor31", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor32", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor33", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor34", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor35", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 5 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer0", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer1", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer2", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer3", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer4", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer5", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer6", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer7", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer8", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer9", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer10", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer11", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer12", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer13", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer14", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer15", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer16", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer17", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer18", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer19", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer20", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer21", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer22", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer23", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer24", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer25", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer26", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer27", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer28", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer29", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer30", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer31", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer32", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer33", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer34", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer35", + "port": 0 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_00", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 0 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_01", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 1 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_02", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 2 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_03", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 3 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_04", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 4 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_05", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 5 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 0 + }, + "tail": { + "node": "FrameFanin:layer4_00", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 1 + }, + "tail": { + "node": "FrameFanin:layer4_01", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 2 + }, + "tail": { + "node": "FrameFanin:layer4_02", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 3 + }, + "tail": { + "node": "FrameFanin:layer4_03", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 4 + }, + "tail": { + "node": "FrameFanin:layer4_04", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 5 + }, + "tail": { + "node": "FrameFanin:layer4_05", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer0", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor0", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm0", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer0", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer0", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm0", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer1", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor1", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm1", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer1", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer1", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm1", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer2", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor2", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm2", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer2", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer2", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm2", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer3", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor3", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm3", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer3", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer3", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm3", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer4", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor4", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm4", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer4", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer4", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm4", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer5", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor5", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm5", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer5", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer5", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm5", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer6", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor6", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm6", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer6", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer6", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm6", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer7", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor7", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm7", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer7", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer7", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm7", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer8", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor8", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm8", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer8", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer8", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm8", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer9", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor9", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm9", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer9", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer9", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm9", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer10", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor10", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm10", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer10", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer10", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm10", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer11", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor11", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm11", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer11", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer11", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm11", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer12", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor12", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm12", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer12", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer12", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm12", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer13", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor13", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm13", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer13", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer13", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm13", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer14", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor14", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm14", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer14", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer14", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm14", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer15", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor15", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm15", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer15", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer15", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm15", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer16", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor16", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm16", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer16", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer16", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm16", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer17", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor17", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm17", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer17", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer17", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm17", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer18", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor18", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm18", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer18", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer18", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm18", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer19", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor19", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm19", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer19", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer19", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm19", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer20", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor20", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm20", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer20", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer20", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm20", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer21", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor21", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm21", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer21", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer21", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm21", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer22", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor22", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm22", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer22", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer22", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm22", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer23", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor23", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm23", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer23", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer23", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm23", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer24", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor24", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm24", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer24", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer24", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm24", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer25", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor25", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm25", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer25", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer25", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm25", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer26", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor26", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm26", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer26", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer26", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm26", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer27", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor27", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm27", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer27", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer27", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm27", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer28", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor28", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm28", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer28", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer28", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm28", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer29", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor29", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm29", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer29", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer29", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm29", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer30", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor30", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm30", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer30", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer30", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm30", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer31", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor31", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm31", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer31", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer31", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm31", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer32", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor32", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm32", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer32", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer32", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm32", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer33", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor33", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm33", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer33", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer33", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm33", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer34", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor34", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm34", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer34", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer34", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm34", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer35", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor35", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm35", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer35", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer35", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm35", + "port": 0 + } + } + ] + }, + "type": "Pgrapher" + } +] diff --git a/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-3view30deg.json b/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-3view30deg.json new file mode 100644 index 000000000..35802c6f5 --- /dev/null +++ b/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-3view30deg.json @@ -0,0 +1,5897 @@ +[ + { + "data": { + "art_tag": "IonAndScint", + "assn_art_tag": "", + "model": "", + "scale": -1 + }, + "name": "", + "type": "wclsSimDepoSource" + }, + { + "data": { + "generator": "default", + "seeds": [ + 0, + 1, + 2, + 3, + 4 + ] + }, + "type": "Random" + }, + { + "data": { + "DL": 3.9999999999999998e-07, + "DT": 8.8000000000000015e-07, + "ar39activity": 1.6021764870000004e-34, + "density": 8669456899850258432, + "drift_speed": 0.001565, + "fluctuate": true, + "lifetime": 10400000, + "rng": "Random", + "time_offset": 0, + "xregions": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ] + }, + "type": "Drifter" + }, + { + "data": { + "filename": "dunevd10kt-1x6x6-3view30deg-wires-v1.json.bz2" + }, + "type": "WireSchemaFile" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 0, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm0", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 1, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm1", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 2, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm2", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 3, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm3", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 4, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm4", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 5, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm5", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 6, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm6", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 7, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm7", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 8, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm8", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 9, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm9", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 10, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm10", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 11, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm11", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 12, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm12", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 13, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm13", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 14, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm14", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 15, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm15", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 16, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm16", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 17, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm17", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 18, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm18", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 19, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm19", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 20, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm20", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 21, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm21", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 22, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm22", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 23, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm23", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 24, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm24", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 25, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm25", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 26, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm26", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 27, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm27", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 28, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm28", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 29, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm29", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 30, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm30", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 31, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm31", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 32, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm32", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 33, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm33", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 34, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm34", + "type": "AnodePlane" + }, + { + "data": { + "faces": [ + { + "anode": 3250, + "cathode": -3250, + "response": 3060.8000000000002 + }, + null + ], + "ident": 35, + "nimpacts": 10, + "wire_schema": "WireSchemaFile" + }, + "name": "crm35", + "type": "AnodePlane" + }, + { + "data": { + "anodes_tn": [ + "AnodePlane:crm0", + "AnodePlane:crm1", + "AnodePlane:crm2", + "AnodePlane:crm3", + "AnodePlane:crm4", + "AnodePlane:crm5", + "AnodePlane:crm6", + "AnodePlane:crm7", + "AnodePlane:crm8", + "AnodePlane:crm9", + "AnodePlane:crm10", + "AnodePlane:crm11", + "AnodePlane:crm12", + "AnodePlane:crm13", + "AnodePlane:crm14", + "AnodePlane:crm15", + "AnodePlane:crm16", + "AnodePlane:crm17", + "AnodePlane:crm18", + "AnodePlane:crm19", + "AnodePlane:crm20", + "AnodePlane:crm21", + "AnodePlane:crm22", + "AnodePlane:crm23", + "AnodePlane:crm24", + "AnodePlane:crm25", + "AnodePlane:crm26", + "AnodePlane:crm27", + "AnodePlane:crm28", + "AnodePlane:crm29", + "AnodePlane:crm30", + "AnodePlane:crm31", + "AnodePlane:crm32", + "AnodePlane:crm33", + "AnodePlane:crm34", + "AnodePlane:crm35" + ], + "artlabel": "simpleSC", + "drift_speed": 0.001565, + "g4_ref_time": 0, + "nsigma": 3, + "readout_time": 4687500, + "response_plane": 189.20000000000002, + "rng": "Random", + "start_time": -250000, + "tick": 500, + "u_time_offset": 0, + "u_to_rp": 189.20000000000002, + "use_energy": true, + "v_time_offset": 0, + "v_to_rp": 189.20000000000002, + "y_time_offset": 0, + "y_to_rp": 189.20000000000002 + }, + "name": "postdrift", + "type": "wclsSimChannelSink" + }, + { + "data": { + "gate": [ + -63897.76357827476, + 4687602.2364217248 + ] + }, + "name": "bagger", + "type": "DepoBagger" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer1", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_00", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_01", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_02", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_03", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_04", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tag_rules": [ ] + }, + "name": "layer2_05", + "type": "DepoSetFanout" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_00", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_01", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_02", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_03", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_04", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer4_05", + "type": "FrameFanin" + }, + { + "data": { + "multiplicity": 6, + "tags": [ + "orig0", + "orig1", + "orig2", + "orig3", + "orig4", + "orig5", + "orig6", + "orig7", + "orig8", + "orig9", + "orig10", + "orig11", + "orig12", + "orig13", + "orig14", + "orig15", + "orig16", + "orig17", + "orig18", + "orig19", + "orig20", + "orig21", + "orig22", + "orig23", + "orig24", + "orig25", + "orig26", + "orig27", + "orig28", + "orig29", + "orig30", + "orig31", + "orig32", + "orig33", + "orig34", + "orig35" + ] + }, + "name": "layer3", + "type": "FrameFanin" + }, + { + "data": { + "filename": "dunevd-resp-isoc3views-18d92.json.bz2" + }, + "name": "field0", + "type": "FieldResponse" + }, + { + "data": { + "gain": 1.9226117844000003e-12, + "nticks": 9503, + "postgain": 1, + "shaping": 1200, + "tick": 500 + }, + "type": "ColdElecResponse" + }, + { + "data": { + "nticks": 9503, + "tick": 500, + "width": 1000000 + }, + "type": "RCResponse" + }, + { + "data": { + "magnitude": 1, + "nticks": 9503, + "start": 0, + "tick": 500, + "time_smear": 1000 + }, + "type": "ResponseSys" + }, + { + "data": { + "field_response": "FieldResponse:field0", + "long_padding": 1500000, + "long_responses": [ + "RCResponse", + "RCResponse" + ], + "nticks": 9503, + "overall_short_padding": 200000, + "plane": 0, + "short_responses": [ + "ColdElecResponse" + ], + "tick": 500 + }, + "name": "PIRfield0plane0", + "type": "PlaneImpactResponse" + }, + { + "data": { + "field_response": "FieldResponse:field0", + "long_padding": 1500000, + "long_responses": [ + "RCResponse", + "RCResponse" + ], + "nticks": 9503, + "overall_short_padding": 200000, + "plane": 1, + "short_responses": [ + "ColdElecResponse" + ], + "tick": 500 + }, + "name": "PIRfield0plane1", + "type": "PlaneImpactResponse" + }, + { + "data": { + "field_response": "FieldResponse:field0", + "long_padding": 1500000, + "long_responses": [ + "RCResponse", + "RCResponse" + ], + "nticks": 9503, + "overall_short_padding": 200000, + "plane": 2, + "short_responses": [ + "ColdElecResponse" + ], + "tick": 500 + }, + "name": "PIRfield0plane2", + "type": "PlaneImpactResponse" + }, + { + "data": { + "anode": "AnodePlane:crm0", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor0", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm0", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer0", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm0", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm0", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm0", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm0", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm0", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig0", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer0", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm1", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor1", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm1", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer1", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm1", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm1", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm1", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm1", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm1", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig1", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer1", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm2", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor2", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm2", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer2", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm2", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm2", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm2", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm2", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm2", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig2", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer2", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm3", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor3", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm3", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer3", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm3", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm3", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm3", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm3", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm3", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig3", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer3", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm4", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor4", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm4", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer4", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm4", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm4", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm4", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm4", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm4", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig4", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer4", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm5", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor5", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm5", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer5", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm5", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm5", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm5", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm5", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm5", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig5", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer5", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm6", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor6", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm6", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer6", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm6", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm6", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm6", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm6", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm6", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig6", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer6", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm7", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor7", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm7", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer7", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm7", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm7", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm7", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm7", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm7", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig7", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer7", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm8", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor8", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm8", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer8", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm8", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm8", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm8", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm8", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm8", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig8", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer8", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm9", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor9", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm9", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer9", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm9", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm9", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm9", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm9", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm9", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig9", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer9", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm10", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor10", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm10", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer10", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm10", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm10", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm10", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm10", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm10", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig10", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer10", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm11", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor11", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm11", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer11", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm11", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm11", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm11", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm11", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm11", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig11", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer11", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm12", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor12", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm12", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer12", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm12", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm12", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm12", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm12", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm12", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig12", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer12", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm13", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor13", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm13", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer13", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm13", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm13", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm13", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm13", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm13", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig13", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer13", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm14", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor14", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm14", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer14", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm14", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm14", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm14", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm14", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm14", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig14", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer14", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm15", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor15", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm15", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer15", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm15", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm15", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm15", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm15", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm15", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig15", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer15", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm16", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor16", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm16", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer16", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm16", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm16", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm16", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm16", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm16", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig16", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer16", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm17", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor17", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm17", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer17", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm17", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm17", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm17", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm17", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm17", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig17", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer17", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm18", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor18", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm18", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer18", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm18", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm18", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm18", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm18", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm18", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig18", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer18", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm19", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor19", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm19", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer19", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm19", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm19", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm19", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm19", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm19", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig19", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer19", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm20", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor20", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm20", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer20", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm20", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm20", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm20", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm20", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm20", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig20", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer20", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm21", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor21", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm21", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer21", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm21", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm21", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm21", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm21", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm21", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig21", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer21", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm22", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor22", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm22", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer22", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm22", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm22", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm22", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm22", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm22", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig22", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer22", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm23", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor23", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm23", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer23", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm23", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm23", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm23", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm23", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm23", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig23", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer23", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm24", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor24", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm24", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer24", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm24", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm24", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm24", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm24", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm24", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig24", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer24", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm25", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor25", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm25", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer25", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm25", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm25", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm25", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm25", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm25", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig25", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer25", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm26", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor26", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm26", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer26", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm26", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm26", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm26", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm26", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm26", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig26", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer26", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm27", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor27", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm27", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer27", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm27", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm27", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm27", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm27", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm27", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig27", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer27", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm28", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor28", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm28", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer28", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm28", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm28", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm28", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm28", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm28", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig28", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer28", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm29", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor29", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm29", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer29", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm29", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm29", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm29", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm29", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm29", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig29", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer29", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm30", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor30", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm30", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer30", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm30", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm30", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm30", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm30", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm30", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig30", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer30", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm31", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor31", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm31", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer31", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm31", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm31", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm31", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm31", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm31", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig31", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer31", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm32", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor32", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm32", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer32", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm32", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm32", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm32", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm32", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm32", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig32", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer32", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm33", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor33", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm33", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer33", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm33", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm33", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm33", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm33", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm33", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig33", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer33", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm34", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor34", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm34", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer34", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm34", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm34", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm34", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm34", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm34", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig34", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer34", + "type": "Digitizer" + }, + { + "data": { + "anode": "AnodePlane:crm35", + "drift_speed": 0.001565, + "first_frame_number": 100, + "fluctuate": true, + "nsigma": 3, + "pirs": [ + "PlaneImpactResponse:PIRfield0plane0", + "PlaneImpactResponse:PIRfield0plane1", + "PlaneImpactResponse:PIRfield0plane2" + ], + "readout_time": 4751500, + "rng": "Random", + "start_time": -63897.76357827476, + "tick": 500 + }, + "name": "ductor35", + "type": "DepoTransform" + }, + { + "data": { + "anode": "AnodePlane:crm35", + "fill": 0, + "nticks": 9375, + "tags": [ ], + "tbin": 128, + "toffset": 0 + }, + "name": "reframer35", + "type": "Reframer" + }, + { + "data": { + "anode": "AnodePlane:crm35", + "chanstat": "", + "nsamples": 9375, + "period": 500, + "spectra_file": "dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2", + "wire_length_scale": 10 + }, + "name": "empericalnoisecrm35", + "type": "EmpiricalNoiseModel" + }, + { + "data": { + "model": "EmpiricalNoiseModel:empericalnoisecrm35", + "nsamples": 9375, + "replacement_percentage": 0.02, + "rng": "Random" + }, + "name": "addnoiseempericalnoisecrm35", + "type": "AddNoise" + }, + { + "data": { + "anode": "AnodePlane:crm35", + "baselines": [ + 9.0000000000000007e-07, + 9.0000000000000007e-07, + 2.0000000000000002e-07 + ], + "frame_tag": "orig35", + "fullscale": [ + 0, + 1.9999999999999999e-06 + ], + "gain": 1, + "resolution": 12 + }, + "name": "digitizer35", + "type": "Digitizer" + }, + { + "data": { + "tag_rules": [ + { + "frame": { + ".*": "orig" + }, + "merge": { + "orig\\d+": "daq" + } + } + ] + }, + "type": "Retagger" + }, + { + "data": { + "anodes_tn": [ + "AnodePlane:crm0", + "AnodePlane:crm1", + "AnodePlane:crm2", + "AnodePlane:crm3", + "AnodePlane:crm4", + "AnodePlane:crm5", + "AnodePlane:crm6", + "AnodePlane:crm7", + "AnodePlane:crm8", + "AnodePlane:crm9", + "AnodePlane:crm10", + "AnodePlane:crm11", + "AnodePlane:crm12", + "AnodePlane:crm13", + "AnodePlane:crm14", + "AnodePlane:crm15", + "AnodePlane:crm16", + "AnodePlane:crm17", + "AnodePlane:crm18", + "AnodePlane:crm19", + "AnodePlane:crm20", + "AnodePlane:crm21", + "AnodePlane:crm22", + "AnodePlane:crm23", + "AnodePlane:crm24", + "AnodePlane:crm25", + "AnodePlane:crm26", + "AnodePlane:crm27", + "AnodePlane:crm28", + "AnodePlane:crm29", + "AnodePlane:crm30", + "AnodePlane:crm31", + "AnodePlane:crm32", + "AnodePlane:crm33", + "AnodePlane:crm34", + "AnodePlane:crm35" + ] + }, + "name": "meganodes", + "type": "MegaAnodePlane" + }, + { + "data": { + "anode": "MegaAnodePlane:meganodes", + "digitize": true, + "frame_tags": [ + "daq" + ], + "pedestal_mean": "native" + }, + "name": "simdigits", + "type": "wclsFrameSaver" + }, + { + "type": "DumpFrames" + }, + { + "data": { + "edges": [ + { + "head": { + "node": "Drifter", + "port": 0 + }, + "tail": { + "node": "wclsSimDepoSource", + "port": 0 + } + }, + { + "head": { + "node": "wclsSimChannelSink:postdrift", + "port": 0 + }, + "tail": { + "node": "Drifter", + "port": 0 + } + }, + { + "head": { + "node": "DepoBagger:bagger", + "port": 0 + }, + "tail": { + "node": "wclsSimChannelSink:postdrift", + "port": 0 + } + }, + { + "head": { + "node": "DepoSetFanout:layer1", + "port": 0 + }, + "tail": { + "node": "DepoBagger:bagger", + "port": 0 + } + }, + { + "head": { + "node": "Retagger", + "port": 0 + }, + "tail": { + "node": "FrameFanin:layer3", + "port": 0 + } + }, + { + "head": { + "node": "wclsFrameSaver:simdigits", + "port": 0 + }, + "tail": { + "node": "Retagger", + "port": 0 + } + }, + { + "head": { + "node": "DumpFrames", + "port": 0 + }, + "tail": { + "node": "wclsFrameSaver:simdigits", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor0", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor1", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor2", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor3", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor4", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor5", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_00", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor6", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor7", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor8", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor9", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor10", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor11", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_01", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor12", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor13", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor14", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor15", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor16", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor17", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_02", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor18", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor19", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor20", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor21", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor22", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor23", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_03", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor24", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor25", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor26", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor27", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor28", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor29", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_04", + "port": 5 + } + }, + { + "head": { + "node": "DepoTransform:ductor30", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 0 + } + }, + { + "head": { + "node": "DepoTransform:ductor31", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 1 + } + }, + { + "head": { + "node": "DepoTransform:ductor32", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 2 + } + }, + { + "head": { + "node": "DepoTransform:ductor33", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 3 + } + }, + { + "head": { + "node": "DepoTransform:ductor34", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 4 + } + }, + { + "head": { + "node": "DepoTransform:ductor35", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer2_05", + "port": 5 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer0", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer1", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer2", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer3", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer4", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_00", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer5", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer6", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer7", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer8", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer9", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer10", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_01", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer11", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer12", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer13", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer14", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer15", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer16", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_02", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer17", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer18", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer19", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer20", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer21", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer22", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_03", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer23", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer24", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer25", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer26", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer27", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer28", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_04", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer29", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 0 + }, + "tail": { + "node": "Digitizer:digitizer30", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 1 + }, + "tail": { + "node": "Digitizer:digitizer31", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 2 + }, + "tail": { + "node": "Digitizer:digitizer32", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 3 + }, + "tail": { + "node": "Digitizer:digitizer33", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 4 + }, + "tail": { + "node": "Digitizer:digitizer34", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer4_05", + "port": 5 + }, + "tail": { + "node": "Digitizer:digitizer35", + "port": 0 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_00", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 0 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_01", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 1 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_02", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 2 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_03", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 3 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_04", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 4 + } + }, + { + "head": { + "node": "DepoSetFanout:layer2_05", + "port": 0 + }, + "tail": { + "node": "DepoSetFanout:layer1", + "port": 5 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 0 + }, + "tail": { + "node": "FrameFanin:layer4_00", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 1 + }, + "tail": { + "node": "FrameFanin:layer4_01", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 2 + }, + "tail": { + "node": "FrameFanin:layer4_02", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 3 + }, + "tail": { + "node": "FrameFanin:layer4_03", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 4 + }, + "tail": { + "node": "FrameFanin:layer4_04", + "port": 0 + } + }, + { + "head": { + "node": "FrameFanin:layer3", + "port": 5 + }, + "tail": { + "node": "FrameFanin:layer4_05", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer0", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor0", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm0", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer0", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer0", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm0", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer1", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor1", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm1", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer1", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer1", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm1", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer2", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor2", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm2", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer2", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer2", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm2", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer3", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor3", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm3", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer3", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer3", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm3", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer4", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor4", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm4", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer4", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer4", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm4", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer5", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor5", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm5", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer5", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer5", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm5", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer6", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor6", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm6", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer6", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer6", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm6", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer7", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor7", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm7", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer7", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer7", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm7", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer8", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor8", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm8", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer8", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer8", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm8", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer9", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor9", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm9", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer9", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer9", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm9", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer10", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor10", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm10", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer10", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer10", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm10", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer11", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor11", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm11", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer11", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer11", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm11", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer12", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor12", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm12", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer12", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer12", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm12", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer13", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor13", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm13", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer13", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer13", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm13", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer14", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor14", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm14", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer14", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer14", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm14", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer15", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor15", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm15", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer15", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer15", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm15", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer16", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor16", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm16", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer16", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer16", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm16", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer17", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor17", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm17", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer17", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer17", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm17", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer18", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor18", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm18", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer18", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer18", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm18", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer19", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor19", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm19", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer19", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer19", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm19", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer20", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor20", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm20", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer20", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer20", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm20", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer21", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor21", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm21", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer21", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer21", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm21", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer22", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor22", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm22", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer22", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer22", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm22", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer23", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor23", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm23", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer23", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer23", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm23", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer24", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor24", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm24", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer24", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer24", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm24", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer25", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor25", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm25", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer25", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer25", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm25", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer26", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor26", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm26", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer26", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer26", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm26", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer27", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor27", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm27", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer27", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer27", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm27", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer28", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor28", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm28", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer28", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer28", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm28", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer29", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor29", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm29", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer29", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer29", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm29", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer30", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor30", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm30", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer30", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer30", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm30", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer31", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor31", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm31", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer31", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer31", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm31", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer32", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor32", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm32", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer32", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer32", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm32", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer33", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor33", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm33", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer33", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer33", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm33", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer34", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor34", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm34", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer34", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer34", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm34", + "port": 0 + } + }, + { + "head": { + "node": "Reframer:reframer35", + "port": 0 + }, + "tail": { + "node": "DepoTransform:ductor35", + "port": 0 + } + }, + { + "head": { + "node": "AddNoise:addnoiseempericalnoisecrm35", + "port": 0 + }, + "tail": { + "node": "Reframer:reframer35", + "port": 0 + } + }, + { + "head": { + "node": "Digitizer:digitizer35", + "port": 0 + }, + "tail": { + "node": "AddNoise:addnoiseempericalnoisecrm35", + "port": 0 + } + } + ] + }, + "type": "Pgrapher" + } +] diff --git a/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-json.fcl b/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-json.fcl new file mode 100644 index 000000000..ba1eb8454 --- /dev/null +++ b/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-json.fcl @@ -0,0 +1,68 @@ +#include "services_dune.fcl" + +process_name: wclssim +physics :{ + producers: { + plopper : { + module_type : BlipMaker + } + tpcrawdecoder : { + module_type : WireCellToolkit + wcls_main: { + tool_type: WCLS + apps: ["Pgrapher"] + # apps: ["TbbFlow"] + + logsinks: ["stdout:info", "wcls-sim-drift-simchannel.log:debug"] + loglevels: ["debug"] + + plugins: ["WireCellPgraph", "WireCellGen","WireCellSio","WireCellRoot","WireCellLarsoft","WireCellTbb"] + + // needs to be found via your WIRECELL_PATH + # configs: ["pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-3view.json"] + # configs: ["pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-3view30deg.json"] + configs: ["pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel-2view.json"] + + + // Contract note: these exact "type:name" must be used to identify + // the configuration data structures for these components in the Jsonnet. + + inputers: ["wclsSimDepoSource:"] + outputers: [ + "wclsSimChannelSink:postdrift", + "wclsFrameSaver:simdigits" + ] + + // Make available parameters via Jsonnet's std.extVar() + params: { + } + structs: { + } + } + } + } + p1 : [ plopper, tpcrawdecoder ] + outputFiles : [ out ] + + trigger_paths : [ p1 ] + end_paths: [ outputFiles ] +} +outputs: { + out: { + module_type: RootOutput + // fileName: "%ifb_wcsim.root" + fileName: "wcsim.root" + + outputCommands : [ + // "drop *", "keep recob::Wires_*_*_*" + "keep *_*_*_*" + // "drop *_nfspl1_raw_*", + // "drop *_nfspl1_threshold_*", + // "drop *_nfspl1_wiener_*", + // "drop *_nfspl1_gauss_*", + // "drop *_wcNoiseFilter_*_*", + // "drop *_daq_*_*" + ] + + } +} diff --git a/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel.fcl b/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel.fcl index debb5772e..8c02008d2 100644 --- a/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel.fcl +++ b/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel.fcl @@ -18,8 +18,7 @@ physics :{ plugins: ["WireCellPgraph", "WireCellGen","WireCellSio","WireCellRoot","WireCellLarsoft","WireCellTbb"] - // needs to be found via your WIRECELL_PATH - # configs: ["pgrapher/experiment/dune10kt-1x2x6/wcls-sim-drift-simchannel.jsonnet"] + // needs to be found via your WIRECELL_PATH configs: ["pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel.jsonnet"] @@ -49,12 +48,14 @@ physics :{ driftSpeed: 1.565 # G4RefTime G4RefTime: @local::dunefd_detectorclocks.G4RefTime + # response plane [cm] + response_plane: 10.0 # file: wires - files_wires: "\"dunevd10kt_3view_30deg_v1_1x6x6.json.bz2\"" + files_wires: "\"dunevd10kt-1x6x6-3view30deg-wires-v1.json.bz2\"" # file: fields files_fields: "\"pcbro-response-avg.json.bz2\"" # file: noise - files_noise: "\"dunevd10kt_3view_30deg_noise_spectra_v1.json.bz2\"" + files_noise: "\"dunevd10kt-1x6x6-3view30deg-noise-spectra-v1.json.bz2\"" } } diff --git a/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel.jsonnet b/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel.jsonnet index cfc9da314..06aba27b3 100644 --- a/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel.jsonnet +++ b/cfg/pgrapher/experiment/dune-vd/wcls-sim-drift-simchannel.jsonnet @@ -13,7 +13,8 @@ local wc = import 'wirecell.jsonnet'; local io = import 'pgrapher/common/fileio.jsonnet'; local tools_maker = import 'pgrapher/common/tools.jsonnet'; local base = import 'pgrapher/experiment/dune-vd/params.jsonnet'; -local params = base { +local response_plane = std.extVar('response_plane')*wc.cm; +local params = base(response_plane) { lar: super.lar { // Longitudinal diffusion constant DL: std.extVar('DL') * wc.cm2 / wc.s, @@ -149,14 +150,15 @@ local wcls_simchannel_sink = g.pnode({ readout_time: params.daq.readout_time, nsigma: 3.0, drift_speed: params.lar.drift_speed, - u_to_rp: 100 * wc.mm, // 90.58 * wc.mm, - v_to_rp: 100 * wc.mm, // 95.29 * wc.mm, - y_to_rp: 100 * wc.mm, + u_to_rp: response_plane, // 90.58 * wc.mm, + v_to_rp: response_plane, // 95.29 * wc.mm, + y_to_rp: response_plane, u_time_offset: 0.0 * wc.us, v_time_offset: 0.0 * wc.us, y_time_offset: 0.0 * wc.us, g4_ref_time: G4RefTime, use_energy: true, + response_plane: response_plane, }, }, nin=1, nout=1, uses=tools.anodes); @@ -202,7 +204,7 @@ local multipass = [ sn_pipes[n], // origmagnify_pipe[n], // nf_pipes[n], - sp_pipes[n], + // sp_pipes[n], // spmagnify_pipe[n], ], 'multipass%d' % n) diff --git a/cfg/pgrapher/experiment/dune10kt-1x2x6/params.jsonnet b/cfg/pgrapher/experiment/dune10kt-1x2x6/params.jsonnet index 2c6e61cd6..7a7e80218 100644 --- a/cfg/pgrapher/experiment/dune10kt-1x2x6/params.jsonnet +++ b/cfg/pgrapher/experiment/dune10kt-1x2x6/params.jsonnet @@ -4,7 +4,7 @@ local wc = import "wirecell.jsonnet"; local base = import "pgrapher/common/params.jsonnet"; -base { +function(params) base { // This section will be overwritten in simparams.jsonnet det : { @@ -141,7 +141,7 @@ base { // The "absolute" time (ie, in G4 time) that the lower edge of // of final readout tick #0 should correspond to. This is a // "fixed" notion. - local tick0_time = -250*wc.us, + local tick0_time = if std.objectHas(params, 'G4RefTime') then params.G4RefTime else 0, // Open the ductor's gate a bit early. local response_time_offset = $.det.response_plane / $.lar.drift_speed, diff --git a/cfg/pgrapher/experiment/dune10kt-1x2x6/simparams.jsonnet b/cfg/pgrapher/experiment/dune10kt-1x2x6/simparams.jsonnet index d4cfebf15..189aa666f 100644 --- a/cfg/pgrapher/experiment/dune10kt-1x2x6/simparams.jsonnet +++ b/cfg/pgrapher/experiment/dune10kt-1x2x6/simparams.jsonnet @@ -3,7 +3,7 @@ local base = import 'pgrapher/experiment/dune10kt-1x2x6/params.jsonnet'; local wc = import 'wirecell.jsonnet'; -base { +function(params) base(params) { // lar: super.lar { // // Longitudinal diffusion constant // DL : 4.0 * wc.cm2/wc.s, diff --git a/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-blip-sim-drift-simchannel.jsonnet b/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-blip-sim-drift-simchannel.jsonnet index abf994ed7..d908a451f 100644 --- a/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-blip-sim-drift-simchannel.jsonnet +++ b/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-blip-sim-drift-simchannel.jsonnet @@ -12,8 +12,11 @@ local wc = import 'wirecell.jsonnet'; local io = import 'pgrapher/common/fileio.jsonnet'; local tools_maker = import 'pgrapher/common/tools.jsonnet'; -local base = import 'pgrapher/experiment/dune10kt-1x2x6/simparams.jsonnet'; -local params = base { +local params_maker = import 'pgrapher/experiment/dune10kt-1x2x6/simparams.jsonnet'; +local fcl_params = { + G4RefTime: std.extVar('G4RefTime') * wc.us, +}; +local params = params_maker(fcl_params) { lar: super.lar { // Longitudinal diffusion constant DL: std.extVar('DL') * wc.cm2 / wc.s, @@ -150,7 +153,7 @@ local wcls_simchannel_sink = g.pnode({ u_time_offset: 0.0 * wc.us, v_time_offset: 0.0 * wc.us, y_time_offset: 0.0 * wc.us, - g4_ref_time: -250 * wc.us, + g4_ref_time: fcl_params.G4RefTime, use_energy: true, }, }, nin=1, nout=1, uses=tools.anodes); diff --git a/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-nf-sp.jsonnet b/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-nf-sp.jsonnet index 8815f9f81..0132824a5 100644 --- a/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-nf-sp.jsonnet +++ b/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-nf-sp.jsonnet @@ -33,8 +33,8 @@ local raw_input_label = std.extVar('raw_input_label'); // eg "daq" local data_params = import 'params.jsonnet'; local simu_params = import 'simparams.jsonnet'; -local params = if reality == 'data' then data_params else simu_params; - +local params_maker = if reality == 'data' then data_params else simu_params; +local params = params_maker({}); local tools_maker = import 'pgrapher/common/tools.jsonnet'; local tools = tools_maker(params); diff --git a/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-sim-drift-simchannel.fcl b/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-sim-drift-simchannel.fcl new file mode 100644 index 000000000..8cc34f1de --- /dev/null +++ b/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-sim-drift-simchannel.fcl @@ -0,0 +1,76 @@ +#include "services_dune.fcl" + +process_name: wclssim +physics :{ + producers: { + plopper : { + module_type : BlipMaker + } + tpcrawdecoder : { + module_type : WireCellToolkit + wcls_main: { + tool_type: WCLS + apps: ["Pgrapher"] + + logsinks: ["stdout:info", "wcls-sim-drift-simchannel.log:debug"] + loglevels: ["debug"] + + plugins: ["WireCellPgraph", "WireCellGen","WireCellSio","WireCellRoot","WireCellLarsoft","WireCellTbb"] + + // needs to be found via your WIRECELL_PATH + configs: ["pgrapher/experiment/dune10kt-1x2x6/wcls-sim-drift-simchannel.jsonnet"] + + + // Contract note: these exact "type:name" must be used to identify + // the configuration data structures for these components in the Jsonnet. + + inputers: ["wclsSimDepoSource:"] + outputers: [ + "wclsSimChannelSink:postdrift", + "wclsFrameSaver:simdigits" + ] + + // Make available parameters via Jsonnet's std.extVar() + params: { + } + structs: { + # Longitudinal diffusion constant [cm2/s] + DL: 4.0 + # Transverse diffusion constant [cm2/s] + DT: 8.8 + # Electron lifetime [ms] + lifetime: 10.4 + # Electron drift speed, assumes a certain applied E-field [mm/us] + driftSpeed: 1.565 + # G4RefTime [us] + G4RefTime: @local::dunefd_detectorclocks.G4RefTime + } + + } + } + } + p1 : [ plopper, tpcrawdecoder ] + outputFiles : [ out ] + + trigger_paths : [ p1 ] + end_paths: [ outputFiles ] +} +outputs: { + out: { + module_type: RootOutput + // fileName: "%ifb_wcsim.root" + fileName: "wcsim.root" + + outputCommands : [ + // "drop *", "keep recob::Wires_*_*_*" + "keep *_*_*_*" + // "drop *_nfspl1_raw_*", + // "drop *_nfspl1_threshold_*", + // "drop *_nfspl1_wiener_*", + // "drop *_nfspl1_gauss_*", + // "drop *_wcNoiseFilter_*_*", + // "drop *_daq_*_*" + ] + + } +} diff --git a/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-sim-drift-simchannel.jsonnet b/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-sim-drift-simchannel.jsonnet index f238478dc..0437e98dc 100644 --- a/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-sim-drift-simchannel.jsonnet +++ b/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-sim-drift-simchannel.jsonnet @@ -12,8 +12,11 @@ local wc = import 'wirecell.jsonnet'; local io = import 'pgrapher/common/fileio.jsonnet'; local tools_maker = import 'pgrapher/common/tools.jsonnet'; -local base = import 'pgrapher/experiment/dune10kt-1x2x6/simparams.jsonnet'; -local params = base { +local params_maker = import 'pgrapher/experiment/dune10kt-1x2x6/simparams.jsonnet'; +local fcl_params = { + G4RefTime: std.extVar('G4RefTime') * wc.us, +}; +local params = params_maker(fcl_params) { lar: super.lar { // Longitudinal diffusion constant DL: std.extVar('DL') * wc.cm2 / wc.s, @@ -26,7 +29,6 @@ local params = base { }, }; -local G4RefTime = std.extVar('G4RefTime') * wc.us; local tools = tools_maker(params); @@ -150,7 +152,7 @@ local wcls_simchannel_sink = g.pnode({ u_time_offset: 0.0 * wc.us, v_time_offset: 0.0 * wc.us, y_time_offset: 0.0 * wc.us, - g4_ref_time: G4RefTime, // -250 * wc.us, + g4_ref_time: fcl_params.G4RefTime, // -250 * wc.us, use_energy: true, }, }, nin=1, nout=1, uses=tools.anodes); diff --git a/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-sp.jsonnet b/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-sp.jsonnet index db86e10e3..22969c7ba 100644 --- a/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-sp.jsonnet +++ b/cfg/pgrapher/experiment/dune10kt-1x2x6/wcls-sp.jsonnet @@ -34,7 +34,8 @@ local raw_input_label = std.extVar('raw_input_label'); // eg "daq" local data_params = import 'params.jsonnet'; local simu_params = import 'simparams.jsonnet'; -local params = if reality == 'data' then data_params else simu_params; +local params_maker = if reality == 'data' then data_params else simu_params; +local params = params_maker({}); local tools_maker = import 'pgrapher/common/tools.jsonnet'; local tools = tools_maker(params); diff --git a/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-check.jsonnet b/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-check.jsonnet index 879880925..c8c9ba691 100644 --- a/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-check.jsonnet +++ b/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-check.jsonnet @@ -12,7 +12,8 @@ local wc = import 'wirecell.jsonnet'; local io = import 'pgrapher/common/fileio.jsonnet'; local tools_maker = import 'pgrapher/common/tools.jsonnet'; -local params = import 'pgrapher/experiment/dune10kt-1x2x6/simparams.jsonnet'; +local params_maker = import 'pgrapher/experiment/dune10kt-1x2x6/simparams.jsonnet'; +local params = params_maker({}); local tools = tools_maker(params); diff --git a/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-ideal-sig.jsonnet b/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-ideal-sig.jsonnet index 6e32f7482..cd31c4ac0 100644 --- a/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-ideal-sig.jsonnet +++ b/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-ideal-sig.jsonnet @@ -12,7 +12,8 @@ local g = import "pgraph.jsonnet"; local cli = import "pgrapher/ui/cli/nodes.jsonnet"; local io = import "pgrapher/common/fileio.jsonnet"; -local params = import "pgrapher/experiment/dune10kt-1x2x6/params.jsonnet"; +local params_maker = import 'pgrapher/experiment/dune10kt-1x2x6/simparams.jsonnet'; +local params = params_maker({}); local tools_maker = import "pgrapher/common/tools.jsonnet"; local tools = tools_maker(params); diff --git a/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-ideal-sn-nf-sp.jsonnet b/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-ideal-sn-nf-sp.jsonnet index 890c1dded..9b40ccdfc 100644 --- a/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-ideal-sn-nf-sp.jsonnet +++ b/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-ideal-sn-nf-sp.jsonnet @@ -14,7 +14,8 @@ local f = import "pgrapher/common/funcs.jsonnet"; local cli = import "pgrapher/ui/cli/nodes.jsonnet"; local io = import "pgrapher/common/fileio.jsonnet"; -local params = import "pgrapher/experiment/dune10kt-1x2x6/params.jsonnet"; +local params_maker = import 'pgrapher/experiment/dune10kt-1x2x6/simparams.jsonnet'; +local params = params_maker({}); local tools_maker = import "pgrapher/common/tools.jsonnet"; local sim_maker = import "pgrapher/experiment/dune10kt-1x2x6/sim.jsonnet"; // Fixme: currently, no noise filter. Need to at least add a "null" NF to produce thresholds. diff --git a/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-ideal-sn.jsonnet b/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-ideal-sn.jsonnet index d3d1f4faa..c26ac8f5b 100644 --- a/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-ideal-sn.jsonnet +++ b/cfg/pgrapher/experiment/dune10kt-1x2x6/wct-sim-ideal-sn.jsonnet @@ -13,7 +13,8 @@ local f = import "pgrapher/common/funcs.jsonnet"; local cli = import "pgrapher/ui/cli/nodes.jsonnet"; local io = import "pgrapher/common/fileio.jsonnet"; -local params = import "pgrapher/experiment/dune10kt-1x2x6/params.jsonnet"; +local params_maker = import 'pgrapher/experiment/dune10kt-1x2x6/params.jsonnet'; +local params = params_maker({}); local tools_maker = import "pgrapher/common/tools.jsonnet"; local tools = tools_maker(params); diff --git a/cfg/pgrapher/experiment/pdsp/chndb-perfect.jsonnet b/cfg/pgrapher/experiment/pdsp/chndb-perfect.jsonnet index 22b16ccc3..1f5723afa 100644 --- a/cfg/pgrapher/experiment/pdsp/chndb-perfect.jsonnet +++ b/cfg/pgrapher/experiment/pdsp/chndb-perfect.jsonnet @@ -15,10 +15,6 @@ function(params, anode, field, n) // same number of samples. nsamples: params.nf.nsamples, - // For MicroBooNE, channel groups is a 2D list. Each element is - // one group of channels which should be considered together for - // coherent noise filtering. - //groups: [std.range(g*48, (g+1)*48-1) for g in std.range(0,171)], groups: [std.range(n * 2560 + u * 40, n * 2560 + (u + 1) * 40 - 1) for u in std.range(0, 19)] + [std.range(n * 2560 + 800 + v * 40, n * 2560 + 800 + (v + 1) * 40 - 1) for v in std.range(0, 19)] + [std.range(n * 2560 + 1600 + w * 48, n * 2560 + 1600 + (w + 1) * 48 - 1) for w in std.range(0, 19)], diff --git a/cfg/pgrapher/experiment/pdsp/ocndb-perfect.jsonnet b/cfg/pgrapher/experiment/pdsp/ocndb-perfect.jsonnet new file mode 100644 index 000000000..05fe99752 --- /dev/null +++ b/cfg/pgrapher/experiment/pdsp/ocndb-perfect.jsonnet @@ -0,0 +1,106 @@ +// This defines "perfect" channel noise databases for noise filtering +// for pdsp (in yet another way). + +local wc = import "wirecell.jsonnet"; + +// The "perfect noise" database is one that is free of any +// "special" considerations such as per channel variability. The +// "official" perfect chndb depends on the official "chndb-base" +// and that seems to be adulterated with specific settings. We +// try to start fresh here. +function(anode, fr, nsamples, tick=0.5*wc.us) { + local apaid = anode.data.ident, + type:'OmniChannelNoiseDB', + name: std.toString(apaid), + uses: [anode, fr], + data: { + anode: wc.tn(anode), + field_response: wc.tn(fr), + tick: tick, + nsamples: nsamples, + + groups: [ + std.range(apaid * 2560 + u * 40, apaid * 2560 + (u + 1) * 40 - 1) + for u in std.range(0, 19) + ] + [ + std.range(apaid * 2560 + 800 + v * 40, apaid * 2560 + 800 + (v + 1) * 40 - 1) + for v in std.range(0, 19) + ] + [ + std.range(apaid * 2560 + 1600 + w * 48, apaid * 2560 + 1600 + (w + 1) * 48 - 1) + for w in std.range(0, 19) + ], + + // last match wins + channel_info: [ + + // First entry provides default channel info across ALL + // channels. Subsequent entries override a subset of channels + // with a subset of these entries. There's no reason to + // repeat values found here in subsequent entries unless you + // wish to change them. + { + channels: std.range(apaid * 2560, (apaid + 1) * 2560 - 1), + nominal_baseline: 2350.0, // adc count + gain_correction: 1.0, // unitless + response_offset: 0.0, // ticks? + pad_window_front: 10, // ticks? + pad_window_back: 10, // ticks? + decon_limit: 0.02, + decon_limit1: 0.09, + adc_limit: 15, + roi_min_max_ratio: 0.8, // default 0.8 + min_rms_cut: 1.0, // units??? + max_rms_cut: 30.0, // units??? + + // parameter used to make "rcrc" spectrum + rcrc: 1.1 * wc.millisecond, // 1.1 for collection, 3.3 for induction + rc_layers: 1, // default 2 + + // parameters used to make "config" spectrum + reconfig: {}, + + // list to make "noise" spectrum mask + freqmasks: [], + + // field response waveform to make "response" spectrum. + response: {}, + + }, + + { + //channels: { wpid: wc.WirePlaneId(wc.Ulayer) }, + channels: std.range(apaid * 2560, apaid * 2560 + 800- 1), + /// this will use an average calculated from the anode + // response: { wpid: wc.WirePlaneId(wc.Ulayer) }, + /// this uses hard-coded waveform. + response_offset: 120, // offset of the negative peak + pad_window_front: 20, + decon_limit: 0.02, + decon_limit1: 0.07, + roi_min_max_ratio: 3.0, + }, + + { + //channels: { wpid: wc.WirePlaneId(wc.Vlayer) }, + channels: std.range(apaid * 2560 + 800, apaid * 2560 + 1600- 1), + /// this will use an average calculated from the anode + // response: { wpid: wc.WirePlaneId(wc.Vlayer) }, + /// this uses hard-coded waveform. + decon_limit: 0.01, + decon_limit1: 0.08, + roi_min_max_ratio: 1.5, + }, + + { + //channels: { wpid: wc.WirePlaneId(wc.Wlayer) }, + channels: std.range(apaid * 2560 + 1600, apaid * 2560 + 2560- 1), + nominal_baseline: 900.0, + decon_limit: 0.05, + decon_limit1: 0.08, + }, + + + ], + } // data +} // perfect() + diff --git a/cfg/schema/gen/anodeplane.jsonnet b/cfg/schema/gen/anodeplane.jsonnet new file mode 100644 index 000000000..8777e52ef --- /dev/null +++ b/cfg/schema/gen/anodeplane.jsonnet @@ -0,0 +1,45 @@ +/* + * This file is 100% generated. Any manual edits will likely be lost. + * + * This holds constructor functions for creating objects from the + * schema: WireCell.Gen.Cfg.AnodePlane + * + * Prefer these functions over manual object construction to assure + * greater validity. + * + */ +local util_base = import "schema/util/base.jsonnet"; + +util_base + +{ + gen: { anodeplane: { + // Construct Face (record) + // Interesting drift positions on one anode face + Face(obj=null, anode=0.0, response=0.0, cathode=0.0) :: { + assert(std.setMember(std.type(obj), ["null", "object"])), + res: if std.type(obj) == 'object' then obj else { + anode: $.util.base.Distance(anode), + response: $.util.base.Distance(response), + cathode: $.util.base.Distance(cathode), + }, + }.res, + + // Construct Faces (sequence) + // One or two faces + Faces(val) :: assert(std.type(val)=='array'); [$.gen.anodeplane.Face(v) for v in val], + + // Construct Config (record) + // Configuration for AnodePlane + Config(obj=null, ident=0, wire_schema="", nimpacts=10, faces=[]) :: { + assert(std.setMember(std.type(obj), ["null", "object"])), + res: if std.type(obj) == 'object' then obj else { + ident: $.util.base.Count(ident), + wire_schema: $.util.base.TypeName(wire_schema), + nimpacts: $.util.base.Count(nimpacts), + faces: $.gen.anodeplane.Faces(faces), + }, + }.res, + + + } }, // gen.anodeplane +} diff --git a/cfg/schema/gen/trackdepos.jsonnet b/cfg/schema/gen/trackdepos.jsonnet new file mode 100644 index 000000000..85278407b --- /dev/null +++ b/cfg/schema/gen/trackdepos.jsonnet @@ -0,0 +1,45 @@ +/* + * This file is 100% generated. Any manual edits will likely be lost. + * + * This holds constructor functions for creating objects from the + * schema: WireCell.Gen.Cfg.TrackDepos + * + * Prefer these functions over manual object construction to assure + * greater validity. + * + */ +local util_base = import "schema/util/base.jsonnet"; + +util_base + +{ + gen: { trackdepos: { + // Construct Track (record) + // + Track(obj=null, time=0.0, charge=-1.0, ray={}) :: { + assert(std.setMember(std.type(obj), ["null", "object"])), + res: if std.type(obj) == 'object' then obj else { + time: $.util.base.Time(time), + charge: $.util.base.Charge(charge), + ray: $.util.base.Ray(ray), + }, + }.res, + + // Construct Tracks (sequence) + // A sequence of tracks + Tracks(val) :: assert(std.type(val)=='array'); [$.gen.trackdepos.Track(v) for v in val], + + // Construct Config (record) + // Configuration for TrackDepos component + Config(obj=null, step_size=1.0, clight=1.0, group_time=-1.0, tracks=[]) :: { + assert(std.setMember(std.type(obj), ["null", "object"])), + res: if std.type(obj) == 'object' then obj else { + step_size: $.util.base.Distance(step_size), + clight: $.util.base.Normalized(clight), + group_time: $.util.base.Time(group_time), + tracks: $.gen.trackdepos.Tracks(tracks), + }, + }.res, + + + } }, // gen.trackdepos +} diff --git a/cfg/schema/sio/numpyframesaver.jsonnet b/cfg/schema/sio/numpyframesaver.jsonnet new file mode 100644 index 000000000..7196e28b4 --- /dev/null +++ b/cfg/schema/sio/numpyframesaver.jsonnet @@ -0,0 +1,32 @@ +/* + * This file is 100% generated. Any manual edits will likely be lost. + * + * This holds constructor functions for creating objects from the + * schema: WireCell.Sio.Cfg.NumpyFrameSaver + * + * Prefer these functions over manual object construction to assure + * greater validity. + * + */ +local util_base = import "schema/util/base.jsonnet"; + +util_base + +{ + sio: { numpyframesaver: { + // Construct Config (record) + // Configuration for NumpyFrameSaver component + Config(obj=null, digitize=false, baseline=0.0, scale=1.0, offset=0.0, frame_tags=[], filename="wct-frame.npz") :: { + assert(std.setMember(std.type(obj), ["null", "object"])), + res: if std.type(obj) == 'object' then obj else { + digitize: $.util.base.Flag(digitize), + baseline: $.util.base.Charge(baseline), + scale: $.util.base.Scaling(scale), + offset: $.util.base.Charge(offset), + frame_tags: $.util.base.Tags(frame_tags), + filename: $.util.base.FilenameNPZ(filename), + }, + }.res, + + + } }, // sio.numpyframesaver +} diff --git a/cfg/schema/util/base.jsonnet b/cfg/schema/util/base.jsonnet new file mode 100644 index 000000000..5a0f00d35 --- /dev/null +++ b/cfg/schema/util/base.jsonnet @@ -0,0 +1,101 @@ +/* + * This file is 100% generated. Any manual edits will likely be lost. + * + * This holds constructor functions for creating objects from the + * schema: WireCell.Util.Cfg.Base + * + * Prefer these functions over manual object construction to assure + * greater validity. + * + */ + +{ + util: { base: { + // Construct Charge (number) + // Amount of charge per some unit + Charge(val) :: assert(std.type(val)=='number'); val, + + // Construct Count (number) + // A simple counting number + Count(val) :: assert(std.type(val)=='number'); val, + + // Construct Distance (number) + // A spacial distance + Distance(val) :: assert(std.type(val)=='number'); val, + + // Construct Filename (string) + // Something resembling a file system tree path name + Filename(val) :: assert(std.type(val)=='string'); val, + + // Construct FilenameNPZ (string) + // A filename with NPZ extension + FilenameNPZ(val) :: assert(std.type(val)=='string'); val, + + // Construct Flag (boolean) + // A general boolean flag + Flag(val) :: assert(std.type(val)=='boolean');assert(val == true || val == false); val, + + // Construct Ident (string) + // A code-friendly identifier + Ident(val) :: assert(std.type(val)=='string'); val, + + // Construct Normalized (number) + // A real number in [0,1] + Normalized(val) :: assert(std.type(val)=='number'); val, + + // Construct Point (record) + // A Cartesian point in 3-space. + Point(obj=null, x=0.0, y=0.0, z=0.0) :: { + assert(std.setMember(std.type(obj), ["null", "object"])), + res: if std.type(obj) == 'object' then obj else { + x: $.util.base.Distance(x), + y: $.util.base.Distance(y), + z: $.util.base.Distance(z), + }, + }.res, + + // Construct Ray (record) + // A directed line segment in 3-space + Ray(obj=null, tail={}, head={}) :: { + assert(std.setMember(std.type(obj), ["null", "object"])), + res: if std.type(obj) == 'object' then obj else { + tail: $.util.base.Point(tail), + head: $.util.base.Point(head), + }, + }.res, + + // Construct Scaling (number) + // A multiplicative scaling factor + Scaling(val) :: assert(std.type(val)=='number'); val, + + // Construct Speed (number) + // A speed in units distance per time + Speed(val) :: assert(std.type(val)=='number'); val, + + // Construct Tag (string) + // A simple identifying tag associated with some data + Tag(val) :: assert(std.type(val)=='string'); val, + + // Construct Tags (sequence) + // A sequence of tags + Tags(val) :: assert(std.type(val)=='array'); [$.util.base.Tag(v) for v in val], + + // Construct Tick (number) + // A sampling period + Tick(val) :: assert(std.type(val)=='number'); val, + + // Construct Time (number) + // A temporal duration + Time(val) :: assert(std.type(val)=='number'); val, + + // Construct TypeName (string) + // A component type name identifier + TypeName(val) :: assert(std.type(val)=='string'); val, + + // Construct TypeNames (sequence) + // A sequence of component type name identifiers + TypeNames(val) :: assert(std.type(val)=='array'); [$.util.base.TypeName(v) for v in val], + + + } }, // util.base +} diff --git a/cfg/test/test-pdsp-sim-sp-dnnroi.jsonnet b/cfg/test/test-pdsp-sim-sp-dnnroi.jsonnet new file mode 100644 index 000000000..631dcd2e7 --- /dev/null +++ b/cfg/test/test-pdsp-sim-sp-dnnroi.jsonnet @@ -0,0 +1,105 @@ +// This provides a main wire-cell config file to exercise +// sim+sigproc+dnnroi. When run it will produce tar files of frames +// data as numpy arrays. Ionization pattern is from ideal line +// source. + +local wc = import "wirecell.jsonnet"; +local pg = import "pgraph.jsonnet"; +local params = import "pgrapher/experiment/pdsp/simparams.jsonnet"; +local hs = import "pgrapher/common/helpers.jsonnet"; + +local wires = hs.aux.wires(params.files.wires); +local anodes = hs.aux.anodes(wires, params.det.volumes); + +// simulation + +// kinematics: ideal line source +local tracklist = [ + { + time: 0, + charge: -5000, + ray: params.det.bounds, + }, +]; +local depos = pg.pipeline([ + hs.gen.track_depos(tracklist), + hs.gen.bagger(params.daq), +]); + +local random = hs.gen.random(); +local drifter = hs.gen.drifter(params.det.volumes,params.lar,random); + +// responses +local sim_fr = hs.aux.fr(params.files.fields[0]); +local er = hs.aux.cer(params.elec.shaping, params.elec.gain, + params.elec.postgain, + params.daq.nticks, params.daq.tick); +local rc = hs.aux.rc(1.0*wc.ms, params.daq.nticks, params.daq.tick); +local pirs = hs.gen.pirs(sim_fr, [er], [rc]); + +// sp fr may differ from sim fr (as it does from real fr) +local sp_fr = hs.aux.fr(if std.length(params.files.fields)>1 + then params.files.fields[1] + else params.files.fields[0]); + +local sp_filters = import "pgrapher/experiment/pdsp/sp-filters.jsonnet"; +local adcpermv = hs.utils.adcpermv(params.adc); +local chndbf = import "pgrapher/experiment/pdsp/ocndb-perfect.jsonnet"; +local chndb(anode) = chndbf(anode, sp_fr, params.nf.nsamples); +local dnnroi_override = { + sparse: true, + use_roi_debug_mode: true, + use_multi_plane_protection: true, + process_planes: [0, 1, 2] +}; + +local ts = { + type: "TorchService", + name: "dnnroi", + data: { + model: "unet-l23-cosmic500-e50.ts", + device: "cpu", + concurrency: 1, + }, +}; + +// little function to return a frame file tap or sink (if cap is +// true). This bakes in PDSP-specific array bounds! +local out(anode, prefix, tag_pats, digitize=false, cap=false) = + local tags = [tp + std.toString(anode.data.ident) + for tp in tag_pats]; + local fname = prefix + "-" + + std.join("-", tags) + ".tar.bz2"; + local dense = hs.io.frame_bounds(2560, 6000, + 2560 * anode.data.ident); + if cap + then hs.io.frame_file_sink(fname, tags, digitize, dense) + else hs.io.frame_file_tap(fname, tags, digitize, dense); + + +local anode_pipeline(anode, prefix) = pg.pipeline([ + // sim + hs.gen.signal(anode, pirs, params.daq, params.lar, rnd=random), + hs.gen.noise(anode, params.files.noise, params.daq, rnd=random), + hs.gen.digi(anode, params.adc), + out(anode, prefix, ["orig"], true), + + // nf+sp + hs.nf(anode, sp_fr, chndb(anode), params.nf.nsamples, params.daq.tick), + hs.sp(anode, sp_fr, er, sp_filters, adcpermv, + override=dnnroi_override), + out(anode, prefix, ["wiener","gauss"]), + + // // dnnroi + hs.dnnroi(anode, ts, output_scale=1.2), + out(anode, prefix, ["dnnsp"], cap=true), +]); + +function(prefix="test-pdsp-ssd") + local pipes = [ anode_pipeline(a, prefix) for a in anodes]; + local body = pg.fan.fanout('DepoSetFanout', pipes); + local graph = pg.pipeline([depos, drifter, body]); + hs.utils.main(graph, 'TbbFlow', ['WireCellPytorch']) + + + diff --git a/cfg/wirecell.jsonnet b/cfg/wirecell.jsonnet index 6489c2e63..7a7435a2e 100644 --- a/cfg/wirecell.jsonnet +++ b/cfg/wirecell.jsonnet @@ -318,7 +318,11 @@ /// /// anode: wc.tn(myanode), /// - tn(obj) :: if std.objectHas(obj, "name") && obj.name != "" then obj.type + ":" + obj.name else obj.type, + /// This function can also be applied to objects which happen to + /// be produced by pgraph.pnode() + tn(obj) :: if std.objectHas(obj, "name") && obj.name != "" + then obj.type + ":" + obj.name + else obj.type, // Return a new list where only the first occurrence of any object is kept. @@ -365,6 +369,37 @@ }, + mergePatchEx(target, patch, hidden):: + if std.isObject(patch) then + local target_object = + if std.isObject(target) then target else {}; + + local target_fields = + if std.isObject(target_object) then std.objectFieldsEx(target_object, hidden) else []; + + local null_fields = [k for k in std.objectFieldsEx(patch, hidden) if patch[k] == null]; + local both_fields = std.setUnion(target_fields, std.objectFieldsEx(patch, hidden)); + { + [k]: + if !std.objectHasEx(patch, k, hidden) then + target_object[k] + else if !std.objectHasEx(target_object, k, hidden) then + $.mergePatchEx(null, patch[k], hidden) tailstrict + else + $.mergePatchEx(target_object[k], patch[k], hidden) tailstrict + for k in std.setDiff(both_fields, null_fields) + } + else + patch, + + mergePatch(target, patch):: + $.mergePatchEx(target, patch, false), + + mergePatchAll(target, patch):: + $.mergePatchEx(target, patch, true), + + mergeObjects(objs):: + std.foldl($.mergePatchAll, objs, {}), } diff --git a/gen/inc/WireCellGen/AddNoise.h b/gen/inc/WireCellGen/AddNoise.h index 203b76f29..662c2f3c8 100644 --- a/gen/inc/WireCellGen/AddNoise.h +++ b/gen/inc/WireCellGen/AddNoise.h @@ -12,14 +12,15 @@ #include "WireCellIface/IRandom.h" #include "WireCellIface/IChannelSpectrum.h" #include "WireCellUtil/Waveform.h" -#include "WireCellUtil/Logging.h" +#include "WireCellAux/Logger.h" #include namespace WireCell { namespace Gen { - class AddNoise : public IFrameFilter, public IConfigurable { + class AddNoise : public Aux::Logger, + public IFrameFilter, public IConfigurable { public: AddNoise(const std::string& model = "", const std::string& rng = "Random"); @@ -40,7 +41,7 @@ namespace WireCell { int m_nsamples; double m_rep_percent; - Log::logptr_t log; + size_t m_count{0}; }; } // namespace Gen } // namespace WireCell diff --git a/gen/inc/WireCellGen/AnodePlane.h b/gen/inc/WireCellGen/AnodePlane.h index e729f4722..e5b123398 100644 --- a/gen/inc/WireCellGen/AnodePlane.h +++ b/gen/inc/WireCellGen/AnodePlane.h @@ -8,24 +8,32 @@ #define WIRECELLGEN_ANODEPLANE #include "WireCellIface/IAnodePlane.h" -#include "WireCellIface/IConfigurable.h" -#include "WireCellUtil/Logging.h" +#include "WireCellAux/Logger.h" +#include "WireCellAux/Configurable.h" + +#include "WireCellGen/Cfg/AnodePlane.hpp" + #include namespace WireCell { namespace Gen { - class AnodePlane : public IAnodePlane, public IConfigurable { + using WireCell::Gen::Cfg::AnodePlane::Config; + + class AnodePlane : public Aux::Logger, + public Aux::Configurable, + public IAnodePlane { public: AnodePlane(); virtual ~AnodePlane() {} - // IConfigurable interface + // Normally, we should not provide this method but we must do some kludge. virtual void configure(const WireCell::Configuration& config); - virtual WireCell::Configuration default_configuration() const; + // virtual WireCell::Configuration default_configuration() const; + virtual void configured(); /// IAnodePlane interface - virtual int ident() const { return m_ident; } + virtual int ident() const { return m_cfg.ident; } virtual int nfaces() const { return m_faces.size(); } virtual IAnodeFace::pointer face(int ident) const; virtual IAnodeFace::vector faces() const { return m_faces; } @@ -34,15 +42,16 @@ namespace WireCell { virtual IChannel::pointer channel(int chident) const; virtual IWire::vector wires(int channel) const; - private: - int m_ident; + private: + // using config_t = WireCellGen::Cfg::AnodePlane::Config; + // config_t m_cfg; + IAnodeFace::vector m_faces; std::unordered_map m_c2wpid; std::unordered_map m_c2wires; std::vector m_channels; std::unordered_map m_ichannels; - Log::logptr_t l; }; } // namespace Gen diff --git a/gen/inc/WireCellGen/AnodePlane.schema b/gen/inc/WireCellGen/AnodePlane.schema new file mode 100644 index 000000000..a027d5ea0 --- /dev/null +++ b/gen/inc/WireCellGen/AnodePlane.schema @@ -0,0 +1,63 @@ +// -*- jsonnet -*- +local moo = import "moo.jsonnet"; +local wc = import "wirecell.jsonnet"; +local util_seq = import "WireCellUtil/Base.schema"; +local t = moo.oschema.hier(util_seq).WireCell.Util.Cfg.Base; + +local wcc = import "cfgschema.jsonnet"; +local f = wcc("Gen","AnodePlane"); +local s = f.schema; + + +local hier = { + + // Face 0 or "front" is the one that is toward the positive X-axis + // (wire coordinate system). A face consists of wires and some + // bounds on the X-coordinate in the form of three planes: + // + // - response :: The response plane demarks the location where the + // complex fields near the wires are considered sufficiently + // regular. + // + // - anode and cathode :: These two planes bracket the region in X + // for the volume associated with the face. + // + // Note, the transverse active area is determined by the wires. + + face: s.record("Face", [ + s.field("anode", t.Distance, default=0, + doc="Active volume boundary along drift direction near wires"), + s.field("response", t.Distance, default=0, + doc="Position where drift simulation ends and field response calcualtion begins"), + s.field("cathode", t.Distance, default=0, + doc="Active volume boundary along drift direction near cathode"), + ], doc="Interesting drift positions on one anode face"), + + // fixme: actually, the Faces can have null entries, thought these + // are not captured in the Face schema. This will probably break + // something. + faces: s.sequence("Faces", self.face, + doc="One or two faces"), + + + cfg: s.component([ + + s.field("ident", t.Count, default=0, + doc="Identifier of wire plane as used in wire file"), + + s.field("wire_schema", t.TypeName, default="", + doc="Type name of IWireSchema component"), + + s.field("nimpacts", t.Count, default=10, + doc="Number of impact positions per wire"), + + //fixme: + // This faithfully reproduces the original schema. Better would + // be to add to Face a FaceID (0 or 1) and not give semantic + // meaning to the element indices of the faces array. + s.field("faces", $.faces, default=[], + doc="Description of each face"), + ], doc="Configuration for AnodePlane"), +}; + +util_seq + f.build(hier) diff --git a/gen/inc/WireCellGen/Cfg/AnodePlane.hpp b/gen/inc/WireCellGen/Cfg/AnodePlane.hpp new file mode 100644 index 000000000..3084f7b65 --- /dev/null +++ b/gen/inc/WireCellGen/Cfg/AnodePlane.hpp @@ -0,0 +1,102 @@ +/* + * This file is 100% generated. Any manual edits will likely be lost. + * + * This contains configuration related types and methods for schema: + * + * WireCell.Gen.Cfg.AnodePlane + * + */ +#ifndef WIRECELL_GEN_CFG_ANODEPLANE +#define WIRECELL_GEN_CFG_ANODEPLANE + +#include "WireCellUtil/Cfg/Base.hpp" + +#include +// for sequence +#include + +#include + +namespace WireCell::Gen::Cfg::AnodePlane { + + // + // Type definitions. + // + + // @brief Interesting drift positions on one anode face + struct Face + { + + // @brief Active volume boundary along drift direction near wires + Util::Cfg::Base::Distance anode = 0.0; + + // @brief Position where drift simulation ends and field response calcualtion begins + Util::Cfg::Base::Distance response = 0.0; + + // @brief Active volume boundary along drift direction near cathode + Util::Cfg::Base::Distance cathode = 0.0; + }; + + // @brief One or two faces + using Faces = std::vector; + + // @brief Configuration for AnodePlane + struct Config + { + + // @brief Identifier of wire plane as used in wire file + Util::Cfg::Base::Count ident = 0; + + // @brief Type name of IWireSchema component + Util::Cfg::Base::TypeName wire_schema = ""; + + // @brief Number of impact positions per wire + Util::Cfg::Base::Count nimpacts = 10; + + // @brief Description of each face + Faces faces = {}; + }; + + + + // + // JSON serialization methods + // + + using data_t = nlohmann::json; + + inline void to_json(data_t& j, const Face& obj) { + j["anode"] = obj.anode; + j["response"] = obj.response; + j["cathode"] = obj.cathode; + } + + inline void from_json(const data_t& j, Face& obj) { + if (j.contains("anode")) + j.at("anode").get_to(obj.anode); + if (j.contains("response")) + j.at("response").get_to(obj.response); + if (j.contains("cathode")) + j.at("cathode").get_to(obj.cathode); + } + + inline void to_json(data_t& j, const Config& obj) { + j["ident"] = obj.ident; + j["wire_schema"] = obj.wire_schema; + j["nimpacts"] = obj.nimpacts; + j["faces"] = obj.faces; + } + + inline void from_json(const data_t& j, Config& obj) { + if (j.contains("ident")) + j.at("ident").get_to(obj.ident); + if (j.contains("wire_schema")) + j.at("wire_schema").get_to(obj.wire_schema); + if (j.contains("nimpacts")) + j.at("nimpacts").get_to(obj.nimpacts); + if (j.contains("faces")) + j.at("faces").get_to(obj.faces); + } +} // WireCell::Gen::Cfg::AnodePlane + +#endif // WIRECELL_GEN_CFG_ANODEPLANE \ No newline at end of file diff --git a/gen/inc/WireCellGen/Cfg/TrackDepos.hpp b/gen/inc/WireCellGen/Cfg/TrackDepos.hpp new file mode 100644 index 000000000..bc91923f7 --- /dev/null +++ b/gen/inc/WireCellGen/Cfg/TrackDepos.hpp @@ -0,0 +1,102 @@ +/* + * This file is 100% generated. Any manual edits will likely be lost. + * + * This contains configuration related types and methods for schema: + * + * WireCell.Gen.Cfg.TrackDepos + * + */ +#ifndef WIRECELL_GEN_CFG_TRACKDEPOS +#define WIRECELL_GEN_CFG_TRACKDEPOS + +#include "WireCellUtil/Cfg/Base.hpp" + +#include +// for sequence +#include + +#include + +namespace WireCell::Gen::Cfg::TrackDepos { + + // + // Type definitions. + // + + // @brief + struct Track + { + + // @brief Absolute time at the start of the track + Util::Cfg::Base::Time time = 0.0; + + // @brief If negative, number of electrons per depo, else electrons per track + Util::Cfg::Base::Charge charge = -1.0; + + // @brief The ray defining the track endpoints + Util::Cfg::Base::Ray ray = {}; + }; + + // @brief A sequence of tracks + using Tracks = std::vector; + + // @brief Configuration for TrackDepos component + struct Config + { + + // @brief Distance along track between two neighboring depos. + Util::Cfg::Base::Distance step_size = 1.0; + + // @brief Fraction of speed of light at which track progresses + Util::Cfg::Base::Normalized clight = 1.0; + + // @brief If positive, chunk the depos into groups spaning this amount of time with an EOS delimiting each group. O.w. all depos are sent out as a stream. + Util::Cfg::Base::Time group_time = -1.0; + + // @brief Description of tracks on which to generate depos. + Tracks tracks = {}; + }; + + + + // + // JSON serialization methods + // + + using data_t = nlohmann::json; + + inline void to_json(data_t& j, const Track& obj) { + j["time"] = obj.time; + j["charge"] = obj.charge; + j["ray"] = obj.ray; + } + + inline void from_json(const data_t& j, Track& obj) { + if (j.contains("time")) + j.at("time").get_to(obj.time); + if (j.contains("charge")) + j.at("charge").get_to(obj.charge); + if (j.contains("ray")) + j.at("ray").get_to(obj.ray); + } + + inline void to_json(data_t& j, const Config& obj) { + j["step_size"] = obj.step_size; + j["clight"] = obj.clight; + j["group_time"] = obj.group_time; + j["tracks"] = obj.tracks; + } + + inline void from_json(const data_t& j, Config& obj) { + if (j.contains("step_size")) + j.at("step_size").get_to(obj.step_size); + if (j.contains("clight")) + j.at("clight").get_to(obj.clight); + if (j.contains("group_time")) + j.at("group_time").get_to(obj.group_time); + if (j.contains("tracks")) + j.at("tracks").get_to(obj.tracks); + } +} // WireCell::Gen::Cfg::TrackDepos + +#endif // WIRECELL_GEN_CFG_TRACKDEPOS \ No newline at end of file diff --git a/gen/inc/WireCellGen/DepoBagger.h b/gen/inc/WireCellGen/DepoBagger.h index 90b530fc7..b685e9638 100644 --- a/gen/inc/WireCellGen/DepoBagger.h +++ b/gen/inc/WireCellGen/DepoBagger.h @@ -7,6 +7,8 @@ * * This component is equivalent to the input action of the Ductor in * "fixed" mode. + * + * If the gate is kept as default [0,0] then all depos are bagged. */ #ifndef WIRECELLGEN_DEPOBAGGER @@ -14,6 +16,7 @@ #include "WireCellIface/IDepoCollector.h" #include "WireCellIface/IConfigurable.h" +#include "WireCellAux/Logger.h" #include #include @@ -21,7 +24,8 @@ namespace WireCell { namespace Gen { - class DepoBagger : public IDepoCollector, public IConfigurable { + class DepoBagger : public Aux::Logger, + public IDepoCollector, public IConfigurable { public: DepoBagger(); virtual ~DepoBagger(); @@ -35,10 +39,10 @@ namespace WireCell { private: // Count how many we've produced, use this for the depo set ident. - int m_count; + int m_count{0}; // The acceptance time gate - std::pair m_gate; + std::pair m_gate{0,0}; // Temporary holding of accepted depos. IDepo::vector m_depos; diff --git a/gen/inc/WireCellGen/DepoFanout.h b/gen/inc/WireCellGen/DepoFanout.h index e6a918749..a24d0a501 100644 --- a/gen/inc/WireCellGen/DepoFanout.h +++ b/gen/inc/WireCellGen/DepoFanout.h @@ -3,12 +3,14 @@ #include "WireCellIface/IDepoFanout.h" #include "WireCellIface/IConfigurable.h" +#include "WireCellAux/Logger.h" namespace WireCell { namespace Gen { // Fan out 1 depo to N set at construction or configuration time. - class DepoFanout : public IDepoFanout, public IConfigurable { + class DepoFanout : public Aux::Logger, + public IDepoFanout, public IConfigurable { public: DepoFanout(size_t multiplicity = 0); virtual ~DepoFanout(); diff --git a/gen/inc/WireCellGen/DepoSetDrifter.h b/gen/inc/WireCellGen/DepoSetDrifter.h new file mode 100644 index 000000000..558580869 --- /dev/null +++ b/gen/inc/WireCellGen/DepoSetDrifter.h @@ -0,0 +1,49 @@ +// This adapts an IDrifter to the IDepoSetDrifter interface. +// +// This is a very dumb implementation as a per depo drifter is doing +// extra work to keep its output in time order where as we could do +// better by ignoring order during drifting and do a final sort(). +// +// Further improvements would drift depos as a block and utilize SIMD. +// See gen-kokkos for smarter smarts. +// +// The only practical reason to use this is it will speed up Pgrapher +// (less so, TbbFlow) compared to using a bare per depo drifter. + +#ifndef WIRECELLGEN_DEPOSETDRIFTER +#define WIRECELLGEN_DEPOSETDRIFTER + +#include "WireCellIface/IDrifter.h" +#include "WireCellIface/IDepoSetFilter.h" +#include "WireCellIface/INamed.h" +#include "WireCellIface/IConfigurable.h" +#include "WireCellAux/Logger.h" + +namespace WireCell::Gen { + + class DepoSetDrifter : public Aux::Logger, + public IDepoSetFilter, public IConfigurable { + public: + + DepoSetDrifter(); + virtual ~DepoSetDrifter(); + + // IDepoSetFilter + virtual bool operator()(const input_pointer& in, output_pointer& out); + + /// WireCell::IConfigurable interface. + virtual void configure(const WireCell::Configuration& config); + virtual WireCell::Configuration default_configuration() const; + + private: + + IDrifter::pointer m_drifter{nullptr}; + size_t m_count{0}; + + }; + +} + + + +#endif diff --git a/gen/inc/WireCellGen/DepoSetFanout.h b/gen/inc/WireCellGen/DepoSetFanout.h index 92cd95d80..b35bd2b27 100644 --- a/gen/inc/WireCellGen/DepoSetFanout.h +++ b/gen/inc/WireCellGen/DepoSetFanout.h @@ -3,13 +3,14 @@ #include "WireCellIface/IDepoSetFanout.h" #include "WireCellIface/IConfigurable.h" -#include "WireCellUtil/Logging.h" +#include "WireCellAux/Logger.h" namespace WireCell { namespace Gen { // Fan out 1 deposet to N set at construction or configuration time. - class DepoSetFanout : public IDepoSetFanout, public IConfigurable { + class DepoSetFanout : public Aux::Logger, + public IDepoSetFanout, public IConfigurable { public: DepoSetFanout(size_t multiplicity = 0); virtual ~DepoSetFanout(); @@ -26,8 +27,9 @@ namespace WireCell { private: size_t m_multiplicity; + size_t m_count{0}; - Log::logptr_t log; + }; } // namespace Gen } // namespace WireCell diff --git a/gen/inc/WireCellGen/DepoSplat.h b/gen/inc/WireCellGen/DepoSplat.h index bff053438..730d9e3d2 100644 --- a/gen/inc/WireCellGen/DepoSplat.h +++ b/gen/inc/WireCellGen/DepoSplat.h @@ -1,30 +1,92 @@ -/** This class "splats" depos directly into a frame without regards to - * much reality. It's only useful for gross, but fast debugging jobs. - * The frame it produces is the moral equivalent of post-SP. +/** This class "splats" depos directly into a frame. + * + * It is approximately equivalent to combined simulation and sigproc + * using the same response. + * + * FIXME: A new DepoSetSplat needs to be written as an IDepoFramer to + * avoid the high cost of sending individual depos to N APAs. */ #ifndef WIRECELLGEN_DEPOSPLAT #define WIRECELLGEN_DEPOSPLAT -#include "WireCellGen/Ductor.h" + +#include "WireCellIface/IConfigurable.h" +#include "WireCellIface/IDuctor.h" + +#include "WireCellIface/IAnodeFace.h" +#include "WireCellIface/IAnodePlane.h" +#include "WireCellIface/IRandom.h" +#include "WireCellUtil/Logging.h" + +#include namespace WireCell { namespace Gen { - - // DepoSplat inherits from Ductor, replacing the heavy lifting - // with some lightweight laziness. - class DepoSplat : public Ductor { - public: + class DepoSplat : public IDuctor, public IConfigurable { + public: DepoSplat(); virtual ~DepoSplat(); - protected: - virtual ITrace::vector process_face(IAnodeFace::pointer face, const IDepo::vector& depos); + // virtual void reset(); + virtual bool operator()(const input_pointer& depo, output_queue& frames); + + virtual void configure(const WireCell::Configuration& config); + virtual WireCell::Configuration default_configuration() const; + + private: + + std::string m_anode_tn; + + IAnodePlane::pointer m_anode; + + IDepo::vector m_depos; + + double m_start_time; + double m_readout_time; + double m_tick; + double m_drift_speed; + double m_nsigma; + std::string m_mode; - /// SPD logger + // If set (config fluctuate=true), apply charge-preserving + // fluctuation to each Gaussian sampling. Default is no + // fluctuation. + IRandom::pointer m_rng; + + int m_frame_count; + // if non-empty, set as tag on output frame + std::string m_frame_tag{""}; + + void process(output_queue& frames); + ITrace::vector process_face(IAnodeFace::pointer face, const IDepo::vector& face_depos); + bool start_processing(const input_pointer& depo); Log::logptr_t l; }; } // namespace Gen } // namespace WireCell + + +// #include "WireCellGen/Ductor.h" + +// namespace WireCell { +// namespace Gen { + +// // DepoSplat inherits from Ductor, replacing the heavy lifting +// // with some lightweight laziness. +// class DepoSplat : public Ductor { +// public: +// DepoSplat(); +// virtual ~DepoSplat(); + +// protected: +// virtual ITrace::vector process_face(IAnodeFace::pointer face, const IDepo::vector& depos); + +// /// SPD logger +// Log::logptr_t l; +// }; +// } // namespace Gen +// } // namespace WireCell + #endif diff --git a/gen/inc/WireCellGen/DepoTransform.h b/gen/inc/WireCellGen/DepoTransform.h index 742d0d0b1..d2b8f9a0b 100644 --- a/gen/inc/WireCellGen/DepoTransform.h +++ b/gen/inc/WireCellGen/DepoTransform.h @@ -11,12 +11,13 @@ #include "WireCellIface/IAnodePlane.h" #include "WireCellIface/WirePlaneId.h" #include "WireCellIface/IDepo.h" -#include "WireCellUtil/Logging.h" +#include "WireCellAux/Logger.h" namespace WireCell { namespace Gen { - class DepoTransform : public IDepoFramer, public IConfigurable { + class DepoTransform : public Aux::Logger, + public IDepoFramer, public IConfigurable { public: DepoTransform(); virtual ~DepoTransform(); @@ -42,7 +43,8 @@ namespace WireCell { double m_drift_speed; double m_nsigma; int m_frame_count; - Log::logptr_t l; + size_t m_count{0}; + }; } // namespace Gen } // namespace WireCell diff --git a/gen/inc/WireCellGen/Digitizer.h b/gen/inc/WireCellGen/Digitizer.h index 235975cb9..e93db1231 100644 --- a/gen/inc/WireCellGen/Digitizer.h +++ b/gen/inc/WireCellGen/Digitizer.h @@ -12,14 +12,15 @@ #include "WireCellIface/IConfigurable.h" #include "WireCellIface/IAnodePlane.h" #include "WireCellUtil/Units.h" -#include "WireCellUtil/Logging.h" +#include "WireCellAux/Logger.h" #include namespace WireCell { namespace Gen { - class Digitizer : public IFrameFilter, public IConfigurable { + class Digitizer : public Aux::Logger, + public IFrameFilter, public IConfigurable { public: Digitizer(const std::string& anode_tn = "AnodePlane", int resolution = 12, // bits of resolution @@ -46,7 +47,7 @@ namespace WireCell { double m_gain; std::vector m_fullscale, m_baselines; std::string m_frame_tag; - Log::logptr_t log; + size_t m_count{0}; }; } // namespace Gen diff --git a/gen/inc/WireCellGen/Drifter.h b/gen/inc/WireCellGen/Drifter.h index 13f1e15bb..9defd9087 100644 --- a/gen/inc/WireCellGen/Drifter.h +++ b/gen/inc/WireCellGen/Drifter.h @@ -5,7 +5,7 @@ #include "WireCellIface/IConfigurable.h" #include "WireCellIface/IRandom.h" #include "WireCellUtil/Units.h" -#include "WireCellUtil/Logging.h" +#include "WireCellAux/Logger.h" #include @@ -98,7 +98,8 @@ namespace WireCell { * * x = +3594.16mm - 10cm */ - class Drifter : public IDrifter, public IConfigurable { + class Drifter : public Aux::Logger, + public IDrifter, public IConfigurable { public: Drifter(); virtual ~Drifter(); @@ -179,7 +180,6 @@ namespace WireCell { bool operator()(const Xregion& xr) const { return xr.inside_response(depo->pos().x()); } }; - Log::logptr_t l; }; // Drifter } // namespace Gen diff --git a/gen/inc/WireCellGen/Ductor.h b/gen/inc/WireCellGen/Ductor.h deleted file mode 100644 index 5cce93b2e..000000000 --- a/gen/inc/WireCellGen/Ductor.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef WIRECELLGEN_DUCTOR -#define WIRECELLGEN_DUCTOR - -#include "WireCellUtil/Pimpos.h" -#include "WireCellUtil/Response.h" - -#include "WireCellIface/IConfigurable.h" -#include "WireCellIface/IDuctor.h" - -#include "WireCellIface/IAnodeFace.h" -#include "WireCellIface/IAnodePlane.h" -#include "WireCellIface/IPlaneImpactResponse.h" -#include "WireCellIface/IRandom.h" -#include "WireCellUtil/Logging.h" - -#include - -namespace WireCell { - namespace Gen { - - /** This IDuctor needs a Garfield2D field calculation data - * file in compressed JSON format as produced by Python module - * wirecell.sigproc.garfield. - */ - class Ductor : public IDuctor, public IConfigurable { - public: - Ductor(); - virtual ~Ductor(){}; - - // virtual void reset(); - virtual bool operator()(const input_pointer& depo, output_queue& frames); - - virtual void configure(const WireCell::Configuration& config); - virtual WireCell::Configuration default_configuration() const; - - protected: - // The "Type:Name" of the IAnodePlane (default is "AnodePlane") - std::string m_anode_tn; - std::string m_rng_tn; - std::vector m_pir_tns; - - IAnodePlane::pointer m_anode; - IRandom::pointer m_rng; - std::vector m_pirs; - - IDepo::vector m_depos; - - double m_start_time; - double m_readout_time; - double m_tick; - double m_drift_speed; - double m_nsigma; - bool m_fluctuate; - std::string m_mode; - - int m_frame_count; - - virtual void process(output_queue& frames); - virtual ITrace::vector process_face(IAnodeFace::pointer face, const IDepo::vector& face_depos); - bool start_processing(const input_pointer& depo); - Log::logptr_t l; - }; - } // namespace Gen -} // namespace WireCell - -#endif diff --git a/gen/inc/WireCellGen/EmpiricalNoiseModel.h b/gen/inc/WireCellGen/EmpiricalNoiseModel.h index de90a5f77..513c85dac 100644 --- a/gen/inc/WireCellGen/EmpiricalNoiseModel.h +++ b/gen/inc/WireCellGen/EmpiricalNoiseModel.h @@ -18,7 +18,7 @@ #include "WireCellUtil/Units.h" #include "WireCellUtil/Waveform.h" -#include "WireCellUtil/Logging.h" +#include "WireCellAux/Logger.h" #include #include @@ -27,7 +27,8 @@ namespace WireCell { namespace Gen { - class EmpiricalNoiseModel : public IChannelSpectrum, public IConfigurable { + class EmpiricalNoiseModel : public Aux::Logger, + public IChannelSpectrum, public IConfigurable { public: EmpiricalNoiseModel(const std::string& spectra_file = "", const int nsamples = 10000, // assuming 10k samples @@ -106,7 +107,6 @@ namespace WireCell { mutable std::unordered_map m_elec_resp_cache; mutable amplitude_t comb_amp; - Log::logptr_t log; }; } // namespace Gen diff --git a/gen/inc/WireCellGen/FrameFanin.h b/gen/inc/WireCellGen/FrameFanin.h index d187cc18a..b8fcaa01f 100644 --- a/gen/inc/WireCellGen/FrameFanin.h +++ b/gen/inc/WireCellGen/FrameFanin.h @@ -4,6 +4,7 @@ #include "WireCellIface/IFrameFanin.h" #include "WireCellIface/IConfigurable.h" #include "WireCellUtil/TagRules.h" +#include "WireCellAux/Logger.h" #include #include @@ -12,8 +13,11 @@ namespace WireCell { namespace Gen { // Fan in N frames to one. - class FrameFanin : public IFrameFanin, public IConfigurable { - public: + class FrameFanin : Aux::Logger, + public IFrameFanin, + public IConfigurable + { + public: FrameFanin(size_t multiplicity = 2); virtual ~FrameFanin(); @@ -25,10 +29,11 @@ namespace WireCell { virtual void configure(const WireCell::Configuration& cfg); virtual WireCell::Configuration default_configuration() const; - private: + private: size_t m_multiplicity; std::vector m_tags; tagrules::Context m_ft; + int m_count{0}; }; } // namespace Gen } // namespace WireCell diff --git a/gen/inc/WireCellGen/FrameFanout.h b/gen/inc/WireCellGen/FrameFanout.h index 49b6606b6..6f3d14056 100644 --- a/gen/inc/WireCellGen/FrameFanout.h +++ b/gen/inc/WireCellGen/FrameFanout.h @@ -4,13 +4,18 @@ #include "WireCellIface/IFrameFanout.h" #include "WireCellIface/IConfigurable.h" #include "WireCellUtil/TagRules.h" -#include "WireCellUtil/Logging.h" +#include "WireCellAux/Logger.h" namespace WireCell { namespace Gen { - // Fan out 1 frame to N set at construction or configuration time. - class FrameFanout : public IFrameFanout, public IConfigurable { + /// Fan out 1 frame to N set at construction or configuration time. + /// + /// If given no rules it works in a trivial manner to simply + /// forward the input frame to its outputs. If rules are + /// given then the fanout applies tag filtering and rewriting. + class FrameFanout : public Aux::Logger, + public IFrameFanout, public IConfigurable { public: FrameFanout(size_t multiplicity = 0); virtual ~FrameFanout(); @@ -27,9 +32,11 @@ namespace WireCell { private: size_t m_multiplicity; + size_t m_count{0}; + bool m_trivial{false}; tagrules::Context m_ft; - Log::logptr_t log; + }; } // namespace Gen } // namespace WireCell diff --git a/gen/inc/WireCellGen/ImpactTransform.h b/gen/inc/WireCellGen/ImpactTransform.h index 23b617b2f..466072498 100644 --- a/gen/inc/WireCellGen/ImpactTransform.h +++ b/gen/inc/WireCellGen/ImpactTransform.h @@ -4,7 +4,6 @@ #include "WireCellIface/IPlaneImpactResponse.h" #include "WireCellGen/BinnedDiffusion_transform.h" #include "WireCellUtil/Array.h" -#include "WireCellUtil/Logging.h" #include @@ -31,10 +30,10 @@ namespace WireCell { int m_start_tick; int m_end_tick; - Log::logptr_t log; - public: - ImpactTransform(IPlaneImpactResponse::pointer pir, BinnedDiffusion_transform& bd); + ImpactTransform(IPlaneImpactResponse::pointer pir, + BinnedDiffusion_transform& bd); + virtual ~ImpactTransform(); /// Return the wire's waveform. If the response functions diff --git a/gen/inc/WireCellGen/PlaneImpactResponse.h b/gen/inc/WireCellGen/PlaneImpactResponse.h index 15a2bdd8d..8f230e636 100644 --- a/gen/inc/WireCellGen/PlaneImpactResponse.h +++ b/gen/inc/WireCellGen/PlaneImpactResponse.h @@ -6,7 +6,7 @@ #include "WireCellUtil/Waveform.h" #include "WireCellUtil/Units.h" -#include "WireCellUtil/Logging.h" +#include "WireCellAux/Logger.h" namespace WireCell { @@ -36,10 +36,11 @@ namespace WireCell { , m_long_waveform(long_wf) , m_long_waveform_pad(long_waveform_pad) { + m_spectrum = Waveform::dft(m_waveform); } /// Frequency-domain spectrum of response - const Waveform::compseq_t& spectrum(); + const Waveform::compseq_t& spectrum() const { return m_spectrum; }; const Waveform::realseq_t& waveform() const { return m_waveform; }; int waveform_pad() const { return m_waveform_pad; }; @@ -51,7 +52,8 @@ namespace WireCell { }; /** Collection of all impact responses for a plane */ - class PlaneImpactResponse : public IPlaneImpactResponse, public IConfigurable { + class PlaneImpactResponse : public Aux::Logger, + public IPlaneImpactResponse, public IConfigurable { public: /** Create a PlaneImpactResponse. @@ -116,8 +118,6 @@ namespace WireCell { std::vector m_ir; double m_half_extent, m_pitch, m_impact; - Log::logptr_t l; - void build_responses(); }; diff --git a/gen/inc/WireCellGen/Reframer.h b/gen/inc/WireCellGen/Reframer.h index 64ea80b62..aaa52f47f 100644 --- a/gen/inc/WireCellGen/Reframer.h +++ b/gen/inc/WireCellGen/Reframer.h @@ -33,7 +33,7 @@ #include "WireCellIface/IFrameFilter.h" #include "WireCellIface/IConfigurable.h" #include "WireCellIface/IAnodePlane.h" -#include "WireCellUtil/Logging.h" +#include "WireCellAux/Logger.h" #include #include @@ -41,7 +41,8 @@ namespace WireCell { namespace Gen { - class Reframer : public IFrameFilter, public IConfigurable { + class Reframer : public Aux::Logger, + public IFrameFilter, public IConfigurable { public: Reframer(); virtual ~Reframer(); @@ -56,10 +57,13 @@ namespace WireCell { // Consider traces with these tags. No tags mean all traces. std::vector m_input_tags; + // If not empty, apply this tag to output frame + std::string m_frame_tag; double m_toffset, m_fill; int m_tbin, m_nticks; - Log::logptr_t log; + + size_t m_count{0}; }; } // namespace Gen } // namespace WireCell diff --git a/gen/inc/WireCellGen/TrackDepos.h b/gen/inc/WireCellGen/TrackDepos.h index 87e7a70d8..ac1be5c75 100644 --- a/gen/inc/WireCellGen/TrackDepos.h +++ b/gen/inc/WireCellGen/TrackDepos.h @@ -1,10 +1,14 @@ #ifndef WIRECELL_TRACKDEPOS #define WIRECELL_TRACKDEPOS +#include "WireCellAux/Logger.h" +#include "WireCellAux/Configurable.h" + #include "WireCellIface/IDepoSource.h" -#include "WireCellIface/IConfigurable.h" + #include "WireCellUtil/Units.h" -#include "WireCellUtil/Logging.h" + +#include "WireCellGen/Cfg/TrackDepos.hpp" #include #include @@ -13,38 +17,45 @@ namespace WireCell { namespace Gen { + using WireCell::Gen::Cfg::TrackDepos::Config; + /// A producer of depositions created from some number of simple, linear tracks. - class TrackDepos : public IDepoSource, public IConfigurable { + class TrackDepos : public Aux::Logger, + public Aux::Configurable, + public IDepoSource { public: /// Create tracks with depositions every stepsize and assumed /// to be traveling at clight. TrackDepos(double stepsize = 1.0 * units::millimeter, double clight = 1.0); virtual ~TrackDepos(); - virtual void configure(const WireCell::Configuration& config); - virtual WireCell::Configuration default_configuration() const; + // virtual void configure(const WireCell::Configuration& config); + // virtual WireCell::Configuration default_configuration() const; - /// Add track starting at given