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

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// class for ITS reconstruction                                              //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include "Riostream.h"
#include "AliITSReconstructor.h"
#include "AliRun.h"
#include "AliRawReader.h"
#include "AliESDEvent.h"
#include "AliESDpid.h"
#include "AliITSgeom.h"
#include "AliITSLoader.h"
#include "AliITStrackerMI.h"
#include "AliITStrackerV2.h"
#include "AliITStrackerSA.h"
#include "AliITSVertexerFast.h"
#include "AliITSVertexerFixed.h"
#include "AliITSVertexer3D.h"
#include "AliITSVertexerZ.h"
#include "AliITSVertexerZD.h"
#include "AliITSVertexerCosmics.h"
#include "AliITSInitGeometry.h"
#include "AliITSTrackleterSPDEff.h"
#include "AliITSMultReconstructor.h"

ClassImp(AliITSReconstructor)

//___________________________________________________________________________
AliITSReconstructor::AliITSReconstructor() : AliReconstructor(),
fDetTypeRec(0)
{
  // Default constructor
}
 //___________________________________________________________________________
AliITSReconstructor::~AliITSReconstructor(){
// destructor
  if(fDetTypeRec) delete fDetTypeRec;
} 
//____________________________________________________________________________
void AliITSReconstructor::GetPidSettings(AliESDpid *ESDpid) {
  //
  // pass PID settings from AliITSRecoParam to AliESDpid
  //
  Int_t pidOpt = GetRecoParam()->GetPID();

  if(pidOpt==1){
    AliDebug(1,"ITS LandauFitPID option has been selected\n");
    ESDpid->SetITSPIDmethod(AliESDpid::kITSLikelihood);
  }
  else{
    AliDebug(1,"ITS default PID\n");
    ESDpid->SetITSPIDmethod(AliESDpid::kITSTruncMean);
  }
}
//______________________________________________________________________
void AliITSReconstructor::Init() {
    // Initalize this constructor bet getting/creating the objects
    // nesseary for a proper ITS reconstruction.
    // Inputs:
    //   none.
    // Output:
    //   none.
    // Return:
    //   none.

    AliITSInitGeometry initgeom;
    AliITSgeom *geom = initgeom.CreateAliITSgeom();
    AliInfo(Form("Geometry name: %s",(initgeom.GetGeometryName()).Data()));

    fDetTypeRec = new AliITSDetTypeRec();
    fDetTypeRec->SetITSgeom(geom);
    fDetTypeRec->SetDefaults();

    return;
}

//_____________________________________________________________________________
void AliITSReconstructor::Reconstruct(TTree *digitsTree, TTree *clustersTree) const
{
// reconstruct clusters

  TString recopt = GetRecoParam()->GetOptReco();
  fDetTypeRec->SetTreeAddressD(digitsTree);
  fDetTypeRec->MakeBranch(clustersTree,"R");
  fDetTypeRec->SetTreeAddressR(clustersTree);
  fDetTypeRec->DigitsToRecPoints(digitsTree,clustersTree,0,recopt.Data(),1);    
}

//_________________________________________________________________
void AliITSReconstructor::Reconstruct(AliRawReader* rawReader, TTree *clustersTree) const
{
  // reconstruct clusters from raw data
  TString recopt = GetRecoParam()->GetOptReco();
  fDetTypeRec->SetDefaultClusterFindersV2(kTRUE,kTRUE);
  fDetTypeRec->DigitsToRecPoints(rawReader,clustersTree,recopt.Data());
}

//_____________________________________________________________________________
AliTrackleter* AliITSReconstructor::CreateMultFinder() const
{
  // create the SPD trackeleter for mult. reconstruction
  AliITSMultReconstructor* multReco = new AliITSMultReconstructor();
  multReco->SetHistOn(kFALSE);
  multReco->SetDetTypeRec(fDetTypeRec);
  return multReco;
}

//_____________________________________________________________________________
AliTracker* AliITSReconstructor::CreateTrackleter() const
{
// create the SPD trackeleter (for SPD PlaneEfficiency evaluation)
  if(!GetRecoParam()->GetComputePlaneEff() || !GetRecoParam()->GetUseTrackletsPlaneEff()) return NULL;
  //Int_t trackerOpt = GetRecoParam()->GetTracker();
  AliTracker* trackleter;
  trackleter = new AliITSTrackleterSPDEff();
  AliITSTrackleterSPDEff *spdtrackleter=(AliITSTrackleterSPDEff*)trackleter;
  // here set cuts (from RecoParam)
  if(GetRecoParam()->GetBkgTrackletsPlaneEff()) spdtrackleter->SetReflectClusterAroundZAxisForLayer(1,kTRUE);
  if(GetRecoParam()->GetMCTrackletsPlaneEff()) spdtrackleter->SetMC();
  spdtrackleter->SetHistOn();
  spdtrackleter->SetPhiWindowL2(GetRecoParam()->GetTrackleterPhiWindowL2());
  spdtrackleter->SetZetaWindowL2(GetRecoParam()->GetTrackleterZetaWindowL2());
  spdtrackleter->SetPhiWindowL1(GetRecoParam()->GetTrackleterPhiWindowL1());
  spdtrackleter->SetZetaWindowL1(GetRecoParam()->GetTrackleterZetaWindowL1());
  if(GetRecoParam()->GetUpdateOncePerEventPlaneEff()) spdtrackleter->SetUpdateOncePerEventPlaneEff();
  spdtrackleter->SetMinContVtx(GetRecoParam()->GetMinContVtxPlaneEff());
  return trackleter;
}

