1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 ///////////////////////////////////////////////////////////////////////////////
20 // class for TRD reconstruction //
22 ///////////////////////////////////////////////////////////////////////////////
26 #include "AliRunLoader.h"
27 #include "AliRawReader.h"
30 #include "AliESDTrdTrack.h"
33 #include "AliTRDReconstructor.h"
34 #include "AliTRDclusterizerV1.h"
35 #include "AliTRDtracker.h"
36 #include "AliTRDpidESD.h"
37 #include "AliTRDtrigger.h"
38 #include "AliTRDtrigParam.h"
39 #include "AliTRDgtuTrack.h"
41 ClassImp(AliTRDReconstructor)
43 Bool_t AliTRDReconstructor::fgkSeedingOn = kFALSE;
44 Int_t AliTRDReconstructor::fgStreamLevel = 0; // Stream (debug) level
46 //_____________________________________________________________________________
47 void AliTRDReconstructor::Reconstruct(AliRunLoader *runLoader) const
50 // Reconstruct clusters
53 AliLoader *loader = runLoader->GetLoader("TRDLoader");
54 loader->LoadRecPoints("recreate");
56 runLoader->CdGAFile();
57 Int_t nEvents = runLoader->GetNumberOfEvents();
59 for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) {
60 AliTRDclusterizerV1 clusterer("clusterer","TRD clusterizer");
61 clusterer.Open(runLoader->GetFileName(),iEvent);
62 clusterer.ReadDigits();
63 clusterer.MakeClusters();
64 clusterer.WriteClusters(-1);
67 loader->UnloadRecPoints();
70 // Trigger (tracklets, LTU)
72 loader->LoadTracks("RECREATE");
73 AliInfo("Trigger tracklets will be produced");
75 AliTRDtrigger trdTrigger("Trigger","Trigger class");
77 AliTRDtrigParam *trigp = new AliTRDtrigParam("TRDtrigParam"
78 ,"TRD Trigger parameters");
80 if (runLoader->GetAliRun() == 0x0) {
81 runLoader->LoadgAlice();
83 gAlice = runLoader->GetAliRun();
84 Double_t x[3] = { 0.0, 0.0, 0.0 };
86 gAlice->Field(x,b); // b[] is in kilo Gauss
87 Float_t field = b[2] * 0.1; // Tesla
88 AliInfo(Form("Trigger set for magnetic field = %f Tesla \n",field));
90 trigp->SetField(field);
92 trdTrigger.SetParameter(trigp);
94 for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) {
95 trdTrigger.Open(runLoader->GetFileName(),iEvent);
96 trdTrigger.ReadDigits();
97 trdTrigger.MakeTracklets();
98 trdTrigger.WriteTracklets(-1);
101 loader->UnloadTracks();
105 //_____________________________________________________________________________
106 void AliTRDReconstructor::Reconstruct(AliRunLoader *runLoader
107 , AliRawReader *rawReader) const
110 // Reconstruct clusters
113 AliInfo("Reconstruct TRD clusters from RAW data");
115 AliLoader *loader = runLoader->GetLoader("TRDLoader");
116 loader->LoadRecPoints("recreate");
118 runLoader->CdGAFile();
119 Int_t nEvents = runLoader->GetNumberOfEvents();
121 for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) {
122 if (!rawReader->NextEvent()) break;
123 AliTRDclusterizerV1 clusterer("clusterer","TRD clusterizer");
124 clusterer.Open(runLoader->GetFileName(),iEvent);
125 clusterer.ReadDigits(rawReader);
126 clusterer.MakeClusters();
127 clusterer.WriteClusters(-1);
130 loader->UnloadRecPoints();
133 // Trigger (tracklets, LTU)
135 loader->LoadTracks();
136 if (loader->TreeT()) {
137 AliError("Tracklets already exist");
140 AliInfo("Trigger tracklets will be produced");
142 AliTRDtrigger trdTrigger("Trigger","Trigger class");
144 AliTRDtrigParam *trigp = new AliTRDtrigParam("TRDtrigParam"
145 ,"TRD Trigger parameters");
147 if (runLoader->GetAliRun() == 0x0) {
148 runLoader->LoadgAlice();
150 gAlice = runLoader->GetAliRun();
151 Double_t x[3] = { 0.0, 0.0, 0.0 };
153 gAlice->Field(x,b); // b[] is in kilo Gauss
154 Float_t field = b[2] * 0.1; // Tesla
155 AliInfo(Form("Trigger set for magnetic field = %f Tesla \n",field));
157 trigp->SetField(field);
159 trdTrigger.SetParameter(trigp);
161 rawReader->RewindEvents();
163 for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) {
164 if (!rawReader->NextEvent()) break;
165 trdTrigger.Open(runLoader->GetFileName(),iEvent);
166 trdTrigger.ReadDigits(rawReader);
167 trdTrigger.MakeTracklets();
168 trdTrigger.WriteTracklets(-1);
171 loader->UnloadTracks();
175 //_____________________________________________________________________________
176 AliTracker *AliTRDReconstructor::CreateTracker(AliRunLoader *runLoader) const
179 // Create a TRD tracker
182 runLoader->CdGAFile();
184 return new AliTRDtracker(gFile);
188 //_____________________________________________________________________________
189 void AliTRDReconstructor::FillESD(AliRunLoader *runLoader
200 // Trigger (tracks, GTU)
202 AliTRDtrigger trdTrigger("Trigger","Trigger class");
204 AliTRDtrigParam *trigp = new AliTRDtrigParam("TRDtrigParam"
205 ,"TRD Trigger parameters");
207 if (runLoader->GetAliRun() == 0x0) {
208 runLoader->LoadgAlice();
210 gAlice = runLoader->GetAliRun();
211 Double_t x[3] = { 0.0, 0.0, 0.0 };
213 gAlice->Field(x,b); // b[] is in kilo Gauss
214 Float_t field = b[2] * 0.1; // Tesla
215 AliInfo(Form("Trigger set for magnetic field = %f Tesla \n",field));
217 trigp->SetField(field);
220 trdTrigger.SetParameter(trigp);
221 trdTrigger.SetRunLoader(runLoader);
224 Int_t iEvent = runLoader->GetEventNumber();
225 runLoader->GetEvent(iEvent);
226 trdTrigger.ReadTracklets(runLoader);
228 AliESDTrdTrack *TrdTrack = new AliESDTrdTrack();
229 AliTRDgtuTrack *GtuTrack;
231 Int_t nTracks = trdTrigger.GetNumberOfTracks();
232 for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
234 GtuTrack = trdTrigger.GetTrack(iTrack);
236 TrdTrack->SetYproj(GtuTrack->GetYproj());
237 TrdTrack->SetZproj(GtuTrack->GetZproj());
238 TrdTrack->SetSlope(GtuTrack->GetSlope());
239 TrdTrack->SetDetector(GtuTrack->GetDetector());
240 TrdTrack->SetTracklets(GtuTrack->GetTracklets());
241 TrdTrack->SetPlanes(GtuTrack->GetPlanes());
242 TrdTrack->SetClusters(GtuTrack->GetClusters());
243 TrdTrack->SetPt(GtuTrack->GetPt());
244 TrdTrack->SetPhi(GtuTrack->GetPhi());
245 TrdTrack->SetEta(GtuTrack->GetEta());
246 TrdTrack->SetLabel(GtuTrack->GetLabel());
247 TrdTrack->SetPID(GtuTrack->GetPID());
248 TrdTrack->SetIsElectron(GtuTrack->IsElectron());
250 esd->AddTrdTrack(TrdTrack);