-
Notifications
You must be signed in to change notification settings - Fork 27
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
Dead cells and missing cathodes #142
Comments
Dead anodes or cathodes would correspond to long-term run conditions and would be in the conditions DB, maybe as a dead readout channel configuration. On the reconstruction: Each time the concept of a 'neighbour' is being used, a dead channel would be a problem. I don't know whether CAT uses that concept, I suspect it does. The simplest way around that challenge is to always(!) have dead channels set as active(fired geiger) and only indicate that these are dead with an additional flag (valid or dead). The drawback with that approach is if an algorithm uses more information from a cell such as the radius which doesn't exist for a dead cell. The easiest way to see what existing reconstruction modules do with dead cells is to either use the ideal event generator rather than the full simulation and manually remove single cells from single lines or helices generated by the event generator. If you create ten single helices or lines you can remove random cells from each event while they are still in ROOT files and then translate them to brio files (filling the CD data bank) and run the reconstruction as normal on brio files. For full simulation files, I guess the easiest way would be to make your own mock_geiger_.. calibration module, and remove a random cell from simulated events before they are being put into the CD data bank. |
Assigned to you both for further discussion and implementation. My own feeling is that the "filtering" approach works best since this is independent of the simulation and won't waste CPU cycles. |
Thanks, Yorck! I'm going to add Matteo to this as I think it's a good project for him to investigate. Using the ideal event generator sounds like a good idea. I haven't used it yet but maybe this is a good time to start - especially if it means we can "edit" events in ROOT. @yramachers - can you remind us where to find it/how to use it? The radius measurements have uncertainties on them, so I wonder if we can do something for a dead channel like give it a huge (whole cell) uncertainty on the radius. For a double missing cathode, we might need a 100% uncertainty on the z position, though I think Dave said there was a way of getting some kind of cathode information from the anode signal, so maybe we can do better in the long term. Maybe if I look at the mock calibration, I can play with doing something like that. |
The ideal event generator is on the SuperNEMO-DBD page as SN-IEgenerator package. The Readme should explain how to work it. Keeping a dead cell switched on artificially could mean to declare it as radius 0 and radius error as 22 mm. The zero radius should always be taken as minimum permitted, finite radius, and prevent any tangent point calculation with that error other than the whole cell becoming one tangent point with a big error. I think CAT uses tangent points but I don't know (was in Federico's thesis). If not then at least it will be seen as a neighbour and connections across the inactive cell become possible in order to form clusters. The z-coordinate should not feature in neighbour searches since it is continuous rather than discrete (no grid). The safest way to artificially set it is to take the collection of neighbours and determine a mean z-value from them, an interpolation. The movement should be linear in z hence an interpolation is as good as it gets and should not introduce artificial jumps in z. That could for instance upset a cluster algorithm, who knows. |
Pull Request #154 will cover the topic of "how to implement a service", which is the currently identified mechanism for transmitting dead cell info through Falaise. There are a couple of additional implementation details to address:
I'll also add @pfranchini to this discussion. |
As suggested we are going to start with the idealized events generator, removing entire cells from the tracker and making disappear the correspondent hits of the generated tracks, as in the example Those simulation will be reconstructed with Falaise and in parallel Matteo will run his CNN on the same samples to evaluate the efficiency vs number of dead cells with the two different algorithms. Next steps will be
|
Wonderful! It would be good to get an idea as soon as possible of how efficiencies change with the SuperNEMO reconstruction if we remove all the cells that are currently shorting. I can point you at the list if you don't have it. Are we ready to do that now with the ideal event generator? |
Nearly there, if you provide the list will do that early next week. |
D'you need a particular format? I can give you an excel spreadsheet... |
Right now is (side, layer, column). Thanks Cheryl! |
Will get you that list of cells later today. I notice that with up to about 500 cells the efficiency is actually going up... but I am a bit concerned that that might be due to the definition of efficiency. If you've simulated two tracks, kill a cell in the middle of one of them, and then count the tracks, you might well end up with 3 tracks (1 for the one you didn't split, and two for the one track with a hole in the middle that has now become two tracks). Would be interesting to see what Falaise comes up with in terms of "particles". |
The errors might be quite large, it probably goes down within the error (it might have randomly killed hits that do not affect many tracks). |
Yikes, that's not so good. |
Looks to me that the algorithm does what it is supposed to do. I know it is some time ago, see comment from July above in the thread, but this is an effect of the reconstruction relying on nearest neighbours to form clusters. |
I agree with @yramachers - but I am curious to see whether Matteo's machine learning thing can figure this out for itself. I'd be very impressed if it could. |
I do agree. A dead cell is not the same as a cell without a hit. In principle the algorithm could try firing up dead cells to see if by any chance this makes collinear tracks into a single one. I think we agree that the nearest neighbours concept is a bit too short sight. Having just the second nearest neighbours will reabsorb most of the dead cell's artificial features. Still the current algorithm is giving 80% for pure lines without any dead cell (whatever it could be defined) so there is some room for improvements also at this level. Since I do not really know how to tackle that problem, will start with something I know like setting |
Hi @pfranchini - I've updated http://nile.hep.utexas.edu/cgi-bin/DocDB/ut-nemo/private/ShowDocument?docid=4943 to show which cells have any kind of short (top, bottom or both). The cells you need are in the blue section at the bottom of each sheet (one sheet per C section). Let me know if it isn't clear. |
Thanks Cheryl. |
I had to reconsider my definition of efficiency as single tracks that have a hit on the foil and one on the calorimeter too, since this is how they are simulated by YR generator. So, in absence of dead cells
Killing all the hits correspondent to cells with shorts (367)
in comparison a randomized suppression of 367 cells would give
In case we had a perfect track reconstruction that would stitch together all the broken tracks the only loss would come from the tracks not reconstructed at all, so if I have to quote a single number I would say that the loss of efficiency in having all those shorts as full dead cells would be ~3.4% that does not sound too bad in the scenario of 18% of the tracker off. I suppose some effort should go in improving the algorithm itself since the dead cells seems of a second order of importance, but this is beyond this issue. |
Cells are off and correspondent hits are removed. |
Of course Falaise does not know a thing about dead cells in the geometry. For counting the tracks I am using the |
The reconstruction isn't necessarily being clever if it goes back to the foil with the first layer missing! What if it was a radon-in-the-tracker event from Bi214 on the tracker wires? It can't just go assuming it's from the foil. It's doing TOO well and I am suspicious! |
@cherylepatrick, was apparently done on purpose, but is not clear to me why:
|
Huh, why on earth did I do that? I clearly did it intentionally. But I cannot at all remember why. My guess is that it was something to do with the possibility of a track not being extended back to the foil, and that we looked at that in a different way. But I have to admit it makes very little sense to me right now. As far as I am concerned, you can feel free to change it - just check where it gets used and that there's no obvious place where it needs to allow the other. To be honest I am baffled why I thought this was a smart idea. |
Actually @pfranchini be careful before doing that - it looks like it is used in the gamma track length/internal external probabilities for the 1e1gamma channel to check when you have a gamma and an electron from a common vertex, and that needs to include a common vertex on the wires. I'm not saying that we don't want to make a change, but I think the change needs to be more sophisticated than just changing the definition of that variable. Probably we need a separate check for an actual vertex on the foil, and that var should be renamed vertexInTracker or something like that. |
I think the definition is correct but just the name is misleading, in particular as defined in the README (or at least was for me). |
Yeah, I think I am inclined to agree. The readme definitely seems misleading. Sorry about that. |
No worries, thanks for that. I might have a look since for these sort of basic checks can be useful. |
Yeah it would be really helpful actually, there is a lot of stuff in there that hasn't had much scrutiny from anyone except me, and I haven't looked at it in a while... I suspect there are a few things that were weirdly specific to analyses that were in progress at the time I wrote it, and actually doesn't make much sense in a more general context. Another pair of expert eyes would be a big help. |
After the fix in the variable I was using, I still consider my definition of efficiency as single tracks that have a hit on the foil and one on the calorimeter too, since this is how they are simulated by YR's generator. Otherwise they are classified as short even if reconstructed as single tracks. So, in absence of dead cells:
Killing all the hits correspondent to cells with shorts (367):
in comparison a randomized suppression of 367 cells would give:
As, @cherylepatrick, you were expecting removing the hits near the foil would compromise the efficiency, as here defined, by ~31%. Of course any further analysis or better reconstruction could easily overcome this. |
Hi @pfranchini and thanks for doing this, it's very interesting. I have a few questions: Does the yellow line mean that it reconstructed a single particle track, but either the foil hit, calorimeter hit, or both were missing? If the calorimeter hit isn't associated, it's a lost cause, but if it's just not marked as a foil hit, there are things we can do, so it's interesting to know exactly what happened with those. Have you seen any evidence of a track being reconstructed and successfully "jumping" a dead cell? Finally - this is with the dead cells just reporting no hit? How hard is it to make them always on, and what difference would that make? (I assume that's not TOO bad with the IE generator, but we might need help to integrate it into Falaise?) Another good thing to test is how well we would be able to reconstruct two tracks from a common vertex (bb-like topology). At some point we need to care about BiPo events as well, as we will lose a lot of background-suppression power from the alpha veto. Do we have a plan for testing with Falaise? What do we need to do start doing that? |
In this case all the time is a missing foil hit, since there is always a colorimeter hit from the generator. Of course if Falaise would knew that extrapolating the track up to the foil there was a dead cell in the way could have assumed that the vertex was on the foil. This requires some intelligences in the reconstruction.
Yes, sometimes. I have tried to kill a full layer of 113 cells in both the trackers. This splits all the tracks in two but still there are many tracks being reconstructed from foil to calo (as can easily confirm with
Need some coding for this with IE gen and my cell killer. Would you do, as suggested, setting always hits with radius=0?
The IE generator should be able to do this. We probably should move at this point into a topology reconstruction efficiency rather than counting tracks. I guess can use your Sensitivity module to do this.
|
That's great! But I'm actually kind of surprised that we don't get a lot of reconstructed tracks connecting the dead cells. Maybe the (bizarre) "striped" nature of the shorts is doing us a favour because they don't connect up. Are you allowing x-wall / gamma veto calorimeter hits? When it's finding a track, is it the RIGHT track? It'd be good to see some event displays just to check it's doing what we hope it's doing. |
The study leaving on ALL the dead cells is in progress. Above are only the cells corresponding to real tracks left on with null radius (so random connections between dead cells could not happen). I guess that could be compatible with having only a partial cell reading. Need a bit more of fiddling to find out, as you said, if the RIGHT track is reconstructed each time. |
Ah, I see what you mean! In that case, I'm not surprised it made things better. I'm really curious how it will be with all the dead cells on. By the partial cell reading, d'you mean no cathode, but the anode is OK? If we only have 1 cathode, we should be able to reconstruct a position just fine (don't know if Falaise currently does that though). If we have no cathodes, we can reconstruct a radius but not a z position (along the wires) - or rather, we get the z position to a choice of two locations, symmetrical about the middle of the detector. But from what Dave and Xavier found out in the testing, it sounds like maybe it isn't safe to turn on the cells at all if they have a cathode short, so I think for now we can just assume the whole cell is busted. (And that's important actually - what are you doing about the z position for these always-on cells? I'm not sure CAT is great at utilising the z information but we ought to check. Maybe put it halfway up the detector with a +/-1.5 metre uncertainty? Come to think of that... are we better doing the same for the radii and putting them at 11mm (half a radius, if I remember the cell size correctly) with a 11mm uncertainty?) |
@yramachers I am being lazy now, but do you have a simple set of equations to convert (side, row, column) into actual positions (wirex, wirey). I just wanted to be fully consistent with your generator. Thanks. |
I got this that should work:
|
Yes, that is what is being used in the generator. There the offset is |
Completely coincidentally, I was looking through some old emails and found something I had written suggesting that for delayed hits, Xavier did what I mentioned above - set the radius to half the cell radius with an uncertainty of the same amount. |
This makes absolutely statistically sense so the relative error is 100%. |
As proposed in the Analysis meeting of Feb. 27, I have created two Falaise modules https://github.com/SuperNEMO-DBD/SuperNEMO-DeadCellsModule The first, given a calibrated data file, kills a set of hits correspondent to dead cells (randomly generated or read from a file).
I have now been testing the BETWEEN method on 2nbb ( (My definition of efficiency correspond to the fraction of reconstructed double tracks - not even considering the signs). |
@pfranchini, could you prepare a PR adding these two modules to Falaise under the |
Hi @drbenmorgan, |
Thanks @pfranchini, sounds good! |
I'm labelling this a question for now, but I suspect it's going to turn into a request.
We've found some shorts on the cathodes in the tracker, and I want to understand how the reconstruction will handle them. While we're at it, we should think about dead cells, too.
What I'd like to be able to do (but feel free to suggest alternatives) is:
We should be able to do some amount of reconstruction even without cathode signals, but we will need to be smart and I don't know if we are.
In the longer term, I think it's likely that we'll need to tell the reconstruction where our bad channels are so that the tracking/clustering algorithms know to treat those cells differently than the rest, but for now I just want to see what the simulation does and how well or otherwise the reconstruction handles it.
I guess a related question is whether anybody already has any idea what the reconstruction does with a dead cell and/or missing cathode signal! That's what I really want to know the answer to. Thanks!
The text was updated successfully, but these errors were encountered: