ROOT logo
#include "AliITSUTrackHyp.h"
#include "AliESDtrack.h"
#include "AliCluster.h"
#include "AliITSUAux.h"
#include <TString.h>

ClassImp(AliITSUTrackHyp)



//__________________________________________________________________
AliITSUTrackHyp::AliITSUTrackHyp(Int_t nlr) 
: fNLayers(nlr)
  ,fITSLabel(0)
  ,fESDTrack(0)
  ,fWinner(0)
  ,fTPCSeed(0)
  ,fLayerSeeds(0)
{
  // def. c-tor
  if (fNLayers>0) fLayerSeeds = new TObjArray[fNLayers];
}

//__________________________________________________________________
AliITSUTrackHyp::~AliITSUTrackHyp() 
{
  // d-tor
  delete[] fLayerSeeds;
  delete fTPCSeed;
}

//__________________________________________________________________
AliITSUTrackHyp::AliITSUTrackHyp(const AliITSUTrackHyp &src)
  : AliKalmanTrack(src)
  , fNLayers(src.fNLayers)
  , fITSLabel(src.fITSLabel)
  , fESDTrack(src.fESDTrack)
  , fWinner(0)
  , fTPCSeed(src.fTPCSeed)
  , fLayerSeeds(0)
{
  // copy c-tor. Note: it is shallow
  if (fNLayers>0) {
    fLayerSeeds = new TObjArray[fNLayers];
    for (int ilr=fNLayers;ilr--;) {
      int ns = src.GetNSeeds(ilr);
      for (int isd=0;isd<ns;isd++) {
	AliITSUSeed* sd = src.GetSeed(ilr,isd);
	if (sd->IsKilled()) continue;
	AddSeed(sd,ilr);
      }      
    }
    fWinner = src.fWinner;
  }
  //
}

//__________________________________________________________________
AliITSUTrackHyp::AliITSUTrackHyp(const AliKalmanTrack &src)
  : AliKalmanTrack(src)
  , fNLayers(0)
  , fITSLabel(0)
  , fESDTrack(0)
  , fWinner(0)
  , fTPCSeed(0)
  , fLayerSeeds(0)
{
  // copy c-tor. from KalmanTrack
  //
}

//__________________________________________________________________
AliITSUTrackHyp::AliITSUTrackHyp(const AliESDtrack &src)
  : AliKalmanTrack()
  , fNLayers(0)
  , fITSLabel(0)
  , fESDTrack(0)
  , fWinner(0)
  , fTPCSeed(0)
  , fLayerSeeds(0)
{
  // copy c-tor. from ESD track: take only kinematics, mass and time integral
  AliExternalTrackParam::operator=((const AliExternalTrackParam&)src);
  SetMass(src.GetMassForTracking());
  if (src.IsOn(AliESDtrack::kTIME)) {
    StartTimeIntegral();
    SetIntegratedLength(src.GetIntegratedLength());
    double times[AliPID::kSPECIESC];
    src.GetIntegratedTimes(times,AliPID::kSPECIESC);
    SetIntegratedTimes(times);
  }
  //
}

//__________________________________________________________________
void AliITSUTrackHyp::InitFrom(const AliITSUTrackHyp *src)
{
  // copy initial params
  fNLayers = src->fNLayers;
  fITSLabel = src->fITSLabel;
  fESDTrack = src->fESDTrack;
  fWinner = src->fWinner;
  fTPCSeed = src->fTPCSeed;
  //
}

//__________________________________________________________________
AliITSUTrackHyp &AliITSUTrackHyp::operator=(const AliITSUTrackHyp &src)
{
  // copy 
  if (this == &src) return *this;
  this->~AliITSUTrackHyp();
  new(this) AliITSUTrackHyp(src);
  return *this;
  //
}

//__________________________________________________________________
AliITSUTrackHyp &AliITSUTrackHyp::operator=(const AliKalmanTrack &src)
{ 
  // copy kinematics only
  if (this == &src) return *this;
  AliKalmanTrack::operator=(src);
  return *this;
  //
}

