ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

//*************************************************************************
// Class AliAnalysisTaskMEVertexingHF
// AliAnalysisTaskME for event mixing, building the background for 
// heavy-flavour decay candidates
// Author: R.Romita, r.romita@gsi.de
//*************************************************************************



#include "TH1F.h"
#include "TObjArray.h"
#include "TList.h"
#include "TROOT.h"
#include "TSystem.h"
#include "TCanvas.h"

#include "AliVEvent.h"
#include "AliVVertex.h"
#include "AliAODEvent.h"
#include "AliESDEvent.h"
#include "AliAnalysisVertexingHF.h"
#include "AliMixedEvent.h"
#include "AliAnalysisTaskMEVertexingHF.h"
#include "AliAnalysisManager.h"
#include "AliMultiEventInputHandler.h"

ClassImp(AliAnalysisTaskMEVertexingHF)

//________________________________________________________________________
AliAnalysisTaskMEVertexingHF::AliAnalysisTaskMEVertexingHF(const char *name) : 
AliAnalysisTaskME(name), 
fvHF(0), 
fMixedEvent(),
fVerticesHFTClArr(0),
fD0toKpiTClArr(0), 
fJPSItoEleTClArr(0),
fCharm3ProngTClArr(0),
fCharm4ProngTClArr(0),
fDstarTClArr(0),
fCascadesTClArr(0),
fLikeSign2ProngTClArr(0),
fLikeSign3ProngTClArr(0)
{
  // Constructor
}
//________________________________________________________________________
void AliAnalysisTaskMEVertexingHF::Init()
{
 // Initialization
 // Instanciates vHF and loads its parameters
 // Some parameters are changed
 
  if(gROOT->LoadMacro("ConfigVertexingHF.C")) {
    printf("AnalysisTaskMEVertexingHF::Init() \n Using $ALICE_ROOT/PWG3/vertexingHF/ConfigVertexingHF.C\n");
    gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/ConfigVertexingHF.C");
  }
  fvHF = (AliAnalysisVertexingHF*)gROOT->ProcessLine("ConfigVertexingHF()");
  fvHF->SetMixEventOn();
  fvHF->SetInputAOD();
  fvHF->PrintStatus();
  if(fvHF->GetLikeSign()) {
    printf("WARNING: fLikeSign will be switched off!");
    fvHF->SetLikeSignOff();
  }
  if(fvHF->GetRecoPrimVtxSkippingTrks() || fvHF->GetRmTrksFromPrimVtx()){
    fvHF->UnsetRecoPrimVtxSkippingTrks();
    printf("WARNING: if on, fRecoPrimVtxSkippingTrks and fRmTrksFromPrimVtx  will be switched off!\n");
  }
  
  AliAnalysisManager::GetAnalysisManager()->RegisterExtraFile("AliAOD.VertexingHF.root");

  return;
}
//________________________________________________________________________
void AliAnalysisTaskMEVertexingHF::UserCreateOutputObjects()
{  
// Create the output container


  if (!AODEvent()) {
    Fatal("UserCreateOutputObjects", "This task needs an AOD handler");
    return;
  }
  
  if(!fvHF) {
    printf("AnalysisTaskMEVertexingHF::UserCreateOutPutData() \n ERROR! no fvHF!\n");
    return;
  }
  fVerticesHFTClArr = new TClonesArray("AliAODVertex", 0);
  fVerticesHFTClArr->SetName("VerticesHF");
  AddAODBranch("TClonesArray", &fVerticesHFTClArr);
  if(fvHF->GetD0toKpi()) {
    fD0toKpiTClArr = new TClonesArray("AliAODRecoDecayHF2Prong", 0);
    fD0toKpiTClArr->SetName("D0toKpi");
    AddAODBranch("TClonesArray", &fD0toKpiTClArr);
  }
  if(fvHF->GetJPSItoEle()) {
    fJPSItoEleTClArr = new TClonesArray("AliAODRecoDecayHF2Prong", 0);
    fJPSItoEleTClArr->SetName("JPSItoEle");
    AddAODBranch("TClonesArray", &fJPSItoEleTClArr);
  }
  if(fvHF->Get3Prong()) {
    fCharm3ProngTClArr = new TClonesArray("AliAODRecoDecayHF3Prong", 0);
    fCharm3ProngTClArr->SetName("Charm3Prong");
    AddAODBranch("TClonesArray", &fCharm3ProngTClArr);
  }
  if(fvHF->Get4Prong()) {
    fCharm4ProngTClArr = new TClonesArray("AliAODRecoDecayHF4Prong", 0);
    fCharm4ProngTClArr->SetName("Charm4Prong");
    AddAODBranch("TClonesArray", &fCharm4ProngTClArr);
  }
  
  if(fvHF->GetDstar()) {
    fDstarTClArr = new TClonesArray("AliAODRecoCascadeHF", 0);
    fDstarTClArr->SetName("Dstar");
    AddAODBranch("TClonesArray", &fDstarTClArr);
  }
  
  if(fvHF->GetCascades()){
    fCascadesTClArr = new TClonesArray("AliAODRecoCascadeHF", 0);
    fCascadesTClArr->SetName("CascadesHF");
    AddAODBranch("TClonesArray", &fCascadesTClArr);
  }

  if(fvHF->GetLikeSign()) {
    fLikeSign2ProngTClArr = new TClonesArray("AliAODRecoDecayHF2Prong", 0);
    fLikeSign2ProngTClArr->SetName("LikeSign2Prong");
    AddAODBranch("TClonesArray", &fLikeSign2ProngTClArr);
  }
 
  if(fvHF->GetLikeSign() && fvHF->Get3Prong()) {
    fLikeSign3ProngTClArr = new TClonesArray("AliAODRecoDecayHF3Prong", 0);
    fLikeSign3ProngTClArr->SetName("LikeSign3Prong");
    AddAODBranch("TClonesArray", &fLikeSign3ProngTClArr);
  }

  return;
}

