ROOT logo
void AliTOFanalyzeMatching(const char* datafile)
{

  //
  // Matching efficiency and contamination
  // for different particle species
  // (pions, kaons and protons).
  // All histos are saved into a separate file
  // datafile is assumed to be the file name containing
  // the results of the matching in TNtuple format.
  //
  // Author: F. Pierella | pierella@bo.infn.it
  //
  // Use case:
  // start root
  // root[0] .L AliTOFanalyzeMatching.C
  // root[1] AliTOFanalyzeMatching("matchingNtuple.root")

  // output (histos!) filename
  char outFileName[100];
  strcpy(outFileName,"histo");
  strcat(outFileName,datafile);
  
  // dummy histos (for normalization)
  TH1F* hpitot= new TH1F("hpitot","",12,0.,3.);
  TH1F* hkatot= new TH1F("hkatot","",12,0.,3.);
  TH1F* hprtot= new TH1F("hprtot","",12,0.,3.);
  
  TH1F* hpimatched= new TH1F("hpimatched","",12,0.,3.);
  TH1F* hkamatched= new TH1F("hkamatched","",12,0.,3.);
  TH1F* hprmatched= new TH1F("hprmatched","",12,0.,3.);
  
  
  // matching efficiency histos
  TH1F* hpimatcheff= new TH1F("hpimatcheff","Matching efficiency for pions",12,0.,3.);
  TH1F* hkamatcheff= new TH1F("hkamatcheff","Matching efficiency for kaons",12,0.,3.);
  TH1F* hprmatcheff= new TH1F("hprmatcheff","Matching efficiency for protons",12,0.,3.);

  // matching contamination histos
  TH1F* hpimatchcon= new TH1F("hpimatchcon","Matching contamination for pions",12,0.,3.);
  TH1F* hkamatchcon= new TH1F("hkamatchcon","Matching contamination for kaons",12,0.,3.);
  TH1F* hprmatchcon= new TH1F("hprmatchcon","Matching contamination for protons",12,0.,3.);
  
  
  TFile *file = TFile::Open(datafile,"old");
  TNtuple* fNtuple= (TNtuple*)file->Get("Ntuple"); // get ntuple from file
  Int_t nvar = fNtuple->GetNvar(); cout <<"N of var.="<< nvar << endl;
  fNtuple->GetEvent(0);
  
  file->cd();
  Int_t nparticles = (Int_t)fNtuple->GetEntries();
  
  for (Int_t i=0; i < nparticles; i++) {
    fNtuple->GetEvent(i);
    Int_t event=fNtuple->GetLeaf("event")->GetValue();   
    Int_t pdgcode=fNtuple->GetLeaf("ipart")->GetValue(); 
    Int_t matc=fNtuple->GetLeaf("matc")->GetValue(0);
    Float_t px=fNtuple->GetLeaf("pxvtx")->GetValue(0);
    Float_t py=fNtuple->GetLeaf("pyvtx")->GetValue(0);
    Float_t pz=fNtuple->GetLeaf("pzvtx")->GetValue(0);
    
    Float_t pvtx=TMath::Sqrt(px*px+py*py+pz*pz);  
    Float_t ptvtx=TMath::Sqrt(px*px+py*py);
    Int_t abspdgcode=TMath::Abs(pdgcode);
    

    // N (1+2+3+4+(-4)) cases
    if(matc>=1 || matc==-4){
      switch(abspdgcode){
      case 211:
	hpitot->Fill(pvtx);
	break;
      case 321:
	hkatot->Fill(pvtx);
	break;
      case 2212:
	hprtot->Fill(pvtx);
	break;
      }
    }


    // N_matched (3+4) cases
    if(matc==3 || matc==4){
      switch(abspdgcode){
      case 211:
	hpimatched->Fill(pvtx);
	break;
      case 321:
	hkamatched->Fill(pvtx);
	break;
      case 2212:
	hprmatched->Fill(pvtx);
	break;
      }
    }


    // N_t (3) case
    if(matc==3){
      switch(abspdgcode){
      case 211:
	hpimatcheff->Fill(pvtx);
	break;
      case 321:
	hkamatcheff->Fill(pvtx);
	break;
      case 2212:
	hprmatcheff->Fill(pvtx);
	break;
      }
    }

    // N_w (4) case
    if(matc==4){
      switch(abspdgcode){
      case 211:
	hpimatchcon->Fill(pvtx);
	break;
      case 321:
	hkamatchcon->Fill(pvtx);
	break;
      case 2212:
	hprmatchcon->Fill(pvtx);
	break;
      }
    }

  }

  // histo normalization
  // efficiency
  hpimatcheff->Divide(hpitot);
  hkamatcheff->Divide(hkatot);
  hprmatcheff->Divide(hprtot);

  // contamination
  hpimatchcon->Divide(hpimatched);
  hkamatchcon->Divide(hkamatched);
  hprmatchcon->Divide(hprmatched);


  TFile *houtfile = new TFile(outFileName,"recreate");
  houtfile->cd();

  hpitot->Write();
  hkatot->Write();
  hprtot->Write();
    
  hpimatched->Write();
  hkamatched->Write();
  hprmatched->Write();
    
  hpimatcheff->Write();
  hkamatcheff->Write();
  hprmatcheff->Write();

  hpimatchcon->Write();
  hkamatchcon->Write();
  hprmatchcon->Write();
  houtfile->Close();   

  cout << "File " << outFileName << " with histos has been created" << endl;
}
 AliTOFanalyzeMatching.C:1
 AliTOFanalyzeMatching.C:2
 AliTOFanalyzeMatching.C:3
 AliTOFanalyzeMatching.C:4
 AliTOFanalyzeMatching.C:5
 AliTOFanalyzeMatching.C:6
 AliTOFanalyzeMatching.C:7
 AliTOFanalyzeMatching.C:8
 AliTOFanalyzeMatching.C:9
 AliTOFanalyzeMatching.C:10
 AliTOFanalyzeMatching.C:11
 AliTOFanalyzeMatching.C:12
 AliTOFanalyzeMatching.C:13
 AliTOFanalyzeMatching.C:14
 AliTOFanalyzeMatching.C:15
 AliTOFanalyzeMatching.C:16
 AliTOFanalyzeMatching.C:17
 AliTOFanalyzeMatching.C:18
 AliTOFanalyzeMatching.C:19
 AliTOFanalyzeMatching.C:20
 AliTOFanalyzeMatching.C:21
 AliTOFanalyzeMatching.C:22
 AliTOFanalyzeMatching.C:23
 AliTOFanalyzeMatching.C:24
 AliTOFanalyzeMatching.C:25
 AliTOFanalyzeMatching.C:26
 AliTOFanalyzeMatching.C:27
 AliTOFanalyzeMatching.C:28
 AliTOFanalyzeMatching.C:29
 AliTOFanalyzeMatching.C:30
 AliTOFanalyzeMatching.C:31
 AliTOFanalyzeMatching.C:32
 AliTOFanalyzeMatching.C:33
 AliTOFanalyzeMatching.C:34
 AliTOFanalyzeMatching.C:35
 AliTOFanalyzeMatching.C:36
 AliTOFanalyzeMatching.C:37
 AliTOFanalyzeMatching.C:38
 AliTOFanalyzeMatching.C:39
 AliTOFanalyzeMatching.C:40
 AliTOFanalyzeMatching.C:41
 AliTOFanalyzeMatching.C:42
 AliTOFanalyzeMatching.C:43
 AliTOFanalyzeMatching.C:44
 AliTOFanalyzeMatching.C:45
 AliTOFanalyzeMatching.C:46
 AliTOFanalyzeMatching.C:47
 AliTOFanalyzeMatching.C:48
 AliTOFanalyzeMatching.C:49
 AliTOFanalyzeMatching.C:50
 AliTOFanalyzeMatching.C:51
 AliTOFanalyzeMatching.C:52
 AliTOFanalyzeMatching.C:53
 AliTOFanalyzeMatching.C:54
 AliTOFanalyzeMatching.C:55
 AliTOFanalyzeMatching.C:56
 AliTOFanalyzeMatching.C:57
 AliTOFanalyzeMatching.C:58
 AliTOFanalyzeMatching.C:59
 AliTOFanalyzeMatching.C:60
 AliTOFanalyzeMatching.C:61
 AliTOFanalyzeMatching.C:62
 AliTOFanalyzeMatching.C:63
 AliTOFanalyzeMatching.C:64
 AliTOFanalyzeMatching.C:65
 AliTOFanalyzeMatching.C:66
 AliTOFanalyzeMatching.C:67
 AliTOFanalyzeMatching.C:68
 AliTOFanalyzeMatching.C:69
 AliTOFanalyzeMatching.C:70
 AliTOFanalyzeMatching.C:71
 AliTOFanalyzeMatching.C:72
 AliTOFanalyzeMatching.C:73
 AliTOFanalyzeMatching.C:74
 AliTOFanalyzeMatching.C:75
 AliTOFanalyzeMatching.C:76
 AliTOFanalyzeMatching.C:77
 AliTOFanalyzeMatching.C:78
 AliTOFanalyzeMatching.C:79
 AliTOFanalyzeMatching.C:80
 AliTOFanalyzeMatching.C:81
 AliTOFanalyzeMatching.C:82
 AliTOFanalyzeMatching.C:83
 AliTOFanalyzeMatching.C:84
 AliTOFanalyzeMatching.C:85
 AliTOFanalyzeMatching.C:86
 AliTOFanalyzeMatching.C:87
 AliTOFanalyzeMatching.C:88
 AliTOFanalyzeMatching.C:89
 AliTOFanalyzeMatching.C:90
 AliTOFanalyzeMatching.C:91
 AliTOFanalyzeMatching.C:92
 AliTOFanalyzeMatching.C:93
 AliTOFanalyzeMatching.C:94
 AliTOFanalyzeMatching.C:95
 AliTOFanalyzeMatching.C:96
 AliTOFanalyzeMatching.C:97
 AliTOFanalyzeMatching.C:98
 AliTOFanalyzeMatching.C:99
 AliTOFanalyzeMatching.C:100
 AliTOFanalyzeMatching.C:101
 AliTOFanalyzeMatching.C:102
 AliTOFanalyzeMatching.C:103
 AliTOFanalyzeMatching.C:104
 AliTOFanalyzeMatching.C:105
 AliTOFanalyzeMatching.C:106
 AliTOFanalyzeMatching.C:107
 AliTOFanalyzeMatching.C:108
 AliTOFanalyzeMatching.C:109
 AliTOFanalyzeMatching.C:110
 AliTOFanalyzeMatching.C:111
 AliTOFanalyzeMatching.C:112
 AliTOFanalyzeMatching.C:113
 AliTOFanalyzeMatching.C:114
 AliTOFanalyzeMatching.C:115
 AliTOFanalyzeMatching.C:116
 AliTOFanalyzeMatching.C:117
 AliTOFanalyzeMatching.C:118
 AliTOFanalyzeMatching.C:119
 AliTOFanalyzeMatching.C:120
 AliTOFanalyzeMatching.C:121
 AliTOFanalyzeMatching.C:122
 AliTOFanalyzeMatching.C:123
 AliTOFanalyzeMatching.C:124
 AliTOFanalyzeMatching.C:125
 AliTOFanalyzeMatching.C:126
 AliTOFanalyzeMatching.C:127
 AliTOFanalyzeMatching.C:128
 AliTOFanalyzeMatching.C:129
 AliTOFanalyzeMatching.C:130
 AliTOFanalyzeMatching.C:131
 AliTOFanalyzeMatching.C:132
 AliTOFanalyzeMatching.C:133
 AliTOFanalyzeMatching.C:134
 AliTOFanalyzeMatching.C:135
 AliTOFanalyzeMatching.C:136
 AliTOFanalyzeMatching.C:137
 AliTOFanalyzeMatching.C:138
 AliTOFanalyzeMatching.C:139
 AliTOFanalyzeMatching.C:140
 AliTOFanalyzeMatching.C:141
 AliTOFanalyzeMatching.C:142
 AliTOFanalyzeMatching.C:143
 AliTOFanalyzeMatching.C:144
 AliTOFanalyzeMatching.C:145
 AliTOFanalyzeMatching.C:146
 AliTOFanalyzeMatching.C:147
 AliTOFanalyzeMatching.C:148
 AliTOFanalyzeMatching.C:149
 AliTOFanalyzeMatching.C:150
 AliTOFanalyzeMatching.C:151
 AliTOFanalyzeMatching.C:152
 AliTOFanalyzeMatching.C:153
 AliTOFanalyzeMatching.C:154
 AliTOFanalyzeMatching.C:155
 AliTOFanalyzeMatching.C:156
 AliTOFanalyzeMatching.C:157
 AliTOFanalyzeMatching.C:158
 AliTOFanalyzeMatching.C:159
 AliTOFanalyzeMatching.C:160
 AliTOFanalyzeMatching.C:161
 AliTOFanalyzeMatching.C:162
 AliTOFanalyzeMatching.C:163
 AliTOFanalyzeMatching.C:164
 AliTOFanalyzeMatching.C:165