ROOT logo
//============================================================================//
// Macro makeWeights.C is used to make phi, pt and eta weights. Before using  //
// this macro you should already have available output file "AnalysisResults" //
// with results from various flow analysis methods. When calling this macro   //
// you must specify the analysis type and flow analysis method whose output   //
// file will be used to make the weights for the subsequent runs. See bellow  //
// for available options for analysis type and flow analysis method. Remark:  //
// for cumulants, GFC and QC, you must also specify the cumulant order.       //
//============================================================================//

//========================= phi-weights ===================================//
// Phi-weights are obtained by inverting the azimuthal acceptance profile. //
// This procedure fails if there is a phi bin with no entries. In order to //
// avoid this one can attempt to rebin original histogram and make binning //
// in phi coarser:                                                         //
Bool_t rebinOriginalPhiHistogram = kTRUE;
Int_t nMerge = 4; // indicates how many original bins will be merged into one new bin 

//========================= pt-weights =========================
// You can make pt-weights in three different ways:
// 1.) pt-weights are growing linearly as a function of pt for 
//     pt <= ptCutoff. For pt > ptCutoff the pt-weights are 
//     constant and equal to ptMax. To enable this option set
//     useLinearPtWeights = kTRUE;
// 2.) pt-weights are growing quadratically as a function of pt
//     for pt <= ptCutoff. For pt > ptCutoff the pt-weights are 
//     constant and equal to ptMax. To enable this option set
//     useQadraticPtWeights = kTRUE;
// 3.) pt-weights are simply v(pt) from the specified method's 
//     result for differential flow vs pt. To enable this option 
//     set useLinearPtWeights = kFALSE and useQadraticPtWeights = kFALSE.
Double_t ptCutoff = 2; // in GeV
Double_t ptWeightsMax = 0.2; 
Bool_t useLinearPtWeights = kTRUE;
Bool_t useQuadraticPtWeights = kFALSE;
//========================= eta-weights ========================
// Eta-weights are simply v(eta) from the specified method's
// result for differential flow vs eta.
//==============================================================

// Name of the common output file:
TString outputFileName = "AnalysisResults.root";
//TString outputFileName = "outputCentrality0.root";

enum libModes {mLocal,mLocalSource};