//________________________________________________________________________
void AliAnalysisTaskMEVertexingHF::UserExec(Option_t *) 
{
  // Execute analysis for current event:
  // first build the mixed event, compute the new primary vtx 
  // then heavy flavor vertexing 

  Int_t nev = fInputHandler->GetBufferSize();
  fMixedEvent = new AliMixedEvent();
  fMixedEvent->Reset();
  TString primTitle;
  TString primTitleFirst;
  AliAODVertex *vtxCopy=0;

  TObjArray *vertices=new TObjArray(nev);
  for (Int_t iev = 0; iev < nev; iev++) {
    AliAODEvent *evt = (AliAODEvent*)GetEvent(iev);
    if(!evt) {delete vertices;return;}
    AliAODVertex *evtVtx=(AliAODVertex*)evt->GetPrimaryVertex();
    if(!evtVtx) {delete vertices;return;}
    primTitle = evtVtx->GetTitle();
    Int_t nContrib=evtVtx->GetNContributors();
    if(!primTitle.Contains("VertexerTracks") || nContrib<=0) {
      delete vertices;
      return;
    }

    vtxCopy=new AliAODVertex(*evtVtx);
    primTitleFirst=evtVtx->GetTitle();
        

    fMixedEvent->AddEvent(evt);

    vertices->AddLast(vtxCopy);
  }


  fMixedEvent->Init();
  Double_t vtxPos[3]={0.,0.,0.},vtxSigma[3]={0.,0.,0.};
  Int_t nContributors[1]={0};
  Double_t chi2=0;
  Bool_t primaryOk=fMixedEvent->ComputeVtx(vertices,vtxPos,vtxSigma,nContributors);
  if(!primaryOk) {
    delete vertices;
    delete vtxCopy;
    vtxCopy=NULL;
    return;
  }
  Int_t contribCopy=nContributors[0];
  Double_t vtxCov[6]={vtxSigma[0]*vtxSigma[0],0,vtxSigma[1]*vtxSigma[1],0,0,vtxSigma[2]*vtxSigma[2]};
  AliVVertex* newVertex=new AliESDVertex(vtxPos,vtxCov,chi2,contribCopy);
  newVertex->SetTitle(primTitleFirst.Data());
  fMixedEvent->SetPrimaryVertex(newVertex);

  delete vertices;
  delete vtxCopy;
  vtxCopy=NULL;

  fvHF->FindCandidates(fMixedEvent,
		       fVerticesHFTClArr,
		       fD0toKpiTClArr,
		       fJPSItoEleTClArr,
		       fCharm3ProngTClArr,
		       fCharm4ProngTClArr,
		       fDstarTClArr,
		       fCascadesTClArr, 
		       fLikeSign2ProngTClArr,
		       fLikeSign3ProngTClArr);

  delete newVertex;
  return;
}      

