From e62c1aea50441c3bce7508f78f3056faf7f91fa5 Mon Sep 17 00:00:00 2001 From: masera Date: Tue, 21 Feb 2006 13:32:11 +0000 Subject: [PATCH] A mechanism to have different PID systems in ITS has been introduced. Conditional probabilities are evaluated via the abstract interface AliITSpidESD. Two different implementations are presently available. The default one (origin: Y. Belikov) has been used so far and it is now implemented in AliITSpidESD1. The second implementation, based on fits with a convolution of Landau+gaussian functions of the specific ionization in each ITS layer as a function of the momentum, is implemented in AliITSpidESD2. To select it, the user must use AliReconstruction::SetOption("ITS","LandauFitPID") --- ITS/AliITSLoader.cxx | 20 ++ ITS/AliITSLoader.h | 12 +- ITS/AliITSPidParItem.cxx | 252 +++++++++++++++++++++++ ITS/AliITSPidParItem.h | 45 +++++ ITS/AliITSPident.cxx | 364 ++++++++++++++++++++++++++++++++++ ITS/AliITSPident.h | 91 +++++++++ ITS/AliITSReconstructor.cxx | 83 ++++++-- ITS/AliITSReconstructor.h | 17 +- ITS/AliITSSteerPid.cxx | 161 +++++++++++++++ ITS/AliITSSteerPid.h | 57 ++++++ ITS/AliITSpidESD.cxx | 45 +---- ITS/AliITSpidESD.h | 16 +- ITS/AliITSpidESD1.cxx | 75 +++++++ ITS/AliITSpidESD1.h | 30 +++ ITS/AliITSpidESD2.cxx | 178 +++++++++++++++++ ITS/AliITSpidESD2.h | 39 ++++ ITS/ITSrecLinkDef.h | 12 +- ITS/farrfitits_clu6_new5.root | Bin 0 -> 64087 bytes ITS/ffitparams_new5.root | Bin 0 -> 6098 bytes ITS/libITSrec.pkg | 5 + 20 files changed, 1426 insertions(+), 76 deletions(-) create mode 100644 ITS/AliITSPidParItem.cxx create mode 100644 ITS/AliITSPidParItem.h create mode 100644 ITS/AliITSPident.cxx create mode 100644 ITS/AliITSPident.h create mode 100644 ITS/AliITSSteerPid.cxx create mode 100644 ITS/AliITSSteerPid.h create mode 100755 ITS/AliITSpidESD1.cxx create mode 100755 ITS/AliITSpidESD1.h create mode 100644 ITS/AliITSpidESD2.cxx create mode 100755 ITS/AliITSpidESD2.h create mode 100644 ITS/farrfitits_clu6_new5.root create mode 100644 ITS/ffitparams_new5.root diff --git a/ITS/AliITSLoader.cxx b/ITS/AliITSLoader.cxx index 8b6aef63363..63ab36069bf 100644 --- a/ITS/AliITSLoader.cxx +++ b/ITS/AliITSLoader.cxx @@ -19,6 +19,7 @@ ClassImp(AliITSLoader) /**********************************************************************/ AliITSLoader::AliITSLoader():AliLoader(){ // Default constructor + fITSpid = 0; } /*********************************************************************/ AliITSLoader::AliITSLoader(const Char_t *name,const Char_t *topfoldername): @@ -57,6 +58,7 @@ AliLoader(name,topfoldername){ fDataLoaders->Add(cascadeDataLoader); cascadeDataLoader->SetEventFolder(fEventFolder); cascadeDataLoader->SetFolder(GetDetectorDataFolder()); + fITSpid=0; } /**********************************************************************/ AliITSLoader::AliITSLoader(const Char_t *name,TFolder *topfolder): @@ -95,7 +97,24 @@ AliLoader(name,topfolder) { fDataLoaders->Add(cascadeDataLoader); cascadeDataLoader->SetEventFolder(fEventFolder); cascadeDataLoader->SetFolder(GetDetectorDataFolder()); + fITSpid=0; } + +//______________________________________________________________________ +AliITSLoader::AliITSLoader(const AliITSLoader &ob) : AliLoader(ob) { + // Copy constructor + // Copies are not allowed. The method is protected to avoid misuse. + Error("AliITSLoader","Copy constructor not allowed\n"); +} + +//______________________________________________________________________ +AliITSLoader& AliITSLoader::operator=(const AliITSLoader& /* ob */){ + // Assignment operator + // Assignment is not allowed. The method is protected to avoid misuse. + Error("= operator","Assignment operator not allowed\n"); + return *this; +} + /**********************************************************************/ AliITSLoader::~AliITSLoader(){ //destructor @@ -119,6 +138,7 @@ AliITSLoader::~AliITSLoader(){ UnloadCascades(); dl = GetCascadeDataLoader(); fDataLoaders->Remove(dl); + if(fITSpid)delete fITSpid; } /* //---------------------------------------------------------------------- diff --git a/ITS/AliITSLoader.h b/ITS/AliITSLoader.h index 93c0282e478..f9c0c106e9a 100644 --- a/ITS/AliITSLoader.h +++ b/ITS/AliITSLoader.h @@ -6,7 +6,7 @@ #include #include #include - +#include class AliITSdigit; class TObjArray; @@ -15,6 +15,9 @@ class AliITSLoader: public AliLoader{ AliITSLoader(); AliITSLoader(const Char_t *name,const Char_t *topfoldername); AliITSLoader(const Char_t *name,TFolder *topfolder); + AliITSLoader(const AliITSLoader &ob); // copy constructor + AliITSLoader& operator=(const AliITSLoader & /* source */); // ass. + virtual ~AliITSLoader(); @@ -108,6 +111,9 @@ class AliITSLoader: public AliLoader{ // Geometry AliITSgeom* GetITSgeom(); + // PID + AliITSpidESD* GetITSpid() const {return fITSpid;} + void AdoptITSpid(AliITSpidESD* pid) {fITSpid=pid;} protected: // METHODS @@ -133,8 +139,8 @@ class AliITSLoader: public AliLoader{ static const TString fgkDefaultVerticesContainerName; //default for primary vertices container name static const TString fgkDefaultV0ContainerName; //default for V0 container name static const TString fgkDefaultCascadeContainerName; //default fo cascade container name - - ClassDef(AliITSLoader,3) // Loader for additional ITS specific trees. + AliITSpidESD* fITSpid; //!pointer for ITS pid + ClassDef(AliITSLoader,4) // Loader for additional ITS specific trees. }; #endif diff --git a/ITS/AliITSPidParItem.cxx b/ITS/AliITSPidParItem.cxx new file mode 100644 index 00000000000..015415527f9 --- /dev/null +++ b/ITS/AliITSPidParItem.cxx @@ -0,0 +1,252 @@ +///////////////////////////////////////////////////////// +//Class for PID in the ITS // +// // +// // +///////////////////////////////////////////////////////// + +#include +#include +#include "AliITSPidParItem.h" + +ClassImp(AliITSPidParItem) +//____________________________________________________________________ +AliITSPidParItem::AliITSPidParItem(){ + // default constructor + fPCenter=0; + fPWidth=0; + for(Int_t i=0;i<39;i++){ + fBuff[i]=0; + } +}//____________________________________________________________________ +AliITSPidParItem::AliITSPidParItem(Float_t center,Float_t width,Double_t *buff){ + // standard constructor + fPCenter=center; + fPWidth=width; + for (Int_t i=0;i<39;i++) fBuff[i]=buff[i]; + +} + +//____________________________________________________________________ +void AliITSPidParItem::GetParameters(Double_t *buff) const{ + //get all the parameters + for (Int_t i=0;i<39;i++) buff[i]=fBuff[i]; + +} +//____________________________________________________________________ +void AliITSPidParItem::GetProtonPar(Double_t *buffp) const{ + //get the protons' parameters (Width Landau, Most Probable, Area, Width Gaussian, Chi2 fit, NDF fit, Integral fit) + buffp[0]=fBuff[0]; + buffp[1]=fBuff[1]; + buffp[2]=fBuff[2]; + buffp[3]=fBuff[3]; + buffp[4]=fBuff[8]; + buffp[5]=fBuff[9]; + buffp[6]=fBuff[10]; +} +//____________________________________________________________________ +void AliITSPidParItem::GetKaonPar(Double_t *buffk) const{ + //get the kaons' parameters (Width Landau, Most Probable, Area, Width Gaussian, Chi2 fit, NDF fit, Integral fit) + buffk[0]=fBuff[13]; + buffk[1]=fBuff[14]; + buffk[2]=fBuff[15]; + buffk[3]=fBuff[16]; + buffk[4]=fBuff[21]; + buffk[5]=fBuff[22]; + buffk[6]=fBuff[23]; +} +//____________________________________________________________________ +void AliITSPidParItem::GetPionPar(Double_t *buffpi) const{ + //get the pions' parameters (Width Landau, Most Probable, Area, Width Gaussian, Chi2 fit, NDF fit, Integral fit) + buffpi[0]=fBuff[26]; + buffpi[1]=fBuff[27]; + buffpi[2]=fBuff[28]; + buffpi[3]=fBuff[29]; + buffpi[4]=fBuff[34]; + buffpi[5]=fBuff[35]; + buffpi[6]=fBuff[36]; +} +//____________________________________________________________________ +void AliITSPidParItem::GetPar0(Double_t *buff0) const{ + //Width Landau for protons, kaons, pions. + buff0[0]=fBuff[0]; + buff0[1]=fBuff[13]; + buff0[2]=fBuff[26]; +} +//____________________________________________________________________ +void AliITSPidParItem::GetPar1(Double_t *buff1) const{ + //Most Probable for protons, kaons, pions. + buff1[0]=fBuff[1]; + buff1[1]=fBuff[14]; + buff1[2]=fBuff[27]; +} +//____________________________________________________________________ +void AliITSPidParItem::GetPar2(Double_t *buff2) const{ + //Area for protons, kaons, pions. + buff2[0]=fBuff[2]; + buff2[1]=fBuff[15]; + buff2[2]=fBuff[28]; +} +//____________________________________________________________________ +void AliITSPidParItem::GetPar3(Double_t *buff3) const{ + //Width Gaussian for protons, kaons, pions. + buff3[0]=fBuff[3]; + buff3[1]=fBuff[16]; + buff3[2]=fBuff[29]; +} +//____________________________________________________________________ +void AliITSPidParItem::GetChisquare(Double_t *buffchi) const{ + //Chi2 of the fit for protons, kaons, pions. + buffchi[0]=fBuff[8]; + buffchi[1]=fBuff[21]; + buffchi[2]=fBuff[34]; +} +//____________________________________________________________________ +void AliITSPidParItem::GetNDF(Double_t *buffndf) const{ + //NDF of the fit for protons, kaons, pions. + buffndf[0]=fBuff[9]; + buffndf[1]=fBuff[22]; + buffndf[2]=fBuff[35]; +} +//____________________________________________________________________ +void AliITSPidParItem::GetProParFun(Double_t *pfun) const{ + //some Protons parameters: Width Landau, Most Probable, Area, Width Gaussian, Integral fit + pfun[0]=fBuff[0]; + pfun[1]=fBuff[1]; + pfun[2]=fBuff[2]; + pfun[3]=fBuff[3]; + pfun[4]=fBuff[10]; +} +//____________________________________________________________________ +void AliITSPidParItem::GetKaoParFun(Double_t *kfun) const{ + //some Kaons parameters: Width Landau, Most Probable, Area, Width Gaussian, Integral fit + kfun[0]=fBuff[13]; + kfun[1]=fBuff[14]; + kfun[2]=fBuff[15]; + kfun[3]=fBuff[16]; + kfun[4]=fBuff[23]; +} +//____________________________________________________________________ +void AliITSPidParItem::GetPiParFun(Double_t *pifun) const{ + //some Pions parameters: Width Landau, Most Probable, Area, Width Gaussian, Integral fit + pifun[0]=fBuff[26]; + pifun[1]=fBuff[27]; + pifun[2]=fBuff[28]; + pifun[3]=fBuff[29]; + pifun[4]=fBuff[36]; +} +//____________________________________________________________________ +void AliITSPidParItem::GetRangeLim(Double_t *range) const{ + //Range limits for the response functions + range[0]=fBuff[11];//proton low + range[1]=fBuff[12];//proton high + range[2]=fBuff[24];//kaon low + range[3]=fBuff[25];//kaon high + range[4]=fBuff[37];//pion low + range[5]=fBuff[38];//pion high +} +//____________________________________________________________________ +void AliITSPidParItem::GetProtonParErr(Double_t *bufferp)const{ + //errors on the protons' parameters + bufferp[0]=fBuff[4]; + bufferp[1]=fBuff[5]; + bufferp[2]=fBuff[6]; + bufferp[3]=fBuff[7]; +} +//____________________________________________________________________ +void AliITSPidParItem::GetKaonParErr(Double_t *bufferk)const{ + //errors on the kaons' parameters + bufferk[0]=fBuff[17]; + bufferk[1]=fBuff[18]; + bufferk[2]=fBuff[19]; + bufferk[3]=fBuff[20]; +} +//____________________________________________________________________ +void AliITSPidParItem::GetPionParErr(Double_t *bufferpi)const{ + //errors on the pions' parameters + bufferpi[0]=fBuff[30]; + bufferpi[1]=fBuff[31]; + bufferpi[2]=fBuff[32]; + bufferpi[3]=fBuff[33]; +} +//____________________________________________________________________ +void AliITSPidParItem::PrintParameters() const { + // Prints the data members of this class +cout<<"==============================***************"<GetParFitLayer(la,fMom,parp,park,parpi); + // cout<<"lay = "<prob "<prob "<prob "<GetExternalParameters(xr,par); + if (par[4]!=0) { + Float_t lamb=TMath::ATan(par[3]); + fMom=1/(TMath::Abs(par[4])*TMath::Cos(lamb)); + } + + fInvPt=par[4]; + + for(Int_t la=0;la<4;la++){//loop on layers + Double_t parp[3];Double_t park[3];Double_t parpi[3]; + sp->GetParFitLayer(la,fMom,parp,park,parpi); + Double_t range[8]; + range[0]=0.3*parp[1]; + range[1]=2.*parp[1]; + + range[2]=0.3*park[1]; + range[3]=2.*park[1]; + + range[4]=0.3*parpi[1]; + range[5]=2.*parpi[1]; + CookFunItsLay(la,0,parp,Qlay[la],fMom,range[0],range[1],"fPro"); + CookFunItsLay(la,1,park,Qlay[la],fMom,range[2],range[3],"fKao"); + CookFunItsLay(la,2,parpi,Qlay[la],fMom,range[4],range[5],"fPi"); + } + fPPriorip=priorip; + fPPriorik=priorik; + fPPrioripi=prioripi; + fPPriorie=priorie; + + + Float_t prior[4];Double_t condFun[4][3]; + + prior[0]=fPPriorip; + prior[1]=fPPriorik; + prior[2]=fPPrioripi; + prior[3]=fPPriorie; + for(Int_t la=0;la<4;la++){ + condFun[la][0]= fCondFunProLay[la]; + condFun[la][1]= fCondFunKLay[la]; + condFun[la][2]= fCondFunPiLay[la]; + + } + + cout<<"PROTONS"<prob "<prob "<prob "<GetdEdx(); + +} +//_______________________________________________________________________ +void AliITSPident::PrintParameters() const{ + //print parameters + cout<<"___________________________\n"; + cout<<"Track Local Momentum = "<<" "< +#include +#include +#include +#include "AliITSPidParItem.h" +#include "AliITSSteerPid.h" +class AliITSPident : public TObject{ + + public: + AliITSPident(); + AliITSPident(Double_t mom,Double_t invPt,Double_t dEdx,AliITSSteerPid *sp,Float_t *Qlay,Float_t priorip=0.066,Float_t priorik=0.103,Float_t prioripi=0.83,Float_t priorie=0.001); + + AliITSPident(AliITStrackV2 *trackITS,AliITSSteerPid *sp,Float_t *Qlay,Float_t priorip=0.066,Float_t priorik=0.103,Float_t prioripi=0.83,Float_t priorie=0.001); + + virtual ~AliITSPident(); + Float_t GetP() const {return fMom;}//local momentum (GeV/c) + Double_t GetdEdx() const {return fdEdx;} //dEdx (ADC units) + Double_t GetCondFunPro(Int_t lay) const { + return fCondFunProLay[lay]; + } + Double_t GetProdCondFunPro() const { + Double_t rv=1.; for(Int_t i=0;i<4;i++)rv*=GetCondFunPro(i); + return rv; + } + Double_t GetCondFunK(Int_t lay) const { + return fCondFunKLay[lay]; + } + Double_t GetProdCondFunK() const { + Double_t rv=1.; for(Int_t i=0;i<4;i++)rv*=GetCondFunK(i); + return rv; + } + Double_t GetCondFunPi(Int_t lay) const { + return fCondFunPiLay[lay]; + } + Double_t GetProdCondFunPi() const { + Double_t rv=1.; for(Int_t i=0;i<4;i++)rv*=GetCondFunPi(i); + return rv; + } + Float_t GetInvPt() const {return fInvPt;} + void PrintParameters() const; + Float_t GetPBayesp()const {return fPBayesp;} + Float_t GetPBayesk()const {return fPBayesk;} + Float_t GetPBayespi()const {return fPBayespi;} + Float_t GetPPriorip() const {return fPPriorip;} + Float_t GetPPriorik() const {return fPPriorik;} + Float_t GetPPrioripi() const {return fPPrioripi;} + Float_t GetPPriorie() const {return fPPriorie;} + + static Double_t Langaufun(Double_t *x, Double_t *par); + static Double_t Langaufun2(Double_t *x, Double_t *par); + static Double_t Langaufunnorm(Double_t *x, Double_t *par); + static Double_t Gaus2(Double_t *x, Double_t *par); + + private: + + void CookFunItsLay(Int_t lay,Int_t opt,Double_t *par,Double_t dedx,Double_t mom,Double_t rangei,Double_t rangef,TString comment); + void CookBayes(Double_t *condfun,Float_t *prior); + Float_t CookCombinedBayes(Double_t condfun[][3],Float_t *prior,Int_t part)const; + Float_t CookProd(Double_t condfun[][3],Int_t part) const; + Float_t CookSum(Double_t condfun[][3],Float_t *prior) const; + AliITSPident(const AliITSPident &ob); // copy constructor + AliITSPident& operator=(const AliITSPident & /* source */); // ass. op. + + Float_t fMom; // Particle momentum + Double_t fdEdx; // Particle dE/dx + Double_t fCondFunProLay[4]; // one for each silicon layer + Double_t fCondFunKLay[4]; // cond. prob. function kaons per layer + Double_t fCondFunPiLay[4]; // cond. prob. function pions per layer + Float_t fPBayesp; // Bayes prob. + Float_t fPBayesk; // Bayes prob. for kaons + Float_t fPBayespi; // Bayes prob. for pions + Float_t fPPriorip; // Priori prob. + Float_t fPPriorik; // Priori prob. for kaons + Float_t fPPrioripi; // Priori prob. for pions + Float_t fPPriorie; // Priori prob. for electrons + Float_t fInvPt; // Particle Inverse Transverse momentum + + ClassDef(AliITSPident,1); +}; +#endif diff --git a/ITS/AliITSReconstructor.cxx b/ITS/AliITSReconstructor.cxx index 79ff1976723..cee6b58ff0c 100644 --- a/ITS/AliITSReconstructor.cxx +++ b/ITS/AliITSReconstructor.cxx @@ -21,7 +21,7 @@ // // /////////////////////////////////////////////////////////////////////////////// - +#include "Riostream.h" #include "AliITSReconstructor.h" #include "AliRunLoader.h" #include "AliRawReader.h" @@ -35,20 +35,44 @@ #include "AliITSVertexerZ.h" #include "AliESD.h" #include "AliITSpidESD.h" +#include "AliITSpidESD1.h" +#include "AliITSpidESD2.h" #include "AliV0vertexer.h" #include "AliCascadeVertexer.h" ClassImp(AliITSReconstructor) - - +//___________________________________________________________________________ +AliITSReconstructor::AliITSReconstructor() : AliReconstructor(){ + // Default constructor + fItsPID=0; +} + //___________________________________________________________________________ +AliITSReconstructor::~AliITSReconstructor(){ +// destructor + delete fItsPID; +} +//______________________________________________________________________ +AliITSReconstructor::AliITSReconstructor(const AliITSReconstructor &ob) :AliReconstructor(ob) { + // Copy constructor + // Copies are not allowed. The method is protected to avoid misuse. + Error("AliITSpidESD2","Copy constructor not allowed\n"); +} + +//______________________________________________________________________ +AliITSReconstructor& AliITSReconstructor::operator=(const AliITSReconstructor& /* ob */){ + // Assignment operator + // Assignment is not allowed. The method is protected to avoid misuse. + Error("= operator","Assignment operator not allowed\n"); + return *this; +} //_____________________________________________________________________________ void AliITSReconstructor::Reconstruct(AliRunLoader* runLoader) const { // reconstruct clusters - AliLoader* loader = runLoader->GetLoader("ITSLoader"); + AliITSLoader *loader = (AliITSLoader *)runLoader->GetLoader("ITSLoader"); if (!loader) { Error("Reconstruct", "ITS loader not found"); return; @@ -92,7 +116,7 @@ void AliITSReconstructor::Reconstruct(AliRunLoader* runLoader, { // reconstruct clusters from raw data - AliITSLoader* loader = (AliITSLoader*)runLoader->GetLoader("ITSLoader"); + AliITSLoader *loader = (AliITSLoader*)runLoader->GetLoader("ITSLoader"); if (!loader) { Error("Reconstruct", "ITS loader not found"); return; @@ -122,17 +146,34 @@ void AliITSReconstructor::Reconstruct(AliRunLoader* runLoader, } //_____________________________________________________________________________ -AliTracker* AliITSReconstructor::CreateTracker(AliRunLoader* runLoader) const +AliTracker* AliITSReconstructor::CreateTracker(AliRunLoader* runLoader)const { // create a ITS tracker AliITSgeom* geom = GetITSgeom(runLoader); TString selectedTracker = GetOption(); - if (selectedTracker.Contains("MI")) return new AliITStrackerMI(geom); - return new AliITStrackerSA(geom); - + AliTracker* tracker; + if (selectedTracker.Contains("MI")) { + tracker = new AliITStrackerMI(geom); + } + else { + tracker = new AliITStrackerSA(geom); // inherits from AliITStrackerMI + } + TString selectedPIDmethod = GetOption(); + AliITSLoader *loader = (AliITSLoader*)runLoader->GetLoader("ITSLoader"); + if (!loader) { + Error("CreateTracker", "ITS loader not found"); + } + if(selectedPIDmethod.Contains("LandauFitPID")){ + loader->AdoptITSpid(new AliITSpidESD2((AliITStrackerMI*)tracker,loader)); + } + else{ + Double_t parITS[] = {34., 0.15, 10.}; + loader->AdoptITSpid(new AliITSpidESD1(parITS)); + } + return tracker; } @@ -161,15 +202,25 @@ AliVertexer* AliITSReconstructor::CreateVertexer(AliRunLoader* /*runLoader*/) co } //_____________________________________________________________________________ -void AliITSReconstructor::FillESD(AliRunLoader* /*runLoader*/, +void AliITSReconstructor::FillESD(AliRunLoader* runLoader, AliESD* esd) const { -// make PID, find V0s and cascades - - Double_t parITS[] = {34., 0.15, 10.}; - AliITSpidESD itsPID(parITS); - itsPID.MakePID(esd); - +// make PID, find V0s and cascade + AliITSLoader *loader = (AliITSLoader*)runLoader->GetLoader("ITSLoader"); + AliITSpidESD *pidESD = 0; + TString selectedPIDmethod = GetOption(); + if(selectedPIDmethod.Contains("LandauFitPID")){ + pidESD=loader->GetITSpid(); + } + else{ + pidESD=loader->GetITSpid(); + } + if(pidESD!=0){ + pidESD->MakePID(esd); + } + else { + Error("FillESD","!! cannot do the PID !!\n"); + } // V0 finding Double_t cuts[]={33, // max. allowed chi2 0.16,// min. allowed negative daughter's impact parameter diff --git a/ITS/AliITSReconstructor.h b/ITS/AliITSReconstructor.h index b0fc82919e8..7efb77049a5 100644 --- a/ITS/AliITSReconstructor.h +++ b/ITS/AliITSReconstructor.h @@ -13,12 +13,17 @@ #include "AliReconstructor.h" class AliITSgeom; - +class AliLoader; +class AliTracker; +class AliITStrackerMI; +class AliITSpidESD; class AliITSReconstructor: public AliReconstructor { public: - AliITSReconstructor(): AliReconstructor() {}; - virtual ~AliITSReconstructor() {}; + AliITSReconstructor(); + virtual ~AliITSReconstructor(); + AliITSReconstructor(const AliITSReconstructor &ob); // copy constructor + AliITSReconstructor& operator=(const AliITSReconstructor & /* source */); // ass. op. virtual void Reconstruct(AliRunLoader* runLoader) const; virtual void Reconstruct(AliRunLoader* runLoader, @@ -43,9 +48,11 @@ public: {AliReconstructor::FillESD(runLoader,rawReader, esd);} private: + // methods AliITSgeom* GetITSgeom(AliRunLoader* runLoader) const; - - ClassDef(AliITSReconstructor, 0) // class for the ITS reconstruction + //data + AliITSpidESD *fItsPID; //Pid for ITS + ClassDef(AliITSReconstructor, 1) // class for the ITS reconstruction }; #endif diff --git a/ITS/AliITSSteerPid.cxx b/ITS/AliITSSteerPid.cxx new file mode 100644 index 00000000000..ed4f7b8f190 --- /dev/null +++ b/ITS/AliITSSteerPid.cxx @@ -0,0 +1,161 @@ +///////////////////////////////////////////////////////////////////////// +//Steering Class for PID in the ITS // +//The PID is based on the likelihood of all the four ITS' layers, // +//without using the truncated mean for the dE/dx. The response // +//functions for each layer are convoluted Landau-Gaussian functions. // +// Origin: Elena Bruna bruna@to.infn.it, Massimo Masera masera@to.infn.it// +///////////////////////////////////////////////////////////////////////// + +#include "AliITSSteerPid.h" + +ClassImp(AliITSSteerPid) + + //______________________________________________________________ + AliITSSteerPid::AliITSSteerPid(){ + // default constructor + fClonarr2=0; + fVect2=0; + fItem=0; + fFitTree=0; +} +//______________________________________________________________ +AliITSSteerPid::~AliITSSteerPid(){ + // destructor + delete fClonarr2; + delete fFitTree; +} + +//______________________________________________________________________ +AliITSSteerPid::AliITSSteerPid(const AliITSSteerPid &ob) :TObject(ob) { + // Copy constructor + // Copies are not allowed. The method is protected to avoid misuse. + Error("AliITSSteerPid","Copy constructor not allowed\n"); +} + +//______________________________________________________________________ +AliITSSteerPid& AliITSSteerPid::operator=(const AliITSSteerPid& /* ob */){ + // Assignment operator + // Assignment is not allowed. The method is protected to avoid misuse. + Error("= operator","Assignment operator not allowed\n"); + return *this; +} + +//______________________________________________________________ +void AliITSSteerPid::InitLayer(TString fileITS,TString fileFitPar){ + // it opens the files useful for the PID + printf("££££ InitLayer.....\n"); + TFile *fClonarr2=new TFile (fileITS,"r"); + fVect2=(TClonesArray*)fClonarr2->Get("vectfitits_0");//truncated mean + fVect2lay1=(TClonesArray*)fClonarr2->Get("vectfitits_1");//lay 1 + fVect2lay2=(TClonesArray*)fClonarr2->Get("vectfitits_2");//lay 2 + fVect2lay3=(TClonesArray*)fClonarr2->Get("vectfitits_3");//lay 3 + fVect2lay4=(TClonesArray*)fClonarr2->Get("vectfitits_4");//lay 4 + + TFile *fFitPar=new TFile (fileFitPar); + fFitTree=(TTree*)fFitPar->Get("tree"); + + printf("££££ InitLayer.....DONE \n"); +} + +//______________________________________________________________ +AliITSPidParItem* AliITSSteerPid::GetItemLayer(Int_t nolay,Float_t mom){ + // it gives an AliITSPidParItem object for a given momentum and ITS layer + if(nolay==1) return Item(fVect2lay1,mom); + if(nolay==2) return Item(fVect2lay2,mom); + if(nolay==3) return Item(fVect2lay3,mom); + if(nolay==4) return Item(fVect2lay4,mom); + if(nolay!=1&&nolay!=2&&nolay!=3&&nolay!=4) { + fItem=new AliITSPidParItem(); + return fItem; + + } + return 0; +} + +//______________________________________________________________ +void AliITSSteerPid::GetParFitLayer(Int_t nolay,Float_t mom,Double_t *parp,Double_t *park,Double_t *parpi){ + //it gives the parameters of the convoluted functions (WL, MP, WG) for protons, kaons and pions for a given momentum and ITS layer + + Double_t parfit0pro[3]={0,0,0}; + Double_t parfit1pro[3]={0,0,0}; + Double_t parfit3pro[3]={0,0,0}; + Double_t parfit0kao[3]={0,0,0}; + Double_t parfit1kao[3]={0,0,0}; + Double_t parfit3kao[3]={0,0,0}; + Double_t parfit0pi[3]={0,0,0}; + Double_t parfit1pi[3]={0,0,0}; + Double_t parfit3pi[3]={0,0,0}; + + fFitTree->SetBranchAddress("par0pro",parfit0pro); + fFitTree->SetBranchAddress("par1pro",parfit1pro); + fFitTree->SetBranchAddress("par3pro",parfit3pro); + + fFitTree->SetBranchAddress("par0kao",parfit0kao); + fFitTree->SetBranchAddress("par1kao",parfit1kao); + fFitTree->SetBranchAddress("par3kao",parfit3kao); + + fFitTree->SetBranchAddress("par0pi",parfit0pi); + fFitTree->SetBranchAddress("par1pi",parfit1pi); + fFitTree->SetBranchAddress("par3pi",parfit3pi); + fFitTree->GetEvent(nolay); + + GetLangausProPars(mom,parfit0pro,parfit1pro,parfit3pro,parp); + GetLangausKaoPars(mom,parfit0kao,parfit1kao,parfit3kao,park); + GetLangausPiPars(mom,parfit0pi,parfit1pi,parfit3pi,parpi); + + +}//______________________________________________________________ +void AliITSSteerPid::GetLangausProPars(Float_t mom,Double_t *parfit0,Double_t *parfit1,Double_t *parfit3,Double_t *par){ + + //It finds the parameters of the convoluted Landau-Gaussian response function for protons (Width Landau, Most Probable, Width Gaussian) + par[0]=parfit0[0]+parfit0[1]/mom; + par[1]=parfit1[0]/(mom*mom)+parfit1[1]/(mom*mom)*TMath::Log(mom*mom)+parfit1[2]; + par[2]=parfit3[0]/(mom*mom)+parfit3[1]/(mom*mom)*TMath::Log(mom*mom)+parfit3[2]; +} +//______________________________________________________________ +void AliITSSteerPid::GetLangausKaoPars(Float_t mom,Double_t *parfit0,Double_t *parfit1,Double_t *parfit3,Double_t *par){ + // It finds the parameters of the convoluted Landau-Gaussian response function for kaons (Width Landau, Most Probable, Width Gaussian) + + par[0]=parfit0[0]+parfit0[1]/(mom*mom); + par[1]=parfit1[0]/(mom*mom)+parfit1[1]/(mom*mom)*TMath::Log(mom*mom)+parfit1[2]; + par[2]=parfit3[0]/(mom*mom)+parfit3[1]/(mom*mom)*TMath::Log(mom*mom)+parfit3[2]; +} + +//______________________________________________________________ +void AliITSSteerPid::GetLangausPiPars(Float_t mom,Double_t *parfit0,Double_t *parfit1,Double_t *parfit3,Double_t *par){ + //It finds the parameters of the convoluted Landau-Gaussian response function for pions (Width Landau, Most Probable, Width Gaussian) + + par[0]=parfit0[0]/(mom*mom)+parfit0[1]/(mom*mom)*TMath::Log(mom*mom)+parfit0[2]; + par[1]=parfit1[0]/(mom)+parfit1[1]/(mom)*TMath::Log(mom*mom)+parfit1[2]; + par[2]=parfit3[0]/(mom*mom)+parfit3[1]/(mom*mom)*TMath::Log(mom*mom)+parfit3[2]; +} + + + +//______________________________________________________________ +AliITSPidParItem* AliITSSteerPid::Item(TClonesArray *Vect,Float_t mom){ + + //it gives an AliITSPidParItem object taken from the TClonesArray. + Int_t mybin=-1; + + AliITSPidParItem* punt; + + for (Int_t a=0;a<50;a++){ + punt=(AliITSPidParItem*)Vect->At(a); + Float_t centerp=punt->GetMomentumCenter(); + Float_t widthp=punt->GetWidthMom(); + if (mom>(centerp-widthp/2) && mom<=(centerp+widthp/2)) mybin=a; + } + if (mybin!=-1) fItem=(AliITSPidParItem*)Vect->At(mybin); + else { + fPCenter=0; + fPWidth=0; + for (Int_t ii=0;ii<52;ii++) fBuff[ii]=0; + fItem = new AliITSPidParItem(fPCenter,fPWidth,fBuff); + } + + return fItem; + + + +} diff --git a/ITS/AliITSSteerPid.h b/ITS/AliITSSteerPid.h new file mode 100644 index 00000000000..c4b4fa42d79 --- /dev/null +++ b/ITS/AliITSSteerPid.h @@ -0,0 +1,57 @@ +#ifndef AliITSSTEERPID_H +#define AliITSSTEERPID_H +//////////////////////////////////////////////////////////////////////// +//Steering lass for PID in ITS // +//The PID is based on the likelihood of all the four ITS' layers, // +//without using the truncated mean for the dE/dx. The response // +//functions for each layer are convoluted Landau-Gaussian functions. // +//Origin: Elena Bruna bruna@to.infn.it, Massimo Masera masera@to.infn.it// +//////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include "AliITSPidParItem.h" + + +class AliITSSteerPid : public TObject{ + + public: + AliITSSteerPid(); + virtual ~AliITSSteerPid(); + void InitLayer(TString fileITS="$ALICE_ROOT/ITS/farrfitits_clu6_new5.root",TString fileFitPar="$ALICE_ROOT/ITS/ffitparams_new5.root"); + + AliITSPidParItem* GetItemLayer(Int_t nolay,Float_t mom); + void GetParFitLayer(Int_t nolay,Float_t mom,Double_t *parp,Double_t *park,Double_t *parpi); + static void GetLangausProPars(Float_t mom,Double_t *parfit0,Double_t *parfit1,Double_t *parfit3,Double_t *par); + static void GetLangausKaoPars(Float_t mom,Double_t *parfit0,Double_t *parfit1,Double_t *parfit3,Double_t *par); + static void GetLangausPiPars(Float_t mom,Double_t *parfit0,Double_t *parfit1,Double_t *parfit3,Double_t *par); + + + private: + + AliITSPidParItem* Item(TClonesArray *Vect,Float_t mom); + AliITSSteerPid(const AliITSSteerPid &ob); // copy constructor + AliITSSteerPid& operator=(const AliITSSteerPid & /* source */); // ass. op. + + + TFile *fClonarr2; // file of TClones Array + TClonesArray *fVect2; // TClonesArray fVect + TClonesArray *fVect2lay1; // TClonesArray for layer 1 (SDD1) + TClonesArray *fVect2lay2; // TClonesArray for layer 2 (SDD2) + TClonesArray *fVect2lay3; // TClonesArray for layer 3 (SSD1) + TClonesArray *fVect2lay4; // TClonesArray for layer 4 (SSD2) + TTree* fFitTree; // tree + AliITSPidParItem *fItem; //element of TClonesArray of interest + Float_t fPCenter; //value for center + Float_t fPWidth; //value for width + Double_t fBuff[52]; //array for + + + ClassDef(AliITSSteerPid,1); + + +}; +#endif diff --git a/ITS/AliITSpidESD.cxx b/ITS/AliITSpidESD.cxx index 17cc81b992e..141c86307d6 100644 --- a/ITS/AliITSpidESD.cxx +++ b/ITS/AliITSpidESD.cxx @@ -20,22 +20,16 @@ //----------------------------------------------------------------- #include "AliITSpidESD.h" -#include "AliESD.h" #include "AliESDtrack.h" ClassImp(AliITSpidESD) -//_________________________________________________________________________ -AliITSpidESD::AliITSpidESD(Double_t *param) -{ - // - // The main constructor - // - fMIP=param[0]; - fRes=param[1]; - fRange=param[2]; -} +//______________________________________________________________________ +AliITSpidESD::AliITSpidESD():TObject(){ + //Default constructor + +} Double_t AliITSpidESD::Bethe(Double_t bg) { // // This is the Bethe-Bloch function normalised to 1 at the minimum @@ -49,32 +43,3 @@ Double_t AliITSpidESD::Bethe(Double_t bg) { return bethe/11.091; } -//_________________________________________________________________________ -Int_t AliITSpidESD::MakePID(AliESD *event) -{ - // - // This function calculates the "detector response" PID probabilities - // - Int_t ntrk=event->GetNumberOfTracks(); - for (Int_t i=0; iGetTrack(i); - if ((t->GetStatus()&AliESDtrack::kITSin )==0) - if ((t->GetStatus()&AliESDtrack::kITSout)==0) continue; - Double_t mom=t->GetP(); - Double_t dedx=t->GetITSsignal()/fMIP; - Int_t ns=AliPID::kSPECIES; - Double_t p[10]; - for (Int_t j=0; j 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->SetITSpid(p); - } - return 0; -} diff --git a/ITS/AliITSpidESD.h b/ITS/AliITSpidESD.h index 31bc2928e4c..2d17140ef2f 100644 --- a/ITS/AliITSpidESD.h +++ b/ITS/AliITSpidESD.h @@ -5,23 +5,21 @@ //------------------------------------------------------- // ITS PID class -// A very naive design... Should be made better by the detector experts... -// Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch +// Base class: +// See the implementations AliITSpidESD1 and AliITSpidESD2 //------------------------------------------------------- -#include +//#include +#include class AliESD; -class AliITSpidESD { +class AliITSpidESD : public TObject { public: - AliITSpidESD(Double_t *param); + AliITSpidESD(); virtual ~AliITSpidESD() {} - Int_t MakePID(AliESD *event); + virtual Int_t MakePID(AliESD *event) =0; 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(AliITSpidESD,1) // ITS PID class }; diff --git a/ITS/AliITSpidESD1.cxx b/ITS/AliITSpidESD1.cxx new file mode 100755 index 00000000000..7a3cb0d2ecb --- /dev/null +++ b/ITS/AliITSpidESD1.cxx @@ -0,0 +1,75 @@ +/************************************************************************** + * Copyright(c) 2005-2007, 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. * + **************************************************************************/ + +//----------------------------------------------------------------- +// ITS PID method # 1 +// Implementation of the ITS PID class +// Very naive one... Should be made better by the detector experts... +// Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch +//----------------------------------------------------------------- +#include "AliITSpidESD.h" +#include "AliITSpidESD1.h" +#include "AliESD.h" +#include "AliESDtrack.h" + +ClassImp(AliITSpidESD1) + +AliITSpidESD1::AliITSpidESD1(): AliITSpidESD() { + //Default constructor + fMIP=0; + fRes=0; + fRange=0; +} +//_________________________________________________________________________ +AliITSpidESD1::AliITSpidESD1(Double_t *param): AliITSpidESD() +{ + // + // The main constructor + // + fMIP=param[0]; + fRes=param[1]; + fRange=param[2]; +} + + +//_________________________________________________________________________ +Int_t AliITSpidESD1::MakePID(AliESD *event) +{ + // + // This function calculates the "detector response" PID probabilities + // + Int_t ntrk=event->GetNumberOfTracks(); + for (Int_t i=0; iGetTrack(i); + if ((t->GetStatus()&AliESDtrack::kITSin )==0) + if ((t->GetStatus()&AliESDtrack::kITSout)==0) continue; + Double_t mom=t->GetP(); + Double_t dedx=t->GetITSsignal()/fMIP; + Int_t ns=AliPID::kSPECIES; + Double_t p[10]; + for (Int_t j=0; j 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->SetITSpid(p); + } + return 0; +} diff --git a/ITS/AliITSpidESD1.h b/ITS/AliITSpidESD1.h new file mode 100755 index 00000000000..68e3ae58c29 --- /dev/null +++ b/ITS/AliITSpidESD1.h @@ -0,0 +1,30 @@ +#ifndef ALIITSPIDESD1_H +#define ALIITSPIDESD1_H +/* Copyright(c) 2005-2007, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +//------------------------------------------------------- +// PID method # 1 +// ITS PID class +// A very naive design... Should be made better by the detector experts... +// Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch +//------------------------------------------------------- +#include "AliITSpidESD.h" + + +class AliITSpidESD1 : public AliITSpidESD { +public: + AliITSpidESD1(); + AliITSpidESD1(Double_t *param); + virtual ~AliITSpidESD1() {} + virtual Int_t MakePID(AliESD *event); + +private: + Double_t fMIP; // dEdx for MIP + Double_t fRes; // relative dEdx resolution + Double_t fRange; // one particle type PID range (in sigmas) + ClassDef(AliITSpidESD1,1) // ITS PID class +}; + +#endif + diff --git a/ITS/AliITSpidESD2.cxx b/ITS/AliITSpidESD2.cxx new file mode 100644 index 00000000000..1236f40191f --- /dev/null +++ b/ITS/AliITSpidESD2.cxx @@ -0,0 +1,178 @@ +/************************************************************************** + * Copyright(c) 2005-2007, 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. * + **************************************************************************/ + +//-----------------------------------------------------------------------// +// ITS PID class --- method # 2 // +// // +// // +//The PID is based on the likelihood of all the four ITS' layers, // +//without using the truncated mean for the dE/dx. The response // +//functions for each layer are convoluted Landau-Gaussian functions. // +// Origin: Elena Bruna bruna@to.infn.it, Massimo Masera masera@to.infn.it// +//-----------------------------------------------------------------------// + +#include "AliITSpidESD2.h" +#include "AliESD.h" +#include "AliESDtrack.h" +#include "AliITStrackV2.h" +#include "AliITSclusterV2.h" +#include "AliITStrackerMI.h" +#include "AliITSLoader.h" +#include "AliITSPident.h" +#include "AliITSSteerPid.h" +#include "AliLog.h" + +ClassImp(AliITSpidESD2) +//_________________________________________________________________________ +AliITSpidESD2::AliITSpidESD2():AliITSpidESD() +{ // + // The main constructor + fTracker=0; + fLoader=0; + fSp=0; +} +//_________________________________________________________________________ +AliITSpidESD2::AliITSpidESD2(AliITStrackerMI* tracker,AliITSLoader* loader):AliITSpidESD() +{ // + // The main constructor + fTracker=tracker; + fLoader=loader; + fSp=new AliITSSteerPid(); + fSp->InitLayer(); +} +//_________________________________________________________________________ +AliITSpidESD2::~AliITSpidESD2(){ + //destructor + + if(fSp)delete fSp; + +} +//______________________________________________________________________ +AliITSpidESD2::AliITSpidESD2(const AliITSpidESD2 &ob) :AliITSpidESD(ob) { + // Copy constructor + // Copies are not allowed. The method is protected to avoid misuse. + Error("AliITSpidESD2","Copy constructor not allowed\n"); +} + +//______________________________________________________________________ +AliITSpidESD2& AliITSpidESD2::operator=(const AliITSpidESD2& /* ob */){ + // Assignment operator + // Assignment is not allowed. The method is protected to avoid misuse. + Error("= operator","Assignment operator not allowed\n"); + return *this; +} + +//_________________________________________________________________________ +Int_t AliITSpidESD2::MakePID(AliESD *event) +{ + + // + // This function calculates the "detector response" PID probabilities + // + Double_t xr,par[5]; + AliITStrackV2* track=0; + fLoader->LoadRecPoints(); + TTree *cTree=fLoader->TreeR(); + fTracker->LoadClusters(cTree); + + Int_t ntrk=event->GetNumberOfTracks(); + Double_t momits; + // for (Int_t i=0; iGetTrack(i); + if ((esdtr->GetStatus()&AliESDtrack::kITSin )==0) + if ((esdtr->GetStatus()&AliESDtrack::kITSout)==0) continue; + + track = new AliITStrackV2(*esdtr); + Double_t dEdxsignal=track->GetdEdx(); + track->GetExternalParameters(xr,par); + if (par[4]!=0) { + Float_t lamb=TMath::ATan(par[3]); + momits=1/(TMath::Abs(par[4])*TMath::Cos(lamb)); + } + else { + AliWarning("Null particle momentum in ITS"); + momits = 0.; + } + Double_t snp=track->GetSnp(); + Double_t tgl=track->GetTgl(); + const Int_t kns=AliPID::kSPECIES; + Double_t condprobfun[kns]; + for(Int_t ii=0;iiGetClusterIndex(3); + Int_t cluindsdd2 = track->GetClusterIndex(2); + Int_t cluindssd1 = track->GetClusterIndex(1); + Int_t cluindssd2 = track->GetClusterIndex(0); + Float_t q1,q1corr,q2,q2corr,q3,q3corr,q4,q4corr; + AliITSclusterV2* clu1=(AliITSclusterV2*)fTracker->GetCluster(cluindsdd1); + if(clu1!=0){ + q1=clu1->GetQ(); + q1corr=q1*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl)); + } + else{ + q1=-99; + q1corr=-99; + } + + AliITSclusterV2* clu2=(AliITSclusterV2*)fTracker->GetCluster(cluindsdd2); + if(clu2!=0){ + q2=clu2->GetQ(); + q2corr=q2*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl)); + } + else{ + q2=-99; + q2corr=-99; + } + + AliITSclusterV2* clu3=(AliITSclusterV2*)fTracker->GetCluster(cluindssd1); + if(clu3!=0){ + q3=clu3->GetQ(); + q3corr=q3*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl)); + } + else{ + q3=-99; + q3corr=-99; + } + + AliITSclusterV2* clu4=(AliITSclusterV2*)fTracker->GetCluster(cluindssd2); + if(clu4!=0){ + q4=clu4->GetQ(); + q4corr=q4*TMath::Sqrt((1-snp*snp)/(1+tgl*tgl)); + } + else{ + q4=-99; + q4corr=-99; + } + Float_t qlay[4]={q1corr,q2corr,q3corr,q4corr}; + Float_t prip=0.33; + Float_t prik=0.33; + Float_t pripi=0.33; + Float_t prie=0.; + Double_t invPt=track->Get1Pt(); + AliITSPident mypid(momits,invPt,dEdxsignal,fSp,qlay,prip,prik,pripi,prie); + condprobfun[0]=0.;//el + condprobfun[1]=0.;//mu + condprobfun[2]=mypid.GetProdCondFunPi();//pi + condprobfun[3]=mypid.GetProdCondFunK();//kaon + condprobfun[4]=mypid.GetProdCondFunPro();//pro + + esdtr->SetITSpid(condprobfun); + + delete track; + } + fTracker->UnloadClusters(); + fLoader->UnloadRecPoints(); + return 0; +} diff --git a/ITS/AliITSpidESD2.h b/ITS/AliITSpidESD2.h new file mode 100755 index 00000000000..14e5eb2f512 --- /dev/null +++ b/ITS/AliITSpidESD2.h @@ -0,0 +1,39 @@ +#ifndef ALIITSpIDESD2_H +#define ALIITSpIDESD2_H +/* Copyright(c) 2005-2007, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +//-----------------------------------------------------------------------// +// ITS PID class --- method # 2 // +// // +// // +//The PID is based on the likelihood of all the four ITS' layers, // +//without using the truncated mean for the dE/dx. The response // +//functions for each layer are convoluted Landau-Gaussian functions. // +// Origin: Elena Bruna bruna@to.infn.it, Massimo Masera masera@to.infn.it// +//-----------------------------------------------------------------------// +#include "AliITSpidESD.h" + +class AliITStrackerMI; +class AliITSLoader; +class AliITSSteerPid; + +class AliITSpidESD2 : public AliITSpidESD { +public: + AliITSpidESD2(); + AliITSpidESD2(AliITStrackerMI *tracker,AliITSLoader* loader); + virtual ~AliITSpidESD2(); + virtual Int_t MakePID(AliESD *event); + AliITSpidESD2(const AliITSpidESD2 &ob); // copy constructor + AliITSpidESD2& operator=(const AliITSpidESD2 & /* source */); // ass. op. + +private: + AliITStrackerMI *fTracker; //!tracker MI + AliITSLoader* fLoader; //!ITS Loader + AliITSSteerPid* fSp; //!pointer to AliITSSteerPid + + ClassDef(AliITSpidESD2,1) // ITS PID class +}; + +#endif + diff --git a/ITS/ITSrecLinkDef.h b/ITS/ITSrecLinkDef.h index d32136c3efd..c0656ba2ed5 100644 --- a/ITS/ITSrecLinkDef.h +++ b/ITS/ITSrecLinkDef.h @@ -26,9 +26,6 @@ #pragma link C++ class AliITSclusterSSD+; #pragma link C++ class AliITSpackageSSD+; -#pragma link C++ class AliITSPid+; -#pragma link C++ class AliITSpidESD+; -#pragma link C++ class AliITStrackV2Pid+; // Classes used for Tracking //#pragma link C++ class AliITSTrackV1+; #pragma link C++ class AliITSRad+; @@ -75,6 +72,15 @@ #pragma link C++ class AliITSClusterFinderV2SPD+; #pragma link C++ class AliITSClusterFinderV2SSD+; +// Classes for PID +#pragma link C++ class AliITSPid+; +#pragma link C++ class AliITStrackV2Pid+; +#pragma link C++ class AliITSPidParItem+; +#pragma link C++ class AliITSPident+; +#pragma link C++ class AliITSSteerPid+; +#pragma link C++ class AliITSpidESD+; +#pragma link C++ class AliITSpidESD1+; +#pragma link C++ class AliITSpidESD2+; //beam test classes #pragma link C++ class AliITSBeamTestDig+; #pragma link C++ class AliITSBeamTestDigSPD+; diff --git a/ITS/farrfitits_clu6_new5.root b/ITS/farrfitits_clu6_new5.root new file mode 100644 index 0000000000000000000000000000000000000000..764531c36d75ee2c3fae5fe9c0709416a331d217 GIT binary patch literal 64087 zcma&Mb95z5^zVI=6Wi9r6Hjd0wr$&*SQ9%ZnrNbljfrjBws~is-+TXj@4dacs`gq{ zz3bb(cU7;|{c(11a0LKzU;qGsDFE=I0RS+r{ms)((Fy_t)Uv$K&Gg1ecC>;ET=30KITtc)oVlrGZzQ+t>4D*VaQkn?=j2PlI%RMX` z`|-uJv@|(cxux1+&Y|+q|03XGzBRAm;?QHk*x;04@vvd@vSV`DC*T2$Q!z9o-UR^d zv$ajo|0S)lNoi(brlxj|sV#rcc|Vh-|MPat%l~W>?(Gmhpz~of@9HC9H%ye|dtuSq zyYBGWp=jdhPiEyoUA&@+$YU9+&o{dL6)bwpFIm)X0*5K8U%2=|W3k!V4>8$=L>WUVrS6jd;i<6Ly`uFF5$fMln5tCaU!btzVm`u&oIxe{T;XS$!gw=&qq4TVsVfzycGK z_)&a+O=1fDnNHP13x=)bzM#>PZ0_C?c;5gay<_C|W^gszew|kp9&%ef(qZ{|dl`WF zsgV7dQR8tic^{zm!EqQcx%l~T-sSgda3A!U{i*SIn8*1^yO4MKS^m})3(UOjq5$hE zx@<}77&lZEP~E$EKkvFZ{p+LJPXr#V%w%I`9Yh`HuBL0ygHR^!#5)X5;L>s(GeSd5 zFz!w7r#Tum~RHQiGcqwi5J_HVjkb{iBwPsfw(Ue4gfp%e{G| zdp4tCi*Up2QI&?WOxa*KC(~0~-vUMwiP{Av5&?GdonPqO@a42aa}R~xi-9fq^Znc~U4Q+m)E+TmeA>KtWCs*@ z)Sw9~L+twLqJcUfjK&(p{Jg{i=&z>gg43c3eB~{vV(eTEwE5|C9e!-dfmMwQCb15w zV>XC6)k4IA>wxenJ($NC;5SS6ix3k71EOp8_Oq<#UvNTyXY%R6{mGCa{mrly6L6#n zdIry=rMzdQK7rE0P*%-+h7jNMZjq*O{DTTkMTC`NGt|XEFJEPgO0hhMObbm6KF0VK z8gVH?y+FF9fj;ljJozF+e(-G4JWzuj;OfRlxhKa^gU>gkr!WF($F{AKLvZ__m@cDF z#x4N%pYtzsdawg<{BTy$atZlD-zJFFp=GTwlA;{erkJ2FmkQH8?`E*7-9taobR};Q z_A6Z^7;{-4K4z8yeC>DDY5UKD*bjH65dmKP9}JkL;CASeRyo~9FH>n)XRQ{g*48Z+ z??^+UhaH^qCg8htxAgK~r3G)Q1jR_lVAp*E>NRjbv7}`?)H=&nATo`{hNhAc`*G~b zEW)(}t=;-p2j#K5tIXnACS0c*D?Yx~JRd02<(NQMdM0t7!VU;{|BWUjf)6i{s!E8h zu>yrWy>Pa`8Q!n)@L5gj3GFUGU!00zte4E~18XO#pc}(cSmbtIZ%&BX`FutYD^r$i zk26~dq1=+n)S{$lNAK zzR=$t|yl~z2 zF`JaYAgE>{JHD-j%G3-FR~b*TE4)E*Z|cvxEoq7bhMA_dZn)fi%m=G&yckVMX?vWx zwL;-;6UPtZssln45=%t=*~%XsQwVxH(moB_H1Hx3 zw71-vZv$I`;(`2f+8R6&mv5@&`~2|g{9X&Jcqf)|D-+y_`{WC(n9g!v2 zNZ_@1yo)Zu+^%)(r$26Exm_Q>_}ev~v0HKnpxP1XN=&nEi0ylxCXl{qrSn@8*}gyC z#Z<~wK(aXlE4KI8)Fa@#P?^55K-TH+{u(UdaY zAyZlAz^t1X#LAOefCz!*Cj=7t=eeG!ub1xTA znJdI8ERD(A=BfnvN;5DomZn(iOcjXQt^OXITjlHY17l=rbHla*|x!%wwoCe16=;Ywj6C$lQ&_zS>(}&-$FPxGiBzWDW z;ZA|u-u8<@lo)myqz4}IP>EyQG`W7!fYmX+i6cgX^;K-y!2MU1uohd3sXhWw14cTu zH9mCZZXDy*NjvPvTbd%wLFpHPnnI*CIRP!8n(8##?t>!MIFffmT_YuBi8rPj;EZgJ?(|=gYCrphH(MA7xJSh%IBvad8vtr?PFv( zx@I2gn^yA;%9&9-dY0O#N|!ToC?juFltm8st>(@c0VXMH;rmTDB^D^lTZlDvK&cN_%_pp za8h>F9CXA{er~RhT0Hs;g{W+74rsQK`8;<UCyP&Ag%J9gF$I)rj^4zCExfV z9z*Dn+(Xlb+DS-`-@(*WuZDMJeZ4wtI6+WNK6>lfP<^odM=^UPJx<^0_#IYZRB?Zr zV=1SFu1LIMx|sY45=aUOCA)&P9+!0MQmjN&-x#GrcKiM5r$2a|x~#__7v_R`sm5S; z7qo2kJ(Q)yKY#gx6R{W>0>IN=@mnL)h;u2A>RyrsrHpfLqAmGL0AX9?!eE}#&ac9! zs%yI`Pl_IQ<32F40Ka0{WfNqNKjPAb^G)4hMw3n3t1Fqa{i@xGj!$OY6-3=v(srGmy7FusWL#FhWt{Jw`gG-wdO%T32WFVxS=0`hfCI1zHuU7C$LHglL#j z%GCC0GoSnoZRgnGf9a2ERbZY3-FG^Coe|kPKIA>W{H%oc3HayLKVU1b^Gna z83cOJ-G-NU0wYfxt;*_z3*R+mk8?)Xp@(3&j??qh|uYqYvv&e&(H#g1m>0#2 z?^K-c);f2 zSs>#1g;hIYs-EU?7Ur1?h@zKCIr&XXr~wnM17wNsN{8E2xK`3HmTQ$yJJ<`OfmNF+ zW5riue@yn&xU*9YCwVpSDly)z@xDoGDeFg$$%^qq|CPcP|=a`-S_!>6E=+J{=v}{m3qRDR`@ zet?iQDeA+}*9Z3EZbMe1d0`|tyd2kUNF?hPIwxF#A>zb0;&8|Fi#kop1Xp7r3&y;} z1VIPT99^DfsN?_8^ilz%n~~oa3bG3HLNoWd(L;TiVdF zLCJ0rAfvSKauP3DG{he>aI&F}tui0}e zha-C66C{3-lBPlq_-Bj1VsI%^rl1uZoM+I)zvQYuWH82J4RgbX!xnJ)Gf z{#v(pr;@GEEy=&elUoGWKPq&Vb%BqfQce)Nu=4T3o^fS4Tr`KTnLgr~OjZa;S_u8Y zy&m6bx#X~iLJS7nI7n8$`PwWX9L`cp4uybsSMkm2YiWw@^{adiK3?$w|3-8Uqm*2J zn?HB_G^iKxf>{i&d1pfDY)=IetES}8fAQzAGSL@Mn`&Vs@k$RCdH~a97_@d*1ta}2 zDj+I-8z)@=e$J1==U77VL3GR8ZbDo~1a>-IbVEhMci%dXnt>*`7J%`;yG1( zlg9X&28P_^&qQ99CHU!?f;e={>@>}Iw(2qhgD!Oh30HRpRPB3HBCDnKmL+LL4&#aN zcOfCqfh5vWue%LQi4l~oG{gq^IFPto4p`Bq$>R1&8>N1p^up&&Ww>D4@-v2`1G1h6 zyDZrIr6r?jZnx=g!AYjVPm~hxiWTHW1r4KebHqJZaRS_sz8&sJm|Km5P!?71)l`Qh83_ z5C{zCY|c(%9>6yj-w|ZL*r2;vWRdAyC)GC_TS$cq9P20Fuuy6>u%`|A^i|VupqFml z;wv`f8rB|oIRX|c3|6z2WrnMX4Fgm491!47-pJuN;(@l(0=0@(wxlj)Jl0mD*0OwYee$B z9=EFy?|yt_1Yccf_|LnYjX_1iZv=*DM1#wz8^T%QLL-IOMxgP#KBK$uBt?)L#D&&P zq3B}b)mXjph1$DTSi4_z<~~6jD?lD3(4A&dts&N2F$(GZTPVBcTpnHjd*ejVp-UotH?=hH%vB-f;P>H5OrS@{_~co2;_?)wSsj0b zdTwRI1Nf2{zUAo5SuTX+EMA%53ktvM4GwAIF!v&==Z!-3TJjA-NBdFlU27LZT>zole6>PL$K=wHy}xvTsMr5&&eUP2#LQPxj^4kee}ZA(5rZ5^B{#Yg4EgGUdlUk$@6>&op|D*J!tgb;NSE3lv)o z9|~gh3=lq(68&D05jk+GoirXv{qKkq2CMujol~Lgp@#8uv1xm)Fw!gNZOgKFlZh*`*9s zU+@{s5DBFMimR zE$l;gY}R}%KQ(jmQb^u>q>OmoRK@kkuiEp4?}l2O!e{;G0IUxmZ&K!kc!Iuz2Cl;i zT%Rem;Hv)66|{T2Odm#0T4GT|6zS+Rr6uH!io^KD4O{SFWRao+sv;$bO{%=0v|rSx zceiK6v(X?zxpH~u0r+(dy)nZ-yAS~_o*&NG%2ThgJwY29wEB-M%R(`P8ex<&goVA$9~d-*jQX&iE)=NTJh}*kk&H``0XL@|@X8}|ej%mM<$eIKfE?vWqoijLBmB;5dS!YNguXpNZ((dNzO%l;x>DXM+~b-Sw8;D5zj)yV!pvSD zy0IyayXm~U7$TuW)v(9Rn-x+w)P6ZHhD|0sU%ZWtfHc*+iOU|t6}FnLKw`oAwngmV zZ1p&$Qe(ZmtLh@!!X4HJgqNDU-e_42gq^JX#FdL>r%)JLF*jMXLS3Z$J<%!@MO&r? zt--DM#@U+a%8SL9PtB*oGZVsnn=S_ruU+F6<#0%K)$1 zMAfgKIphQm6b>JS^~@gbpA?o|vc8uvhi&IHTY{}zlcMKj64mWo-l_KtI2e=HUsbAH1w3B&%iF4} zN85IYWi!ka2`xFIBGO|qGZ|+Gtm4`|(O=E9a#7p-vo~i|T25Pb2BUl8N)$*tM37Ae zXKkwX%EG54C|^h?vP3{mrfF&hN{DFm(p3TnU&43S^P}bjN|h?NcUR^lY{zo+7#nc$EtSAD{Bz{=pRwUSz=OIt_xBe#bpo8LT}=|K{?D7Y83@rC}zw zpC%NqJ6sj;@&n#*_d|K(6K&+KQqNmg5mMhRE%64gv?t0aUd3BwOJ+9*$&kyKO*P{Q ziictAi0Y*=UoNhVz<`lFD6?>CT17za%L9-&rS$`kKo5JusnK4@ZA4tuqQz6O$w|0R z6@VMjILujvbOWlIQpt7*rxNnWe`7%M;>D>yb28p6EnNv<1P|&Y$=C{vHw=b7M`?Y> ztGvV4Cs)XU&{}S!Qa$|hWx}D8xo86~f=DfZ%|u?j*yMfDcAiynlw}|`DfB1Fi#kc5 zmJTZ0j^cOQt-7GbWiJm3SmddX*q+Atc(8M)eO|+Wr{zeYBIx=*YYd~%aUd-iuaN`Y zC_)9VRhw9U;pq<0MP@;g;E`3;hb4R)(tTm}^Ox1&o0UX({}P%cWyNqX1mK*7^JxwDbFA=gT_*`6aBlafyOJkoN3LM`3&4m&=m98HIlw+^b- zvJ6Io0yQp|SX#kBN8D`!)9bOCKxjSBY_0=*L`e00dnPmz`lNS=r@Z-VusqPtYq#5t zX=xFi*1n>>co7DiT*1Vv__Ehb`W^mc>2)XNo{BPma#HX?vJ-h1pEjbuFl)ok1OhFI z#;-s*bR<+IW`MOqaj@{?hFM+#B?BgF{CZ4uoF$hwrHu`wMR zXOu?KYbS0fyNcy2y(qk3F|Ra_Nf4&}hRaiaP)-TKH`}*%qM49PBIps%Z>^xJYXbsT z^PXc5Q%&@Mh%W{ygKBV0|L@o%hi^fi~&zgrFYC~`dQ$DcD+)d21BM46)cL! zz=cAQ!)=`0MzA%}v|O!7k)Y-1CVH_#DB4jovk1{6D7d<)(8B&cXk@%yW;3y2`p@li zt5A7(cYfuUKAAJzqYIbv$=34&lYzkRzl|faqo8>%i+%O#xMTP?5xrj@dQE#^if8#r}(~{A{k&!c zz>somSWDXbqiB8+_lMPl2_79{jYI2F&XJxpyGJ-fu@1?e%}ZDdx#Xea z78oyeEWz2%2K9^1$blLXOwHQ2f)5hi;Wy23z)eSU$XI!M*}dRg+Ka$++5+) z>t^h&ymff0rR?@Vb`{W=OUsqSJ=Dl`v%G(G2b3*x(t7k+B1Dd#{65tnFHsFdu$;)eJ>I>)Zjs6c3Ce(%ztEUc7y2$&6 z)}g(VJ6Hw%W8e#)7%RyX?bbvOB9=s>gBbJAATjuf0Hmu4LOd-77_d%uFWNSKZ6@E# zw`S5b{Eny_6r<(_c;=4~rATCdp(SXgXVqybl3quwjO-I3%xdp&uJW4QJ9M_yX5?+h zi~IemqGHs!1?~`+T|3IsG!JDv<{2Q=1E-OL2mdSL6S&UQe$Nm1c2LS2f`#=nRpw{e zuu`Dhwn$j@2M;?V^NG_ur`(eIF)JkXPYN7gE@uKh z@38TfUr52R!KU~ZTQGmKXQaa$Z-Isw7)?E!fLVuN807=*?t?W=rO`O?N>&HjOQQJw zJWIg4;UZlUTMCAYew?b=$ZUPjqNi!aAi-yln(IBo0S5m{@qKy^ZI1X=iQ+3Od`zYX zGz@v#=gUEDfyZv2G4QI4|MA^Aetg!E{i!HZwm{87N}BA)ply(7k*HbrlHHHn?U!| zv~yc9J<^gbu_UpcB}8Sn;jD%_pXEi+^h<}Qf8dBi_|aUI$Z@x*uOcra3Y0{h6kdJ) zUKTKXe@aC)Q!wABR1ue zp7q;sbl_KT2`&PuyW^V8s|6u;#Xfh*(*|lsWUhPB=58!W@-F@;-DN>L*URd|I6oo3 z40`Z8Z<%gg7VlFMGBUg(Ntm|IEXV=hA5cikvWAVD{1^TXtMS=ZkQ><*X9Q{sj>CJu zXiQFB>UXMYwXZ)=hX^or;EuPygR~Y(^L0c89itHf1|GS~@t)1M&__dC_sUtGWaR@v zOV}UxSd?=YXO5_cK0rhBp$&wl(6@63Ar@ zm!A@cocbXX9v#!TL#FvA>}k zbl)5I9e<4mklYthWq2qG5*m0(s4U(qQS!O zqDKt}0&nwxx|j;ZnQF$jksOi{T?7%|We#O!=a5PZi_e3uV7}v%yxSdiNZiQ4=%#AV zRrg%jgmoDD#9n^4RvmXu{)MX;AHEsEF@XYev?0uKPpEiUYb(SqudUc4Al#1{)S>Y9 z$QcBG&hWf$)g4wb@q70Hy}lVu&p%>Al#$qTt;6L2n*CG#<~{!kv9vCmUtcQ+K2&Oz z^6u-RQn`KZkMjpOn#0HIZp;C&bNO-j2SWQ&5_T8!Z3`Nlod=IrN~yp%{*sBYH9B!M zXid?$r_R#c{)Z;W)8|KzsW7QCM+Qt->YdixU5eN4$^k5}-_R_A>=oB{HalE%jq9%3 zZxZOWcK;x;E!?kkU3inbBV6IT>0m%Cs zljobfR#gQ?+l04}%lb8{qk)6@Ay`T z%#?vHoIWjNMZ0EdMM~hj#{@d_eG$-TxkkBj4_vx|(%MvjH*h2x52s-=I!GO^tuW{} z7mcjH1};@7^1$1@wkwo#fL}!%6B2HuI}l4$yB22|EPVuqC$iJF{=15r90@5DHg6Z9 zgY<16AUfD&MW}P>xu>ko$|_H3b(jO}n2@z}kwhQF7l8?3>9>b223hOnjJjY}#-#}B z=j}sYhg0wG0VIH7;$Jr{IRoPrcc9L7(g_U8e7^}Ibg#eC)yr@mAuh_BKzXBkL-OZD zxVT<=*9=y*6WUewRW&HE2HIQ`r3inu^J!fMK;5a;6X{0paq-S9q|#f#ot7ETVA)N%uEzyN~IRz(x7I z*?&PP-t-wZ27L)EXBA-m21y7em#e>*O&%rvG|6`|Y772n5h*Q8+Ed6rPo<3H&b=QG zS(D*~G^rKPT`#51e_9}p-_*dI!HKg4UOTX>(SZGBtCaGR`Ueoj;M&?`GFpQE#!S7S zYN1pC0d1qo=rN=YO(DWizfh>Ho}43#Q&Az^21FJQPT&1J2?o}OojyF=AIS50!tjgJ z=+*^2KGKeMni<%cIPz>mlB2@EU&RQ;5v`g#Uu5D}*QU1R=|ebg;OJ%OM~Hn-89nI# z3DHd@>3!OngnEKNpGxqM2O;-!cFY1CPw1Tk>NR((kfM{LH?&)u*| zSj^87+-fY&JfP)1*6k^WaU-Uz! z_-(dV!wnkt23Ri=cPI z{I%c<`!a*Iw9XcfAU~fNar}!!m|j;WJRr6t2%;Bn0yKSt577ys@o%RKMsd=SP7bisV*3h$3%vYYh3DxYA3}BndySN0IPk@!OFf zu@n%k&9wI0qTUopfzbaufQXuxJTt>}2kdHdHx!A$U1LujpdL=I(GLF;q{WUhY}X(4 z6W6z%h`$YisVCvlRuWNK(%s7z5-qT_KH-*!kI?%H6wM4lg*@+QAQ|Cz0*@_mW2#U= zEV6G^=b_BpA^6ARM zf>TkJqtnJU6M^-SYa^b+?Bvic@N_2&4WaDY(YlYvywK5CZJOkWB^W8-F)e*%VJI02 z!NS9EL^%}Ffh`0-XL8^PW}QK50#ZJI-K4;<|5VR20v6+PhUDD46N8tsIu5z_5T8pV zf6yF16{ltAIs-&t%DvmFZW)SYYomW7pSLi#;(0KLb=j0EBNW3;9EwwBPb~jO9a;G^Uw(Izn&A5> z>BIYwn(#1tqXat??<-j4}*4X2y?07o7ZuVBzyoy*zL9{)b&G}Y=??Vl?$>8$X zNX%HRMDJJa%|{-m;%wt()?N+YumWwjDnus<-o7Yt-j63H{z;(MILkwQ z+D70i?#l?-;X=^TV27dZEaAQL!`+^2S)tMk)X1Uz_wIh&(Q(H?$XH_D7PnkCgtI=@VDBZ4(_D-sb-ayGIr8tIES>s&E{=y1qQ8)wjt}DwaFi+lw!KL}P$h#|RN#5DNuhtK(_s<5 z{CbZFVD5grviHOAj^P!df0)`MVO6nk@0twa@RG_wQ8XJ|dG6haWQ&L0pnl=Q_vH)T z{*w|V-VNf!Z>U#@rB1Ozw8H=ldauASXQK_;Z^nwRghbHUO-Ch>j%PtG&dujyyUa(K zIL!h|Z-<`-;2*xP-sLFh)7O(ADY>VwbJkl14WoZ!m0LeK&EM>kLQBk~_tf^mRbcst zVp9z|4QtODUe!xCvHN%e4SL1}7#vb;W+T7!Zr;UueOIQ*%I`<)@sdgFxOcz&Sp6=D z4n9jOk!H{>cDbdXK=1lFv76Hi>*&$t3SRPh8ezHMJH_W5{}-v;$@6}zK(i-WU!48> z-qqMav;2)(jgVIHQSlV8BY6DBZz2}jgj8qg@rOQ?0<=Gy;N_7&Jx96G<6&=8^kF=7 z_kGhSsNZk}Wo-0r9N1_H{te30K489V$#6*VGW)3E6RnsV*3myKR)V0`^ z!Qy9*hMs{Hx;2kJAbWt`m6o{*RJXpk&@OrNU!bm1{rC#4X+?YRLBkT?X{vZW|5M|1 z%s<$9(U-*R(B0k~z$*opg~^zgvbh5TkJ#gt9>Z0>3B1h?fc5-M1?PbLH+FH6i^~IYWn`{ z5VU(W&>^gN_207EzLJ=PFfq*KR9AS8MK|yHpEcE0Klx3|cKRC)_*mWi7<|mP&%Xfl zU#9zS4V3*4gBJXULH{GY0j7|uvQ{px2r915W=3{q&QkW~4rrndZpOA=B(_%eHfE-O z8yDBV;ByKXKo$r{QErp}BZ!jC2^$X%Cd>;LstZO~P$(?#sSS>X3LQ!vjK0~Ej}qd7 zRnY6|3!dx?Zy-3l*!`qSF0|7yGjVdZj_dP4u;-y9h=f238MaSy=*QHa85bHrLE1zn za&^oNhr~4Q&XQnpTccs6AC)?={rXHZ$<;WXX~fSc_9Gw-3G2sYYz^(Kb6_}F&hJe% z`pXM#M<_I`>#;5AuD#M<9&>VZYvV0bmaDZ~t28Ktl|^W%f#1x7p6w9k*W>Ihp*a-- zH5Q=gb|QQB{rd~(XxDS>Y3!0Z2$%HEPn&Hv!;}Dq+0WQzbCHh_oMwJ3>I`?PluSz2 zw2KvLYKr${8qu_Cn*xnPIo>b5EmRAK)$({o&=FnSRQFQL2hTnknqPH|*Lp(>|Xt=hZFMPb!z~+GNvy-T>!Vx5y0rmwKeWA#)s#)q?zM z*uQbK`wzQk{tuG>54-;l?*ALz{|k2iFAETg}Ky|MH^D@hRmNcQ|^^=|+G zgR1|m7Yz@#WWeX=XO_YLfsy|!M(jT^aQ~&+e`1&{|0mV{U&K`Yo8+&cKmQxs@6-7o zY@ey}pOgPzZ2#N;5!<(A`VZUpc2iB+e570_Aqf_XpeD(gu}BJbmGlTFp$`^{=EJEAF=QF*`*{x8u5}@ zq&uQA{OcRqu*U(jvIO605ro)%vFn3?j2D|gaw{V~V@hHjwVG%jmD-`FM0rVxhIQs) z@|=2o$J|E=jp$HNNE}WbSt~SNMC~@Wv0q-8XU0lG!~tb6iFJ|Ymnhba3^L$~qN!6E z1lLmxY112@tH})=90_Om1@j!p2U~3lc&~+FcNw$;4x^~7%q;CU@twIfOL3wAY2>pd zSlaS!%7p<=l_D=vKNBt=>XKpZZ3?I1@B(x(Kq94!5dR77uYdkFcwbZVQF-0H65#jQ zboOa-*hNa9`+WG(#rDB5@tIroS-Bc;`p|U~^r`#Vv~Vck{-L4yx%SyK@VV$HXmf!~ zfuh^&dd@0?r@0gvKEed?spI`_a`@S3FWADMR%)q=m`0SA2NPh3tb>3oOEsn)II<3s zGhf3~^Vi7K-HaAx)3t43$BWyF_j6!=oMp1EV0<^aS3`8oHNQ=TuMfTgLtk2>ElaRK z0(=;MGwW$!W-=*nEuI{GK;8_nc@rqce|bntdr0^#qO6Se1U=}i*WwIGz4yq*ACD2( zKKd4abnLJBZGv%2y#pSDi?xF}Wr@1P_*m3w*e*GIwdu*RkDzKGrecH{zF=f&vIp2Z zzx7iv{8LRA{cZ~x@M{QiEL0r@K>T<|i-kg8Tkbs5kwuKk~NA;4enj!Mu^n?5D(BkdXQB_Z_$F6~kjLm+oA?jnl@ocvR4r&cI z-uvg27$vsMhPgL~egnd28Fv>nv_9yGK9{)WJd@u0t-Oh&SdvGUGF4bOZ|S!Ix6(4Dvz zEVr^=C^*mm#AvjYsVFm`bBUHaU9b%=%j^>NC>WMyX;sr?CoE}a`sE`M@G z=M3-B)(=eoHM!Y-s{H+@=qX)n?sdU;GM#ZF3p*jk$q)UpHHG>H1uoSLRY-9pi%XMO zeNJ70$)XI^ihUO$29Zj=AMVg=PnH3OH#j6!)qdM({ZPynbd58Vm)&hX5_>+Q@PT7S znUTlnSkhXXtqZYvaWexG6_T6zV6-yp;bO2X%MsE&e&vxqq+ifK%L>IdPNFQ6D{ratt~gk~2~4|LfB>qgI~37t?o%_zW2LH_ zm^G5wuTN~fh`;cV&knU2HsGXb0LKNGgWJZCjt_92@+adkqPLr}TNYH3;cC3Ozo&vc za-pD{#0>&j&9jlZzF|`Y*vD1=J{KyBjjsp^PV12#^(Vo6z`$fd3kANykgBT-GIYk=zr}y1gU&B(x;pum|I4DiH zM=1j3>8syI6*jDJpxQk(&*Nt&R$2qIp7H>6Tlqvq*bDlgc?169yE5!^br`U3oyiT@ z9f(Mmt5_TDv5*DA^b{Ln77183SH+x#P?zMKovH1>ONxqvf*tt3FXg?AGuoz4Y zyW^X}9c297c+1PE;b-NO)5I!uGaNK0?#OEL^;U|EM|4OC?4x)YhGAH|8NalOx$RO{!<-%2+ zSBeX-W)jNb-ibmmrz!jaTU?{1%HKOjGE<6U^IbNr`}ggbT&x?mDhfRvTSGbm2dfFq zz+rmN$Q!^SGE47(Gl|<#pL63v@du(eKaxOHj``M^+U@>BVX~pZ@8TbhN9;?1j|pB^zf{P38jjtu-00{3WftI1peZJ8=wc8qXS zLK}Ou;&bef^*rFLUPSVmlVleL3{^gXgW_o8G#25p_}3Bk`X9j({Wm`n62X(va@MUC zW20xBRo**u@WEsn6VlaJzo;4}anw0EK-g=Rsku7Jg<#HtP4p)2(dBRuI@)d}i_*l0 z~34tHKQ^a{8&J+gB#>+PmSUc?smTvH|>HjL#+)4jLm?;~S z+HIF=hFD0|@Y+Dt+?U{WKolo_fD39rIzXGg!ga$Ch7OP_5?^= zj$mD%G34I_yv}JeB%n1KRbv^5$5-$5J4@IWP^mnUy{c~pi-Cq)a1p^(uPV>RDsvT^ zFRVL0i+CO#1=1Cq-tzfO;Rp(4-*ze&1>+gL$nVZvI161)G}Y6;Xlk#Q`>b<=K?=-q zN57N@&F6z+tG+`{dp%E}WuLoK}U>e5kY$3??(%$fcJP^0H_An?Xz4& zz(dnKTvZ4;dQLP;NEiF0NPhV|7EI5=b?Z^~EQO#Ptl7^{bBTiwuS2{=mdPbsSD}h1 z3Wv;iiSgT_RD?VqbchYkhLk#fG)@J+OI*21vGPVzfu#mG9sIhdvGBM{kxReIdUyLheNCW^L)V?2;9;vap(;v1cv%fsJP)vQ<$k zK)ZRZ`&52cwxnP!v+L@{A%K5+E_fjh3V8<06P^sLK#fy&jI`1naM}CnNsS_*ngR>f z@I-^qS7%J@W6P}~N71s(dKyY&;;_15oiCV-Hie_J7 zTQGgZ(kF(YzExD_yVWlCTRt^<_ zbx;SEon|DS-Zf=h2rh}{y_si;CujwCSsdUlR&Y1W{2P8c*^q(!HS74mNfpDtbu-l- zqkYu<&&HW|(7r)7ZWyb5*^=QF(=6fjj0 zy5G1ir=?o$2VQnnOxDA=Ib3rh@5xCIG4X$KXrxE z105gC!(Bt^{#-~u=DI_D9g(1A>IFgIA1FgXSJ>!BOj)RDdV`o2#J-TO{o*FfDfC22 z_=o*l>OYdI?g=B%vWrXT%Ps>-*I#)ekLl4Ik#p(uoPR-#-T||vEaH98PuRM*O(y*~ zK&Y;1uF%y|K45&)i{x5$vxcrdYn~BjI2f_5a*mC$V6%T59&yD43i2Pru!(%rMNF)Q z78Pi5=Xg%cjv-H{e6!MW*`0wB;d4I51UZJYo`EVDU2%l6ju56Qp_596?@$`+#$jH+ zlsJ_W@sI7&VWT#&#CoH`zxef+Mba`NQ`=17i{~wgjT@*)AtqTVt!5P`P_Ee}n0sm4 z$qt5wvV7{jFsMa-xqX2ufgYm!4 z^9GvE_~J}JYU&L==Df=xl0Py!dN+@NT!}4eSr1W?afR3U_s09% zS5zEH1$G}c5&-odJHH-YGl*L-Aqh&lMzVKif$M#BSaK_Rj=|)F{mY8M{yNW(8M5-! zXRYQx+Sy@cu~VuRnN&eRX};BP+)vX-W7@lV!3LlQqRHd5SsvD=N>rV zK5+KqfItwF{%PM}Ui$6TDR0$f1T|+sd)%gq9C&gj9Kp?>HIU?{x1Vnb26NHuoOsT8 zP_VRwt3M+co6Pn}mlA)Zww|pbiaVj?Y4dnjHI|47Go1-Jqh$}nH}W5(HCP1cNRG_S zN`S9=+%Pq&8xb(YV09_518zpdB&yXI+43(CB;RjuA4R@tPUIIfn?Jxtu&8B}#36wY z8dT{hIDC@L2xo%Un}8Z$Cprs$^@tQ(EiI!JfEg-;7GCeHqgnQVP27;N$zQPGb@yPt zygzQSO^rW;oWAp5$a_m>`&)1Tyaz1wlr4NfmY;aa*ez|_g8Bl4|WhAq~Yh7*N?(hM>R6i zxCki%Njoxkg#q+G6zE=+=ZrZCMmKs}=FE(WO__T8a5|!LcX`U@wGc|DnSV-EAuuH? zkTkN9jm1NbgzkFBO}6$H=vzGFb{qwU6zPqwmHolr9?~S+^wN6jpWH%zo>QZckLXRj z;USRdb3bih!KbbT$RM030m~GZfa8U+)GAZQgK#w<+xO=~gR6}Y6Qb9gfi&aNJNlk( z2W-6>8>(8iyez=@0FYlsU4JcWvkPocO9h&@n0-pFBOe=M7MaSj%fOw+7vg`hc2C`z zMccZ7!!Nd-if!|YZKq?!7L{#fn8WD<6UjnTfCa9VAhv|^j8e1P(ti|n zG+KhNE9_N4s@&XI>;(=Os~h@2ao3|%eUY9J2N}otT>_H;0}i>4O8Yk#H_ldV?Dyt9 z$jG%q#TJ)tXa?6(CTFs#qRd8I>Ci8Ie{w+J(C4s)BCq~z-UB?BK=K@as^{~~hWzrI zZt5u!n78phO>MiafwJF2pp_#5a?*U>{#=^31jz@-PYWJ8s?Uv{X=OmdgS72817VWb z^+5SHR=DGyi*Z&YS#N;EL`sAJZgQnlr3?FAP;&ZWHrr@&ze^i&fZc<<1O``2$dHT9 z81UILFE5Z8tZi{C4t5@9CMPo*p4Sq*T-?X0)AbT4@e!P_FpKvnz&|;43&;npSlx|p zO9ZjWnH8EPx5xl)WX5Qq=_FKuq23H$)yMF6Xm4 z5WM2K`2gj9ggDy`IY@4$j)CNS|YaW{~ z7~ulG?)yam8lKhVApw;xIp{-lnPdeF6avxhDOL0)*swwngLh7Z!Ta>b3~c27%s6;% z)I+>=w|szuj7mi`CKj?)afykwH^@%4$L78xc!>z)^FhN%fN1}Epa-Qym_ znDG*ICp`yPlZR9*pc(m({p*aw=Kwd;XI@Tk$)ZfTJGfa$G8meeD7uD!40Cd`rV@r>>_~T_gOLIEZjo#ajPuQ3k_k(hu`%L60t1G z>rdNehKQ4+ewdGAG{$xGn|D%1BkC8w7VmP|C}0C!MrdpU0}$FVy~<|AR8Z)?ZX ztOLrynv6Q^%jR7s>I#9{>)&n+zfcWMaepiF6|K#b-I`a!n zbJ*!g|AGh%)wq_jW1i!ryxwtqb{v7~dU?`9LC*R{_%!MX$zIV^Gj(84Bf{WSDokmI z5M1*6@w_qnjUq)AZilOUt`_+j)_H#^cc{h_bTanVJfCh_NM+rV`4Eo$piZ*0gq0Y4 z?K-5FTU4(s^`adiQJfJs39}-xasdK^*YT0EAH^ax!ErT+g+S$bzxi%F7sBaY5EvKP zIq}^$3qBxER+VXj`JBQ=S|9anF~PthEM5aAmbxIT&%K+_>_!#Rh^ z-mRt!!%izi5bI&CL(L0J$P&G1Sx3f&_gFQR69;#_FmJ){XzV>=lrOl1D!!nE>G7&= z@2OixiYj1RuZMg0?@6t&9D;+|F>10dQbKYbF{9<4n*q6ns6^||lJ(>pxgCVfD#n*tlU=FnUO@^GF64z#BAEz zN_4hgxJPZ=zc0-*bYt<53x!XBC5!Ma%L4u5nJX7Tl;+L57<+)_!+EAQ6W_=P12S4U z4W8PrIkV77NqZ(fzVl$D?3>07m-T%o1#8+e(BuUw3aCK68*%SxEAnXhV+1`Ca$hON zW+c>f7>Vr%O-}~V7-7&|305G56~W{ow&0m=eoy%Qb0O!qpP+&>0|KYL|7$ot4fzAcQ#<=K=bKBQiZ#gN<%Xum>gFa&`gNC0di#}SXdU9;W80)Dfn6WSgh0^;(P%FFP3LSzM@35dw@+$%zRJ1}m~`^r%icW7H6`4?ZGzYVEnYj)2q&q!>kGCnu3*(=mkS)v)Po(0&{j=Eb1l66DEq@PjqReE>auCG5;(4PtBv;DKTBm> zwyEvSVo`dU*#5WyemMl5Wm70rE^Mf~6EEMyK(q-EVfpI~?F0Xk4V%===?G%t{#I)d zns@7KWd0UnLwt*`FU!Ic23w7Vr~G`JugsD~7CP!MquKpUe>BM8S^h9LZ+*$Pk||yb z*L?{Y*$SRD#OoWLenVle=#mgs<_)$vBBWBt#h7Z)a2Y949G34S3ZlCt*&2_Dmg zYF7u3@&bHUzIEIa-N&GnvMz&19|A%U8?UZFMkqx(#g*hQpdd5+ddb@+h_oT@h|DBH z+gjoFyia$*QexNdbbu+m<8f&KgH*JCqv`aCd)#2Rmfz3ncEd26q)q2zi+GB4=P8XT zvUML6aJ1WX7Srdy-A>y3EDip&XiTherQ`L?@ z(>QeTpYVLnj#s#BehMR+u2!k zg3v@ZMzTze<^>Xn3@IIfomM*K-*@r>sR?d293R*`v(GnG99ZEWFH=S)R_cQGYFV6~ zM1d*@@eBy{X&pQ1WVgvG=RvKMwDPT#- z_|vi`ev!Gj*BqZl7^wgfwiUQ-0f$>D##b|JnNtiO)wTi>!=;|gk(r}tzfVP-15#IS zvMhz3MDdk~pG<5;Wykaa9A6-Z!jCKfe64Thq=zDCuULBKdw(rRAYlCOMZ=6-b^STn z7r5kV%pWqW#{%=(r^7}F?J}F114{OEytFycuO=0eKe?WoLwK10fKaTF#5q0EeTeOz zA=U*8>rPLKni+W)QXA+2;@F3RKMnsDk5ME-(zPIN$@rDOq*6+NJ39_Bt83i@U4*cY zF0R(HmVAM4kR_DH8fwc({TF}(1=5D z<_Qd`rYv$6C!##SyS#%wK)@-=7G1ntP-W*-G_0f-B<~XzE(7n8^QSk$iRH$+pMe(Q+85OM@ogZA?W-E2-~zKR zVQM&9PtKBcJkkeH_z6O5Uboxd(k$Y>V`eCfV?Wba={@fNxhe5^y9!$Z^e~LN;hd&! z`EV}2|B=EaI+Lr4i>3`Z_CiZNQMgs6Uo?0gSSWz2D&I2Bg9qI=6>npC=WS6EH*2^~ zRIlLWH)VK;2KZS5F7W&eXIHM_10h72h`ArlSJT6L-oIf5I-m!$-f)<9oKe!Nr}Kal zhbkJdkG}{I9p`t}s69}6Pa9-BbB9^@Rp_TdA`W|C&S)Xk9#Ys`z(C!vwQn!Bs5kjs zKxOeA&>M(ODdIYOX0&7WsYNo-d6@>XeZ=XplFw z(9Vw)lws>*L}r#9Ld$rzmOI^szsJVwbZLH^3=+n-S{B%YdC~>V=yjS4mSh)NGxRDg zblTG9EhI=D%(1|*G&l`vDQAR-_8x&zL#$_Y|!v0QMj*etl=DX(e6Ehi$qrCW0!!Cc6D0au2{(tVHJQW`W3NVJpZ} z_xL%3w8yw_+0euXW&3wi3{Av=spqWn`8ESAFktB53|97|gxmE^au}O!DN&zmIss+? zHnLRylThf;l*5O!ZcZ^7JEV)PA9BV#Pu)GOB2t?}j7!k2HOPSg4N_$~wg0oSR`tf) z&|M(^Haw&nFDTwIw%#Fq6y1?5rtyZzS@1s`N~l16<$m*n)Q!f7!j>*34D4>jG`U z|xcu4;A1RgUr-=$maL>YqOEFkj?#dnw<+x@MxiXCumw=@Y$ z!MtUy^;{yB{s;{c2w{njYDf-enNK=;;J_8eR>x{L$r{gNi|~5v=di-WwSE& zD#zqlQfJ}Ve2s*j7WS%r5Y~&sgMHy~Uc_DnaX0*iT)6;`PaNQMd37WHY#3r9D@7ob zI_&&)^$1lriX-S}#Ix|ze8w#m4hf-d%nsM^4m_O}lS?S*$)e7JEqpl@jg7U{xUnlIx8VW3yFtIt`uNUJejz>CB#3+_uWmQT zY=BsR;WQlDs^;$zDI!!#X&_!Bq*3&zi5SXwkBr1nDe%s*r)QoLmD1Q8{kP(3!*Wz zjZr1`gyVM}t&PD_IIDSYKK*9=Ycrz>hRYxm| z+tJ?3{fQgSS@tZjj8jO+8(XUr-+T#pUz1ndfmy{}$|V z_2+dNiNv%*_18}<|H$fu@7HnfndSUXg7$ilmqXd(uBs?7F6Tijt16L-TL-=)MKj{| zdDBi5!4N%kIKp=&!Pthp7T9J7!E%j)L4Uut zG+EusMV?PI`%neNh5D7ihR`@qXm&!rICy9NMg<5}7|}^{&qyVrFX5MJgNggOpFjHt z&(nH%HmObC*myGvN(r~MiXiCUbp#xSEBim+dPBBdj_yLA)*YL1nZ`gbQt%a%@8 zjWoGelqWAlCr`+fUuTZ$d^bMT_Uo2dP>GBI5`*1}Aij;0vrO|p;smNTnbuv9`r2hI zxEo@@EKPT!bDu*MyN?Qr0u&K&Z7}j=RAIr(4UX3lD@`nvbp%8#8URK6McIA^Z!K(J zQwr|vmFx;YK6`WzqGsw;&`#1tgl>Y0fS!fSar-iYo?8JI-e+Pqn8VwF4@$)H>ug5; z^-!xp~6wp>@RTf*#?s^@`{;lLhX6^_2HPBomr+0l&=@(9>@3j1`)$?$}lE z7+&um&I3e1w@ZyWpET4saeY<7>T{5g!s{%7O7%XuBg-G5qt(E-IOgR@Iilz|ENEQC zS)-30-#Jzb2zROOIo!G&F&U*uPoDUSyl3fzVsd>nx(Oubb}5q_QY;aGH-(^uiy%bc zZP=#M9&<0y>La1HcmTTy!>TMR(u%nD(Fgts#etabZIZUB0TZFB!rRAiEF@GAc>|7Y z0Zff`Pk(SYe5Rc{0j$dFSSTtg7>OtwB)!`kRR(%;gDfi`(@J97+lT<3O2BuiOcu<$ zeTgsBHmZA7uzs-&BQ$hY@|H?~mH3^C`!<{na*^^9@wxI-TyDbXNABcOuMX0)$?rUb zvnA9{0Xlh5M;7pOS=_s@^M>8z(fPpNT(ShGx4r>FWG9$=@IQ5@dLB+8=oN`Nfqf?3$EJ7Y`9$uS;W+^2Ol)aMUSwOU+(#b=4_Pn&UnCi z3xV}5@n@zOq*OH+B}Etzfyd)qpJT>=+jTgWiHS5{tR-T!-7zR)xutmd2P4S6hSt;f zPEnAs6pHJsc%22m@03?OYcV$G(_z!ZT{%Uw;1qq$;n_JS%EQFo3ws!99LHJ{g1d-B z7>#rv%oy!w5AyF2&HlEO02Q zm+x%6m5Ia4N!5zC$^F2|4wkDRbv)qjN|eN9RJo9wsD@Tbfba+R?Cr1V3Ns@ZatY5FOQXZgu8e1@V*zQ5>6J77zF0&oNSz zIxz{fg6e1fDX(K){|ZTfx@MoBezb7}Rk;$@p>xZ*zTj0n324mzvz7e^i_fi;Knvn& z`zY&k?)gs$9*OGRUAs%rh}_AMOUkS=<`CZ?ut<1zK_BY`r*-74=(~MrFyB01 zd7mS06uy=+QpZfAXH<$D0ZqYdIlSxpdi#L=zH@ez6wb7+t`B-Xz(lLRQ088@`YBlMGw6^XZD0gsCba)SrsK~o`dTz6tP$YKrvA~1^LKHe zh;4Y`HS4Y+zMn>KtJ-}B_6-am*q8PVc1X+^&Qh-&h%M$)rRKdS_b@$s0A&E^(rtUF!;!a(zfg>0geXQSG< zE;9)oK{Mdq;->7G8EU3pip3Ym4saj;^RuGxFNiJU!VLyk{$|nKFO+xYICjVV1&I&g z=zA%zFK4wfa(u|<5%wSzk%5p?+MzPeNt#VLPuQeAo~KX0KLlq>Rc}9K3zCqyJiBpk z!g&J;B~p&{w2+ZEj3V19euLjhfO)BSAN^Pfgvj*(LQ|EARor3g7tYR4FRu7D<#QfA zMmT!}5I0q|4QR_oV(r8B@IJ4NppcU)kUx?ODmXTq zuKpKi(Z@N!;)(<(%1t$Xu{w|B5@|-$hT|oO!nLjQsuQXK{uWG>tU-C;uP9xwUl|HX zOxAG=i^$yYz?90bpAU66qPtd4u5q_w72`Ul(&@L7;v-9T`p0Y%M zxX3QdXL9Ey-WKjcqgK^Jmj@_Y6r6v5Ym`smxPrbsIsvO)aKU}9guKeV|tDbeBG&>NYG zaEBYX1MohWCxrP(Fz{ZyT$$Ey@=vBRVADPWXOi6|Iqidt$BdEl6uJbe>3yh@F+n1H z$LKR?3x<`j#hz}2y8%M11o?7Qlq{|~u9sg41(CP;d^^*#@DNL&;7Hg%?gjt4f}1DR zk_KfWojjVIwI?xx3W;{CXU<2Z`P8IqQ!ij;5NU-a`>6Ll?7s6kve$~xYf63%(a~Ei z7w(jGwjv-72}*|IWX{GdXGqP;h_uYe#Xgoiyyx3ax~ZXe8NP9HlVwb*I+!!Nj7Jd- z2M+j4?tqt7d_%MrS^F&OF9-Uqz0pT=6B4(70*x|au%mA`-a?GUe-Bx@KHUJwfCqQ< ztX|Xh4P0KjmokI2iq~#qbV~a?I;CH;WutVeATPlrBG`{my)9%)_GXjVH*oIGkmgoQ zud&7Pt(WxS;XHG1DK?1EU@y|r~2F;2do)h2YMOU zBXE1GHcNq>CyLF`f~Oi)s<8IGv#Bb{j%dyfzuxvq6hOb;=uwq=RsG-78#+eiXWYXy zfl_0TBVMk`e>>cjXusb7F4d>#v{`XI1S zIqTDOD$>eoFADMZDSR&I3Ttf=EJu{MA(O7{vlro@MTdvNM00oQw#?f%QInW5CLBFG zUd-4Hvw6{Gy3ir}S$xCy&3@L+U+2x6L)(@nk%8zQaCmn0?zN01H2-aoz4gT}GoO3~ z+5v|2o5&9hiuCUb;m1OT-`nJOB}xJw(oM_Fp#p!=&;cADdL|7L5r`7DbhFLi0h|W8 zXE_6wNdJE0?S9I!Ki#=hJIN=pRjL(L+f-UOkJ~`2971q!3^QN7@(qP2DLF2>%qLE8 z`^IsCjTn-PHMI2Rd~DBxS7v+6zQcn*VSS1!%s2tDdZ7>5eI&$z|7)vl6z0aZB9{7D z9$>80+a*cu-r{$CCB$?1kBmmOUrQd0V6cw2ty@~%GbL&hTjH{uJrZb#CUu+rEoWaf zJXOFY@}0+*%~R)8l&F7g1nIKVAg=IU;X&0TKp_lEoF4+gzTqQLDX1WO1WONA%kvf| zLY_r3A=J2+=GCR-=^(A+g*vf;3f|{78!{M$qm1+aIjG2#(AEJ zW6sTKp}D%CaNge&U+35TBKR`pUo8awR9AOpj;rK8~<^F(BA#S{Kg=UQP zWoc9rrc~`nAhDNx8t=>I(0bL|N&T=h@(OYfIo&%aG%BQd8qqpO+Ci0tB?6 zmMXbC*jrL?<7@n+eHPi%ti?l^3c7ax&^b_N!$&fqTYI!nobA|Cq-+bjP@SmAqmcN`8><9QHmlJUDj#}t$bv1nGy zhO|)^^{<2{pXrs}6X_Q=-9@gDV}|{LaziV>nfUoS{H!-}F9rR+e%^nxPWy?k2;To2 zs$l&=l=aQ3`z_J@J$u<*7x2yXZTEUCc>nQ_X#CR}L*KSs1}!(7BrxVw!n4u;915`Fe@?k8KWscrgEZ#tK2xydcJ*re}zW(e}qO@YWze8>yfFTk(Bk97p^D5Btbez>;>$xVaO&0g27>W6uR*HIU11d$WWw%FTDfARqxg%~ zL?ya!%vir8?wQFVsQ!ekEOv2?nn|=<==jcm^*?XpK5Km*D;RJRkzhSx0%#Zd54SiVi!tS##-vVrR1Qo^-IxKB z6SB*CGp(^(9i=|XT`SPXHm90+xmjY@{LLvV0&#&jr`Nb!)>Zz$HjY)sPMZ2P=%B|Q zH)y?ooZ1Toeb$)mBM@)m93ze(K@RSxv4933YmQb6j(wjo#Z^L@5i(y$P!IFF3Ut9r zoQlDNJL>(|*~t-m(rw1)H)YSiSnaE@7>Y@YXZiurz{p>CXWbdD?v5iM|12Klq#^nibONxq**H#o z&KH>@ZiPc%t7{lYwdtYVHzi)u2bcWUEQNTg4-(Rj%VE>iUXxJgXeB3tD4E%lw8ug# ztuEIuQ-msJX$M8&UL4xfd#h(10%Y|Zb1+H16aaWrn``q#KlJvx5}6-zl$4}g!9ep! z`Ck0C@^?~*YyxL*3t$~~4?@-lVetN*F?4%D;cLRU5TuDkx+__zYTiqo(O-YzPZDGB z_w!Jh^<%<~f{icH4*0P%9HmHhJrs1Q7_wFPHEn=V7kmH0rO(1G#bDs4tM2)?2ZrvNbJ<)OBy=wAk132xc7H zh>va7Bse6DNGKy7UX2m*MD;=%XwfMeo1G}7;vF*>hh+$UlI!?9WraBkKKha;k$|-5 z>t5!xI!W}d(Zktmin&Jbt{pa?Cg}8@{&R?sL8OXZ+Z6L20 zbU#1jvyjWp$iMg7>K5YIlmir&@wBlEUz_S(pEux6_YhUL_W7}Z<3}a z$R`V|xycR7n^j1C$JEmxk)-9N8NK?k10rFEq&Ty73B+2!wHQmxU{ytHq>vFx(hr{f zedJHxfhgOB$rD;}{i?6Al;%*SU4xqI&=b|SFuTxzGKTx}`Z8}NAE?*5PnM~SS!+~m z2C;u7UOR^~L{0V?Ssf=K$n)v@XF)^2&Ktf$lhwHZ8ATaSoBe9wLb|`g<-+Ajr!w=S z!x+tjlF6^4^m34cZuD==I!qybSAC{fqt)K#an(@TDUjyz=R8L zUVAy^LU-J)Uc*Z!_L2s2rWvn2=C>3;oh@tb<2x5p*iS22z05Blfz-2ZdDy9v!YGcG z&@^ct^2r{nZC&UP>lFmoZE?VQD_X|3XlD=JlSAEUyo%vb_ZP3OrBU-}xjxB0Jatpg`RX$RebT}v!;AbVSSex#>vSg1T~8{?O(hr5k$ z6r}kt-lf?~_nHqp0Fs_>Cz%e>9_*U&$UvhTQdL465kh}I$R`wO?A7&b-t^b5CF>`w z$>l_rVqI}ye@d$OZK%0Yrpysaz=7GqAmwHQo(2+Zh@qbT9^Xuwba0QUwb2bab%n=l zKCE8NG^MrYG{c8E&ImN#x8z0&_%Iq)6`n&lIE<8y*Y8+jU;*4H`yOcxSM9p%niqtm zaUhXX=6-(CLMuKigJ)8_QGvVj1j+?Va72?h(~0HInc{7nKvpRx{FCY6>Ml{%psn7> znIYJO!YJb~!7Hej4+$-QI2@NAp-XlIGwAzyYOu41RDRz0s|;Tl@eTXKt<1z^zEmll z?>(VN1CxE|Uh*8_iK~M0@LE%0^Xy_6jN4)_{dGr8ztO*otzPODZZW+wJb2u;Uf>UE9+)%e-mq6PLth&}>>li4vb2p{o+i+ucc{JQs!$%0KeLau~1rv>Q!|c=-}A z?+lz&V%WJaB>R!#3pizvBd)z(Cslq8b#(4uy`uyd`sW-k5Xw_t$$zux4fMlrA#!bq zr*u+Z7+wf_j(a1qyEQdiIMG`0f8VQs)?@$u=8@*tebwE+LiKd+3%{TW1-1D$Qu0s~ ziH3Ez9X9B{_8*qN)8*u)tQmfP_YYAFF@0bD;a@&LE6Cacq8SqRl3CJdf1yeGn&1Sn zLJ`tsu3i<|M**ub8+P7`C4A9b~e3XhS|*gfjwdPoDi+TN0r~5 zI)L+42}3;A!(MM?m>NDkT#e;7Bzwm=-Zbp|P6CLU3?BmMOuF;8XO}p%cJDZScdE#b zOi%5hJ}yKm631iYI}W{HzrAI-6R9ZD z$xbg;}B$3A$HJtM?r`=oK%0KFuBD>W$fne1uAT@|Oa^BvEl8Vl%7U z+7Vn{oV0Ee+f_{Hy{LMa?U;Y&4R$?96X6EevqRk)s}6qbUC@Bi;c(=+vBA2xwvM_3 zAejYn{KwjSZo>V~B#4C$_v}@3RH^5Lb zi-OVBxt7x-4}0~8dLLy90_urFcdE;xBp)&DL9}Bikhv%4EhH7^7mSU! zd}UEHQl7={@BaM@@ttrY9|yh{Fx(?dzcyj)P>KRP+gmiX0KHYk7aTbG2Itcl`PYc{ z9dR9Im&|v5F7~T?YH3D-10EeH>0U6ewf>8ppob_tm`?wO2HE3zs6JRA9=*|Qstv-k)a(Lb`1YY0PRPRUuKt9 z_F5~$qaQ~f_iGOz;k1w(%s2etKmW9ho3o%GM{ZFZ`+Xn-`M2R>Wucc&qZx4S!$Hf( zv2=@j>ZuC#7@D?IFiq9ihug2XgO**+|D;ypm8Jc-3R>-;(ByL6edR9)4;u2xYV36G z9t*bbA&bOm?7oAf8{$gl^g&r6)P94raPmKOMn8OiQKU-fe3Kf}N76KBz*y|=3=2JT z)s13BpXDOhe?tm{$}{(>J1!>X)c&0wQFLAjS$c}qx6e1+%WOhadV)M@6|($Oapgc# zfua*q56&$-SDha8amUDECfZc-_(p%aRx^}NL9H2fmpjjXzJixRg zB*#x<=+(Hj+WuaALgGq`JSpgC!yteKG}d|$!= z9K*M(g+`JP)4L5lU@!kN=-srGvckrF7*uE8<`nO@T^((iRpTsgEFA;9QDE?;)|tv7CCC{q2OZ`7B5~1EIRMTptQ@zk`y~5@)st=gyw!G;#-HR$xI2 z888+7&ZRZ9(YGkeC?qSX&?0b&pm`2`_%|KtUqxYvz4hD*q;6e)jE}uW=d)n4@q#AK zlR2c@`v%bzQcjxG$04bon5pmC8fF8l-?j_3Ld+D#!4$^O%s?xIQe8O(9Ps0vYg_>e z=S|%l#Q3q`;j#cV&D&bfM?wNp7F0%=;?>aLF7Qmv&6>Q(54$aAj{?Gm$Pe}K-8MhK zk?fF_AR_d9@_K5+6g;kQ+ol@8rqHW_`o4+pjZdXDTj<&XY>!RUdrySd^+TlMc+cpm zz_eecFP-Og#iz>N;(m28^Z#T1=E*1lYLddNB)E7C_D5Nt5zvIWFyIzRdfSX;r8J%- zDxIDOq$X7~)CdDel|E7#dG_XvvnoU*5&SJokKKZ{+*Scs>gMw8G?1$?n)Sve44%Iv z*?w|{y%H$?D58huF{EC&h^{4PkArt>!XaDBw{gr4r)_kiI#w4Q5}_fqub1ceS{siX z>zd8t!qo*CQp&BP#F+``q}Q#(s&w-LU{^D{!k$a^phgNL?Qp}&&NqsO#G@O?Zn&hS zs36W&59OS8yP?M5+p0ZR!HD|EU3*qlkLUH0NmgbELiEhVp8KL?IQ&0wkZN{>L>Br&ws zgRn7czaBH#<_+yFCe!h;ELgpy{iOMe1l)qeOTmtLWAyTRv04f!4CDg+A;inIdbMw| z(#&q>?G8b*ZoA!ABGIGVMJKYdjv0Q)CW?o}3}WtnsFU7luxt5q5gbfs3zx?IMXMFT zQ`V1>_QnfjjMoS3{&0=BWzGQ+a>GjG@FlW&+7B0CJecKTW4aq)3wP=%L%NXRujE?g zp%GeN%?X*SsmBg3Qkn3N`@mrb%>Ic8g*NGa__2x420D~7cAMy(X>k+0C0B@LZ1GTA z`q>5wY4HL9=~MIWk7;Ywn5(n`YV9=EOl1ON!~OhfQtD)bqX`>$5s{Zddug`gsP(mO zsYjn@q)Xvpy#q&cBps%rvj4*;=|RTf-kkW;rucx-8J>NLnb7o`BkF!$X$hHD9wcU6 zxo|GS!Xk4!sFjrf|Mm1Q0~a|#hu@rj%Mm|zBAAl52$rdtUk#rd-nzgZ)Ig~D##o{V zC=+k>tI@MTlh)YYs{=1FPJ^$ad9+yUvd0jMf@6LM(b`WJC%zpWbDq{w%J7`}NDWt` ztX^q-jn{XQ-T>SBkjM?{ba?;T8$-OAPf!YdbN>D``JVW_470!p5rZ=3Px-&?2sx@| zV?@(=fVa0Jm5ZZ=vgUSR`AtusuGBb;< z3|Kzdk|zgoP6X?V5KCi%0w{Np)X~`89fuO~N(bN&1q-aEDqCXOz%>uotDy3GM}AVX zE}H{?UdE3f)F5Xtpwl&6d;navtgPJ>hJqf61Qb?Oi&UPqcbruM>H;5$xpb?3r`$1u z!fH*YF5Q9W(Vaw9+N1^?kh;dN=%Nst{+Ze6xQ@u^gF4Xg)5u#g5mxV=I45>fNbGu& zL&hcK)uQBIg-68Xca46*g=*vfn8bPj*T)Wan}Q#?stoX;xaF?cc?PoiM$#L>rZPg; z8uD2>=ac^JKN<9~Cf>KW<`uIJzQadi#YC>oFU8{=EP}V})eMYBqOZ!ArluyDu4S)D zuOT?4nFVhb^yXm@)ih-I=y^SL+?bTH>orL?R2<|0Js~>qwf)#adRtabrS5JOx=ZXI zjT$Ea>YHYdz0|6zR{($>1ux@I=SpmYi{&4?x0A|_{8e=jL_N?#+ho{mS z-0eU2d0e~aZNJI1w5`BBSb0j#|0WW?0;c7Bt+M2$N`GQx69l(0qLp&pAmsHL!;2xM zvI?DtGIu!=3ePV_rbmts8ZdevRws(5LwWevdK{3w6UfKq*fqV1cEBUj>a^pK*aDvp zz2xTe(5ZAuT~|t0f`b(~200?D{C2P5JOxPR3 zU4(Kk51+v1qurgd-H~>GZlWy8{26e~1c1aAz?DkI%}svh%o;bOI75ps+MjrJn@H3wxA)Y$+Np=?FGvVOHcFy3`ItuP1m zqy2)q^Dhe%YYoXWNflH9d<^dBpbkiFS2a9X%8aIiV7HbHvSeyw8ZJOTA1v8;>*LM1 zEGa9yoOu}^UedOnw>r7Ns%z@8fCkrI$4}Wp;L0)Yr*W704ZE&#PZqRoywM6EF$dzx zXiWl`Tbh>Ztpw(*lcRr|I<$9pX{VJiJ>+lZ!a~wE2lW`kl}xl=4h%9s6B9B+XLF~) zf+7DiLwCH-pf~HvB)R?*Gn)zOe#l2a%MY^WEgVZyDilANR}}UsA8*nKjTJcbFQ>D& z6(cE}l z0zxkXcdNT#%p6MWkc)kjTxtWP<_X9jnVPm??|cR&&s_BSyx`&Ca@u`$bD$R+o$ z--kiZ8x?(vMg7z~{z@1v-=A?PX@74{PC^<%FAu9~Sa8i}QugR)xfwvx@%H$aU$g?g zG^opSr*O|2pArp7xIzHcv2j;hd*Ch(ixum)!!r*tO7gR(qDr2Jm72ov8WK~U-Y z_f*_|5M+^Oe&TZQLHv`)K*U>W9sb+2P3TM>s*)!fOqv6r86wUw>ytT9{p;i7q}qPr zE(OqUA^p3JaGR{@$PUnGN3*HT#%Dp5{clXDF-X>U-CQkU&nw2oc}n_=A^R9NvV5h6 zisi0Y;OWsTRcI|DvFo#6i~A}xaMeFiJQ%BOGt&!7aPMxu{)e|Y#Pq-TNGz`uweb@z zc2Fr-6BNyJ#sS^LK8fnzZ@%A;ai}#Ffu2Ol2|YVVxwaQ3qwD)e{;lZF-TP^12BXW> z@DzC9lgzM2@$(u&GEbNi2BTmb@75=*%W$B1xX?V@^*9lpb(g_+VDL)%yc}7vw9rNB zSB+)(juQ1Rrm$Zf$~zrS%ELGE@LY@+_pO{L*@cHmP^gU3c)o-00oi+2ZoWDE$k8SC z%9Kk%1zt;`2bHdpe&|l2C3jGYRh7<&_R@tZ)pC`}xs8hEj#TWi#KU{7UVOL? zM)gXQ^AN_FkiP8|jRx5NYK^|_YsvH4=<*(BVw&A1XL$I&EJx4n81gh~Q@0EbegV?EXdrP%R5Jb`!L(kP>#Y zsLTR8b>4x^i0fO+(?q+@iSqg_!;wf7Dq%(+EEN7j)DD5X>?mwuC-A@dDv720Ggg+5 zKxf+8aw1lL4G(tib>cWbSRkX&WN^p$qjSHT%zYZNS(8=FGx0!G{rjmHGNy49RU0zdYz#{sGDK!@>;5s#%L377WmT^4;d&mxyDSc2EYP%*qJDOO7g-JyZaw@EHMQhZGPPTu zb^1A`;;0Hur)ev#r?Vzj-L*tN={XnFo7()>N)-jFtWiX|5%e^E-`_DuLNdHl8kXYY9B$F}oCci!eT zGZZ^Tbhe%{aHJ6w22BIfK5YC&tAQUL-E0pFP_87&7}){0cp+@vuQNr8|ImFJU$q2g zUY?xdh=l`W3xy+8?Hwf7;NnTUTDnB$r#EEHo!Hj#IcbGWf-2D9vVIU2^M^~2o~m|_ zmK^xEKs{>5#qzDdZazBKw?+RP-t%MrT^zW#TMdZzMu@{6le&Ffr0$t!mW)t-i{=?3 zw3ngB$j>PgnI9~jba+QUnR=W@&ePgG7Tb943N(B#Ht%2$fNCT692AuksD*`gcGe`w)z{@!ngKd&2S?jy#Ks>D*7wce_;CW;_JUWc#U`W(OOkPH9c4B z1W#&+l8kw78Hr=X!mS?bVf}-=D|Zb^F+sQok*CW%hxv>0z5*r#6E9`x2%}z;rIn&! zCaAKPGgrM*l>pD=`qr;$q{fyxv%;9P3=XS;f!z5uSCnIO1k3 zI092qr^x5X@&2^`L*6+yX99I;H_08_X2-T|+fJv`v2Ay3J9n&(ZFOwhwynuLZ@piq z=KK7GU3Kc5efD10>NPOFi!pq0v)5W4YV~k9J9xN&*24zg%ak8eE*q^FkG?zlU&}mm zqnv;#k?n5WwR6G3keQUbzNQPg7z;mYPP)v;dq`WC^57y2TKuMU>VzcU^?Yy$cVs(o z=Dc&KW;Y7hMw$8<3E&O;a;*<_jluwDEjWM0yzFZ|`6Wt1yCHbz=k|7$g`%o~WuUNV)uxlERi+k6@U(x zmE~((e?lfzJ}>zzA|zZ6Gy|O_g~L-v9$rovbg=)KJ;|f~TY#bqWn|^>AIUvJ+uHnA zK(c^pDv~)W{cMHhxLtfb|25pJ@+zD;Oqsqw^ILK;@HmKh!M*D3F(J$~a@3f!>^@!liwv(XR=n`(d*X)-y8JtiX>N0L1yR#7*{>1L}6m|w26V@Ev$iu8ZX0L*&+vt zjP?P_8&SeOCh9jdX<-}YT~)zdZc8=qEq7I6joJ2Hv*P*XP|3N@0$b}OX3;VzPoe&c&;PKgo&S~+@vO+7m)A{W`WG`5p z;lZ`Y(6K?vJVwC3X1(qcsE@l&bWPPnwbC-X?$GcnHzC|E*M)65V6I*%2Zb-H&dzS# zN)VmT+%b}zQ&l0E(i5|tQpEi+%G`Iamtd8;JaSgZO2I5OmsoMGu0^cd$@{<4Xr~== ziQ6@HVnR&ZZ_(3h%##+rZ2iSCs7#_l?;{Qi{zUG1^@G6!dwEugec0c7HjQaB4q#Nh zgvYPu(9DXNYHWR`)$B!}5f^F&{<=q2>|vJKxzwEs-Cuua{WYNg|8`%Mm*+-!+C@t- zgiYmybyg^blL{FE&fDh;x6?dz#95BaHVGN*n31T)Nfe%7krdudRmL`EPIv^8R7aYpU_3z z4z)%@X9%zNQFyTU^7>Nvi_&C0S)GFp{9kaai*~jpnAOH`R^?x^b)Vd~az8d`^!IDE z-Rn6Lo%TpGo}!sUiesqig|nkY;-9szgkH$J474l-dx+X? zb6U6RwX7i0Kv+_vco2JLbzqXL>%kD(2aIdEuu2VPKNm@#;V%u%x>Gp+BB=RloK_16 ziji_oc6sfu1xRQR)x~bcK^=QYWKVgbb=Ec}WWQ+xUL!b(1cvl@hy5-yhgRD^j=^V? z;3zg}YmLZTMzEIhAjP^dcwPnLf&zy@`VVhX;~Z_C=6@I41Fc!i9a`jLD~8;xoZmV` z`+e9VRnY2yw7d`L*H(-fdoMFgN8T7oh;RD0UN#W0e$Rz18DA1DU17lJNte;kr)@oj zJ;1Gz0x>43!hEF$c+G)^y(>m&@tljxG0Cd zk~3Y@`&3Gb?p4-s$X#0a#$rz7##Pfy(fenH@^RchJ(5J9)dN9G^3rk8h8n0HwaTZn z1XljO?A--twtY!fDLe3up}h?sSlpGPN8{>f1!q*`-QdCQa4Nuoz2YlnJ=4H;R_bXx zY4_apLtY>AzakF$oxj?uzYmo7P!MOtZg|m#u3a5IEQ0UdBZNhLRApJI0U$8jh;ouX z?az$A)wEJ}#E}=jZl^lKAt&U#rm7tBcOE6iLuPP?AsZuPEu8bYOSXH6ybFNszNrQ~ zV}?*Sz4Yw_?+54d$Wb^J`Xvp)P9I_)6R3WmHz&=0@)Mb0Eh?OWo6v0Lo3`1Nzrl9R zqF;GCu9PbUiJU~z#NhAp?Y)%e@MkEiY|kdKPO zGh4&Ya%DV?+N@y#SlR!*EtL*Z$^uHHMQ{TDrFZfXgWA6 z`eYOu6AJEIq9U5m=(x)D;sm2faGQ`cTNeIA$_;L7HM#8(?wQBOD}H{2sG+Ge#o+D~ z^7f8vV0j16}C0wEwsM9-V=_g0N_2V{c$PHXJRD z@sRB;NJcG=kkEN&hbvPoe2t_q#mgy;5HIVm9mScleG2l|DW|*#LXUsy&THq!YD+ko zy*|5u48!&)vG_i*8sx+JstO_!4fk_fUwF=!DB8^DO^>h<^w#`{zo-Dvrj(%VRB(=u9Syc{Mzl3;xv!MU{xksg7o7L zfne-O-%55R;-r>r9D2u4&kZ~Lydb|oAMKyJ+`(=lWHE1Z#E)As5HZ}Y3BGb}L`*y! zn|&2C|7VL0_Hw8}pwJTxvmP(3L&vjo*bdKh#n-2(F;N#v z6Xg1960PK$0Su3O8;2Jij{kguC<~VeK09O#O|YqC{-JTBr!X4e+W7~STg%S~Pceia z=>jFa;hV1MQAsb~#ldD6@9K(~yI7GNY4;!kq3w?T60ZZ49uBr>=L`qlT7izvwU;9c zAN@FfQicr6VJqQ#L=^rt$M{$yB4fUrV}08&LCs}#oc}SqkEnx{;`1nM517BJif??d z511j^=<~C#WMU2uEN#&-uboHK!n_Z8&>{ng_lI4N99S4=`>X9NhDNNh{(MX@W)EE6 z86zCN6Co|GAZdd`G&kO9+T@xPnD5^+b)_qsRykH(=lHD&LgDIKNr4sjR-k(x-ao4d zvncG(?VaTO0BN+>IW~%u>`yg8H?hAD-9zpm+>zpKj??WHDjke5Tp)K*A+N1GSG~!~ zl6<9XRbXH^*~Z>NI}^jeY_aow9z)N33BYf9ynbq@CLuXno$P-e(|7}z)a6eYTQNW? zvVO1TQ$YOFgRIg)5ft_)s|xpK!S1^So2;vT0nLUUqK$FIVC&-T>L?V9D265Ez@qdG zoEvDZW;Jn~z8zUi9!U)Widt{v5z*OCbHaJKx2D*OfQtpop?>ff2EG{Dx$3&uftAUe z1tLGW`NO^Hex8yclMafBU}S@k@nII{nb{T8rq-Xj9fCv;WuHc}Gl076XillY{hg`1 zqh<&ptt9qL$sPAOX3qL3(1o9xPrM>{0#SY1j+_WYFj|201Q_3MPba6)_G<8hXckCr z$bJPLt_Nm_=@CW!I0#x#`h#pa>dI3Xsu;BzjHXwiQ`|H0Z9r$qCOk!}-|o5-hbzPY zc=p$FL$$F}zEO4@5CvulwpGrr}`u|DvPzp>G^~{D# zGz>gn>|M<4w_j4Z-NZEc#^}sCP5AOM6vR9m z2}s-xwRF|PezimKae1L>ycVCq>&d2|_bYl<*3-h3*Z8U(m+hXKhp5+NpigpO2 z#nHsF+QE|&MSwp)KJaz`7HTA^-O6L_Hnmj{E9G!_>Ob!iI^k5wj{tp$p1LK3Zr; zJflhu$30Km+5l*Fg~7IQzSz0X1~W?zZ@0k(nDOGgqy9MK2A-S!Td@!7-_5^3Os-HP5Rd@+7~eJ=fn@3^F?`Gz3=!*~3* zHRFHBcYM28{;%*I-?Yf@|4)mICI3HKB+27{q(xZ&M_L4t`9Cg?b~h#UiDr7(Fe+{u zDq?7w2$MK?eoo>1eJZI*;kv+5AZk)n7<2*zSvj$E;65FWnowLRIJtC^^ONE`m-^HE z$I*i3mHLL821a{Xg#ST?`x}+^f zoqu*jY19ym;|e~w@#|Gw*!BAx8gysZ_}2OHwB%Ru<@fq>1^wps`Mu=a=akY73*uP9@ET~J;UnFa%8bNrIDZ`uWqLZ+Thk8jp%Aq7#BG^hdu9(QJ@j_^}0VANR9@=Vum)AD+%@%`e$x zXSmH zyJhouT}y~k{JML>6+Xa{IH%G_p{mk zeQqki7Lq)Q@^ddpsLkx_1#bI3HT&K`8(xblOyA{FHgL5cNqS|95~Q2e@AQNOj4gHg z;kY~nS0}px77peINUCSEn=G~9%wZmbr1qj0F~OTM>(3VKf1ksD0PGuQi_&`K!0}CX zF?l0+&Q8Sih}R0R--Y>;F<@QGnOSNz1Fg@0H5%#qZ6_!$8kq3GkH{0bKnYC{}YAU?2=ZyK)%pKxJW>I5@8V zZCJdAUUe^A7JNKu8oi)2)TPG(DBOweAjqNG zo^u6PiINBZAzazJ9rVNYB2)ARr0$`h5Yrzg_~yM|wAVLPnOmneprjLHx^(|ezETXn z?g89>9ys;1A@-YJ@Ua~E>+Qy{0RueVeYY`idKX+f=Q#xsLExN2%=WBBiMgZTp08YweCe6m<48y-Q1J| zky*;$NWc!cV0p*#153$lY|JJCA%0AhbbpV|m&va7-a{T05nWunC|qr8ko7-)mN3`siA+s#=>9N+H~5yZ&T1?AqVkXTEY&^O;|4 zj}%320s0cfkr*O2q0l63b+j|oYK%6AJbuzW${#VK>2)&VzrYQ_ftj~XQN8Mb&ABLd zKCb9ZYu7TzaD9Pn#&t(0m&1arx~T~$P!yMD)-gt(93Y;men}CQd&A9du6a|dtAG1v z&XK07X@dT2Tul>oC-o%Y#43`u-RhrGMGy0-MB|C#9Znb z#)qO96NHL$pf1RL{Xrzo*Wzf04q4+-t&d zYLo-bLGi|wcw!p^+nChzCg!qH?GIW-{Wf;9aRB+K;+AKI@%t9QE!se1Ig-L`gNOLe zMA%RKo<5FMkNjT5L}%gk<&`Gv5j56&6i)&)w$3Oo(@N(d+ARG@Q4sFY8}W1H_W;PF zy~t{=!+~igBpJeX-}D|Z=I(R9Hf?FH2+v0T;tsQcwWjxNW@(xLh&{%u#! z+p`0?hg45jf)6&0R7T&)sv0}v^uf_6Gx;M)%CXM}NJ1nRT85cm*CCutD~WGwRxG@n zVXx!eeiLB3M<@x=jg$*%5Z|wnt)gwDWnLKMmk)~VV{rkF_SVy8{9sU|#gMey?odIA z4@%;#T(nXS#^!qZX{SjDdOzni*Vfnx1>ZeUZJutQ{|CzUljX+KsM5*z;8q3w0 z#;lCT;e0EZ5&@BoH}wmGEq~KHzm7Q)r6u0H!DNenTc603HxWvqvqm~PAH4{kRT&4X z^IoYmTkB@-C7~ro@I?&@X%AVL7w__Te)>b6F@qc)*Qym(H01`^(T5n6ib3w>n+y)* zuEGiuL;YExOF(M@c?DRUc*%?N5dkPQiSOR#TPssB3W>$Q7xF~WEVwiSTmBK_dwO$S zow6}Vzs9q;7gKUu13iupXy+Bhdq&eFw6K7NYbwQfFYe<@RPUVigMt1we|AQuo;gfN z9wyqMI$ zOvX6gJ!%6%rjow$w}eE!F|yzGvlB+9Pe2ghiX*!T31&E`4(g4hWQp0n-d!|yiU;m^ z{fDBj+&XYc5$OwR`Wsg5odF~lKi&ONgR_&%_uXuHPd6jB4` zYw0%pvmvmHr1Ho2G=;}hTQG%BTB$Z4T+X=bO_RhD@lep%U@30ADXrAdlt)xaMZ!Co z+~*g3UqKTzx3xc6^hx7ELWa|62Wg1360E9dub%^OoQT7JmJsf* zE9dZfQ{XXpv(sRCy5afM!ru&YzvIa>m1dkL+xXMu#_7Xkf@Gv>`7o*$K|LBXax8mE z_wFz%AP#YI{dC4aKTP1w;uq^BeU!gcp5qj1&z?OJQh=p#CXC;yREc9bzKQ0p16jCP z^W*p~pk=vWw#CGzn7p)%fj1_HzemIz|Ia%J^>g}_7c_{VM2-84)fB!Kfwn2iqCTxM z#ymVR^dgaGi<|)R#yGETEuuISB8$#mQ~0#bjRjh4b!^1+yYtTAi7jXb_t%(BVVEl8 zl*Ms2D(!{3{XuIaY(IpzaAv^>n%5@h^|wrtp7RhaVKa2Cj{%&nO{cwAMAB>Tr7!*U z1V9LW982LK2px_a4veF9Pw?CLze;%T;a|(Ml;&X|DdT^q;Q=uBtuZT4uQt+bxAzrW z?cm-@1>V#nXEZ^k5dTJV=)aI$WW-ta{YJWSiGnN+g)_XXfNP?FNv3KJ#34u>WfCcDq?b2ii~Hh zN`M~&{bpSp_OaSk?36WSg(Kks=CwC8%Zh#scu=R*?+HrBp3%P>Tnz~J7XvW8sk2dW zyjS}ohL=c`PV@yI@O#Q%NXDM6oVhc=+HUkMW0q1|N^Hyz4&nNxoS}6^JMc4?EmB?m ze^3r=oH3NXU0z@&n!_4e&zt@g2^N{MTWr&GhqGSXZh@#bwIQ&Yuu`_B7$u5fl3P)e zgjSpABJ9zk$rM+=m4fJwhD9Ifdz9*;e!7lMGYT^B;KT^mAaz-x+^FK5f2U~sen_m| z)uKUX%Qx(gSAseXh_>sdj0(x%rG|Q(fTc~1{-$_wX0i#sn)Vbw^eZ)AKUBFa|10vdiG2>6+5CjTIy*E&(LbDx<%&h`u{<4_S$ zEUEZLRf+8VYp$OCiaQ_$dj;vww7wYik2bgr-ae|vSckm47nWs8U(1d&KlDz;#K!gU z9S}pk6FsX~O{g}Xf@3$X(@@YH&Hgqfo+H8SPo2FmB;%3P7!ec(?h*q7ot4q54X6r_kBAgCNyYK* z)U*u(&`S@0s8-hQajUs$LxwvtfJxv8wy4)&`kZKUEV+MxpW80ey*a1{=-&z`L^SA} zgmzK1sQG=d+aPOjF6!Kriv6{XRakExUW+j=3!jj?%03yp<>?xu7}N!NPfaTw?#Z~Z z8_uHQUO7PS(5e#8^#*|z57A!p+4u&XpT~~O51$FyfHj}2+}Er>5}{(TXd)3 zgh3hX(c;{G9Ip;m#T(*c&~zPY?LSV=dv+OfH8H;fEAY)h=l-Uk(+YyeFuKD$byNWw zl^^p`HF${a7`<%C-M|w5c>coJJOoC^#3GG}5h&9Kgjd>QLM~)N&Ts*=xpn!VPv z4WuUeX!zG^mroqgx0)|dl2OMSA{Je8u>35{R?TOawo@_vDc*yXq{T^7 zdeFMSJCpdS*6iStRvtpIZI3{Z6D62I+FoX_CysD_yn8odI}>oRbtCQWSoYF+M+1%C zIG^sQVRTn>N2jk_C6qxuX}iw>o>mn@8Ms=^H2O!B3Ju>M(`;W1lP7aJa#Q$IDUd4Z zlSKb0_)@echC3^LQ9IhQ8X>9#yCvxDxfQO^Mh|%B<}HDq< zGevc*p^0>RqT;twR|m8vPtdH1!KZx;NUPs}a=ER-_SEOzh2sF0+Y_sbtl>cpo-i*e zH?ZSKDL8JQ<>7AxyWdT|E~ARgYydY@BT5e?MD97Qg{2Hg@JLdqH#%wN;3 z#AU(>mvsmTd`6XAYV4xy#DAe2a1a}rzmyyL638vqQ{U0@_?x&V7?rVOG08JlMz5Oh zj5Q@BkB!0J(~iY4=5L@B6;;@j#QgzAtz)LJ$l+^Q%%GcRG~`(>s01#eu-hwo%e<|h zvmS51w{DLuEj&J4+4lVMOBZ3kV#d~U`iAr?LGH(Y=W?vs1(`lfIoLjMyN^f;Qt>i^ zxQC~K=HA!O`(l9S3?DbM$=s0#Ev|!0McqO*HL!ObnpOu6OqAkNt3xG`8Rr|N-;%Y1%;DX4U6QFeD|-rm zAL~!`&zZVfAUotRXR8+52rmpuH999yu|W`H9zmLzv@K8=ERM^a8di=4FS1A)U{!kT z>J{U(4DM=V*rf^E^)IW!_;kmFOG`h$^N^N*RO2&7A`7A2i{xh#1gJ?W;YfzWL*3|xyK9086x{q= za+@dY+pfuUXkL?hG1`a;=T%g6r-y##J-I*TJ?q)ulrx?vK_o6pHU4Xl10q+MnxtI| z&&Cn;h5U<7A~N7UWAMiExagR-)ff*c3Bx1G0`UpboTI&2*@{RqS~KWm)@QL7?IKHm zLkD7P#z!E!I(zCdgBxUOBC>63DWRuF+#pc330dLXnJZXOAN)ZP3v(BGj|5ZH;vp>s z^g3 z$luG?4eFm@7HwUZ2K1sAAu|@gmA}eu@>1<3M;rqGMKK0Ff+E)F)m-wU@e>^GQ3|KN zvN|^!RAnHJC9!lSGD#ueMpYfg%k)Uuz%PjIN?yArLGg6@bRP0dkcsQMfzc-L?FnwX z+Z*sjmyVUD6i4WYMb}>irvsXN1rIvswzeDhj8ht`dV`bmQ@G-!NbshvOv$tp*4P>} z$;tM<&5x<+a~f@rF;q0n^058Yn{mwl$g(!7%>qg5xoWkytGh$JXp_Bi60BjaYZoWbh>w9%HKW2(MAqK$*a2}YmM zUxjmLQt6Yk;i4!1s?`Az9+oaxq~*P*(36PL$76i(NP#a*l|S;p@d4B-QXn^~&k_hd zhNCbL6ZzLhT1t`ut`JTJ&cUTDUwtK8S6z`Xzs+^yZ12>)l*A88GY}FB-46*V%FJ5= zZLnTkn*Fc+0u%JjI3wXa{hVTWz3qKD=of*LK}H=5Q~dGB`{O$|^3@IPi!&5hF$qrM zqC8AvL=ny)+==-D|6+USDCX}>{lP-WG+@@E{UfhjG|)h+Co-`%%Cdx&XitVM(9Bmo zbfbi!=2a95%2IsXB}FYM;AmxA(~6bQdh={LAyU7@e2Fqg1rs4?_2bU_p+7RN+{Y?v zHW~86^?H0{cv6hOP3M|Ht3y~{P=(f49V;+U>e1h6A6JL0eO>vL4Oy;=H9MLL6M*)8 z;i^v$BB2?;8qWgCulx=I)Ggvj(dsecjuu?Qsc{48F2OIIX0fIEk=|L9wPF{87v94vk$W_&TaS)W}bWL5`O!cjyB9 zk{%bmlyewj!t}Zw>os1O3#?s!>hGV-EtL@3&sEn!zaIp0PwO?i7yhtFkKS&ud|0t z&u({g{w@xc&y-3Ye_(#18Sxn?LWhSNfxmH4%d|{AXqF2lHT+8QyrR&;bkfo>K7&sp zB;0F}?jTkzW@$#JhcB}}e~(!*t-VV!*yv3c;T0ghRRJ1 zc*od!UW&{DI^2t9(rnHJ`TU|e*kCQkD+#E6pe*{yB7kkBXBolD4OaLgK%aBr0d($V z>_VrNtKlwslO&-+lvYx!Gx4rSdGn1i3hRVt8tFk&?ydfRq{;-Bxh^ZDv{* z6Tf8y$ntlJn;%Qt&)Jz=V&NpfKvpS}GhWENd5Cm_j-Tc)g01K-fX^ZueKxYGTWqcnxDtS5E2db=fD3f1q45|S!Tbn zp10YrYXPPRaof{59EvDs2KP@$>0H*2qd&bxe}rR>ei2SfO=W^X@;ZM=^+b2AF7seCYL`ep1v!qbXyOqxRn=+TcarqscP+m`>LPBReNf#D>GB( z!jjJeeWXGN6}p@@Y0*k>dDkMnL&kB9%!za-S0eTEe6z}4OTvuQ2lmDocj2^5 z<~dx32;Q7XM;*+l-~|!|hgHG-LK4D$lmp$MOooirO!s=nrGy4VFd{ByZHo^wW(3Gebe{Kp_An~e7Z1Cb{^iAHFJ z6ZWw1w@Bi!Z#SR|kqZ2*ii#h``nI~OYhx%|zN6Yb9}(N0zJwsKq!MfKg+ z!B1cx?MHMARPNwGGj7AUe`yZ@nk*3nmvR;ZCkzE*IhMw+#%}_Z8raNiUUc zgusp#_{92Amxb1gm!XZLv0#6n5NQOwHzvP=(OfVR)#9&$RZtp zj5B69>tzv_{)V+B@N@>HZ-P!7W`6?)dR(P)qmGr<4D5GK&0tRJYO=~G^M$tkLJw89 zS?+0LQs80Xd^74+k{ul%*gpgC+34gDtrygM!duMry#{+e-nCb*eE^-ed}#I*(D~Z4 z=6F!J!kQ|x+nXdPmA@0<&ctRkz%~jp?GF9YpgT> zj@o^cXFN>#CS@Cdx{a+%hNLl`rcIcc3?u#?vWPhhSO>jrN;boP7jo*r`F!d7sw=H~ zh_5+!aBTR2v&Hn(dub2@M=gJgmpdr^QBoPp3h^(l_1m(l@IrXd{#oL%Bq(bJ#-C7J zm~B`8=HD-!2`FCDs+ydlFGI8=6J?%+IvY`WLWK=6Uk0Ee|fkc#20o>+QyZ=J!p)91kEf z@D=PwORAwdg&6hknw6n^y%HjRuF*L{85BLKVZ4_cEx)C~Wc~mxyRJV(^!4hI6Z9g@ zLWaA*y7DyR#sVJ1m|ATztE;6sC>%d$q0)S=HZLU7)3{)2_?wt!?W+!=Gy(2 zcV_NwU2%{q&w0v2Xj%F}3-UlWhv77_14$l>qBl;%!*YP#`Wn`tKo!=t&dP)Ww!yt(hAu)gMJGq%uJrceUS4u@q3eb2EnB4n@b>?KJ z{5gLjv3|6IRpFR&BQ8gP+(zjuLifmiH3^I8yUJR` z(2*clhm&|HUv48YIG#v1#+x^#HcZw?1Z_*~-`t;&6drUVDj|Q;Rx4ZO-G-@gyI;Ho z4+1v-yC9hmN>0FKZC*xz4XEYA7cW2#C(^v)t`2;+jmA-e>5`ED{m1$W-dSl1=~X&) z*rUgOmVqXL11vzL2hd@TrNp~ru;_F4CMj)JMYX9r}X{FU?~GRF08 z^o2GeBrihR1DhJrSFH~$24U4XcvPEFBL4Zg+i8%DIEz)_Q4i|n`@6I!CQh8tX3dE| zwP$cFrnw?#c0O_WA@uC&p(ztYZiw4DSbQe<^R6+1o?2<^Y+*IS7XjDL1+H=zvlE#T zvE#_=CYO*KE~Iu4qP#dkNMvG!=_f8kT6Qp1MT%VMnu)9RIT|3VIt@L2X-PTVKz)F} zaj#Uwl)O?sA9frJo`SwMqfz5lij{IDS6wlQ380JH~t%FCUjP>s68^wSIZ>FWBbM^}cwCx#D}na3Q6 z<*%ewq@4l>3W=!RWat*t!SBwT=B)djB5C^|8VfWKT^PNuV%d8*t2XIv5IfG}th2;Y z6Rd2bW)1<40h#BsE6RBH-EY!o=9UT}kB11REm9XtN%QoecURrXzkvOhCMI}*ql6$! zsXtuO)njc!HM~FO`5S#h)$iUBTF7TAq^)))Em#S7i6=|~La>_)GBE0(694q}_%E4t z9LplKGqBUu>Eep*MmMWa?Z6Xq?qPbT7wng`~ z);9@&4a=8=b{5$f5JjGeXg1ORNxnjos4|Bz`A_Gbp{xG|RU#*Rt>>U9^`)N`NSs>U{uE^|1 z`(Wf)h~l}btiweqDZ_hXA~jI4q3@kr=2p(n<(Ne@r|oZE^Y~{M5eK+_G30;4YriQgwvem=B8?2e8J7~aZmO^s%+()>ld2Z7UOj&><%2AMd``xi_r%2u6Di(_Bn}?$>K3-SLKS+Z}BE8igTbwA_b}DpF!|0G(N{FrzGGm8l$?V z*zJIgP1S-^J99|)cR!yL?g?1P*h3n;p)SxFz)i)Ajh#@Hg!IF_8X8|m!pFh7@0`0@M|?1Tt0-+;mG66f79Ja-+C%Ki0>v(>F=Ty zmM1cC<)@hA9EMy(`j)|uc5tzs7KiGB5aH8!f)B`6aGW>1m2x33Pjvm zts29Ya5$Z=r3_)UU(}PeA_9lKLCj%qWWKf>^fnm7eAO25B7~k(_+69Yw zYZce=`~v=YTeQwz-3j7tP*10{WoyW9WTg)00V4%Ox#BDJt)x8gKHemik&8*VZ|7^cE-^lMNQ}cBg$aRO{e4o|`BIFjrELd?$%|qOdst(K_|8zfw#^V8~iF59d zf+{+HT@yo9qQOW@b%uH8_a@24wFUV|Z@O)!>3{zU)M7kCtTl^OHMbqp1RkPh`Jmqi zEQ-tbpVg?q_@s&O^|&qrgm-dk8-GA4;ZOYVJEKN$e8z~X?8w+IVJ~^QM4|P>!pl4< zrwz~EOa|tTbQ-ny~0T2_&)ZhGd29)hn8XHs4BIA6J-@gdW_$@+sgMuQ=dopVIpRACb zt~nQ~xp{%!x`k#z3hzC!rl#iaM#LV;<`5Ht2PGqZ=^^FKi+0#A+dr2`I^1l-A-9E! zXdGsa$X?rcU&JLt&xHs~ZqB{{uvb8vnY` z5VwC(H9e&U)4A?{FBNg8cTt1c#mk@W2v~R9q<+W_}kW7k;!9SY?EII@t;Ve&c*U8jcIevkitEL zSSi|xrh^5Le95qU>hHQTQs$(^*@*tUq>iQGP93NtBXgi=W{~-e#M&)31G!!dwr^fe zw*!+RY2md=_v+6*7xgIbTs?T~aqC=?)-uF@tyJ+$)sThuQwi&AzXN!(D;N-Ucl>|l zxjWRnP?x(rHT%9&pev1VcECTNx)b1zpCCkHTg#` z0Bdx%zi{-I(+C~j)a-7bKmo9#cOE)z2$EXxC|4<%9sEW@5zVrcy&aZ^rx4G>fJ=ox z;$?qE_UauKLmG7p9_D<0Fv?g{kef6*60RBnye;$=1=n?(d5?73st@Ex@QfXh#z4jLIO->_No>$zV!mv1nh$z z3F4kr2y8yzQJKzcaWRLq@)n)>DwskDD`RkP|88-ISjJke@^19xlx#;cRPtpZHkolw zHT%&E13VrX-(!{ddVV(MEwQ^*inOJuDQG*V9qM6EWcWgrLmOI>Nm3xjA4k zgUmb!*@*C|(*b$QoBmkzrI9m0u+2wJnhsx%jX^@{umnsw^5?&6Gu*g3h8RWnU*NsG z)`)KWTLto8RjtyEzVmOYw5zV5x-^V9gHr{a;B{k3o5q~oKq7@ugxkJk;dR}TUhX82 zLhmnlWN^j#+V!iXzDvAcTYN?z5fc^mlMa4PP<@1%!$4JLVsVz!Yakm!dF*o$nzk}X z)!Oe5I4#44z5TlAt88Heik4=Ni^pD)<`#{}F$Q=hEl=CJZ+AdZ_5$Sh81vwdU_!3F{r44 zO5@*1^M$Cz@%)rSk>^1mXj(}Y&#~LNZnQz)U=3Tf&~8~PYE{BoFk5LR)38^4Lj4Ug z!jRE(km~2=2kMRm!{Ie+2zqCjh4_0j-fM|9K=QU|IFT~bNXVx{%0m=|%2O?6JD+=4 z1MhN~!RL=rxOB$mj#vYsGO;ZVQvjqWW`88OK_1C#;_s_}tU|8)OlxgY|JB|-HE9yG z>jG}uwr!i!_S?2?+t##g+qR}TZQC}c?cLv6u}@d5!+o&-K}JPnRn(n%-4DGM^0!ZG zhdJJ1OC34Kj5fj0#jf)6QB$}*@b^;FlPJpSH>07OKNBAxhzXA&TJ`)JQOVn&kr*Gk zktQd8Y?ggdjsEL#p!L!zYE2!y?jr&Y*-*_AD;z{kCo6(`@Y-DAPy#`euAc$>b>wn7 zIaj)1gQ$yJ+i`NBx}7!6oH-iYhUzuOLmq?^-vAh4e=g{I@@@&G3);Gyh_czeiz1_- zU|+#Ew2JApSK7KDLJPk1W!L)vI^WY~xTLjvpwRc8mCm{)*G{EUmm2!dq|lAk3Ki=k4*#1Y`a{S+uP_jJP zQgvT$Vp3j-RisPD<2_?nSB!s8ie#K4oAH4U}dGD8gl$|=L?>@%^AE21%WF4c_#RUPS3VSn_ z`S7})6bykf%9^Ggk}E}AhEE|5H6CVX9iHd-fCp_z{j=p|jx$D|(Gq{Y#-wdMzZisE zav>G*>{H2d2qQ0d&<4h0BEMq@vRdwNq5ue8DuHme-V9>jpP#eZ^telY?*#29jDK&F zVIPRu;?MG_1qRIMXq5s%1Z%ot%wLeR2cytb9r2JQEsOb+j`+!+-Y`cC+oGX-$)_zo zJe5qy!Z)>j5-oe;<#%f&Ruu^GBtvH}jJL`yFY2dzd!O1@diLLU&wWeZf}bA}f3|tQ zeZGGD%G9gi{bQf+yZz2r6V}Vcr~k#Kk(ZNcuqd znD%!@teX#3l~j`nJ1IaP#;}>Df2PPo6}+TU(C=N1 z7N;bMc8fj22kLm8LUWw$?o{r&>lT(%hlnU{qA*Sf9B=aLt?kYL%~sd3;{f_s#Jxpi zFj;y+wZ!Nh+^06r*O~bar|r1*X8R_tk2SCI_kNSZ6b?8AdVuP`vjfq^SAemnkiFdm zT8Ik%e50iAES})D=^MbWSqjZ_aF2qrU9+!aSkfwpL&GVj6MJ4*WaHyBhSL_PecAzX z5sF#4^X4IF+#qUJ^aTBu4E8i75_N%XrC=dfA?bsj!E#Cf#;4r;%3k)1_3GEhw8flv2cBuw<*fq_`^_WFkpX6=M% z9%%G*2-0E+t3wakb{A{cKa19l-ron?C^PzrbtJi$H3Ub|m;_v-hgxlLHBcB52F*iY z%b$#gEKs`11eR*^n5y6z2KbwCRb{V5O&lMfogzX4e5v%zwX>Q#Y-Xnq5g16sfr}%? zREv|c+Oz&<|N7&-Zi77I%qhw*zGweogr0_5#0_4a2$G>3Vq(ZpYFuNDVTL7jXpYC2vb zA>pZ|0Y$%^XnA83|7f?+=Fs*hZofC}WD?Qn?2VBM;y^#gJ=)<;$_C=!6P)0RUGRnW zD?Z$ulI)Ww_K-|lY$+8Cdk8!*!h_9mU>z_U0qm0=Q zhRTNNM7ARVqQv}t-A}38E?a^-@Rb0q$AGBeyMPa@6`{C~@P|8LF0mQuAA~l6iT-Y1>d1iBmILaRotL7SyeGq&Lqc%MK*i$}@O$I|p zdR5TqI`8aD`-(IBtPJ3GH?JzkgPg&{R`gx1C~tYoi6|B#RDSc^wI%q29W-(ekJ`u7Q!Jya@a7^9K-7>7@u)Q$JnLXxYlZ2W9ZB$IBc1b`Qm&F9bl*7eHj zpq1|ztm|Q(+=CZ4Dw4i#mcjL%{Sr3M*!<>(P!G_iP z1!QNRIzK}zJ>aP4)iqQmliwoQCtxKBY8j+;NVoSTWP>A8#$z0!b=cV%F;t^?kwpr* zkhcW791?67(TnBVgly|p)(vY{JfaAF)iy9?6PFZbsm;ynhEi;$spTgq0OnR>*XHXI z7Vzh+=?-LxW-L96GlY6Otf9~>*y&EI`IsrO_OTL`JS3^{{QWK8B=_+8Z`+zdua1jV zt{fgZ{&Yfa*;){{Ezk$D`{$T5`T!I2SX^u*IF?c@Hmn79 zz?D*;P+UHFa;;AT^TjKKk!ZToiK*O!>L(6%ZyK`}m&%EI(O>l6l{-`|_Q-{=+YKHg z?SOi>nGneq4W@8@dCQhFN!Ms9i&>@uAxHLGJAzsiZZsgc^y;;_Dw2FlHc98+5`y{8 zqDn&3kV3g`D{AW*{Kc0ucj?g!x5dO{XWnB=dV{9!ylLxPG1#b#Cvc1(E2zfLQHTIr z>;F)U4$+_#(>maZF@5HDV_NUJ6^~tD1_48}znp2{9*^7`z=#TfE3zZ}GcwItz&;n? z7IUSWOw}-)LxvWX$jiZY!_W)vTr&d<`8cjP*X@_1){4BDp}85!vIdg1$j@J7CZ)MQ zu+>jEU6=XD4G%|X{ld$W1X>mBI0Pa_q_O3Kldn`0l6}e6^;lFFXm2b%G{Ok$OMW|G ztn3jq&I{9v-J_g?DV0x~@%DWJ3B1bXq(uR8Na zLPY3{z}EEyV=|Vws*s}-RL95o=8qavxMavn(A`B%UZ`>}<0?P7RQ$x?F)F7fRwaOom7{ z-Nl){i6>Wm5cHj3s9Zcj2Q8^stQ1jH=qFtUSe{Za&oX}uH5$1IyLMYzhsVLqzuCPE z(<&BS@p8x2Kf@~4=xAIu$7@(I_blSE6AKpFHy7$Ncb^X;H7AAz#k9z0sYndv5Ph>9Y z-h)o|X_aB)5y0U;^W5N^+=MQj5M9#DQwA{41@LX)P=kf&A@Z-*_Ym6a?^~wN8&d@C zY)sbBkzvBsm8os#8G)z`>XFk1ax&8~}F~naFA)<^@W7=q;Vx8A?{wl2yQA{?be8%Ab{lwKo#=;1l_Al_ekcq(kS&`|me?^YG2flhyCF_3Yqn`^D zk+Inu$|)M;(%Wuo;O`~02LLnB%M}W9D>H0P=npdmL}qmUmsa1gbtmRq?uRq-cfW1@ z%#xEp%+gN{xtCMTIBD?>Wgy72CunG~_3kyjhhpIkJ6@_f&b2HM;M!;@jIe|0iX-noE#_-QlB% zvZZ~!@kNFqq7u`Zd+P)&y8RqnB$R^)(Y=kYzchLRlFW@pLUPx;`0;dLPqo?XmS?_p z3!Oi*%@?4$8aMv{tHy!16NH+hSY~HR)!RwEHUjVM*3iBf0YY9GB)KK;ccP(6t5k5Y1j~T$R{@3fPisT&QEMok6 zLC80x^ezp8Rp`?ZjdY5KF|$(TThBCZVh03^E*B9y=!%fPL)6^;PH-VG+o%diDhIn= z{%sq>rVBc}L8fNtN;?0y0_(HYBKSNNFBVGbzuC((h)UA%AjK)eDphfAGZoG)WFi!P z1dZHqc;7jtQ}1yh^oettRe#?nF*|I3|Lycn;Z`cMNpKQ=33;D4T_B8)6v5w)uT&ko zmyzqt*!^ysF4w3SAyO5W<2y?#7N4`Enhg?I$zBS|83HXZC3#+o9bQ>jcneiIGn=eJ zB`@~(Fw@e1;CtN%P3aQf?>PSMU3yyn!G39p`;MQE0~0~shIGrt4CwII(Y|cvJawkb zJ8-iK;42+UEI5+wcR1{<>!Ql9)wgPnEBXM~$EW5wtRa6uidFw9&pJ4%_X!#B}klb$!9W1G_^GxVKq% zAA%&THCw|pD+DryGd@lt43h%aftKDXlnJ=3{3IS-K+ObU)3i)zq_VrKDcwwdOv=F0 zMG6MhmC-}^UfDd=r}e}w`o7F=evnz2#NF&g377PeES!#e51+M4cpITT>LT_Znx9d_ z`p3@jO{UyfEO2?f`U=O%1wbsoJdN;ahKsLKn{+?1 ziE9$Ts~n0uI4tRw{LW60jTZZ&g{uW571+=U<;Ce%ef~8q*T-78u^e?VV2itMJ*ok? z%$CM3=O8U$-6T0Nl@yV|qHo*9Ogdn(DAfAr9vWM5MqF+iZp@f3TUw|;7s}cN= zlYqh$qWM8 zNb%LV0_VwA+F>TT)s(XsQg`*>H-0fYLSF~`NBYiAoP|w*@Bt$MVIUfp<^{V{9WQvN z)TWl5E^@rOVx1%7I&uVFiS}zoC_r0L?)oo1;o{?4(U!v@nFZd7d51h@z;Tj@A2M@$ z@S|*a6WfAo{lmt=p{LVP1#A|GN?XsFmnlN5^NZmKr)nV1THX_X3uu(%3b%huq|o?W zysb?x^!kShz?L{hn4O^15(JA+#eC{gz|9yq;BVj?T`naKTYW1%#|iMoL^?IPGG_gI z5vAwR0>1165)>;+7RrYgq*)6nK3`cKh^9nM0$3=m-B(Jp=ZX|z?|5_0@s|Tcjk0%Q}HglYFDVVv#7irMex(v3Nk%1&=Xis@>1$9Ojh=rBVXu z8#$qWc@~H1bRKgpCMWm+dky;1<}Uxf@O?HR+B*Jg??bo>K|Ft4P+^x?H?|Xzx`Vv| zr64!ABqT8G7r=|Twwu}@u$NN&H@AI95Ox?96Qv#UWZ(5`YHr4bGC?=+>2ryg>b#M| zn3Y=|_6P|4Yj?JAKOI%BXX40~BU0jse`50CaUr=MflO@pSGgO>*(`RGp^Cz>n2Pf| zdA>>*YIwNV?9e^#_GC4|u19ryW-vGA<@d<0uoC-J|A`C+QMDga@8vUG`V{y%S^Wga zns~D5A~8jO>gGR(K2OZv?Do9xgm{n|&u0cvFV_4r{)eSBZd}Dwiklj{H&6p(CwZ=n zIXKmaZWGeq?@&*sXMuswutLv>C$QV4i3iS%yXL!Ii%-E|a01kH2mUP(VHAOkgVJTf zU3WBbL!p?r)eMen7PkWN_iE*%UOJ*Vqj5VEo^KegYa613NhM$@m3T*_+{PA#2^Y7B z&WcRja`LVZkhQU2}`ltjt8ZA6MM4$|$R&Y8hP&hrmm*&-D0WIDiOp?*dIU zC}`%bhOESJ$2*MZ3KAW0cF5eJXAJ1VPPPxA6Keq?dU^9?to~4l=-aN;>7?MC7%$t= zzbgjM5(+`)xexgk}DZr zw5{WOC@_UG;C~JLLFPVvZ7`?}JNLNd%AU(%=7_DF^zmw?r0f@W1O%K?@Q;1($@UTR zT#S6+zl0KM8#FrJgM;M6h^xb7+lS}sw0MJR%>*H?7WW33a}WNTey+E06hCT=G$wfy z+B$!*RK|4`H(O7X8w!%{h*|$cbe~=K4%WLak)73Vq&Yx~1-lo_HgEGWzfge}8V}Yi zojjvocfHFKbK@@kexvbZCdI!JQBp_JJL@V!?yX7|uUov};uB^?+a3 zZ3`XyjG5)-uNg(%nscb>*r1kEHOX68o&WZkzh<%XiGKV`i7*&rk5i^8WwML4oswRb z2QJiPaBWB94aQfy*!}n^3%|ZU#nUrg9i|1Mc7Nw133xZI^F|NFBa-vh|20{FN{{ng znGot45d80Mr27TUp<;XCo{KNygr|WZdxdUXlWip6%2-1B8Q!s9g;N*l+XDLE3`8ks z%Lmc)Nfb}c1Swla74IGCAK0Z3^Zg80`+~Qyh^IAFTn7RAF*ZgY_^C#JubJOfh?*?W zqVg#;fsZTv^4T46ixD}9P=0AcU2RA3rNC$&q~|Mvzn_c4eyUsoeBJwJBIO{@X~E#6 zCQD|IkFn(!*vTI@E6-YG^T5X)SM{t_N0zV!(rB+KUi00Dpo{h!S$1Q;8`SPIw)}Lf zzp$__RmXqC%eli-}bKFbV(HA ztNYFk&Xd4fZODPo6A%NOs$aUc>|n<9H9XVNEa2uoAJMXP9xM)qiO*Z6T~s!{AI_UV zloo}?wWM~h!BDocw+?0~<|2q;)5c*%>Mv{^VMf157rlZk zu&F0)53wZAaxL?he}gV??I|_lJv?5B)ymHgi|hIY22v5ges>5l2B;KFWOIng0Jtzx z;xr1+-_61z(Zh?7dHC~&Y>)JY#BVY7L=;iJ;aafo41K0uAv`M{nuU{}52-u&?UTF@uxAWUp$3U=E1C={5c-c@|RT){!``1^q|a znarg;NOS;*Tp2c%dZ6XgRooOqU9#Nkz*>7K3Jcu=bA|(^$~)I_iQZp{Zwj_mElb@*-i?gc21cA}}^ z#tqRJnaxUjEM;tWGbih2#$VGe#r}JcWMoLT3lOhq)@v{3seCPI`4e6OUY4<{;a+F` z)3s1mrd3lO`s7G{OOMb6X?Qw76x!Hsc!@u&+sE>*r~tHBvxAzh!w}G%zmiE7OmDHl zG!UEXY;0ovKE)!^l#{Hj=u5NnWta!TrJ zSW$<-HCF5K?x6>*9;a^lmG~K@9L%T7hCMc56SFFo)pISLgT$JHkk_SAid>&&U7bdt5zI1g3Xd# zT?62CshldKPtSa}t9VaiQM%%hna<<7uA&_@uS<6}P{oUeK^YkF*Ybn=uo2N(WU8;r zMh$Xzp(a8wv(Br&z%y$v>Z_A~1|My<9`WaCSjK(*(EC4%kDOPMzGRa%Ezq62O2iyp4b_vwm2pR zuTzQzw;*4}_b=vez0t1hJ7U+%gFr&_t3Mz<0i{SQYRyq-2JJXzuXwy24Y19={aari z{#<2Z%!;sN(eb3aajGns%xSPmR8$kHXB&Uzz!n~K$JIf;;;OlbR(W@@9++pa2!&y{ zlk#-G{VbAwms$Yn=ot}6G8Ji|LxAG_dAQ0NX!gRZ$(J9EfU;4YKSeko+8d)7kb6#?vEfT0I0Jt1;RNW6&A^{(If^SaGBH zS=dE1adlt*n)t`&vSuQmC{?qb^fc-XqU}+vEk`(w;pjz0NbvOS$}v&ES>2?o8#J&! z8tW;I*?`VD+OSpxer&arIR%3>z?Np%K&Gm|af0=vWFBdKDDMuc5?zGRTLo)-M_wGf zraM?^ecwPdO`p(-0*w9AkBp}H8B96)r!>fsXSQPdfK47--In1WkRY)D>sJ&KR`(?Q z->e02o@v^Gj$*I;`LDa{vxKFxe_?53^C^thN`*PKurwd6$GRYnO5`5qWkD@DUOt}FT-X3k0PEe|OLEAWZ z&fv>q7Tfq85VG74=)Au?b0ZAUkOZ8lR(#~*4+84=J?e{(26&l}ucu{JC^4ZHXu2(N z>{Z~pN$w3-#pCae@se1qg*as}AQSR_Fa?JOd@{=$EHbbr3V#l?Ec^C-CZ=~W%mUu% zWLML=Pb~PeWlnZKvrd;>hWI~bA^GTa!8!HNRrLnrgyf9lunUzZ`!6HHjw5Ln zKD*ll8n5RY4mkQ}lxjLpT|wbS%sNQ5HUre$i2s}kLzg>*2-cmv01=CsB!l5pSjg3t zoFpsoo%6NdW*uswp8wwaB1ZWIN}><7!yQ#t2p*F5xXc4y-DN@G)Seb_wbFBsic+aP zuknN|+P8}Jo?m1jHCM%h&IeyS7)PtY2PgD&C8LI2W)ktOM)C%61H10YkKVyv9*iTG z{Z>CCrRc1;XLCsI7%vmEj84rL5hjM0MPmrd<{|H|#LWiJMS%QIo(scB1v&wN)^7G;_ZUz+K|*#^&ujkyL-n@ zd^NU&=T&JuLQsxh_hl{m#lcrQPPar3#xdVx35G~TH*(68W#BRue?a}OHi&jk5$xef zz}D0?R7nW5BB%>dv({{ZeOMBRTZ}u)A5GQn?@_!Kc~*32KT?5B>U{7Y?D%6xrf$+3 zRojBD@6Q)9QPuK4N88d5_e!LW(Q#<*fDW8%(sUqV_pZy7T37t4fm)YpQn)hU zE9GXuQ!2*tQ${>5evKllcpxk6%e9cu$j4;47fggtVAnx0PO}tZ$ZH{XO~Wyr94+Z? z_fK6^Jx?pNKxis>6jR-rzm&WQ)PN7RYSe&wuV1g)2P^pOXmHKag;$4Pg3;py~_fT7Mb7-;P`Pk-d;160iDKD=DC2 zV>9a>grIYnaTcIZw*yAMb`<#$-(t>*h-<|*chqkQBvn4`bp%K%!#fp0`s;iP%#b z(KG96i(<2w*IQ=uEH+he!Wn6A8fYk_uEvs!VTZSUU*k&59v)K&`l8CLdXzUbaC>=& zod9E;-y448v?oSvx1)@;azqJ?l>b+I@v17;ZB%!C(b)rFE7;<kp&Cp z>qFB!qE%q|P8v0F%B&HCKU8<)42rvY0G3^aOHFA8nJ|5IiaSm?5R^tbF`o-1In8cj zHBS_8YK&7~mlZmeO!a)B18>1;@Rv~y9N;W3*}&C>X+>^2vqGi^b~!pfDQ2a_R$0p$ zkD>_7BbEz(?D#kTUP8fS^*-E6gqNuQDQhN#9`QFpMJ2tI9;DM7iWsZCQU4beGYn}= z5XNK!ec(K#g|exMiwZG*O0ifND&eVUiLWwct(HW-p%+JbX5DUxcnuV?uR6qTf=3ow+X!N#g0FKRFjFMv-d8M#K7uOl+3fh+Yk4c^ zxKZK!6S2VvJs?fO>1C&<6M>(U+j+fjm@QD8{oFS0z_t1mRc=_-gY_`2<%(I#@*AlJ zWkGT6>UAi1aBB{OdHym~m2$-goB78pd0z>~-@m_u38T_tqRx=^FD0Zi#)fnpoJ*2y z-S~3>#W1)r$sof@|KY_U_U$7oyf0oDH45R7`)ptNpr4cYSb$(D*qIxx$z&z0R{)Zc zL-cyVV#DnB<&mYpfAGmUx4MAu-?fLc+ffr+xjH6iMZz|x|6Xo|$54ubW;JgLl=XYs z(BJYGSgjyQ`yzS}4yF>{&tSL0{G9Kt@Ie7uSe;na4l#3z znWC=u%)is^?m3j=JnhfTosHb3)RY@1a)|tEUlxq{n?k(3)$Nl+CWp#4TFIAKB!17_eWGN(-oTZF6YpBzRxr1|TTe8@vrkg(X~``93d&;kmFkhK7~v`0tZat6j;f{2YK z7$}2+i-I-xV=KI?ryC!}{y$Md{}DoD0y|)ve(k%fDW~RBfCtee2dYau!i)En%0S7_ zi8Sd|3{_7T0g(>7AXN+|*zvfO*?>o_&~ZGw;KLo~7=bsWVe2MR>LgR{`74$!kHDH4 zfA?>J?u9c`WJJ-cJA6#9KbpWMF=D^z=I1nYGM}Z1iK*D?b`?$K1C|N-4gD$@fQj+? z^PbU*xV;hKwE1;zb`T-{nUB1fz3Dq#X#NtwEs_P`I%!#iX#&;MYz!MfaVQSY_{^Ko z>pis6Em5$&V%6G>eUkW%;ksTBZeF#&!LSvb83ontY!mKS@vqfY_5L2NF;A&fuczBx zZVG!L2$2Um`r{BrO311M#SnF4$q>x+iwEUeAK!thBz?UP?gY~vZ3Pn!^KEqyRq1&f zI{<#C50D2GlZ23@52pc~;~WQ{w6?N4ztg%WeEM>Brg5o?gh5%t@bZX13GsX4iuEAi za0TWYN*QR3@1lsYc|Xh`AvZ-veRS^7{(ELor{@$jIG*ZR2*!$Y=K2n)5V!(T(|y6( z)A2PnG3yfz-6AjTA93w7$dq6&IIF3uYtxT1xF1wK{sR<-HFDjt9rsRUU7;{L#c4AMgn==Hfxcbb@Mhvw#WxYaN01-vMEB%0PDaPyE0 zKMw1>9#HT)y&Ku7;)3IEY7;XK&G?%g0Pyna;4wScw{H*Xjd2-z&>Hdt`R%5LpqJOZ#iU0)* zA|bazFbs8LUfI&=Y|S^?vMly(1HpW|h&;xUHU7YGgp)(;Vh6`%%D`ZMY+wR%@NJe6 z%fb-33y3pu+Gr;$5jq~>PzT#!%RP#%P+fU=I630Xb$gU#M5GO zu_n^Nc`H2Z4TSTiMbh?R1AhmLVn(4+GX0)!s%GYZjM8Q$nDf2j+L5QKUULzO@8YIT zdI7`xN2zk~vL4|D0#-Gp(WDsXx>cb>fWWmgFzvb@K$J<|jf08i zUpbTDx#&?U<=!IgS|l|X$v&=jg?d?5d@Qx~*)+COETXSAm4Kf{j6O6=5nxF2MaXCi_1fmLf9)_WbR zMcMNh&ew8zfaPV)4=9wv05g126%jJD{h_1oZVKH&eYs&n__ID~ZPv!g;4kzoe#*?p z0R>^VUR$%!`5h-dwRe1W`XIw%k!8JZNJ-TD6eXk~y)s{=T(xPj0vvuFFL$M^=Ve;l zgU?+c44tWwqNS#wf$wqsk8+-X`p2qO2RN`$!R+*1m9k`5ej>DujVS$m5VLhiU&bD1 zp!u6)2tx#Iq5~XmvM&lG67b5T131|^tzX_uW;~#-y0R)So8BO<#(WliJ&ggd3xNVr zb&_)r6-=fWe9AifHHjnoOy=JLn17wr6jUqW(!$5!3!xa9bWB{Tl?*@{=Sy^Zm+9gQ zmZ_C zfVrs0`IT0G5{wZ}M82X`xBz?WRS;Y}Xowl=yhsXbAPSA+X*fGwfMEjd7hDnk=9QTV zgHm)@aF%Z7XR3C2oYv{HS1Z#w?gjEyFB)Rv2V*-SCqusFM>hIarV(Ik1d*<-d?T){ z%f37KMW8$|Uffe)2~&oNH}kgCB^z`M#D|oic{<>Cfrqc>7KNw<^br!5Q(+B0zYm3_ z?xKvA34>XhJVJ0Fq3o&Ol|*5_sd8INZT=d%P1^074> zziZF{qFdOdj}JhhU65l-GTwXBYnx9=O^yL~mC~{JdO{+OIigK0Ru+;BfG;n8)a)w$ zXZp}}uqkCL)K>3a$gA+E+69FN;djK7=>}NVQoLV8Lrx*iK@{M!5?zN~wb-D4-v_xP zvD<`4Ci$inWkLUpfpb%E(9E?y9LfK6MlF9XrwrWCR9cjoL}A_L1A-AL!+PhwpHmU< z<0``zycXD;em&#IH28M-@8HY|G6f2_8u@}Bw_I^2EBACfBWrp`OCHQI@v8Q3y2ms>zxrM)qKV-w6VsH`j^*1K{BafbCmL_CLFYmm%&F%9&sK4rG z6Q}A>_h6U!Tlon4gw)j;np-Ukzlj{ ze#;$Gmk-e6l@T=}Ok2ZbZK1_xz0qa2x6q$ z?C+yyy)AV#f|8}EFIu0A{nXgN+Q5L1Pb%npuc~)4_qTvAzPf)_(mB@v5Cr(2))3II zfP#NdNo!=Fuer61ovW_5a@I^N36J8axITL8d6bHr3?$gMHh{jz8)rwbDx&3%W|TW$ zklRAJEdT7Q5ZDWa4$4e7p{BPRAs~JIZgh|vUZN1q79N93pwgK8%u+$bkEWfE9V=pD z*SJxM^mp`Un1}b88dq1>z@WRM$5SGPcw(oxzMUz=6neEZH%8H!>>Q(kNb72k_QLH9+!g=G4)kx+yJz?FV}Qv&DJ3KlPJ|KuEcjAY805vpMTgsE z2nl5a1_RzM7Gr_VUq}t7p+h#H%_@Al^-Y6uUXoUHM|Jjv0{5`+`x6pEPaBF01X9q= z-6ep8svfZMk-P_}RlzI4XXN(g!cCW97>}7qh(7uT2;W}5=TdHcBF;N(maHzA)r{7} zc4dLv0#^5z(P-}eg}CR&oqwWNqekKkp8|1S+37~x%&-G7;lLP#0?7p(7*j0ENj3ef z+x#_HCWw>%c^EnbN{xSZZP|c7w9L=Xn0NXCRL5n{(6QgZKU!t@zsyP$P5lp^_%E~a SlK8(hE8zd%to*-VR{jr>EP9Us literal 0 HcmV?d00001 diff --git a/ITS/ffitparams_new5.root b/ITS/ffitparams_new5.root new file mode 100644 index 0000000000000000000000000000000000000000..de05ea3eb6ef0162ad8d7069018a6635ac0838da GIT binary patch literal 6098 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 Z{FiEfJ^AN8|Nl|#xfaQkhhQAwKLFW3Hdp`v literal 0 HcmV?d00001 diff --git a/ITS/libITSrec.pkg b/ITS/libITSrec.pkg index 131bc23f529..884c0900e69 100644 --- a/ITS/libITSrec.pkg +++ b/ITS/libITSrec.pkg @@ -42,6 +42,11 @@ SRCS = AliITSDetTypeRec.cxx \ AliITSNeuralTracker.cxx \ AliITStrackerANN.cxx \ AliITSpidESD.cxx \ + AliITSpidESD1.cxx \ + AliITSpidESD2.cxx \ + AliITSPident.cxx \ + AliITSSteerPid.cxx \ + AliITSPidParItem.cxx \ AliITSRawClusterSPD.cxx \ AliITSRawClusterSDD.cxx \ AliITSRawClusterSSD.cxx\ -- 2.43.0