//_____________________________________________________________________________
AliTracker* AliITSReconstructor::CreateTracker() const
{
// create a ITS tracker

  Int_t trackerOpt = GetRecoParam()->GetTracker();
  AliTracker* tracker;    
  if (trackerOpt==1) {
    tracker = new AliITStrackerMI(0);
    AliITStrackerMI *mit=(AliITStrackerMI*)tracker;
    mit->SetDetTypeRec(fDetTypeRec);
  }  
  else if (trackerOpt==2) {
    tracker = new AliITStrackerV2(0);
  }
  else {
    tracker =  new AliITStrackerSA(0);  // inherits from AliITStrackerMI
    AliITStrackerSA *sat=(AliITStrackerSA*)tracker;
    sat->SetDetTypeRec(fDetTypeRec);
    if(GetRecoParam()->GetTrackerSAOnly()) sat->SetSAFlag(kTRUE);
    if(sat->GetSAFlag())AliDebug(1,"Tracking Performed in ITS only\n");
	if(GetRecoParam()->GetInwardFindingSA()){
       sat->SetInwardFinding();
       sat->SetInnerStartLayer(GetRecoParam()->GetInnerStartLayerSA());
	}else{
      sat->SetOutwardFinding();
      sat->SetOuterStartLayer(GetRecoParam()->GetOuterStartLayerSA());
	}
    sat->SetMinNPoints(GetRecoParam()->GetMinNPointsSA());
  }

  return tracker;
  
}

//_____________________________________________________________________________
AliVertexer* AliITSReconstructor::CreateVertexer() const
{
// create a ITS vertexer

  AliITSVertexer *vptr = NULL;
  Int_t vtxOpt = GetRecoParam()->GetVertexer();
  if(vtxOpt==3){
    AliFatal("Option AliITSVertexerIons is no longer supported");
    return vptr;
  }
  else if(vtxOpt==4){
    Double_t smear[3]={GetRecoParam()->GetVertexerFastSmearX(),
		       GetRecoParam()->GetVertexerFastSmearY(),
		       GetRecoParam()->GetVertexerFastSmearZ()};
    AliDebug(1,"AliITSVertexerFast has been selected"); 
    vptr = new AliITSVertexerFast(smear);
  }
  else if(vtxOpt==1){
    AliDebug(1,"AliITSVertexerZ has been selected");
    AliITSVertexerZ* vtxrz =  new AliITSVertexerZ();
    Int_t pileupAlgo=GetRecoParam()->GetSPDVertexerPileupAlgo();
    if(pileupAlgo==3) vtxrz->SetSearchForPileup(kFALSE);
    vptr = vtxrz;
  }
  else if(vtxOpt==2){
    AliDebug(1,"AliITSVertexerCosmics has been selected");
    vptr = new AliITSVertexerCosmics();
  }
  else if(vtxOpt==5){ 
    AliDebug(1,"Vertex is fixed in the position of the TDI\n");
    vptr = new AliITSVertexerFixed("TDI");
  }
  else if(vtxOpt==6){ 
    AliDebug(1,"Vertex is fixed in the position of the TED\n");
    vptr = new AliITSVertexerFixed("TED");
  }
  else if(vtxOpt==7){
    AliDebug(1,"VertexerZD:  reconstruction of the Z coordinate with SDD \n");
    AliITSVertexerZD*vtxrz = new AliITSVertexerZD();
    vtxrz->SetSearchForPileup(kFALSE);
    vptr = vtxrz;
  }
  else {
  // by default an AliITSVertexer3D object is instatiated
    AliITSVertexer3D*  vtxr = 
       new AliITSVertexer3D(GetRecoParam()->GetVertexer3DWideFiducialRegionZ());
    Float_t dzw=GetRecoParam()->GetVertexer3DWideFiducialRegionZ();
    Float_t drw=GetRecoParam()->GetVertexer3DWideFiducialRegionR();
    vtxr->SetWideFiducialRegion(dzw,drw);
    Float_t dzn=GetRecoParam()->GetVertexer3DNarrowFiducialRegionZ();
    Float_t drn=GetRecoParam()->GetVertexer3DNarrowFiducialRegionR();
    vtxr->SetNarrowFiducialRegion(dzn,drn);
    Float_t dphil=GetRecoParam()->GetVertexer3DLooseDeltaPhiCut();
    Float_t dphit=GetRecoParam()->GetVertexer3DTightDeltaPhiCut();
    vtxr->SetDeltaPhiCuts(dphil,dphit);
    Float_t dcacut=GetRecoParam()->GetVertexer3DDCACut();
    vtxr->SetDCACut(dcacut);
    Int_t pileupAlgo=GetRecoParam()->GetSPDVertexerPileupAlgo();
    vtxr->SetPileupAlgo(pileupAlgo);
    UChar_t highmultAlgo=GetRecoParam()->GetSPDVertexerHighMultAlgo();
    vtxr->SetHighMultAlgo(highmultAlgo);
    AliDebug(1,Form("AliITSVertexer3D with pileup algo %d has been selected",pileupAlgo));
    vtxr->SetFallBack(500); // fall back to vertexerZ is SPD-0 clusters>500
    vptr = vtxr;
  }
  vptr->SetDetTypeRec(fDetTypeRec);
  return vptr;
}

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