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

//====================================================================================================================================================
//
//      Event reconstruction class for the ALICE Muon Forward Tracker
//
//      Contact author: antonio.uras@cern.ch
//
//====================================================================================================================================================

#include "TObjArray.h"
#include "TTree.h"
#include "AliMFTSegmentation.h"
#include "AliMFTClusterFinder.h"
#include "AliReconstructor.h"
#include "AliMFTReconstructor.h"

ClassImp(AliMFTReconstructor)

//====================================================================================================================================================

AliMFTReconstructor::AliMFTReconstructor():
  AliReconstructor(), 
  fDigits(0x0),
  fNPlanes(0)
{

  // default constructor 

}

//====================================================================================================================================================

AliMFTReconstructor::~AliMFTReconstructor() {
  
  // destructor
  
  if (fDigits) {
    for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
      if (fDigits->At(iPlane)) fDigits->At(iPlane)->Delete();
    }
    fDigits->Delete();
    delete fDigits;
    fDigits=0;
  }
  
}

//====================================================================================================================================================

void AliMFTReconstructor::Clear(const Option_t* /*opt*/) {
	
  // Clear arrays
  
  if (fDigits) {
    for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
      if (fDigits->At(iPlane)) ((TClonesArray*)fDigits->At(iPlane))->Delete();
    }
    fDigits->Delete();
    delete fDigits;
    fDigits = NULL;
  }
  
}

//====================================================================================================================================================

void AliMFTReconstructor::Init() {

  AliMFTSegmentation *segmentation = new AliMFTSegmentation("AliMFTGeometry.root");
  fNPlanes = segmentation->GetNPlanes();
  delete segmentation;

  fDigits = new TObjArray(fNPlanes);
  fDigits->SetOwner(kTRUE);
  for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
    fDigits->AddAt(new TClonesArray("AliMFTDigit"),iPlane);
    ((TClonesArray*)fDigits->At(iPlane))->SetOwner(kTRUE);
  }
  
  AliInfo(" ************* Using the MFT reconstructor! ************ ");
  
  return;

}

//====================================================================================================================================================

void AliMFTReconstructor::ResetDigits() {

  // Reset number of digits and the digits array for the MFT detector.

  if (!fDigits) return;
  for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
    ResetDigits(iPlane);
  }

}

//====================================================================================================================================================

void AliMFTReconstructor::ResetDigits(Int_t plane) {

  // Reset number of digits and the digits array for this branch.

  if (fDigits->At(plane)) ((TClonesArray*)fDigits->At(plane))->Clear();

}

//====================================================================================================================================================

void AliMFTReconstructor::Reconstruct(TTree *digitsTree, TTree *clustersTree) const {

  AliInfo("Starting Reconstruction for MFT");

  // Clusterization

  for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
    AliDebug(1, Form("Setting Address for Branch Plane_%02d", iPlane)); 
    digitsTree->SetBranchAddress(Form("Plane_%02d",iPlane), &(*fDigits)[iPlane]);
  }
 
  digitsTree->GetEntry(0);

  AliDebug(1, "Creating clusterFinder");
  AliMFTClusterFinder *clusterFinder = new AliMFTClusterFinder();
  clusterFinder->ApplyMisalignment(kTRUE);    // only in case of MC !!!
  clusterFinder->Init("AliMFTGeometry.root");
  clusterFinder->MakeClusterBranch(clustersTree);
  clusterFinder->SetClusterTreeAddress(clustersTree);
  clusterFinder->DigitsToClusters(fDigits);
  clustersTree->Fill();                         // fill tree for current event
  delete clusterFinder;

  for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
    AliDebug(1, Form("fDigits->At(%d)->Clear()",iPlane));
    ((TClonesArray*)fDigits->At(iPlane))->Delete();
  }

}

//====================================================================================================================================================

AliTracker* AliMFTReconstructor::CreateTracker() const {

  // Create a MFT tracker: global MUON+MFT tracks

  AliMFTTrackerMU *tracker = new AliMFTTrackerMU();   // tracker for muon tracks (MFT + MUON) 

  return tracker;
  
}

//====================================================================================================================================================

AliTracker* AliMFTReconstructor::CreateTrackleter() const {

  AliInfo("Not implemented");

  // Create a MFT tracker: standalone MFT tracks

  //  AliMFTTrackerSA *tracker = new AliMFTTrackerSA();   // tracker for MFT tracks

  return NULL;
  
}

//====================================================================================================================================================

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