ROOT logo

#include "AliAnalysisTaskFPexample.h"

#include "TH1D.h"
#include "TH2D.h"
#include "TCanvas.h"
#include "TList.h"
#include "TString.h"

#include "AliAnalysisManager.h"
#include "AliESDtrackCuts.h"
#include "AliESDEvent.h"
#include "AliESDHeader.h"
#include "AliMCEvent.h"
#include "AliMultiplicity.h"
#include "AliTriggerAnalysis.h"

ClassImp(AliAnalysisTaskFPexample)

//________________________________________________________________________
AliAnalysisTaskFPexample::AliAnalysisTaskFPexample(const char *name) :
  AliAnalysisTaskFirstPhysics(name),
  fhTrackPt(0),
  fh2TrackPhiEta(0),
  fhMulITSTPC(0),
  fhMulITSSA(0),
  fhMulSPD(0),
  fh2TrackletsPhiEta(0),
  fh2TracksPhiTPCchi2(0)
{
  DefineOutput(1, TList::Class());
}

//________________________________________________________________________
AliAnalysisTaskFPexample::~AliAnalysisTaskFPexample()
{
  // Destructor. Clean-up the output list, but not the histograms that are put inside
  // (the list is owner and will clean-up these histograms). Protect in PROOF case.
  if (fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
    delete fOutput;
  }
  for (Int_t i = 0; i < knTrackCuts; i ++) {
    delete fTrackCuts[i];
    fTrackCuts[i] = 0;
  }
}

//________________________________________________________________________
void AliAnalysisTaskFPexample::UserCreateOutputObjects()
{
  PrepareOutputList();
  // Define cuts
  PrepareDefaultTrackCuts();

  // Create histograms
  const Int_t ptbins = 15;
  const Double_t ptlow = 0.1, ptup = 3.1;
  const Int_t etabins = 40;
  const Double_t etalow = -2.0, etaup = 2.0;
  const Int_t mulbins = 200;
  const Int_t phibins = 120;

  fhTrackPt = UserHisto1d("fhTrackPt", "p_{T} distribution for ESD",
			  "P_{T} (GeV/c)", ptbins, ptlow, ptup);
  fh2TrackPhiEta = UserHisto2d("fh2TrackPhiEta", "ESD tracks",
			       "#Phi", phibins, 0, 2 * TMath::Pi(),
			       "#eta", etabins, etalow, etaup);
  fhMulITSTPC = UserHisto1d("fhMulITSTPC", "N_{CH} distribution for ITS+TPC tracks",
			    "N_{CH}", mulbins, 0, mulbins);
  fhMulITSSA = UserHisto1d("fhMulITSSA", "N_{CH} distribution for ITS SA tracks",
			   "N_{CH}", mulbins, 0, mulbins);
  fhMulSPD = UserHisto1d("fhMulSPD", "N_{CH} distribution for SPD tracklets",
			 "N_{CH}", mulbins, 0, mulbins);
  fh2TrackletsPhiEta = UserHisto2d("fh2TrackletsPhiEta", "Tracklets",
				   "#Phi", phibins, 0, 2 * TMath::Pi(),
				   "#eta", etabins, etalow, etaup);
  fh2TracksPhiTPCchi2 = UserHisto2d("fh2TracksPhiTPCchi2", "ESD tracks #Phi vs. TPC #chi^{2}",
				    "#Phi", phibins, 0, 2 * TMath::Pi(),
				    "#chi^{2}", 500, 0, 500);

  PostData(1, fOutput); // Post data for ALL output slots >0 here, to get at least an empty histogram
}

