ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2009, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/
 
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TCanvas.h>
#include <TGButton.h>
#include <TGButtonGroup.h>
#include <TFile.h>
#include <TGLabel.h>
#include <TGNumberEntry.h>
#include <TG3DLine.h>
#include <TApplication.h>
#include <TGComboBox.h>
#include <TLatex.h>
#include <TTree.h>
#include <TEveUtil.h>

#include <AliCDBManager.h>
#include <AliESDEvent.h>
#include <AliESDfriendTrack.h>
#include <AliGeomManager.h>
#include <AliEveEventManager.h>

/* Not sure which ConfigCalibTrain.C macro ? 
 * From ANALYSIS or from PWGPP?
 */
#include <ANALYSIS/macros/ConfigCalibTrain.C>
#endif

class ButtonWindow : public TGMainFrame {

protected:
   TGComboBox *option1;
   TGComboBox *option2;
   TGComboBox *option3;
   TGComboBox *option4;
   TGComboBox *option5;
   TGComboBox *option6;
   TGComboBox *option7;
   TGComboBox *option8;
   TGComboBox *option9;
   TGComboBox *option10;
   TGTextEntry *cut1;
   TGTextEntry *cut2;
   TGTextEntry *cut3;
   TGTextEntry *cut4;
   TGTextEntry *customCutSelection;
   TGTextEntry *customDrawSelection;
   TGNumberEntry *nEntries;
   TGNumberEntry *firstEntry;

public:
   ButtonWindow();
   void DrawResiduals();
   
   ClassDef(ButtonWindow, 0)
};

//________________________________________________

ButtonWindow::ButtonWindow() : TGMainFrame(gClient->GetRoot(), 10, 10, kHorizontalFrame)
{
   // Main test window.

   SetCleanup(kDeepCleanup);

   // Controls on right
   TGVerticalFrame *controls = new TGVerticalFrame(this);
   AddFrame(controls, new TGLayoutHints(kLHintsRight | kLHintsExpandY, 5, 5, 5, 5));

   // control margins of the text

   TGLabel *label1 = 0;
   TGLabel *label2 = 0;
   TGLabel *label3 = 0;
  
   TGHorizontal3DLine *separator = 0;

   TGGroupFrame *margins = new TGGroupFrame(controls, "Residuals Drawing Options");
   margins->SetTitlePos(TGGroupFrame::kCenter);

//==========================

   separator = new TGHorizontal3DLine(margins);

   margins->AddFrame(separator, new TGLayoutHints(kLHintsExpandX));

   label1 = new TGLabel(margins, "Axes");

   margins->AddFrame(label1, new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 4));

   TGHorizontalFrame *hframe1 = new TGHorizontalFrame(margins, 400, 20, kFixedWidth);
   
   label1 = new TGLabel(hframe1, "X axis: ");

   option1 = new TGComboBox(hframe1,"Draw option");
   option1->AddEntry("fX",1);
   option1->AddEntry("fY",2);
   option1->AddEntry("fZ",3);
   option1->AddEntry("fR",4);
   option1->Resize(120,20);

   label3 = new TGLabel(hframe1, "Y axis: ");

   option2 = new TGComboBox(hframe1,"Draw option");
   option2->AddEntry("fPx",1);
   option2->AddEntry("fPy",2);
   option2->AddEntry("fPz",3);
   option2->AddEntry("fPt",4);
   option2->AddEntry("fP",5);
   option2->Resize(120,20);

   hframe1->AddFrame(label1, new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 4));
   hframe1->AddFrame(option1, new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 4));
   hframe1->AddFrame(label3, new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 4));
   hframe1->AddFrame(option2, new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 4));

   margins->AddFrame(hframe1, new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 4));

//==========================

   separator = new TGHorizontal3DLine(margins);

   margins->AddFrame(separator, new TGLayoutHints(kLHintsExpandX));

   label1 = new TGLabel(margins, "Cut Selection");

   margins->AddFrame(label1, new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 4));

