// @(#)root/quadp:$Id$
// Author: Eddy Offermann   May 2004

/*************************************************************************
 * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

/*************************************************************************
 * Parts of this file are copied from the OOQP distribution and          *
 * are subject to the following license:                                 *
 *                                                                       *
 * COPYRIGHT 2001 UNIVERSITY OF CHICAGO                                  *
 *                                                                       *
 * The copyright holder hereby grants you royalty-free rights to use,    *
 * reproduce, prepare derivative works, and to redistribute this software*
 * to others, provided that any changes are clearly documented. This     *
 * software was authored by:                                             *
 *                                                                       *
 *   E. MICHAEL GERTZ      gertz@mcs.anl.gov                             *
 *   Mathematics and Computer Science Division                           *
 *   Argonne National Laboratory                                         *
 *   9700 S. Cass Avenue                                                 *
 *   Argonne, IL 60439-4844                                              *
 *                                                                       *
 *   STEPHEN J. WRIGHT     swright@cs.wisc.edu                           *
 *   Computer Sciences Department                                        *
 *   University of Wisconsin                                             *
 *   1210 West Dayton Street                                             *
 *   Madison, WI 53706   FAX: (608)262-9777                              *
 *                                                                       *
 * Any questions or comments may be directed to one of the authors.      *
 *                                                                       *
 * ARGONNE NATIONAL LABORATORY (ANL), WITH FACILITIES IN THE STATES OF   *
 * ILLINOIS AND IDAHO, IS OWNED BY THE UNITED STATES GOVERNMENT, AND     *
 * OPERATED BY THE UNIVERSITY OF CHICAGO UNDER PROVISION OF A CONTRACT   *
 * WITH THE DEPARTMENT OF ENERGY.                                        *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TQpResidual                                                          //
//                                                                      //
// The Residuals class calculates and stores the quantities that appear //
// on the right-hand side of the linear systems that arise at each      //
// interior-point iteration. These residuals can be partitioned into    //
// two fundamental categories: the components arising from the linear   //
// equations in the KKT conditions, and the components arising from the //
// complementarity conditions.                                          //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "Riostream.h"
#include "TQpResidual.h"
#include "TMatrixD.h"

ClassImp(TQpResidual)

//______________________________________________________________________________
TQpResidual::TQpResidual()
{
// Constructor

   fNx   = 0;
   fMy   = 0;
   fMz   = 0;

   fNxup = 0.0;
   fNxlo = 0.0;
   fMcup = 0.0;
   fMclo = 0.0;
   fResidualNorm = 0.0;
   fDualityGap = 0.0;
}


//______________________________________________________________________________
TQpResidual::TQpResidual(Int_t nx,Int_t my,Int_t mz,TVectorD &ixlo,TVectorD &ixup,
                         TVectorD &iclo,TVectorD &icup)
{
// Constructor

   fNx = nx;
   fMy = my;
   fMz = mz;

   if (ixlo.GetNrows() > 0) fXloIndex.Use(ixlo.GetNrows(),ixlo.GetMatrixArray());
   if (ixup.GetNrows() > 0) fXupIndex.Use(ixup.GetNrows(),ixup.GetMatrixArray());
   if (iclo.GetNrows() > 0) fCloIndex.Use(iclo.GetNrows(),iclo.GetMatrixArray());
   if (icup.GetNrows() > 0) fCupIndex.Use(icup.GetNrows(),icup.GetMatrixArray());
   fNxlo = ixlo.NonZeros();
   fNxup = ixup.NonZeros();
   fMclo = iclo.NonZeros();
   fMcup = icup.NonZeros();

   fRQ.ResizeTo(fNx);
   fRA.ResizeTo(fMy);
   fRC.ResizeTo(fMz);

   fRz.ResizeTo(fMz);
   if (fMclo > 0) {
      fRt.ResizeTo(fMz);
      fRlambda.ResizeTo(fMz);
   }
   if (fMcup > 0) {
      fRu.ResizeTo(fMz);
      fRpi.ResizeTo(fMz);
   }
   if (fNxlo > 0) {
      fRv.ResizeTo(fNx);
      fRgamma.ResizeTo(fNx);
   }
   if (fNxup > 0) {
      fRw.ResizeTo(fNx);
      fRphi.ResizeTo(fNx);
   }

   fResidualNorm = 0.0;
   fDualityGap = 0.0;
}


//______________________________________________________________________________
TQpResidual::TQpResidual(const TQpResidual &another) : TObject(another)
{
// Copy constructor

   *this = another;
}


//______________________________________________________________________________
void TQpResidual::CalcResids(TQpDataBase *prob_in,TQpVar *vars)
{
// Calculate residuals, their norms, and duality complementarity gap,
// given a problem and variable set.

   TQpDataDens *prob = (TQpDataDens *) prob_in;

   fRQ.ResizeTo(prob->fG); fRQ = prob->fG;
   prob->Qmult(1.0,fRQ,1.0,vars->fX);

   // calculate x^T (g+Qx) - contribution to the duality gap
   Double_t gap = fRQ*vars->fX;

   prob->ATransmult(1.0,fRQ,-1.0,vars->fY);
   prob->CTransmult(1.0,fRQ,-1.0,vars->fZ);
   if (fNxlo > 0) Add(fRQ,-1.0,vars->fGamma);
   if (fNxup > 0) Add(fRQ, 1.0,vars->fPhi);

   Double_t norm = 0.0;
   Double_t componentNorm = fRQ.NormInf();
   if (componentNorm > norm) norm = componentNorm;

   fRA.ResizeTo(prob->fBa); fRA = prob->fBa;
   prob->Amult(-1.0,fRA,1.0,vars->fX);

   // contribution -d^T y to duality gap
   gap -= prob->fBa*vars->fY;

   componentNorm = fRA.NormInf();
   if( componentNorm > norm ) norm = componentNorm;

   fRC.ResizeTo(vars->fS); fRC = vars->fS;
   prob->Cmult(-1.0,fRC,1.0,vars->fX);

   componentNorm = fRC.NormInf();
   if( componentNorm > norm ) norm = componentNorm;

   fRz.ResizeTo(vars->fZ); fRz = vars->fZ;

   if (fMclo > 0) {
      Add(fRz,-1.0,vars->fLambda);

      fRt.ResizeTo(vars->fS); fRt = vars->fS;
      Add(fRt,-1.0,prob->GetSlowerBound());
      fRt.SelectNonZeros(fCloIndex);
      Add(fRt,-1.0,vars->fT);

      gap -= prob->fCloBound*vars->fLambda;

      componentNorm = fRt.NormInf();
      if( componentNorm > norm ) norm = componentNorm;
   }

   if (fMcup > 0) {
      Add(fRz,1.0,vars->fPi);

      fRu.ResizeTo(vars->fS); fRu = vars->fS;
      Add(fRu,-1.0,prob->GetSupperBound() );
      fRu.SelectNonZeros(fCupIndex);
      Add(fRu,1.0,vars->fU);

      gap += prob->fCupBound*vars->fPi;

      componentNorm = fRu.NormInf();
      if( componentNorm > norm ) norm = componentNorm;
   }

   componentNorm = fRz.NormInf();
   if( componentNorm > norm ) norm = componentNorm;

   if (fNxlo > 0) {
      fRv.ResizeTo(vars->fX); fRv = vars->fX;
      Add(fRv,-1.0,prob->GetXlowerBound());
      fRv.SelectNonZeros(fXloIndex);
      Add(fRv,-1.0,vars->fV);

      gap -= prob->fXloBound*vars->fGamma;

      componentNorm = fRv.NormInf();
      if( componentNorm > norm ) norm = componentNorm;
   }

   if (fNxup > 0) {
      fRw.ResizeTo(vars->fX); fRw = vars->fX;
      Add(fRw,-1.0,prob->GetXupperBound());
      fRw.SelectNonZeros(fXupIndex);
      Add(fRw,1.0,vars->fW);

      gap += prob->fXupBound*vars->fPhi;

      componentNorm = fRw.NormInf();
      if (componentNorm > norm) norm = componentNorm;
   }

   fDualityGap   = gap;
   fResidualNorm = norm;
}


//______________________________________________________________________________
void TQpResidual::Add_r3_xz_alpha(TQpVar *vars,Double_t alpha)
{
// Modify the "complementarity" component of the residuals, by adding the pairwise
// products of the complementary variables plus a constant alpha to this term.

   if (fMclo > 0) AddElemMult(fRlambda,1.0,vars->fT,vars->fLambda);
   if (fMcup > 0) AddElemMult(fRpi    ,1.0,vars->fU,vars->fPi);
   if (fNxlo > 0) AddElemMult(fRgamma ,1.0,vars->fV,vars->fGamma);
   if (fNxup > 0) AddElemMult(fRphi   ,1.0,vars->fW,vars->fPhi);

   if (alpha != 0.0) {
      if (fMclo > 0) fRlambda.AddSomeConstant(alpha,fCloIndex);
      if (fMcup > 0) fRpi    .AddSomeConstant(alpha,fCupIndex);
      if (fNxlo > 0) fRgamma .AddSomeConstant(alpha,fXloIndex);
      if (fNxup > 0) fRphi   .AddSomeConstant(alpha,fXupIndex);
   }
}


//______________________________________________________________________________
void TQpResidual::Set_r3_xz_alpha(TQpVar *vars,Double_t alpha)
{
// Set the "complementarity" component of the residuals to the pairwise products of
// the complementary variables plus a constant alpha .

   this->Clear_r3();
   this->Add_r3_xz_alpha(vars,alpha);
}


//______________________________________________________________________________
void TQpResidual::Clear_r3()
{
// set the complementarity component of the residuals to 0.

   if (fMclo > 0) fRlambda.Zero();
   if (fMcup > 0) fRpi    .Zero();
   if (fNxlo > 0) fRgamma .Zero();
   if (fNxup > 0) fRphi   .Zero();
}


//______________________________________________________________________________
void TQpResidual::Clear_r1r2()
{
// set the noncomplementarity components of the residual (the terms arising from
// the linear equalities in the KKT conditions) to 0.

   fRQ.Zero();
   fRA.Zero();
   fRC.Zero();
   fRz.Zero();
   if (fNxlo > 0) fRv.Zero();
   if (fNxup > 0) fRw.Zero();
   if (fMclo > 0) fRt.Zero();
   if (fMcup > 0) fRu.Zero();
}


//______________________________________________________________________________
void TQpResidual::Project_r3(Double_t rmin,Double_t rmax)
{
// Perform the projection operation required by Gondzio algorithm: replace each
// component r3_i of the complementarity component of the residuals by r3p_i-r3_i,
// where r3p_i is the projection of r3_i onto the box [rmin, rmax]. Then if the
// resulting value is less than -rmax, replace it by -rmax.

   if (fMclo > 0) {
      GondzioProjection(fRlambda,rmin,rmax);
      fRlambda.SelectNonZeros(fCloIndex);
   }
   if (fMcup > 0) {
      GondzioProjection(fRpi,rmin,rmax);
      fRpi.SelectNonZeros(fCupIndex);
   }
   if (fNxlo > 0) {
      GondzioProjection(fRgamma,rmin,rmax);
      fRgamma.SelectNonZeros(fXloIndex);
   }
   if (fNxup > 0) {
      GondzioProjection(fRphi,rmin,rmax);
      fRphi.SelectNonZeros(fXupIndex);
   }
}


//______________________________________________________________________________
Bool_t TQpResidual::ValidNonZeroPattern()
{
// Check if vector elements as selected through array indices are non-zero

   if (fNxlo > 0 &&
      (!fRv    .MatchesNonZeroPattern(fXloIndex) ||
       !fRgamma.MatchesNonZeroPattern(fXloIndex)) ) {
      return kFALSE;
   }

   if (fNxup > 0 &&
      (!fRw  .MatchesNonZeroPattern(fXupIndex) ||
       !fRphi.MatchesNonZeroPattern(fXupIndex)) ) {
      return kFALSE;
   }
   if (fMclo > 0 &&
      (!fRt     .MatchesNonZeroPattern(fCloIndex) ||
       !fRlambda.MatchesNonZeroPattern(fCloIndex)) ) {
      return kFALSE;
   }

   if (fMcup > 0 &&
      (!fRu .MatchesNonZeroPattern(fCupIndex) ||
       !fRpi.MatchesNonZeroPattern(fCupIndex)) ) {
      return kFALSE;
   }

   return kTRUE;
}


//______________________________________________________________________________
void TQpResidual::GondzioProjection(TVectorD &v,Double_t rmin,Double_t rmax)
{
// Replace each component r3_i of the complementarity component of the residuals
// by r3p_i-r3_i, where r3p_i is the projection of r3_i onto the box [rmin, rmax].
// Then if the resulting value is less than -rmax, replace it by -rmax.

         Double_t *        ep = v.GetMatrixArray();
   const Double_t * const fep = ep+v.GetNrows();

   while (ep < fep) {
      if (*ep < rmin)
         *ep = rmin - *ep;
      else if (*ep > rmax)
         *ep = rmax - *ep;
      else
         *ep = 0.0;
      if (*ep < -rmax) *ep = -rmax;
      ep++;
   }
}


//______________________________________________________________________________
TQpResidual &TQpResidual::operator=(const TQpResidual &source)
{
// Assignment operator

   if (this != &source) {
      TObject::operator=(source);

      fNx   = source.fNx;
      fMy   = source.fMy;
      fMz   = source.fMz;

      fNxup = source.fNxup;
      fNxlo = source.fNxlo;
      fMcup = source.fMcup;
      fMclo = source.fMclo;

      fXupIndex.ResizeTo(source.fXupIndex); fXupIndex = source.fXupIndex;
      fXloIndex.ResizeTo(source.fXloIndex); fXloIndex = source.fXloIndex;
      fCupIndex.ResizeTo(source.fCupIndex); fCupIndex = source.fCupIndex;
      fCloIndex.ResizeTo(source.fCloIndex); fCupIndex = source.fCupIndex;

      fRQ     .ResizeTo(source.fRQ);      fRQ      = source.fRQ;
      fRA     .ResizeTo(source.fRA);      fRA      = source.fRA;
      fRC     .ResizeTo(source.fRC);      fRC      = source.fRC;
      fRz     .ResizeTo(source.fRz);      fRz      = source.fRz;
      fRv     .ResizeTo(source.fRv);      fRv      = source.fRv;
      fRw     .ResizeTo(source.fRw);      fRw      = source.fRw;
      fRt     .ResizeTo(source.fRt);      fRt      = source.fRt;
      fRu     .ResizeTo(source.fRu);      fRu      = source.fRu;
      fRgamma .ResizeTo(source.fRgamma);  fRgamma  = source.fRgamma;
      fRphi   .ResizeTo(source.fRphi);    fRphi    = source.fRphi;
      fRlambda.ResizeTo(source.fRlambda); fRlambda = source.fRlambda;
      fRpi    .ResizeTo(source.fRpi);     fRpi     = source.fRpi;

      // LM: copy also these data members
      fResidualNorm = source.fResidualNorm;
      fDualityGap = source.fDualityGap;
   }
   return *this;
}
 TQpResidual.cxx:1
 TQpResidual.cxx:2
 TQpResidual.cxx:3
 TQpResidual.cxx:4
 TQpResidual.cxx:5
 TQpResidual.cxx:6
 TQpResidual.cxx:7
 TQpResidual.cxx:8
 TQpResidual.cxx:9
 TQpResidual.cxx:10
 TQpResidual.cxx:11
 TQpResidual.cxx:12
 TQpResidual.cxx:13
 TQpResidual.cxx:14
 TQpResidual.cxx:15
 TQpResidual.cxx:16
 TQpResidual.cxx:17
 TQpResidual.cxx:18
 TQpResidual.cxx:19
 TQpResidual.cxx:20
 TQpResidual.cxx:21
 TQpResidual.cxx:22
 TQpResidual.cxx:23
 TQpResidual.cxx:24
 TQpResidual.cxx:25
 TQpResidual.cxx:26
 TQpResidual.cxx:27
 TQpResidual.cxx:28
 TQpResidual.cxx:29
 TQpResidual.cxx:30
 TQpResidual.cxx:31
 TQpResidual.cxx:32
 TQpResidual.cxx:33
 TQpResidual.cxx:34
 TQpResidual.cxx:35
 TQpResidual.cxx:36
 TQpResidual.cxx:37
 TQpResidual.cxx:38
 TQpResidual.cxx:39
 TQpResidual.cxx:40
 TQpResidual.cxx:41
 TQpResidual.cxx:42
 TQpResidual.cxx:43
 TQpResidual.cxx:44
 TQpResidual.cxx:45
 TQpResidual.cxx:46
 TQpResidual.cxx:47
 TQpResidual.cxx:48
 TQpResidual.cxx:49
 TQpResidual.cxx:50
 TQpResidual.cxx:51
 TQpResidual.cxx:52
 TQpResidual.cxx:53
 TQpResidual.cxx:54
 TQpResidual.cxx:55
 TQpResidual.cxx:56
 TQpResidual.cxx:57
 TQpResidual.cxx:58
 TQpResidual.cxx:59
 TQpResidual.cxx:60
 TQpResidual.cxx:61
 TQpResidual.cxx:62
 TQpResidual.cxx:63
 TQpResidual.cxx:64
 TQpResidual.cxx:65
 TQpResidual.cxx:66
 TQpResidual.cxx:67
 TQpResidual.cxx:68
 TQpResidual.cxx:69
 TQpResidual.cxx:70
 TQpResidual.cxx:71
 TQpResidual.cxx:72
 TQpResidual.cxx:73
 TQpResidual.cxx:74
 TQpResidual.cxx:75
 TQpResidual.cxx:76
 TQpResidual.cxx:77
 TQpResidual.cxx:78
 TQpResidual.cxx:79
 TQpResidual.cxx:80
 TQpResidual.cxx:81
 TQpResidual.cxx:82
 TQpResidual.cxx:83
 TQpResidual.cxx:84
 TQpResidual.cxx:85
 TQpResidual.cxx:86
 TQpResidual.cxx:87
 TQpResidual.cxx:88
 TQpResidual.cxx:89
 TQpResidual.cxx:90
 TQpResidual.cxx:91
 TQpResidual.cxx:92
 TQpResidual.cxx:93
 TQpResidual.cxx:94
 TQpResidual.cxx:95
 TQpResidual.cxx:96
 TQpResidual.cxx:97
 TQpResidual.cxx:98
 TQpResidual.cxx:99
 TQpResidual.cxx:100
 TQpResidual.cxx:101
 TQpResidual.cxx:102
 TQpResidual.cxx:103
 TQpResidual.cxx:104
 TQpResidual.cxx:105
 TQpResidual.cxx:106
 TQpResidual.cxx:107
 TQpResidual.cxx:108
 TQpResidual.cxx:109
 TQpResidual.cxx:110
 TQpResidual.cxx:111
 TQpResidual.cxx:112
 TQpResidual.cxx:113
 TQpResidual.cxx:114
 TQpResidual.cxx:115
 TQpResidual.cxx:116
 TQpResidual.cxx:117
 TQpResidual.cxx:118
 TQpResidual.cxx:119
 TQpResidual.cxx:120
 TQpResidual.cxx:121
 TQpResidual.cxx:122
 TQpResidual.cxx:123
 TQpResidual.cxx:124
 TQpResidual.cxx:125
 TQpResidual.cxx:126
 TQpResidual.cxx:127
 TQpResidual.cxx:128
 TQpResidual.cxx:129
 TQpResidual.cxx:130
 TQpResidual.cxx:131
 TQpResidual.cxx:132
 TQpResidual.cxx:133
 TQpResidual.cxx:134
 TQpResidual.cxx:135
 TQpResidual.cxx:136
 TQpResidual.cxx:137
 TQpResidual.cxx:138
 TQpResidual.cxx:139
 TQpResidual.cxx:140
 TQpResidual.cxx:141
 TQpResidual.cxx:142
 TQpResidual.cxx:143
 TQpResidual.cxx:144
 TQpResidual.cxx:145
 TQpResidual.cxx:146
 TQpResidual.cxx:147
 TQpResidual.cxx:148
 TQpResidual.cxx:149
 TQpResidual.cxx:150
 TQpResidual.cxx:151
 TQpResidual.cxx:152
 TQpResidual.cxx:153
 TQpResidual.cxx:154
 TQpResidual.cxx:155
 TQpResidual.cxx:156
 TQpResidual.cxx:157
 TQpResidual.cxx:158
 TQpResidual.cxx:159
 TQpResidual.cxx:160
 TQpResidual.cxx:161
 TQpResidual.cxx:162
 TQpResidual.cxx:163
 TQpResidual.cxx:164
 TQpResidual.cxx:165
 TQpResidual.cxx:166
 TQpResidual.cxx:167
 TQpResidual.cxx:168
 TQpResidual.cxx:169
 TQpResidual.cxx:170
 TQpResidual.cxx:171
 TQpResidual.cxx:172
 TQpResidual.cxx:173
 TQpResidual.cxx:174
 TQpResidual.cxx:175
 TQpResidual.cxx:176
 TQpResidual.cxx:177
 TQpResidual.cxx:178
 TQpResidual.cxx:179
 TQpResidual.cxx:180
 TQpResidual.cxx:181
 TQpResidual.cxx:182
 TQpResidual.cxx:183
 TQpResidual.cxx:184
 TQpResidual.cxx:185
 TQpResidual.cxx:186
 TQpResidual.cxx:187
 TQpResidual.cxx:188
 TQpResidual.cxx:189
 TQpResidual.cxx:190
 TQpResidual.cxx:191
 TQpResidual.cxx:192
 TQpResidual.cxx:193
 TQpResidual.cxx:194
 TQpResidual.cxx:195
 TQpResidual.cxx:196
 TQpResidual.cxx:197
 TQpResidual.cxx:198
 TQpResidual.cxx:199
 TQpResidual.cxx:200
 TQpResidual.cxx:201
 TQpResidual.cxx:202
 TQpResidual.cxx:203
 TQpResidual.cxx:204
 TQpResidual.cxx:205
 TQpResidual.cxx:206
 TQpResidual.cxx:207
 TQpResidual.cxx:208
 TQpResidual.cxx:209
 TQpResidual.cxx:210
 TQpResidual.cxx:211
 TQpResidual.cxx:212
 TQpResidual.cxx:213
 TQpResidual.cxx:214
 TQpResidual.cxx:215
 TQpResidual.cxx:216
 TQpResidual.cxx:217
 TQpResidual.cxx:218
 TQpResidual.cxx:219
 TQpResidual.cxx:220
 TQpResidual.cxx:221
 TQpResidual.cxx:222
 TQpResidual.cxx:223
 TQpResidual.cxx:224
 TQpResidual.cxx:225
 TQpResidual.cxx:226
 TQpResidual.cxx:227
 TQpResidual.cxx:228
 TQpResidual.cxx:229
 TQpResidual.cxx:230
 TQpResidual.cxx:231
 TQpResidual.cxx:232
 TQpResidual.cxx:233
 TQpResidual.cxx:234
 TQpResidual.cxx:235
 TQpResidual.cxx:236
 TQpResidual.cxx:237
 TQpResidual.cxx:238
 TQpResidual.cxx:239
 TQpResidual.cxx:240
 TQpResidual.cxx:241
 TQpResidual.cxx:242
 TQpResidual.cxx:243
 TQpResidual.cxx:244
 TQpResidual.cxx:245
 TQpResidual.cxx:246
 TQpResidual.cxx:247
 TQpResidual.cxx:248
 TQpResidual.cxx:249
 TQpResidual.cxx:250
 TQpResidual.cxx:251
 TQpResidual.cxx:252
 TQpResidual.cxx:253
 TQpResidual.cxx:254
 TQpResidual.cxx:255
 TQpResidual.cxx:256
 TQpResidual.cxx:257
 TQpResidual.cxx:258
 TQpResidual.cxx:259
 TQpResidual.cxx:260
 TQpResidual.cxx:261
 TQpResidual.cxx:262
 TQpResidual.cxx:263
 TQpResidual.cxx:264
 TQpResidual.cxx:265
 TQpResidual.cxx:266
 TQpResidual.cxx:267
 TQpResidual.cxx:268
 TQpResidual.cxx:269
 TQpResidual.cxx:270
 TQpResidual.cxx:271
 TQpResidual.cxx:272
 TQpResidual.cxx:273
 TQpResidual.cxx:274
 TQpResidual.cxx:275
 TQpResidual.cxx:276
 TQpResidual.cxx:277
 TQpResidual.cxx:278
 TQpResidual.cxx:279
 TQpResidual.cxx:280
 TQpResidual.cxx:281
 TQpResidual.cxx:282
 TQpResidual.cxx:283
 TQpResidual.cxx:284
 TQpResidual.cxx:285
 TQpResidual.cxx:286
 TQpResidual.cxx:287
 TQpResidual.cxx:288
 TQpResidual.cxx:289
 TQpResidual.cxx:290
 TQpResidual.cxx:291
 TQpResidual.cxx:292
 TQpResidual.cxx:293
 TQpResidual.cxx:294
 TQpResidual.cxx:295
 TQpResidual.cxx:296
 TQpResidual.cxx:297
 TQpResidual.cxx:298
 TQpResidual.cxx:299
 TQpResidual.cxx:300
 TQpResidual.cxx:301
 TQpResidual.cxx:302
 TQpResidual.cxx:303
 TQpResidual.cxx:304
 TQpResidual.cxx:305
 TQpResidual.cxx:306
 TQpResidual.cxx:307
 TQpResidual.cxx:308
 TQpResidual.cxx:309
 TQpResidual.cxx:310
 TQpResidual.cxx:311
 TQpResidual.cxx:312
 TQpResidual.cxx:313
 TQpResidual.cxx:314
 TQpResidual.cxx:315
 TQpResidual.cxx:316
 TQpResidual.cxx:317
 TQpResidual.cxx:318
 TQpResidual.cxx:319
 TQpResidual.cxx:320
 TQpResidual.cxx:321
 TQpResidual.cxx:322
 TQpResidual.cxx:323
 TQpResidual.cxx:324
 TQpResidual.cxx:325
 TQpResidual.cxx:326
 TQpResidual.cxx:327
 TQpResidual.cxx:328
 TQpResidual.cxx:329
 TQpResidual.cxx:330
 TQpResidual.cxx:331
 TQpResidual.cxx:332
 TQpResidual.cxx:333
 TQpResidual.cxx:334
 TQpResidual.cxx:335
 TQpResidual.cxx:336
 TQpResidual.cxx:337
 TQpResidual.cxx:338
 TQpResidual.cxx:339
 TQpResidual.cxx:340
 TQpResidual.cxx:341
 TQpResidual.cxx:342
 TQpResidual.cxx:343
 TQpResidual.cxx:344
 TQpResidual.cxx:345
 TQpResidual.cxx:346
 TQpResidual.cxx:347
 TQpResidual.cxx:348
 TQpResidual.cxx:349
 TQpResidual.cxx:350
 TQpResidual.cxx:351
 TQpResidual.cxx:352
 TQpResidual.cxx:353
 TQpResidual.cxx:354
 TQpResidual.cxx:355
 TQpResidual.cxx:356
 TQpResidual.cxx:357
 TQpResidual.cxx:358
 TQpResidual.cxx:359
 TQpResidual.cxx:360
 TQpResidual.cxx:361
 TQpResidual.cxx:362
 TQpResidual.cxx:363
 TQpResidual.cxx:364
 TQpResidual.cxx:365
 TQpResidual.cxx:366
 TQpResidual.cxx:367
 TQpResidual.cxx:368
 TQpResidual.cxx:369
 TQpResidual.cxx:370
 TQpResidual.cxx:371
 TQpResidual.cxx:372
 TQpResidual.cxx:373
 TQpResidual.cxx:374
 TQpResidual.cxx:375
 TQpResidual.cxx:376
 TQpResidual.cxx:377
 TQpResidual.cxx:378
 TQpResidual.cxx:379
 TQpResidual.cxx:380
 TQpResidual.cxx:381
 TQpResidual.cxx:382
 TQpResidual.cxx:383
 TQpResidual.cxx:384
 TQpResidual.cxx:385
 TQpResidual.cxx:386
 TQpResidual.cxx:387
 TQpResidual.cxx:388
 TQpResidual.cxx:389
 TQpResidual.cxx:390
 TQpResidual.cxx:391
 TQpResidual.cxx:392
 TQpResidual.cxx:393
 TQpResidual.cxx:394
 TQpResidual.cxx:395
 TQpResidual.cxx:396
 TQpResidual.cxx:397
 TQpResidual.cxx:398
 TQpResidual.cxx:399
 TQpResidual.cxx:400
 TQpResidual.cxx:401
 TQpResidual.cxx:402
 TQpResidual.cxx:403
 TQpResidual.cxx:404
 TQpResidual.cxx:405
 TQpResidual.cxx:406
 TQpResidual.cxx:407
 TQpResidual.cxx:408
 TQpResidual.cxx:409
 TQpResidual.cxx:410
 TQpResidual.cxx:411
 TQpResidual.cxx:412
 TQpResidual.cxx:413
 TQpResidual.cxx:414
 TQpResidual.cxx:415
 TQpResidual.cxx:416
 TQpResidual.cxx:417