//void makeWeights(TString type="", TString method="GFC", TString cumulantOrder="4th", Int_t mode=mLocalSource)
void makeWeights(TString type="ESD", TString method="SP", TString cumulantOrder="", Int_t mode=mLocal)
{ 
 // 1. type: "ESD", "AOD", "ESDMCkineESD", "ESDMCkineMC", for Monte Carlo and 'on the fly' use simply "", ;
 // 2. method: MCEP, LYZ1, LYZ2, LYZEP, SP, FQD, GFC or QC; 
 // 3. cumulantOrder: 2nd, 4th, 6th or 8th;             
 // 4. mode: if mode = mLocal -> analyze data on your computer using aliroot
 //          if mode = mLocalSource -> analyze data on your computer using root + source files 
 
 // Cross-check if the user's settings make sense:
 CrossCheckSettings();
 
 // Load needed libraries:
 LoadLibrariesMW(mode);

 // Access the common output file:
 TFile *outputFile = NULL;
 if(!(gSystem->AccessPathName(Form("%s%s%s",gSystem->pwd(),"/",outputFileName.Data()),kFileExists)))
 {
  outputFile = TFile::Open(outputFileName.Data(),"READ");
 } else
   {
    cout<<endl;
    cout<<"WARNING: Couldn't find the file "<<outputFileName.Data()<<" in "<<endl;
    cout<<"         directory "<<gSystem->pwd()<<" !!!!"<<endl;
    cout<<endl;
    exit(0);
   }
 
 // Access the output file of the specified method in the common output file:
 TString methodFileName = "output";
 ((methodFileName.Append(method.Data())).Append("analysis")).Append(type.Data()))); 
 TDirectoryFile *methodFile = (TDirectoryFile*)outputFile->FindObjectAny(methodFileName.Data());
 TList *methodList = NULL;
 if(methodFile)
 {
  TList* listTemp = methodFile->GetListOfKeys();
  if(listTemp && listTemp->GetEntries() == 1)
  {
   TString listName = listTemp->At(0)->GetName(); // to be improved - implemented better (use dynamic_cast instead)
   methodFile->GetObject(listName.Data(),methodList);
  } else
     {
      cout<<" WARNING: Accessing TList from TDirectoryFile failed for method "<<method.Data()<<" !!!!"<<endl;
      cout<<"          Did you actually used "<<method.Data()<<" in the analysis?"<<endl;
      cout<<endl;
     }
 } else 
   {
    cout<<" WARNING: Couldn't find a TDirectoryFile "<<methodFileName.Data()<<".root !!!!"<<endl;
   }   
 
 if(!methodList){cout<<" WARNING: methodList is NULL !!!!"<<endl;exit(0);}
   
 // Accessing common control and results histograms from which phi, pt and eta weights will be made:
 AliFlowCommonHist *commonHist = NULL;
 AliFlowCommonHistResults *commonHistRes = NULL; 
 if(!(method=="GFC"||method=="QC"))
 {
  commonHist = dynamic_cast<AliFlowCommonHist*> methodList->FindObject(Form("AliFlowCommonHist%s",method.Data()));
  commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject(Form("AliFlowCommonHistResults%s",method.Data()));
 } else if(method=="GFC") // GFC has distinct common hist results for different cumulant orders (but control histos are the same for different orders)
   {
    commonHist = dynamic_cast<AliFlowCommonHist*> methodList->FindObject(Form("AliFlowCommonHist%s",method.Data()));
    commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject(Form("AliFlowCommonHistResults%sOrder%s",cumulantOrder.Data(),method.Data()));    
   } else // this is for sure QC - treated separately because it has distinct both common control and result histograms for different QC orders
     {
      commonHist = dynamic_cast<AliFlowCommonHist*> methodList->FindObject(Form("AliFlowCommonHist%sOrder%s",cumulantOrder.Data(),method.Data()));
      commonHistRes = dynamic_cast<AliFlowCommonHistResults*> methodList->FindObject(Form("AliFlowCommonHistResults%sOrder%s",cumulantOrder.Data(),method.Data()));
     }     
 if(!commonHist)
 {
  cout<<endl;
  cout<<"WARNING: commonHist is NULL !!!!"<<endl;
  cout<<endl;
  exit(0);
 }
 if(!commonHistRes)
 {
  cout<<endl;
  cout<<"WARNING: commonHistRes is NULL !!!!"<<endl;
  cout<<endl;
  exit(0);
 }

 // Making the output file "weights.root" in which list "weights" will be saved.
 // List "weights" will hold histograms phiWeights, ptWeights and etaWeights which
 // will hold the phi, pt and eta weights, respectively:
 TFile *weightsFile = new TFile("weights.root","RECREATE"); 
 TList *weightsList = new TList();
 gStyle->SetOptStat(0); // remove statistic box from all histograms

 // phi-weights:
 TH1F *phiWeights = (TH1F*)commonHist->GetHistPhiRP()->Clone("phi_weights"); // to be improved (transferred into TH1D eventually)
 phiWeights->SetTitle("#phi-weights: correcting for non-uniform acceptance");
 phiWeights->SetYTitle("w_{#phi}");
 phiWeights->SetXTitle("#phi"); 
 if(rebinOriginalPhiHistogram)
   {
     phiWeights->Rebin(nMerge);
   } 
 Int_t nBinsPhi = 0; // number of phi bins
 Int_t counterOfEmptyBinsPhi = 0; // number of empty phi bins
 Double_t nParticlesInBin = 0.; // number of particles in particular phi bin
 Double_t nParticlesPerBin = 0.; // average number of particles per phi bin
 Double_t nParticles = 0.; // number of particles in all phi bins 
 // calculate phi-weights:
 nBinsPhi = phiWeights->GetNbinsX();
 nParticles = phiWeights->Integral();
 if(nBinsPhi) nParticlesPerBin = nParticles/nBinsPhi; 
 for(Int_t b=1;b<=nBinsPhi;b++)
 {
  Double_t wPhi = 0.; // phi-weight for particular phi bin 
  nParticlesInBin = phiWeights->GetBinContent(b);
  if(nParticlesInBin) 
  {
   wPhi = nParticlesPerBin/nParticlesInBin;
  } else
    {
     counterOfEmptyBinsPhi++;
    }
  phiWeights->SetBinContent(b,wPhi);
  phiWeights->SetBinError(b,0.);
 }
 if(!counterOfEmptyBinsPhi)
 {
  weightsList->Add(phiWeights);
  cout<<"Phi weights created."<<endl;
 } else
   {
    cout<<"WARNING: Couldn't create phi weights because "<<counterOfEmptyBinsPhi<<" phi bins were empty !!!!"<<endl;
   }
 
