X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCParamSR.cxx;h=d4ba982941a57cfc34b7f91e3c08902832b27efc;hb=b16d72b108c1fa7332539de182faa83691989f9c;hp=2a7ef2a2b6fa5ff6a5bb574fb837360e45f4baad;hpb=b4de2219e27e84f800d6482d0012af420fafe0ba;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCParamSR.cxx b/TPC/AliTPCParamSR.cxx index 2a7ef2a2b6f..d4ba982941a 100644 --- a/TPC/AliTPCParamSR.cxx +++ b/TPC/AliTPCParamSR.cxx @@ -34,6 +34,8 @@ #include "AliTPCParamSR.h" #include "AliTPCRF1D.h" #include "TH1.h" +#include "AliTPCROC.h" +#include "TGeoManager.h" ClassImp(AliTPCParamSR) static const Int_t kMaxRows=600; @@ -44,19 +46,48 @@ static const Float_t kFacSigmaTime=3.; AliTPCParamSR::AliTPCParamSR() + :AliTPCParam(), + fInnerPRF(0), + fOuter1PRF(0), + fOuter2PRF(0), + fTimeRF(0), + fFacSigmaPadRow(0), + fFacSigmaPad(0), + fFacSigmaTime(0) { // //constructor set the default parameters - fInnerPRF=0; - fOuter1PRF=0; - fOuter2PRF=0; - fTimeRF = 0; + // + fFacSigmaPadRow = Float_t(kFacSigmaPadRow); fFacSigmaPad = Float_t(kFacSigmaPad); fFacSigmaTime = Float_t(kFacSigmaTime); SetDefault(); Update(); } +AliTPCParamSR::AliTPCParamSR(const AliTPCParamSR ¶m) + :AliTPCParam(), + fInnerPRF(0), + fOuter1PRF(0), + fOuter2PRF(0), + fTimeRF(0), + fFacSigmaPadRow(0), + fFacSigmaPad(0), + fFacSigmaTime(0) +{ + // + // copy constructor - dummy + // + fFacSigmaPadRow = param.fFacSigmaPadRow; +} +AliTPCParamSR & AliTPCParamSR::operator =(const AliTPCParamSR & param) +{ + // + // assignment operator - dummy + // + fZLength=param.fZLength; + return (*this); +} AliTPCParamSR::~AliTPCParamSR() { @@ -84,6 +115,7 @@ Int_t AliTPCParamSR::CalcResponse(Float_t* xyz, Int_t * index, Int_t row) //we suppose that coordinate is expressed in float digits // it's mean coordinate system 8 //xyz[0] - float padrow xyz[1] is float pad (center pad is number 0) and xyz[2] is float time bin + //xyz[3] - electron time in float time bin format if ( (fInnerPRF==0)||(fOuter1PRF==0)||(fOuter2PRF==0) ||(fTimeRF==0) ){ Error("AliTPCParamSR", "response function was not adjusted"); return -1; @@ -108,11 +140,11 @@ Int_t AliTPCParamSR::CalcResponse(Float_t* xyz, Int_t * index, Int_t row) Int_t fpadrow = TMath::Max(TMath::Nint(index[2]+xyz[0]-sfpadrow),0); //"first" padrow Int_t fpad = TMath::Nint(xyz[1]-sfpad); //first pad - Int_t ftime = TMath::Max(TMath::Nint(xyz[2]+GetZOffset()/GetZWidth()-sftime),0); // first time + Int_t ftime = TMath::Max(TMath::Nint(xyz[2]+xyz[3]+GetZOffset()/GetZWidth()-sftime),0); // first time Int_t lpadrow = TMath::Min(TMath::Nint(index[2]+xyz[0]+sfpadrow),fpadrow+19); //"last" padrow lpadrow = TMath::Min(GetNRow(index[1])-1,lpadrow); Int_t lpad = TMath::Min(TMath::Nint(xyz[1]+sfpad),fpad+19); //last pad - Int_t ltime = TMath::Min(TMath::Nint(xyz[2]+GetZOffset()/GetZWidth()+sftime),ftime+19); // last time + Int_t ltime = TMath::Min(TMath::Nint(xyz[2]+xyz[3]+GetZOffset()/GetZWidth()+sftime),ftime+19); // last time ltime = TMath::Min(ltime,GetMaxTBin()-1); // Int_t npads = GetNPads(index[1],row); @@ -154,7 +186,7 @@ Int_t AliTPCParamSR::CalcResponse(Float_t* xyz, Int_t * index, Int_t row) //calculate time response function Int_t time; for (time = ftime;time<=ltime;time++) - timeres[time-ftime]= fTimeRF->GetRF((-xyz[2]+Float_t(time))*fZWidth); + timeres[time-ftime]= fTimeRF->GetRF((-xyz[2]-xyz[3]+Float_t(time))*fZWidth); //write over threshold values to stack for (padrow = fpadrow;padrow<=lpadrow;padrow++) for (pad = fpad;pad<=lpad;pad++) @@ -340,17 +372,18 @@ Bool_t AliTPCParamSR::Update() if (AliTPCParam::Update()==kFALSE) return kFALSE; fbStatus = kFALSE; - Float_t firstrow = fInnerRadiusLow + 2.225 ; + Float_t firstrow = fInnerRadiusLow + 1.575; for( i= 0;iGetNPads(0,i) ; // ROC implement } // cross talk rows fYInner[0]=(fPadRowLow[0]-fInnerPadPitchLength)*tan(fInnerAngle/2.)-fInnerWireMount; @@ -361,12 +394,13 @@ Bool_t AliTPCParamSR::Update() if(iGetNPads(36,i) ; // ROC implement if(i==fNRowUp1-1) { - fLastWireUp1=fPadRowUp[i] +0.375; + fLastWireUp1=fPadRowUp[i] +0.625; firstrow = fPadRowUp[i] + 0.5*(fOuter1PadPitchLength+fOuter2PadPitchLength); } } @@ -374,9 +408,10 @@ Bool_t AliTPCParamSR::Update() { Float_t x = firstrow + fOuter2PadPitchLength*(Float_t)(i-64); fPadRowUp[i]=x; -Float_t y =(x-0.5*fOuter2PadPitchLength)*tan(fOuterAngle/2.)-fOuterWireMount- - fOuterPadPitchWidth/2.; - fNPadsUp[i] = 1+2*(Int_t)(y/fOuterPadPitchWidth) ; + //Float_t y =(x-0.5*fOuter2PadPitchLength)*tan(fOuterAngle/2.)-fOuterWireMount- + // fOuterPadPitchWidth/2.; + //fNPadsUp[i] = 1+2*(Int_t)(y/fOuterPadPitchWidth) ; + fNPadsUp[i] = AliTPCROC::Instance()->GetNPads(36,i) ; // ROC implement } fYOuter[i+1] = fPadRowUp[i]*tan(fOuterAngle/2.)-fOuterWireMount; } @@ -406,6 +441,7 @@ void AliTPCParamSR::Streamer(TBuffer &R__b) AliTPCParam::Streamer(R__b); // if (R__v < 2) return; Update(); + if (gGeoManager) ReadGeoMatrices(); } else { R__b.WriteVersion(AliTPCParamSR::IsA()); //TObject::Streamer(R__b); @@ -422,6 +458,7 @@ Int_t AliTPCParamSR::CalcResponseFast(Float_t* xyz, Int_t * index, Int_t row) // it's mean coordinate system 8 //xyz[0] - electron position w.r.t. pad center, normalized to pad length, //xyz[1] is float pad (center pad is number 0) and xyz[2] is float time bin + //xyz[3] - electron time in float time bin format if ( (fInnerPRF==0)||(fOuter1PRF==0)||(fOuter2PRF==0) ||(fTimeRF==0) ){ Error("AliTPCParamSR", "response function was not adjusted"); return -1; @@ -439,6 +476,7 @@ Int_t AliTPCParamSR::CalcResponseFast(Float_t* xyz, Int_t * index, Int_t row) static Float_t prfinner[2*kpadrn][5*kpadn]; //pad divided by 50 static Float_t prfouter1[2*kpadrn][5*kpadn]; //prfouter division static Float_t prfouter2[2*kpadrn][5*kpadn]; + static Float_t kTanMax =0; static Float_t rftime[5*ktimen]; //time division static Int_t blabla=0; @@ -450,6 +488,7 @@ Int_t AliTPCParamSR::CalcResponseFast(Float_t* xyz, Int_t * index, Int_t row) static TH1F * hdiff2=0; if (blabla==0) { //calculate Response function - only at the begginning + kTanMax = TMath::ATan(10.*TMath::DegToRad()); hdiff =new TH1F("prf_diff","prf_diff",10000,-1,1); hdiff1 =new TH1F("no_repsonse1","no_response1",10000,-1,1); hdiff2 =new TH1F("no_response2","no_response2",10000,-1,1); @@ -482,11 +521,11 @@ Int_t AliTPCParamSR::CalcResponseFast(Float_t* xyz, Int_t * index, Int_t row) Int_t npads = GetNPads(index[1],index[3]-1); Int_t cpadrow = index[2]; // electrons are here Int_t cpad = TMath::Nint(xyz[1]); - Int_t ctime = TMath::Nint(xyz[2]+zoffset2); + Int_t ctime = TMath::Nint(xyz[2]+zoffset2+xyz[3]); //calulate deviation Float_t dpadrow = xyz[0]; Float_t dpad = xyz[1]-cpad; - Float_t dtime = xyz[2]+zoffset2-ctime; + Float_t dtime = xyz[2]+zoffset2+xyz[3]-ctime; Int_t cindex =0; Int_t cindex3 =0; Int_t maxt =GetMaxTBin(); @@ -501,8 +540,9 @@ Int_t AliTPCParamSR::CalcResponseFast(Float_t* xyz, Int_t * index, Int_t row) fpadrow = (index[2]>1) ? -1 :0; lpadrow = (index[2] -npads/2+1) ? -2: -npads/2-cpad; - Int_t lpad = (cpad < npads/2-1) ? 2: npads/2-cpad; + Int_t lpad = (cpad < npads/2-2) ? 2: npads/2-1-cpad; Int_t ftime = (ctime>1) ? -2: -ctime; Int_t ltime = (ctime=2*kpadrn)) continue; - Int_t apad= TMath::Nint((dpad-fpad)*kfpadn+2.5*kfpadn); + // pad angular correction + Float_t angle = kTanMax*2.*(cpad+0.5)/Float_t(npads); + Float_t dpadangle =0; + if (index[1]100) - { - printf("Pici pici %d %f %d\n",ipad,dpad,apad); - } - + fResponseWeight[cindex++]=cweight2; } atime-=ktimen; }