Go to the documentation of this file. 1 #ifndef __JTOOLS__JHERMITESPLINE__
2 #define __JTOOLS__JHERMITESPLINE__
45 template<
class JElement_t,
template<
class,
class>
class JCollection_t,
class JDistance_t>
47 public JCollection_t<JElement_t, JDistance_t>,
61 typedef typename collection_type::iterator
iterator;
76 if (this->size() >= 2
u) {
81 i->setU((
j->getY() - i->getY()) / this->
getDistance(i->getX(),
j->getX()));
87 i->setU((
j->getY() - i->getY()) / this->
getDistance(i->getX(),
j->getX()));
90 for (
iterator k = this->begin(), i = k++,
j = k++; k != this->end(); ++i, ++
j, ++k) {
91 j->setU(0.5 * ((
j->getY() - i->getY()) / this->
getDistance(i->getX(),
j->getX()) +
92 (k->getY() -
j->getY()) / this->
getDistance(j->getX(), k->getX())));
97 for (
iterator j = this->begin(), i =
j++;
j != this->end(); ++i, ++
j) {
98 if (i->getY() ==
j->getY()) {
103 for (
iterator j = this->begin(), i =
j++;
j != this->end(); ++i, ++
j) {
112 i->setU(
v*i->getU());
113 j->setU(
v*
j->getU());
159 template<
class JElement_t,
160 template<
class,
class>
class JCollection_t,
169 template<
class JElement_t,
template<
class,
class>
class JCollection_t,
class JDistance_t>
175 public JFunction<typename JElement_t::abscissa_type,
176 typename JResultType<typename JElement_t::ordinate_type>::result_type>
189 typedef typename collection_type::iterator
iterator;
215 if (this->size() <= 1
u) {
223 if ((p == this->begin() && this->
getDistance(x, (p++)->getX()) > distance_type::precision) ||
224 (p == this->end() && this->
getDistance((--p)->getX(), x) > distance_type::precision)) {
231 const double dx = this->
getDistance(p->getX(), q->getX());
232 const double t = this->
getDistance(p->getX(), x) / dx;
234 return h00(t)*p->getY() +
h10(t)*p->getU()*dx +
h01(t)*q->getY() +
h11(t)*q->getU()*dx;
239 using collection_type::h00;
240 using collection_type::h10;
241 using collection_type::h01;
242 using collection_type::h11;
249 template<
class JElement_t,
template<
class,
class>
class JCollection_t,
class JDistance_t>
255 public JFunction<typename JElement_t::abscissa_type,
256 JResultDerivative<typename JResultType<typename JElement_t::ordinate_type>::result_type> >
269 typedef typename collection_type::iterator
iterator;
295 if (this->size() <= 1
u) {
304 if ((p == this->begin() && this->
getDistance(x, (p++)->getX()) > distance_type::precision) ||
305 (p == this->end() && this->
getDistance((--p)->getX(), x) > distance_type::precision)) {
312 const double dx = this->
getDistance(p->getX(), q->getX());
313 const double t = this->
getDistance(p->getX(), x) / dx;
315 result.f =
h00 (t)*p->getY() +
h10 (t)*p->getU()*dx +
h01 (t)*q->getY() +
h11 (t)*q->getU()*dx;
324 using collection_type::h00;
325 using collection_type::h10;
326 using collection_type::h01;
327 using collection_type::h11;
329 using collection_type::h00p;
330 using collection_type::h10p;
331 using collection_type::h01p;
332 using collection_type::h11p;
349 template<
class JElement_t,
template<
class,
class>
class JCollection_t,
class JDistance_t>
355 public JFunction<typename JElement_t::abscissa_type,
356 JResultPDF<typename JResultType<typename JElement_t::ordinate_type>::result_type> >
369 typedef typename collection_type::iterator
iterator;
395 if (this->size() <= 1
u) {
403 if (p == this->begin() && this->
getDistance(x, (p++)->getX()) > distance_type::precision) {
412 result.V = this->rbegin()->getIntegral();
420 }
else if (p == this->end() && this->
getDistance((--p)->getX(), x) > distance_type::precision) {
428 result.v = this->rbegin()->getIntegral();
429 result.V = this->rbegin()->getIntegral();
440 const double dx = this->
getDistance(p->getX(), q->getX());
441 const double t = this->
getDistance(p->getX(), x) / dx;
443 result.f =
h00 (t)*p->getY() +
h10 (t)*p->getU()*dx +
h01 (t)*q->getY() +
h11 (t)*q->getU()*dx;
445 result.v = (p->getIntegral() +
446 (
H00 (t)*p->getY() +
H10 (t)*p->getU()*dx +
H01 (t)*q->getY() +
H11 (t)*q->getU()*dx)*dx);
447 result.V = this->rbegin()->getIntegral();
455 using collection_type::h00;
456 using collection_type::h10;
457 using collection_type::h01;
458 using collection_type::h11;
460 using collection_type::h00p;
461 using collection_type::h10p;
462 using collection_type::h01p;
463 using collection_type::h11p;
465 using collection_type::H00;
466 using collection_type::H10;
467 using collection_type::H01;
468 using collection_type::H11;
475 if (!this->empty()) {
481 for (
iterator j = this->begin(), i =
j++;
j != this->end(); ++i, ++
j) {
483 const double dx = this->
getDistance(i->getX(),
j->getX());
490 j->setIntegral(i->getIntegral() +
v +
w);
505 template<
class JElement_t,
506 template<
class,
class>
class JCollection_t,
507 class JResult_t =
typename JElement_t::ordinate_type,
511 public JFunction1D<typename JElement_t::abscissa_type, JResult_t>
545 template<
class JKey_t,
547 template<
class,
class,
class>
class JMap_t,
551 public JMap_t<JKey_t, JValue_t, JDistance_t>,
566 typedef typename collection_type::iterator
iterator;
618 for (
iterator i = this->begin(); i != this->end(); ++i) {
637 template<
class JElement_t,
638 template<
class,
class>
class JCollection_t,
641 inline typename JElement_t::ordinate_type
650 if (input.getSize() > 1) {
652 output.
put(input.begin()->getX(), V);
656 const double dx = input.getDistance(i->getX(),
j->getX());
665 output.
put(
j->getX(), V);
682 template<
class JElement_t,
683 template<
class,
class>
class JCollection_t,
685 inline typename JElement_t::ordinate_type
693 if (input.getSize() > 1) {
696 output.
put(i->getX(), i->getIntegral());
699 return input.rbegin()->getIntegral();
Exception for missing value.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
double getDistance(const JFirst_t &first, const JSecond_t &second)
Get distance between objects.
Exception for accessing a value in a collection that is outside of its range.
Exception for a functional operation.
Exception for division by zero.
static const JZero zero
Function object to assign zero value.