X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSEmcRecPoint.cxx;h=63604ad2dfb8efc6a1effff3c2e1ea53af72a99a;hb=09b20ad1c29952cef09057dbfdfdb134149c5127;hp=3f72da1a15a4077abb0a34806e641a76dab549f3;hpb=91daaf2499259446d044ba62d86faf4ba0db72c1;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSEmcRecPoint.cxx b/PHOS/AliPHOSEmcRecPoint.cxx index 3f72da1a15a..63604ad2dfb 100644 --- a/PHOS/AliPHOSEmcRecPoint.cxx +++ b/PHOS/AliPHOSEmcRecPoint.cxx @@ -18,6 +18,18 @@ /* History of cvs commits: * * $Log$ + * Revision 1.59 2007/10/18 15:12:22 kharlov + * Moved MakePrimary to EMCRecPoint to rpduce correct order of primaries + * + * Revision 1.58 2007/04/16 09:03:37 kharlov + * Incedent angle correction fixed + * + * Revision 1.57 2007/04/05 10:18:58 policheh + * Introduced distance to nearest bad crystal. + * + * Revision 1.56 2007/03/06 06:47:28 kharlov + * DP:Possibility to use actual vertex position added + * * Revision 1.55 2007/01/19 20:31:19 kharlov * Improved formatting for Print() * @@ -63,7 +75,7 @@ AliPHOSEmcRecPoint::AliPHOSEmcRecPoint() : fCoreEnergy(0.), fDispersion(0.), fEnergyList(0), fTime(-1.), fNExMax(0), fM2x(0.), fM2z(0.), fM3x(0.), fM4z(0.), - fPhixe(0.), fDebug(0) + fPhixe(0.), fDistToBadCrystal(-1),fDebug(0) { // ctor fMulDigit = 0 ; @@ -77,7 +89,7 @@ AliPHOSEmcRecPoint::AliPHOSEmcRecPoint(const char * opt) : fCoreEnergy(0.), fDispersion(0.), fEnergyList(0), fTime(-1.), fNExMax(0), fM2x(0.), fM2z(0.), fM3x(0.), fM4z(0.), - fPhixe(0.), fDebug(0) + fPhixe(0.), fDistToBadCrystal(-1), fDebug(0) { // ctor fMulDigit = 0 ; @@ -91,14 +103,13 @@ AliPHOSEmcRecPoint::AliPHOSEmcRecPoint(const AliPHOSEmcRecPoint & rp) : fCoreEnergy(rp.fCoreEnergy), fDispersion(rp.fDispersion), fEnergyList(0), fTime(rp.fTime), fNExMax(rp.fNExMax), fM2x(rp.fM2x), fM2z(rp.fM2z), fM3x(rp.fM3x), fM4z(rp.fM4z), - fPhixe(rp.fPhixe), fDebug(rp.fDebug) + fPhixe(rp.fPhixe), fDistToBadCrystal(rp.fDistToBadCrystal), fDebug(rp.fDebug) { // cpy ctor fMulDigit = rp.fMulDigit ; fAmp = rp.fAmp ; - fEnergyList = new Float_t[rp.fMulDigit] ; - Int_t index ; - for(index = 0 ; index < fMulDigit ; index++) + if (rp.fMulDigit>0) fEnergyList = new Float_t[rp.fMulDigit] ; + for(Int_t index = 0 ; index < fMulDigit ; index++) fEnergyList[index] = rp.fEnergyList[index] ; } @@ -344,7 +355,7 @@ void AliPHOSEmcRecPoint::ExecuteEvent(Int_t event, Int_t, Int_t) /*const*/ } //____________________________________________________________________________ -void AliPHOSEmcRecPoint::EvalDispersion(Float_t logWeight,TClonesArray * digits, TVector3 &vInc) +void AliPHOSEmcRecPoint::EvalDispersion(Float_t logWeight,TClonesArray * digits, TVector3 & /* vInc */) { // Calculates the dispersion of the shower at the origine of the RecPoint //DP: should we correct dispersion for non-perpendicular hit???????? @@ -480,7 +491,7 @@ void AliPHOSEmcRecPoint::EvalCoreEnergy(Float_t logWeight, TClonesArray * digits } //____________________________________________________________________________ -void AliPHOSEmcRecPoint::EvalElipsAxis(Float_t logWeight,TClonesArray * digits, TVector3 &vInc) +void AliPHOSEmcRecPoint::EvalElipsAxis(Float_t logWeight,TClonesArray * digits, TVector3 & /* vInc */) { // Calculates the axis of the shower ellipsoid @@ -559,7 +570,7 @@ void AliPHOSEmcRecPoint::EvalElipsAxis(Float_t logWeight,TClonesArray * digits, } //____________________________________________________________________________ -void AliPHOSEmcRecPoint::EvalMoments(Float_t logWeight,TClonesArray * digits, TVector3 &vInc) +void AliPHOSEmcRecPoint::EvalMoments(Float_t logWeight,TClonesArray * digits, TVector3 & /* vInc */) { // Calculate the shower moments in the eigen reference system // M2x, M2z, M3x, M4z @@ -705,11 +716,75 @@ void AliPHOSEmcRecPoint::EvalMoments(Float_t logWeight,TClonesArray * digits, T fPhixe = phi; } +//______________________________________________________________________________ +void AliPHOSEmcRecPoint::EvalPrimaries(TClonesArray * digits) +{ + // Constructs the list of primary particles (tracks) which have contributed to this RecPoint + + AliPHOSDigit * digit ; + Int_t * tempo = new Int_t[fMaxTrack] ; + + //First find digit with maximal energy deposition and copy its primaries + Float_t emax=0.; + Int_t imaxDigit=0; + for(Int_t id=0; id(digits->At( fDigitsList[imaxDigit] )) ; + Int_t nprimaries = digit->GetNprimary() ; + if ( nprimaries > fMaxTrack ) { + fMulTrack = - 1 ; + Error("EvalPrimaries", "GetNprimaries ERROR > increase fMaxTrack" ) ; + nprimaries = fMaxTrack; //skip the rest + } + for(fMulTrack=0; fMulTrackGetPrimary(fMulTrack+1) ; + } + + //Now add other digits contributions + for (Int_t index = 0 ; index < GetDigitsMultiplicity() ; index++ ) { // all digits + if(index==imaxDigit) //already in + continue ; + digit = dynamic_cast(digits->At( fDigitsList[index] )) ; + nprimaries = digit->GetNprimary() ; + for(Int_t ipr=0; iprGetPrimary(ipr+1) ; + Bool_t notIn=1 ; + for(Int_t kndex = 0 ; (kndex < fMulTrack)&& notIn ; kndex++ ) { //check if not already stored + if(iprimary == tempo[kndex]){ + notIn = kFALSE ; + } + } + if(notIn){ + if(fMulTrack increase fMaxTrack!!!" ) ; + break ; + } + } + } + } // all digits + if(fMulTrack > 0){ + if(fTracksList)delete [] fTracksList; + fTracksList = new Int_t[fMulTrack] ; + } + for(Int_t index = 0; index < fMulTrack; index++) + fTracksList[index] = tempo[index] ; + + delete [] tempo ; + +} + //____________________________________________________________________________ void AliPHOSEmcRecPoint::EvalAll(Float_t logWeight, TClonesArray * digits ) { EvalCoreEnergy(logWeight, digits); EvalTime(digits) ; + EvalPrimaries(digits) ; AliPHOSRecPoint::EvalAll(digits) ; } //____________________________________________________________________________ @@ -771,8 +846,8 @@ void AliPHOSEmcRecPoint::EvalLocalPosition(Float_t logWeight, TVector3 &vtx, TCl Float_t depthx = 0.; Float_t depthz = 0.; if (fAmp>0&&vInc.Y()!=0.) { - depthx = ( para * TMath::Log(fAmp) + parb ) * vInc.X()/vInc.Y() ; - depthz = ( para * TMath::Log(fAmp) + parb ) * vInc.Z()/vInc.Y() ; + depthx = ( para * TMath::Log(fAmp) + parb ) * vInc.X()/TMath::Abs(vInc.Y()) ; + depthz = ( para * TMath::Log(fAmp) + parb ) * vInc.Z()/TMath::Abs(vInc.Y()) ; } else AliError(Form("Wrong amplitude %f\n", fAmp));