X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TOF%2FAliTOFtrackerMI.cxx;h=8a9359000ab8c85e461c36f24a84bd7a211927f3;hb=934558d8d2bc39c2a79fe1cad461525bdba0515b;hp=91b627877a777445c26b176987e209691af82fc2;hpb=16a2e36aa813ef2782002024f19af593b87dd9d1;p=u%2Fmrichter%2FAliRoot.git diff --git a/TOF/AliTOFtrackerMI.cxx b/TOF/AliTOFtrackerMI.cxx index 91b627877a7..8a9359000ab 100644 --- a/TOF/AliTOFtrackerMI.cxx +++ b/TOF/AliTOFtrackerMI.cxx @@ -24,11 +24,13 @@ #include #include "TClonesArray.h" +#include "TObjArray.h" #include "TTree.h" #include "TTreeStream.h" #include "AliESDEvent.h" #include "AliESDtrack.h" +#include "AliESDpid.h" #include "AliTOFRecoParam.h" #include "AliTOFReconstructor.h" @@ -36,7 +38,8 @@ #include "AliTOFGeometry.h" #include "AliTOFtrackerMI.h" #include "AliTOFtrack.h" -#include "AliTOFpidESD.h" + +#include "AliMathBase.h" class TGeoManager; @@ -46,9 +49,8 @@ ClassImp(AliTOFtrackerMI) //_____________________________________________________________________________ AliTOFtrackerMI::AliTOFtrackerMI(): - fRecoParam(0x0), + fkRecoParam(0x0), fGeom(0x0), - fPid(0x0), fN(0), fNseeds(0), fNseedsTOF(0), @@ -63,11 +65,13 @@ AliTOFtrackerMI::AliTOFtrackerMI(): fDy(0), fDz(0), fTracks(new TClonesArray("AliTOFtrack")), - fSeeds(new TClonesArray("AliESDtrack")), + fSeeds(new TObjArray(100)), fDebugStreamer(0x0) { //AliTOFtrackerMI main Ctor + for (Int_t ii=0; iiClose(); delete fDebugStreamer; } - delete fRecoParam; + delete fkRecoParam; delete fGeom; - delete fPid; if (fTracks){ fTracks->Delete(); delete fTracks; @@ -95,31 +98,39 @@ AliTOFtrackerMI::~AliTOFtrackerMI(){ delete fSeeds; fSeeds=0x0; } + + for (Int_t ii=0; iiDelete(); + +} +//_____________________________________________________________________________ +void AliTOFtrackerMI::GetPidSettings(AliESDpid *esdPID) { + // + // Sets TOF resolution from RecoParams + // + if (fkRecoParam) + esdPID->GetTOFResponse().SetTimeResolution(fkRecoParam->GetTimeResolution()); + else + AliWarning("fkRecoParam not yet set; cannot set PID settings"); } //_____________________________________________________________________________ -Int_t AliTOFtrackerMI::PropagateBack(AliESDEvent* event) { +Int_t AliTOFtrackerMI::PropagateBack(AliESDEvent * const event) { // // Gets seeds from ESD event and Match with TOF Clusters // // initialize RecoParam for current event + AliDebug(1,"Initializing params for TOF"); - AliInfo("Initializing params for TOF... "); + fkRecoParam = AliTOFReconstructor::GetRecoParam(); // instantiate reco param from STEER... - fRecoParam = AliTOFReconstructor::GetRecoParam(); // instantiate reco param from STEER... - - if (fRecoParam == 0x0) { + if (fkRecoParam == 0x0) { AliFatal("No Reco Param found for TOF!!!"); } - //fRecoParam->Dump(); - //if(fRecoParam->GetApplyPbPbCuts())fRecoParam=fRecoParam->GetPbPbparam(); - //fRecoParam->PrintParameters(); - - Double_t parPID[2]; - parPID[0]=fRecoParam->GetTimeResolution(); - parPID[1]=fRecoParam->GetTimeNSigma(); - fPid=new AliTOFpidESD(parPID); + //fkRecoParam->Dump(); + //if(fkRecoParam->GetApplyPbPbCuts())fkRecoParam=fkRecoParam->GetPbPbparam(); + //fkRecoParam->PrintParameters(); //Initialise some counters @@ -132,15 +143,10 @@ Int_t AliTOFtrackerMI::PropagateBack(AliESDEvent* event) { Int_t ntrk=event->GetNumberOfTracks(); fNseeds = ntrk; - TClonesArray &aESDTrack = *fSeeds; - //Load ESD tracks into a local Array of ESD Seeds - - for (Int_t i=0; iGetTrack(i); - new(aESDTrack[i]) AliESDtrack(*t); - } + for (Int_t i=0; iAddLast(event->GetTrack(i)); //Prepare ESD tracks candidates for TOF Matching CollectESD(); @@ -153,48 +159,62 @@ Int_t AliTOFtrackerMI::PropagateBack(AliESDEvent* event) { MatchTracksMI(kFALSE); // assign track to clusters MatchTracksMI(kTRUE); // assign clusters to esd - Info("PropagateBack","Number of matched tracks: %d",fnmatch); - Info("PropagateBack","Number of good matched tracks: %d",fngoodmatch); - Info("PropagateBack","Number of bad matched tracks: %d",fnbadmatch); + AliInfo(Form("Number of matched tracks = %d (good = %d, bad = %d)",fnmatch,fngoodmatch,fnbadmatch)); //Update the matched ESD tracks for (Int_t i=0; iGetTrack(i); - AliESDtrack *seed =(AliESDtrack*)fSeeds->UncheckedAt(i); + AliESDtrack *seed =(AliESDtrack*)fSeeds->At(i); if ( (seed->GetStatus()&AliESDtrack::kTOFin)!=0 ) { t->SetStatus(AliESDtrack::kTOFin); //if(seed->GetTOFsignal()>0){ if ( (seed->GetStatus()&AliESDtrack::kTOFout)!=0 ) { + t->SetStatus(AliESDtrack::kTOFout); t->SetTOFsignal(seed->GetTOFsignal()); t->SetTOFcluster(seed->GetTOFcluster()); - Int_t tlab[3]; - seed->GetTOFLabel(tlab); + Int_t tlab[3]; seed->GetTOFLabel(tlab); t->SetTOFLabel(tlab); + + // Check done: + // by calling the AliESDtrack::UpdateTrackParams, + // the current track parameters are changed + // and it could cause refit problems. + // We need to update only the following track parameters: + // the track length and expected times. + // Removed AliESDtrack::UpdateTrackParams call + // Called AliESDtrack::SetIntegratedTimes(...) and + // AliESDtrack::SetIntegratedLength() routines. + /* AliTOFtrack *track = new AliTOFtrack(*seed); - Double_t times[10]; - seed->GetIntegratedTimes(times); t->UpdateTrackParams(track,AliESDtrack::kTOFout); - t->SetIntegratedLength(seed->GetIntegratedLength()); + delete track; + */ + + Double_t times[10]; seed->GetIntegratedTimes(times); t->SetIntegratedTimes(times); + t->SetIntegratedLength(seed->GetIntegratedLength()); t->SetTOFsignalToT(seed->GetTOFsignalToT()); t->SetTOFCalChannel(seed->GetTOFCalChannel()); + t->SetTOFDeltaBC(seed->GetTOFDeltaBC()); + t->SetTOFL0L1(seed->GetTOFL0L1()); // + // Make attention, please: + // AliESDtrack::fTOFInfo array does not be stored in the AliESDs.root file + // it is there only for a check during the reconstruction step. Float_t info[10]; seed->GetTOFInfo(info); t->SetTOFInfo(info); - delete track; } } } //Make TOF PID - fPid->MakePID(event); fSeeds->Clear(); - fTracks->Clear(); + fTracks->Delete(); return 0; } @@ -207,7 +227,7 @@ void AliTOFtrackerMI::CollectESD() { Int_t c1=0; for (Int_t i=0; iUncheckedAt(i); + AliESDtrack *t =(AliESDtrack*)fSeeds->At(i); if ((t->GetStatus()&AliESDtrack::kTPCout)==0)continue; AliTOFtrack *track = new AliTOFtrack(*t); // New @@ -247,16 +267,8 @@ void AliTOFtrackerMI::CollectESD() { } - - - - - - -// -// //_________________________________________________________________________ -void AliTOFtrackerMI::MatchTracks( Bool_t /*mLastStep*/){ +void AliTOFtrackerMI::MatchTracks( Bool_t /*mLastStep*/) const { return; } // @@ -265,19 +277,17 @@ void AliTOFtrackerMI::MatchTracks( Bool_t /*mLastStep*/){ void AliTOFtrackerMI::MatchTracksMI(Bool_t mLastStep){ //Match ESD tracks to clusters in TOF - const Float_t kTofOffset = 26; // time offset + const Float_t kTofOffset = 0; // time offset const Float_t kMinQuality = -6.; // minimal quality const Float_t kMaxQualityD = 1.; // max delta quality if cluster used const Float_t kForbiddenR = 0.1; // minimal PID according TPC - static const Double_t kMasses[]={ + static const Double_t kMasses[AliPID::kSPECIES+1]={ 0.000511, 0.105658, 0.139570, 0.493677, 0.938272, 1.875613 }; Int_t nSteps=(Int_t)(fTOFHeigth/0.1); - //AliTOFcalib *calib = new AliTOFcalib(); // AdC - //PH Arrays (moved outside of the loop) Float_t * trackPos[4]; for (Int_t ii=0; ii<4; ii++) trackPos[ii] = new Float_t[nSteps]; @@ -293,13 +303,13 @@ void AliTOFtrackerMI::MatchTracksMI(Bool_t mLastStep){ Float_t mintimedist[kNclusterMax]; Float_t likelihood[kNclusterMax]; Float_t length[kNclusterMax]; - Double_t tpcpid[5]; + Double_t tpcpid[AliPID::kSPECIES+1]; // overrun_static - coverity warning dist3D[0][0]=1; for (Int_t i=0; iUncheckedAt(i); - AliESDtrack *t =(AliESDtrack*)fSeeds->UncheckedAt(track->GetSeedIndex()); + AliESDtrack *t =(AliESDtrack*)fSeeds->At(track->GetSeedIndex()); Bool_t hasTime = ( (t->GetStatus()& AliESDtrack::kTIME)>0) ? kTRUE:kFALSE; // did we integrate time Float_t trdquality = t->GetTRDQuality(); // @@ -307,10 +317,10 @@ void AliTOFtrackerMI::MatchTracksMI(Bool_t mLastStep){ // t->GetTPCpid(tpcpid); Double_t sumpid=0; - for (Int_t ipid=0;ipid<5;ipid++){ + for (Int_t ipid=0;ipid0) tpcpid[ipid]/=sumpid; else{ tpcpid[ipid]=0.2; @@ -429,7 +439,8 @@ void AliTOFtrackerMI::MatchTracksMI(Bool_t mLastStep){ Double_t tof2=AliTOFGeometry::TdcBinWidth()*cluster->GetTDC()+kTofOffset; // in ps // Float_t tgamma = TMath::Sqrt(cluster->GetR()*cluster->GetR()+cluster->GetZ()*cluster->GetZ())/0.03; //time for "primary" gamma //if (trackTOFin->GetPt()<0.7 && TMath::Abs(tgamma-tof2)<350) continue; // gamma conversion candidate - TEMPORARY - for(Int_t j=0;j<=5;j++){ + for(Int_t j=0;jkForbiddenR){ @@ -548,6 +559,8 @@ void AliTOFtrackerMI::MatchTracksMI(Bool_t mLastStep){ t->SetTOFInfo(info); t->SetTOFsignal(tof2); t->SetTOFcluster(cgold->GetIndex()); + t->SetTOFDeltaBC(cgold->GetDeltaBC()); + t->SetTOFL0L1(cgold->GetL0L1Latency()); AliDebug(2, Form("%7i %7i %10i %10i %10i %10i %7i", i, @@ -772,7 +785,7 @@ Float_t AliTOFtrackerMI::GetLinearDistances(AliTOFtrack * track, AliTOFcluster * } //_________________________________________________________________________ -void AliTOFtrackerMI::GetLikelihood(Float_t dy, Float_t dz, const Double_t *cov, AliTOFtrack * /*track*/, Float_t & py, Float_t &pz) +void AliTOFtrackerMI::GetLikelihood(Float_t dy, Float_t dz, const Double_t *cov, AliTOFtrack * /*track*/, Float_t & py, Float_t &pz) const { // // get likelihood - track covariance taken @@ -786,8 +799,8 @@ void AliTOFtrackerMI::GetLikelihood(Float_t dy, Float_t dz, const Double_t *c Float_t normwidth, normd, p0,p1; - Float_t sigmay = TMath::Max(TMath::Sqrt(cov[0]+kMeanSigmaY*kMeanSigmaY),kMaxSigmaY); - Float_t sigmaz = TMath::Max(TMath::Sqrt(cov[2]+kMeanSigmaZ*kMeanSigmaZ),kMaxSigmaZ); + Float_t sigmay = TMath::Max(TMath::Sqrt(TMath::Abs(cov[0])+kMeanSigmaY*kMeanSigmaY),kMaxSigmaY); + Float_t sigmaz = TMath::Max(TMath::Sqrt(TMath::Abs(cov[2])+kMeanSigmaZ*kMeanSigmaZ),kMaxSigmaZ); py=0; pz=0; @@ -796,28 +809,28 @@ void AliTOFtrackerMI::GetLikelihood(Float_t dy, Float_t dz, const Double_t *c // normwidth = fDy/sigmay; normd = dy/sigmay; - p0 = 0.5*(1+TMath::Erf(normd-normwidth*0.5)); - p1 = 0.5*(1+TMath::Erf(normd+normwidth*0.5)); + p0 = 0.5*(1+AliMathBase::ErfFast(normd-normwidth*0.5)); + p1 = 0.5*(1+AliMathBase::ErfFast(normd+normwidth*0.5)); py+= 0.75*(p1-p0); // normwidth = fDy/(3.*sigmay); normd = dy/(3.*sigmay); - p0 = 0.5*(1+TMath::Erf(normd-normwidth*0.5)); - p1 = 0.5*(1+TMath::Erf(normd+normwidth*0.5)); + p0 = 0.5*(1+AliMathBase::ErfFast(normd-normwidth*0.5)); + p1 = 0.5*(1+AliMathBase::ErfFast(normd+normwidth*0.5)); py+= 0.25*(p1-p0); // // pz calculation - 75% admixture of original sigma - 25% tails // normwidth = fDz/sigmaz; normd = dz/sigmaz; - p0 = 0.5*(1+TMath::Erf(normd-normwidth*0.5)); - p1 = 0.5*(1+TMath::Erf(normd+normwidth*0.5)); + p0 = 0.5*(1+AliMathBase::ErfFast(normd-normwidth*0.5)); + p1 = 0.5*(1+AliMathBase::ErfFast(normd+normwidth*0.5)); pz+= 0.75*(p1-p0); // normwidth = fDz/(3.*sigmaz); normd = dz/(3.*sigmaz); - p0 = 0.5*(1+TMath::Erf(normd-normwidth*0.5)); - p1 = 0.5*(1+TMath::Erf(normd+normwidth*0.5)); + p0 = 0.5*(1+AliMathBase::ErfFast(normd-normwidth*0.5)); + p1 = 0.5*(1+AliMathBase::ErfFast(normd+normwidth*0.5)); pz+= 0.25*(p1-p0); } //_________________________________________________________________________