ROOT logo

/* $Id$ */

//===================================================================
//  Class AliAnalysisTaskLUT
//
//  Extract ESD muon tracks information and store in ntuple.
//  Used for offline calculation/adjustment of Look-up-Tables for the
//  trigger chambers.
//
//  Clermont-Ferrand 2008
//===================================================================

#define AliAnalysisTaskLUT_cxx

#include "Riostream.h"
#include "TChain.h"
#include "TTree.h"
#include "TNtuple.h"

#include "AliESDEvent.h"
#include "AliESDVertex.h"
#include "AliESDMuonTrack.h"

#include "AliAnalysisTask.h"
#include "AliAnalysisTaskLUT.h"

ClassImp(AliAnalysisTaskLUT)

//________________________________________________________________________
AliAnalysisTaskLUT::AliAnalysisTaskLUT(const char *name) :
  AliAnalysisTask(name,""), 
  fESDEvent(0), 
  fTracksLUT(0)
{
  // Constructor.
  // Input slot #0 works with a TChain
  DefineInput(0, TChain::Class());

  // Output slot #0 writes into a TNtuple container
  DefineOutput(0, TNtuple::Class());

}

//___________________________________________________________________________
void AliAnalysisTaskLUT::ConnectInputData(Option_t *) 
{
  // Input ESD tree
  printf("   ConnectInputData of task %s\n", GetName());

  TTree *tinput = (TTree*)GetInputData(0);
  fESDEvent = new AliESDEvent();
  fESDEvent->ReadFromTree(tinput);

}

//___________________________________________________________________________
void AliAnalysisTaskLUT::CreateOutputObjects() 
{
  // Output object (TNtuple)
  printf("   CreateOutputObjects of task %s\n", GetName());
  
  fTracksLUT = new TNtuple("ntTracksLUT","ntTracksLUT","TrigMask:VertZ:NHit:Circ:StripX:StripY:Dev:Lpt:Hpt:Chi2:Chi2trg:Z:P:Pt:Phi:The:TrackZ:PU:PtU:PhiU:TheU:TrackZU");

}

//________________________________________________________________________
void AliAnalysisTaskLUT::Exec(Option_t *) 
{
  // Execution
  Float_t ntvar[22];

  Float_t px, py, pz, pt;
  Float_t zVertex;
  Int_t dev;

  if (!fESDEvent) return;
  
  Int_t nTracks = fESDEvent->GetNumberOfMuonTracks();

  AliESDVertex* vertex = (AliESDVertex*) fESDEvent->GetVertex();
  zVertex = 0.0;
  if (vertex) {
    zVertex = vertex->GetZ();
  }
  ULong64_t mask = fESDEvent->GetTriggerMask();

  ntvar[ 0] = mask;
  ntvar[ 1] = zVertex;

  for(Int_t iTracks = 0; iTracks < nTracks; iTracks++) {

    AliESDMuonTrack* muonTrack = fESDEvent->GetMuonTrack(iTracks);
    if (muonTrack == 0x0) continue;

    if (!muonTrack->GetMatchTrigger()) continue;

    dev  = muonTrack->LoDev();
    dev *= (Int_t)(TMath::Sign(1.0,muonTrack->GetInverseBendingMomentum()));
    dev += 15;

    ntvar[ 2] = muonTrack->GetNHit();
    ntvar[ 3] = muonTrack->LoCircuit();
    ntvar[ 4] = muonTrack->LoStripX();
    ntvar[ 5] = muonTrack->LoStripY();
    ntvar[ 6] = dev;
    ntvar[ 7] = muonTrack->LoLpt();
    ntvar[ 8] = muonTrack->LoHpt();
    ntvar[ 9] = muonTrack->GetChi2() / (2.0 * muonTrack->GetNHit() - 5);
    ntvar[10] = muonTrack->GetChi2MatchTrigger();
    ntvar[11] = TMath::Sign(1.,muonTrack->GetInverseBendingMomentum());

    // corrected to vertex

    px = muonTrack->Px();
    py = muonTrack->Py();
    pz = muonTrack->Pz();
    pt = TMath::Sqrt(px*px+py*py);
    ntvar[12] = muonTrack->P();
    ntvar[13] = TMath::Sqrt(px*px+py*py);
    ntvar[14] = TMath::ATan2(py,px)*180./TMath::Pi();
    ntvar[15] = TMath::ATan2(pt,pz)*180./TMath::Pi();
    ntvar[16] = muonTrack->GetZ();

    // uncorrected

    px = muonTrack->PxUncorrected();
    py = muonTrack->PyUncorrected();
    pz = muonTrack->PzUncorrected();
    pt = TMath::Sqrt(px*px+py*py);
    ntvar[17] = muonTrack->PUncorrected();
    ntvar[18] = TMath::Sqrt(px*px+py*py);
    ntvar[19] = TMath::ATan2(py,px)*180./TMath::Pi();
    ntvar[20] = TMath::ATan2(pt,pz)*180./TMath::Pi();
    ntvar[21] = muonTrack->GetZUncorrected();

    fTracksLUT->Fill(ntvar);

  } // end ESD track loop

  // Post final data. It will be written to a file with option "RECREATE"
  PostData(0, fTracksLUT);
  
}      

//________________________________________________________________________
void AliAnalysisTaskLUT::Terminate(Option_t *) {
  // End function, empty
}

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