//________________________________________________________________________
void AliAnalysisTaskFPexample::UserExec(Option_t *)
{
  if (!GetESDEvent()) {
    AliError("Unable to read the ESD");
    return;
  }
  if (!CheckVertex()) {
    return;
  }

  const Int_t nESDTracks = fESD->GetNumberOfTracks();

  Int_t iHighestID = 0;
  for (Int_t iTrack = 0; iTrack < nESDTracks; iTrack++) {
    if (fESD->GetTrack(iTrack)->GetLabel() > iHighestID) {
      iHighestID = fESD->GetTrack(iTrack)->GetLabel();
    }
  }
  const Int_t nMaxID = iHighestID + 1;
  bool aGlobalBits[nMaxID], aPureITSBits[nMaxID];
  for (Int_t iFlag = 0; iFlag < nMaxID; iFlag++) {
    aGlobalBits[iFlag] = false;
    aPureITSBits[iFlag] = false;
  }

  // flags for secondary and rejected tracks
  const int kRejectBit = BIT(15); // set this bit in ESD tracks if it is rejected by a cut
  const int kSecondaryBit = BIT(16); // set this bit in ESD tracks if it is secondary according to a cut

  Int_t nTracksITSTPC = 0; // multiplicity counters
  Int_t nTracksITSSA = 0;
  Int_t nTrackletsSPD = 0;

  for(Int_t iTrack = 0; iTrack < nESDTracks; iTrack++){
    AliESDtrack* esdTrack = fESD->GetTrack(iTrack);
    // if track is a secondary from a V0, flag as a secondary
    if (esdTrack->IsOn(AliESDtrack::kMultInV0)) {
      esdTrack->SetBit(kSecondaryBit);
      continue;
    }
    AliESDtrack* tpcTrack = AliESDtrackCuts::GetTPCOnlyTrack(fESD, esdTrack->GetID());
    // check tracks with ITS part
    if (esdTrack->IsOn(AliESDtrack::kITSin)) {
      if (!esdTrack->IsOn(AliESDtrack::kITSpureSA)) { // track has ITS part but is not an ITS_SA
	// TPC+ITS
	if (esdTrack->IsOn(AliESDtrack::kTPCin)) {  // Global track, has ITS and TPC contributions
	  if (fTrackCuts[kTrackCutQGlo]->AcceptTrack(esdTrack)) { // good ITS+TPC track
	    if (fTrackCuts[kTrackCutDCAwSPD]->AcceptTrack(esdTrack)
		|| fTrackCuts[kTrackCutDCAwoSPD]->AcceptTrack(esdTrack)) {
	      nTracksITSTPC++;
	      fhTrackPt->Fill(esdTrack->Pt());
	      fh2TrackPhiEta->Fill(esdTrack->Phi(), esdTrack->Eta());
	      if (tpcTrack) {
		fh2TracksPhiTPCchi2->Fill(esdTrack->Phi(), tpcTrack->GetTPCchi2());
	      }
	    } else {
	      esdTrack->SetBit(kSecondaryBit); // large DCA -> secondary, don't count either track not associated tracklet
	    }
	  } else {
	    esdTrack->SetBit(kRejectBit); // bad quality, don't count the track, but may count tracklet if associated
	  }
	} else if (fTrackCuts[kTrackCutQITS]->AcceptTrack(esdTrack)) { // good ITS complementary track
	  if (fTrackCuts[kTrackCutDCAwSPD]->AcceptTrack(esdTrack)
	      || fTrackCuts[kTrackCutDCAwoSPD]->AcceptTrack(esdTrack)) {
	    nTracksITSTPC++;
	    fhTrackPt->Fill(esdTrack->Pt());
	    fh2TrackPhiEta->Fill(esdTrack->Phi(), esdTrack->Eta());
	    if (tpcTrack) {
	      fh2TracksPhiTPCchi2->Fill(esdTrack->Phi(), tpcTrack->GetTPCchi2());
	    }
	  } else {
	    esdTrack->SetBit(kSecondaryBit); // large DCA -> secondary, don't count either track not associated tracklet
	  }
	} else {
	  esdTrack->SetBit(kRejectBit); // bad quality, don't count the track, but may count tracklet if associated
	}
      } else { // pure ITS SA tracks
	if (fTrackCuts[kTrackCutQITS]->AcceptTrack(esdTrack)) { // good ITSSA track
	  if (fTrackCuts[kTrackCutDCAwSPD]->AcceptTrack(esdTrack)
	      || fTrackCuts[kTrackCutDCAwoSPD]->AcceptTrack(esdTrack)) {
	    nTracksITSSA++;
	  } else {
	    esdTrack->SetBit(kRejectBit);
	  }
	} else {
	  esdTrack->SetBit(kRejectBit);
	}
      }
    }
    if (tpcTrack) {
      delete tpcTrack;
    }
  }

  // get multiplicity from ITS tracklets to complement TPC+ITS, and ITS pure SA
  const AliMultiplicity* multiplicitySPD = fESD->GetMultiplicity();    // spd multiplicity object
  Int_t id1, id2, id3, id4;
  AliESDtrack *tr1 = 0, *tr3 = 0;
  for (Int_t iTracklet = 0; iTracklet < multiplicitySPD->GetNumberOfTracklets(); iTracklet++) {
    if (TMath::Abs(multiplicitySPD->GetEta(iTracklet)) > GetCutEta()) {
      continue; // eta selection for tracklets
    }
    nTrackletsSPD++;
    fh2TrackletsPhiEta->Fill(multiplicitySPD->GetPhi(iTracklet), multiplicitySPD->GetEta(iTracklet));
    // if counting tracks+tracklets, check if clusters were already used in tracks
    // and get the id of the tracks in which they were used

    // references for eventual Global/ITS_SA tracks
    multiplicitySPD->GetTrackletTrackIDs(iTracklet, 0, id1, id2);
    tr1 = id1 >= 0 ? fESD->GetTrack(id1) : 0;

    // references for eventual ITS_SA_pure tracks
    multiplicitySPD->GetTrackletTrackIDs(iTracklet, 1, id3, id4);
    tr3 = id3 >= 0 ? fESD->GetTrack(id3) : 0;

    // are both clusters from the same tracks? If not, skip the
    // tracklet (shouldn't change things much)
    if (id1 != id2 || id3 != id4) {
      continue;
    }

    // has associated global track been associated to a previous tracklet?
    bool bUsedInGlobal = (id1 != -1) ? aGlobalBits[id1] : false;
    // has associated pure ITS track been associated to a previous tracklet?
    bool bUsedInPureITS = (id3 != -1) ? aPureITSBits[id3] : false;

    // counting tracklet as global+complementary track
    if ((tr1 && !tr1->TestBit(kSecondaryBit)) // reject as secondary
	&& (tr1 && tr1->TestBit(kRejectBit))) { // already accounted
      if (!bUsedInGlobal) {
	nTracksITSTPC++;
	if (id1 > 0) {
	  // mark global track linked to this tracklet as associated
	  aGlobalBits[id1] = true;
        }
      }
    } else if (id1 < 0) {
      nTracksITSTPC++;
    }

    // counting tracklet as ITS SA pure track
    if ((tr3 && tr3->TestBit(kSecondaryBit))
	&& (tr3 && !tr3->TestBit(kRejectBit))) {
      if (!bUsedInPureITS) {
	nTracksITSSA++;
	if (id3 > 0) {
	  // mark global track linked to this tracklet as associated
	  aPureITSBits[id3] = true;
	}
      }
    } else if (id3 < 0) {
      nTracksITSSA++;
    }

  }
  fhMulITSTPC->Fill(nTracksITSTPC);
  fhMulITSSA->Fill(nTracksITSSA);
  fhMulSPD->Fill(nTrackletsSPD);

  PostData(1, fOutput);
}

