ROOT logo

#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TH1F.h>
#include <TH1I.h>
#include <TH2D.h>
#include <TFile.h>
#include <Riostream.h>
#include <TParticle.h>
#include <TCanvas.h>
#include <TLegend.h>
#include <TSystem.h>
#include <TROOT.h>
#include <TClonesArray.h>
#include <TTree.h>
#include <TArrayF.h>
#include <TStyle.h>
#include "AliRun.h"
#include "AliRunLoader.h"
#include "AliStack.h"
#include "AliESDEvent.h"
#include "AliESDtrack.h"
#include "AliTrackReference.h"
#include "AliITSsegmentationUpgrade.h"
#endif

Int_t minNpoints=3;
Bool_t IsTrackable(TClonesArray *trackRef);
TArrayF radii;

void efficiency(char *title="",Bool_t isPrimary=kTRUE){

  gSystem->Load("libITSUpgradeBase.so");
  gSystem->Load("libITSUpgradeRec.so");
  gSystem->Load("libITSUpgradeSim.so");

  // setting up the configuration to be considered
  AliITSsegmentationUpgrade *seg = new AliITSsegmentationUpgrade();
  if(!seg){
    printf("no segmentation info available... Exiting");
    return;
  }
  radii.Set(seg->GetNLayers());
  for(Int_t l=0; l<seg->GetNLayers(); l++){
    radii.AddAt(seg->GetRadius(l),l);
  }
  delete seg;

  TString titlet(title);
  titlet.ReplaceAll(" ","");

  gROOT->SetStyle("Plain");
  gStyle->SetPalette(1);
  gStyle->SetOptStat(0);
  gStyle->SetOptTitle(0);


  //booking plots
  // pt
  Int_t nbins= 64;
  Double_t ptmax = 1.6;

  TH1F *hPtRec = new TH1F("hPtRec"," p_{T} distribution of reconstructed tracks",nbins,0,ptmax);
  hPtRec->SetXTitle("p_{T}");
  hPtRec->SetYTitle(Form("entries / %3.0f MeV/c",1000*(ptmax/nbins)));

  TH1F *hPtRecMc = new TH1F("hPtRecMc"," MC p_{T} distribution of reconstructed tracks",nbins,0,ptmax);
  hPtRecMc->SetXTitle("p_{T} GeV/c");
  hPtRecMc->SetYTitle(Form("entries / %3.0f MeV/c",1000*(ptmax/nbins)));
 
  TH1F *hPtRecGood = new TH1F("hPtRecGood"," P_{t} distribution of reconstructed tracks [positive labels]",nbins,0,ptmax);
  hPtRecGood->SetXTitle("p_{T} GeV/c");
  hPtRecGood->SetYTitle(Form("entries / %3.0f MeV/c",1000*(ptmax/nbins)));

  TH1F *hPtMc  = new TH1F("hPtMc", " p_{T} distribution of MC tracks",nbins,0,ptmax);
  hPtMc->SetXTitle("p_{T} GeV/c");
  hPtMc->SetYTitle(Form("entries / %3.0f MeV/c",1000*(ptmax/nbins)));

  // Eta 
  Int_t nbinsEta = 24;
  Double_t eta[2]={-1.2,1.2}; 

  TH1F *hEtaRec = new TH1F("hEtaRec"," #eta distribution of reconstructed tracks",nbinsEta,eta[0],eta[1]);
  hEtaRec->SetXTitle("#eta");
  hEtaRec->SetYTitle(Form("entries / %3.3f ",((eta[1]-eta[0])/nbinsEta)));

  TH1F *hEtaRecMc = new TH1F("hEtaRecMc"," #eta Mc distribution of reconstructed tracks",nbinsEta,eta[0],eta[1]);
  hEtaRecMc->SetXTitle("#eta");
  hEtaRecMc->SetYTitle(Form("entries / %3.3f ",((eta[1]-eta[0])/nbinsEta)));
 
  TH1F *hEtaRecGood = new TH1F("hEtaRecGood"," #eta distribution of Good reconstructed tracks",nbinsEta,eta[0],eta[1]);
  hEtaRecGood->SetXTitle("#eta");
  hEtaRecGood->SetYTitle(Form("entries / %3.3f ",((eta[1]-eta[0])/nbinsEta)));

  TH1F *hEtaMc  = new TH1F("hEtaMc", " #eta distribution of MC tracks",nbinsEta,eta[0],eta[1]);
  hEtaMc->SetXTitle("#eta");
  hEtaMc->SetYTitle(Form("entries / %3.3f ",((eta[1]-eta[0])/nbinsEta)));


  Double_t ptlimit=0.0;

  Double_t cont=0; 
  Double_t ntrack=0;

  // Init simulation 
  gAlice=NULL;
  AliRunLoader* runLoader = AliRunLoader::Open("galice.root");
  if (!runLoader) {
    Error("OpengAlice", "no files, please check the path");
    return ;
  }
  runLoader->LoadgAlice();
  gAlice = runLoader->GetAliRun();
  runLoader->LoadHeader();
  runLoader->LoadKinematics();
  runLoader->LoadTrackRefs();

  //Trackref
  TTree *trackRefTree = 0x0; 
  TClonesArray *trackRef = new TClonesArray("AliTrackReference",1000);
  
  // ESD
  TFile* esdFile = TFile::Open("AliESDs.root");
  if (!esdFile || !esdFile->IsOpen()) {
    Error("CheckESD", "opening ESD file %s failed", "AliESDs.root");
    return ;
  }
  AliESDEvent * esd = new AliESDEvent;
  TTree* tree = (TTree*) esdFile->Get("esdTree");
  if (!tree) {
    Error("CheckESD", "no ESD tree found");
    return ;
  }
  esd->ReadFromTree(tree);

  printf("setting the low pt value to %f \n",ptlimit);
  // Loop over events

  for(Int_t i=0; i<runLoader->GetNumberOfEvents(); i++){
    //for(Int_t i=0; i< 1; i++){
    cout << "Event "<< i << endl;
    runLoader->GetEvent(i); 
 
    AliStack *stack = runLoader->Stack(); 
    trackRefTree=runLoader->TreeTR();
    TBranch *br = trackRefTree->GetBranch("TrackReferences");
    if(!br) {
      printf("no TR branch available , exiting \n");
      return;
    }
    br->SetAddress(&trackRef);

    Int_t nParticles = stack->GetNtrack();
    trackRefTree=runLoader->TreeTR();
    trackRefTree->SetBranchAddress("TrackReferences",&trackRef);
    for(Int_t p=0; p<nParticles; p++){ 
      if(stack->Particle(p)->Pt()<ptlimit) continue;
      if(isPrimary && !stack->IsPhysicalPrimary(p)) continue;
      trackRefTree->GetEntry(stack->TreeKEntry(p));

      if(IsTrackable(trackRef)) {
	cont++;
        hPtMc->Fill((stack->Particle(p))->Pt());
        hEtaMc->Fill((stack->Particle(p))->Eta());
      }
    }//loop on kine particle
    cout << " # trackable "<< cont; 

    // ESD
    tree->GetEvent(i);
    for (Int_t iTrack = 0; iTrack < esd->GetNumberOfTracks(); iTrack++) {
      AliESDtrack* track = esd->GetTrack(iTrack);
      if(track->Pt()<ptlimit) continue;      
      if(isPrimary && !stack->IsPhysicalPrimary(TMath::Abs(track->GetLabel()))) continue;
      if(track->GetNcls(0)<minNpoints) continue; // selection compatible with IsSelected
      ntrack++;
      hPtRec->Fill(track->Pt());
      hEtaRec->Fill(track->Eta());
      if(track->GetLabel()>=0) {
	hPtRecGood->Fill(stack->Particle(track->GetLabel())->Pt());
	hEtaRecGood->Fill(stack->Particle(track->GetLabel())->Eta());
      }
      hPtRecMc->Fill(stack->Particle(TMath::Abs(track->GetLabel()))->Pt());
      hEtaRecMc->Fill(stack->Particle(TMath::Abs(track->GetLabel()))->Eta());
    }// loop on tracks 
    cout << " tracks " << ntrack << endl;
   
  }//loop events
  
  cout << "Global Efficiency  "<< ntrack/cont << endl;

  TCanvas *c = new TCanvas();
  c->cd();
  c->cd()->SetLogy();
  c->cd()->SetGridy();
  c->cd()->SetGridx();
  c->cd()->SetObjectStat(0);
  hPtMc->SetMarkerStyle(20);
  hPtMc->Draw("err");
  hPtRec->SetLineColor(kRed);
  hPtRec->SetMarkerStyle(20);
  hPtRec->SetMarkerColor(kRed);
  hPtRec->Sumw2();
  hPtRec->Draw("sameerr");
  hPtRecMc->SetLineColor(kBlue);
  hPtRecMc->SetMarkerStyle(20);
  hPtRecMc->SetMarkerColor(kBlue);
  hPtRecMc->Sumw2();
  hPtRecMc->Draw("sameerr");
  hPtRecGood->SetLineColor(kGreen);
  hPtRecGood->SetMarkerStyle(20);
  hPtRecGood->SetMarkerColor(kGreen);
  hPtRecGood->Sumw2();
  hPtRecGood->Draw("sameerr");

  TLegend *leg = new TLegend(0.5,0.7,0.99,0.95);
  leg->SetHeader(Form("%s",title));
  leg->AddEntry(hPtRecGood,"Good tracks (positive labels)","p");
  leg->AddEntry(hPtRec,"Reconstructed tracks (Rec p_{T})","p");
  leg->AddEntry(hPtRecMc,"Reconstructed tracks ","p");
  leg->AddEntry(hPtMc,"MC trackable particles","p");
  leg->Draw();
  c->SaveAs(Form("ptdist_%s.png",titlet.Data()));

  TCanvas *cc = new TCanvas();
  cc->cd();
  cc->cd()->SetGridy();
  cc->cd()->SetGridx();
 
  Double_t max = 1.2;
 
  TH1F *effrec=new TH1F("hEffRec","tracking efficiency of reconstructed tracks",nbins,0,ptmax);
  effrec->Divide(hPtRecMc,hPtMc,1,1,"b");
  effrec->SetXTitle("p_{T} GeV/c");
  effrec->SetLineColor(kBlue);
  effrec->SetMarkerStyle(20);
  effrec->SetMarkerColor(kBlue);
  effrec->SetMaximum(max);
  effrec->SetMinimum(0);
  effrec->DrawCopy("err");


  TH1F *effrecgood=new TH1F("hEffRecGood","tracking efficiency of reconstructed tracks [positive labels]",nbins,0,ptmax);
  effrecgood->SetXTitle("P_{T}");
  effrecgood->Divide(hPtRecGood,hPtMc,1,1,"b");
  effrecgood->SetLineColor(kGreen);
  effrecgood->SetMarkerStyle(20);
  effrecgood->SetMarkerColor(kGreen);
  effrecgood->SetMaximum(max);
  effrecgood->SetMinimum(0);
  effrecgood->DrawCopy("sameerr");

  TH1F *purity=new TH1F("purity","track purity [positive labels / all tracks]",nbins,0,ptmax);
  purity->Divide(hPtRecGood,hPtRecMc,1,1,"b");
  purity->SetLineColor(kGray);
  purity->SetMarkerStyle(28);
  purity->SetMarkerColor(kOrange);
  purity->SetMaximum(max);
  purity->SetMinimum(0);
  purity->DrawCopy("sameerr");

  TH1F *fakes=new TH1F("fakes","fake ratio [negative labels / reconstructable]",nbins,0,ptmax);
  
  fakes->Add(hPtRecMc,hPtRecGood,1,-1);
  fakes->Divide(hPtMc);
  fakes->SetLineColor(kViolet);
  fakes->SetLineStyle(3);
  fakes->SetLineWidth(3);
  fakes->SetMarkerColor(kViolet);
  fakes->SetMaximum(max);
  fakes->SetMinimum(0);
  fakes->DrawCopy("samehist");

  TLegend *legEff = new TLegend(0.1,0.83,0.65,0.99);
  legEff->SetHeader(Form("%s",title));
  legEff->AddEntry(effrec,"Overall Efficiency ","p");
  legEff->AddEntry(effrecgood,"Efficiency good tracks (positive labels)","p");
  legEff->AddEntry(purity,"Purity (positive labels / All tracks)","p");
  legEff->AddEntry(fakes,"Fakes","l");
  legEff->Draw();

  cc->SaveAs(Form("efficiency_%s.png",titlet.Data()));


  TCanvas *cEta = new TCanvas();
  cEta->cd();
  cEta->cd()->SetGridy();
  cEta->cd()->SetGridx();
  cEta->cd()->SetObjectStat(0);
  hEtaMc->SetMarkerStyle(20);
  hEtaMc->Draw("err");
  hEtaMc->SetMinimum(0);
  hEtaRec->SetLineColor(kRed);
  hEtaRec->SetMarkerStyle(20);
  hEtaRec->SetMarkerColor(kRed);
  hEtaRec->Sumw2();
  hEtaRec->Draw("sameerr");
  hEtaRecMc->SetLineColor(kBlue);
  hEtaRecMc->SetMarkerStyle(20);
  hEtaRecMc->SetMarkerColor(kBlue);
  hEtaRecMc->Sumw2();
  hEtaRecMc->Draw("sameerr");
  hEtaRecGood->SetLineColor(kGreen);
  hEtaRecGood->SetMarkerStyle(20);
  hEtaRecGood->SetMarkerColor(kGreen);
  hEtaRecGood->Sumw2();
  hEtaRecGood->Draw("sameerr");

  TLegend *legEta = new TLegend(0.2,0.3,0.59,0.55);
  legEta->SetHeader(Form("%s",title));
  legEta->AddEntry(hEtaRecGood,"Good tracks (positive labels)","p");
  legEta->AddEntry(hEtaRec,"Reconstructed tracks (Rec p_{T})","p");
  legEta->AddEntry(hEtaRecMc,"Reconstructed tracks ","p");
  legEta->AddEntry(hEtaMc,"MC trackable particles","p");
  legEta->Draw();
  cEta->SaveAs(Form("etadist_%s.png",title));

  TCanvas *ccEta = new TCanvas();
  ccEta->cd();
  ccEta->cd()->SetGridy();
  ccEta->cd()->SetGridx();

  TH1F *effrecEta=new TH1F("hEffRecEta","#eta tracking efficiency of reconstructed tracks",nbinsEta,eta[0],eta[1]);
  effrecEta->Divide(hEtaRecMc,hEtaMc,1,1,"b");
  effrecEta->SetXTitle("#eta");
  effrecEta->SetLineColor(kBlue);
  effrecEta->SetMarkerStyle(20);
  effrecEta->SetMarkerColor(kBlue);
  effrecEta->SetMaximum(max);
  effrecEta->SetMinimum(0);
  effrecEta->DrawCopy("err");


  TH1F *effrecgoodEta=new TH1F("hEffRecGoodEta","#eta tracking efficiency of reconstructed tracks [positive labels]",nbinsEta,eta[0],eta[1]);
  effrecgoodEta->SetXTitle("eta");
  effrecgoodEta->Divide(hEtaRecGood,hEtaMc,1,1,"b");
  effrecgoodEta->SetLineColor(kGreen);
  effrecgoodEta->SetMarkerStyle(20);
  effrecgoodEta->SetMarkerColor(kGreen);
  effrecgoodEta->SetMaximum(max);
  effrecgoodEta->SetMinimum(0);
  effrecgoodEta->DrawCopy("sameerr");

  TH1F *purityEta=new TH1F("purityEta","#eta track purity [positive labels / all tracks]",nbinsEta,eta[0],eta[1]);
  purityEta->Divide(hEtaRecGood,hEtaRecMc,1,1,"b");
  purityEta->SetLineColor(kGray);
  purityEta->SetMarkerStyle(28);
  purityEta->SetMarkerColor(kOrange);
  purityEta->SetMaximum(max);
  purityEta->SetMinimum(0);
  purityEta->DrawCopy("sameerr");

  TH1F *fakesEta=new TH1F("fakesEta","#eta fake ratio [negative labels / reconstructable]",nbinsEta,eta[0],eta[1]);
  fakesEta->Add(hEtaRecMc,hEtaRecGood,1,-1);
  fakesEta->Divide(hEtaMc);
  fakesEta->SetLineColor(kViolet);
  fakesEta->SetLineStyle(3);
  fakesEta->SetLineWidth(3);
  fakesEta->SetMarkerColor(kViolet);
  fakesEta->SetMaximum(max);
  fakesEta->SetMinimum(0);
  fakesEta->DrawCopy("samehist");

  TLegend *legEffEta = new TLegend(0.3,0.3,0.75,0.55);
  legEffEta->SetHeader(Form("%s",title));
  legEffEta->AddEntry(effrecEta,"Overall Efficiency ","p");
  legEffEta->AddEntry(effrecgoodEta,"Efficiency good tracks (positive labels)","p");
  legEffEta->AddEntry(purityEta,"Purity (positive labels / All tracks)","p");
  legEffEta->AddEntry(fakesEta,"Fakes","l");
  legEffEta->Draw();

  ccEta->SaveAs(Form("efficiencyEta_%s.png",titlet.Data()));


}// main 

//___________________________________________________
Bool_t IsTrackable(TClonesArray *trackRef){

  Bool_t isOk=kFALSE;

  Int_t nTrackRef =0;
  TArrayF isInLayer(radii.GetSize());
  for(Int_t l=0; l<radii.GetSize(); l++ ) isInLayer.AddAt(0,l);
  for(Int_t nT =0; nT<trackRef->GetEntries(); nT++){
    AliTrackReference *trR = (AliTrackReference*)trackRef->At(nT);
    if(!trR) continue;
    if(trR->DetectorId()!=0)continue;
    Double_t rPart = TMath::Sqrt(trR->X()*trR->X()+trR->Y()*trR->Y());
    for(Int_t iLay=0;iLay<radii.GetSize();iLay++){
      if(TMath::Abs(rPart-radii.At(iLay))<0.01) isInLayer.AddAt(1,iLay);
    }
  }

  for(Int_t iLayer=0;iLayer<radii.GetSize();iLayer++){
    if(isInLayer.At(iLayer)) nTrackRef++;
  }

  if(nTrackRef>=minNpoints) isOk=kTRUE;
  return isOk; 
}

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