//__________________________________________________________________
AliITSUTrackHyp &AliITSUTrackHyp::operator=(const AliESDtrack &src)
{
  // copy oparator from ESD track: take only kinematics, mass and time integral
  AliExternalTrackParam::operator=((const AliExternalTrackParam&)src);
  SetMass(src.GetMassForTracking());
  if (src.IsOn(AliESDtrack::kTIME)) {
    StartTimeIntegral();
    SetIntegratedLength(src.GetIntegratedLength());
    double times[AliPID::kSPECIESC];
    src.GetIntegratedTimes(times,AliPID::kSPECIESC);
    SetIntegratedTimes(times);
  }
  //
  return *this;
}


//__________________________________________________________________
void AliITSUTrackHyp::Print(Option_t* opt) const
{
  printf("Track Hyp.#%4d. NSeeds:",GetUniqueID());
  TString opts = opt;
  opts.ToLower();
  Bool_t prSeeds = opts.Contains("l");
  for (int i=0;i<fNLayers;i++) {
    printf("Lr (%d) %3d ",i,GetNSeeds(i)); 
    if (prSeeds) {
      printf("\n");
      for (int isd=0;isd<GetNSeeds(i);isd++) ((AliITSUSeed*)GetSeed(i,isd))->Print(opt);
    }
  }
  if (!prSeeds) printf("\n");
}

//__________________________________________________________________
AliITSUSeed* AliITSUTrackHyp::GetWinner() const
{
  // Get best candidate. TODO
  return fWinner;
}

//__________________________________________________________________
AliITSUSeed* AliITSUTrackHyp::DefineWinner(int lr, int id)
{
  // assign best candidate
  int nsd = GetNSeeds(lr);
  while ( id<nsd && ( !(fWinner=GetSeed(lr,id)) || fWinner->IsKilled() ) ) {id++; fWinner=0;}
  if (!fWinner) {
    //    AliInfo(Form("No winner candidates out of %d for %d",nsd,GetUniqueID()));
    return 0;
  }
  UInt_t idESD = GetUniqueID(); // retain ESDtrackID
  this->AliExternalTrackParam::operator=(*fWinner);
  SetUniqueID(idESD);
  SetChi2(fWinner->GetChi2GloNrm());
  SetNumberOfClusters(fWinner->GetNLayersHit());
  return fWinner;
}

//__________________________________________________________________
Double_t AliITSUTrackHyp::GetPredictedChi2(const AliCluster *cl) const
{
  // calculate chi2 to cluster
  Double_t p[2]={cl->GetY(), cl->GetZ()};
  Double_t cov[3]={cl->GetSigmaY2(), cl->GetSigmaYZ(), cl->GetSigmaZ2()};
  return AliExternalTrackParam::GetPredictedChi2(p,cov);
}

//__________________________________________________________________
Bool_t AliITSUTrackHyp::PropagateTo(Double_t /*xr*/, Double_t /*x0*/, Double_t /*rho*/)
{
  // NA
  AliFatal("Not to be used");
  return 0;
}

//__________________________________________________________________
Bool_t AliITSUTrackHyp::Update(const AliCluster* /*c*/, Double_t /*chi2*/, Int_t /*index*/)
{
  // NA
  AliFatal("Not to be used");
  return kFALSE;
}

//__________________________________________________________________
Double_t AliITSUTrackHyp::Update(const AliCluster* cl)
{
  // update with cluster
  Double_t p[2]={cl->GetY(), cl->GetZ()};
  Double_t cov[3]={cl->GetSigmaY2(), cl->GetSigmaYZ(), cl->GetSigmaZ2()};
  double chi2 = AliExternalTrackParam::GetPredictedChi2(p,cov);
  if (!AliExternalTrackParam::Update(p,cov)) return -1;
  SetChi2(GetChi2()+chi2);
  return chi2;
}

//__________________________________________________________________
Int_t AliITSUTrackHyp::FetchClusterInfo(Int_t *clIDarr) const
{
  // fill cl.id's in the array. The clusters of layer L will be set at slots
  // clID[2L] (and clID[2L+1] if there is an extra cluster).
  for (int i=fNLayers<<1;i--;) clIDarr[i]=-1;
  return GetWinner() ? GetWinner()->FetchClusterInfo(clIDarr) : 0;
}

//__________________________________________________________________
Int_t AliITSUTrackHyp::GetNumberOfClusters() const
{
  // This is a temporary (slow) way of accessing number of clusters
  // TODO: add dedicated data members filled by winner
  AliITSUSeed* seed = GetWinner();
  int ncl = 0;
  if (!seed) {
    AliFatal("The winner is not set");
    return ncl;
  }
  return seed->GetNClusters();
  //
}

