-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Simulating cathode non-planarity #329
Comments
Hi @wenqiang-gu. I would like Really, depo filtering of any kind does not belong inside So, for this new filtering, I suggest a new A change in configuration for the |
@brettviren Please let me know if I understand correctly. Below is an example of a sim+nf+sp configuration. A DepoSetDrifter is applied before the "fanpipe" of all anodes. local simnfsp_pipes = [
g.pipeline([
splusn_pipes[n], // from sim.jsonnet
nf_pipes[n],
sp_pipes[n],
],
‘simnfsp_pipe_%d' % n)
for n in std.range(0, std.length(tools.anodes) - 1);
local fanpipe = f.fanpipe('DepoSetFanout', simnfsp_pipes, 'FrameFanin’);
local graph = g.pipeline([deposet, deposet_drifter, fanpipe, sink]); Now if I understand your proposal, another IDepoSetFilter (e.g.,"bentCahodeFilter") can be applied to update DepoSet for each anode. So we can move both "bentCahodeFilter" and DepoSetDrifter into the fanpipe, for example: local simnfsp_pipes = [
g.pipeline([
bent_cathode_deposet_filiters[n], // IDepoSetFIlter
deposet_drifters[n], // IDepoSetFilter
splusn_pipes[n],
nf_pipes[n],
sp_pipes[n],
],
‘simnfsp_pipe_%d' % n)
for n in std.range(0, std.length(tools.anodes) - 1);
local fanpipe = f.fanpipe('DepoSetFanout', simnfsp_pipes, 'FrameFanin’);
local graph = g.pipeline([deposet, fanpipe, sink]); |
Hi @wenqiang-gu Really good question as it changes my mind drastically. I think we can greatly simplify things from what you describe. The main thing is we should keep our data flow graphs simple with a single I see now the key to doing this is to remove This actually brings me back closer to your original idea. Effectively we can make There are a few details to describe. Too much to type into GitHub. It may be easier for me to implement them than describe them in text. Actually, I volunteer to do the work. In any case we could chat on zoom, maybe after today's WC meeting? For configuration, what I envision is that the new {
cathode: {
x: [...]
y: [...]
z: [...]
},
response: 10*wc.cm,
anode: 0.0,
} In this case, The With this change, |
Hi @brettviren , that sounds good to me -- please proceed with the implementation. If you need a configuration for testing, here is a standalone WCT simulation in PDSP: local graph = g.pipeline([depos, plainbagger,/* deposet_rotate,*/ setdrifter, parallel_graph, sink]); Also, do you think it would be beneficial to ask Mike Mooney to present at next week's WireCell meeting on this bent cathode issue? This could help ensure we're aligned on their request. |
… to specify 'Xregion' bounds Expect a follow-up commit with Drifter-level testing.
Add support for new ways to configure `Xregion` bounds for #329
Fixed in #336 |
I was contacted by some SBN folks (M. Mooney et al.) regarding the needs to simulate cathode non-planarity. @brettviren @HaiwangYu Could you comment on the following?
Basically, they aim to model the X position of the cathode as a function of the Y and Z positions: X_cathode = f(Y,Z). In ICARUS, this non-planarity could contribute to about 10% of the systematic uncertainty in the$\nu_{\mu}$ selection(as mentioned by M. Mooney).
Since changes in X_cathode could cause some fraction of energy deposits to be assigned to a different TPC drift volume, the SBN team would like to simulate this effect. They can provide a 2D map characterizing the function X_cathode = f(Y,Z). It's also noted that the effect is more significant at the boundary of the cryostat, while at the center (small Y,Z) the effect is negligible. This could reduce some computing time.
Currently, in Drifter, the drift volume determination is based solely on the X position:
wire-cell-toolkit/gen/inc/WireCellGen/Drifter.h
Line 172 in 1a00d64
It appears that we can implement a function to determine a drift volume with depo's X,Y,Z position? For example,
xr.inside_bulk(depo->pos().x(), depo()->pos().y(), depo->pos().z() );
And inside the function
Xregion::inside_bulk(double x, double y, double z)
, we can correct the position of cathode? For example,The text was updated successfully, but these errors were encountered: