Hi all,
Theanne Schiros and I are running into a fitting issue that I
don't quite know how to solve, other than to suggest a new Ifeffit
feature. :)
The system we are working with is a CuInSe2 photovoltaic. Our
model allows for the possibility of vacancies as well as site disorder
(e.g. a copper sitting in a nominally selenium site). Combined with
the known stoichiometry of the samples (generally somewhat Se rich
compared to the nominal formula), that gives us a whole network of
constraints. In other words, there are 12 parameters describing the
disorder: the amounts of copper, indium, selenium, and vacancies in
each of the three kinds of site. But many of those can be "def'd"
in terms of the others, since we know there are twice as many selenium
sites as copper or indium, and we know the stoichiometry.
The resulting fits work pretty well. They generate results which
are statistically superior to fits with no disorder, and yield values
for the various kinds of disorder which are comparable to those
predicted theoretically.
So here's the problem: a couple of the "def'd" values
come out somewhat negative. I'm not surprised this happens; my sense
is that the negative values are comparable to the uncertainties
(Theanne has the exact data; I'm mainly kibbitzing), so it's not a
crisis for the overall fit. But of course I'd like to force the fit
not to allow those negative occupancy numbers.
I can't think how to do that, though. We can't just put an abs()
around the def'd values, because that means our constraints based on
stoichiometry and the relative number of sites are being applied
incorrectly. A restraint doesn't really seem appropriate either.
Does anyone have an idea of how to deal with this?
If no one does, perhaps there should be an ifeffit option for a
"hard restraint." This would be something like the max and
min functions, except that it would operate by putting a huge penalty
to the chi-square when outside the range. Just to be clear, it would
work something like this: y has been def'd to x + z. Then
y is also given a hard restraint that it cannot be less than 0.
The fit would then generate a positive value of y that was not
less than 0 by varying x and z in such a way that it is
still true that y = x + z.
Is this a feature that would be useful to other people? Am I
missing a way to implement this using the current software? Would this
create big problems for, e.g., Ifeffit's ability to calculate
uncertainties and correlations?
Thanks for any thoughts you all have on these issues!
--Scott Calvin
Sarah Lawrence College