ROOT logo
#include "AliAODTrack.h"
#include <iostream>
#include "TFile.h"
#include "TH1I.h"
#include "TH2.h"
#include "AliSpectraAODHistoManager.h"
#include "AliSpectraAODEventCuts.h"
#include "AliSpectraAODTrackCuts.h"
#include "TCanvas.h"
#include "TLegend.h"

using namespace std;

void analysis_macro(const char * dataFile = "Pt.AOD.1._data_ptcut.root", const char * mcFile ="Pt.AOD.1._MC.root") {
   
  // gSystem->Load("libTree.so");
  // gSystem->Load("libGeom.so");
  // gSystem->Load("libVMC.so");
  // gSystem->Load("libPhysics.so");
  // gSystem->Load("libSTEERBase.so");
  // gSystem->Load("libESD.so");
  // gSystem->Load("libAOD.so");
  // gSystem->Load("libANALYSIS.so");
  // gSystem->Load("libANALYSISalice.so");
  // gSystem->Load("libANALYSIS");
  // gSystem->Load("libANALYSISalice");
  // gROOT->LoadMacro("$ALICE_ROOT/PWG0/CreateESDChain.C");
  // gSystem->AddIncludePath("-I$ALICE_ROOT/include");
  // gStyle->SetPalette(1);
  // gStyle->SetFillColor(kWhite);

  // gROOT->LoadMacro("AliSpectraAODTrackCuts.cxx+g");
  // gROOT->LoadMacro("AliSpectraAODEventCuts.cxx+g");
  // gROOT->LoadMacro("AliSpectraAODHistoManager.cxx+g");
  // gROOT->LoadMacro("AliAnalysisTaskSpectraAOD.cxx+g");
 
  const char * histoname[] =
    {
      // names of histos we want to draw. please observe order of histos, elsewise name will not make sense
      "#frac{MC_{#sigma, rec}}{Data}, P^{+}",
      "#frac{MC_{#sigma, rec}}{Data}, K^{+}",
      "#frac{MC_{#sigma, rec}}{Data}, #pi^{+}",
      "#frac{MC_{#sigma, rec}}{Data}, P^{-}",
      "#frac{MC_{#sigma, rec}}{Data}, K^{-}",
      "#frac{MC_{#sigma, rec}}{Data}, #pi^{-}",      
          
      "#frac{MC_{#sigma, rec, prim}}{Data}, P^{+}",
      "#frac{MC_{#sigma, rec, prim}}{Data}, K^{+}",
      "#frac{MC_{#sigma, rec, prim}}{Data}, #pi^{+}",
      "#frac{MC_{#sigma, rec, prim}}{Data}, P^{-}",
      "#frac{MC_{#sigma, rec, prim}}{Data}, K^{-}",
      "#frac{MC_{#sigma, rec, prim}}{Data}, #pi^{-}",     
         
      "#frac{MC_{#sigma, rec, sec}}{Data}, P^{+}",
      "#frac{MC_{#sigma, rec, sec}}{Data}, K^{+}",
      "#frac{MC_{#sigma, rec, sec}}{Data}, #pi^{+}",
      "#frac{MC_{#sigma, rec, sec}}{Data}, P^{-}",
      "#frac{MC_{#sigma, rec, sec}}{Data}, K^{-}",
      "#frac{MC_{#sigma, rec, sec}}{Data}, #pi^{-}",     
         
      "#frac{MC_{true, gen}}{MC_{#sigma, rec}}, P^{+}",
      "#frac{MC_{true, gen}}{MC_{#sigma, rec}}, K^{+}",
      "#frac{MC_{true, gen}}{MC_{#sigma, rec}}, #pi^{+}",
      "#frac{MC_{true, gen}}{MC_{#sigma, rec}}, P^{-}",
      "#frac{MC_{true, gen}}{MC_{#sigma, rec}}, K^{-}",
      "#frac{MC_{true, gen}}{MC_{#sigma, rec}}, #pi^{-}",     
              
      "#frac{MC_{true, gen}}{MC_{#sigma, rec}} x Data, P^{+}",
      "#frac{MC_{true, gen}}{MC_{#sigma, rec}} x Data, K^{+}",
      "#frac{MC_{true, gen}}{MC_{#sigma, rec}} x Data, #pi^{+}",
      "#frac{MC_{true, gen}}{MC_{#sigma, rec}} x Data, P^{-}",
      "#frac{MC_{true, gen}}{MC_{#sigma, rec}} x Data, K^{-}",
      "#frac{MC_{true, gen}}{MC_{#sigma, rec}} x Data, #pi^{-}",     

      "Data, P^{+}",
      "Data, K^{+}",
      "Data, #pi^{+}",
      "Data, P^{-}",
      "Data, K^{-}",
      "Data, #pi^{-}",      

      "#frac{MC_{rec #sigma}}{MC_{true, rec}}, P^{+}",
      "#frac{MC_{rec #sigma}}{MC_{true, rec}}, K^{+}",
      "#frac{MC_{rec #sigma}}{MC_{true, rec}}, #pi^{+}",
      "#frac{MC_{rec #sigma}}{MC_{true, rec}}, P^{-}",
      "#frac{MC_{rec #sigma}}{MC_{true, rec}}, K^{-}",
      "#frac{MC_{rec #sigma}}{MC_{true, rec}}, #pi^{-}",     

      "#frac{MC_{rec #sigma sec}}{MC_{#sigma, rec}}, P^{+}",
      "#frac{MC_{rec #sigma sec}}{MC_{#sigma, rec}}, K^{+}",
      "#frac{MC_{rec #sigma sec}}{MC_{#sigma, rec}}, #pi^{+}",
      "#frac{MC_{rec #sigma sec}}{MC_{#sigma, rec}}, P^{-}",
      "#frac{MC_{rec #sigma sec}}{MC_{#sigma, rec}}, K^{-}",
      "#frac{MC_{rec #sigma sec}}{MC_{#sigma, rec}}, #pi^{-}",     
    };

  const char * histotitle[] =
    {
      // titles of histos we want to draw. please observe order of histos, elsewise name will not make sense
      "MC #sigma, rec / Data, P^{+}",
      "MC #sigma, rec / Data, K^{+}",
      "MC #sigma, rec / Data, #pi^{+}",
      "MC #sigma, rec / Data, P^{-}",
      "MC #sigma, rec / Data, K^{-}",
      "MC #sigma, rec / Data, #pi^{-}",     
   
      "MC #sigma, rec, prim / Data, P^{+}",
      "MC #sigma, rec, prim  / Data, K^{+}",
      "MC #sigma, rec, prim  / Data, #pi^{+}",
      "MC #sigma, rec, prim  / Data, P^{-}",
      "MC #sigma, rec, prim  / Data, K^{-}",
      "MC #sigma, rec, prim  / Data, #pi^{-}",      
    
      "MC #sigma, rec, sec / Data, P^{+}",
      "MC #sigma, rec, sec / Data, K^{+}",
      "MC #sigma, rec, sec / Data, #pi^{+}",
      "MC #sigma, rec, sec / Data, P^{-}",
      "MC #sigma, rec, sec / Data, K^{-}",
      "MC #sigma, rec, sec / Data, #pi^{-}",      
          
      "Correction factor, P^{+}",
      "Correction factor, K^{+}",
      "Correction factor, #pi^{+}",
      "Correction factor, P^{-}",
      "Correction factor, K^{-}",
      "Correction factor, #pi^{-}",      

      "True Data, P^{+}",
      "True Data, K^{+}",
      "True Data, #pi^{+}",
      "True Data, P^{-}",
      "True Data, K^{-}",
      "True Data, #pi^{-}",      

      "Raw Data, P^{+}",
      "Raw Data, K^{+}",
      "Raw Data, #pi^{+}",
      "Raw Data, P^{-}",
      "Raw Data, K^{-}",
      "Raw Data, #pi^{-}",      

      "Identificaiton quality, P^{+}",
      "Identificaiton quality, K^{+}",
      "Identificaiton quality, #pi^{+}",
      "Identificaiton quality, P^{-}",
      "Identificaiton quality, K^{-}",
      "Identificaiton quality, #pi^{-}",     

      "Contribution of secondaries, P^{+}",
      "Contribution of secondaries, K^{+}",
      "Contribution of secondaries, #pi^{+}",
      "Contribution of secondaries, P^{-}",
      "Contribution of secondaries, K^{-}",
      "Contribution of secondaries, #pi^{-}",     
    };

  // Open root MC file and get classes
  cout << "Analysis Macro" << endl;
  cout << "  > Reading MC data" << endl;
  TFile *_mc = TFile::Open(mcFile);
  AliSpectraAODHistoManager* hman_mc = (AliSpectraAODHistoManager*) _mc->Get("SpectraHistos");
  AliSpectraAODEventCuts* ecuts_mc = (AliSpectraAODEventCuts*) _mc->Get("Event Cuts");
  AliSpectraAODTrackCuts* tcuts_mc = (AliSpectraAODTrackCuts*) _mc->Get("Track Cuts");
  // print info about mc track and Event cuts
  cout << " -- Info about MC -- "<< endl;
  ecuts_mc->PrintCuts();
  tcuts_mc->PrintCuts();
  // get the mc histo's necessary to write the contamination histos from the rootfile
  TH1F* spectrahistos_mc[30];
  cout << " -- Reading and normalizing histograms -- " << endl;
  for( Int_t i = 0 ; i <= AliSpectraNameSpace::kNPtSpecies ; i++ ) { 
    spectrahistos_mc[i] = dynamic_cast<TH1F*>(hman_mc->GetHistogram((AliSpectraNameSpace::AODPtHist_t)i)); 
    Double_t events_mc =  1. / ecuts_mc->NumberOfEvents();
    if(!spectrahistos_mc[i]) {
      continue;
    }    
    spectrahistos_mc[i]->Scale(events_mc, "width");
  }
  cout << "  > Reading real data " << endl;
  // proceed likewise for data
  TFile *_data = TFile::Open(dataFile);
  AliSpectraAODHistoManager* hman_data = (AliSpectraAODHistoManager*) _data->Get("SpectraHistos");
  AliSpectraAODEventCuts* ecuts_data = (AliSpectraAODEventCuts*) _data->Get("Event Cuts");
  AliSpectraAODTrackCuts* tcuts_data = (AliSpectraAODTrackCuts*) _data->Get("Track Cuts");
  // print info about track and Event cuts
  cout << " -- Info about data -- " << endl;
  ecuts_data->PrintCuts();
  tcuts_data->PrintCuts();
  // get the histo's necessary to write the contamination histos from the rootfile
  // MF 22/02/2012
  // Get the raw data distribution:
  // 1. Get DCA vs pt histo for each particle
  // 2. Loop over all pt bins, projecting on DCA
  // 3. Fit the DCA data distribution with MC templates for primaries, sec. w., sec. m. (TFractionFitter)
  // 4. Extract from the fit raw primaries vs pt in data
  // 5. Correct for the primaries efficiency estimated in MC
  TH1F* spectrahistos_data[30];
  cout << " -- Reading and normalizing histograms -- " << endl;
  for( Int_t i = 0 ; i <= AliSpectraNameSpace::kNPtSpecies ; i++ ) { 
    spectrahistos_data[i] = dynamic_cast<TH1F*>(hman_data->GetHistogram((AliSpectraNameSpace::AODPtHist_t)i));
    if(!spectrahistos_data[i]) {
      continue;
    }    
    Double_t events_data =  1. / ecuts_data->NumberOfEvents();
    //normalize the histos    
    spectrahistos_data[i]->Scale(events_data, "width");
  }
  //create output file and select it as the active file
  TFile * output = new TFile("analysis_output.root", "RECREATE");
  output->cd();
  // Write the scaled data and MC histos in the output file for convenience
  output->mkdir("Data");
  output->cd("Data");
  for(Int_t ihist = 0; ihist <= AliSpectraNameSpace::kNPtSpecies; ihist++){
      spectrahistos_data[ihist]->Write();
  }
  output->mkdir("MC");
  output->cd("MC");
  for(Int_t ihist = 0; ihist <= AliSpectraNameSpace::kNPtSpecies; ihist++){
      spectrahistos_mc[ihist]->Write();
  }
  output->mkdir("ANALYSIS");
  output->cd("ANALYSIS");
  // perform some analysis!
  //  next loop: MC_Sigma_Rec over Rec_Data
  TCanvas* c1 = new TCanvas("MC reconstructed over Data","MC reconstructed over Data");
  c1->Divide(3,2);
  TH1F* kRatioPtMCSigmaRecSigmaRec[6];
  for (Int_t i = 0 ; i < 6 ; i ++ )
    {
      kRatioPtMCSigmaRecSigmaRec[i] = (TH1F*)(spectrahistos_mc[i])->Clone(histotitle[i]);
      kRatioPtMCSigmaRecSigmaRec[i]->Divide(spectrahistos_data[i]);
      c1->cd(1+i);
      kRatioPtMCSigmaRecSigmaRec[i]->SetTitle(histoname[i]);
      kRatioPtMCSigmaRecSigmaRec[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
      kRatioPtMCSigmaRecSigmaRec[i]->Draw();
      kRatioPtMCSigmaRecSigmaRec[i]->Write();
    }
  // next loop: MC_sigma_primaries over Rec_data
  TCanvas* c2 = new TCanvas("MC reconstructed primaries over Data", "MC reconstructed primaries over Data");
  c2->Divide(3,2);
  TH1F* kRatioPtMCSigmaRecPrimarySigmaRec[6];
  for (Int_t i = 0 ; i < 6 ; i ++ )
    {
      kRatioPtMCSigmaRecPrimarySigmaRec[i] = (TH1F*)(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaPrimaryProtonPlus])->Clone(histotitle[i+6]);
      kRatioPtMCSigmaRecPrimarySigmaRec[i]->Divide(spectrahistos_data[i]);
      c2->cd(1+i);
      kRatioPtMCSigmaRecPrimarySigmaRec[i]->SetTitle(histoname[i+6]);
      kRatioPtMCSigmaRecPrimarySigmaRec[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
      kRatioPtMCSigmaRecPrimarySigmaRec[i]->Draw();
      kRatioPtMCSigmaRecPrimarySigmaRec[i]->Write();
    }
  // next loop: MC_Sigma_secondaries over Rec_data
  TCanvas* c3 = new TCanvas("MC reconstructed secondaries over Data","MC reconstructed secondaries over Data");
  c3->Divide(3,2);
  TH1F* kRatioPtMCSigmaRecSigmaRecSecondary[6];
  for (Int_t i = 0 ; i < 6 ; i ++ )
    {
      kRatioPtMCSigmaRecSigmaRecSecondary[i] = (TH1F*)(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaSecondaryProtonPlus])->Clone(histotitle[i+12]);
      kRatioPtMCSigmaRecSigmaRecSecondary[i]->Divide(spectrahistos_data[i]);
      c3->cd(1+i);
      kRatioPtMCSigmaRecSigmaRecSecondary[i]->SetTitle(histoname[12+i]);
      kRatioPtMCSigmaRecSigmaRecSecondary[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
      kRatioPtMCSigmaRecSigmaRecSecondary[i]->Draw();
      kRatioPtMCSigmaRecSigmaRecSecondary[i]->Write();
    }
  //
  TCanvas* c4 = new TCanvas("MC true generated over MC true reconstructed","MC true generated over MC true reconstructed");
  c4->Divide(3,2);
  TH1F* kRatioPtMCTrueMCRec[6];
  for (Int_t i = 0 ; i < 6 ; i ++ )
    {
      kRatioPtMCTrueMCRec[i] = (TH1F*)(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtGenTruePrimaryProtonPlus])->Clone(histotitle[i+18]);
      kRatioPtMCTrueMCRec[i]->Divide(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaPrimaryProtonPlus]);
      c4->cd(1+i);
      kRatioPtMCTrueMCRec[i]->SetTitle(histoname[18+i]);
      kRatioPtMCTrueMCRec[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
      kRatioPtMCTrueMCRec[i]->Draw();
      kRatioPtMCTrueMCRec[i]->Write();
    }
  
  TCanvas* c5 = new TCanvas("True Data","True Data");
  c5->Divide(3,2);
  TH1F* kRatioPtTrueData[6];
  for (Int_t i = 0 ; i < 6 ; i ++ )
    {
      kRatioPtTrueData[i] = (TH1F*)(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtGenTruePrimaryProtonPlus])->Clone(histotitle[i+24]);
      kRatioPtTrueData[i]->Divide(spectrahistos_mc[i]); // Michele: Since we are correcting all contributions at once, this should be exaclty the same as in the data!
      kRatioPtTrueData[i]->Multiply(spectrahistos_data[i]);
      c5->cd(1+i);
      kRatioPtTrueData[i]->SetTitle(histoname[24+i]);
      kRatioPtTrueData[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
      kRatioPtTrueData[i]->Draw();
      kRatioPtTrueData[i]->Write();
    }
 
  TCanvas* c6 = new TCanvas("Raw data", "Raw data");
  c6->Divide(3,2);
  TH1F* kRawData[6];
  for (Int_t i = 0 ; i < 6 ; i ++ )
    {
      kRawData[i] = (TH1F*)(spectrahistos_data[i+AliSpectraNameSpace::kHistPtRecSigmaProtonPlus])->Clone(histotitle[i+30]);
      c6->cd(1+i);
      kRawData[i]->SetTitle(histoname[30+i]);
      kRawData[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
      kRawData[i]->Draw();
      kRawData[i]->Write();
    }
  
  TCanvas* c7 = new TCanvas("contamination", "contamination");
  c7->Divide(3,2);
  TH1F* kContamination[6];
  for (Int_t i = 0 ; i < 6 ; i ++ )
    {
      kContamination[i] = (TH1F*)(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaProtonPlus])->Clone(histotitle[i+36]);
      kContamination[i]->Divide(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecTrueProtonPlus]);
      c7->cd(1+i);
      kContamination[i]->SetTitle(histoname[36+i]);
      kContamination[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
      kContamination[i]->Draw();
      kContamination[i]->Write();
    }
  
  TCanvas* c8 = new TCanvas("contamination secondary", "contamination secondary");
  c8->Divide(3,2);
  TH1F* kSecContamination[6];
  for (Int_t i = 0 ; i < 6 ; i ++ )
    {
      kSecContamination[i] = (TH1F*)(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaSecondaryProtonPlus])->Clone(histotitle[i+42]);
      kSecContamination[i]->Divide(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaProtonPlus]);
      c8->cd(1+i);
      kSecContamination[i]->SetTitle(histoname[42+i]);
      kSecContamination[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
      kSecContamination[i]->Draw();
      kSecContamination[i]->Write();
    }
   
  TCanvas* c9 = new TCanvas("true data and generated", "true data and generated");
  c9->Divide(3,2);
  TH1F* ktrueandgenerated[6];
  for (Int_t i = 0 ; i < 6 ; i ++ )
    {
      // kSecContamination[i] = (TH1F*)(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaSecondaryProtonPlus])->Clone(histotitle[i+42]);
      // kSecContamination[i]->Divide(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtRecSigmaProtonPlus]);
      c9->cd(1+i);
      // kSecContamination[i]->SetTitle(histoname[42+i]);
      // kSecContamination[i]->GetYaxis()->SetTitle("#frac{d^{2} N}{dy dp_{T}} (c / GeV)");
      kRatioPtTrueData[i]->Draw();
      spectrahistos_mc[i+AliSpectraNameSpace::kHistPtGenTruePrimaryProtonPlus]->SetMarkerColor(kRed);
      spectrahistos_mc[i+AliSpectraNameSpace::kHistPtGenTruePrimaryProtonPlus]->SetMarkerStyle(kOpenCircle);
      spectrahistos_mc[i+AliSpectraNameSpace::kHistPtGenTruePrimaryProtonPlus]->SetLineColor(kRed);
      spectrahistos_mc[i+AliSpectraNameSpace::kHistPtGenTruePrimaryProtonPlus]->Draw("same");

      // legend
      TLegend * leg = new TLegend(0.6,0.64,0.89,0.79);  //coordinates are fractions
      leg->AddEntry(spectrahistos_mc[i+AliSpectraNameSpace::kHistPtGenTruePrimaryProtonPlus],"Generated","p"); 
      leg->AddEntry(kRatioPtTrueData[i],"Corrected","p"); 
      leg->Draw();
    }
   
  cout << "Analysis complete" << endl;
  cout << " - Please exit root to close and save output file " << endl;
}
 analysis_macro.C:1
 analysis_macro.C:2
 analysis_macro.C:3
 analysis_macro.C:4
 analysis_macro.C:5
 analysis_macro.C:6
 analysis_macro.C:7
 analysis_macro.C:8
 analysis_macro.C:9
 analysis_macro.C:10
 analysis_macro.C:11
 analysis_macro.C:12
 analysis_macro.C:13
 analysis_macro.C:14
 analysis_macro.C:15
 analysis_macro.C:16
 analysis_macro.C:17
 analysis_macro.C:18
 analysis_macro.C:19
 analysis_macro.C:20
 analysis_macro.C:21
 analysis_macro.C:22
 analysis_macro.C:23
 analysis_macro.C:24
 analysis_macro.C:25
 analysis_macro.C:26
 analysis_macro.C:27
 analysis_macro.C:28
 analysis_macro.C:29
 analysis_macro.C:30
 analysis_macro.C:31
 analysis_macro.C:32
 analysis_macro.C:33
 analysis_macro.C:34
 analysis_macro.C:35
 analysis_macro.C:36
 analysis_macro.C:37
 analysis_macro.C:38
 analysis_macro.C:39
 analysis_macro.C:40
 analysis_macro.C:41
 analysis_macro.C:42
 analysis_macro.C:43
 analysis_macro.C:44
 analysis_macro.C:45
 analysis_macro.C:46
 analysis_macro.C:47
 analysis_macro.C:48
 analysis_macro.C:49
 analysis_macro.C:50
 analysis_macro.C:51
 analysis_macro.C:52
 analysis_macro.C:53
 analysis_macro.C:54
 analysis_macro.C:55
 analysis_macro.C:56
 analysis_macro.C:57
 analysis_macro.C:58
 analysis_macro.C:59
 analysis_macro.C:60
 analysis_macro.C:61
 analysis_macro.C:62
 analysis_macro.C:63
 analysis_macro.C:64
 analysis_macro.C:65
 analysis_macro.C:66
 analysis_macro.C:67
 analysis_macro.C:68
 analysis_macro.C:69
 analysis_macro.C:70
 analysis_macro.C:71
 analysis_macro.C:72
 analysis_macro.C:73
 analysis_macro.C:74
 analysis_macro.C:75
 analysis_macro.C:76
 analysis_macro.C:77
 analysis_macro.C:78
 analysis_macro.C:79
 analysis_macro.C:80
 analysis_macro.C:81
 analysis_macro.C:82
 analysis_macro.C:83
 analysis_macro.C:84
 analysis_macro.C:85
 analysis_macro.C:86
 analysis_macro.C:87
 analysis_macro.C:88
 analysis_macro.C:89
 analysis_macro.C:90
 analysis_macro.C:91
 analysis_macro.C:92
 analysis_macro.C:93
 analysis_macro.C:94
 analysis_macro.C:95
 analysis_macro.C:96
 analysis_macro.C:97
 analysis_macro.C:98
 analysis_macro.C:99
 analysis_macro.C:100
 analysis_macro.C:101
 analysis_macro.C:102
 analysis_macro.C:103
 analysis_macro.C:104
 analysis_macro.C:105
 analysis_macro.C:106
 analysis_macro.C:107
 analysis_macro.C:108
 analysis_macro.C:109
 analysis_macro.C:110
 analysis_macro.C:111
 analysis_macro.C:112
 analysis_macro.C:113
 analysis_macro.C:114
 analysis_macro.C:115
 analysis_macro.C:116
 analysis_macro.C:117
 analysis_macro.C:118
 analysis_macro.C:119
 analysis_macro.C:120
 analysis_macro.C:121
 analysis_macro.C:122
 analysis_macro.C:123
 analysis_macro.C:124
 analysis_macro.C:125
 analysis_macro.C:126
 analysis_macro.C:127
 analysis_macro.C:128
 analysis_macro.C:129
 analysis_macro.C:130
 analysis_macro.C:131
 analysis_macro.C:132
 analysis_macro.C:133
 analysis_macro.C:134
 analysis_macro.C:135
 analysis_macro.C:136
 analysis_macro.C:137
 analysis_macro.C:138
 analysis_macro.C:139
 analysis_macro.C:140
 analysis_macro.C:141
 analysis_macro.C:142
 analysis_macro.C:143
 analysis_macro.C:144
 analysis_macro.C:145
 analysis_macro.C:146
 analysis_macro.C:147
 analysis_macro.C:148
 analysis_macro.C:149
 analysis_macro.C:150
 analysis_macro.C:151
 analysis_macro.C:152
 analysis_macro.C:153
 analysis_macro.C:154
 analysis_macro.C:155
 analysis_macro.C:156
 analysis_macro.C:157
 analysis_macro.C:158
 analysis_macro.C:159
 analysis_macro.C:160
 analysis_macro.C:161
 analysis_macro.C:162
 analysis_macro.C:163
 analysis_macro.C:164
 analysis_macro.C:165
 analysis_macro.C:166
 analysis_macro.C:167
 analysis_macro.C:168
 analysis_macro.C:169
 analysis_macro.C:170
 analysis_macro.C:171
 analysis_macro.C:172
 analysis_macro.C:173
 analysis_macro.C:174
 analysis_macro.C:175
 analysis_macro.C:176
 analysis_macro.C:177
 analysis_macro.C:178
 analysis_macro.C:179
 analysis_macro.C:180
 analysis_macro.C:181
 analysis_macro.C:182
 analysis_macro.C:183
 analysis_macro.C:184
 analysis_macro.C:185
 analysis_macro.C:186
 analysis_macro.C:187
 analysis_macro.C:188
 analysis_macro.C:189
 analysis_macro.C:190
 analysis_macro.C:191
 analysis_macro.C:192
 analysis_macro.C:193
 analysis_macro.C:194
 analysis_macro.C:195
 analysis_macro.C:196
 analysis_macro.C:197
 analysis_macro.C:198
 analysis_macro.C:199
 analysis_macro.C:200
 analysis_macro.C:201
 analysis_macro.C:202
 analysis_macro.C:203
 analysis_macro.C:204
 analysis_macro.C:205
 analysis_macro.C:206
 analysis_macro.C:207
 analysis_macro.C:208
 analysis_macro.C:209
 analysis_macro.C:210
 analysis_macro.C:211
 analysis_macro.C:212
 analysis_macro.C:213
 analysis_macro.C:214
 analysis_macro.C:215
 analysis_macro.C:216
 analysis_macro.C:217
 analysis_macro.C:218
 analysis_macro.C:219
 analysis_macro.C:220
 analysis_macro.C:221
 analysis_macro.C:222
 analysis_macro.C:223
 analysis_macro.C:224
 analysis_macro.C:225
 analysis_macro.C:226
 analysis_macro.C:227
 analysis_macro.C:228
 analysis_macro.C:229
 analysis_macro.C:230
 analysis_macro.C:231
 analysis_macro.C:232
 analysis_macro.C:233
 analysis_macro.C:234
 analysis_macro.C:235
 analysis_macro.C:236
 analysis_macro.C:237
 analysis_macro.C:238
 analysis_macro.C:239
 analysis_macro.C:240
 analysis_macro.C:241
 analysis_macro.C:242
 analysis_macro.C:243
 analysis_macro.C:244
 analysis_macro.C:245
 analysis_macro.C:246
 analysis_macro.C:247
 analysis_macro.C:248
 analysis_macro.C:249
 analysis_macro.C:250
 analysis_macro.C:251
 analysis_macro.C:252
 analysis_macro.C:253
 analysis_macro.C:254
 analysis_macro.C:255
 analysis_macro.C:256
 analysis_macro.C:257
 analysis_macro.C:258
 analysis_macro.C:259
 analysis_macro.C:260
 analysis_macro.C:261
 analysis_macro.C:262
 analysis_macro.C:263
 analysis_macro.C:264
 analysis_macro.C:265
 analysis_macro.C:266
 analysis_macro.C:267
 analysis_macro.C:268
 analysis_macro.C:269
 analysis_macro.C:270
 analysis_macro.C:271
 analysis_macro.C:272
 analysis_macro.C:273
 analysis_macro.C:274
 analysis_macro.C:275
 analysis_macro.C:276
 analysis_macro.C:277
 analysis_macro.C:278
 analysis_macro.C:279
 analysis_macro.C:280
 analysis_macro.C:281
 analysis_macro.C:282
 analysis_macro.C:283
 analysis_macro.C:284
 analysis_macro.C:285
 analysis_macro.C:286
 analysis_macro.C:287
 analysis_macro.C:288
 analysis_macro.C:289
 analysis_macro.C:290
 analysis_macro.C:291
 analysis_macro.C:292
 analysis_macro.C:293
 analysis_macro.C:294
 analysis_macro.C:295
 analysis_macro.C:296
 analysis_macro.C:297
 analysis_macro.C:298
 analysis_macro.C:299
 analysis_macro.C:300
 analysis_macro.C:301
 analysis_macro.C:302
 analysis_macro.C:303
 analysis_macro.C:304
 analysis_macro.C:305
 analysis_macro.C:306
 analysis_macro.C:307
 analysis_macro.C:308
 analysis_macro.C:309
 analysis_macro.C:310
 analysis_macro.C:311
 analysis_macro.C:312
 analysis_macro.C:313
 analysis_macro.C:314
 analysis_macro.C:315
 analysis_macro.C:316
 analysis_macro.C:317
 analysis_macro.C:318
 analysis_macro.C:319
 analysis_macro.C:320
 analysis_macro.C:321
 analysis_macro.C:322
 analysis_macro.C:323
 analysis_macro.C:324
 analysis_macro.C:325
 analysis_macro.C:326
 analysis_macro.C:327
 analysis_macro.C:328
 analysis_macro.C:329
 analysis_macro.C:330
 analysis_macro.C:331
 analysis_macro.C:332
 analysis_macro.C:333
 analysis_macro.C:334
 analysis_macro.C:335
 analysis_macro.C:336
 analysis_macro.C:337
 analysis_macro.C:338
 analysis_macro.C:339
 analysis_macro.C:340
 analysis_macro.C:341
 analysis_macro.C:342
 analysis_macro.C:343
 analysis_macro.C:344
 analysis_macro.C:345
 analysis_macro.C:346
 analysis_macro.C:347
 analysis_macro.C:348
 analysis_macro.C:349
 analysis_macro.C:350
 analysis_macro.C:351
 analysis_macro.C:352
 analysis_macro.C:353
 analysis_macro.C:354
 analysis_macro.C:355
 analysis_macro.C:356
 analysis_macro.C:357
 analysis_macro.C:358
 analysis_macro.C:359
 analysis_macro.C:360
 analysis_macro.C:361
 analysis_macro.C:362
 analysis_macro.C:363
 analysis_macro.C:364