ROOT logo
TestTOFPID(const Char_t *filename, Bool_t calibrateESD = kTRUE, Bool_t correctTExp = kTRUE, Bool_t useT0TOF = kTRUE, Double_t timeResolution = 100., Bool_t tuneTOFMC = kFALSE)
{
  /* PID analysis */

  /* check MC flag */
  if (tuneTOFMC) calibrateESD = kFALSE;

  /* init ESD */
  TFile *filein = TFile::Open(filename);
  TTree *treein = (TTree *)filein->Get("esdTree");
  AliESDEvent *event = new AliESDEvent();
  event->ReadFromTree(treein);
  /* init OCDB */
  treein->GetEvent(0);
  Int_t run = event->GetRunNumber();
  AliCDBManager *cdb = AliCDBManager::Instance();
  cdb->SetDefaultStorage("raw://");
  cdb->SetRun(run);
  /* init TOF calibration */
  AliTOFcalib *tofCalib = new AliTOFcalib();
  if (correctTExp)
    tofCalib->SetCorrectTExp(kTRUE);
  tofCalib->Init();
  /* init TOF T0-maker */
  AliESDpid *fPIDesd = new AliESDpid();
  AliTOFT0maker *t0maker = new AliTOFT0maker(fPIDesd, tofCalib); 
  t0maker->SetTimeResolution(timeResolution);

  /* pid histos */
  TH2F *hTOFpid[AliPID::kSPECIES];
  TH2F *hTOFpidSigma[AliPID::kSPECIES];
  for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
    hTOFpid[ipart] = new TH2F(Form("hTOFpid_%s", AliPID::ParticleName(ipart)), Form("%s-ID;p (GeV/c);t - t^{%s}_{exp} (ps)", AliPID::ParticleName(ipart), AliPID::ParticleLatexName(ipart)), 200, 0., 10., 2000, -24400., 24400.);
    hTOFpidSigma[ipart] = new TH2F(Form("hTOFpidSigma_%s", AliPID::ParticleName(ipart)), Form("%s-ID;p (GeV/c);(t - t^{%s}_{exp}) / #sigma^{%s}_{exp} (ps)", AliPID::ParticleName(ipart), AliPID::ParticleLatexName(ipart), AliPID::ParticleLatexName(ipart)), 200, 0., 10., 2000, -10., 10.);
  }

  AliESDtrack *track;
  Double_t p, time, timei[AliPID::kSPECIESC], sigma[AliPID::kSPECIES];
  /* loop over events */
  for (Int_t iev = 0; iev < treein->GetEntries(); iev++) {
    
    /* get event */
    treein->GetEvent(iev);

    /* calibrate ESD */
    if (calibrateESD)
      tofCalib->CalibrateESD(event);

    /* tune TOF if requested for MC */
    if (tuneTOFMC) {
      t0maker->TuneForMC(event);
    }

    /* compute and apply T0-TOF */
    if (useT0TOF) {
      t0maker->ComputeT0TOF(event);
      t0maker->ApplyT0TOF(event);
      fPIDesd->MakePID(event,kFALSE,0.);
    }

    /* loop over tracks */
    for (Int_t itrk = 0; itrk < event->GetNumberOfTracks(); itrk++) {
      track = event->GetTrack(itrk);
      /* check TOF match */
      if (!track || 
	  !(track->GetStatus() & AliESDtrack::kTOFout) ||
	  !(track->GetStatus() & AliESDtrack::kTIME)) continue;

      /* get track momentum */
      p = track->P();
      /* get TOF time */
      time = track->GetTOFsignal();
      /* get expected times */
      track->GetIntegratedTimes(timei);

      /* fill PID histos */
      for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++){
	sigma[ipart] = t0maker->GetExpectedSigma(p, timei[ipart], AliPID::ParticleMass(ipart));
	hTOFpid[ipart]->Fill(p, (time - timei[ipart])); 
	hTOFpidSigma[ipart]->Fill(p, (time - timei[ipart]) / sigma[ipart]); 
      }
    }
  }
  
  /* write output */
  TFile *fileout = TFile::Open("testPID.root", "RECREATE");
  for (Int_t ipart = 0; ipart < 5; ipart++){
    hTOFpid[ipart]->Write();
    hTOFpidSigma[ipart]->Write();
  }
  fileout->Close();
}
 TestTOFPID.C:1
 TestTOFPID.C:2
 TestTOFPID.C:3
 TestTOFPID.C:4
 TestTOFPID.C:5
 TestTOFPID.C:6
 TestTOFPID.C:7
 TestTOFPID.C:8
 TestTOFPID.C:9
 TestTOFPID.C:10
 TestTOFPID.C:11
 TestTOFPID.C:12
 TestTOFPID.C:13
 TestTOFPID.C:14
 TestTOFPID.C:15
 TestTOFPID.C:16
 TestTOFPID.C:17
 TestTOFPID.C:18
 TestTOFPID.C:19
 TestTOFPID.C:20
 TestTOFPID.C:21
 TestTOFPID.C:22
 TestTOFPID.C:23
 TestTOFPID.C:24
 TestTOFPID.C:25
 TestTOFPID.C:26
 TestTOFPID.C:27
 TestTOFPID.C:28
 TestTOFPID.C:29
 TestTOFPID.C:30
 TestTOFPID.C:31
 TestTOFPID.C:32
 TestTOFPID.C:33
 TestTOFPID.C:34
 TestTOFPID.C:35
 TestTOFPID.C:36
 TestTOFPID.C:37
 TestTOFPID.C:38
 TestTOFPID.C:39
 TestTOFPID.C:40
 TestTOFPID.C:41
 TestTOFPID.C:42
 TestTOFPID.C:43
 TestTOFPID.C:44
 TestTOFPID.C:45
 TestTOFPID.C:46
 TestTOFPID.C:47
 TestTOFPID.C:48
 TestTOFPID.C:49
 TestTOFPID.C:50
 TestTOFPID.C:51
 TestTOFPID.C:52
 TestTOFPID.C:53
 TestTOFPID.C:54
 TestTOFPID.C:55
 TestTOFPID.C:56
 TestTOFPID.C:57
 TestTOFPID.C:58
 TestTOFPID.C:59
 TestTOFPID.C:60
 TestTOFPID.C:61
 TestTOFPID.C:62
 TestTOFPID.C:63
 TestTOFPID.C:64
 TestTOFPID.C:65
 TestTOFPID.C:66
 TestTOFPID.C:67
 TestTOFPID.C:68
 TestTOFPID.C:69
 TestTOFPID.C:70
 TestTOFPID.C:71
 TestTOFPID.C:72
 TestTOFPID.C:73
 TestTOFPID.C:74
 TestTOFPID.C:75
 TestTOFPID.C:76
 TestTOFPID.C:77
 TestTOFPID.C:78
 TestTOFPID.C:79
 TestTOFPID.C:80
 TestTOFPID.C:81
 TestTOFPID.C:82
 TestTOFPID.C:83
 TestTOFPID.C:84
 TestTOFPID.C:85
 TestTOFPID.C:86
 TestTOFPID.C:87
 TestTOFPID.C:88
 TestTOFPID.C:89
 TestTOFPID.C:90
 TestTOFPID.C:91
 TestTOFPID.C:92
 TestTOFPID.C:93