//__________________________________________________________________
Int_t AliITSUTrackHyp::GetClusterIndex(Int_t ind) const 
{
  // This is a temporary (slow) way of accessing cluster index
  // TODO: add dedicated data members filled by winner
  AliITSUSeed* seed = GetWinner();
  //  int ncl = 0;
  if (!seed) {
    AliFatal("The winner is not set");
    return -1;
  }
  return seed->GetClusterIndex(ind);
  //
}
 AliITSUTrackHyp.cxx:1
 AliITSUTrackHyp.cxx:2
 AliITSUTrackHyp.cxx:3
 AliITSUTrackHyp.cxx:4
 AliITSUTrackHyp.cxx:5
 AliITSUTrackHyp.cxx:6
 AliITSUTrackHyp.cxx:7
 AliITSUTrackHyp.cxx:8
 AliITSUTrackHyp.cxx:9
 AliITSUTrackHyp.cxx:10
 AliITSUTrackHyp.cxx:11
 AliITSUTrackHyp.cxx:12
 AliITSUTrackHyp.cxx:13
 AliITSUTrackHyp.cxx:14
 AliITSUTrackHyp.cxx:15
 AliITSUTrackHyp.cxx:16
 AliITSUTrackHyp.cxx:17
 AliITSUTrackHyp.cxx:18
 AliITSUTrackHyp.cxx:19
 AliITSUTrackHyp.cxx:20
 AliITSUTrackHyp.cxx:21
 AliITSUTrackHyp.cxx:22
 AliITSUTrackHyp.cxx:23
 AliITSUTrackHyp.cxx:24
 AliITSUTrackHyp.cxx:25
 AliITSUTrackHyp.cxx:26
 AliITSUTrackHyp.cxx:27
 AliITSUTrackHyp.cxx:28
 AliITSUTrackHyp.cxx:29
 AliITSUTrackHyp.cxx:30
 AliITSUTrackHyp.cxx:31
 AliITSUTrackHyp.cxx:32
 AliITSUTrackHyp.cxx:33
 AliITSUTrackHyp.cxx:34
 AliITSUTrackHyp.cxx:35
 AliITSUTrackHyp.cxx:36
 AliITSUTrackHyp.cxx:37
 AliITSUTrackHyp.cxx:38
 AliITSUTrackHyp.cxx:39
 AliITSUTrackHyp.cxx:40
 AliITSUTrackHyp.cxx:41
 AliITSUTrackHyp.cxx:42
 AliITSUTrackHyp.cxx:43
 AliITSUTrackHyp.cxx:44
 AliITSUTrackHyp.cxx:45
 AliITSUTrackHyp.cxx:46
 AliITSUTrackHyp.cxx:47
 AliITSUTrackHyp.cxx:48
 AliITSUTrackHyp.cxx:49
 AliITSUTrackHyp.cxx:50
 AliITSUTrackHyp.cxx:51
 AliITSUTrackHyp.cxx:52
 AliITSUTrackHyp.cxx:53
 AliITSUTrackHyp.cxx:54
 AliITSUTrackHyp.cxx:55
 AliITSUTrackHyp.cxx:56
 AliITSUTrackHyp.cxx:57
 AliITSUTrackHyp.cxx:58
 AliITSUTrackHyp.cxx:59
 AliITSUTrackHyp.cxx:60
 AliITSUTrackHyp.cxx:61
 AliITSUTrackHyp.cxx:62
 AliITSUTrackHyp.cxx:63
 AliITSUTrackHyp.cxx:64
 AliITSUTrackHyp.cxx:65
 AliITSUTrackHyp.cxx:66
 AliITSUTrackHyp.cxx:67
 AliITSUTrackHyp.cxx:68
 AliITSUTrackHyp.cxx:69
 AliITSUTrackHyp.cxx:70
 AliITSUTrackHyp.cxx:71
 AliITSUTrackHyp.cxx:72
 AliITSUTrackHyp.cxx:73
 AliITSUTrackHyp.cxx:74
 AliITSUTrackHyp.cxx:75
 AliITSUTrackHyp.cxx:76
 AliITSUTrackHyp.cxx:77
 AliITSUTrackHyp.cxx:78
 AliITSUTrackHyp.cxx:79
 AliITSUTrackHyp.cxx:80
 AliITSUTrackHyp.cxx:81
 AliITSUTrackHyp.cxx:82
 AliITSUTrackHyp.cxx:83
 AliITSUTrackHyp.cxx:84
 AliITSUTrackHyp.cxx:85
 AliITSUTrackHyp.cxx:86
 AliITSUTrackHyp.cxx:87
 AliITSUTrackHyp.cxx:88
 AliITSUTrackHyp.cxx:89
 AliITSUTrackHyp.cxx:90
 AliITSUTrackHyp.cxx:91
 AliITSUTrackHyp.cxx:92
 AliITSUTrackHyp.cxx:93
 AliITSUTrackHyp.cxx:94
 AliITSUTrackHyp.cxx:95
 AliITSUTrackHyp.cxx:96
 AliITSUTrackHyp.cxx:97
 AliITSUTrackHyp.cxx:98
 AliITSUTrackHyp.cxx:99
 AliITSUTrackHyp.cxx:100
 AliITSUTrackHyp.cxx:101
 AliITSUTrackHyp.cxx:102
 AliITSUTrackHyp.cxx:103
 AliITSUTrackHyp.cxx:104
 AliITSUTrackHyp.cxx:105
 AliITSUTrackHyp.cxx:106
 AliITSUTrackHyp.cxx:107
 AliITSUTrackHyp.cxx:108
 AliITSUTrackHyp.cxx:109
 AliITSUTrackHyp.cxx:110
 AliITSUTrackHyp.cxx:111
 AliITSUTrackHyp.cxx:112
 AliITSUTrackHyp.cxx:113
 AliITSUTrackHyp.cxx:114
 AliITSUTrackHyp.cxx:115
 AliITSUTrackHyp.cxx:116
 AliITSUTrackHyp.cxx:117
 AliITSUTrackHyp.cxx:118
 AliITSUTrackHyp.cxx:119
 AliITSUTrackHyp.cxx:120
 AliITSUTrackHyp.cxx:121
 AliITSUTrackHyp.cxx:122
 AliITSUTrackHyp.cxx:123
 AliITSUTrackHyp.cxx:124
 AliITSUTrackHyp.cxx:125
 AliITSUTrackHyp.cxx:126
 AliITSUTrackHyp.cxx:127
 AliITSUTrackHyp.cxx:128
 AliITSUTrackHyp.cxx:129
 AliITSUTrackHyp.cxx:130
 AliITSUTrackHyp.cxx:131
 AliITSUTrackHyp.cxx:132
 AliITSUTrackHyp.cxx:133
 AliITSUTrackHyp.cxx:134
 AliITSUTrackHyp.cxx:135
 AliITSUTrackHyp.cxx:136
 AliITSUTrackHyp.cxx:137
 AliITSUTrackHyp.cxx:138
 AliITSUTrackHyp.cxx:139
 AliITSUTrackHyp.cxx:140
 AliITSUTrackHyp.cxx:141
 AliITSUTrackHyp.cxx:142
 AliITSUTrackHyp.cxx:143
 AliITSUTrackHyp.cxx:144
 AliITSUTrackHyp.cxx:145
 AliITSUTrackHyp.cxx:146
 AliITSUTrackHyp.cxx:147
 AliITSUTrackHyp.cxx:148
 AliITSUTrackHyp.cxx:149
 AliITSUTrackHyp.cxx:150
 AliITSUTrackHyp.cxx:151
 AliITSUTrackHyp.cxx:152
 AliITSUTrackHyp.cxx:153
 AliITSUTrackHyp.cxx:154
 AliITSUTrackHyp.cxx:155
 AliITSUTrackHyp.cxx:156
 AliITSUTrackHyp.cxx:157
 AliITSUTrackHyp.cxx:158
 AliITSUTrackHyp.cxx:159
 AliITSUTrackHyp.cxx:160
 AliITSUTrackHyp.cxx:161
 AliITSUTrackHyp.cxx:162
 AliITSUTrackHyp.cxx:163
 AliITSUTrackHyp.cxx:164
 AliITSUTrackHyp.cxx:165
 AliITSUTrackHyp.cxx:166
 AliITSUTrackHyp.cxx:167
 AliITSUTrackHyp.cxx:168
 AliITSUTrackHyp.cxx:169
 AliITSUTrackHyp.cxx:170
 AliITSUTrackHyp.cxx:171
 AliITSUTrackHyp.cxx:172
 AliITSUTrackHyp.cxx:173
 AliITSUTrackHyp.cxx:174
 AliITSUTrackHyp.cxx:175
 AliITSUTrackHyp.cxx:176
 AliITSUTrackHyp.cxx:177
 AliITSUTrackHyp.cxx:178
 AliITSUTrackHyp.cxx:179
 AliITSUTrackHyp.cxx:180
 AliITSUTrackHyp.cxx:181
 AliITSUTrackHyp.cxx:182
 AliITSUTrackHyp.cxx:183
 AliITSUTrackHyp.cxx:184
 AliITSUTrackHyp.cxx:185
 AliITSUTrackHyp.cxx:186
 AliITSUTrackHyp.cxx:187
 AliITSUTrackHyp.cxx:188
 AliITSUTrackHyp.cxx:189
 AliITSUTrackHyp.cxx:190
 AliITSUTrackHyp.cxx:191
 AliITSUTrackHyp.cxx:192
 AliITSUTrackHyp.cxx:193
 AliITSUTrackHyp.cxx:194
 AliITSUTrackHyp.cxx:195
 AliITSUTrackHyp.cxx:196
 AliITSUTrackHyp.cxx:197
 AliITSUTrackHyp.cxx:198
 AliITSUTrackHyp.cxx:199
 AliITSUTrackHyp.cxx:200
 AliITSUTrackHyp.cxx:201
 AliITSUTrackHyp.cxx:202
 AliITSUTrackHyp.cxx:203
 AliITSUTrackHyp.cxx:204
 AliITSUTrackHyp.cxx:205
 AliITSUTrackHyp.cxx:206
 AliITSUTrackHyp.cxx:207
 AliITSUTrackHyp.cxx:208
 AliITSUTrackHyp.cxx:209
 AliITSUTrackHyp.cxx:210
 AliITSUTrackHyp.cxx:211
 AliITSUTrackHyp.cxx:212
 AliITSUTrackHyp.cxx:213
 AliITSUTrackHyp.cxx:214
 AliITSUTrackHyp.cxx:215
 AliITSUTrackHyp.cxx:216
 AliITSUTrackHyp.cxx:217
 AliITSUTrackHyp.cxx:218
 AliITSUTrackHyp.cxx:219
 AliITSUTrackHyp.cxx:220
 AliITSUTrackHyp.cxx:221
 AliITSUTrackHyp.cxx:222
 AliITSUTrackHyp.cxx:223
 AliITSUTrackHyp.cxx:224
 AliITSUTrackHyp.cxx:225
 AliITSUTrackHyp.cxx:226
 AliITSUTrackHyp.cxx:227
 AliITSUTrackHyp.cxx:228
 AliITSUTrackHyp.cxx:229
 AliITSUTrackHyp.cxx:230
 AliITSUTrackHyp.cxx:231
 AliITSUTrackHyp.cxx:232
 AliITSUTrackHyp.cxx:233
 AliITSUTrackHyp.cxx:234
 AliITSUTrackHyp.cxx:235
 AliITSUTrackHyp.cxx:236
 AliITSUTrackHyp.cxx:237
 AliITSUTrackHyp.cxx:238
 AliITSUTrackHyp.cxx:239
 AliITSUTrackHyp.cxx:240
 AliITSUTrackHyp.cxx:241
 AliITSUTrackHyp.cxx:242
 AliITSUTrackHyp.cxx:243
 AliITSUTrackHyp.cxx:244
 AliITSUTrackHyp.cxx:245
 AliITSUTrackHyp.cxx:246
 AliITSUTrackHyp.cxx:247
 AliITSUTrackHyp.cxx:248
 AliITSUTrackHyp.cxx:249
 AliITSUTrackHyp.cxx:250
 AliITSUTrackHyp.cxx:251
 AliITSUTrackHyp.cxx:252
 AliITSUTrackHyp.cxx:253
 AliITSUTrackHyp.cxx:254
 AliITSUTrackHyp.cxx:255
 AliITSUTrackHyp.cxx:256
 AliITSUTrackHyp.cxx:257
 AliITSUTrackHyp.cxx:258
 AliITSUTrackHyp.cxx:259
 AliITSUTrackHyp.cxx:260
 AliITSUTrackHyp.cxx:261
 AliITSUTrackHyp.cxx:262