ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, 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.                  *
 **************************************************************************/

// Extension to Pi0FlowMC, using parametrized weights.
// Authors: Boris Polishchuk
// Date   : 09.07.2013

#include "AliStack.h"
#include "TParticle.h"
#include "AliCaloPhoton.h"
#include "TH1.h"

#include "AliAnalysisTaskPi0FlowMCParamWeights.h"

ClassImp(AliAnalysisTaskPi0FlowMCParamWeights);

AliAnalysisTaskPi0FlowMCParamWeights::AliAnalysisTaskPi0FlowMCParamWeights(const char* name, AliAnalysisTaskPi0Flow::Period period)
: AliAnalysisTaskPi0FlowMC(name, period)
{}

AliAnalysisTaskPi0FlowMCParamWeights::~AliAnalysisTaskPi0FlowMCParamWeights()
{}

void AliAnalysisTaskPi0FlowMCParamWeights::UserCreateOutputObjects()
{
  // Do Pi0FlowMC CreateOuputObjects and call Sumw2 for newly created histograms.
  AliAnalysisTaskPi0FlowMC::UserCreateOutputObjects();
  
  TH1 * hist = 0;
  char key[80];

  const int kNPID = 14;
  const char* pidNames[kNPID] = {"All", "Allcore", "Disp", "Disp2", "Dispcore",  "Disp2core", "CPV", "CPVcore", "CPV2", "CPV2core", "Both", "Bothcore", "Both2", "Both2core"};
  
  for(UInt_t iBin=0; iBin<GetNumberOfCentralityBins(); iBin++) {
    for(Int_t ipid=0; ipid < kNPID; ipid++){

      sprintf(key,"hPi0%s_cen%d", pidNames[ipid],iBin);  
      hist = dynamic_cast<TH1*>(fOutputContainer->FindObject(key));
      hist->Sumw2(); printf("     ->Sumw2 invoked for %s.\n",key);

      sprintf(key,"hMiPi0%s_cen%d", pidNames[ipid],iBin);  
      hist = dynamic_cast<TH1*>(fOutputContainer->FindObject(key));
      hist->Sumw2(); printf("     ->Sumw2 invoked for %s.\n",key);
    }
  }
  
}

Double_t AliAnalysisTaskPi0FlowMCParamWeights::PrimaryWeight(Int_t primary){
  //Check who is the primary and introduce weight to correct primary spectrum 
 
  if(primary<0 || primary>=fStack->GetNtrack())
    return 1 ;
  //trace primaries up to IP
  TParticle* particle =  fStack->Particle(primary);

  Double_t r=particle->R() ;
  Int_t mother = particle->GetFirstMother() ;
  while(mother>-1){
    if(r<1.)
      break ;
    particle =  fStack->Particle(mother);
    mother = particle->GetFirstMother() ;
    r=particle->R() ;
  }
  
  return TMath::Max(0.,PrimaryParticleWeight(particle)) ;
}

Double_t AliAnalysisTaskPi0FlowMCParamWeights::PrimaryParticleWeight(TParticle * particle){
  //Weight for particle

    
  // pi0 weight (MC/Data):
  // w = (par[0]+par[1]*x[0]+par[2]*x[0]*x[0]+par[3]*x[0]*x[0]*x[0])/(1.+par[3]*x[0]+par[4]*x[0]*x[0]+par[5]*x[0]*x[0]*x[0]);
    
    Int_t pdg = particle->GetPdgCode() ;
    Double_t x = particle->Pt() ;
    Int_t mother = particle->GetFirstMother() ;
    while(TMath::Abs(pdg)<100){//gamma, electrons, muons
        if(mother>-1){
            TParticle * tmpP=fStack->Particle(mother) ;
            pdg=tmpP->GetPdgCode() ;
            x = tmpP->Pt() ;
            mother = tmpP->GetFirstMother() ;
        }
        else{ //direct photon/electron....
            return 1.;
        }
    }
    

    //lhc13e7    
    Double_t w = 15.9695 -26.2752*x + 16.7259*x*x -4.77561*x*x*x +0.602569*x*x*x*x;
    
    //single pi0: 0-25GeV-flat
    //Double_t w = 1.48592 -2.78259*x + 2.01851*x*x -0.661467*x*x*x +0.0980217*x*x*x*x;

    //single pi0: 0-6GeV-flat
    //Double_t w = 55.6309 -102.175*x + 73.7241*x*x -24.3558*x*x*x +3.74631*x*x*x*x;

    return 1./w;
    
}



 AliAnalysisTaskPi0FlowMCParamWeights.cxx:1
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:2
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:3
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:4
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:5
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:6
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:7
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:8
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:9
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:10
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:11
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:12
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:13
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:14
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:15
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:16
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:17
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:18
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:19
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:20
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:21
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:22
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:23
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:24
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:25
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:26
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:27
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:28
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:29
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:30
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:31
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:32
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:33
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:34
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:35
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:36
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:37
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:38
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:39
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:40
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:41
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:42
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:43
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:44
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:45
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:46
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:47
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:48
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:49
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:50
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:51
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:52
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:53
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:54
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:55
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:56
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:57
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:58
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:59
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:60
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:61
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:62
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:63
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:64
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:65
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:66
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:67
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:68
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:69
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:70
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:71
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:72
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:73
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:74
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:75
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:76
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:77
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:78
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:79
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:80
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:81
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:82
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:83
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:84
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:85
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:86
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:87
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:88
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:89
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:90
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:91
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:92
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:93
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:94
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:95
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:96
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:97
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:98
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:99
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:100
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:101
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:102
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:103
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:104
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:105
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:106
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:107
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:108
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:109
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:110
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:111
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:112
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:113
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:114
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:115
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:116
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:117
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:118
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:119
 AliAnalysisTaskPi0FlowMCParamWeights.cxx:120