//===============================

   TGHorizontalFrame *hframe3 = new TGHorizontalFrame(margins, 400, 20, kFixedWidth);
   
   label1 = new TGLabel(hframe3, " 1. ");

   option3 = new TGComboBox(hframe3,"Cut");
   option3->AddEntry("fPx",1);
   option3->AddEntry("fPy",2);
   option3->AddEntry("fPz",3);
   option3->AddEntry("fPt",4);
   option3->AddEntry("fP",5);
   option3->Resize(100,20);

   option4 = new TGComboBox(hframe3,"-");
   option4->AddEntry("(no cut)",0);
   option4->AddEntry("<",1);
   option4->AddEntry(">",2);
   option4->Resize(100,20);

   cut1 = new TGTextEntry(hframe3);

   hframe3->AddFrame(label1, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe3->AddFrame(option3, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe3->AddFrame(option4, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe3->AddFrame(cut1, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));

   margins->AddFrame(hframe3, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));

//=====================================

   TGHorizontalFrame *hframe4 = new TGHorizontalFrame(margins, 400, 20, kFixedWidth);
   
   label1 = new TGLabel(hframe4, "2. ");

   option5 = new TGComboBox(hframe4,"Cut");
   option5->AddEntry("fPx",1);
   option5->AddEntry("fPy",2);
   option5->AddEntry("fPz",3);
   option5->AddEntry("fPt",4);
   option5->AddEntry("fP",5);
   option5->Resize(100,20);

   option6 = new TGComboBox(hframe4,"-");
   option6->AddEntry("(no cut)",0);
   option6->AddEntry("<",1);
   option6->AddEntry(">",2);
   option6->Resize(100,20);

   cut2 = new TGTextEntry(hframe4);
//   cut2 = new TGNumberEntryField(hframe4, 40, 20, kFixedWidth);

   hframe4->AddFrame(label1, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe4->AddFrame(option5, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe4->AddFrame(option6, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe4->AddFrame(cut2, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));

   margins->AddFrame(hframe4, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));

   separator = new TGHorizontal3DLine(margins);

   margins->AddFrame(separator, new TGLayoutHints(kLHintsExpandX));

   label1 = new TGLabel(margins, "Custom Cut Selection");

   margins->AddFrame(label1, new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 4));

   customCutSelection = new TGTextEntry(margins);

   margins->AddFrame(customCutSelection, new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 4));

//========================================

   separator = new TGHorizontal3DLine(margins);

   margins->AddFrame(separator, new TGLayoutHints(kLHintsExpandX));

   label1 = new TGLabel(margins, "Draw Selection");

   margins->AddFrame(label1, new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 4));

//========================================

   TGHorizontalFrame *hframe5 = new TGHorizontalFrame(margins, 400, 20, kFixedWidth);
   
   label1 = new TGLabel(hframe5, "1. ");

   option7 = new TGComboBox(hframe5,"Cut");
   option7->AddEntry("fPx",1);
   option7->AddEntry("fPy",2);
   option7->AddEntry("fPz",3);
   option7->AddEntry("fPt",4);
   option7->AddEntry("fP",5);
   option7->Resize(100,20);

   option8 = new TGComboBox(hframe5,"-");
   option8->AddEntry("(no cut)",0);
   option8->AddEntry("<",1);
   option8->AddEntry(">",2);
   option8->Resize(100,20);

   cut3 = new TGTextEntry(hframe5);
//   cut3 = new TGNumberEntryField(hframe5, 40, 20, kFixedWidth);

   hframe5->AddFrame(label1, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe5->AddFrame(option7, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe5->AddFrame(option8, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe5->AddFrame(cut3, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));

   margins->AddFrame(hframe5, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));

//=======================================

   TGHorizontalFrame *hframe6 = new TGHorizontalFrame(margins, 400, 20, kFixedWidth);
   
   label1 = new TGLabel(hframe6, "2. ");

   option9 = new TGComboBox(hframe6,"Cut");
   option9->AddEntry("fPx",1);
   option9->AddEntry("fPy",2);
   option9->AddEntry("fPz",3);
   option9->AddEntry("fPt",4);
   option9->AddEntry("fP",5);
   option9->Resize(100,20);

   option10 = new TGComboBox(hframe6,"-");
   option10->AddEntry("(no cut)",0);
   option10->AddEntry("<",1);
   option10->AddEntry(">",2);
   option10->Resize(100,20);

   cut4 = new TGTextEntry(hframe6);
//   cut4 = new TGNumberEntryField(hframe6, 40, 20, kFixedWidth);

   hframe6->AddFrame(label1, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe6->AddFrame(option9, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe6->AddFrame(option10, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe6->AddFrame(cut4, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));

   margins->AddFrame(hframe6, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));

   separator = new TGHorizontal3DLine(margins);

   margins->AddFrame(separator, new TGLayoutHints(kLHintsExpandX));

   label1 = new TGLabel(margins, "Custom Draw Selection");

   margins->AddFrame(label1, new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 4));

   customDrawSelection = new TGTextEntry(margins);

   margins->AddFrame(customDrawSelection, new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 4));

