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.                  *
 **************************************************************************/

//************************************************************************
//
//   ESD track and V0 resolution parameterization
//   
//             
//    Origin: Marian Ivanov marian.ivanov@cern.ch
//-------------------------------------------------------------------------

/*
  The track parameter resolution is determined by the intrinsic detector
  resolution and by the multiple scattering and fluctuation of the energy 
  loss in the material.

  The contribution from the intrinsic detector resolution is independent of
  the particle momenta and the mass of particle. In the limit limit of infinite
  momenta - zero curvature, the intrinsic detector resolution can be obtained.
 
  Multiple effect scaling:

  SCATERING ANGLE   - fi, theta
        sigma A   += sqrt(14.1*14.1/(beta2*p2*1e6)*TMath::Abs(xOverX0));
        sigma A    ~ 1/p
        sigma sfi  += sigma A *  sqrt((1-sfi^2) * (1+ tth^2))
        sigma tth  += sigma A * (1+tth^2)    

  MOMENTUM Pt: 
        sigma 1/pt = sigma A  * 1/pt * tth
        sigma 1/pt ~ (1/pt)^2
  
  POSITION y, z:	
        sigma y   +~ sigma A * eff length (between update measurements) ~ 1/pt 
        sigma z   +~ sigma A * eff length (between update measurements) ~ 1/pt
  Example usage:
    

*/


#include "TVectorD.h"
#include "TMath.h"
#include "TObjArray.h"
#include "AliESDresolParams.h"


ClassImp(AliESDresolParams)


 AliESDresolParams*    AliESDresolParams::fgInstance = 0x0; //! Instance of this class (singleton implementation)


AliESDresolParams::AliESDresolParams() :
  TObject(),  
  fResolDCAyy(0),            // resolution Y parameterization
  fResolDCAzz(0),            // resolution Z parameterization   
  fResolDCAphi(0),           // resolution phi parameterization - pt-theta
  fResolDCAth(0),            // resolution theta parameterization -pt-theta
  fResolDCA1pt(0),           // resolution 1/pt parameterization - pt-theta
  //
  fResolCyy(0),              // DCA resolution Y parameterization - r-pt
  fResolCzz(0),              // DCA resolution Z parameterization - r-pt
  fResolCphi(0),             // DCA resolution phi parameterization - r-pt
  fResolCth(0),              // DCA resolution theta parameterization - r-pt
  fResolC1pt(0)             // DCA resolution 1/pt parameterization - r-pt
{
  //
  // Default constructor
  //
}

Double_t AliESDresolParams::GetResolPrimFast(Int_t param, Float_t onept, Float_t tanth) const {
  //
  // Resolution at primary vertex
  // simple Resolution parameterization 
  // polynom of second order in 2D 
  // 
  if (!fResolDCAyy) return 0;
  TVectorD * pvec     = fResolDCAyy;
  if (param==1)  pvec = fResolDCAzz;
  if (param==2)  pvec = fResolDCAphi;
  if (param==3)  pvec = fResolDCAth;
  if (param==4)  pvec = fResolDCA1pt;
  TVectorD &vec = *pvec;
  //
  Float_t val = vec[0];
  val+= vec[1]*TMath::Abs(onept);
  val+= vec[2]*TMath::Abs(onept*onept);
  val+= vec[3]*TMath::Abs(tanth);
  val+= vec[4]*TMath::Abs(tanth*tanth);
  val+= vec[5]*TMath::Abs(onept*tanth);
  Float_t shift1pt=0;
  if (param==0 || param==1) shift1pt=0.2;
  if (param==2 || param==3) shift1pt=0.1;
  if (param==4)             shift1pt=1.;
  val*= (onept+shift1pt);  
  if (param==4) val*=(onept+shift1pt);
  return val;
}

Double_t AliESDresolParams::GetResolRFast(Int_t param, Float_t onept, Float_t radius) const {
  //
  // simple DCA resolution parameterization
  // polynom of second order in 2D 
  // 
  if (!fResolCyy) return 0;
  TVectorD * pvec     = fResolCyy;
  if (param==1)  pvec = fResolCzz;
  if (param==2)  pvec = fResolCphi;
  if (param==3)  pvec = fResolCth;
  if (param==4)  pvec = fResolC1pt;
  TVectorD &vec = *pvec;
  //
  Float_t val = vec[0];
  val+= vec[1]*TMath::Abs(onept);
  val+= vec[2]*TMath::Abs(radius);
  val+= vec[3]*TMath::Abs(onept*onept);
  val+= vec[4]*TMath::Abs(radius*radius);
  val+= vec[5]*TMath::Abs(radius*onept);
  val+= vec[6]*TMath::Abs(radius*radius*onept);
  val*=val;
  return val;
}

void AliESDresolParams::SetResolPrimFast(TObjArray* array){
  //
  // Set parameters - resolution at prim vertex
  //
  if (!array) return;  
  if (array->At(0)) 
    fResolDCAyy = new TVectorD(*((TVectorD*)array->At(0))); 
  if (array->At(1)) 
    fResolDCAzz = new TVectorD(*((TVectorD*)array->At(1))); 
  if (array->At(2)) 
    fResolDCAphi = new TVectorD(*((TVectorD*)array->At(2))); 
  if (array->At(3)) 
    fResolDCAth = new TVectorD(*((TVectorD*)array->At(3))); 
  if (array->At(4)) 
    fResolDCA1pt = new TVectorD(*((TVectorD*)array->At(4))); 
}

void AliESDresolParams::SetResolRFast(TObjArray* array){
  //
  // Set parameters - resolution at prim vertex
  //
  if (!array) return;  
  if (array->At(0)) 
    fResolCyy = new TVectorD(*((TVectorD*)array->At(0))); 
  if (array->At(1)) 
    fResolCzz = new TVectorD(*((TVectorD*)array->At(1))); 
  if (array->At(2)) 
    fResolCphi = new TVectorD(*((TVectorD*)array->At(2))); 
  if (array->At(3)) 
    fResolCth = new TVectorD(*((TVectorD*)array->At(3))); 
  if (array->At(4)) 
    fResolC1pt = new TVectorD(*((TVectorD*)array->At(4)));   
}




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