ROOT logo
#ifndef __CINT__
#include <iostream>
#include <TH1.h>
#include <TH2.h>
#include <TF1.h>
#include <TList.h>
#include <TDirectory.h>
#include <TFile.h>
#include <TCanvas.h>
#include <TPad.h>
#include <THistPainter.h>
#include <TObject.h>
#include <TMath.h>
#include <TFile.h>
#include <TGraphErrors.h>
#include <TLatex.h>
#include <TLine.h>
#include <TMarker.h>
#include <TStyle.h>
#include <TVirtualFitter.h>
//#include <AliUnfolding.h>
//#include <AliUnfolding.cxx>
//#include <AliPWG0Helper.h>
//#include <AliMultiplicityCorrection.h>
#include <TMinuit.h>
#include <TBox.h>
#include <TGaxis.h>
#include "TRandom.h"
#include "/home/caz/ALICE/AliRoot/PWGLF/FORWARD/analysis2/AliForwardMultiplicityDistribution.h"
#include "/home/caz/ALICE/AliRoot/PWGLF/FORWARD/analysis2/AliForwardMultiplicityDistribution.cxx"
#include <TROOT.h>
#include <TSystem.h>
#include "TH1D.h"
#include "/home/caz/Desktop/RooUnfold-1.0.3/src/RooUnfoldResponse.h"
#include "/home/caz/Desktop/RooUnfold-1.0.3/src/RooUnfoldBayes.h"
#include "unfoldChi2Method.C"
//#include "RooUnfoldSvd.h"
//#include "RooUnfoldBinByBin.h"
#else
class RooUnfoldResponse;
class RooUnfoldBayes;
class RooUnfold;
class TF1;
class TFile;
class TH1D;
class TH1;
class TH1F;
class TH2D;
class TGraphErrors;
class TGaxis;
class AliUnfolding;
#endif
using namespace std;
enum Method {  kBayes, kSvd };
enum { kBla = 0, 
       kPol0, 
       kPol1, 
       kLog, 
       kEntropy, 
       kCurvature, 
       kRatio };

void    createOneUnfold(TList* list, TFile* dataFile, TFile* out, Double_t l, Double_t h, Method method);
TList*  getList(TFile* f, const Char_t* parent, const Char_t* name);
const char* getPostfix(const TH1* h);
void    unfoldBayesSet(const TObjArray& a, TDirectory* dir, TH2D* response, TH1D* triggerBias);
void    unfoldChi2minSet(const TObjArray& a, TDirectory* dir, TH2D* response, TH1D* triggerBias, Int_t limit);
void    normaliseAndCorrect(TH1D* unfolded, TH1D* triggerBias);
void    normaliseAndCorrect(TH1D* unfolded, TH1D* triggerBias, Int_t limit);

TH1D*   unfoldBayes(TH1D* data, RooUnfoldResponse* response);
TH1D*   unfoldChi2min(TH1F* data, TH2D* response, TH1F* eff, Int_t regFunc, Float_t regWeight);
TH1D*   getTriggerBiasHistogram(TList* responseList);
void    doTriggerBiasCorrection(TH1D*& hist, TH1D* triggerBias);