//==========================

   separator = new TGHorizontal3DLine(margins);

   margins->AddFrame(separator, new TGLayoutHints(kLHintsExpandX));

   label1 = new TGLabel(margins, "Entries Selection");

   margins->AddFrame(label1, new TGLayoutHints(kLHintsExpandX, 5, 5, 3, 4));

//========================================

   TGHorizontalFrame *hframe7 = new TGHorizontalFrame(margins, 400, 20, kFixedWidth);
   
   label1 = new TGLabel(hframe7, "nEntries");

   nEntries = new TGNumberEntry(hframe7, 40, 20, kFixedWidth);

   label2 = new TGLabel(hframe7, "firstEntry");

   firstEntry = new TGNumberEntry(hframe7, 40, 20, kFixedWidth);

   hframe7->AddFrame(label1, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe7->AddFrame(nEntries, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe7->AddFrame(label2, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));
   hframe7->AddFrame(firstEntry, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));

   margins->AddFrame(hframe7, new TGLayoutHints(kLHintsExpandX, 5, 5, 1, 1));

//==========================

   separator = new TGHorizontal3DLine(margins);

   margins->AddFrame(separator, new TGLayoutHints(kLHintsExpandX));

   const TGFont *font = gClient->GetFont("-*-times-bold-r-*-*-16-*-*-*-*-*-*-*");
//   const TGFont *font = gClient->GetFont("-*-symbol-medium-r-normal-*-16-*-*-*-*-*-*-*");
   FontStruct_t buttonFont = font->GetFontStruct();
   ULong_t buttonRedColor;
   gClient->GetColorByName("red", buttonRedColor);
   TGTextButton *draw = new TGTextButton(margins,"Draw Residuals");
   draw->SetTextColor(buttonRedColor);
   draw->SetFont(buttonFont);
   draw->Connect("Clicked()", "ButtonWindow", this, "DrawResiduals()");
   margins->AddFrame(draw, new TGLayoutHints(kLHintsExpandX, 5, 5, 5, 5));

   controls->AddFrame(margins, new TGLayoutHints(kLHintsExpandX));

   MapSubwindows();
   Resize();

   SetWMSizeHints(GetDefaultWidth(), GetDefaultHeight(), 1000, 1000, 0 ,0);
   SetWindowName("Residuals");
   MapRaised();
}

