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