// --- Steering routine ----------------------------------------------
void unfoldBase(const Char_t* outputFile="unfoldOutput.root", Method method= kBayes,
		  const Char_t* responseFileName="$ALICE_ROOT/PWGLF/FORWARD/analysis2/responseMatrices.root", 
	  const Char_t* dataFileName="$ALICE_ROOT/PWGLF/FORWARD/analysis2/forward_multiplicity.root"){

  /*#ifdef __CINT__
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  
  gSystem->Load("libPWG0base");
  gSystem->Load("libPWG0dep");
  gSystem->Load("libPWG0selectors");
  
  gROOT->Macro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/scripts/LoadLibs.C");
  gROOT->LoadMacro("/home/caz/ppData/FirstAnalysis/multDists/Unfold.C");
#endif
  */
  TFile* responseFile = TFile::Open(responseFileName,"READ");
  if (!responseFile) { 
    Error("createUnfoldingFile", "Couldn't open %s", responseFileName);
    return;
  }
  TList* list = static_cast<TList*>(responseFile->Get("ResponseMatrices"));
  TFile* dataFile = TFile::Open(dataFileName,"READ");
  if (!dataFile) { 
    Error("createUnfoldingFile", "Couldn't open %s", dataFileName);
    return;
  }
  TFile* out = TFile::Open(outputFile, "RECREATE");
  cout << " Loaded responseFile and dataFile" << endl;

  
  Double_t limits[] = { 2.4, 1, 0. };
  // Double_t limits[] = {5.1, 3.4, 3.0, 2.4, 2.0, 1.5, 1.0, 0.5, 0. };
  Double_t* limit = limits;
  while ((*limit) > 0.1){
    if((*limit) >5)
      createOneUnfold(list, dataFile, out, -3.4,(*limit), method);
    else{
      createOneUnfold(list, dataFile, out, -(*limit),(*limit), method);
    }
    limit++; 
  }
  
  /*
  limit = limits;
  while ((*limit) > 0.1) { 
    createOneUnfold(list, dataFile, out, 0,(*limit),method);
    createOneUnfold(list, dataFile, out, -(*limit), 0, method);
    limit++; }
  
  
  for (Double_t l = -3; l < -0.5; l += 0.5){ 
    createOneUnfold(list, dataFile, out, l, l+0.5, method);  }
  for (Double_t l = 0.5; l < 5; l += 0.5){ 
    createOneUnfold(list, dataFile, out, l, l+0.5, method);  }
  for (Double_t l = -3; l < 5; l += 0.2){ 
    createOneUnfold(list, dataFile, out, l, l+0.2, method);  }
  */
    
  out->Close();
  responseFile->Close();
  dataFile->Close();
}


// --- Unfold data for one eta bin -----------------------------------
void createOneUnfold(TList* list, TFile* dataFile, TFile* out, Double_t l, Double_t h, Method method)
{
  const char* name= AliForwardMultiplicityDistribution::FormBinName(l, h);
  std::cout << "Name=" << name << std::endl;
  TDirectory* dir = out->mkdir(name);
  dir->cd();
  
  TList* multList = getList(dataFile, "CentralSums", name);
  if (!multList) return;
  
  //_____if unfolding MC response files____________________
  //TList* multList = getList(dataFile, "ResponseMatrices", name);
  //if (!multList) return;
  //cout << multList << endl;
    
  Int_t maxMult;
  TH1D* tmp= (TH1D*)multList->FindObject("mult");
  for(Int_t n=5; n<=tmp->GetNbinsX();n++){
    if(tmp->GetBinContent(n)<1e-9){
      maxMult= n;
      break;
    }
  }

  
  TObjArray a;
  a.Add(multList->FindObject("mult"));
  a.Add(multList->FindObject("multPlusSys"));
  a.Add(multList->FindObject("multMinusSys"));
  
  TList* responseList = 0;
  responseList = static_cast<TList*>(list->FindObject(name));
    
  TH2D* response= (TH2D*)responseList->FindObject("responseMatrix");
  response->SetDirectory(0);
  
  TH1D* triggerBias = getTriggerBiasHistogram(responseList);
  
  switch (method) { 
  case kBayes: 
    unfoldBayesSet(a, dir, response, triggerBias);
    break;
  case kSvd: 
     unfoldChi2minSet(a, dir, response, triggerBias, maxMult+30);
     break;
  }
  
  
  TIter next(&a);
  TH1D* data = 0;
  while ((data = static_cast<TH1D*>(next()))) {
    normaliseAndCorrect(data,triggerBias);
  }
  
  dir->Add(multList->FindObject("multMC"));
  
  dir->Add(&a);
  dir->Write();
  
  //delete list;
  //delete responseList;
  
  //delete triggerBias;
  delete multList;
  delete dir;
}

// --- Get a list from a file ----------------------------------------
TList*
getList(TFile* f, const Char_t* parent, const Char_t* name)
{
  TList* list = static_cast<TList*>(f->Get(parent));
  if (!list) { 
    Error("getList", "Couldn't find list %s in %s", parent, f->GetName());
    return 0;
  }
  if (!name) return list;
  TList* ret = static_cast<TList*>(list->FindObject(name));
  if (!ret) { 
    Error("getList", "Couldn't find %s in %s", name, parent);
    return 0;
  }
  
  return ret;
 
}

// --- Get end of input histogram name -------------------------------
const Char_t* 
getPostfix(const TH1* h)
{
  static TString t;
  t = h->GetName();
  t.ReplaceAll("mult", "");
  return t.Data();
}

