X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSTrackSegmentMakerv1.cxx;h=8135da99385ab17e2f28a6e325d46a99a9d25d6c;hb=0cc50ca6f1280863efe5b08847c3e9946f0c8c73;hp=6b5117d47b56ddded8af0ac3987864efec548aa4;hpb=f96711b8a6b21f64c4f2f91e67e868323f062e66;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSTrackSegmentMakerv1.cxx b/PHOS/AliPHOSTrackSegmentMakerv1.cxx index 6b5117d47b5..8135da99385 100644 --- a/PHOS/AliPHOSTrackSegmentMakerv1.cxx +++ b/PHOS/AliPHOSTrackSegmentMakerv1.cxx @@ -112,13 +112,6 @@ // // --- ROOT system --- -#include "AliMagF.h" -#include "AliTracker.h" -#include "AliGeomManager.h" -#include "AliCluster.h" -#include "AliKalmanTrack.h" -#include "AliGlobalQADataMaker.h" - #include "TVector3.h" #include "TTree.h" #include "TBenchmark.h" @@ -136,6 +129,14 @@ #include "AliPHOSCpvRecPoint.h" #include "AliLog.h" #include "AliMagF.h" +#include "AliMagF.h" +#include "AliTracker.h" +#include "AliGeomManager.h" +#include "AliCluster.h" +#include "AliKalmanTrack.h" +#include "AliGlobalQADataMaker.h" +#include "AliVParticle.h" + ClassImp( AliPHOSTrackSegmentMakerv1) @@ -282,7 +283,7 @@ void AliPHOSTrackSegmentMakerv1::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint * em emcClu->GetGlobalPosition(gposRecPoint,gmat); Double_t gposTrack[3] ; - Double_t bz = GetBz() ; //B-Field for approximate matching + Double_t bz = AliTracker::GetBz() ; //B-Field for approximate matching Double_t b[3]; for (Int_t i=0; iGetTrack(i); @@ -313,101 +314,99 @@ void AliPHOSTrackSegmentMakerv1::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint * em imod++; } if (!t.GetYAt(rPHOS,bz,y)) {ok=kFALSE; break;} - } - if (!ok) continue; // Track rotation failed - + } + if (!ok) continue; // Track rotation failed - if(imod!= iPHOSMod-1) - continue; //not even approximate coincidence - //t.CorrectForMaterial(...); // Correct for the TOF material, if needed - t.GetBxByBz(b) ; - t.PropagateToBxByBz(rPHOS,b); // Propagate to the matching module - t.GetXYZ(gposTrack) ; + if(imod!= iPHOSMod-1) + continue; //not even approximate coincidence - Double_t ddx = gposTrack[0] - gposRecPoint.X(), ddy = gposTrack[1] - gposRecPoint.Y(), ddz = gposTrack[2] - gposRecPoint.Z(); - Double_t d2 = ddx*ddx + ddy*ddy + ddz*ddz; - if(d2 < minDistance) { - dx = TMath::Sign(TMath::Sqrt(ddx*ddx + ddy*ddy),ddx) ; - dz = ddz ; - trackindex=i; - minDistance=d2 ; - } - } - return ; - } + //t.CorrectForMaterial(...); // Correct for the TOF material, if needed + t.GetBxByBz(b) ; + t.PropagateToBxByBz(rPHOS,b); // Propagate to the matching module + t.GetXYZ(gposTrack) ; + + Double_t ddx = gposTrack[0] - gposRecPoint.X(), ddy = gposTrack[1] - gposRecPoint.Y(), ddz = gposTrack[2] - gposRecPoint.Z(); + Double_t d2 = ddx*ddx + ddy*ddy + ddz*ddz; + if(d2 < minDistance) { + dx = TMath::Sign(TMath::Sqrt(ddx*ddx + ddy*ddy),ddx) ; + dz = ddz ; + trackindex=i; + minDistance=d2 ; + } + } + return ; + } - TVector3 emcGlobal; - fGeom->GetGlobalPHOS((AliPHOSRecPoint*)emcClu,emcGlobal); + TVector3 emcGlobal; + fGeom->GetGlobalPHOS((AliPHOSRecPoint*)emcClu,emcGlobal); - // Radius from IP to current point - Double_t rEMC = TMath::Abs(emcGlobal.Pt()); + // Radius from IP to current point + Double_t rEMC = TMath::Abs(emcGlobal.Pt()); - // Extrapolate the global track direction to EMC - // and find the closest track + // Extrapolate the global track direction to EMC + // and find the closest track - Int_t nTracks = fESD->GetNumberOfTracks(); + Int_t nTracks = fESD->GetNumberOfTracks(); - AliESDtrack *track; - Double_t xyz[] = {-1,-1,-1}; - Double_t pxyz[3]; - Double_t zEMC,xEMC; - Int_t module; - TVector3 vecP; - TVector3 locClu; - - Float_t minDistance = 1.e6; - Float_t dr; - - for (Int_t iTrack=0; iTrackGetTrack(iTrack); - if (!track->GetXYZAt(rEMC, fESD->GetMagneticField(), xyz)) continue; - - AliDebug(1,Form("Event %d, iTrack: %d, (%.3f,%.3f,%.3f)", - fESD->GetEventNumberInFile(),iTrack,xyz[0],xyz[1],xyz[2])); + AliESDtrack *track; + Double_t xyz[] = {-1,-1,-1}; + Double_t pxyz[3]; + Double_t zEMC,xEMC; + Int_t module; + TVector3 vecP; + TVector3 locClu; + + Float_t minDistance = 1.e6; + Float_t dr; + + for (Int_t iTrack=0; iTrackGetTrack(iTrack); + if (!track->GetXYZAt(rEMC, fESD->GetMagneticField(), xyz)) continue; + + AliDebug(1,Form("Event %d, iTrack: %d, (%.3f,%.3f,%.3f)", + fESD->GetEventNumberInFile(),iTrack,xyz[0],xyz[1],xyz[2])); - if (track->GetPxPyPzAt(rEMC,fESD->GetMagneticField(),pxyz)) { + if (track->GetPxPyPzAt(rEMC,fESD->GetMagneticField(),pxyz)) { - vecP.SetXYZ(pxyz[0],pxyz[1],pxyz[2]); - fGeom->ImpactOnEmc(xyz,vecP.Theta(),vecP.Phi(),module,zEMC,xEMC) ; + vecP.SetXYZ(pxyz[0],pxyz[1],pxyz[2]); + fGeom->ImpactOnEmc(xyz,vecP.Theta(),vecP.Phi(),module,zEMC,xEMC) ; - if(!module) continue; - AliDebug(1,Form("\t\tTrack hit PHOS! Module: %d, (x,z)=(%.3f,%.3f)",module,xEMC,zEMC)); + if(!module) continue; + AliDebug(1,Form("\t\tTrack hit PHOS! Module: %d, (x,z)=(%.3f,%.3f)",module,xEMC,zEMC)); - if(emcClu->GetPHOSMod() != module) continue; + if(emcClu->GetPHOSMod() != module) continue; - // match track to EMC cluster - emcClu->GetLocalPosition(locClu); + // match track to EMC cluster + emcClu->GetLocalPosition(locClu); - Float_t delta_x = xEMC - locClu.X(); - Float_t delta_z = zEMC - locClu.Z(); - dr = TMath::Sqrt(delta_x*delta_x + delta_z*delta_z); - AliDebug(1,Form("\tMatch iTrack=%d: (dx,dz)=(%.3f,%.3f)",iTrack,delta_x,delta_z)); + Float_t delta_x = xEMC - locClu.X(); + Float_t delta_z = zEMC - locClu.Z(); + dr = TMath::Sqrt(delta_x*delta_x + delta_z*delta_z); + AliDebug(1,Form("\tMatch iTrack=%d: (dx,dz)=(%.3f,%.3f)",iTrack,delta_x,delta_z)); - if(dr=0) - AliDebug(1,Form("\t\tBest match for (xClu,zClu,eClu)=(%.3f,%.3f,%.3f): iTrack=%d, dR=%.3f", - locClu.X(),locClu.Z(),emcClu->GetEnergy(), - trackindex,TMath::Sqrt(dx*dx+dz*dz))); - return; + } + + if(trackindex>=0) + AliDebug(1,Form("\t\tBest match for (xClu,zClu,eClu)=(%.3f,%.3f,%.3f): iTrack=%d, dR=%.3f", + locClu.X(),locClu.Z(),emcClu->GetEnergy(), + trackindex,TMath::Sqrt(dx*dx+dz*dz))); + return; Float_t distance2Track = fRtpc ; trackindex = -1 ; // closest track within fRCpv - + TVector3 vecEmc ; // Local position of EMC recpoint - TVector3 vecP ; // Momentum direction at CPV plain TVector3 vecPloc ; // Momentum direction at CPV plain //toofar = kTRUE ; @@ -416,9 +415,9 @@ void AliPHOSTrackSegmentMakerv1::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint * em dz=999. ; return ; } - + emcClu->GetLocalPosition(vecEmc) ; - + Double_t xCPV,zCPV ; //EMC-projected coordinates of CPV cluster TVector3 cpvGlobal; // Global position of the CPV recpoint fGeom->GetGlobalPHOS((AliPHOSRecPoint*)cpvClu,cpvGlobal); @@ -426,40 +425,35 @@ void AliPHOSTrackSegmentMakerv1::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint * em Int_t dummyMod ; if (fESD == 0x0) { - //if no track information available, assume straight line from IP to emcal - fGeom->ImpactOnEmc(vtxCPV,cpvGlobal.Theta(),cpvGlobal.Phi(),dummyMod,zCPV,xCPV) ; - dx=xCPV - vecEmc.X() ; - dz=zCPV - vecEmc.Z() ; - return ; + //if no track information available, assume straight line from IP to emcal + fGeom->ImpactOnEmc(vtxCPV,cpvGlobal.Theta(),cpvGlobal.Phi(),dummyMod,zCPV,xCPV) ; + dx=xCPV - vecEmc.X() ; + dz=zCPV - vecEmc.Z() ; + return ; } - + //if there is ESD try to correct distance using TPC information on particle direct in CPV if (fESD != 0x0) { Double_t rCPV = cpvGlobal.Pt() ;// Radius from IP to current point // Extrapolate the global track direction if any to CPV and find the closest track - Int_t nTracks = fESD->GetNumberOfTracks(); Int_t iClosestTrack = -1; - Double_t minDistance = 1.e6; TVector3 inPHOS ; - AliESDtrack *track; - Double_t xyz[3] ; - Double_t pxyz[3]; for (Int_t iTrack=0; iTrackGetTrack(iTrack); if (!track->GetXYZAt(rCPV, fESD->GetMagneticField(), xyz)) - continue; //track coord on the cylinder of PHOS radius + continue; //track coord on the cylinder of PHOS radius if ((TMath::Abs(xyz[0])+TMath::Abs(xyz[1])+TMath::Abs(xyz[2]))<=0) - continue; + continue; //Check if this track hits PHOS inPHOS.SetXYZ(xyz[0],xyz[1],xyz[2]); distance2Track = inPHOS.Angle(cpvGlobal) ; // Find the closest track to the CPV recpoint if (distance2Track < minDistance) { - minDistance = distance2Track; - iClosestTrack = iTrack; + minDistance = distance2Track; + iClosestTrack = iTrack; } } @@ -699,36 +693,4 @@ void AliPHOSTrackSegmentMakerv1::PrintTrackSegments(Option_t * option) } } } -//__________________________________________________________________________ -Double_t AliPHOSTrackSegmentMakerv1::GetBz()const -{ - Double_t kAlmost0Field=1.e-13; - AliMagF* fld = (AliMagF*)TGeoGlobalMagField::Instance()->GetField(); - if (!fld) return 0.5*kAlmost0Field; - Double_t bz = fld->SolenoidField(); - return TMath::Sign(0.5*kAlmost0Field,bz) + bz; -} -//__________________________________________________________________________ -void AliPHOSTrackSegmentMakerv1::GetBxByBz(const Double_t r[3], Double_t b[3])const { - //------------------------------------------------------------------ - // Returns Bx, By and Bz (kG) at the point "r" . - //------------------------------------------------------------------ - Double_t kAlmost0Field=1.e-13; - AliMagF* fld = (AliMagF*)TGeoGlobalMagField::Instance()->GetField(); - if (!fld) { - b[0] = b[1] = 0.; - b[2] = 0.5*kAlmost0Field; - return; - } - - if (fld->IsUniform()) { - b[0] = b[1] = 0.; - b[2] = fld->SolenoidField(); - } else { - fld->Field(r,b); - } - b[2] = (TMath::Sign(0.5*kAlmost0Field,b[2]) + b[2]); - return; -} -