]> git.uio.no Git - u/mrichter/AliRoot.git/blame - FMD/AliFMDReconstructor.cxx
First implementation of neural network PID
[u/mrichter/AliRoot.git] / FMD / AliFMDReconstructor.cxx
CommitLineData
37c55dc0 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 **************************************************************************/
0d0e6995 15/* $Id$ */
c2fc1258 16/** @file AliFMDReconstructor.cxx
17 @author Christian Holm Christensen <cholm@nbi.dk>
18 @date Mon Mar 27 12:47:09 2006
19 @brief FMD reconstruction
20*/
4347b38f 21//____________________________________________________________________
42403906 22//
02a27b50 23// This is a class that constructs AliFMDRecPoint objects from of Digits
6169f936 24// This class reads either digits from a TClonesArray or raw data from
4347b38f 25// a DDL file (or similar), and stores the read ADC counts in an
6169f936 26// internal cache (fAdcs). The rec-points are made via the naiive
27// method.
4347b38f 28//
37c55dc0 29//-- Authors: Evgeny Karpechev(INR) and Alla Maevsksia
4347b38f 30// Latest changes by Christian Holm Christensen <cholm@nbi.dk>
31//
32//
33//____________________________________________________________________
37c55dc0 34
f95a63c4 35// #include <AliLog.h> // ALILOG_H
6169f936 36// #include <AliRun.h> // ALIRUN_H
f95a63c4 37#include "AliFMDDebug.h"
f011bd38 38// to be removed as soon as we remove it from the base class
39#include "AliRunLoader.h"
1a1fdef7 40#include "AliFMDGeometry.h" // ALIFMDGEOMETRY_H
41#include "AliFMDParameters.h" // ALIFMDPARAMETERS_H
56b1929b 42#include "AliFMDDigit.h" // ALIFMDDIGIT_H
43#include "AliFMDReconstructor.h" // ALIFMDRECONSTRUCTOR_H
56b1929b 44#include "AliFMDRawReader.h" // ALIFMDRAWREADER_H
bf000c32 45#include "AliFMDRecPoint.h" // ALIFMDMULTNAIIVE_H
af885e0f 46#include "AliESDEvent.h" // ALIESDEVENT_H
aad72f45 47#include "AliESDVertex.h" // ALIESDVERTEX_H
8f6ee336 48#include <AliESDFMD.h> // ALIESDFMD_H
aad72f45 49#include <TMath.h>
9684be2f 50#include <TH1.h>
51#include <TH2.h>
52#include <TFile.h>
02a27b50 53class AliRawReader;
4347b38f 54
55//____________________________________________________________________
925e6570 56ClassImp(AliFMDReconstructor)
1a1fdef7 57#if 0
58 ; // This is here to keep Emacs for indenting the next line
59#endif
37c55dc0 60
4347b38f 61//____________________________________________________________________
62AliFMDReconstructor::AliFMDReconstructor()
63 : AliReconstructor(),
e9fd1e20 64 fMult(0x0),
65 fNMult(0),
66 fTreeR(0x0),
67 fCurrentVertex(0),
68 fESDObj(0x0),
9684be2f 69 fNoiseFactor(0),
70 fAngleCorrect(kTRUE),
71 fVertexType(kNoVertex),
9684be2f 72 fESD(0x0),
73 fDiagnostics(kFALSE),
74 fDiagStep1(0),
75 fDiagStep2(0),
76 fDiagStep3(0),
77 fDiagStep4(0),
78 fDiagAll(0)
4347b38f 79{
8f6ee336 80 // Make a new FMD reconstructor object - default CTOR.
a9579262 81 SetNoiseFactor();
82 SetAngleCorrect();
4347b38f 83}
84
42403906 85
86//____________________________________________________________________
87AliFMDReconstructor::AliFMDReconstructor(const AliFMDReconstructor& other)
8f6ee336 88 : AliReconstructor(),
89 fMult(other.fMult),
e9fd1e20 90 fNMult(other.fNMult),
91 fTreeR(other.fTreeR),
92 fCurrentVertex(other.fCurrentVertex),
93 fESDObj(other.fESDObj),
a9579262 94 fNoiseFactor(other.fNoiseFactor),
9684be2f 95 fAngleCorrect(other.fAngleCorrect),
96 fVertexType(other.fVertexType),
9684be2f 97 fESD(other.fESD),
98 fDiagnostics(other.fDiagnostics),
99 fDiagStep1(other.fDiagStep1),
100 fDiagStep2(other.fDiagStep2),
101 fDiagStep3(other.fDiagStep3),
102 fDiagStep4(other.fDiagStep4),
103 fDiagAll(other.fDiagAll)
42403906 104{
56b1929b 105 // Copy constructor
42403906 106}
107
108
109//____________________________________________________________________
110AliFMDReconstructor&
111AliFMDReconstructor::operator=(const AliFMDReconstructor& other)
112{
56b1929b 113 // Assignment operator
a9579262 114 fMult = other.fMult;
115 fNMult = other.fNMult;
116 fTreeR = other.fTreeR;
e9fd1e20 117 fCurrentVertex = other.fCurrentVertex;
a9579262 118 fESDObj = other.fESDObj;
a9579262 119 fNoiseFactor = other.fNoiseFactor;
120 fAngleCorrect = other.fAngleCorrect;
9684be2f 121 fVertexType = other.fVertexType;
9684be2f 122 fESD = other.fESD;
123 fDiagnostics = other.fDiagnostics;
124 fDiagStep1 = other.fDiagStep1;
125 fDiagStep2 = other.fDiagStep2;
126 fDiagStep3 = other.fDiagStep3;
127 fDiagStep4 = other.fDiagStep4;
128 fDiagAll = other.fDiagAll;
42403906 129 return *this;
130}
56b1929b 131
132//____________________________________________________________________
133AliFMDReconstructor::~AliFMDReconstructor()
134{
135 // Destructor
8f6ee336 136 if (fMult) fMult->Delete();
137 if (fMult) delete fMult;
138 if (fESDObj) delete fESDObj;
56b1929b 139}
4347b38f 140
141//____________________________________________________________________
142void
f011bd38 143AliFMDReconstructor::Init(AliRunLoader* /*runLoader*/)
1a1fdef7 144{
145 // Initialize the reconstructor
f011bd38 146
bf000c32 147 // Initialize the geometry
9b48326f 148 AliFMDGeometry* geom = AliFMDGeometry::Instance();
149 geom->Init();
150 geom->InitTransformations();
151
152 // Initialize the parameters
153 AliFMDParameters* param = AliFMDParameters::Instance();
154 param->Init();
bf000c32 155
8f6ee336 156 // Current vertex position
1a1fdef7 157 fCurrentVertex = 0;
8f6ee336 158 // Create array of reconstructed strip multiplicities
bf000c32 159 fMult = new TClonesArray("AliFMDRecPoint", 51200);
8f6ee336 160 // Create ESD output object
161 fESDObj = new AliESDFMD;
162
9684be2f 163 // Check if we need diagnostics histograms
164 if (!fDiagnostics) return;
165 fDiagStep1 = new TH2I("diagStep1", "Read ADC vs. Noise surpressed ADC",
166 1024, -.5, 1023.5, 1024, -.5, 1023.5);
167 fDiagStep1->SetDirectory(0);
168 fDiagStep1->GetXaxis()->SetTitle("ADC (read)");
169 fDiagStep1->GetYaxis()->SetTitle(Form("ADC (noise surpressed %4.f)",
170 fNoiseFactor));
171 fDiagStep2 = new TH2F("diagStep2", "ADC vs Edep deduced",
172 1024, -.5, 1023.5, 100, 0, 2);
173 fDiagStep2->SetDirectory(0);
174 fDiagStep2->GetXaxis()->SetTitle("ADC (noise surpressed)");
175 fDiagStep2->GetYaxis()->SetTitle("#Delta E [GeV]");
176 fDiagStep3 = new TH2F("diagStep3", "Edep vs Edep path corrected",
177 100, 0., 2., 100, 0., 2.);
178 fDiagStep3->SetDirectory(0);
179 fDiagStep3->GetXaxis()->SetTitle("#Delta E [GeV]");
180 fDiagStep3->GetYaxis()->SetTitle("#Delta E/#Delta x #times #delta x [GeV]");
181 fDiagStep4 = new TH2F("diagStep4", "Edep vs Multiplicity deduced",
182 100, 0., 2., 100, -.1, 19.9);
183 fDiagStep4->SetDirectory(0);
184 fDiagStep4->GetXaxis()->SetTitle("#Delta E/#Delta x #times #delta x [GeV]");
185 fDiagStep4->GetYaxis()->SetTitle("Multiplicity");
186 fDiagAll = new TH2F("diagAll", "Read ADC vs Multiplicity deduced",
187 1024, -.5, 1023.5, 100, -.1, 19.9);
188 fDiagAll->SetDirectory(0);
189 fDiagAll->GetXaxis()->SetTitle("ADC (read)");
190 fDiagAll->GetYaxis()->SetTitle("Multiplicity");
4347b38f 191}
dc8af42e 192
4347b38f 193//____________________________________________________________________
194void
1a1fdef7 195AliFMDReconstructor::ConvertDigits(AliRawReader* reader,
196 TTree* digitsTree) const
197{
198 // Convert Raw digits to AliFMDDigit's in a tree
f95a63c4 199 AliFMDDebug(2, ("Reading raw data into digits tree"));
1a1fdef7 200 AliFMDRawReader rawRead(reader, digitsTree);
201 // rawRead.SetSampleRate(fFMD->GetSampleRate());
202 rawRead.Exec();
4347b38f 203}
204
4347b38f 205//____________________________________________________________________
206void
9684be2f 207AliFMDReconstructor::GetVertex() const
4347b38f 208{
97e94238 209 // Return the vertex to use.
210 // This is obtained from the ESD object.
211 // If not found, a warning is issued.
9684be2f 212 fVertexType = kNoVertex;
213 fCurrentVertex = 0;
a3537838 214 if (fESD) {
8f6ee336 215 const AliESDVertex* vertex = fESD->GetVertex();
216 if (vertex) {
f95a63c4 217 AliFMDDebug(2, ("Got vertex from ESD: %f", vertex->GetZv()));
8f6ee336 218 fCurrentVertex = vertex->GetZv();
9684be2f 219 fVertexType = kESDVertex;
220 return;
8f6ee336 221 }
a3537838 222 }
9684be2f 223 AliWarning("Didn't get any vertex from ESD or generator");
224}
225
226
227//____________________________________________________________________
228void
229AliFMDReconstructor::Reconstruct(TTree* digitsTree,
230 TTree* clusterTree) const
231{
232 // Reconstruct event from digits in tree
233 // Get the FMD branch holding the digits.
234 // FIXME: The vertex may not be known yet, so we may have to move
235 // some of this to FillESD.
f95a63c4 236 AliFMDDebug(2, ("Reconstructing from digits in a tree"));
9684be2f 237 GetVertex();
238
1a1fdef7 239 TBranch *digitBranch = digitsTree->GetBranch("FMD");
4347b38f 240 if (!digitBranch) {
1a1fdef7 241 Error("Exec", "No digit branch for the FMD found");
242 return;
4347b38f 243 }
0abe7182 244 TClonesArray* digits = new TClonesArray("AliFMDDigit");
1a1fdef7 245 digitBranch->SetAddress(&digits);
4347b38f 246
8f6ee336 247 if (fMult) fMult->Clear();
248 if (fESDObj) fESDObj->Clear();
249
250 fNMult = 0;
251 fTreeR = clusterTree;
252 fTreeR->Branch("FMD", &fMult);
253
f95a63c4 254 AliFMDDebug(5, ("Getting entry 0 from digit branch"));
1a1fdef7 255 digitBranch->GetEntry(0);
256
f95a63c4 257 AliFMDDebug(5, ("Processing digits"));
e802be3e 258 ProcessDigits(digits);
259
8f6ee336 260 Int_t written = clusterTree->Fill();
f95a63c4 261 AliFMDDebug(10, ("Filled %d bytes into cluster tree", written));
0abe7182 262 digits->Delete();
263 delete digits;
4347b38f 264}
1a1fdef7 265
8f6ee336 266
4347b38f 267//____________________________________________________________________
e802be3e 268void
269AliFMDReconstructor::ProcessDigits(TClonesArray* digits) const
4347b38f 270{
69b696b9 271 // For each digit, find the pseudo rapdity, azimuthal angle, and
272 // number of corrected ADC counts, and pass it on to the algorithms
273 // used.
e802be3e 274 Int_t nDigits = digits->GetEntries();
f95a63c4 275 AliFMDDebug(1, ("Got %d digits", nDigits));
a9579262 276 fESDObj->SetNoiseFactor(fNoiseFactor);
277 fESDObj->SetAngleCorrected(fAngleCorrect);
e802be3e 278 for (Int_t i = 0; i < nDigits; i++) {
279 AliFMDDigit* digit = static_cast<AliFMDDigit*>(digits->At(i));
8f6ee336 280 AliFMDParameters* param = AliFMDParameters::Instance();
281 // Check that the strip is not marked as dead
282 if (param->IsDead(digit->Detector(), digit->Ring(),
15b17c89 283 digit->Sector(), digit->Strip())) {
f95a63c4 284 AliFMDDebug(10, ("FMD%d%c[%2d,%3d] is dead", digit->Detector(),
15b17c89 285 digit->Ring(), digit->Sector(), digit->Strip()));
286 continue;
287 }
8f6ee336 288
289 // digit->Print();
290 // Get eta and phi
291 Float_t eta, phi;
292 PhysicalCoordinates(digit, eta, phi);
4347b38f 293
8f6ee336 294 // Substract pedestal.
e802be3e 295 UShort_t counts = SubtractPedestal(digit);
4347b38f 296
8f6ee336 297 // Gain match digits.
298 Double_t edep = Adc2Energy(digit, eta, counts);
299
300 // Make rough multiplicity
301 Double_t mult = Energy2Multiplicity(digit, edep);
302
f95a63c4 303 AliFMDDebug(10, ("FMD%d%c[%2d,%3d]: "
8f6ee336 304 "ADC: %d, Counts: %d, Energy: %f, Mult: %f",
305 digit->Detector(), digit->Ring(), digit->Sector(),
306 digit->Strip(), digit->Counts(), counts, edep, mult));
307
308 // Create a `RecPoint' on the output branch.
69893a66 309 if (fMult) {
310 AliFMDRecPoint* m =
311 new ((*fMult)[fNMult]) AliFMDRecPoint(digit->Detector(),
312 digit->Ring(),
313 digit->Sector(),
314 digit->Strip(),
315 eta, phi,
316 edep, mult);
317 (void)m; // Suppress warnings about unused variables.
318 fNMult++;
319 }
320
8f6ee336 321 fESDObj->SetMultiplicity(digit->Detector(), digit->Ring(),
322 digit->Sector(), digit->Strip(), mult);
323 fESDObj->SetEta(digit->Detector(), digit->Ring(),
324 digit->Sector(), digit->Strip(), eta);
9684be2f 325
326 if (fDiagAll) fDiagAll->Fill(digit->Counts(), mult);
4347b38f 327 }
4347b38f 328}
8f6ee336 329
1a1fdef7 330//____________________________________________________________________
331UShort_t
332AliFMDReconstructor::SubtractPedestal(AliFMDDigit* digit) const
333{
334 // Member function to subtract the pedestal from a digit
335 // This implementation does nothing, but a derived class could over
336 // load this to subtract a pedestal that was given in a database or
337 // something like that.
338
8f6ee336 339 Int_t counts = 0;
9684be2f 340 Int_t adc = 0;
8f6ee336 341 AliFMDParameters* param = AliFMDParameters::Instance();
a9579262 342 Float_t ped = param->GetPedestal(digit->Detector(),
8f6ee336 343 digit->Ring(),
344 digit->Sector(),
345 digit->Strip());
a9579262 346 Float_t noise = param->GetPedestalWidth(digit->Detector(),
347 digit->Ring(),
348 digit->Sector(),
349 digit->Strip());
f95a63c4 350 AliFMDDebug(15, ("Subtracting pedestal %f from signal %d",
a9579262 351 ped, digit->Counts()));
9684be2f 352 if (digit->Count3() > 0) adc = digit->Count3();
353 else if (digit->Count2() > 0) adc = digit->Count2();
354 else adc = digit->Count1();
355 counts = TMath::Max(Int_t(adc - ped), 0);
a9579262 356 if (counts < noise * fNoiseFactor) counts = 0;
f95a63c4 357 if (counts > 0) AliFMDDebug(15, ("Got a hit strip"));
9684be2f 358 if (fDiagStep1) fDiagStep1->Fill(adc, counts);
8f6ee336 359
1a1fdef7 360 return UShort_t(counts);
361}
362
8f6ee336 363//____________________________________________________________________
364Float_t
365AliFMDReconstructor::Adc2Energy(AliFMDDigit* digit,
a9579262 366 Float_t eta,
8f6ee336 367 UShort_t count) const
368{
369 // Converts number of ADC counts to energy deposited.
370 // Note, that this member function can be overloaded by derived
371 // classes to do strip-specific look-ups in databases or the like,
372 // to find the proper gain for a strip.
373 //
374 // In this simple version, we calculate the energy deposited as
375 //
376 // EnergyDeposited = cos(theta) * gain * count
377 //
378 // where
379 //
380 // Pre_amp_MIP_Range
381 // gain = ----------------- * Energy_deposited_per_MIP
382 // ADC_channel_size
383 //
384 // is constant and the same for all strips.
a9579262 385 if (count <= 0) return 0;
8f6ee336 386 AliFMDParameters* param = AliFMDParameters::Instance();
387 Float_t gain = param->GetPulseGain(digit->Detector(),
388 digit->Ring(),
389 digit->Sector(),
390 digit->Strip());
f95a63c4 391 AliFMDDebug(15, ("Converting counts %d to energy via factor %f",
8f6ee336 392 count, gain));
a9579262 393
394 Double_t edep = count * gain;
9684be2f 395 if (fDiagStep2) fDiagStep2->Fill(count, edep);
a9579262 396 if (fAngleCorrect) {
9684be2f 397 Double_t theta = 2 * TMath::ATan(TMath::Exp(-eta));
398 Double_t corr = TMath::Abs(TMath::Cos(theta));
399 Double_t cedep = corr * edep;
f95a63c4 400 AliFMDDebug(10, ("correcting for path %f * %f = %f (eta=%f, theta=%f)",
9684be2f 401 edep, corr, cedep, eta, theta));
402 if (fDiagStep3) fDiagStep3->Fill(edep, cedep);
403 edep = cedep;
a9579262 404 }
8f6ee336 405 return edep;
406}
407
408//____________________________________________________________________
409Float_t
410AliFMDReconstructor::Energy2Multiplicity(AliFMDDigit* /* digit */,
411 Float_t edep) const
412{
413 // Converts an energy signal to number of particles.
414 // Note, that this member function can be overloaded by derived
415 // classes to do strip-specific look-ups in databases or the like,
416 // to find the proper gain for a strip.
417 //
418 // In this simple version, we calculate the multiplicity as
419 //
420 // multiplicity = Energy_deposited / Energy_deposited_per_MIP
421 //
422 // where
423 //
424 // Energy_deposited_per_MIP = 1.664 * SI_density * SI_thickness
425 //
426 // is constant and the same for all strips
427 AliFMDParameters* param = AliFMDParameters::Instance();
428 Double_t edepMIP = param->GetEdepMip();
429 Float_t mult = edep / edepMIP;
430 if (edep > 0)
f95a63c4 431 AliFMDDebug(15, ("Translating energy %f to multiplicity via "
8f6ee336 432 "divider %f->%f", edep, edepMIP, mult));
9684be2f 433 if (fDiagStep4) fDiagStep4->Fill(edep, mult);
8f6ee336 434 return mult;
435}
436
437//____________________________________________________________________
438void
439AliFMDReconstructor::PhysicalCoordinates(AliFMDDigit* digit,
440 Float_t& eta,
441 Float_t& phi) const
442{
443 // Get the eta and phi of a digit
444 //
445 // Get geometry.
9b48326f 446 AliFMDGeometry* geom = AliFMDGeometry::Instance();
bf000c32 447 Double_t x, y, z, r, theta;
9b48326f 448 geom->Detector2XYZ(digit->Detector(), digit->Ring(), digit->Sector(),
bf000c32 449 digit->Strip(), x, y, z);
450 // Correct for vertex offset.
451 z += fCurrentVertex;
452 phi = TMath::ATan2(y, x);
453 r = TMath::Sqrt(y * y + x * x);
454 theta = TMath::ATan2(r, z);
455 eta = -TMath::Log(TMath::Tan(theta / 2));
8f6ee336 456}
457
458
459
4347b38f 460//____________________________________________________________________
461void
1a1fdef7 462AliFMDReconstructor::FillESD(TTree* /* digitsTree */,
463 TTree* /* clusterTree */,
af885e0f 464 AliESDEvent* esd) const
121a60bd 465{
42403906 466 // nothing to be done
69b696b9 467 // FIXME: The vertex may not be known when Reconstruct is executed,
468 // so we may have to move some of that member function here.
f95a63c4 469 AliFMDDebug(2, ("Calling FillESD with two trees and one ESD"));
8f6ee336 470 // fESDObj->Print();
471
472 if (esd) {
f95a63c4 473 AliFMDDebug(2, ("Writing FMD data to ESD tree"));
8f6ee336 474 esd->SetFMDData(fESDObj);
a3537838 475 }
9684be2f 476
477 if (!fDiagnostics || !esd) return;
478 static bool first = true;
69893a66 479 // This is most likely NOT the event number you'd like to use. It
480 // has nothing to do with the 'real' event number.
481 // - That's OK. We just use it for the name of the directory -
482 // nothing else. Christian
483 Int_t evno = esd->GetEventNumberInFile();
484 AliFMDDebug(1, ("Writing diagnostics histograms to FMD.Diag.root/%03d",evno));
9684be2f 485 TFile f("FMD.Diag.root", (first ? "RECREATE" : "UPDATE"));
486 first = false;
487 f.cd();
488 TDirectory* d = f.mkdir(Form("%03d", evno),
489 Form("Diagnostics histograms for event # %d", evno));
490 d->cd();
491 if (fDiagStep1) fDiagStep1->Write();
492 if (fDiagStep2) fDiagStep2->Write();
493 if (fDiagStep3) fDiagStep3->Write();
494 if (fDiagStep4) fDiagStep4->Write();
495 if (fDiagAll) fDiagAll->Write();
496 d->Write();
497 f.Write();
498 f.Close();
499
500 if (fDiagStep1) fDiagStep1->Reset();
501 if (fDiagStep2) fDiagStep2->Reset();
502 if (fDiagStep3) fDiagStep3->Reset();
503 if (fDiagStep4) fDiagStep4->Reset();
504 if (fDiagAll) fDiagAll->Reset();
121a60bd 505}
506
54e415a8 507
508//____________________________________________________________________
509void
69893a66 510AliFMDReconstructor::Reconstruct(AliRawReader* reader,
511 TTree* /* ctree */) const
54e415a8 512{
513 // Cannot be used. See member function with same name but with 2
514 // TTree arguments. Make sure you do local reconstrucion
f95a63c4 515 AliFMDDebug(2, ("Calling FillESD with loader and tree"));
69893a66 516#if 1
517 TClonesArray* array = new TClonesArray("AliFMDDigit");
518 // if (ctree) ctree->Branch("FMD", &array);
519 AliFMDRawReader rawRead(reader, 0);
520 rawRead.ReadAdcs(array);
521 // ctree->Fill();
522 // Question - how to get the digits in this case?
523 ProcessDigits(array);
524 // Reconstruct(array, ctree);
525 array->Delete();
526 delete array;
527#else
54e415a8 528 AliError("MayNotUse");
69893a66 529#endif
54e415a8 530}
531//____________________________________________________________________
532void
533AliFMDReconstructor::Reconstruct(AliRunLoader*) const
534{
535 // Cannot be used. See member function with same name but with 2
536 // TTree arguments. Make sure you do local reconstrucion
f95a63c4 537 AliFMDDebug(2, ("Calling FillESD with loader"));
54e415a8 538 AliError("MayNotUse");
539}
540//____________________________________________________________________
541void
542AliFMDReconstructor::Reconstruct(AliRunLoader*, AliRawReader*) const
543{
544 // Cannot be used. See member function with same name but with 2
545 // TTree arguments. Make sure you do local reconstrucion
f95a63c4 546 AliFMDDebug(2, ("Calling FillESD with loader and raw reader"));
54e415a8 547 AliError("MayNotUse");
548}
549//____________________________________________________________________
550void
69893a66 551AliFMDReconstructor::FillESD(AliRawReader*,TTree*,AliESDEvent* esd) const
54e415a8 552{
553 // Cannot be used. See member function with same name but with 2
554 // TTree arguments. Make sure you do local reconstrucion
f95a63c4 555 AliFMDDebug(2, ("Calling FillESD with raw reader, tree, and ESD"));
69893a66 556#if 1
557 FillESD((TTree*)0, (TTree*)0, esd);
558#else
54e415a8 559 AliError("MayNotUse");
69893a66 560#endif
54e415a8 561}
562//____________________________________________________________________
563void
af885e0f 564AliFMDReconstructor::FillESD(AliRunLoader*,AliESDEvent*) const
54e415a8 565{
566 // Cannot be used. See member function with same name but with 2
567 // TTree arguments. Make sure you do local reconstrucion
f95a63c4 568 AliFMDDebug(2, ("Calling FillESD with loader and ESD"));
54e415a8 569 AliError("MayNotUse");
570}
571//____________________________________________________________________
572void
af885e0f 573AliFMDReconstructor::FillESD(AliRunLoader*,AliRawReader*,AliESDEvent*) const
54e415a8 574{
575 // Cannot be used. See member function with same name but with 2
576 // TTree arguments. Make sure you do local reconstrucion
f95a63c4 577 AliFMDDebug(2, ("Calling FillESD with loader, raw reader, and ESD"));
54e415a8 578 AliError("MayNotUse");
579}
580
42403906 581//____________________________________________________________________
582//
583// EOF
584//