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

/* $Id$ */

///////////////////////////////////////////////////////////////////////////////
//  Reconstructed space point class for set:ITS   
//  Reconstructed points are expressed simultaneously in two different 
//  reference frames, both differing from the global system.
//  The first is referred to the sensor (see AliITSsegmentation for the
//  definition) and each point is represented by two coordinates: fXloc and
//  fZloc. This system in the code is referred to as "local"
//  The second is used for tracking (V2, SA and MI versions) and the X axis 
//  represents the radial coordinate (this system is, in the bending plane, 
//  a rotated system w.r.t. the global reference system). 
//  Each reaconstructed point is represented by two coordinates: fY and fZ, 
//  inherited from AliCluster. This system in the code is referred to as 
//  "trackingV2".
///////////////////////////////////////////////////////////////////////////////

#include <TGeoMatrix.h>
#include "AliITSRecPoint.h"
#include "AliAlignObj.h"

using std::ios;
ClassImp(AliITSRecPoint)

//_____________________________________________________________
AliITSRecPoint::AliITSRecPoint(): 
AliCluster(),
fXloc(0),
fZloc(0),
fdEdX(0),
fIndex(0),
fQ(0),
fLayer(0),
fNz(0),
fNy(0),
fChargeRatio(0),
fType(0),
fDeltaProb(0),
fDriftTime(0.),
fDriftSide(0)
{
    // default constructor
}

//________________________________________________________________________
AliITSRecPoint::AliITSRecPoint(Int_t *lab,Float_t *hit, Int_t *info, Bool_t local):
AliCluster(AliGeomManager::LayerToVolUID((info[2]+AliGeomManager::kSPD1),lab[3]&0x3FF),hit,0,0,lab),
fXloc(0),
fZloc(0),
fdEdX(0),
fIndex(lab[3]),
fQ(hit[4]),
fLayer(info[2]),
fNz(info[1]),
fNy(info[0]),
fChargeRatio(0),
fType(0),
fDeltaProb(0),
fDriftTime(0.),
fDriftSide(0)
{
  //standard constructor used in AliITSClusterFinderV2

  if (!local) { // Cluster V2
    Double_t txyz[3] = {GetX(), GetY(), GetZ()};
    Double_t lxyz[3] = {0, 0, 0};
    GetTracking2LocalMatrix()->LocalToMaster(txyz,lxyz);
    fXloc = lxyz[0]; fZloc = lxyz[2];
    if(fLayer==4) hit[5]=-hit[5];
    if( (fLayer==4) || (fLayer==5) ) SetSigmaYZ(hit[5]); 
  }
  else {
    switch (fLayer) {
    case 0:
    case 1:
      fdEdX = 0;
      break;
    case 2:
    case 3:
      fdEdX=fQ*1e-6;
      break;
    case 4:
      fdEdX=fQ*2.16;
      SetSigmaYZ(hit[5]);
      break;
    case 5:
      fdEdX=fQ*2.16;
      hit[5]=-hit[5];
      SetSigmaYZ(hit[5]);
      break;
    default:
      AliError(Form("Wrong ITS layer %d (0 -> 5)",fLayer));
      break;
    }
    fXloc = hit[0];
    fZloc = hit[1];
    Double_t lxyz[3] = {fXloc, 0, fZloc};
    Double_t txyz[3] = {0, 0, 0};
    GetTracking2LocalMatrix()->MasterToLocal(lxyz,txyz);

    SetX(0.); SetY(txyz[1]); SetZ(txyz[2]);

  }

}

//_______________________________________________________________________
AliITSRecPoint::AliITSRecPoint(const AliITSRecPoint& pt):
  AliCluster(pt),
  fXloc(pt.fXloc),
  fZloc(pt.fZloc),
  fdEdX(pt.fdEdX),
  fIndex(pt.fIndex),
  fQ(pt.fQ),
  fLayer(pt.fLayer),
  fNz(pt.fNz),
  fNy(pt.fNy),
  fChargeRatio(pt.fChargeRatio),
  fType(pt.fType),
  fDeltaProb(pt.fDeltaProb),
  fDriftTime(pt.fDriftTime),
  fDriftSide(pt.fDriftSide)
{
  //Copy constructor

}

