ROOT logo
enum ECharge_t {
  kPositive,
  kNegative,
  kNCharges
};
const Char_t *chargeName[kNCharges] = {
  "positive",
  "negative",
};

TOFcalibMC_centrality(const Char_t *filename, Int_t evMax = kMaxInt)
{

  /* include path for ACLic */
  gSystem->AddIncludePath("-I$ALICE_ROOT/include");
  gSystem->AddIncludePath("-I$ALICE_ROOT/TOF");
  /* load libraries */
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  /* build analysis task class */
  gROOT->LoadMacro("AliAnalysisParticle.cxx+g");
  gROOT->LoadMacro("AliAnalysisEvent.cxx+g");
  gROOT->LoadMacro("AliAnalysisTrack.cxx+g");

  /* open file, get tree and connect */
  TFile *filein = TFile::Open(filename);
  TTree *treein = (TTree *)filein->Get("aodTree");
  printf("got \"aodTree\": %d entries\n", treein->GetEntries());
  AliAnalysisEvent *analysisEvent = new AliAnalysisEvent();
  TClonesArray *analysisTrackArray = new TClonesArray("AliAnalysisTrack");
  AliAnalysisTrack *analysisTrack = NULL;
  treein->SetBranchAddress("AnalysisEvent", &analysisEvent);
  treein->SetBranchAddress("AnalysisTrack", &analysisTrackArray);

  /* histos */
  TH2F *hTOFcalib_centrality = new TH2F("hTOFcalib_centrality", "", 18, 0., 90., 200, -2440., 2440.);

  /* loop over events */
  Double_t cent, p, time, t0, tof, texp, deltat, timezerocorr, texpcorr;
  for (Int_t iev = 0; iev < treein->GetEntries() && iev < evMax; iev++) {
    /* get event */
    treein->GetEvent(iev);
    if (iev % 1000 == 0) printf("iev = %d\n", iev);
    /* check vertex */
    if (!analysisEvent->AcceptVertex()) continue;
    /* check collision candidate */
    if (!analysisEvent->IsCollisionCandidate()) continue;
    /* check centrality quality */
    if (analysisEvent->GetCentralityQuality() != 0.) continue;
    
    /*** ACCEPTED EVENT ***/

    /* apply time-zero TOF correction */
    analysisEvent->ApplyTimeZeroTOFCorrection();
    
    /* get centrality */
    cent = analysisEvent->GetCentralityPercentile(AliAnalysisEvent::kCentEst_V0M);

    /* loop over tracks */
    for (Int_t itrk = 0; itrk < analysisTrackArray->GetEntries(); itrk++) {
      /* get track */
      analysisTrack = (AliAnalysisTrack *)analysisTrackArray->At(itrk);
      if (!analysisTrack) continue;
      /* check TOF PID */
      if (!analysisTrack->HasTOFPID()) continue;

      /*** ACCEPTED TRACK WITH TOF PID ***/

      /* apply expected time correction */
      analysisTrack->ApplyTOFExpectedTimeCorrection();

      p = analysisTrack->GetP();
      time = analysisTrack->GetTOFTime();
      t0 = analysisEvent->GetTimeZeroTOF(p);
      tof = time - t0;
      texp = analysisTrack->GetTOFExpTime(AliPID::kPion);
      deltat = tof - texp;

      hTOFcalib_centrality->Fill(cent, deltat);

      } /* end of loop over particles */
  } /* end of loop over events */

  /* output */
  TFile *fileout = TFile::Open(Form("TOFcalibMC_centrality.%s", filename), "RECREATE");
  hTOFcalib_centrality->Write();
  fileout->Close();

}