// phi-weights for eta subevents:
if (method=="SP"){
  //subevent 0
  TH1F *phiWeightsSub0 = (TH1F*)commonHist->
    GetHistPhiSub0()->Clone("phi_weights_sub0"); 
  phiWeightsSub0->SetTitle("#phi-weights for subevent 0");
  phiWeightsSub0->SetYTitle("w_{#phi}");
  phiWeightsSub0->SetXTitle("#phi"); 
  if(rebinOriginalPhiHistogram) 
    {
      phiWeightsSub0->Rebin(nMerge);
    } 

  Int_t nBinsPhiSub0 = 0; // number of phi bins
  Int_t counterOfEmptyBinsPhiSub0 = 0; // number of empty phi bins
  Double_t nParticlesInBinSub0 = 0.; // number of particles in this phi bin
  Double_t nParticlesPerBinSub0 = 0.; // average number of particles/bin
  Double_t nParticlesSub0 = 0.; // number of particles in all phi bins 
  //subevent 1
  TH1F *phiWeightsSub1 = (TH1F*)commonHist->
    GetHistPhiSub1()->Clone("phi_weights_sub1"); 
  phiWeightsSub1->SetTitle("#phi-weights for subevent 0");
  phiWeightsSub1->SetYTitle("w_{#phi}");
  phiWeightsSub1->SetXTitle("#phi");
  if(rebinOriginalPhiHistogram) 
    {
      phiWeightsSub1->Rebin(nMerge);
    } 
 
  Int_t nBinsPhiSub1 = 0; // number of phi bins
  Int_t counterOfEmptyBinsPhiSub1 = 0; // number of empty phi bins
  Double_t nParticlesInBinSub1 = 0.; // number of particles in this phi bin
  Double_t nParticlesPerBinSub1 = 0.; // average number of particles/bin
  Double_t nParticlesSub1 = 0.; // number of particles in all phi bins 

  // calculate phi-weights for subevent 0:
  nBinsPhiSub0 = phiWeightsSub0->GetNbinsX();
  nParticlesSub0 = phiWeightsSub0->Integral();
  if(nBinsPhiSub0) nParticlesPerBinSub0 = nParticlesSub0/nBinsPhiSub0; 
  for(Int_t b=1;b<=nBinsPhiSub0;b++) {
    Double_t wPhiSub0 = 0.; // phi-weight for particular phi bin 
    nParticlesInBinSub0 = phiWeightsSub0->GetBinContent(b);
    if(nParticlesInBinSub0) {
      wPhiSub0 = nParticlesPerBinSub0/nParticlesInBinSub0;
    } else {
      counterOfEmptyBinsPhiSub0++;
    }
    phiWeightsSub0->SetBinContent(b,wPhiSub0);
    phiWeightsSub0->SetBinError(b,0.);
  }
  if(!counterOfEmptyBinsPhiSub0) {
    weightsList->Add(phiWeightsSub0);
    cout<<"Phi weights created for subevent 0."<<endl;
  } else {
    cout<<"WARNING: Couldn't create phi weights for subevent 0 because "<<counterOfEmptyBinsPhiSub0<<" phi bins were empty !!!!"<<endl;
  }

  // calculate phi-weights for subevent 1:
  nBinsPhiSub1 = phiWeightsSub1->GetNbinsX();
  nParticlesSub1 = phiWeightsSub1->Integral();
  if(nBinsPhiSub1) nParticlesPerBinSub1 = nParticlesSub1/nBinsPhiSub1; 
  for(Int_t b=1;b<=nBinsPhiSub1;b++) {
    Double_t wPhiSub1 = 0.; // phi-weight for particular phi bin 
    nParticlesInBinSub1 = phiWeightsSub1->GetBinContent(b);
    if(nParticlesInBinSub1) {
      wPhiSub1 = nParticlesPerBinSub1/nParticlesInBinSub1;
    } else {
      counterOfEmptyBinsPhiSub1++;
    }
    phiWeightsSub1->SetBinContent(b,wPhiSub1);
    phiWeightsSub1->SetBinError(b,0.);
  }
  if(!counterOfEmptyBinsPhiSub1) {
    weightsList->Add(phiWeightsSub1);
    cout<<"Phi weights created for subevent 1."<<endl;
  } else {
    cout<<"WARNING: Couldn't create phi weights for subevent 1 because "<<counterOfEmptyBinsPhiSub1<<" phi bins were empty !!!!"<<endl;
  }

 }

 // pt-weights:  
 Double_t ptMin = AliFlowCommonConstants::GetMaster()->GetPtMin();
 Double_t ptMax = AliFlowCommonConstants::GetMaster()->GetPtMax();
 Int_t nBinsPt  = AliFlowCommonConstants::GetMaster()->GetNbinsPt();
 Double_t ptBinWidth = 0.;
 if(nBinsPt) ptBinWidth = (ptMax-ptMin)/nBinsPt;
 TH1D *ptWeights = new TH1D("pt_weights","",nBinsPt,ptMin,ptMax);
 ptWeights->SetXTitle("p_{t} [GeV]");
 ptWeights->SetYTitle("w_{p_{T}}");
 if(useLinearPtWeights) 
 {
  ptWeights->SetTitle("Linear p_{T}-weights: optimizing the flow signal");
 } else if(useQuadraticPtWeights)
   { 
    ptWeights->SetTitle("Quadratic p_{T}-weights: optimizing the flow signal");
   } else
     {
      ptWeights->SetTitle("Differential flow as p_{T}-weights: optimizing the flow signal");   
     }    
 // calculate pt weights:    
 for(Int_t b=1;b<=nBinsPt;b++)
 {
  if(useLinearPtWeights)
  {
   if(ptMin+b*ptBinWidth < ptCutoff)
   {
    ptWeights->SetBinContent(b,(ptMin+b*ptBinWidth)*(ptWeightsMax/ptCutoff)); 
   } else
     {
      ptWeights->SetBinContent(b,ptWeightsMax); 
     }  
     if(b==nBinsPt)
     {
      weightsList->Add(ptWeights);
      cout<<"Pt weights (linear) created."<<endl;
     }
  } else if(useQuadraticPtWeights)
    {
     if(ptMin+b*ptBinWidth < ptCutoff)
     {
      ptWeights->SetBinContent(b,pow(ptMin+b*ptBinWidth,2.)*(ptWeightsMax/pow(ptCutoff,2.))); 
     } else
       {
        ptWeights->SetBinContent(b,ptWeightsMax); 
       } 
       if(b==nBinsPt)
       {
        weightsList->Add(ptWeights);
        cout<<"Pt weights (quadratic) created."<<endl;
       }
    } else // differential flow result is used as a pt-weight: 
      {
       ptWeights->SetBinContent(b,commonHistRes->GetHistDiffFlowPtPOI()->GetBinContent(b));
       if(b==nBinsPt)
       {
        weightsList->Add(ptWeights);
        cout<<"Pt weights (from differential flow) created."<<endl;
       }
      } 
 } // end of for(Int_t b=1;b<=nBinsPt;b++)

 // eta-weights:
 TH1D *etaWeights = commonHistRes->GetHistDiffFlowEtaPOI()->Clone("eta_weights");
 etaWeights->SetXTitle("#eta [GeV]");
 etaWeights->SetYTitle("w_{#eta}");
 etaWeights->SetTitle("Differential flow as #eta-weights: optimizing the flow signal"); 
 if(etaWeights) 
 {
  weightsList->Add(etaWeights);
  cout<<"Eta weights (from differential flow) created."<<endl;
 } 
 
 // Save list holding histogram with weights:
 weightsFile->WriteObject(weightsList,"weights","SingleKey");
 
 cout<<"New file \"weights.root\" created to hold those phi, pt and eta weights."<<endl;

 delete weightsList;
 delete weightsFile; 
 
} // end of void makeWeights(TString type="", TString method="QC", TString cumulantOrder="4th", Int_t mode=mLocal)

