ROOT logo

//**************************************************************************
//* This file is property of and copyright by the ALICE Project            * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//*                                                                        *
//* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
//*                  Sedat Altinpinar <Sedat.Altinpinar@cern.ch>           *
//*                  Hege Erdal       <hege.erdal@gmail.com>               *
//*                                                                        *
//* 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$

/// @file   AliDxHFECorrelationMC.cxx
/// @author Sedat Altinpinar, Hege Erdal, Matthias Richter
/// @date   2012-11-02
/// @brief  Worker class for DxHFE correlation
///

#include "AliDxHFECorrelationMC.h"
#include "AliVParticle.h"
#include "AliLog.h"
//#include "AliAnalysisCuts.h"         // required dependency libANALYSISalice.so
//#include "AliFlowTrackSimple.h"      // required dependency libPWGflowBase.so
//#include "AliFlowCandidateTrack.h"   // required dependency libPWGflowTasks.so
//#include "AliCFContainer.h"          // required dependency libCORRFW.so
//#include "AliAODRecoDecayHF2Prong.h"   // libPWGHFvertexingHF
#include "TObjArray.h"
#include "AliDxHFECorrelation.h"
#include "TMath.h"
#include "TFile.h"
#include "TCanvas.h"
#include "TDatabasePDG.h"
#include "TLorentzVector.h"
#include "AliReducedParticle.h"
#include "AliDxHFEParticleSelection.h"
#include <iostream>
#include <cerrno>
#include <memory>

using namespace std;

ClassImp(AliDxHFECorrelationMC)

AliDxHFECorrelationMC::AliDxHFECorrelationMC(const char* name)
  : AliDxHFECorrelation(name?name:"AliDxHFECorrelationMC")
  , fMCEventType(0)
{
  // default constructor
  // 
  //

}


AliDxHFECorrelationMC::~AliDxHFECorrelationMC()
{
  // destructor
  //
  //

}

THnSparse* AliDxHFECorrelationMC::DefineTHnSparse()
{
  //
  // Defines the THnSparse. 

  AliDebug(1, "Creating Corr THnSparse");
  // here is the only place to change the dimension
  static const int sizeEventdphi = 10;  
  InitTHnSparseArray(sizeEventdphi);
  const double pi=TMath::Pi();
  Double_t minPhi=GetMinPhi();
  Double_t maxPhi=GetMaxPhi();

  // TODO: Everything here needed for eventmixing? 
  // 			                        0        1     2      3      4     5       6      7    8      9
  // 			                      D0invmass  PtD0 PhiD0 PtbinD0 Pte  dphi    dEta OrigD0 origEl process
  int         binsEventdphi[sizeEventdphi] = {   200,   1000,  100,  21,   1000, 100,     100,   10,     14,  100 };
  double      minEventdphi [sizeEventdphi] = { 1.5648,     0,    0,   0,     0 , minPhi, -0.9, -1.5,   -1.5, -0.5 };
  double      maxEventdphi [sizeEventdphi] = { 2.1648,   100, 2*pi,  20,    100, maxPhi,  0.9,  8.5,   12.5, 99.5 };
  const char* nameEventdphi[sizeEventdphi] = {
    "D0InvMass",
    "PtD0",
    "PhiD0",
    "PtBinD0",
    "PtEl",
    "#Delta#Phi",
    "#Delta#eta", 
    "Origin D0", 
    "Origin Electron",
    "Original Process"
};

  TString name;
  name.Form("%s info", GetName());


  return CreateControlTHnSparse(name,sizeEventdphi,binsEventdphi,minEventdphi,maxEventdphi,nameEventdphi);


}


int AliDxHFECorrelationMC::FillParticleProperties(AliVParticle* tr, AliVParticle *as, Double_t* data, int dimension) const
{
  // fill the data array from the particle data
  if (!data) return -EINVAL;
  AliReducedParticle *ptrigger=(AliReducedParticle*)tr;
  AliReducedParticle *assoc=(AliReducedParticle*)as;
  if (!ptrigger || !assoc) return -ENODATA;
  int i=0;
  if (dimension!=GetDimTHnSparse()) {
    // TODO: think about filling only the available data and throwing a warning
    return -ENOSPC;
  }
  if(AliDxHFECorrelation::GetTriggerParticleType()==kD){
    data[i++]=ptrigger->GetInvMass();
    data[i++]=ptrigger->Pt();
    data[i++]=ptrigger->Phi();
    data[i++]=ptrigger->GetPtBin(); 
    data[i++]=assoc->Pt();
  } 
  else{
    data[i++]=assoc->GetInvMass();
    data[i++]=assoc->Pt();
    data[i++]=assoc->Phi();
    data[i++]=assoc->GetPtBin(); 
    data[i++]=ptrigger->Pt();
  }
  data[i++]=AliDxHFECorrelation::GetDeltaPhi();
  data[i++]=AliDxHFECorrelation::GetDeltaEta();
  if(AliDxHFECorrelation::GetTriggerParticleType()==kD){
    data[i++]=ptrigger->GetOriginMother();
    data[i++]=assoc->GetOriginMother();
  }
  else {
    data[i++]=assoc->GetOriginMother();
    data[i++]=ptrigger->GetOriginMother();
  }
  data[i++]=fMCEventType;
  
  return i;
}

int AliDxHFECorrelationMC::Fill(const TObjArray* triggerCandidates, TObjArray* associatedTracks, const AliVEvent* pEvent)
{
  // TODO: Implement more on MC?? (Needed?)
  return AliDxHFECorrelation::Fill(triggerCandidates,associatedTracks,pEvent);
}

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