//______________________________________________________________________
AliITSRecPoint& AliITSRecPoint::operator=(const AliITSRecPoint& source){
  // Assignment operator

  this->~AliITSRecPoint();
  new(this) AliITSRecPoint(source);
  return *this;

}

//----------------------------------------------------------------------
void AliITSRecPoint::Print(ostream *os){
    ////////////////////////////////////////////////////////////////////////
    // Standard output format for this class.
    ////////////////////////////////////////////////////////////////////////
#if defined __GNUC__
#if __GNUC__ > 2
    ios::fmtflags fmt;
#else
    Int_t fmt;
#endif
#else
#if defined __ICC || defined __ECC || defined __xlC__
    ios::fmtflags fmt;
#else
    Int_t fmt;
#endif
#endif
 
    fmt = os->setf(ios::fixed);  // set fixed floating point output
    *os << GetLabel(0) << " " << GetLabel(1) << " " << GetLabel(2) << " ";
    fmt = os->setf(ios::scientific); // set scientific for dEdX.
    *os << GetX() <<" " << GetY() << " " << GetZ() << " " ;
    *os << GetSigmaY2() << " " << GetSigmaZ2() << " " << GetSigmaYZ() << " ";
    fmt = os->setf(ios::fixed);
    *os << GetVolumeId() << " "<< Misalign() /*fIsMisaligned*/ << " ";
    fmt = os->setf(ios::scientific); // set scientific for dEdX.
    *os << fXloc << " " << fZloc << " " << fdEdX << " ";
    fmt = os->setf(ios::fixed); // every fixed
    *os << fIndex <<" " << fQ << " "<<fLayer <<" "<<fNz<<" "<<fNy<<" ";
    *os << fChargeRatio<<" " << fType << " " << fDeltaProb << " " << fDriftTime<< " " << fDriftSide;
    os->flags(fmt); // reset back to old formating.
    return;
}

//----------------------------------------------------------------------
Int_t AliITSRecPoint::GetNpixels() const {
//
// returns the number of pixels used for the SPD clusters
//

 if(fLayer > 1) return -1;
 else return fType;

}

//----------------------------------------------------------------------
Int_t AliITSRecPoint::GetSPDclusterType() const {
//
// returns an Int_t with encoded information on cluster size
//    type <= 16: cluster type identifier according to conventional numbering
//    type >  16: Npixels+1000*Ny+1000000*Nz
//

 Int_t type = -1;
 if(fLayer > 1) return type;
 else {

   switch (fType) {
     case 1 : type = 1 ;break;
     case 2 : if(fNy == 2) type = 2;
              else         type = 3;
              break;
     case 3 : if(fNy == 3)      type = 4;
              else if(fNz == 3) type = 6;
              else              type = 5;
              break;
     case 4 : if(fNz == 1)                  type = 7;
              else if(fNz == 2 && fNy == 2) type = 8;
              else if(fNy == 2 && fNz == 3) type = 11;
              else if(fNy == 3 && fNz == 2) type = 9;
              else                          type = 15;
              break;
     case 5 : if(fNy == 3 && fNz == 2)  type = 10;
              if(fNy == 2 && fNz == 3 ) type = 12;
              if(fNy == 5)              type = 16;
              else                      type = fType+1000*fNy+1000000*fNz;
              break; 
     case 6 : if(fNy ==3 && fNz == 2) type = 13;
              if(fNy ==2 && fNz == 3) type = 14;
              else                    type = fType+1000*fNy+1000000*fNz;
              break; 
     default: type = fType+1000*fNy+1000000*fNz;
              break; 
   }  

   return type;
 }
}