//______________________________________________________________________________
void ButtonWindow::DrawResiduals()
{

      TString selection1, selection2, selection3, selection4, selection5, selection6, selection7, selection8, selection9, selection10;

      switch(option1->GetSelected())
      {
         case 1:
            selection1 = "fX";
            break;
         case 2:
            selection1 = "fY";
            break;
         case 3:
            selection1 = "fZ";
            break;
         default:
            selection1 = "fX";
            break;
      }
    
      switch(option2->GetSelected())
      {
         case 1:
            selection2 = "fPx";
            break;
         case 2:
            selection2 = "fPy";
            break;
         case 3:
            selection2 = "fPz";
            break;
         case 4:
            selection2 = "fPt";
            break;
         case 5:
            selection2 = "fP";
            break;
         default:
            selection2 = "fP";
            break;
      }

      switch(option3->GetSelected())
      {
         case 1:
            selection3 = "fPx";
            break;
         case 2:
            selection3 = "fPy";
            break;
         case 3:
            selection3 = "fPz";
            break;
         case 4:
            selection3 = "fPt";
            break;
         case 5:
            selection3 = "fP";
            break;
         default:
            selection3 = "fP";
            break;
      }

      switch(option4->GetSelected())
      {
         case 1:
            selection4 = "<";
            break;
         case 2:
            selection4 = ">";
            break;
         default:
            selection4 = "<";
            break;
      }

      switch(option5->GetSelected())
      {
         case 1:
            selection5 = "fPx";
            break;
         case 2:
            selection5 = "fPy";
            break;
         case 3:
            selection5 = "fPz";
            break;
         case 4:
            selection5 = "fPt";
            break;
         case 5:
            selection5 = "fP";
            break;
         default:
            selection5 = "fP";
            break;
      }

      switch(option6->GetSelected())
      {
         case 1:
            selection6 = "<";
            break;
         case 2:
            selection6 = ">";
            break;
         default:
            selection6 = "<";
            break;
      }

      switch(option7->GetSelected())
      {
         case 1:
            selection7 = "fPx";
            break;
         case 2:
            selection7 = "fPy";
            break;
         case 3:
            selection7 = "fPz";
            break;
         case 4:
            selection7 = "fPt";
            break;
         case 5:
            selection7 = "fP";
            break;
         default:
            selection7 = "fP";
            break;
      }

      switch(option8->GetSelected())
      {
         case 1:
            selection8 = "<";
            break;
         case 2:
            selection8 = ">";
            break;
         default:
            selection8 = "<";
            break;
      }

      switch(option9->GetSelected())
      {
         case 1:
            selection9 = "fPx";
            break;
         case 2:
            selection9 = "fPy";
            break;
         case 3:
            selection9 = "fPz";
            break;
         case 4:
            selection9 = "fPt";
            break;
         case 5:
            selection9 = "fP";
            break;
         default:
            selection3 = "fP";
            break;
      }

      switch(option10->GetSelected())
      {
         case 1:
            selection10 = "<";
            break;
         case 2:
            selection10 = ">";
            break;
         default:
            selection10 = "<";
            break;
      }

      TString cutSelectionMerged;// = ("abs(ESDfriend.fTracks[].fTPCOut."+selection3+"[4])"+selection4+cut1->GetText());
      TString drawSelectionMerged1 = ("track[]."+selection2+"[0]:track[]."+selection1);
      TString drawSelectionMerged2;// = ("abs(track[]."+selection7+"[0])"+selection8+cut3->GetText());

      if(customCutSelection->GetText())
        cutSelectionMerged = customCutSelection->GetText();

      if(customDrawSelection->GetText())
        drawSelectionMerged2 = customDrawSelection->GetText();


      Info("make_residuals::DrawResiduals", "%s abs(ESDfriend.fTracks[].fTPCOut.fP[4])<0.5", cutSelectionMerged.Data());
      Info("make_residuals::DrawResiduals", "%s track[].fP[0]:track[].fX", drawSelectionMerged1.Data());
      Info("make_residuals::DrawResiduals", "%s abs(track[].fP[0])<20", drawSelectionMerged2.Data());
      Info("make_residuals::DrawResiduals", "nEntries: %f", nEntries->GetNumber());
      Info("make_residuals::DrawResiduals", "firstEntry: %f", firstEntry->GetNumber());
      
      TEveUtil::LoadMacro("$ALICE_ROOT/ANALYSIS/macros/ConfigCalibTrain.C+");

      AliESDEvent *esd = AliEveEventManager::AssertESD();

      ConfigCalibTrain(esd->GetRunNumber());

      /* OBSOLETE CODE - No function members defined
       * 
      AliESDfriendTrack::MakeDebugStreamer(kTRUE);

      TTreeSRedirector *pcstreamRes = AliESDfriendTrack::GetDebugStreamer();
      */
      
      TFile fRes("AliESDfriends.root");

      TTree *treeRes = (TTree*)fRes.Get("esdFriendTree");     

      TCanvas* cnv = new TCanvas();
      
      
      treeRes->Draw("ESDfriend.fTracks[].MakeResidualGraph(1)",cutSelectionMerged," ",nEntries->GetNumber(),firstEntry->GetNumber());
//      treeRes->Draw("ESDfriend.fTracks[].MakeResidualGraph(1)","abs(ESDfriend.fTracks[].fTPCOut.fP[4])<0.5"," ",nEntries,firstEntry);

      //delete pcstreamRes;

      /*  OBSOLETE CODE -dump not defined

      TFile fRes("residual.root");

      dump.Draw(drawSelectionMerged1,drawSelectionMerged2);
      */
//      dump.Draw("track[].fP[0]:track[].fX","abs(track[].fP[0])<20");

}

