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;
44 //_____________________________________________________________________________
45 void AliTRDReconstructor::Reconstruct(AliRunLoader* runLoader) const
47 // reconstruct clusters
49 AliLoader *loader=runLoader->GetLoader("TRDLoader");
50 loader->LoadRecPoints("recreate");
52 AliTRDclusterizerV1 clusterer("clusterer", "TRD clusterizer");
53 runLoader->CdGAFile();
54 Int_t nEvents = runLoader->GetNumberOfEvents();
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);
63 loader->UnloadRecPoints();
65 // Trigger (tracklets, LTU)
68 if (loader->TreeT()) {
69 Info("Reconstruct","Tracklets already exist");
72 Info("Reconstruct","Trigger tracklets will be produced");
74 AliTRDtrigger trdTrigger("Trigger","Trigger class");
76 AliTRDtrigParam *trigp = new AliTRDtrigParam("TRDtrigParam","TRD Trigger parameters");
78 if (runLoader->GetAliRun() == 0x0) runLoader->LoadgAlice();
79 gAlice = runLoader->GetAliRun();
80 Double_t x[3] = { 0.0, 0.0, 0.0 };
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);
86 trigp->SetField(field);
88 trdTrigger.SetParameter(trigp);
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);
97 loader->UnloadTracks();
101 //_____________________________________________________________________________
102 void AliTRDReconstructor::Reconstruct(AliRunLoader* runLoader,
103 AliRawReader* rawReader) const
105 // reconstruct clusters
107 AliInfo("Reconstruct TRD clusters from RAW data");
109 AliLoader *loader=runLoader->GetLoader("TRDLoader");
110 loader->LoadRecPoints("recreate");
112 AliTRDclusterizerV1 clusterer("clusterer", "TRD clusterizer");
113 runLoader->CdGAFile();
114 Int_t nEvents = runLoader->GetNumberOfEvents();
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);
124 loader->UnloadRecPoints();
126 // Trigger (tracklets, LTU)
128 loader->LoadTracks();
129 if (loader->TreeT()) {
130 Info("Reconstruct","Tracklets already exist");
133 Info("Reconstruct","Trigger tracklets will be produced");
135 AliTRDtrigger trdTrigger("Trigger","Trigger class");
137 AliTRDtrigParam *trigp = new AliTRDtrigParam("TRDtrigParam","TRD Trigger parameters");
139 if (runLoader->GetAliRun() == 0x0) runLoader->LoadgAlice();
140 gAlice = runLoader->GetAliRun();
141 Double_t x[3] = { 0.0, 0.0, 0.0 };
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);
147 trigp->SetField(field);
149 trdTrigger.SetParameter(trigp);
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);
158 loader->UnloadTracks();
162 //_____________________________________________________________________________
163 AliTracker* AliTRDReconstructor::CreateTracker(AliRunLoader* runLoader) const
165 // create a TRD tracker
167 runLoader->CdGAFile();
168 return new AliTRDtracker(gFile);
171 //_____________________________________________________________________________
172 void AliTRDReconstructor::FillESD(AliRunLoader* runLoader,
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)
182 AliTRDpidESD trdPID(parTRD);
185 // Trigger (tracks, GTU)
187 AliTRDtrigger trdTrigger("Trigger","Trigger class");
189 AliTRDtrigParam *trigp = new AliTRDtrigParam("TRDtrigParam","TRD Trigger parameters");
191 if (runLoader->GetAliRun() == 0x0) runLoader->LoadgAlice();
192 gAlice = runLoader->GetAliRun();
193 Double_t x[3] = { 0.0, 0.0, 0.0 };
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);
199 trigp->SetField(field);
202 trdTrigger.SetParameter(trigp);
203 trdTrigger.SetRunLoader(runLoader);
206 Int_t iEvent = runLoader->GetEventNumber();
207 runLoader->GetEvent(iEvent);
208 trdTrigger.ReadTracklets(runLoader);
210 AliESDTrdTrack *TrdTrack = new AliESDTrdTrack();
211 AliTRDgtuTrack *GtuTrack;
213 Int_t nTracks = trdTrigger.GetNumberOfTracks();
214 for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
216 GtuTrack = trdTrigger.GetTrack(iTrack);
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 TrdTrack->SetIsElectron(GtuTrack->IsElectron());
232 esd->AddTrdTrack(TrdTrack);