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 "AliTRDReconstructor.h"
27 #include "AliRunLoader.h"
28 #include "AliTRDclusterizerV1.h"
29 #include "AliTRDtracker.h"
30 #include "AliTRDpidESD.h"
31 #include "AliRawReader.h"
33 #include "AliTRDtrigger.h"
34 #include "AliTRDtrigParam.h"
35 #include "AliTRDgtuTrack.h"
37 #include "AliESDTrdTrack.h"
40 ClassImp(AliTRDReconstructor)
42 Bool_t AliTRDReconstructor::fgkSeedingOn = kFALSE;
43 Int_t AliTRDReconstructor::fgStreamLevel = 0; // stream (debug) level
45 //_____________________________________________________________________________
46 void AliTRDReconstructor::Reconstruct(AliRunLoader* runLoader) const
48 // reconstruct clusters
50 AliLoader *loader=runLoader->GetLoader("TRDLoader");
51 loader->LoadRecPoints("recreate");
53 AliTRDclusterizerV1 clusterer("clusterer", "TRD clusterizer");
54 runLoader->CdGAFile();
55 Int_t nEvents = runLoader->GetNumberOfEvents();
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);
64 loader->UnloadRecPoints();
66 // Trigger (tracklets, LTU)
68 loader->LoadTracks("UPDATE");
69 if (loader->TreeT()) {
70 Info("Reconstruct","Tracklets already exist");
73 Info("Reconstruct","Trigger tracklets will be produced");
75 AliTRDtrigger trdTrigger("Trigger","Trigger class");
77 AliTRDtrigParam *trigp = new AliTRDtrigParam("TRDtrigParam","TRD Trigger parameters");
79 if (runLoader->GetAliRun() == 0x0) runLoader->LoadgAlice();
80 gAlice = runLoader->GetAliRun();
81 Double_t x[3] = { 0.0, 0.0, 0.0 };
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);
87 trigp->SetField(field);
89 trdTrigger.SetParameter(trigp);
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);
98 loader->UnloadTracks();
102 //_____________________________________________________________________________
103 void AliTRDReconstructor::Reconstruct(AliRunLoader* runLoader,
104 AliRawReader* rawReader) const
106 // reconstruct clusters
108 AliInfo("Reconstruct TRD clusters from RAW data");
110 AliLoader *loader=runLoader->GetLoader("TRDLoader");
111 loader->LoadRecPoints("recreate");
113 AliTRDclusterizerV1 clusterer("clusterer", "TRD clusterizer");
114 runLoader->CdGAFile();
115 Int_t nEvents = runLoader->GetNumberOfEvents();
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);
125 loader->UnloadRecPoints();
127 // Trigger (tracklets, LTU)
129 loader->LoadTracks();
130 if (loader->TreeT()) {
131 Info("Reconstruct","Tracklets already exist");
134 Info("Reconstruct","Trigger tracklets will be produced");
136 AliTRDtrigger trdTrigger("Trigger","Trigger class");
138 AliTRDtrigParam *trigp = new AliTRDtrigParam("TRDtrigParam","TRD Trigger parameters");
140 if (runLoader->GetAliRun() == 0x0) runLoader->LoadgAlice();
141 gAlice = runLoader->GetAliRun();
142 Double_t x[3] = { 0.0, 0.0, 0.0 };
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);
148 trigp->SetField(field);
150 trdTrigger.SetParameter(trigp);
152 rawReader->RewindEvents();
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);
162 loader->UnloadTracks();
166 //_____________________________________________________________________________
167 AliTracker* AliTRDReconstructor::CreateTracker(AliRunLoader* runLoader) const
169 // create a TRD tracker
171 runLoader->CdGAFile();
172 return new AliTRDtracker(gFile);
175 //_____________________________________________________________________________
176 void AliTRDReconstructor::FillESD(AliRunLoader* runLoader,
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)
186 AliTRDpidESD trdPID(parTRD);
189 // Trigger (tracks, GTU)
191 AliTRDtrigger trdTrigger("Trigger","Trigger class");
193 AliTRDtrigParam *trigp = new AliTRDtrigParam("TRDtrigParam","TRD Trigger parameters");
195 if (runLoader->GetAliRun() == 0x0) runLoader->LoadgAlice();
196 gAlice = runLoader->GetAliRun();
197 Double_t x[3] = { 0.0, 0.0, 0.0 };
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);
203 trigp->SetField(field);
206 trdTrigger.SetParameter(trigp);
207 trdTrigger.SetRunLoader(runLoader);
210 Int_t iEvent = runLoader->GetEventNumber();
211 runLoader->GetEvent(iEvent);
212 trdTrigger.ReadTracklets(runLoader);
214 AliESDTrdTrack *TrdTrack = new AliESDTrdTrack();
215 AliTRDgtuTrack *GtuTrack;
217 Int_t nTracks = trdTrigger.GetNumberOfTracks();
218 for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
220 GtuTrack = trdTrigger.GetTrack(iTrack);
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());
236 esd->AddTrdTrack(TrdTrack);