From b0f03c34677e72bdb6179760151b12ff32ae3a2d Mon Sep 17 00:00:00 2001 From: hristov Date: Wed, 8 Sep 2004 05:55:08 +0000 Subject: [PATCH] Adding TRD in the combined PID (Yu.Belikov) --- STEER/AliESDComparison.C | 2 + TRD/AliTRDReconstructor.cxx | 12 +++++- TRD/AliTRDpidESD.cxx | 84 +++++++++++++++++++++++++++++++++++++ TRD/AliTRDpidESD.h | 29 +++++++++++++ TRD/TRDrecLinkDef.h | 1 + TRD/libTRDrec.pkg | 1 + 6 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 TRD/AliTRDpidESD.cxx create mode 100644 TRD/AliTRDpidESD.h diff --git a/STEER/AliESDComparison.C b/STEER/AliESDComparison.C index a5202d2debb..8fd54e9df97 100644 --- a/STEER/AliESDComparison.C +++ b/STEER/AliESDComparison.C @@ -151,6 +151,7 @@ Int_t AliESDComparison(const Char_t *dir=".") { UInt_t status=AliESDtrack::kESDpid; status|=AliESDtrack::kITSpid; status|=AliESDtrack::kTPCpid; + status|=AliESDtrack::kTRDpid; status|=AliESDtrack::kTOFpid; if ((t->GetStatus()&status) == status) { @@ -165,6 +166,7 @@ Int_t AliESDComparison(const Char_t *dir=".") { Int_t code=part->GetPdgCode(); Double_t r[10]; t->GetESDpid(r); + //t->GetTRDpid(r); Double_t rcc=0.; Int_t i; diff --git a/TRD/AliTRDReconstructor.cxx b/TRD/AliTRDReconstructor.cxx index 5c3bc6e1bf6..d48f229f9b1 100644 --- a/TRD/AliTRDReconstructor.cxx +++ b/TRD/AliTRDReconstructor.cxx @@ -27,6 +27,7 @@ #include "AliTRDparameter.h" #include "AliTRDclusterizerV1.h" #include "AliTRDtracker.h" +#include "AliTRDpidESD.h" #include @@ -73,8 +74,17 @@ AliTracker* AliTRDReconstructor::CreateTracker(AliRunLoader* runLoader) const //_____________________________________________________________________________ void AliTRDReconstructor::FillESD(AliRunLoader* /*runLoader*/, - AliESD* /*esd*/) const + AliESD* esd) const { +// make PID + + Double_t parTRD[] = { + 187., // Min. Ionizing Particle signal. Check it !!! + 0.23, // relative resolution Check it !!! + 10. // PID range (in sigmas) + }; + AliTRDpidESD trdPID(parTRD); + trdPID.MakePID(esd); } diff --git a/TRD/AliTRDpidESD.cxx b/TRD/AliTRDpidESD.cxx new file mode 100644 index 00000000000..77c6b8b8e96 --- /dev/null +++ b/TRD/AliTRDpidESD.cxx @@ -0,0 +1,84 @@ +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + +//----------------------------------------------------------------- +// Implementation of the TRD PID class +// Very naive one... And the implementation is even poorer... +// Should be made better by the detector experts... +//----------------------------------------------------------------- + +#include "AliTRDpidESD.h" +#include "AliESD.h" +#include "AliESDtrack.h" + +ClassImp(AliTRDpidESD) + +//_________________________________________________________________________ +AliTRDpidESD::AliTRDpidESD(Double_t *param) +{ + // + // The main constructor + // + fMIP=param[0]; // MIP signal + fRes=param[1]; // relative resolution + fRange=param[2]; // PID "range" (in sigmas) +} + +Double_t AliTRDpidESD::Bethe(Double_t bg) { + // + // This is the Bethe-Bloch function normalised to 1 at the minimum + // + Double_t bg2=bg*bg; + Double_t bethe; + if (bg<3.5e1) + bethe=(1.+ bg2)/bg2*(log(5940*bg2) - bg2/(1.+ bg2)); + else // Density effect ( approximately :) + bethe=(1.+ bg2)/bg2*(log(3.5*5940*bg) - bg2/(1.+ bg2)); + return bethe/11.091; +} + +//_________________________________________________________________________ +Int_t AliTRDpidESD::MakePID(AliESD *event) +{ + // + // This function calculates the "detector response" PID probabilities + // + static const Double_t masses[]={ + 0.000511, 0.105658, 0.139570, 0.493677, 0.938272, 1.875613 + }; + Int_t ntrk=event->GetNumberOfTracks(); + for (Int_t i=0; iGetTrack(i); + if ((t->GetStatus()&AliESDtrack::kTRDin)==0) + if ((t->GetStatus()&AliESDtrack::kTRDout)==0) + if ((t->GetStatus()&AliESDtrack::kTRDrefit)==0) continue; + Int_t ns=AliESDtrack::kSPECIES; + Double_t p[10]; + for (Int_t j=0; jGetP(); + Double_t dedx=t->GetTRDsignal()/fMIP; + Double_t bethe=Bethe(mom/mass); + Double_t sigma=fRes*bethe; + if (TMath::Abs(dedx-bethe) > fRange*sigma) { + p[j]=TMath::Exp(-0.5*fRange*fRange)/sigma; + continue; + } + p[j]=TMath::Exp(-0.5*(dedx-bethe)*(dedx-bethe)/(sigma*sigma))/sigma; + } + t->SetTRDpid(p); + } + return 0; +} diff --git a/TRD/AliTRDpidESD.h b/TRD/AliTRDpidESD.h new file mode 100644 index 00000000000..27920459fc1 --- /dev/null +++ b/TRD/AliTRDpidESD.h @@ -0,0 +1,29 @@ +#ifndef ALITRDPIDESD_H +#define ALITRDPIDESD_H +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +//------------------------------------------------------- +// TRD PID class +// A very naive design... And the implementation is even poorer... +// Should be made better by the detector experts... +//------------------------------------------------------- +#include + +class AliESD; + +class AliTRDpidESD { +public: + AliTRDpidESD(Double_t *param); + Int_t MakePID(AliESD *event); + static Double_t Bethe(Double_t bg); +private: + Double_t fMIP; // dEdx for MIP + Double_t fRes; // relative dEdx resolution + Double_t fRange; // one particle type PID range (in sigmas) + ClassDef(AliTRDpidESD,1) // TRD PID class +}; + +#endif + + diff --git a/TRD/TRDrecLinkDef.h b/TRD/TRDrecLinkDef.h index 913e21c80eb..03f8f6f7587 100644 --- a/TRD/TRDrecLinkDef.h +++ b/TRD/TRDrecLinkDef.h @@ -27,6 +27,7 @@ #pragma link C++ class AliTRDpid+; #pragma link C++ class AliTRDpidLQ+; #pragma link C++ class AliTRDPartID+; +#pragma link C++ class AliTRDpidESD+; #pragma link C++ class AliTRDReconstructor+; diff --git a/TRD/libTRDrec.pkg b/TRD/libTRDrec.pkg index bbbeaba22f3..80f12c91a00 100644 --- a/TRD/libTRDrec.pkg +++ b/TRD/libTRDrec.pkg @@ -12,6 +12,7 @@ SRCS= AliTRDpixel.cxx \ AliTRDpid.cxx \ AliTRDpidLQ.cxx \ AliTRDPartID.cxx \ + AliTRDpidESD.cxx \ AliTRDReconstructor.cxx HDRS= $(SRCS:.cxx=.h) -- 2.43.5