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


///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  Time Projection Chamber                                                  //
//  Comparison macro for reconstructed tracks - ESDs V0s                                     //
//  responsible: 
//  marian.ivanov@cern.ch                                                    //
//
//

 



#include <stdio.h>
#include <string.h>
//ROOT includes
#include "Rtypes.h"
//
//ALIROOT includes
//
#include "AliESDtrack.h"
#include "AliTPCParam.h"
#include "AliTrackReference.h"
#include "AliTPCParamSR.h"
#include "AliESD.h"
#include "AliESDfriend.h"
#include "AliESDtrack.h"
#include "AliTPCseed.h"
#include "AliITStrackMI.h"
#include "AliHelix.h"
#include "AliESDVertex.h"
#include "AliExternalTrackParam.h"
#include "AliESDkink.h"
#include "AliESDv0.h"
#include "AliV0.h"
//
#include "AliTreeDraw.h"
#include "AliMCInfo.h"
#include "AliGenKinkInfo.h"
#include "AliGenV0Info.h"
#include "AliESDRecKinkInfo.h"



ClassImp(AliESDRecKinkInfo)



AliESDRecKinkInfo::AliESDRecKinkInfo():
  fT1(),      //track1
  fT2(),      //track2  
  fKink(),    //kink
  fDist1(0),    //info about closest distance according closest MC - linear DCA
  fDist2(0),    //info about closest distance parabolic DCA
  fInvMass(0),  //reconstructed invariant mass -
  //
  fRr(0),       // rec position of the vertex 
  fMinR(0),     // minimum radius in rphi intersection
  fDistMinR(0), // distance at minimal radius
  fPointAngleFi(0), //point angle fi
  fPointAngleTh(0), //point angle theta
  fPointAngle(0),   //point angle full
  fStatus(0),       //status -tracks 
  fRecStatus(0),    //kink -status- 0 - not found  1-good -  fake
  fMultiple(0),     // how many times was kink reconstructed
  fKinkMultiple(0) // how many times was kink reconstructed
{
  //
  // Default constructor
  //
  for (Int_t i=0; i<3; i++) {
    fPdr[i] = 0;
    fXr[i] = 0;
    fPm[i] = 0;
    fAngle[i] = 0;
  }
  for (Int_t i=0; i<2; i++) { fLab[i] = 0; } 
}

////
void  AliESDRecKinkInfo::Update()
{

  if ( (fT1.fTPCOn)&& (fT2.fTPCOn)){
    //
    // IF BOTH RECONSTRUCTED
    Float_t distance1,distance2;
    Double_t xx[3],pp[3];
    //
    Double_t xd[3],pd[3],signd;
    Double_t xm[3],pm[3],signm;
    for (Int_t i=0;i<3;i++){
      xd[i] = fT2.fTPCinR1[i];
      pd[i] = fT2.fTPCinP1[i];
      xm[i] = fT1.fTPCinR1[i];
      pm[i] = fT1.fTPCinP1[i];
    }
    signd =  fT2.fSign<0 ? -1:1;
    signm =  fT1.fSign<0 ? -1:1;

    AliHelix dhelix1(xd,pd,signd);
    dhelix1.GetMomentum(0,pp,0);
    dhelix1.Evaluate(0,xx);      
    // 
    //  Double_t x2[3],p2[3];
    //            
    AliHelix mhelix(xm,pm,signm);    
    //
    //find intersection linear
    //
    Double_t phase[2][2] = { {0,0}, {0,0}};
    Double_t radius[2] = {0} ;
    Int_t  points = dhelix1.GetRPHIintersections(mhelix, phase, radius,200);
    Double_t delta1=10000,delta2=10000;  

    if (points==1){
      fMinR = TMath::Sqrt(radius[0]);
    }
    if (points==2){
      fMinR =TMath::Min(TMath::Sqrt(radius[0]),TMath::Sqrt(radius[1]));
    }
    
    if (points>0){
      dhelix1.LinearDCA(mhelix,phase[0][0],phase[0][1],radius[0],delta1);
      dhelix1.LinearDCA(mhelix,phase[0][0],phase[0][1],radius[0],delta1);
      dhelix1.LinearDCA(mhelix,phase[0][0],phase[0][1],radius[0],delta1);
    }
    if (points==2){    
      dhelix1.LinearDCA(mhelix,phase[1][0],phase[1][1],radius[1],delta2);
      dhelix1.LinearDCA(mhelix,phase[1][0],phase[1][1],radius[1],delta2);
      dhelix1.LinearDCA(mhelix,phase[1][0],phase[1][1],radius[1],delta2);
    }
    if (points==1){
      fMinR = TMath::Sqrt(radius[0]);
      fDistMinR = delta1;
    }
    if (points==2){
      if (radius[0]<radius[1]){
	fMinR = TMath::Sqrt(radius[0]);
	fDistMinR = delta1;
      }
      else{
	fMinR = TMath::Sqrt(radius[1]);
	fDistMinR = delta2;
      }
    }
    //
    //
    distance1 = TMath::Min(delta1,delta2);
    //
    //find intersection parabolic
    //
    points = dhelix1.GetRPHIintersections(mhelix, phase, radius);
    delta1=10000,delta2=10000;  
    
    if (points>0){
      dhelix1.ParabolicDCA(mhelix,phase[0][0],phase[0][1],radius[0],delta1);
    }
    if (points==2){    
      dhelix1.ParabolicDCA(mhelix,phase[1][0],phase[1][1],radius[1],delta2);
    }
    
    distance2 = TMath::Min(delta1,delta2);
    if (delta1<delta2){
      //get V0 info
      dhelix1.Evaluate(phase[0][0],fXr);
      dhelix1.GetMomentum(phase[0][0],fPdr);
      mhelix.GetMomentum(phase[0][1],fPm);
      dhelix1.GetAngle(phase[0][0],mhelix,phase[0][1],fAngle);
      fRr = TMath::Sqrt(radius[0]);
    }
    else{
      dhelix1.Evaluate(phase[1][0],fXr);
      dhelix1.GetMomentum(phase[1][0], fPdr);
      mhelix.GetMomentum(phase[1][1], fPm);
      dhelix1.GetAngle(phase[1][0],mhelix,phase[1][1],fAngle);
      fRr = TMath::Sqrt(radius[1]);
    }
    fDist1 = TMath::Sqrt(distance1);
    fDist2 = TMath::Sqrt(distance2);      
    
    if (fDist2<10.5){
      Double_t x,alpha,param[5],cov[15];
      //
      fT1.GetESDtrack()->GetInnerExternalParameters(alpha,x,param);
      fT1.GetESDtrack()->GetInnerExternalCovariance(cov);
      AliExternalTrackParam paramm(x,alpha,param,cov);
      //
      fT2.GetESDtrack()->GetInnerExternalParameters(alpha,x,param);
      fT2.GetESDtrack()->GetInnerExternalCovariance(cov);
      AliExternalTrackParam paramd(x,alpha,param,cov);
      /*
      AliESDkink kink;
      kink.Update(&paramm,&paramd);
      //      kink.Dump();
      Double_t diff  = kink.fRr-fRr;
      Double_t diff2 = kink.fDist2-fDist2;
      printf("Diff\t%f\t%f\n",diff,diff2);
      */
    }
    
    //            
    //
  }

}

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