X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCRF1D.cxx;h=ebf78ddf6a5bc1bcfa15c2b4a18a83663624be80;hb=b63fc7dfa760ccf6533014f8364307bc5dde7006;hp=57a19b8255072864087080acb9e2e5a2aa853ade;hpb=1936493934365ed89c915ea283ff553376bffc14;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCRF1D.cxx b/TPC/AliTPCRF1D.cxx index 57a19b82550..ebf78ddf6a5 100644 --- a/TPC/AliTPCRF1D.cxx +++ b/TPC/AliTPCRF1D.cxx @@ -13,38 +13,8 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* -$Log$ -Revision 1.8 2002/02/12 16:07:43 kowal2 -coreccted bug in SetGauss +/* $Id$ */ -Revision 1.7 2001/01/26 19:57:22 hristov -Major upgrade of AliRoot code - -Revision 1.6 2000/06/30 12:07:50 kowal2 -Updated from the TPC-PreRelease branch - -Revision 1.5.4.3 2000/06/26 07:39:42 kowal2 -Changes to obey the coding rules - -Revision 1.5.4.2 2000/06/25 08:38:41 kowal2 -Splitted from AliTPCtracking - -Revision 1.5.4.1 2000/06/14 16:48:24 kowal2 -Parameter setting improved. Removed compiler warnings - -Revision 1.5 2000/04/17 09:37:33 kowal2 -removed obsolete AliTPCDigitsDisplay.C - -Revision 1.4.8.2 2000/04/10 08:53:09 kowal2 - -Updates by M. Ivanov - - -Revision 1.4 1999/09/29 09:24:34 fca -Introduction of the Copyright and cvs Log - -*/ //----------------------------------------------------------------------------- // @@ -58,14 +28,17 @@ Introduction of the Copyright and cvs Log // -#include "TMath.h" -#include "AliTPCRF1D.h" -#include "TF2.h" #include -#include "TCanvas.h" -#include "TPad.h" -#include "TStyle.h" -#include "TH1.h" +#include +#include +#include +#include +#include +#include +#include +#include + +#include "AliTPCRF1D.h" extern TStyle * gStyle; @@ -105,6 +78,19 @@ ClassImp(AliTPCRF1D) AliTPCRF1D::AliTPCRF1D(Bool_t direct,Int_t np,Float_t step) + :TObject(), + fNRF(0), + fDSTEPM1(0.), + fcharge(0), + forigsigma(0.), + fpadWidth(3.5), + fkNorm(0.5), + fInteg(0.), + fGRF(0), + fSigma(0.), + fOffset(0.), + fDirect(kFALSE), + fPadDistance(0.) { //default constructor for response function object fDirect=direct; @@ -113,21 +99,42 @@ AliTPCRF1D::AliTPCRF1D(Bool_t direct,Int_t np,Float_t step) fcharge = new Float_t[fNRF]; if (step>0) fDSTEPM1=1./step; else fDSTEPM1 = 1./fgRFDSTEP; - fSigma = 0; - fGRF = 0; - fkNorm = 0.5; - fpadWidth = 3.5; - forigsigma=0.; - fOffset = 0.; + for(Int_t i=0;i<5;i++) { + funParam[i]=0.; + fType[i]=0; + } + } AliTPCRF1D::AliTPCRF1D(const AliTPCRF1D &prf) + :TObject(prf), + fNRF(0), + fDSTEPM1(0.), + fcharge(0), + forigsigma(0.), + fpadWidth(3.5), + fkNorm(0.5), + fInteg(0.), + fGRF(0), + fSigma(0.), + fOffset(0.), + fDirect(kFALSE), + fPadDistance(0.) { + // memcpy(this, &prf, sizeof(prf)); fcharge = new Float_t[fNRF]; memcpy(fcharge,prf.fcharge, fNRF); - fGRF = new TF1(*(prf.fGRF)); + fGRF = new TF1(*(prf.fGRF)); + //PH Change the name (add 0 to the end) + TString s(fGRF->GetName()); + s+="0"; + fGRF->SetName(s.Data()); + for(Int_t i=0;i<5;i++) { + funParam[i]=0.; + fType[i]=0; + } } AliTPCRF1D & AliTPCRF1D::operator = (const AliTPCRF1D &prf) @@ -139,6 +146,10 @@ AliTPCRF1D & AliTPCRF1D::operator = (const AliTPCRF1D &prf) fcharge = new Float_t[fNRF]; memcpy(fcharge,prf.fcharge, fNRF); fGRF = new TF1(*(prf.fGRF)); + //PH Change the name (add 0 to the end) + TString s(fGRF->GetName()); + s+="0"; + fGRF->SetName(s.Data()); return (*this); } @@ -156,11 +167,11 @@ Float_t AliTPCRF1D::GetRF(Float_t xin) //function which return response //for the charge in distance xin //return linear aproximation of RF - Float_t x = TMath::Abs((xin-fOffset)*fDSTEPM1)+fNRF/2; + Float_t x = (xin-fOffset)*fDSTEPM1+fNRF/2; Int_t i1=Int_t(x); if (x<0) i1-=1; Float_t res=0; - if (i1+10) res = fcharge[i1]*(Float_t(i1+1)-x)+fcharge[i1+1]*(x-Float_t(i1)); return res; } @@ -187,7 +198,8 @@ void AliTPCRF1D::SetParam( TF1 * GRF,Float_t padwidth, if (sigma==0) sigma= fpadWidth/TMath::Sqrt(12.); forigsigma=sigma; fDSTEPM1 = 10/TMath::Sqrt(sigma*sigma+fpadWidth*fpadWidth/12); - sprintf(fType,"User"); + //sprintf(fType,"User"); + snprintf(fType,5,"User"); // Update(); } @@ -201,13 +213,14 @@ void AliTPCRF1D::SetGauss(Float_t sigma, Float_t padWidth, fpadWidth = padWidth; fkNorm = kNorm; if (fGRF !=0 ) fGRF->Delete(); - fGRF = new TF1("fun",funGauss,-5,5,1); + fGRF = new TF1("funGauss",funGauss,-5,5,1); funParam[0]=sigma; forigsigma=sigma; fGRF->SetParameters(funParam); fDSTEPM1 = 10./TMath::Sqrt(sigma*sigma+fpadWidth*fpadWidth/12); //by default I set the step as one tenth of sigma - sprintf(fType,"Gauss"); + //sprintf(fType,"Gauss"); + snprintf(fType,5,"Gauss"); } void AliTPCRF1D::SetCosh(Float_t sigma, Float_t padWidth, @@ -219,13 +232,14 @@ void AliTPCRF1D::SetCosh(Float_t sigma, Float_t padWidth, fpadWidth = padWidth; fkNorm = kNorm; if (fGRF !=0 ) fGRF->Delete(); - fGRF = new TF1("fun", funCosh, -5.,5.,2); + fGRF = new TF1("funCosh", funCosh, -5.,5.,2); funParam[0]=sigma; fGRF->SetParameters(funParam); forigsigma=sigma; fDSTEPM1 = 10./TMath::Sqrt(sigma*sigma+fpadWidth*fpadWidth/12); //by default I set the step as one tenth of sigma - sprintf(fType,"Cosh"); + //sprintf(fType,"Cosh"); + snprintf(fType,5,"Cosh"); } void AliTPCRF1D::SetGati(Float_t K3, Float_t padDistance, Float_t padWidth, @@ -237,16 +251,19 @@ void AliTPCRF1D::SetGati(Float_t K3, Float_t padDistance, Float_t padWidth, fpadWidth = padWidth; fkNorm = kNorm; if (fGRF !=0 ) fGRF->Delete(); - fGRF = new TF1("fun", funGati, -5.,5.,2); + fGRF = new TF1("funGati", funGati, -5.,5.,2); funParam[0]=padDistance; funParam[1]=K3; fGRF->SetParameters(funParam); forigsigma=padDistance; fDSTEPM1 = 10./TMath::Sqrt(padDistance*padDistance+fpadWidth*fpadWidth/12); //by default I set the step as one tenth of sigma - sprintf(fType,"Gati"); + //sprintf(fType,"Gati"); + snprintf(fType,5,"Gati"); } + + void AliTPCRF1D::DrawRF(Float_t x1,Float_t x2,Int_t N) { // @@ -260,8 +277,9 @@ void AliTPCRF1D::DrawRF(Float_t x1,Float_t x2,Int_t N) TPad * pad2 = new TPad("pad2RF","",0.05,0.05,0.95,0.45,21); pad2->Draw(); - sprintf(s,"RF response function for %1.2f cm pad width", - fpadWidth); + //sprintf(s,"RF response function for %1.2f cm pad width", + // fpadWidth); + snprintf(s,60,"RF response function for %1.2f cm pad width",fpadWidth); pad1->cd(); TH1F * hRFo = new TH1F("hRFo","Original charge distribution",N+1,x1,x2); pad2->cd(); @@ -339,13 +357,24 @@ void AliTPCRF1D::Streamer(TBuffer &R__b) AliTPCRF1D::Class()->ReadBuffer(R__b, this); //read functions - if (strncmp(fType,"Gauss",3)==0) {delete fGRF; fGRF = new TF1("fun",funGauss,-5.,5.,4);} - if (strncmp(fType,"Cosh",3)==0) {delete fGRF; fGRF = new TF1("fun",funCosh,-5.,5.,4);} - if (strncmp(fType,"Gati",3)==0) {delete fGRF; fGRF = new TF1("fun",funGati,-5.,5.,4);} + if (strncmp(fType,"Gauss",3)==0) {delete fGRF; fGRF = new TF1("funGauss",funGauss,-5.,5.,4);} + if (strncmp(fType,"Cosh",3)==0) {delete fGRF; fGRF = new TF1("funCosh",funCosh,-5.,5.,4);} + if (strncmp(fType,"Gati",3)==0) {delete fGRF; fGRF = new TF1("funGati",funGati,-5.,5.,4);} if (fGRF) fGRF->SetParameters(funParam); } else { AliTPCRF1D::Class()->WriteBuffer(R__b, this); } } + + +Double_t AliTPCRF1D::Gamma4(Double_t x, Double_t p0, Double_t p1){ + // + // Gamma 4 Time response function of ALTRO + // + if (x<0) return 0; + Double_t g1 = TMath::Exp(-4.*x/p1); + Double_t g2 = TMath::Power(x/p1,4); + return p0*g1*g2; +}