//________________________________________________________________________
void AliAnalysisTaskFPexample::Terminate(Option_t *)
{
  // Draw result to screen, or perform fitting, normalizations
  // don't get too fancy, keep your histos raw and massage them with macros

  fOutput = dynamic_cast<TList*> (GetOutputData(1));
  if(!fOutput) {
    Printf("ERROR: could not retrieve TList fOutput");
    return;
  }

  if (!(GetHisto1FromOutput("fhTrackPt", fhTrackPt) &&
	GetHisto2FromOutput("fh2TrackPhiEta", fh2TrackPhiEta) &&
	GetHisto1FromOutput("fhMulITSTPC", fhMulITSTPC) &&
	GetHisto1FromOutput("fhMulITSSA", fhMulITSSA) &&
	GetHisto1FromOutput("fhMulSPD", fhMulSPD) &&
	GetHisto2FromOutput("fh2TrackletsPhiEta", fh2TrackletsPhiEta) &&
	GetHisto2FromOutput("fh2TracksPhiTPCchi2", fh2TracksPhiTPCchi2))) {
    AliError("Couldn't load every histogram from output.");
    return;
  }

  TCanvas *c = new TCanvas("AliAnalysisTaskFPexample", "Data Quality Quick Overview");
  c->Divide(2, 2);
  c->cd(1)->SetLogy();
  fhTrackPt->DrawCopy("E");
  c->cd(2);
  fh2TrackPhiEta->DrawCopy("");
  c->cd(3)->SetLogy();
  fhMulITSTPC->DrawCopy("E");
  c->cd(4)->SetLogy();
  fhMulITSSA->DrawCopy("");
}
 AliAnalysisTaskFPexample.cxx:1
 AliAnalysisTaskFPexample.cxx:2
 AliAnalysisTaskFPexample.cxx:3
 AliAnalysisTaskFPexample.cxx:4
 AliAnalysisTaskFPexample.cxx:5
 AliAnalysisTaskFPexample.cxx:6
 AliAnalysisTaskFPexample.cxx:7
 AliAnalysisTaskFPexample.cxx:8
 AliAnalysisTaskFPexample.cxx:9
 AliAnalysisTaskFPexample.cxx:10
 AliAnalysisTaskFPexample.cxx:11
 AliAnalysisTaskFPexample.cxx:12
 AliAnalysisTaskFPexample.cxx:13
 AliAnalysisTaskFPexample.cxx:14
 AliAnalysisTaskFPexample.cxx:15
 AliAnalysisTaskFPexample.cxx:16
 AliAnalysisTaskFPexample.cxx:17
 AliAnalysisTaskFPexample.cxx:18
 AliAnalysisTaskFPexample.cxx:19
 AliAnalysisTaskFPexample.cxx:20
 AliAnalysisTaskFPexample.cxx:21
 AliAnalysisTaskFPexample.cxx:22
 AliAnalysisTaskFPexample.cxx:23
 AliAnalysisTaskFPexample.cxx:24
 AliAnalysisTaskFPexample.cxx:25
 AliAnalysisTaskFPexample.cxx:26
 AliAnalysisTaskFPexample.cxx:27
 AliAnalysisTaskFPexample.cxx:28
 AliAnalysisTaskFPexample.cxx:29
 AliAnalysisTaskFPexample.cxx:30
 AliAnalysisTaskFPexample.cxx:31
 AliAnalysisTaskFPexample.cxx:32
 AliAnalysisTaskFPexample.cxx:33
 AliAnalysisTaskFPexample.cxx:34
 AliAnalysisTaskFPexample.cxx:35
 AliAnalysisTaskFPexample.cxx:36
 AliAnalysisTaskFPexample.cxx:37
 AliAnalysisTaskFPexample.cxx:38
 AliAnalysisTaskFPexample.cxx:39
 AliAnalysisTaskFPexample.cxx:40
 AliAnalysisTaskFPexample.cxx:41
 AliAnalysisTaskFPexample.cxx:42
 AliAnalysisTaskFPexample.cxx:43
 AliAnalysisTaskFPexample.cxx:44
 AliAnalysisTaskFPexample.cxx:45
 AliAnalysisTaskFPexample.cxx:46
 AliAnalysisTaskFPexample.cxx:47
 AliAnalysisTaskFPexample.cxx:48
 AliAnalysisTaskFPexample.cxx:49
 AliAnalysisTaskFPexample.cxx:50
 AliAnalysisTaskFPexample.cxx:51
 AliAnalysisTaskFPexample.cxx:52
 AliAnalysisTaskFPexample.cxx:53
 AliAnalysisTaskFPexample.cxx:54
 AliAnalysisTaskFPexample.cxx:55
 AliAnalysisTaskFPexample.cxx:56
 AliAnalysisTaskFPexample.cxx:57
 AliAnalysisTaskFPexample.cxx:58
 AliAnalysisTaskFPexample.cxx:59
 AliAnalysisTaskFPexample.cxx:60
 AliAnalysisTaskFPexample.cxx:61
 AliAnalysisTaskFPexample.cxx:62
 AliAnalysisTaskFPexample.cxx:63
 AliAnalysisTaskFPexample.cxx:64
 AliAnalysisTaskFPexample.cxx:65
 AliAnalysisTaskFPexample.cxx:66
 AliAnalysisTaskFPexample.cxx:67
 AliAnalysisTaskFPexample.cxx:68
 AliAnalysisTaskFPexample.cxx:69
 AliAnalysisTaskFPexample.cxx:70
 AliAnalysisTaskFPexample.cxx:71
 AliAnalysisTaskFPexample.cxx:72
 AliAnalysisTaskFPexample.cxx:73
 AliAnalysisTaskFPexample.cxx:74
 AliAnalysisTaskFPexample.cxx:75
 AliAnalysisTaskFPexample.cxx:76
 AliAnalysisTaskFPexample.cxx:77
 AliAnalysisTaskFPexample.cxx:78
 AliAnalysisTaskFPexample.cxx:79
 AliAnalysisTaskFPexample.cxx:80
 AliAnalysisTaskFPexample.cxx:81
 AliAnalysisTaskFPexample.cxx:82
 AliAnalysisTaskFPexample.cxx:83
 AliAnalysisTaskFPexample.cxx:84
 AliAnalysisTaskFPexample.cxx:85
 AliAnalysisTaskFPexample.cxx:86
 AliAnalysisTaskFPexample.cxx:87
 AliAnalysisTaskFPexample.cxx:88
 AliAnalysisTaskFPexample.cxx:89
 AliAnalysisTaskFPexample.cxx:90
 AliAnalysisTaskFPexample.cxx:91
 AliAnalysisTaskFPexample.cxx:92
 AliAnalysisTaskFPexample.cxx:93
 AliAnalysisTaskFPexample.cxx:94
 AliAnalysisTaskFPexample.cxx:95
 AliAnalysisTaskFPexample.cxx:96
 AliAnalysisTaskFPexample.cxx:97
 AliAnalysisTaskFPexample.cxx:98
 AliAnalysisTaskFPexample.cxx:99
 AliAnalysisTaskFPexample.cxx:100
 AliAnalysisTaskFPexample.cxx:101
 AliAnalysisTaskFPexample.cxx:102
 AliAnalysisTaskFPexample.cxx:103
 AliAnalysisTaskFPexample.cxx:104
 AliAnalysisTaskFPexample.cxx:105
 AliAnalysisTaskFPexample.cxx:106
 AliAnalysisTaskFPexample.cxx:107
 AliAnalysisTaskFPexample.cxx:108
 AliAnalysisTaskFPexample.cxx:109
 AliAnalysisTaskFPexample.cxx:110
 AliAnalysisTaskFPexample.cxx:111
 AliAnalysisTaskFPexample.cxx:112
 AliAnalysisTaskFPexample.cxx:113
 AliAnalysisTaskFPexample.cxx:114
 AliAnalysisTaskFPexample.cxx:115
 AliAnalysisTaskFPexample.cxx:116
 AliAnalysisTaskFPexample.cxx:117
 AliAnalysisTaskFPexample.cxx:118
 AliAnalysisTaskFPexample.cxx:119
 AliAnalysisTaskFPexample.cxx:120
 AliAnalysisTaskFPexample.cxx:121
 AliAnalysisTaskFPexample.cxx:122
 AliAnalysisTaskFPexample.cxx:123
 AliAnalysisTaskFPexample.cxx:124
 AliAnalysisTaskFPexample.cxx:125
 AliAnalysisTaskFPexample.cxx:126
 AliAnalysisTaskFPexample.cxx:127
 AliAnalysisTaskFPexample.cxx:128
 AliAnalysisTaskFPexample.cxx:129
 AliAnalysisTaskFPexample.cxx:130
 AliAnalysisTaskFPexample.cxx:131
 AliAnalysisTaskFPexample.cxx:132
 AliAnalysisTaskFPexample.cxx:133
 AliAnalysisTaskFPexample.cxx:134
 AliAnalysisTaskFPexample.cxx:135
 AliAnalysisTaskFPexample.cxx:136
 AliAnalysisTaskFPexample.cxx:137
 AliAnalysisTaskFPexample.cxx:138
 AliAnalysisTaskFPexample.cxx:139
 AliAnalysisTaskFPexample.cxx:140
 AliAnalysisTaskFPexample.cxx:141
 AliAnalysisTaskFPexample.cxx:142
 AliAnalysisTaskFPexample.cxx:143
 AliAnalysisTaskFPexample.cxx:144
 AliAnalysisTaskFPexample.cxx:145
 AliAnalysisTaskFPexample.cxx:146
 AliAnalysisTaskFPexample.cxx:147
 AliAnalysisTaskFPexample.cxx:148
 AliAnalysisTaskFPexample.cxx:149
 AliAnalysisTaskFPexample.cxx:150
 AliAnalysisTaskFPexample.cxx:151
 AliAnalysisTaskFPexample.cxx:152
 AliAnalysisTaskFPexample.cxx:153
 AliAnalysisTaskFPexample.cxx:154
 AliAnalysisTaskFPexample.cxx:155
 AliAnalysisTaskFPexample.cxx:156
 AliAnalysisTaskFPexample.cxx:157
 AliAnalysisTaskFPexample.cxx:158
 AliAnalysisTaskFPexample.cxx:159
 AliAnalysisTaskFPexample.cxx:160
 AliAnalysisTaskFPexample.cxx:161
 AliAnalysisTaskFPexample.cxx:162
 AliAnalysisTaskFPexample.cxx:163
 AliAnalysisTaskFPexample.cxx:164
 AliAnalysisTaskFPexample.cxx:165
 AliAnalysisTaskFPexample.cxx:166
 AliAnalysisTaskFPexample.cxx:167
 AliAnalysisTaskFPexample.cxx:168
 AliAnalysisTaskFPexample.cxx:169
 AliAnalysisTaskFPexample.cxx:170
 AliAnalysisTaskFPexample.cxx:171
 AliAnalysisTaskFPexample.cxx:172
 AliAnalysisTaskFPexample.cxx:173
 AliAnalysisTaskFPexample.cxx:174
 AliAnalysisTaskFPexample.cxx:175
 AliAnalysisTaskFPexample.cxx:176
 AliAnalysisTaskFPexample.cxx:177
 AliAnalysisTaskFPexample.cxx:178
 AliAnalysisTaskFPexample.cxx:179
 AliAnalysisTaskFPexample.cxx:180
 AliAnalysisTaskFPexample.cxx:181
 AliAnalysisTaskFPexample.cxx:182
 AliAnalysisTaskFPexample.cxx:183
 AliAnalysisTaskFPexample.cxx:184
 AliAnalysisTaskFPexample.cxx:185
 AliAnalysisTaskFPexample.cxx:186
 AliAnalysisTaskFPexample.cxx:187
 AliAnalysisTaskFPexample.cxx:188
 AliAnalysisTaskFPexample.cxx:189
 AliAnalysisTaskFPexample.cxx:190
 AliAnalysisTaskFPexample.cxx:191
 AliAnalysisTaskFPexample.cxx:192
 AliAnalysisTaskFPexample.cxx:193
 AliAnalysisTaskFPexample.cxx:194
 AliAnalysisTaskFPexample.cxx:195
 AliAnalysisTaskFPexample.cxx:196
 AliAnalysisTaskFPexample.cxx:197
 AliAnalysisTaskFPexample.cxx:198
 AliAnalysisTaskFPexample.cxx:199
 AliAnalysisTaskFPexample.cxx:200
 AliAnalysisTaskFPexample.cxx:201
 AliAnalysisTaskFPexample.cxx:202
 AliAnalysisTaskFPexample.cxx:203
 AliAnalysisTaskFPexample.cxx:204
 AliAnalysisTaskFPexample.cxx:205
 AliAnalysisTaskFPexample.cxx:206
 AliAnalysisTaskFPexample.cxx:207
 AliAnalysisTaskFPexample.cxx:208
 AliAnalysisTaskFPexample.cxx:209
 AliAnalysisTaskFPexample.cxx:210
 AliAnalysisTaskFPexample.cxx:211
 AliAnalysisTaskFPexample.cxx:212
 AliAnalysisTaskFPexample.cxx:213
 AliAnalysisTaskFPexample.cxx:214
 AliAnalysisTaskFPexample.cxx:215
 AliAnalysisTaskFPexample.cxx:216
 AliAnalysisTaskFPexample.cxx:217
 AliAnalysisTaskFPexample.cxx:218
 AliAnalysisTaskFPexample.cxx:219
 AliAnalysisTaskFPexample.cxx:220
 AliAnalysisTaskFPexample.cxx:221
 AliAnalysisTaskFPexample.cxx:222
 AliAnalysisTaskFPexample.cxx:223
 AliAnalysisTaskFPexample.cxx:224
 AliAnalysisTaskFPexample.cxx:225
 AliAnalysisTaskFPexample.cxx:226
 AliAnalysisTaskFPexample.cxx:227
 AliAnalysisTaskFPexample.cxx:228
 AliAnalysisTaskFPexample.cxx:229
 AliAnalysisTaskFPexample.cxx:230
 AliAnalysisTaskFPexample.cxx:231
 AliAnalysisTaskFPexample.cxx:232
 AliAnalysisTaskFPexample.cxx:233
 AliAnalysisTaskFPexample.cxx:234
 AliAnalysisTaskFPexample.cxx:235
 AliAnalysisTaskFPexample.cxx:236
 AliAnalysisTaskFPexample.cxx:237
 AliAnalysisTaskFPexample.cxx:238
 AliAnalysisTaskFPexample.cxx:239
 AliAnalysisTaskFPexample.cxx:240
 AliAnalysisTaskFPexample.cxx:241
 AliAnalysisTaskFPexample.cxx:242
 AliAnalysisTaskFPexample.cxx:243
 AliAnalysisTaskFPexample.cxx:244
 AliAnalysisTaskFPexample.cxx:245
 AliAnalysisTaskFPexample.cxx:246
 AliAnalysisTaskFPexample.cxx:247
 AliAnalysisTaskFPexample.cxx:248
 AliAnalysisTaskFPexample.cxx:249
 AliAnalysisTaskFPexample.cxx:250
 AliAnalysisTaskFPexample.cxx:251
 AliAnalysisTaskFPexample.cxx:252
 AliAnalysisTaskFPexample.cxx:253
 AliAnalysisTaskFPexample.cxx:254
 AliAnalysisTaskFPexample.cxx:255
 AliAnalysisTaskFPexample.cxx:256
 AliAnalysisTaskFPexample.cxx:257
 AliAnalysisTaskFPexample.cxx:258
 AliAnalysisTaskFPexample.cxx:259
 AliAnalysisTaskFPexample.cxx:260
 AliAnalysisTaskFPexample.cxx:261
 AliAnalysisTaskFPexample.cxx:262
 AliAnalysisTaskFPexample.cxx:263
 AliAnalysisTaskFPexample.cxx:264
 AliAnalysisTaskFPexample.cxx:265
 AliAnalysisTaskFPexample.cxx:266
 AliAnalysisTaskFPexample.cxx:267
 AliAnalysisTaskFPexample.cxx:268
 AliAnalysisTaskFPexample.cxx:269
 AliAnalysisTaskFPexample.cxx:270
 AliAnalysisTaskFPexample.cxx:271
 AliAnalysisTaskFPexample.cxx:272
 AliAnalysisTaskFPexample.cxx:273
 AliAnalysisTaskFPexample.cxx:274
 AliAnalysisTaskFPexample.cxx:275
 AliAnalysisTaskFPexample.cxx:276
 AliAnalysisTaskFPexample.cxx:277
 AliAnalysisTaskFPexample.cxx:278
 AliAnalysisTaskFPexample.cxx:279
 AliAnalysisTaskFPexample.cxx:280