]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TRD/AliTRDReconstructor.cxx
bcae8caafede905290ccc1db0c34b98458b2abde
[u/mrichter/AliRoot.git] / TRD / AliTRDReconstructor.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 /* $Id$ */
17
18 ///////////////////////////////////////////////////////////////////////////////
19 //                                                                           //
20 // class for TRD reconstruction                                              //
21 //                                                                           //
22 ///////////////////////////////////////////////////////////////////////////////
23
24 #include <TFile.h>
25
26 #include "AliTRDReconstructor.h"
27 #include "AliRunLoader.h"
28 #include "AliTRDclusterizerV1.h"
29 #include "AliTRDtracker.h"
30 #include "AliTRDpidESD.h"
31 #include "AliRawReader.h"
32 #include "AliLog.h"
33 #include "AliTRDtrigger.h"
34 #include "AliTRDtrigParam.h"
35 #include "AliTRDgtuTrack.h"
36 #include "AliRun.h"
37 #include "AliESDTrdTrack.h"
38 #include "AliESD.h"
39
40 ClassImp(AliTRDReconstructor)
41
42 Bool_t  AliTRDReconstructor::fgkSeedingOn = kFALSE;
43 Int_t   AliTRDReconstructor::fgStreamLevel     = 0;      // stream (debug) level
44
45 //_____________________________________________________________________________
46 void AliTRDReconstructor::Reconstruct(AliRunLoader* runLoader) const
47 {
48 // reconstruct clusters
49
50   AliLoader *loader=runLoader->GetLoader("TRDLoader");
51   loader->LoadRecPoints("recreate");
52
53   AliTRDclusterizerV1 clusterer("clusterer", "TRD clusterizer");
54   runLoader->CdGAFile();
55   Int_t nEvents = runLoader->GetNumberOfEvents();
56
57   for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) {
58     clusterer.Open(runLoader->GetFileName(), iEvent);
59     clusterer.ReadDigits();
60     clusterer.MakeClusters();
61     clusterer.WriteClusters(-1);
62   }
63
64   loader->UnloadRecPoints();
65
66   // Trigger (tracklets, LTU)
67
68   loader->LoadTracks("UPDATE");
69   if (loader->TreeT()) {
70     Info("Reconstruct","Tracklets already exist");
71     return;
72   }
73   Info("Reconstruct","Trigger tracklets will be produced");
74
75   AliTRDtrigger trdTrigger("Trigger","Trigger class"); 
76
77   AliTRDtrigParam *trigp = new AliTRDtrigParam("TRDtrigParam","TRD Trigger parameters");
78
79   if (runLoader->GetAliRun() == 0x0) runLoader->LoadgAlice();
80   gAlice = runLoader->GetAliRun();
81   Double_t x[3] = { 0.0, 0.0, 0.0 };
82   Double_t b[3];
83   gAlice->Field(x,b);  // b[] is in kilo Gauss
84   Float_t field = b[2] * 0.1; // Tesla
85   Info("Reconstruct","Trigger set for magnetic field = %f Tesla \n",field);
86
87   trigp->SetField(field);
88   trigp->Init();
89   trdTrigger.SetParameter(trigp);
90
91   for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) {
92     trdTrigger.Open(runLoader->GetFileName(), iEvent);
93     trdTrigger.ReadDigits();
94     trdTrigger.MakeTracklets();
95     trdTrigger.WriteTracklets(-1);
96   }
97
98   loader->UnloadTracks();
99
100 }
101
102 //_____________________________________________________________________________
103 void AliTRDReconstructor::Reconstruct(AliRunLoader* runLoader,
104                                       AliRawReader* rawReader) const
105 {
106 // reconstruct clusters
107
108   AliInfo("Reconstruct TRD clusters from RAW data");
109
110   AliLoader *loader=runLoader->GetLoader("TRDLoader");
111   loader->LoadRecPoints("recreate");
112
113   AliTRDclusterizerV1 clusterer("clusterer", "TRD clusterizer");
114   runLoader->CdGAFile();
115   Int_t nEvents = runLoader->GetNumberOfEvents();
116
117   for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) {
118     if (!rawReader->NextEvent()) break;
119     clusterer.Open(runLoader->GetFileName(), iEvent);
120     clusterer.ReadDigits(rawReader);
121     clusterer.MakeClusters();
122     clusterer.WriteClusters(-1);
123   }
124
125   loader->UnloadRecPoints();
126
127   // Trigger (tracklets, LTU)
128
129   loader->LoadTracks();
130   if (loader->TreeT()) {
131     Info("Reconstruct","Tracklets already exist");
132     return;
133   }
134   Info("Reconstruct","Trigger tracklets will be produced");
135
136   AliTRDtrigger trdTrigger("Trigger","Trigger class"); 
137
138   AliTRDtrigParam *trigp = new AliTRDtrigParam("TRDtrigParam","TRD Trigger parameters");
139
140   if (runLoader->GetAliRun() == 0x0) runLoader->LoadgAlice();
141   gAlice = runLoader->GetAliRun();
142   Double_t x[3] = { 0.0, 0.0, 0.0 };
143   Double_t b[3];
144   gAlice->Field(x,b);  // b[] is in kilo Gauss
145   Float_t field = b[2] * 0.1; // Tesla
146   Info("Reconstruct","Trigger set for magnetic field = %f Tesla \n",field);
147
148   trigp->SetField(field);
149   trigp->Init();
150   trdTrigger.SetParameter(trigp);
151
152   rawReader->RewindEvents();
153
154   for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) {
155     if (!rawReader->NextEvent()) break;
156     trdTrigger.Open(runLoader->GetFileName(), iEvent);
157     trdTrigger.ReadDigits(rawReader);
158     trdTrigger.MakeTracklets();
159     trdTrigger.WriteTracklets(-1);
160   }
161
162   loader->UnloadTracks();
163
164 }
165
166 //_____________________________________________________________________________
167 AliTracker* AliTRDReconstructor::CreateTracker(AliRunLoader* runLoader) const
168 {
169 // create a TRD tracker
170
171   runLoader->CdGAFile();
172   return new AliTRDtracker(gFile);
173 }
174
175 //_____________________________________________________________________________
176 void AliTRDReconstructor::FillESD(AliRunLoader* runLoader, 
177                                   AliESD* esd) const
178 {
179 // make PID
180
181   Double_t parTRD[] = {
182     280., // Min. Ionizing Particle signal.  Check it !!!
183     0.23, // relative resolution             Check it !!!
184     10.   // PID range (in sigmas)
185   };
186   AliTRDpidESD trdPID(parTRD);
187   trdPID.MakePID(esd);
188
189   // Trigger (tracks, GTU)
190
191   AliTRDtrigger trdTrigger("Trigger","Trigger class"); 
192
193   AliTRDtrigParam *trigp = new AliTRDtrigParam("TRDtrigParam","TRD Trigger parameters");
194
195   if (runLoader->GetAliRun() == 0x0) runLoader->LoadgAlice();
196   gAlice = runLoader->GetAliRun();
197   Double_t x[3] = { 0.0, 0.0, 0.0 };
198   Double_t b[3];
199   gAlice->Field(x,b);  // b[] is in kilo Gauss
200   Float_t field = b[2] * 0.1; // Tesla
201   Info("FillESD","Trigger set for magnetic field = %f Tesla \n",field);
202
203   trigp->SetField(field);
204   trigp->Init();
205
206   trdTrigger.SetParameter(trigp);
207   trdTrigger.SetRunLoader(runLoader);
208   trdTrigger.Init();
209
210   Int_t iEvent = runLoader->GetEventNumber(); 
211   runLoader->GetEvent(iEvent);
212   trdTrigger.ReadTracklets(runLoader);
213
214   AliESDTrdTrack *TrdTrack = new AliESDTrdTrack();
215   AliTRDgtuTrack *GtuTrack;
216
217   Int_t nTracks = trdTrigger.GetNumberOfTracks();
218   for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
219
220     GtuTrack = trdTrigger.GetTrack(iTrack);
221
222     TrdTrack->SetYproj(GtuTrack->GetYproj());
223     TrdTrack->SetZproj(GtuTrack->GetZproj());
224     TrdTrack->SetSlope(GtuTrack->GetSlope());
225     TrdTrack->SetDetector(GtuTrack->GetDetector());
226     TrdTrack->SetTracklets(GtuTrack->GetTracklets());
227     TrdTrack->SetPlanes(GtuTrack->GetPlanes());
228     TrdTrack->SetClusters(GtuTrack->GetClusters());
229     TrdTrack->SetPt(GtuTrack->GetPt());
230     TrdTrack->SetPhi(GtuTrack->GetPhi());
231     TrdTrack->SetEta(GtuTrack->GetEta());
232     TrdTrack->SetLabel(GtuTrack->GetLabel());
233     TrdTrack->SetPID(GtuTrack->GetPID());
234     TrdTrack->SetIsElectron(GtuTrack->IsElectron());
235
236     esd->AddTrdTrack(TrdTrack);
237
238   }
239
240 }
241
242
243