TOFcalibMC_texp(const Char_t *filename, Int_t evMax = kMaxInt)
{

  /* include path for ACLic */
  gSystem->AddIncludePath("-I$ALICE_ROOT/include");
  gSystem->AddIncludePath("-I$ALICE_ROOT/TOF");
  /* load libraries */
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  /* build analysis task class */
  gROOT->LoadMacro("AliAnalysisParticle.cxx+g");
  gROOT->LoadMacro("AliAnalysisEvent.cxx+g");
  gROOT->LoadMacro("AliAnalysisTrack.cxx+g");

  /* open file, get tree and connect */
  TFile *filein = TFile::Open(filename);
  TTree *treein = (TTree *)filein->Get("aodTree");
  printf("got \"aodTree\": %d entries\n", treein->GetEntries());
  AliAnalysisEvent *analysisEvent = new AliAnalysisEvent();
  TClonesArray *analysisTrackArray = new TClonesArray("AliAnalysisTrack");
  AliAnalysisTrack *analysisTrack = NULL;
  treein->SetBranchAddress("AnalysisEvent", &analysisEvent);
  treein->SetBranchAddress("AnalysisTrack", &analysisTrackArray);

  /* histos */
  TH2F *hTOFcalib_texp[AliPID::kSPECIES][kNCharges];
  TH2F *hTOFcalib_texpr[AliPID::kSPECIES][kNCharges];
  for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
    for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
      hTOFcalib_texp[ipart][icharge] = new TH2F(Form("hTOFcalib_texp_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]), "", 100., 0., 5., 400, -4880., 4880.);
      hTOFcalib_texpr[ipart][icharge] = new TH2F(Form("hTOFcalib_texpr_%s_%s", AliPID::ParticleName(ipart), chargeName[icharge]), "", 100., 0., 5., 400, 0.8, 1.2);
    }
  }

  /* loop over events */
  Int_t charge;
  Double_t cent, p, pt, time, t0, tof, texp, deltat, timezerocorr, texpcorr;
  for (Int_t iev = 0; iev < treein->GetEntries() && iev < evMax; iev++) {
    /* get event */
    treein->GetEvent(iev);
    if (iev % 1000 == 0) printf("iev = %d\n", iev);
    /* check vertex */
    if (!analysisEvent->AcceptVertex()) continue;
    /* check collision candidate */
    if (!analysisEvent->IsCollisionCandidate()) continue;
    /* check centrality quality */
    if (analysisEvent->GetCentralityQuality() != 0.) continue;
    
    /*** ACCEPTED EVENT ***/

    /* apply time-zero TOF correction */
    analysisEvent->ApplyTimeZeroTOFCorrection();
    
    /* get centrality */
    cent = analysisEvent->GetCentralityPercentile(AliAnalysisEvent::kCentEst_V0M);
    //    if (cent > 90.) continue;

    /* loop over tracks */
    for (Int_t itrk = 0; itrk < analysisTrackArray->GetEntries(); itrk++) {
      /* get track */
      analysisTrack = (AliAnalysisTrack *)analysisTrackArray->At(itrk);
      if (!analysisTrack) continue;
      /* check eta */
      if (TMath::Abs(analysisTrack->GetEta()) > 0.8) continue;
      /* check TOF PID */
      if (!analysisTrack->HasTOFPID()) continue;
      /* get charge */
      charge = analysisTrack->GetSign() > 0. ? kPositive : kNegative;
      /* check charged primary with defined PID */
      Int_t ipart = analysisTrack->GetMCPID();
      if (!analysisTrack->IsMCPrimary() || ipart < 0 || analysisTrack->GetSign() == 0.) continue;
      /* check mismatch */
      if (analysisTrack->IsMismatchMC()) continue;

      /*** ACCEPTED TRACK WITH TOF PID ***/

      /* apply expected time correction */
      //      analysisTrack->ApplyTOFExpectedTimeCorrection();

      p = analysisTrack->GetP();
      time = analysisTrack->GetTOFTime();
      t0 = analysisEvent->GetTimeZeroTOF(p);
      tof = time - t0;

      texp = analysisTrack->GetTOFExpTime(ipart);
      deltat = tof - texp;
      
      hTOFcalib_texp[ipart][charge]->Fill(p, deltat);
      hTOFcalib_texpr[ipart][charge]->Fill(p, tof / texp);
      
    } /* end of loop over tracks */
  } /* end of loop over events */

  /* output */
  TFile *fileout = TFile::Open(Form("TOFcalibMC_texp.%s", filename), "RECREATE");
  for (Int_t ipart = 0; ipart < AliPID::kSPECIES; ipart++) {
    for (Int_t icharge = 0; icharge < kNCharges; icharge++) {
      hTOFcalib_texp[ipart][icharge]->Write();
      hTOFcalib_texpr[ipart][icharge]->Write();
    }
  }
  fileout->Close();

}

 TOFcalibMC.C:1
 TOFcalibMC.C:2
 TOFcalibMC.C:3
 TOFcalibMC.C:4
 TOFcalibMC.C:5
 TOFcalibMC.C:6
 TOFcalibMC.C:7
 TOFcalibMC.C:8
 TOFcalibMC.C:9
 TOFcalibMC.C:10
 TOFcalibMC.C:11
 TOFcalibMC.C:12
 TOFcalibMC.C:13
 TOFcalibMC.C:14
 TOFcalibMC.C:15
 TOFcalibMC.C:16
 TOFcalibMC.C:17
 TOFcalibMC.C:18
 TOFcalibMC.C:19
 TOFcalibMC.C:20
 TOFcalibMC.C:21
 TOFcalibMC.C:22
 TOFcalibMC.C:23
 TOFcalibMC.C:24
 TOFcalibMC.C:25
 TOFcalibMC.C:26
 TOFcalibMC.C:27
 TOFcalibMC.C:28
 TOFcalibMC.C:29
 TOFcalibMC.C:30
 TOFcalibMC.C:31
 TOFcalibMC.C:32
 TOFcalibMC.C:33
 TOFcalibMC.C:34
 TOFcalibMC.C:35
 TOFcalibMC.C:36
 TOFcalibMC.C:37
 TOFcalibMC.C:38
 TOFcalibMC.C:39
 TOFcalibMC.C:40
 TOFcalibMC.C:41
 TOFcalibMC.C:42
 TOFcalibMC.C:43
 TOFcalibMC.C:44
 TOFcalibMC.C:45
 TOFcalibMC.C:46
 TOFcalibMC.C:47
 TOFcalibMC.C:48
 TOFcalibMC.C:49
 TOFcalibMC.C:50
 TOFcalibMC.C:51
 TOFcalibMC.C:52
 TOFcalibMC.C:53
 TOFcalibMC.C:54
 TOFcalibMC.C:55
 TOFcalibMC.C:56
 TOFcalibMC.C:57
 TOFcalibMC.C:58
 TOFcalibMC.C:59
 TOFcalibMC.C:60
 TOFcalibMC.C:61
 TOFcalibMC.C:62
 TOFcalibMC.C:63
 TOFcalibMC.C:64
 TOFcalibMC.C:65
 TOFcalibMC.C:66
 TOFcalibMC.C:67
 TOFcalibMC.C:68
 TOFcalibMC.C:69
 TOFcalibMC.C:70
 TOFcalibMC.C:71
 TOFcalibMC.C:72
 TOFcalibMC.C:73
 TOFcalibMC.C:74
 TOFcalibMC.C:75
 TOFcalibMC.C:76
 TOFcalibMC.C:77
 TOFcalibMC.C:78
 TOFcalibMC.C:79
 TOFcalibMC.C:80
 TOFcalibMC.C:81
 TOFcalibMC.C:82
 TOFcalibMC.C:83
 TOFcalibMC.C:84
 TOFcalibMC.C:85
 TOFcalibMC.C:86
 TOFcalibMC.C:87
 TOFcalibMC.C:88
 TOFcalibMC.C:89
 TOFcalibMC.C:90
 TOFcalibMC.C:91
 TOFcalibMC.C:92
 TOFcalibMC.C:93
 TOFcalibMC.C:94
 TOFcalibMC.C:95
 TOFcalibMC.C:96
 TOFcalibMC.C:97
 TOFcalibMC.C:98
 TOFcalibMC.C:99
 TOFcalibMC.C:100
 TOFcalibMC.C:101
 TOFcalibMC.C:102
 TOFcalibMC.C:103
 TOFcalibMC.C:104
 TOFcalibMC.C:105
 TOFcalibMC.C:106
 TOFcalibMC.C:107
 TOFcalibMC.C:108
 TOFcalibMC.C:109
 TOFcalibMC.C:110
 TOFcalibMC.C:111
 TOFcalibMC.C:112
 TOFcalibMC.C:113
 TOFcalibMC.C:114
 TOFcalibMC.C:115
 TOFcalibMC.C:116
 TOFcalibMC.C:117
 TOFcalibMC.C:118
 TOFcalibMC.C:119
 TOFcalibMC.C:120
 TOFcalibMC.C:121
 TOFcalibMC.C:122
 TOFcalibMC.C:123
 TOFcalibMC.C:124
 TOFcalibMC.C:125
 TOFcalibMC.C:126
 TOFcalibMC.C:127
 TOFcalibMC.C:128
 TOFcalibMC.C:129
 TOFcalibMC.C:130
 TOFcalibMC.C:131
 TOFcalibMC.C:132
 TOFcalibMC.C:133
 TOFcalibMC.C:134
 TOFcalibMC.C:135
 TOFcalibMC.C:136
 TOFcalibMC.C:137
 TOFcalibMC.C:138
 TOFcalibMC.C:139
 TOFcalibMC.C:140
 TOFcalibMC.C:141
 TOFcalibMC.C:142
 TOFcalibMC.C:143
 TOFcalibMC.C:144
 TOFcalibMC.C:145
 TOFcalibMC.C:146
 TOFcalibMC.C:147
 TOFcalibMC.C:148
 TOFcalibMC.C:149
 TOFcalibMC.C:150
 TOFcalibMC.C:151
 TOFcalibMC.C:152
 TOFcalibMC.C:153
 TOFcalibMC.C:154
 TOFcalibMC.C:155
 TOFcalibMC.C:156
 TOFcalibMC.C:157
 TOFcalibMC.C:158
 TOFcalibMC.C:159
 TOFcalibMC.C:160
 TOFcalibMC.C:161
 TOFcalibMC.C:162
 TOFcalibMC.C:163
 TOFcalibMC.C:164
 TOFcalibMC.C:165
 TOFcalibMC.C:166
 TOFcalibMC.C:167
 TOFcalibMC.C:168
 TOFcalibMC.C:169
 TOFcalibMC.C:170
 TOFcalibMC.C:171
 TOFcalibMC.C:172
 TOFcalibMC.C:173
 TOFcalibMC.C:174
 TOFcalibMC.C:175
 TOFcalibMC.C:176
 TOFcalibMC.C:177
 TOFcalibMC.C:178
 TOFcalibMC.C:179
 TOFcalibMC.C:180
 TOFcalibMC.C:181
 TOFcalibMC.C:182
 TOFcalibMC.C:183
 TOFcalibMC.C:184
 TOFcalibMC.C:185
 TOFcalibMC.C:186
 TOFcalibMC.C:187
 TOFcalibMC.C:188
 TOFcalibMC.C:189
 TOFcalibMC.C:190
 TOFcalibMC.C:191
 TOFcalibMC.C:192
 TOFcalibMC.C:193
 TOFcalibMC.C:194
 TOFcalibMC.C:195
 TOFcalibMC.C:196