Fix bug in building local list of valid files.
[u/mrichter/AliRoot.git] / MFT / AliMFTReconstructor.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 //====================================================================================================================================================
17 //
18 //      Event reconstruction class for the ALICE Muon Forward Tracker
19 //
20 //      Contact author: antonio.uras@cern.ch
21 //
22 //====================================================================================================================================================
23
24 #include "TObjArray.h"
25 #include "TTree.h"
26 #include "AliMFTSegmentation.h"
27 #include "AliMFTClusterFinder.h"
28 #include "AliReconstructor.h"
29 #include "AliMFTReconstructor.h"
30
31 ClassImp(AliMFTReconstructor)
32
33 //====================================================================================================================================================
34
35 AliMFTReconstructor::AliMFTReconstructor():
36   AliReconstructor(), 
37   fDigits(0x0),
38   fNPlanes(0)
39 {
40
41   // default constructor 
42
43 }
44
45 //====================================================================================================================================================
46
47 AliMFTReconstructor::~AliMFTReconstructor() {
48   
49   // destructor
50   
51   if (fDigits) {
52     for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
53       if (fDigits->At(iPlane)) fDigits->At(iPlane)->Delete();
54     }
55     fDigits->Delete();
56     delete fDigits;
57     fDigits=0;
58   }
59   
60 }
61
62 //====================================================================================================================================================
63
64 void AliMFTReconstructor::Clear(const Option_t* /*opt*/) {
65         
66   // Clear arrays
67   
68   if (fDigits) {
69     for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
70       if (fDigits->At(iPlane)) ((TClonesArray*)fDigits->At(iPlane))->Delete();
71     }
72     fDigits->Delete();
73     delete fDigits;
74     fDigits = NULL;
75   }
76   
77 }
78
79 //====================================================================================================================================================
80
81 void AliMFTReconstructor::Init() {
82
83   AliMFTSegmentation *segmentation = new AliMFTSegmentation("AliMFTGeometry.root");
84   fNPlanes = segmentation->GetNPlanes();
85   delete segmentation;
86
87   fDigits = new TObjArray(fNPlanes);
88   fDigits->SetOwner(kTRUE);
89   for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
90     fDigits->AddAt(new TClonesArray("AliMFTDigit"),iPlane);
91     ((TClonesArray*)fDigits->At(iPlane))->SetOwner(kTRUE);
92   }
93   
94   AliInfo(" ************* Using the MFT reconstructor! ************ ");
95   
96   return;
97
98 }
99
100 //====================================================================================================================================================
101
102 void AliMFTReconstructor::ResetDigits() {
103
104   // Reset number of digits and the digits array for the MFT detector.
105
106   if (!fDigits) return;
107   for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
108     ResetDigits(iPlane);
109   }
110
111 }
112
113 //====================================================================================================================================================
114
115 void AliMFTReconstructor::ResetDigits(Int_t plane) {
116
117   // Reset number of digits and the digits array for this branch.
118
119   if (fDigits->At(plane)) ((TClonesArray*)fDigits->At(plane))->Clear();
120
121 }
122
123 //====================================================================================================================================================
124
125 void AliMFTReconstructor::Reconstruct(TTree *digitsTree, TTree *clustersTree) const {
126
127   AliInfo("Starting Reconstruction for MFT");
128
129   // Clusterization
130
131   for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
132     AliDebug(1, Form("Setting Address for Branch Plane_%02d", iPlane)); 
133     digitsTree->SetBranchAddress(Form("Plane_%02d",iPlane), &(*fDigits)[iPlane]);
134   }
135  
136   digitsTree->GetEntry(0);
137
138   AliDebug(1, "Creating clusterFinder");
139   AliMFTClusterFinder *clusterFinder = new AliMFTClusterFinder();
140   clusterFinder->ApplyMisalignment(kTRUE);    // only in case of MC !!!
141   clusterFinder->Init("AliMFTGeometry.root");
142   clusterFinder->MakeClusterBranch(clustersTree);
143   clusterFinder->SetClusterTreeAddress(clustersTree);
144   clusterFinder->DigitsToClusters(fDigits);
145   clustersTree->Fill();                         // fill tree for current event
146   delete clusterFinder;
147
148   for (Int_t iPlane=0; iPlane<fNPlanes; iPlane++) {
149     AliDebug(1, Form("fDigits->At(%d)->Clear()",iPlane));
150     ((TClonesArray*)fDigits->At(iPlane))->Delete();
151   }
152
153 }
154
155 //====================================================================================================================================================
156
157 AliTracker* AliMFTReconstructor::CreateTracker() const {
158
159   // Create a MFT tracker: global MUON+MFT tracks
160
161   AliMFTTrackerMU *tracker = new AliMFTTrackerMU();   // tracker for muon tracks (MFT + MUON) 
162
163   return tracker;
164   
165 }
166
167 //====================================================================================================================================================
168
169 AliTracker* AliMFTReconstructor::CreateTrackleter() const {
170
171   AliInfo("Not implemented");
172
173   // Create a MFT tracker: standalone MFT tracks
174
175   //  AliMFTTrackerSA *tracker = new AliMFTTrackerSA();   // tracker for MFT tracks
176
177   return NULL;
178   
179 }
180
181 //====================================================================================================================================================
182