void CrossCheckSettings() 
{
 // Check in this method if the settings make sense
 
 if(useLinearPtWeights && useQuadraticPtWeights)
 {
  cout<<endl;
  cout<<"WARNING: You cannot set useLinearPtWeights and useQuadraticPtWeights to kTRUE"<<endl;
  cout<<"          at the same time. Please make up your mind."<<endl;
  cout<<endl;
  exit(0);
 }
 if(ptCutoff<0.)
 { 
  cout<<endl;
  cout<<"WARNING: It doesn't make much sense to have ptCutoff < 0."<<endl;
  cout<<endl;
  exit(0);
 } 
 if(ptWeightsMax<0.)
 { 
  cout<<endl;
  cout<<"WARNING: It doesn't make much sense to have ptWeightsMax < 0."<<endl;
  cout<<endl;
  exit(0);
 } 
 
} // end of void CrossCheckSettings()

void LoadLibrariesMW(const libModes mode) {
  
  //--------------------------------------
  // Load the needed libraries most of them already loaded by aliroot
  //--------------------------------------
  //gSystem->Load("libTree");
  gSystem->Load("libGeom");
  gSystem->Load("libVMC");
  gSystem->Load("libXMLIO");
  gSystem->Load("libPhysics");
  
  //----------------------------------------------------------
  // >>>>>>>>>>> Local mode <<<<<<<<<<<<<< 
  //----------------------------------------------------------
  if (mode==mLocal) {
    //--------------------------------------------------------
    // If you want to use already compiled libraries 
    // in the aliroot distribution
    //--------------------------------------------------------
    
    //==================================================================================  
    //load needed libraries:
    gSystem->AddIncludePath("-I$ROOTSYS/include");
    //gSystem->Load("libTree");
    
    // for AliRoot
    gSystem->AddIncludePath("-I$ALICE_ROOT/include");
    gSystem->Load("libANALYSIS");
    gSystem->Load("libPWGflowBase");
    //cerr<<"libPWGflowBase loaded ..."<<endl;
    
  }
  
  else if (mode==mLocalSource) {
    
    // In root inline compile
   
   // Constants  
    gROOT->LoadMacro("BaseAliFlowCommonConstants.cxx+");
    gROOT->LoadMacro("BaseAliFlowLYZConstants.cxx+");
    
    // Flow event
    gROOT->LoadMacro("BaseAliFlowVector.cxx+"); 
    gROOT->LoadMacro("BaseAliFlowTrackSimple.cxx+");    
    gROOT->LoadMacro("BaseAliFlowTrackSimpleCuts.cxx+");    
    gROOT->LoadMacro("BaseAliFlowEventSimple.cxx+");
    
    // Output histosgrams
    gROOT->LoadMacro("BaseAliFlowCommonHist.cxx+");
    gROOT->LoadMacro("BaseAliFlowCommonHistResults.cxx+");
    gROOT->LoadMacro("BaseAliFlowLYZHist1.cxx+");
    gROOT->LoadMacro("BaseAliFlowLYZHist2.cxx+");
    
    cout << "finished loading macros!" << endl;  
    
  }  
  
} // end of void LoadLibrariesMW(const libModes mode) 





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