// --- Unfold a single hist using Bayes ------------------------------
void
unfoldBayesSet(const TObjArray& a, TDirectory* dir, TH2D* response, TH1D* triggerBias)
{
  TH1* projY= (TH1D*) response->ProjectionY("projY",1,response->GetNbinsX(),"");
  TH1* projX= (TH1D*) response->ProjectionX("projX",1,response->GetNbinsY(),"");
  projX->SetDirectory(0);
  projY->SetDirectory(0);
  
  TH2D* responseTranspose = (TH2D*)response->Clone("response");
  for(Int_t i=1;i<=response->GetNbinsX();i++){
    for(Int_t j=1;j<=response->GetNbinsY();j++){
      responseTranspose->SetBinContent(j,i, response->GetBinContent(i,j));
      responseTranspose->SetBinError(j,i, response->GetBinError(i,j));
    }
  }
  RooUnfoldResponse* responseObject = new RooUnfoldResponse(projY, projX, responseTranspose,"test", "bla");

  Int_t dC = gStyle->GetNumberOfColors() / a.GetEntriesFast(); 
  Int_t iC = 0;
  TIter next(&a);
  TH1D* h = 0;
  while ((h = static_cast<TH1D*>(next()))) {
    TH1D* unfolded = unfoldBayes(h, responseObject);
    normaliseAndCorrect(unfolded,triggerBias);
    unfolded->SetDirectory(dir);
    unfolded->SetMarkerColor(gStyle->GetColorPalette(iC += dC));
    unfolded->SetMarkerStyle(20);
  }
  
  delete projY;
  delete projX;
  delete response;
  delete responseTranspose;
  delete responseObject;
}

// --- Unfold a single hist using Jan-Fietes SVD (Chi2) method --------------------------
void
unfoldChi2minSet(const TObjArray& a, TDirectory* dir, TH2D* response, TH1D* triggerBias, Int_t limit)
{

  TIter next(&a);
  TH1D* data = 0;
  while ((data = static_cast<TH1D*>(next()))) {
    Int_t max = (limit < 0 ? data->GetNbinsX() : limit);
    TH1F* dataTmp     = new TH1F(data->GetName(),data->GetTitle(), max,-0.5, max-.5);
    dataTmp->SetDirectory(0);
    for(Int_t k=1;k<= max; k++){
      dataTmp->SetBinContent(k,data->GetBinContent(k));
      dataTmp->SetBinError(k, data->GetBinError(k));
    }
    
    TH2D* responseTmp = response; 
    TH1F* eff         = new TH1F("eff","unfolded",max, -.5, max-.5);
    if (limit > 0) {
      responseTmp = new TH2D("res","res", max, -.5, max-.5,max, -.5, max-.5);
      for(Int_t k=1;k<= max; k++){
	eff->SetBinContent(k,1);
	if (limit > 0) {
	  for(Int_t j=1;j<=max; j++){
	    responseTmp->SetBinContent(k,j,response->GetBinContent(k,j));
	    responseTmp->SetBinError(k,j, response->GetBinError(k,j));
	  }
	}
      }    
    }
    Int_t nR = 8;
    Int_t dC = gStyle->GetNumberOfColors() / (nR * a.GetEntriesFast()); 
    Int_t iC = 0;
    for(Int_t f = 3; f <= 3; f++){
      iC = 0;
      for(Float_t w = 1e-5; w <= 1e5 ;w *= 10){
	TH1D* unfolded = unfoldChi2min(dataTmp,responseTmp, eff, f, w);
	normaliseAndCorrect(unfolded,triggerBias, limit);
	unfolded->SetDirectory(dir);
	unfolded->SetMarkerColor(gStyle->GetColorPalette(iC += dC));
	unfolded->SetMarkerStyle(20);
      }
    }
    if (limit > 0) delete responseTmp;
    delete dataTmp;
    delete eff;
  }
}

// --- Normalise to 1 and correct for trigger ------------------------
void normaliseAndCorrect(TH1D* unfolded, TH1D* triggerBias)
{
  if (triggerBias) doTriggerBiasCorrection(unfolded, triggerBias);
  unfolded->SetDirectory(0);
  unfolded->Sumw2();
  unfolded->Scale(1/unfolded->Integral());
}

void normaliseAndCorrect(TH1D* unfolded, TH1D* triggerBias, Int_t limit)
{
  if (triggerBias) doTriggerBiasCorrection(unfolded, triggerBias);
  unfolded->SetDirectory(0);
  unfolded->Sumw2();
  unfolded->Scale(1/unfolded->Integral(1,limit));
}