//----------------------------------------------------------------------
Int_t AliITSRecPoint::GetSDDclusterType() const {
// returns an Int_t with encoded information on cluster size
// Byte1 = fNz Byte0=fNy, other two bytes empty for extra information
// max. allowed cluster size = 255
  Int_t typ=(fNz&0xFF)<<8;
  typ+=fNy&0xFF;
  if(fDriftSide==1) typ+=1<<16;
  return typ;
}
//----------------------------------------------------------------------
void  AliITSRecPoint::DecodeSDDclusterType(Int_t cluType, Int_t &cluSizAn, Int_t& cluSizTb, Int_t &drSide){
// Extract cluster sizes and drift side from cluster type 
  cluSizTb=cluType&0xFF;
  cluSizAn=(cluType>>8)&0xFF;
  drSide=(cluType>>16);
  return;
}
//----------------------------------------------------------------------
Int_t AliITSRecPoint::GetSSDclusterType() const {
// returns an Int_t with encoded information on cluster size
// Byte1 = fNz Byte0=fNy, other two bytes empty for extra information
// max. allowed cluster size = 255
  Int_t typ=(fNz&0xFF)<<8;
  typ+=fNy&0xFF;
  return typ;
}

//----------------------------------------------------------------------
void AliITSRecPoint::Read(istream *is){
////////////////////////////////////////////////////////////////////////
// Standard input format for this class.
////////////////////////////////////////////////////////////////////////
    Bool_t mis;
    Int_t lab[4];
    Float_t hit[6];
    lab[3] = 0; // ??
    *is >> lab[0] >> lab[1] >> lab[2];
    SetLabel(lab[0],0); SetLabel(lab[1],1); SetLabel(lab[2],2);
    *is >> hit[0] >> hit[1] >> hit[2] >> hit[3] >> hit[4] >> hit[5];
    SetX(hit[0]);SetY(hit[1]);SetZ(hit[2]);SetSigmaY2(hit[3]);
    SetSigmaZ2(hit[4]);//fSigmaYZ=hit[5];
    *is >> lab[0] >> mis;
    SetVolumeId(lab[0]);// fIsMisalinged = mis;
    *is >> fXloc >> fZloc >> fdEdX;
    *is >> fIndex >> fQ >> fLayer >> fNz >> fNy >> fChargeRatio >> fType;
    *is >> fDeltaProb >> fDriftTime >> fDriftSide;

    return;
}
//----------------------------------------------------------------------
ostream &operator<<(ostream &os,AliITSRecPoint &p){
////////////////////////////////////////////////////////////////////////
// Standard output streaming function.
////////////////////////////////////////////////////////////////////////
 
    p.Print(&os);
    return os;
}
//----------------------------------------------------------------------
istream &operator>>(istream &is,AliITSRecPoint &r){
////////////////////////////////////////////////////////////////////////
// Standard input streaming function.
////////////////////////////////////////////////////////////////////////
 
    r.Read(&is);
    return is;
}
//----------------------------------------------------------------------
 AliITSRecPoint.cxx:1
 AliITSRecPoint.cxx:2
 AliITSRecPoint.cxx:3
 AliITSRecPoint.cxx:4
 AliITSRecPoint.cxx:5
 AliITSRecPoint.cxx:6
 AliITSRecPoint.cxx:7
 AliITSRecPoint.cxx:8
 AliITSRecPoint.cxx:9
 AliITSRecPoint.cxx:10
 AliITSRecPoint.cxx:11
 AliITSRecPoint.cxx:12
 AliITSRecPoint.cxx:13
 AliITSRecPoint.cxx:14
 AliITSRecPoint.cxx:15
 AliITSRecPoint.cxx:16
 AliITSRecPoint.cxx:17
 AliITSRecPoint.cxx:18
 AliITSRecPoint.cxx:19
 AliITSRecPoint.cxx:20
 AliITSRecPoint.cxx:21
 AliITSRecPoint.cxx:22
 AliITSRecPoint.cxx:23
 AliITSRecPoint.cxx:24
 AliITSRecPoint.cxx:25
 AliITSRecPoint.cxx:26
 AliITSRecPoint.cxx:27
 AliITSRecPoint.cxx:28
 AliITSRecPoint.cxx:29
 AliITSRecPoint.cxx:30
 AliITSRecPoint.cxx:31
 AliITSRecPoint.cxx:32
 AliITSRecPoint.cxx:33
 AliITSRecPoint.cxx:34
 AliITSRecPoint.cxx:35
 AliITSRecPoint.cxx:36
 AliITSRecPoint.cxx:37
 AliITSRecPoint.cxx:38
 AliITSRecPoint.cxx:39
 AliITSRecPoint.cxx:40
 AliITSRecPoint.cxx:41
 AliITSRecPoint.cxx:42
 AliITSRecPoint.cxx:43
 AliITSRecPoint.cxx:44
 AliITSRecPoint.cxx:45
 AliITSRecPoint.cxx:46
 AliITSRecPoint.cxx:47
 AliITSRecPoint.cxx:48
 AliITSRecPoint.cxx:49
 AliITSRecPoint.cxx:50
 AliITSRecPoint.cxx:51
 AliITSRecPoint.cxx:52
 AliITSRecPoint.cxx:53
 AliITSRecPoint.cxx:54
 AliITSRecPoint.cxx:55
 AliITSRecPoint.cxx:56
 AliITSRecPoint.cxx:57
 AliITSRecPoint.cxx:58
 AliITSRecPoint.cxx:59
 AliITSRecPoint.cxx:60
 AliITSRecPoint.cxx:61
 AliITSRecPoint.cxx:62
 AliITSRecPoint.cxx:63
 AliITSRecPoint.cxx:64
 AliITSRecPoint.cxx:65
 AliITSRecPoint.cxx:66
 AliITSRecPoint.cxx:67
 AliITSRecPoint.cxx:68
 AliITSRecPoint.cxx:69
 AliITSRecPoint.cxx:70
 AliITSRecPoint.cxx:71
 AliITSRecPoint.cxx:72
 AliITSRecPoint.cxx:73
 AliITSRecPoint.cxx:74
 AliITSRecPoint.cxx:75
 AliITSRecPoint.cxx:76
 AliITSRecPoint.cxx:77
 AliITSRecPoint.cxx:78
 AliITSRecPoint.cxx:79
 AliITSRecPoint.cxx:80
 AliITSRecPoint.cxx:81
 AliITSRecPoint.cxx:82
 AliITSRecPoint.cxx:83
 AliITSRecPoint.cxx:84
 AliITSRecPoint.cxx:85
 AliITSRecPoint.cxx:86
 AliITSRecPoint.cxx:87
 AliITSRecPoint.cxx:88
 AliITSRecPoint.cxx:89
 AliITSRecPoint.cxx:90
 AliITSRecPoint.cxx:91
 AliITSRecPoint.cxx:92
 AliITSRecPoint.cxx:93
 AliITSRecPoint.cxx:94
 AliITSRecPoint.cxx:95
 AliITSRecPoint.cxx:96
 AliITSRecPoint.cxx:97
 AliITSRecPoint.cxx:98
 AliITSRecPoint.cxx:99
 AliITSRecPoint.cxx:100
 AliITSRecPoint.cxx:101
 AliITSRecPoint.cxx:102
 AliITSRecPoint.cxx:103
 AliITSRecPoint.cxx:104
 AliITSRecPoint.cxx:105
 AliITSRecPoint.cxx:106
 AliITSRecPoint.cxx:107
 AliITSRecPoint.cxx:108
 AliITSRecPoint.cxx:109
 AliITSRecPoint.cxx:110
 AliITSRecPoint.cxx:111
 AliITSRecPoint.cxx:112
 AliITSRecPoint.cxx:113
 AliITSRecPoint.cxx:114
 AliITSRecPoint.cxx:115
 AliITSRecPoint.cxx:116
 AliITSRecPoint.cxx:117
 AliITSRecPoint.cxx:118
 AliITSRecPoint.cxx:119
 AliITSRecPoint.cxx:120
 AliITSRecPoint.cxx:121
 AliITSRecPoint.cxx:122
 AliITSRecPoint.cxx:123
 AliITSRecPoint.cxx:124
 AliITSRecPoint.cxx:125
 AliITSRecPoint.cxx:126
 AliITSRecPoint.cxx:127
 AliITSRecPoint.cxx:128
 AliITSRecPoint.cxx:129
 AliITSRecPoint.cxx:130
 AliITSRecPoint.cxx:131
 AliITSRecPoint.cxx:132
 AliITSRecPoint.cxx:133
 AliITSRecPoint.cxx:134
 AliITSRecPoint.cxx:135
 AliITSRecPoint.cxx:136
 AliITSRecPoint.cxx:137
 AliITSRecPoint.cxx:138
 AliITSRecPoint.cxx:139
 AliITSRecPoint.cxx:140
 AliITSRecPoint.cxx:141
 AliITSRecPoint.cxx:142
 AliITSRecPoint.cxx:143
 AliITSRecPoint.cxx:144
 AliITSRecPoint.cxx:145
 AliITSRecPoint.cxx:146
 AliITSRecPoint.cxx:147
 AliITSRecPoint.cxx:148
 AliITSRecPoint.cxx:149
 AliITSRecPoint.cxx:150
 AliITSRecPoint.cxx:151
 AliITSRecPoint.cxx:152
 AliITSRecPoint.cxx:153
 AliITSRecPoint.cxx:154
 AliITSRecPoint.cxx:155
 AliITSRecPoint.cxx:156
 AliITSRecPoint.cxx:157
 AliITSRecPoint.cxx:158
 AliITSRecPoint.cxx:159
 AliITSRecPoint.cxx:160
 AliITSRecPoint.cxx:161
 AliITSRecPoint.cxx:162
 AliITSRecPoint.cxx:163
 AliITSRecPoint.cxx:164
 AliITSRecPoint.cxx:165
 AliITSRecPoint.cxx:166
 AliITSRecPoint.cxx:167
 AliITSRecPoint.cxx:168
 AliITSRecPoint.cxx:169
 AliITSRecPoint.cxx:170
 AliITSRecPoint.cxx:171
 AliITSRecPoint.cxx:172
 AliITSRecPoint.cxx:173
 AliITSRecPoint.cxx:174
 AliITSRecPoint.cxx:175
 AliITSRecPoint.cxx:176
 AliITSRecPoint.cxx:177
 AliITSRecPoint.cxx:178
 AliITSRecPoint.cxx:179
 AliITSRecPoint.cxx:180
 AliITSRecPoint.cxx:181
 AliITSRecPoint.cxx:182
 AliITSRecPoint.cxx:183
 AliITSRecPoint.cxx:184
 AliITSRecPoint.cxx:185
 AliITSRecPoint.cxx:186
 AliITSRecPoint.cxx:187
 AliITSRecPoint.cxx:188
 AliITSRecPoint.cxx:189
 AliITSRecPoint.cxx:190
 AliITSRecPoint.cxx:191
 AliITSRecPoint.cxx:192
 AliITSRecPoint.cxx:193
 AliITSRecPoint.cxx:194
 AliITSRecPoint.cxx:195
 AliITSRecPoint.cxx:196
 AliITSRecPoint.cxx:197
 AliITSRecPoint.cxx:198
 AliITSRecPoint.cxx:199
 AliITSRecPoint.cxx:200
 AliITSRecPoint.cxx:201
 AliITSRecPoint.cxx:202
 AliITSRecPoint.cxx:203
 AliITSRecPoint.cxx:204
 AliITSRecPoint.cxx:205
 AliITSRecPoint.cxx:206
 AliITSRecPoint.cxx:207
 AliITSRecPoint.cxx:208
 AliITSRecPoint.cxx:209
 AliITSRecPoint.cxx:210
 AliITSRecPoint.cxx:211
 AliITSRecPoint.cxx:212
 AliITSRecPoint.cxx:213
 AliITSRecPoint.cxx:214
 AliITSRecPoint.cxx:215
 AliITSRecPoint.cxx:216
 AliITSRecPoint.cxx:217
 AliITSRecPoint.cxx:218
 AliITSRecPoint.cxx:219
 AliITSRecPoint.cxx:220
 AliITSRecPoint.cxx:221
 AliITSRecPoint.cxx:222
 AliITSRecPoint.cxx:223
 AliITSRecPoint.cxx:224
 AliITSRecPoint.cxx:225
 AliITSRecPoint.cxx:226
 AliITSRecPoint.cxx:227
 AliITSRecPoint.cxx:228
 AliITSRecPoint.cxx:229
 AliITSRecPoint.cxx:230
 AliITSRecPoint.cxx:231
 AliITSRecPoint.cxx:232
 AliITSRecPoint.cxx:233
 AliITSRecPoint.cxx:234
 AliITSRecPoint.cxx:235
 AliITSRecPoint.cxx:236
 AliITSRecPoint.cxx:237
 AliITSRecPoint.cxx:238
 AliITSRecPoint.cxx:239
 AliITSRecPoint.cxx:240
 AliITSRecPoint.cxx:241
 AliITSRecPoint.cxx:242
 AliITSRecPoint.cxx:243
 AliITSRecPoint.cxx:244
 AliITSRecPoint.cxx:245
 AliITSRecPoint.cxx:246
 AliITSRecPoint.cxx:247
 AliITSRecPoint.cxx:248
 AliITSRecPoint.cxx:249
 AliITSRecPoint.cxx:250
 AliITSRecPoint.cxx:251
 AliITSRecPoint.cxx:252
 AliITSRecPoint.cxx:253
 AliITSRecPoint.cxx:254
 AliITSRecPoint.cxx:255
 AliITSRecPoint.cxx:256
 AliITSRecPoint.cxx:257
 AliITSRecPoint.cxx:258
 AliITSRecPoint.cxx:259
 AliITSRecPoint.cxx:260
 AliITSRecPoint.cxx:261
 AliITSRecPoint.cxx:262
 AliITSRecPoint.cxx:263
 AliITSRecPoint.cxx:264
 AliITSRecPoint.cxx:265
 AliITSRecPoint.cxx:266
 AliITSRecPoint.cxx:267
 AliITSRecPoint.cxx:268
 AliITSRecPoint.cxx:269
 AliITSRecPoint.cxx:270
 AliITSRecPoint.cxx:271
 AliITSRecPoint.cxx:272
 AliITSRecPoint.cxx:273
 AliITSRecPoint.cxx:274
 AliITSRecPoint.cxx:275
 AliITSRecPoint.cxx:276
 AliITSRecPoint.cxx:277
 AliITSRecPoint.cxx:278
 AliITSRecPoint.cxx:279
 AliITSRecPoint.cxx:280
 AliITSRecPoint.cxx:281
 AliITSRecPoint.cxx:282
 AliITSRecPoint.cxx:283
 AliITSRecPoint.cxx:284
 AliITSRecPoint.cxx:285
 AliITSRecPoint.cxx:286
 AliITSRecPoint.cxx:287
 AliITSRecPoint.cxx:288
 AliITSRecPoint.cxx:289
 AliITSRecPoint.cxx:290
 AliITSRecPoint.cxx:291
 AliITSRecPoint.cxx:292
 AliITSRecPoint.cxx:293
 AliITSRecPoint.cxx:294
 AliITSRecPoint.cxx:295
 AliITSRecPoint.cxx:296
 AliITSRecPoint.cxx:297
 AliITSRecPoint.cxx:298
 AliITSRecPoint.cxx:299
 AliITSRecPoint.cxx:300
 AliITSRecPoint.cxx:301
 AliITSRecPoint.cxx:302
 AliITSRecPoint.cxx:303
 AliITSRecPoint.cxx:304
 AliITSRecPoint.cxx:305
 AliITSRecPoint.cxx:306
 AliITSRecPoint.cxx:307
 AliITSRecPoint.cxx:308
 AliITSRecPoint.cxx:309
 AliITSRecPoint.cxx:310
 AliITSRecPoint.cxx:311