//_____________________________________________________________________________
void make_residuals()
{

      new ButtonWindow();

}
 make_residuals.C:1
 make_residuals.C:2
 make_residuals.C:3
 make_residuals.C:4
 make_residuals.C:5
 make_residuals.C:6
 make_residuals.C:7
 make_residuals.C:8
 make_residuals.C:9
 make_residuals.C:10
 make_residuals.C:11
 make_residuals.C:12
 make_residuals.C:13
 make_residuals.C:14
 make_residuals.C:15
 make_residuals.C:16
 make_residuals.C:17
 make_residuals.C:18
 make_residuals.C:19
 make_residuals.C:20
 make_residuals.C:21
 make_residuals.C:22
 make_residuals.C:23
 make_residuals.C:24
 make_residuals.C:25
 make_residuals.C:26
 make_residuals.C:27
 make_residuals.C:28
 make_residuals.C:29
 make_residuals.C:30
 make_residuals.C:31
 make_residuals.C:32
 make_residuals.C:33
 make_residuals.C:34
 make_residuals.C:35
 make_residuals.C:36
 make_residuals.C:37
 make_residuals.C:38
 make_residuals.C:39
 make_residuals.C:40
 make_residuals.C:41
 make_residuals.C:42
 make_residuals.C:43
 make_residuals.C:44
 make_residuals.C:45
 make_residuals.C:46
 make_residuals.C:47
 make_residuals.C:48
 make_residuals.C:49
 make_residuals.C:50
 make_residuals.C:51
 make_residuals.C:52
 make_residuals.C:53
 make_residuals.C:54
 make_residuals.C:55
 make_residuals.C:56
 make_residuals.C:57
 make_residuals.C:58
 make_residuals.C:59
 make_residuals.C:60
 make_residuals.C:61
 make_residuals.C:62
 make_residuals.C:63
 make_residuals.C:64
 make_residuals.C:65
 make_residuals.C:66
 make_residuals.C:67
 make_residuals.C:68
 make_residuals.C:69
 make_residuals.C:70
 make_residuals.C:71
 make_residuals.C:72
 make_residuals.C:73
 make_residuals.C:74
 make_residuals.C:75
 make_residuals.C:76
 make_residuals.C:77
 make_residuals.C:78
 make_residuals.C:79
 make_residuals.C:80
 make_residuals.C:81
 make_residuals.C:82
 make_residuals.C:83
 make_residuals.C:84
 make_residuals.C:85
 make_residuals.C:86
 make_residuals.C:87
 make_residuals.C:88
 make_residuals.C:89
 make_residuals.C:90
 make_residuals.C:91
 make_residuals.C:92
 make_residuals.C:93
 make_residuals.C:94
 make_residuals.C:95
 make_residuals.C:96
 make_residuals.C:97
 make_residuals.C:98
 make_residuals.C:99
 make_residuals.C:100
 make_residuals.C:101
 make_residuals.C:102
 make_residuals.C:103
 make_residuals.C:104
 make_residuals.C:105
 make_residuals.C:106
 make_residuals.C:107
 make_residuals.C:108
 make_residuals.C:109
 make_residuals.C:110
 make_residuals.C:111
 make_residuals.C:112
 make_residuals.C:113
 make_residuals.C:114
 make_residuals.C:115
 make_residuals.C:116
 make_residuals.C:117
 make_residuals.C:118
 make_residuals.C:119
 make_residuals.C:120
 make_residuals.C:121
 make_residuals.C:122
 make_residuals.C:123
 make_residuals.C:124
 make_residuals.C:125
 make_residuals.C:126
 make_residuals.C:127
 make_residuals.C:128
 make_residuals.C:129
 make_residuals.C:130
 make_residuals.C:131
 make_residuals.C:132
 make_residuals.C:133
 make_residuals.C:134
 make_residuals.C:135
 make_residuals.C:136
 make_residuals.C:137
 make_residuals.C:138
 make_residuals.C:139
 make_residuals.C:140
 make_residuals.C:141
 make_residuals.C:142
 make_residuals.C:143
 make_residuals.C:144
 make_residuals.C:145
 make_residuals.C:146
 make_residuals.C:147
 make_residuals.C:148
 make_residuals.C:149
 make_residuals.C:150
 make_residuals.C:151
 make_residuals.C:152
 make_residuals.C:153
 make_residuals.C:154
 make_residuals.C:155
 make_residuals.C:156
 make_residuals.C:157
 make_residuals.C:158
 make_residuals.C:159
 make_residuals.C:160
 make_residuals.C:161
 make_residuals.C:162
 make_residuals.C:163
 make_residuals.C:164
 make_residuals.C:165
 make_residuals.C:166
 make_residuals.C:167
 make_residuals.C:168
 make_residuals.C:169
 make_residuals.C:170
 make_residuals.C:171
 make_residuals.C:172
 make_residuals.C:173
 make_residuals.C:174
 make_residuals.C:175
 make_residuals.C:176
 make_residuals.C:177
 make_residuals.C:178
 make_residuals.C:179
 make_residuals.C:180
 make_residuals.C:181
 make_residuals.C:182
 make_residuals.C:183
 make_residuals.C:184
 make_residuals.C:185
 make_residuals.C:186
 make_residuals.C:187
 make_residuals.C:188
 make_residuals.C:189
 make_residuals.C:190
 make_residuals.C:191
 make_residuals.C:192
 make_residuals.C:193
 make_residuals.C:194
 make_residuals.C:195
 make_residuals.C:196
 make_residuals.C:197
 make_residuals.C:198
 make_residuals.C:199
 make_residuals.C:200
 make_residuals.C:201
 make_residuals.C:202
 make_residuals.C:203
 make_residuals.C:204
 make_residuals.C:205
 make_residuals.C:206
 make_residuals.C:207
 make_residuals.C:208
 make_residuals.C:209
 make_residuals.C:210
 make_residuals.C:211
 make_residuals.C:212
 make_residuals.C:213
 make_residuals.C:214
 make_residuals.C:215
 make_residuals.C:216
 make_residuals.C:217
 make_residuals.C:218
 make_residuals.C:219
 make_residuals.C:220
 make_residuals.C:221
 make_residuals.C:222
 make_residuals.C:223
 make_residuals.C:224
 make_residuals.C:225
 make_residuals.C:226
 make_residuals.C:227
 make_residuals.C:228
 make_residuals.C:229
 make_residuals.C:230
 make_residuals.C:231
 make_residuals.C:232
 make_residuals.C:233
 make_residuals.C:234
 make_residuals.C:235
 make_residuals.C:236
 make_residuals.C:237
 make_residuals.C:238
 make_residuals.C:239
 make_residuals.C:240
 make_residuals.C:241
 make_residuals.C:242
 make_residuals.C:243
 make_residuals.C:244
 make_residuals.C:245
 make_residuals.C:246
 make_residuals.C:247
 make_residuals.C:248
 make_residuals.C:249
 make_residuals.C:250
 make_residuals.C:251
 make_residuals.C:252
 make_residuals.C:253
 make_residuals.C:254
 make_residuals.C:255
 make_residuals.C:256
 make_residuals.C:257
 make_residuals.C:258
 make_residuals.C:259
 make_residuals.C:260
 make_residuals.C:261
 make_residuals.C:262
 make_residuals.C:263
 make_residuals.C:264
 make_residuals.C:265
 make_residuals.C:266
 make_residuals.C:267
 make_residuals.C:268
 make_residuals.C:269
 make_residuals.C:270
 make_residuals.C:271
 make_residuals.C:272
 make_residuals.C:273
 make_residuals.C:274
 make_residuals.C:275
 make_residuals.C:276
 make_residuals.C:277
 make_residuals.C:278
 make_residuals.C:279
 make_residuals.C:280
 make_residuals.C:281
 make_residuals.C:282
 make_residuals.C:283
 make_residuals.C:284
 make_residuals.C:285
 make_residuals.C:286
 make_residuals.C:287
 make_residuals.C:288
 make_residuals.C:289
 make_residuals.C:290
 make_residuals.C:291
 make_residuals.C:292
 make_residuals.C:293
 make_residuals.C:294
 make_residuals.C:295
 make_residuals.C:296
 make_residuals.C:297
 make_residuals.C:298
 make_residuals.C:299
 make_residuals.C:300
 make_residuals.C:301
 make_residuals.C:302
 make_residuals.C:303
 make_residuals.C:304
 make_residuals.C:305
 make_residuals.C:306
 make_residuals.C:307
 make_residuals.C:308
 make_residuals.C:309
 make_residuals.C:310
 make_residuals.C:311
 make_residuals.C:312
 make_residuals.C:313
 make_residuals.C:314
 make_residuals.C:315
 make_residuals.C:316
 make_residuals.C:317
 make_residuals.C:318
 make_residuals.C:319
 make_residuals.C:320
 make_residuals.C:321
 make_residuals.C:322
 make_residuals.C:323
 make_residuals.C:324
 make_residuals.C:325
 make_residuals.C:326
 make_residuals.C:327
 make_residuals.C:328
 make_residuals.C:329
 make_residuals.C:330
 make_residuals.C:331
 make_residuals.C:332
 make_residuals.C:333
 make_residuals.C:334
 make_residuals.C:335
 make_residuals.C:336
 make_residuals.C:337
 make_residuals.C:338
 make_residuals.C:339
 make_residuals.C:340
 make_residuals.C:341
 make_residuals.C:342
 make_residuals.C:343
 make_residuals.C:344
 make_residuals.C:345
 make_residuals.C:346
 make_residuals.C:347
 make_residuals.C:348
 make_residuals.C:349
 make_residuals.C:350
 make_residuals.C:351
 make_residuals.C:352
 make_residuals.C:353
 make_residuals.C:354
 make_residuals.C:355
 make_residuals.C:356
 make_residuals.C:357
 make_residuals.C:358
 make_residuals.C:359
 make_residuals.C:360
 make_residuals.C:361
 make_residuals.C:362
 make_residuals.C:363
 make_residuals.C:364
 make_residuals.C:365
 make_residuals.C:366
 make_residuals.C:367
 make_residuals.C:368
 make_residuals.C:369
 make_residuals.C:370
 make_residuals.C:371
 make_residuals.C:372
 make_residuals.C:373
 make_residuals.C:374
 make_residuals.C:375
 make_residuals.C:376
 make_residuals.C:377
 make_residuals.C:378
 make_residuals.C:379
 make_residuals.C:380
 make_residuals.C:381
 make_residuals.C:382
 make_residuals.C:383
 make_residuals.C:384
 make_residuals.C:385
 make_residuals.C:386
 make_residuals.C:387
 make_residuals.C:388
 make_residuals.C:389
 make_residuals.C:390
 make_residuals.C:391
 make_residuals.C:392
 make_residuals.C:393
 make_residuals.C:394
 make_residuals.C:395
 make_residuals.C:396
 make_residuals.C:397
 make_residuals.C:398
 make_residuals.C:399
 make_residuals.C:400
 make_residuals.C:401
 make_residuals.C:402
 make_residuals.C:403
 make_residuals.C:404
 make_residuals.C:405
 make_residuals.C:406
 make_residuals.C:407
 make_residuals.C:408
 make_residuals.C:409
 make_residuals.C:410
 make_residuals.C:411
 make_residuals.C:412
 make_residuals.C:413
 make_residuals.C:414
 make_residuals.C:415
 make_residuals.C:416
 make_residuals.C:417
 make_residuals.C:418
 make_residuals.C:419
 make_residuals.C:420
 make_residuals.C:421
 make_residuals.C:422
 make_residuals.C:423
 make_residuals.C:424
 make_residuals.C:425
 make_residuals.C:426
 make_residuals.C:427
 make_residuals.C:428
 make_residuals.C:429
 make_residuals.C:430
 make_residuals.C:431
 make_residuals.C:432
 make_residuals.C:433
 make_residuals.C:434
 make_residuals.C:435
 make_residuals.C:436
 make_residuals.C:437
 make_residuals.C:438
 make_residuals.C:439
 make_residuals.C:440
 make_residuals.C:441
 make_residuals.C:442
 make_residuals.C:443
 make_residuals.C:444
 make_residuals.C:445
 make_residuals.C:446
 make_residuals.C:447
 make_residuals.C:448
 make_residuals.C:449
 make_residuals.C:450
 make_residuals.C:451
 make_residuals.C:452
 make_residuals.C:453
 make_residuals.C:454
 make_residuals.C:455
 make_residuals.C:456
 make_residuals.C:457
 make_residuals.C:458
 make_residuals.C:459
 make_residuals.C:460
 make_residuals.C:461
 make_residuals.C:462
 make_residuals.C:463
 make_residuals.C:464
 make_residuals.C:465
 make_residuals.C:466
 make_residuals.C:467
 make_residuals.C:468
 make_residuals.C:469
 make_residuals.C:470
 make_residuals.C:471
 make_residuals.C:472
 make_residuals.C:473
 make_residuals.C:474
 make_residuals.C:475
 make_residuals.C:476
 make_residuals.C:477
 make_residuals.C:478
 make_residuals.C:479
 make_residuals.C:480
 make_residuals.C:481
 make_residuals.C:482
 make_residuals.C:483
 make_residuals.C:484
 make_residuals.C:485
 make_residuals.C:486
 make_residuals.C:487
 make_residuals.C:488
 make_residuals.C:489
 make_residuals.C:490
 make_residuals.C:491
 make_residuals.C:492
 make_residuals.C:493
 make_residuals.C:494
 make_residuals.C:495
 make_residuals.C:496
 make_residuals.C:497
 make_residuals.C:498
 make_residuals.C:499
 make_residuals.C:500
 make_residuals.C:501
 make_residuals.C:502
 make_residuals.C:503
 make_residuals.C:504
 make_residuals.C:505
 make_residuals.C:506
 make_residuals.C:507
 make_residuals.C:508
 make_residuals.C:509
 make_residuals.C:510
 make_residuals.C:511
 make_residuals.C:512
 make_residuals.C:513
 make_residuals.C:514
 make_residuals.C:515
 make_residuals.C:516
 make_residuals.C:517
 make_residuals.C:518
 make_residuals.C:519
 make_residuals.C:520
 make_residuals.C:521
 make_residuals.C:522
 make_residuals.C:523
 make_residuals.C:524
 make_residuals.C:525
 make_residuals.C:526
 make_residuals.C:527
 make_residuals.C:528
 make_residuals.C:529
 make_residuals.C:530
 make_residuals.C:531
 make_residuals.C:532
 make_residuals.C:533
 make_residuals.C:534
 make_residuals.C:535
 make_residuals.C:536
 make_residuals.C:537
 make_residuals.C:538
 make_residuals.C:539
 make_residuals.C:540
 make_residuals.C:541
 make_residuals.C:542
 make_residuals.C:543
 make_residuals.C:544
 make_residuals.C:545
 make_residuals.C:546
 make_residuals.C:547
 make_residuals.C:548
 make_residuals.C:549
 make_residuals.C:550
 make_residuals.C:551
 make_residuals.C:552
 make_residuals.C:553
 make_residuals.C:554
 make_residuals.C:555
 make_residuals.C:556
 make_residuals.C:557
 make_residuals.C:558
 make_residuals.C:559
 make_residuals.C:560
 make_residuals.C:561
 make_residuals.C:562
 make_residuals.C:563
 make_residuals.C:564
 make_residuals.C:565
 make_residuals.C:566
 make_residuals.C:567
 make_residuals.C:568
 make_residuals.C:569
 make_residuals.C:570
 make_residuals.C:571
 make_residuals.C:572
 make_residuals.C:573
 make_residuals.C:574
 make_residuals.C:575
 make_residuals.C:576
 make_residuals.C:577
 make_residuals.C:578
 make_residuals.C:579
 make_residuals.C:580
 make_residuals.C:581
 make_residuals.C:582
 make_residuals.C:583
 make_residuals.C:584
 make_residuals.C:585