//________________________________________________________________________
void AliAnalysisTaskMEVertexingHF::Terminate(Option_t *) 
{
  // Terminate analysis
}
 AliAnalysisTaskMEVertexingHF.cxx:1
 AliAnalysisTaskMEVertexingHF.cxx:2
 AliAnalysisTaskMEVertexingHF.cxx:3
 AliAnalysisTaskMEVertexingHF.cxx:4
 AliAnalysisTaskMEVertexingHF.cxx:5
 AliAnalysisTaskMEVertexingHF.cxx:6
 AliAnalysisTaskMEVertexingHF.cxx:7
 AliAnalysisTaskMEVertexingHF.cxx:8
 AliAnalysisTaskMEVertexingHF.cxx:9
 AliAnalysisTaskMEVertexingHF.cxx:10
 AliAnalysisTaskMEVertexingHF.cxx:11
 AliAnalysisTaskMEVertexingHF.cxx:12
 AliAnalysisTaskMEVertexingHF.cxx:13
 AliAnalysisTaskMEVertexingHF.cxx:14
 AliAnalysisTaskMEVertexingHF.cxx:15
 AliAnalysisTaskMEVertexingHF.cxx:16
 AliAnalysisTaskMEVertexingHF.cxx:17
 AliAnalysisTaskMEVertexingHF.cxx:18
 AliAnalysisTaskMEVertexingHF.cxx:19
 AliAnalysisTaskMEVertexingHF.cxx:20
 AliAnalysisTaskMEVertexingHF.cxx:21
 AliAnalysisTaskMEVertexingHF.cxx:22
 AliAnalysisTaskMEVertexingHF.cxx:23
 AliAnalysisTaskMEVertexingHF.cxx:24
 AliAnalysisTaskMEVertexingHF.cxx:25
 AliAnalysisTaskMEVertexingHF.cxx:26
 AliAnalysisTaskMEVertexingHF.cxx:27
 AliAnalysisTaskMEVertexingHF.cxx:28
 AliAnalysisTaskMEVertexingHF.cxx:29
 AliAnalysisTaskMEVertexingHF.cxx:30
 AliAnalysisTaskMEVertexingHF.cxx:31
 AliAnalysisTaskMEVertexingHF.cxx:32
 AliAnalysisTaskMEVertexingHF.cxx:33
 AliAnalysisTaskMEVertexingHF.cxx:34
 AliAnalysisTaskMEVertexingHF.cxx:35
 AliAnalysisTaskMEVertexingHF.cxx:36
 AliAnalysisTaskMEVertexingHF.cxx:37
 AliAnalysisTaskMEVertexingHF.cxx:38
 AliAnalysisTaskMEVertexingHF.cxx:39
 AliAnalysisTaskMEVertexingHF.cxx:40
 AliAnalysisTaskMEVertexingHF.cxx:41
 AliAnalysisTaskMEVertexingHF.cxx:42
 AliAnalysisTaskMEVertexingHF.cxx:43
 AliAnalysisTaskMEVertexingHF.cxx:44
 AliAnalysisTaskMEVertexingHF.cxx:45
 AliAnalysisTaskMEVertexingHF.cxx:46
 AliAnalysisTaskMEVertexingHF.cxx:47
 AliAnalysisTaskMEVertexingHF.cxx:48
 AliAnalysisTaskMEVertexingHF.cxx:49
 AliAnalysisTaskMEVertexingHF.cxx:50
 AliAnalysisTaskMEVertexingHF.cxx:51
 AliAnalysisTaskMEVertexingHF.cxx:52
 AliAnalysisTaskMEVertexingHF.cxx:53
 AliAnalysisTaskMEVertexingHF.cxx:54
 AliAnalysisTaskMEVertexingHF.cxx:55
 AliAnalysisTaskMEVertexingHF.cxx:56
 AliAnalysisTaskMEVertexingHF.cxx:57
 AliAnalysisTaskMEVertexingHF.cxx:58
 AliAnalysisTaskMEVertexingHF.cxx:59
 AliAnalysisTaskMEVertexingHF.cxx:60
 AliAnalysisTaskMEVertexingHF.cxx:61
 AliAnalysisTaskMEVertexingHF.cxx:62
 AliAnalysisTaskMEVertexingHF.cxx:63
 AliAnalysisTaskMEVertexingHF.cxx:64
 AliAnalysisTaskMEVertexingHF.cxx:65
 AliAnalysisTaskMEVertexingHF.cxx:66
 AliAnalysisTaskMEVertexingHF.cxx:67
 AliAnalysisTaskMEVertexingHF.cxx:68
 AliAnalysisTaskMEVertexingHF.cxx:69
 AliAnalysisTaskMEVertexingHF.cxx:70
 AliAnalysisTaskMEVertexingHF.cxx:71
 AliAnalysisTaskMEVertexingHF.cxx:72
 AliAnalysisTaskMEVertexingHF.cxx:73
 AliAnalysisTaskMEVertexingHF.cxx:74
 AliAnalysisTaskMEVertexingHF.cxx:75
 AliAnalysisTaskMEVertexingHF.cxx:76
 AliAnalysisTaskMEVertexingHF.cxx:77
 AliAnalysisTaskMEVertexingHF.cxx:78
 AliAnalysisTaskMEVertexingHF.cxx:79
 AliAnalysisTaskMEVertexingHF.cxx:80
 AliAnalysisTaskMEVertexingHF.cxx:81
 AliAnalysisTaskMEVertexingHF.cxx:82
 AliAnalysisTaskMEVertexingHF.cxx:83
 AliAnalysisTaskMEVertexingHF.cxx:84
 AliAnalysisTaskMEVertexingHF.cxx:85
 AliAnalysisTaskMEVertexingHF.cxx:86
 AliAnalysisTaskMEVertexingHF.cxx:87
 AliAnalysisTaskMEVertexingHF.cxx:88
 AliAnalysisTaskMEVertexingHF.cxx:89
 AliAnalysisTaskMEVertexingHF.cxx:90
 AliAnalysisTaskMEVertexingHF.cxx:91
 AliAnalysisTaskMEVertexingHF.cxx:92
 AliAnalysisTaskMEVertexingHF.cxx:93
 AliAnalysisTaskMEVertexingHF.cxx:94
 AliAnalysisTaskMEVertexingHF.cxx:95
 AliAnalysisTaskMEVertexingHF.cxx:96
 AliAnalysisTaskMEVertexingHF.cxx:97
 AliAnalysisTaskMEVertexingHF.cxx:98
 AliAnalysisTaskMEVertexingHF.cxx:99
 AliAnalysisTaskMEVertexingHF.cxx:100
 AliAnalysisTaskMEVertexingHF.cxx:101
 AliAnalysisTaskMEVertexingHF.cxx:102
 AliAnalysisTaskMEVertexingHF.cxx:103
 AliAnalysisTaskMEVertexingHF.cxx:104
 AliAnalysisTaskMEVertexingHF.cxx:105
 AliAnalysisTaskMEVertexingHF.cxx:106
 AliAnalysisTaskMEVertexingHF.cxx:107
 AliAnalysisTaskMEVertexingHF.cxx:108
 AliAnalysisTaskMEVertexingHF.cxx:109
 AliAnalysisTaskMEVertexingHF.cxx:110
 AliAnalysisTaskMEVertexingHF.cxx:111
 AliAnalysisTaskMEVertexingHF.cxx:112
 AliAnalysisTaskMEVertexingHF.cxx:113
 AliAnalysisTaskMEVertexingHF.cxx:114
 AliAnalysisTaskMEVertexingHF.cxx:115
 AliAnalysisTaskMEVertexingHF.cxx:116
 AliAnalysisTaskMEVertexingHF.cxx:117
 AliAnalysisTaskMEVertexingHF.cxx:118
 AliAnalysisTaskMEVertexingHF.cxx:119
 AliAnalysisTaskMEVertexingHF.cxx:120
 AliAnalysisTaskMEVertexingHF.cxx:121
 AliAnalysisTaskMEVertexingHF.cxx:122
 AliAnalysisTaskMEVertexingHF.cxx:123
 AliAnalysisTaskMEVertexingHF.cxx:124
 AliAnalysisTaskMEVertexingHF.cxx:125
 AliAnalysisTaskMEVertexingHF.cxx:126
 AliAnalysisTaskMEVertexingHF.cxx:127
 AliAnalysisTaskMEVertexingHF.cxx:128
 AliAnalysisTaskMEVertexingHF.cxx:129
 AliAnalysisTaskMEVertexingHF.cxx:130
 AliAnalysisTaskMEVertexingHF.cxx:131
 AliAnalysisTaskMEVertexingHF.cxx:132
 AliAnalysisTaskMEVertexingHF.cxx:133
 AliAnalysisTaskMEVertexingHF.cxx:134
 AliAnalysisTaskMEVertexingHF.cxx:135
 AliAnalysisTaskMEVertexingHF.cxx:136
 AliAnalysisTaskMEVertexingHF.cxx:137
 AliAnalysisTaskMEVertexingHF.cxx:138
 AliAnalysisTaskMEVertexingHF.cxx:139
 AliAnalysisTaskMEVertexingHF.cxx:140
 AliAnalysisTaskMEVertexingHF.cxx:141
 AliAnalysisTaskMEVertexingHF.cxx:142
 AliAnalysisTaskMEVertexingHF.cxx:143
 AliAnalysisTaskMEVertexingHF.cxx:144
 AliAnalysisTaskMEVertexingHF.cxx:145
 AliAnalysisTaskMEVertexingHF.cxx:146
 AliAnalysisTaskMEVertexingHF.cxx:147
 AliAnalysisTaskMEVertexingHF.cxx:148
 AliAnalysisTaskMEVertexingHF.cxx:149
 AliAnalysisTaskMEVertexingHF.cxx:150
 AliAnalysisTaskMEVertexingHF.cxx:151
 AliAnalysisTaskMEVertexingHF.cxx:152
 AliAnalysisTaskMEVertexingHF.cxx:153
 AliAnalysisTaskMEVertexingHF.cxx:154
 AliAnalysisTaskMEVertexingHF.cxx:155
 AliAnalysisTaskMEVertexingHF.cxx:156
 AliAnalysisTaskMEVertexingHF.cxx:157
 AliAnalysisTaskMEVertexingHF.cxx:158
 AliAnalysisTaskMEVertexingHF.cxx:159
 AliAnalysisTaskMEVertexingHF.cxx:160
 AliAnalysisTaskMEVertexingHF.cxx:161
 AliAnalysisTaskMEVertexingHF.cxx:162
 AliAnalysisTaskMEVertexingHF.cxx:163
 AliAnalysisTaskMEVertexingHF.cxx:164
 AliAnalysisTaskMEVertexingHF.cxx:165
 AliAnalysisTaskMEVertexingHF.cxx:166
 AliAnalysisTaskMEVertexingHF.cxx:167
 AliAnalysisTaskMEVertexingHF.cxx:168
 AliAnalysisTaskMEVertexingHF.cxx:169
 AliAnalysisTaskMEVertexingHF.cxx:170
 AliAnalysisTaskMEVertexingHF.cxx:171
 AliAnalysisTaskMEVertexingHF.cxx:172
 AliAnalysisTaskMEVertexingHF.cxx:173
 AliAnalysisTaskMEVertexingHF.cxx:174
 AliAnalysisTaskMEVertexingHF.cxx:175
 AliAnalysisTaskMEVertexingHF.cxx:176
 AliAnalysisTaskMEVertexingHF.cxx:177
 AliAnalysisTaskMEVertexingHF.cxx:178
 AliAnalysisTaskMEVertexingHF.cxx:179
 AliAnalysisTaskMEVertexingHF.cxx:180
 AliAnalysisTaskMEVertexingHF.cxx:181
 AliAnalysisTaskMEVertexingHF.cxx:182
 AliAnalysisTaskMEVertexingHF.cxx:183
 AliAnalysisTaskMEVertexingHF.cxx:184
 AliAnalysisTaskMEVertexingHF.cxx:185
 AliAnalysisTaskMEVertexingHF.cxx:186
 AliAnalysisTaskMEVertexingHF.cxx:187
 AliAnalysisTaskMEVertexingHF.cxx:188
 AliAnalysisTaskMEVertexingHF.cxx:189
 AliAnalysisTaskMEVertexingHF.cxx:190
 AliAnalysisTaskMEVertexingHF.cxx:191
 AliAnalysisTaskMEVertexingHF.cxx:192
 AliAnalysisTaskMEVertexingHF.cxx:193
 AliAnalysisTaskMEVertexingHF.cxx:194
 AliAnalysisTaskMEVertexingHF.cxx:195
 AliAnalysisTaskMEVertexingHF.cxx:196
 AliAnalysisTaskMEVertexingHF.cxx:197
 AliAnalysisTaskMEVertexingHF.cxx:198
 AliAnalysisTaskMEVertexingHF.cxx:199
 AliAnalysisTaskMEVertexingHF.cxx:200
 AliAnalysisTaskMEVertexingHF.cxx:201
 AliAnalysisTaskMEVertexingHF.cxx:202
 AliAnalysisTaskMEVertexingHF.cxx:203
 AliAnalysisTaskMEVertexingHF.cxx:204
 AliAnalysisTaskMEVertexingHF.cxx:205
 AliAnalysisTaskMEVertexingHF.cxx:206
 AliAnalysisTaskMEVertexingHF.cxx:207
 AliAnalysisTaskMEVertexingHF.cxx:208
 AliAnalysisTaskMEVertexingHF.cxx:209
 AliAnalysisTaskMEVertexingHF.cxx:210
 AliAnalysisTaskMEVertexingHF.cxx:211
 AliAnalysisTaskMEVertexingHF.cxx:212
 AliAnalysisTaskMEVertexingHF.cxx:213
 AliAnalysisTaskMEVertexingHF.cxx:214
 AliAnalysisTaskMEVertexingHF.cxx:215
 AliAnalysisTaskMEVertexingHF.cxx:216
 AliAnalysisTaskMEVertexingHF.cxx:217
 AliAnalysisTaskMEVertexingHF.cxx:218
 AliAnalysisTaskMEVertexingHF.cxx:219
 AliAnalysisTaskMEVertexingHF.cxx:220
 AliAnalysisTaskMEVertexingHF.cxx:221
 AliAnalysisTaskMEVertexingHF.cxx:222
 AliAnalysisTaskMEVertexingHF.cxx:223
 AliAnalysisTaskMEVertexingHF.cxx:224
 AliAnalysisTaskMEVertexingHF.cxx:225
 AliAnalysisTaskMEVertexingHF.cxx:226
 AliAnalysisTaskMEVertexingHF.cxx:227
 AliAnalysisTaskMEVertexingHF.cxx:228
 AliAnalysisTaskMEVertexingHF.cxx:229
 AliAnalysisTaskMEVertexingHF.cxx:230
 AliAnalysisTaskMEVertexingHF.cxx:231
 AliAnalysisTaskMEVertexingHF.cxx:232
 AliAnalysisTaskMEVertexingHF.cxx:233