// --- Use RooUnfold stuff -------------------------------------------
TH1D* unfoldBayes(TH1D* data, RooUnfoldResponse* response)
{
  
  
  RooUnfold* unfold = new RooUnfoldBayes(response, data, 20);
  TH1D* unfolded= (TH1D*) unfold->Hreco();
  
  TString t = TString::Format("unfolded_bayes_%s",getPostfix(data));
  
  unfolded->SetName(t.Data());
  delete unfold;

  return unfolded;
}

// --- Use Jan-Fiete routines ----------------------------------------
TH1D* unfoldChi2min(TH1F* data, TH2D* response, TH1F* eff, 
		    Int_t regFunc, Float_t regWeight)
{  
  TH1F* tmp = static_cast<TH1F*>(data->Clone("tmp"));
  tmp->Reset();
  UnfoldChi2Min(data, tmp, response, eff, regFunc, regWeight);  
  
  Int_t max = data->GetNbinsX();
  TH1D* unfolded= new TH1D("unfolded","unfolded", max, -.5, max);  
  for(Int_t n=1;n<=max; n++){
    unfolded->SetBinContent(n,tmp->GetBinContent(n));
    unfolded->SetBinError(n, tmp->GetBinError(n));
  }

  TString regString="0";
  switch (regFunc) { 
  case 1: regString="pol0";      break;
  case 2: regString="pol1";      break;
  case 3: regString="log";       break;
  case 4: regString="entropy";   break;
  case 5: regString="curvature"; break;
  default:
    Error("unfold", "Invalid regFunc type");
    return 0;
  }
  delete tmp; 

  Info("", "data name: %s, postfix: %s", data->GetName(), getPostfix(data));
  TString n = TString::Format("unfolded_chi2_%s_%s_%1.0e", getPostfix(data),regString.Data(),regWeight);
  n.ReplaceAll("-0", "m");
  n.ReplaceAll("+0", "p");
  //n.ReplaceAll(".", "d");
  unfolded->SetName(n);
  return unfolded;
}


// --- Find trigger bias histogram -----------------------------------
TH1D* getTriggerBiasHistogram(TList* responseList){
  TH1D* hMCNSD;
  TH1D* hMCESDNSD;
  TH1D* hESDNSD;
 
  hMCNSD = (TH1D*)responseList->FindObject("fMCNSD");
  hMCESDNSD = (TH1D*)responseList->FindObject("fMCESDNSD");
  hESDNSD = (TH1D*)responseList->FindObject("fESDNSD");
    
  hMCNSD->Sumw2();
  hESDNSD->Sumw2();
  hMCESDNSD->Sumw2();
  
  TH1D* corr     = new TH1D("corr", "corr", 50,-0.5,49.5);
  for(Int_t n=1;n<corr->GetNbinsX();n++){
    Double_t errorSquared=0;
    errorSquared= (1/hESDNSD->GetBinContent(n)+   1/hMCNSD->GetBinContent(n));   
    corr->SetBinContent(n, hESDNSD->GetBinContent(n)/hMCNSD->GetBinContent(n));
    corr->SetBinError(n,corr->GetBinContent(n)*TMath::Sqrt(errorSquared));
  }
  
  hMCESDNSD->Divide(hMCNSD);
  hESDNSD->Divide(hMCNSD);
   
  
  delete hMCNSD;
  delete hMCESDNSD;
  
  return corr;
    
}

// --- Apply trigger bias histogram ----------------------------------
void doTriggerBiasCorrection(TH1D*& hist, TH1D* triggerBias){
  for(Int_t i = 1; i<=35;i++){
    if(triggerBias->GetBinContent(i)>1e-5&&hist->GetBinContent(i)>0){
      hist->SetBinContent(i, hist->GetBinContent(i)/triggerBias->GetBinContent(i));
      hist->SetBinError(i,TMath::Sqrt(TMath::Power(hist->GetBinError(i)/hist->GetBinContent(i),2)+TMath::Power(triggerBias->GetBinError(i)/triggerBias->GetBinContent(i),2))*hist->GetBinContent(i));
      //cout << hist->GetBinContent(i) << " +-  " << hist->GetBinError(i) << endl; 
    }
    //if(triggerBias->GetBinContent(i)<1e-5)
    //  hist->SetBinContent(i, hist->GetBinContent(i)/triggerBias->GetBinContent(i+1));
    
  }
}

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