--
You received this message because you are subscribed to the Google Groups "Scikit-HEP forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scikit-hep-for...@googlegroups.com.
To post to this group, send email to scikit-h...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/3d677112-182c-4c07-a367-208c3d0e48e7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
This sounds great! Common protocols for sharing information about fitting would enable specialized fitters to spring up and solve particular problems while still being usable in an analysis that uses multiple fitting techniques. It's much easier (and more desirable, in my opinion) to develop specialized tools with common protocols than one tool to try to win the mindshare of everyone.
However, I wanted to point out that there's already a pythonic library of PDFs: SciPy. See their continuous distribution library and their discrete distribution library. It gives you all of the PDFs, CDFs, and random deviates you're likely to need in fitting in a variety of ways. More importantly, it standardizes a set of names and calling procedures to get the same kind of information from each, and it plays well with Numpy (after all, Numpy was developed to support SciPy from the beginning).
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/CADXTekJvdi77W-FQ0ujvHqtUa8fXtU62VrPjWAXM_aB0FgDwcg%40mail.gmail.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/CADXTek%2BHvG4nw4MZJ%3DfnM_o-nxnyQTvsvUv5ACROjhKi%3DXCXZw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
Hi all,
Just for the sake of it, let me say that I very much like the idea posted by Matt. We actually talked before about the matter, the 2 of us. IIRC Jim will be at CERN this week. Shall we try and meet the few of us that can? Jim, if you let us have your availability we can hopefully find a slot ... Maybe you Matt could come from Lausanne?
Thanks,
Eduardo
| Eduardo Rodrigues | University of Cincinnati | LHCb Experiment @ CERN & DIANA/HEP | Tel. +41 (0) 22 76 72097 |
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/f4eeb478-39d4-4866-85d0-8a77de919fc1%40Spark.
For more options, visit https://groups.google.com/d/optout.
Hi Jim,
Yep, I was under the impression that you would be physically here for the HSF software forum on Wednesday. Will you be coming any time soon? Else we could indeed a meeting with vidyo ...
Thanks,
Eduardo
| Eduardo Rodrigues | University of Cincinnati | LHCb Experiment @ CERN & DIANA/HEP | Tel. +41 (0) 22 76 72097 |
Hi,
Seems there is interest above threshold. How would Thursday 16h30 fit? Could most of you attend?
Thanks,
Eduardo
| Eduardo Rodrigues | University of Cincinnati | LHCb Experiment @ CERN & DIANA/HEP | Tel. +41 (0) 22 76 72097 |
From: Albert Puig
Sent: 05 November 2018 15:56
To: Jim Pivarski
Cc: Eduardo Rodrigues Figueiredo; Matthieu Marinangeli; Henry Fredrick Schreiner; scikit-h...@googlegroups.com
Subject: Re: More collaborative approach between iminuit, probfit,pyhfandother statistics tools.
Hi all,
we have done a lot of this work in zfit already, basing ourselves close to TF distributions (and ecosystem), but we want to build something with a common API so tools are reasonably interchangeable. Of course, sharing too much stuff goes against specialisation and speed, but at least it would be great to define a common API to interact with certain common things.
BTW, I can also be around for a discussion this week.
Albert
PS: The goal of zfit is to build a complete NLL minimisation library based on tensorflow (for now), along with PDFs, that is interchangeable with the rest of the python ecosystem, with focus on scalability, paralellization and ease-of-use (no cython, no C++ needed at all to extend)
This email has been checked for viruses by Avast antivirus software.
www.avast.com
--
You received this message because you are subscribed to the Google Groups "Scikit-HEP forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scikit-hep-for...@googlegroups.com.
To post to this group, send email to scikit-h...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/CADXTekKEf%2BCakU2GBHjM2fqtG7E0vsWwSRZy6RZb8MqFZaSLwA%40mail.gmail.com.
Seems there is interest above threshold. How would Thursday 16h30 fit? Could most of you attend?
Hi Matt, Jim, Henry, Hans, Albert, Brian, all,
I hope as many of you can join and discuss the proposal from Matt this Thursday 16h30 CET.
We have a room booked at CERN for those who appreciate the face-to-face chat when possible.
The conference room 14-4-002
has been booked for Eduardo Rodrigues
on 8 Nov 2018 from 16:30 to 18:00.
Reason: Scikit-HEP Meeting
We will be using my room on vidyo as 14-4-002 does not have equipment. It’s the link https://vidyoportal.cern.ch/join/1RPErGNe9gMf.
See you, thank a lot,
Eduardo et al.
| Eduardo Rodrigues | University of Cincinnati | LHCb Experiment @ CERN & DIANA/HEP | Tel. +41 (0) 22 76 72097 |
From: Jim Pivarski
Sent: 05 November 2018 16:52
To: Eduardo Rodrigues
Cc: alber...@cern.ch; Matthieu Marinangeli; Henry Fredrick Schreiner; scikit-h...@googlegroups.com
Subject: Re: More collaborative approach between iminuit, probfit,pyhfandotherstatistics tools.
On Mon, Nov 5, 2018 at 9:39 AM Eduardo Rodrigues <eduardo....@cern.ch> wrote:
--
You received this message because you are subscribed to the Google Groups "Scikit-HEP forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scikit-hep-for...@googlegroups.com.
To post to this group, send email to scikit-h...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/CADXTekJKDrsxhZ4ZRfXBpN3CtE8vChhZbaVA0vXcOP%3DRBNxdqQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
Jumping late into the discussion...
> On 1. Nov 2018, at 16:25, Jim Pivarski <jpiv...@gmail.com> wrote:
>
> I see. I didn't know about the slowness problem (is the venerable old SciPy getting ignored in the new era?). Vectorizability and co-processors would also be good, and maybe SciPy won't be taking that on soon. Also, that point about composability (distribution + distribution = distribution) is clearly important for RooFit-style fit-building, and I guess it's unlikely that SciPy will take that on.
When you have scaled pdfs that are added as part of the model (signal + background pdf is a typical example), the amplitudes of those pdfs can be fitted semi-analytically with the NNLS algorithm. This can make the fit much faster and/or more stable, so it is good if the fitting tools can distinguish between parameters which change pdfs in shape and amplitude parameters which scale those pdfs.
> Okay, I'm sold on the inadequacy of SciPy the library, but its centrality in the ecosystem breaks the symmetry of possible choices of conventions: we should adopt the spellings and method signatures that they use.
+1
> The original example of "everybody implements their own Gaussian" made me think of the fact that I usually write the formula for a Gaussian PDF inline because I can remember its formula better than "normal" vs "norm" vs "gauss" vs "gaussian" vs "Gauss" (capitalized because it's someone's name) vs "gaus" (why did ROOT leave off the second "s"???).
Yes, why did they do this??? It is probably inherited from PAW. People educated in FORTRAN tend to treat letters in variable and function names like they cost them money.
> Maybe we could reproduce a well-specified subset of the SciPy interface, not bothering to implement a method for the nth moment, while also supersetting it to provide (e.g.) composition. (Replacing functions with objects that have __add__, __mul__, etc. to build a fit function— and derivaties!— would be pretty cool.)
>
> Using the same names and method structure would also simplify unit testing: overlaps with SciPy should reproduce SciPy results (SciPy can be required in the testing; it doesn't matter if the tests are a little slow).
+1
I think that would also keep the project relevant in the long run, because it can be merged upstream into the scipy distribution.
> If possible, it could be valuable to define the implementations purely in terms of Numpy ufuncs, so that it transparently works for scalars, arrays, jagged arrays, delayed Dask arrays, and CuPy on GPUs. These, too, would have to be introduced to the testing early so that not too much is built on a mistaken assumption about how transparent those plug-ins are. (For instance, awkward-array, Dask, and CuPy objects pass through Numpy ufuncs because they implement the __array_ufunc__ protocol, but not Numpy functions. There's an upcoming NEP to make that possible.)
Best regards,
Hans
--
You received this message because you are subscribed to the Google Groups "Scikit-HEP forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scikit-hep-for...@googlegroups.com.
To post to this group, send an email to scikit-h...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/60F25349-8BE7-4F0D-A180-7B03D3A39B44%40gmail.com.
To post to this group, send email to scikit-h...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/CADXTekJyuvyr5g5zmeWZSimCoN%3DYoskk9xw_7eM8h8FaRRGVxQ%40mail.gmail.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/CADXTekK58_%2BA5%3D89cqHqZb7MWdKr%3DVQ0SbT3UN8GTBaYqfY8pQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
To post to this group, send email to scikit-h...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/CADXTekJyuvyr5g5zmeWZSimCoN%3DYoskk9xw_7eM8h8FaRRGVxQ%40mail.gmail.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/e6c92412-012d-4d3e-8eed-917996d9808f%40googlegroups.com.
Hi Albert,Looking at https://github.com/zfit/zfit it’s really hard to see what it is, even pasting the description from below into the README and docs would be very useful if you want already co-developers or early adopters that try it out.
There’s also the sticky license split preventing collaboration and re-use. I see you put zfit under GPL. That means people working on projects with a liberal license like BSD or MIT (like numpy, scipy, Tensorflow, the larger fraction of the Python scientific ecosystem) can’t import zfit in their BSD or MIT code and won’t look at the code, because it’s a license violation to re-use it in the liberal-licensed package they work on.I know there are good reasons for choosing GPL, sometimes you must (if you build on GPL yourself) and some people prefer it strongly over a liberal license, that’s a completely valid choice. I’m just saying: if you don’t care strongly about the license, and want to maximise collaboration and sharing, consider putting a liberal license (like Numpy or Tensorflow and most packages built on those).This unfortunate situation in open source and free software will always remain to some extent and is a real issue that hinders collaboration and re-us. E.g. the scipy devs would like to wrap FFTW because it’s the fastest in the west, but don’t because they want a liberal license and FFTW is GPL.
There should not be any problem changing license, to be honest. We made a choice, but we didn't have a strong motivation. What we want is a license that is the most useful for the community, so feedback like yours is super useful for this. Given no restrictions, what would be the ideal license from the SciKit-HEP/HEP community point of view?
Hi all,
We will be starting soon ...
Thanks,
Eduardo
| Eduardo Rodrigues | University of Cincinnati | LHCb Experiment @ CERN & DIANA/HEP | Tel. +41 (0) 22 76 72097 |
Virus-free. www.avast.com |
--
You received this message because you are subscribed to the Google Groups "Scikit-HEP forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scikit-hep-for...@googlegroups.com.
To post to this group, send email to scikit-h...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/f63f400d-0bfc-4900-b51d-535957e25a1e%40cernfe02.cern.ch.
Hi all,
We will be starting soon ...
Thanks,
Eduardo
| Eduardo Rodrigues | University of Cincinnati | LHCb Experiment @ CERN & DIANA/HEP | Tel. +41 (0) 22 76 72097 |
From: Eduardo Rodrigues
Sent: 06 November 2018 13:17
To: Jim Pivarski
Virus-free. www.avast.com
--
You received this message because you are subscribed to the Google Groups "Scikit-HEP forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scikit-hep-for...@googlegroups.com.
To post to this group, send email to scikit-h...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/f63f400d-0bfc-4900-b51d-535957e25a1e%40cernfe02.cern.ch.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Scikit-HEP forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scikit-hep-for...@googlegroups.com.
To post to this group, send email to scikit-h...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/391e0bb2-a993-40b7-b699-356c394c5a44%40cernfe06.cern.ch.
before filling the google docs, we've spent some time to formalise the high-level API (meaning, minimize, loss functions, etc, not model building) we were discussing during the meeting. You can find it inThis is basically what zfit implements (or plans to implement). Please let us know what you think.
Hi Albert, cc Jonas as author,
Thanks a lot for the document. It will help a lot. I will look properly asap. For now let me just say that I find it a good idea to move the API from being too coupled with MINUIT, even though MINUIT is so good. It would be nicer IMO to have MINUIT-specific calls done via arguments, so that all miminisers we may have/want will still have the same main calls. More when I actually read the doc properly.
Thanks,
Eduardo
| Eduardo Rodrigues | University of Cincinnati | LHCb Experiment @ CERN & DIANA/HEP | Tel. +41 (0) 22 76 72097 |
On 12. Nov 2018, at 16:32, Jim Pivarski <jpiv...@gmail.com> wrote:On Mon, Nov 12, 2018 at 5:13 AM Albert Puig <alber...@cern.ch> wrote:before filling the google docs, we've spent some time to formalise the high-level API (meaning, minimize, loss functions, etc, not model building) we were discussing during the meeting. You can find it inThis is basically what zfit implements (or plans to implement). Please let us know what you think.
First, thanks for the clarity! My comments are below.I don't understand why the "sample" function requires a "limits" argument. Deviate sampling with the rejection method would require parameters like this, but if you can compute the inverse CDF of your distributions, then you can throw random numbers in (0, 1) and pass them through the inverse CDF to get random deviates. I also find the name "n_draws" unnatural. "n" would work. I don't think it's unreasonable to expect an implementation to be able to produce inverse CDFs of its distributions. Does anyone have a counterexample?Parameter's "upper_error" and "lower_error" are good, but it would be nice if these were aliases to a general function "error(p)" or "error_at(p)". That way, 95% confidence levels would be part of the same mechanism as getting asymmetric errors.Does "gauss.prob" return probabilities (integrations of the PDF) or probability densities (the PDF)? In the example, it looks like the latter, and if so, the name should not be "prob".We should decide once and for all "normal" vs "gauss" and whether people's last names need to be capitalized. Some of the distributions will be people's last names. I like "normal" because it occupies a special place in the set of distributions and I think more libraries are calling it "normal" than "gauss" nowadays.It shouldn't be assumed that a minimizer has an internal state. That's just how Minuit works; it doesn't have to work that way. To get all the parameter estimates that we need, a minimizer would only need:
- A minimize function, which returns a parameter coordinate or raises an exception when it doesn't converge.
- A derivative (gradient) and second derivative (hessian) function, evaluated at a given parameter coordinate, usually the result of minimize.
- A root-finding function, which finds sets of parameter coordinates for the function equal to a given value under constraints. Minuit's MINOS is a special case: it finds the two parameter coordinates closest to the minimum point where the function is equal to the minimum point plus 1 or 0.5 under the constraint that all parameters are fixed at the minimum point except one parameter at a time. Minuit's CONTOUR generalizes this somewhat for two parameters. These are things the user generally wants, but the fitter should ask for a more basic building block from the minimizer.
Generality aside, the main point is that the minimizer shouldn't be expected to hold state in today's multiprocessor world. Even though the minimizer just told us the fitted coordinates, we should pass the fitted coordinates back to the minimizer when asking the next question: the second derivative or roots. Minuit can be wrapped to make that so.-- Jim
--
You received this message because you are subscribed to the Google Groups "Scikit-HEP forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scikit-hep-for...@googlegroups.com.
To post to this group, send email to scikit-h...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/CADXTekLqJ9Y3B56TpEFbuoYJ4TxT0OBA3%2B-Q%3DzMTSUfd%3DBER1w%40mail.gmail.com.
On 13. Nov 2018, at 09:08, Albert Puig <alber...@cern.ch> wrote:Dear Christoph,in principle we want to be as general as possible. Why do you say the API should be changed to deal with N-D distributions or binned data? If we've missed something, we really need to change it :-)Thanks,Albert
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/F382F23E-A1B8-4EA1-9C7C-7B6505212332%40googlemail.com.
For more options, visit https://groups.google.com/d/optout.
On 13. Nov 2018, at 10:20, Albert Puig <alber...@cern.ch> wrote:Hi Christoph,I see your point.
On Tue, Nov 13, 2018 at 9:41 AM 'Christoph Deil' via Scikit-HEP forum <scikit-h...@googlegroups.com> wrote:Hi Albert,In the PDF and Loss functions part of the API you have limits and range arguments.These would have to be changed to support more than one dimension.E.g. where you have fit_range=(-10, 10) for 1D, for 3D it could be fit_range = [(x_lo, x_hi), (y_lo, y_hi), (z_lo, z_hi)] or fit_range = ([x_lo, y_lo, z_hi], [x_hi, y_hi, z_hi]).
You're right, the API is unclear here. Ranges and limits should be multidimensional, it's just the examples we put here are not (but in zfit multidimensional are supported interchangeably)
At least in my applications, we don’t use such box limits, but we have binned data and a boolean mask that specifies which bins should contribute to the cost function and which should be excluded. So the places where the model and loss function interacts with the data are different, and it partly shows in API you show in https://github.com/zfit/zfit-tutorials/blob/master/API.ipynb .
This is a very interesting use case, clearly not included in the API. I have a question: how do you integrate the PDFs in this case (ie, without limits)? Or do you just use unnormalized functions?
The Parameters and Minimizers part of the API is generic, doesn’t depend on the kind of model or data. This part I’m certainly very interested in.For that part: could you please be a bit more specific in the API document what kind of state the Parameter and PDF object holds?
The Parameter should just hold the value and the errors. The PDF just holds the parameters.
Why do you have a Parameter.init_value attribute?
Sometimes it's interesting to know which was the initial value, but I'm not sure this should stay, tbh.
Presumably the Minimizer will change model parameter values in-place on the PDF / Parameter object when the fit runs?
That is the current idea, yes, and the "minimizer state" is just a view of the PDF/parameters.
And after running hesse() the parameter values will be left in the state of whatever the last function evaluation there was (usually not the best-fit values)?
They should be left to the same value as before calling, I think. We have not been precise here, and I think you make an excellent point. What do people think about this?
FYI: we are also working on modelling / fitting for our application here, and are struggling a bit with the design decisions of where the parameter error information. Currently we don’t have parameter error information on the Parameter object, but on a Parameters object which holds a list of Parameter objects plus a covariance matrix (https://github.com/gammapy/gammapy/blob/master/gammapy/utils/fitting/parameter.py). And now we’re trying to decide how to add asymmetric parameter errors.
Oh, that is interesting! You make me realize right now the API doesn't contemplate covariance matrices outside the Minimizer, and maybe that is not a good idea, per Jim's comments. Let me think about this and get back to you…
One option we are considering is to follow Sherpa (see https://sherpa.readthedocs.io/en/latest/fit/index.html#estimating-errors) and not include or expose parameter error information via the Parameter class, but only an extra class (called ErrorEstResults in Sherpa, similar to the current Parameters in Gammapy) that holds the parameter error information and offers an API to retrieve it. The resulting API isn’t as nice as my_model.my_parameter.error and to have everything exposed via the model (called PDF in your case) and parameter objects. But it has the advantage that the state of the model and parameter objects is limited to only values, i.e. those objects are more loosely coupled to the cost function and minimiser / error estimator objects.
Thanks for the info, this is super useful. I also like this idea, and split the MinimizerState into FitResults and FitErrors, avoiding the concept of keeping state. Let's see if we can come up with something nice on this front, basically using the Sherpa and GammaPy ideas :-)ChristophThanks a lot again!Albert
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/89B7E263-71BF-455A-A883-406778787F6E%40googlemail.com.
For more options, visit https://groups.google.com/d/optout.
Best regards,
Hans
--
You received this message because you are subscribed to the Google Groups "Scikit-HEP forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scikit-hep-for...@googlegroups.com.
To post to this group, send an email to scikit-h...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/1E7D699E-CE47-468A-B128-6A0403767DEA%40gmail.com.
Hi Henry, Christoph,
to shortly comment on that: we're trying to build a new, improved (more generalized) version of TensorFlowAnalysis using (next to TensorFlow) a lot of what's available in TensorFlow Probability, it's called zfit and still in pre-beta. We're also developing close to the discussion here/in the gitter channel. So we're currently exploring this direction.
If you have specific ideas/comments, let us know.
Cheers,
Jonas
On Tue, Nov 13, 2018 at 9:06 AM 'Christoph Deil' via Scikit-HEP forum <scikit-h...@googlegroups.com> wrote:What is the scope of the API you are designing?
in principle we want to be as general as possible. Why do you say the API should be changed to deal with N-D distributions or binned data? If we've missed something, we really need to change it :-)
On 12. Nov 2018, at 16:32, Jim Pivarski <jpiv...@gmail.com> wrote:
-- Jim--
You received this message because you are subscribed to the Google Groups "Scikit-HEP forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scikit-hep-for...@googlegroups.com.
To post to this group, send email to scikit-h...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/CADXTekLqJ9Y3B56TpEFbuoYJ4TxT0OBA3%2B-Q%3DzMTSUfd%3DBER1w%40mail.gmail.com.
Is it possible to use MINUIT (via iminuit?) to run “hesse” and “minos” and “proflie” and “contour” without having to hold on to the iminuit.Minuit object in between the calls?I’m prototyping a fitting backend where I try to wrap existing methods in Minuit, Sherpa. For now, I hold on to the iminuit.Minuit object in between computations and close my eyes, hoping it will not get out of sync with state on the other objects that I have. Looks like this: https://github.com/gammapy/gammapy/blob/d24df5266d85d4b6b2dd6fe3987095a13488142f/gammapy/utils/fitting/fit.py#L213
--
You received this message because you are subscribed to the Google Groups "Scikit-HEP forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scikit-hep-for...@googlegroups.com.
To post to this group, send email to scikit-h...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/CADXTek%2BL8QPaAGkDhRUWpZZa%2B705GzNSHJVOw1cGFJ06-TWH%2Bg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
Hi Brian,I wholeheartedly agree with you. The interface to access any minimization/optimization algorithm should be the same.In the "API" proposal that was sent around this fact was encoded in a loss function that could be used by any minimizer (so, a couple more steps than in lmfit), but shortcuts to have an interface as lmfit seem to be very desirable. High level "simple" fitting functions still cover 90% of uses cases, so it's important these are easy and transparent for the users.Albert
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-hep-forum/CAAQEDhqMdCUjvx8FiKnpjEFB5XQALP2EqxHBrXqSxcQYFDni5g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.