ROOT logo
#include "AliSPDMCTrackDensity.h"
#include "AliMCEvent.h"
#include "AliTrackReference.h"
#include "AliForwardUtil.h"
#include <TMath.h>
#include <AliLog.h>
#include <TROOT.h>
#include <TH2D.h>
#include <iostream>

//____________________________________________________________________
AliSPDMCTrackDensity::AliSPDMCTrackDensity()
  : AliBaseMCTrackDensity(), 
    fMinR(3.5), 
    fMaxR(4.5),
    fMinZ(-15), // -14.1), 
    fMaxZ(+15), // +14.1)
    fStored(0), 
    fOutput(0)
{
  // Default constructor 
}

//____________________________________________________________________
AliSPDMCTrackDensity::AliSPDMCTrackDensity(const char*)
  : AliBaseMCTrackDensity("spdMCTrackDensity"), 
    fMinR(3.5), 
    fMaxR(4.5),
    fMinZ(-14.1), 
    fMaxZ(+14.1),
    fStored(0), 
    fOutput(0)
{
  // Normal constructor constructor 
}

//____________________________________________________________________
AliSPDMCTrackDensity::AliSPDMCTrackDensity(const AliSPDMCTrackDensity& o)
  : AliBaseMCTrackDensity(o),
    fMinR(o.fMinR), 
    fMaxR(o.fMaxR),
    fMinZ(o.fMinZ), 
    fMaxZ(o.fMaxZ), 
    fStored(o.fStored), 
    fOutput(o.fOutput)
{
  // Normal constructor constructor 
}

//____________________________________________________________________
AliSPDMCTrackDensity&
AliSPDMCTrackDensity::operator=(const AliSPDMCTrackDensity& o)
{
  // Assignment operator 
  if (&o == this) return *this;
  AliBaseMCTrackDensity::operator=(o);
  fMinR             = o.fMinR;
  fMaxR             = o.fMaxR;
  fMinZ             = o.fMinZ;
  fMaxZ             = o.fMaxZ;
  fStored           = o.fStored;
  fOutput           = o.fOutput;

  return *this;
}

//____________________________________________________________________
Int_t
AliSPDMCTrackDensity::GetDetectorId() const
{
  return AliTrackReference::kITS;
}


//____________________________________________________________________
void
AliSPDMCTrackDensity::BeginTrackRefs()
{
  fStored = 0;
}

//____________________________________________________________________
Bool_t
AliSPDMCTrackDensity::CheckTrackRef(AliTrackReference*   ref) const
{
  // Get radius and z where the track reference was made 
  Double_t r = ref->R();
  Double_t z = ref->Z();
  if (r > fMaxR || r < fMinR) return false;
  if (z > fMaxZ || z < fMinZ) return false;

  return true;
}
//____________________________________________________________________
AliTrackReference*
AliSPDMCTrackDensity::ProcessRef(AliMCParticle*       /*particle*/,
				 const AliMCParticle* /*mother*/,
				 AliTrackReference*   ref)
{
  if (fStored) return 0;

  return fStored = ref;
}

//____________________________________________________________________
Double_t
AliSPDMCTrackDensity::StoreParticle(AliMCParticle* particle, 
				    const AliMCParticle* mother, 
				    AliTrackReference*   ref) const
{
  Double_t w = AliBaseMCTrackDensity::StoreParticle(particle, mother, ref);
  Double_t r = ref->R();
  Double_t x = ref->X();
  Double_t y = ref->Y();
  Double_t z = ref->Z();

  Double_t zr = z-fVz;
  Double_t th = TMath::ATan2(r,zr);
  if (th < 0) th += 2*TMath::Pi();
  Double_t et = -TMath::Log(TMath::Tan(th/2));
  Double_t ph = TMath::ATan2(y,x);
  if (ph < 0) ph += 2*TMath::Pi();
  fOutput->Fill(et,ph,w);

  return w;
}


//____________________________________________________________________
Bool_t
AliSPDMCTrackDensity::Calculate(const AliMCEvent& event, 
				Double_t          vz,
				TH2D&             output, 
				TH2D*             primary)
{
  // 
  // Filter the input kinematics and track references, using 
  // some of the ESD information
  // 
  // Parameters:
  //    input   Input ESD event
  //    event   Input MC event
  //    vz      Vertex position 
  //    output  Output ESD-like object
  //    primary Per-event histogram of primaries 
  //
  // Return:
  //    True on succes, false otherwise 
  //
  fOutput = &output;

  return ProcessTracks(event, vz, primary);
}
#define PF(N,V,...)					\
  AliForwardUtil::PrintField(N,V, ## __VA_ARGS__)

#define PFV(N,VALUE)					\
  do {							\
    AliForwardUtil::PrintName(N);			\
    std::cout << (VALUE) << std::endl; } while(false)
//____________________________________________________________________
void
AliSPDMCTrackDensity::Print(Option_t* option) const 
{
  AliBaseMCTrackDensity::Print(option);
  gROOT->IncreaseDirLevel();
  PF("R range", "[%f,%f]", fMinR, fMaxR);
  PF("Z range", "[%f,%f]", fMinZ, fMaxZ);
  gROOT->DecreaseDirLevel();
}

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