X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TOF%2FAliTOFtracker.cxx;h=13f0e1ccb86f964c8535fdf235621164e2e1ffcc;hb=9c980fe55d43f84ef633aa11d5d391abc4ffb8a2;hp=ef8b92ee7f142b3c106a24750e0255689d78a5f6;hpb=9d8027094531ed800361609ac912e31221635b54;p=u%2Fmrichter%2FAliRoot.git diff --git a/TOF/AliTOFtracker.cxx b/TOF/AliTOFtracker.cxx index ef8b92ee7f1..13f0e1ccb86 100644 --- a/TOF/AliTOFtracker.cxx +++ b/TOF/AliTOFtracker.cxx @@ -36,7 +36,6 @@ #include #include -//#include "AliAlignObj.h" #include "AliGeomManager.h" #include "AliESDtrack.h" #include "AliESDEvent.h" @@ -44,9 +43,9 @@ #include "AliTrackPointArray.h" #include "AliCDBManager.h" -#include "AliTOFcalib.h" #include "AliTOFpidESD.h" #include "AliTOFRecoParam.h" +#include "AliTOFReconstructor.h" #include "AliTOFcluster.h" #include "AliTOFGeometry.h" #include "AliTOFtracker.h" @@ -93,84 +92,8 @@ AliTOFtracker::AliTOFtracker(): // Gettimg the geometry fGeom= new AliTOFGeometry(); - // Read the reconstruction parameters from the OCDB - AliTOFcalib* calib=new AliTOFcalib(); - fRecoParam = (AliTOFRecoParam*)calib->ReadRecParFromCDB("TOF/Calib",-1); - if(fRecoParam->GetApplyPbPbCuts())fRecoParam=fRecoParam->GetPbPbparam(); - Double_t parPID[2]; - parPID[0]=fRecoParam->GetTimeResolution(); - parPID[1]=fRecoParam->GetTimeNSigma(); - fPid=new AliTOFpidESD(parPID); - InitCheckHists(); - delete calib; -} -//_____________________________________________________________________________ -AliTOFtracker::AliTOFtracker(const AliTOFtracker &t): - AliTracker(), - fRecoParam(0x0), - fGeom(0x0), - fPid(0x0), - fN(0), - fNseeds(0), - fNseedsTOF(0), - fngoodmatch(0), - fnbadmatch(0), - fnunmatch(0), - fnmatch(0), - fTracks(new TClonesArray("AliTOFtrack")), - fSeeds(new TClonesArray("AliESDtrack")), - fHDigClusMap(0x0), - fHDigNClus(0x0), - fHDigClusTime(0x0), - fHDigClusToT(0x0), - fHRecNClus(0x0), - fHRecDist(0x0), - fHRecSigYVsP(0x0), - fHRecSigZVsP(0x0), - fHRecSigYVsPWin(0x0), - fHRecSigZVsPWin(0x0), - fCalTree(0x0), - fIch(-1), - fToT(-1.), - fTime(-1.), - fExpTimePi(-1.), - fExpTimeKa(-1.), - fExpTimePr(-1.) - { - //AliTOFtracker copy Ctor - - fNseeds=t.fNseeds; - fNseeds=t.fNseeds; - fNseedsTOF=t.fNseedsTOF; - fngoodmatch=t.fngoodmatch; - fnbadmatch=t.fnbadmatch; - fnunmatch=t.fnunmatch; - fnmatch=t.fnmatch; - fRecoParam=t.fRecoParam; - fPid=t.fPid; - fSeeds=t.fSeeds; - fTracks=t.fTracks; - fN=t.fN; -} -//_____________________________________________________________________________ -AliTOFtracker& AliTOFtracker::operator=(const AliTOFtracker &t) -{ - //AliTOFtracker assignment operator - - this->fNseeds=t.fNseeds; - this->fNseedsTOF=t.fNseedsTOF; - this->fngoodmatch=t.fngoodmatch; - this->fnbadmatch=t.fnbadmatch; - this->fnunmatch=t.fnunmatch; - this->fnmatch=t.fnmatch; - this->fRecoParam = t.fRecoParam; - this->fGeom=t.fGeom; - this->fPid = t.fPid; - this->fSeeds=t.fSeeds; - this->fTracks=t.fTracks; - this->fN=t.fN; - return *this; + InitCheckHists(); } //_____________________________________________________________________________ @@ -215,6 +138,23 @@ Int_t AliTOFtracker::PropagateBack(AliESDEvent* event) { // Gets seeds from ESD event and Match with TOF Clusters // + // initialize RecoParam for current event + + AliInfo("Initializing params for TOF... "); + + fRecoParam = AliTOFReconstructor::GetRecoParam(); // instantiate reco param from STEER... + + if (fRecoParam == 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); //Initialise some counters @@ -255,18 +195,38 @@ Int_t AliTOFtracker::PropagateBack(AliESDEvent* event) { for (Int_t i=0; iGetTrack(i); AliESDtrack *seed =(AliESDtrack*)fSeeds->UncheckedAt(i); - if(seed->GetTOFsignal()>0){ - t->SetTOFsignal(seed->GetTOFsignal()); - t->SetTOFcluster(seed->GetTOFcluster()); - t->SetTOFsignalToT(seed->GetTOFsignalToT()); - t->SetTOFsignalRaw(seed->GetTOFsignalRaw()); - t->SetTOFsignalDz(seed->GetTOFsignalDz()); - t->SetTOFCalChannel(seed->GetTOFCalChannel()); - Int_t tlab[3]; seed->GetTOFLabel(tlab); - t->SetTOFLabel(tlab); - AliTOFtrack *track = new AliTOFtrack(*seed); - t->UpdateTrackParams(track,AliESDtrack::kTOFout); - delete track; + + 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()); + t->SetTOFsignalToT(seed->GetTOFsignalToT()); + t->SetTOFsignalRaw(seed->GetTOFsignalRaw()); + t->SetTOFsignalDz(seed->GetTOFsignalDz()); + t->SetTOFCalChannel(seed->GetTOFCalChannel()); + Int_t tlab[3]; seed->GetTOFLabel(tlab); + t->SetTOFLabel(tlab); + + AliTOFtrack *track = new AliTOFtrack(*seed); + t->UpdateTrackParams(track,AliESDtrack::kTOFout); // to be checked - AdC + delete track; + Double_t time[10]; t->GetIntegratedTimes(time); + AliDebug(1,Form(" %6d %f %f %f %f %6d %3d %f %f %f %f %f %f", + i, + t->GetTOFsignalRaw(), + t->GetTOFsignal(), + t->GetTOFsignalToT(), + t->GetTOFsignalDz(), + t->GetTOFCalChannel(), + t->GetTOFcluster(), + t->GetIntegratedLength(), + time[0], time[1], time[2], time[3], time[4] + ) + ); + } } } @@ -312,26 +272,37 @@ void AliTOFtracker::CollectESD() { AliESDtrack *t =(AliESDtrack*)fSeeds->UncheckedAt(i); if ((t->GetStatus()&AliESDtrack::kTPCout)==0)continue; - // TRD 'good' tracks, already propagated at 372 cm - AliTOFtrack *track = new AliTOFtrack(*t); // New - Double_t x = track->GetX(); //New - if (((t->GetStatus()&AliESDtrack::kTRDout)!=0 ) && - ( x >= AliTOFGeometry::RinTOF()) ){ - track->SetSeedIndex(i); - t->UpdateTrackParams(track,AliESDtrack::kTOFout); - new(aTOFTrack[fNseedsTOF]) AliTOFtrack(*track); - fNseedsTOF++; - seedsTOF1++; + Float_t x = (Float_t)track->GetX(); //New + + // TRD 'good' tracks, already propagated at 371 cm + if ( ( (t->GetStatus()&AliESDtrack::kTRDout)!=0 ) && + ( x >= AliTOFGeometry::Rmin() ) ) { + if ( track->PropagateToInnerTOF() ) { + + AliDebug(1,Form(" TRD propagated track till rho = %fcm." + " And then the track has been propagated till rho = %fcm.", + x, (Float_t)track->GetX())); + + track->SetSeedIndex(i); + t->UpdateTrackParams(track,AliESDtrack::kTOFin); + new(aTOFTrack[fNseedsTOF]) AliTOFtrack(*track); + fNseedsTOF++; + seedsTOF1++; + } delete track; } // Propagate the rest of TPCbp - else { - if(track->PropagateToInnerTOF()){ + if ( track->PropagateToInnerTOF() ) { + + AliDebug(1,Form(" TPC propagated track till rho = %fcm." + " And then the track has been propagated till rho = %fcm.", + x, (Float_t)track->GetX())); + track->SetSeedIndex(i); - t->UpdateTrackParams(track,AliESDtrack::kTOFout); + t->UpdateTrackParams(track,AliESDtrack::kTOFin); new(aTOFTrack[fNseedsTOF]) AliTOFtrack(*track); fNseedsTOF++; seedsTOF2++; @@ -340,9 +311,9 @@ void AliTOFtracker::CollectESD() { } } - AliInfo(Form("Number of TOF seeds %i",fNseedsTOF)); - AliInfo(Form("Number of TOF seeds Type 1 %i",seedsTOF1)); - AliInfo(Form("Number of TOF seeds Type 2 %i",seedsTOF2)); + AliInfo(Form("Number of TOF seeds %d",fNseedsTOF)); + AliInfo(Form("Number of TOF seeds Type 1 %d",seedsTOF1)); + AliInfo(Form("Number of TOF seeds Type 2 %d",seedsTOF2)); // Sort according uncertainties on track position fTracks->Sort(); @@ -358,6 +329,9 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ static Float_t detDepth=15.3; static Float_t padDepth=0.5; + const Float_t kSpeedOfLight= 2.99792458e-2; // speed of light [cm/ps] + const Float_t kTimeOffset = 32.; // time offset for tracking algorithm [ps] + Float_t dY=AliTOFGeometry::XPad(); Float_t dZ=AliTOFGeometry::ZPad(); @@ -391,14 +365,15 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ Float_t * trackPos[4]; for (Int_t ii=0; ii<4; ii++) trackPos[ii] = new Float_t[nSteps]; - Int_t * clind[6]; - for (Int_t ii=0;ii<6;ii++) clind[ii] = new Int_t[fN]; + Int_t * clind = new Int_t[fN]; + //The matching loop for (Int_t iseed=0; iseedUncheckedAt(iseed); AliESDtrack *t =(AliESDtrack*)fSeeds->UncheckedAt(track->GetSeedIndex()); - if(t->GetTOFsignal()>0. ) continue; + //if ( t->GetTOFsignal()>0. ) continue; + if ( (t->GetStatus()&AliESDtrack::kTOFout)!=0 ) continue; AliTOFtrack *trackTOFin =new AliTOFtrack(*track); // Some init @@ -445,7 +420,10 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ if (c->GetZ() > z+dz) break; if (c->IsUsed()) continue; - if (!c->GetStatus()) continue; // skip bad channels as declared in OCDB + if (!c->GetStatus()) { + AliDebug(1,"Cluster in channel declared bad!"); + continue; // skip bad channels as declared in OCDB + } Double_t dph=TMath::Abs(c->GetPhi()-phi); if (dph>TMath::Pi()) dph-=2.*TMath::Pi(); @@ -453,22 +431,17 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ Double_t yc=(c->GetPhi() - trackTOFin->GetAlpha())*c->GetR(); Double_t p[2]={yc, c->GetZ()}; - Double_t cov[3]= {dY*dY/12., 0., dZ*dZ/12.}; - if (trackTOFin->AliExternalTrackParam::GetPredictedChi2(p,cov) > maxChi2)continue; - - clind[0][nc] = c->GetDetInd(0); - clind[1][nc] = c->GetDetInd(1); - clind[2][nc] = c->GetDetInd(2); - clind[3][nc] = c->GetDetInd(3); - clind[4][nc] = c->GetDetInd(4); - clind[5][nc] = k; + Double_t cov2[3]= {dY*dY/12., 0., dZ*dZ/12.}; + if (trackTOFin->AliExternalTrackParam::GetPredictedChi2(p,cov2) > maxChi2)continue; + + clind[nc] = k; Char_t path[100]; Int_t ind[5]; - ind[0]=clind[0][nc]; - ind[1]=clind[1][nc]; - ind[2]=clind[2][nc]; - ind[3]=clind[3][nc]; - ind[4]=clind[4][nc]; + ind[0]=c->GetDetInd(0); + ind[1]=c->GetDetInd(1); + ind[2]=c->GetDetInd(2); + ind[3]=c->GetDetInd(3); + ind[4]=c->GetDetInd(4); fGeom->GetVolumePath(ind,path); gGeoManager->cd(path); global[nc] = *gGeoManager->GetCurrentMatrix(); @@ -491,7 +464,7 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ break; } } else if (ysect <-ymax) { - if (!trackTOFin->Rotate(AliTOFGeometry::GetAlpha())) { + if (!trackTOFin->Rotate(-AliTOFGeometry::GetAlpha())) { break; } } @@ -515,45 +488,52 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ Int_t nfound = 0; Bool_t accept = kFALSE; - Bool_t isInside =kFALSE; + Bool_t isInside = kFALSE; for (Int_t istep=0; istepIsInsideThePad(global[i],ctrackPos,dist3d); - - if( mLastStep){ - Float_t xLoc=dist3d[0]; - Float_t rLoc=TMath::Sqrt(dist3d[1]*dist3d[1]+dist3d[2]*dist3d[2]); - accept = (TMath::Abs(xLoc)IsInsideThePad(global[i],ctrackPos,dist3d); + + if ( mLastStep ) { + Float_t yLoc = dist3d[1]; + Float_t rLoc = TMath::Sqrt(dist3d[0]*dist3d[0]+dist3d[2]*dist3d[2]); + accept = (TMath::Abs(yLoc)GetDetInd(1),c->GetDetInd(2))*TMath::DegToRad(); + Float_t localCheck=-mindistZ; + localCheck/=TMath::Cos(tiltangle); // Z (tracking/ALICE RF) component of + // the distance between the + // reconstructed track and the + // TOF closest cluster + */ + AliDebug(2, Form("%7d %7d %10d %10d %10d %10d %7d", + iseed, + fnmatch-1, + TMath::Abs(trackTOFin->GetLabel()), + c->GetLabel(0), c->GetLabel(1), c->GetLabel(2), + idclus)); // AdC + c->Use(); // Track length correction for matching Step 2 @@ -609,13 +606,13 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ ) { fngoodmatch++; - AliDebug(2,Form(" track label good %5i",trackTOFin->GetLabel())); + AliDebug(2,Form(" track label good %5d",trackTOFin->GetLabel())); } else{ fnbadmatch++; - AliDebug(2,Form(" track label bad %5i",trackTOFin->GetLabel())); + AliDebug(2,Form(" track label bad %5d",trackTOFin->GetLabel())); } @@ -624,10 +621,10 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ // Store quantities to be used in the TOF Calibration Float_t tToT=AliTOFGeometry::ToTBinWidth()*c->GetToT()*1E-3; // in ns t->SetTOFsignalToT(tToT); - Float_t rawTime=AliTOFGeometry::TdcBinWidth()*c->GetTDCRAW()+32; // RAW time,in ps + Float_t rawTime=AliTOFGeometry::TdcBinWidth()*c->GetTDCRAW()+kTimeOffset; // RAW time,in ps t->SetTOFsignalRaw(rawTime); t->SetTOFsignalDz(mindistZ); - AliDebug(2,Form(" Setting TOF raw time: %f, z distance: %f time: %f = ",rawTime,mindistZ)); + Int_t ind[5]; ind[0]=c->GetDetInd(0); ind[1]=c->GetDetInd(1); @@ -642,8 +639,8 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ tlab[0]=c->GetLabel(0); tlab[1]=c->GetLabel(1); tlab[2]=c->GetLabel(2); - AliDebug(2,Form(" tdc time of the matched track %i = ",c->GetTDC())); - Double_t tof=AliTOFGeometry::TdcBinWidth()*c->GetTDC()+32; // in ps + AliDebug(2,Form(" tdc time of the matched track %6d = ",c->GetTDC())); + Double_t tof=AliTOFGeometry::TdcBinWidth()*c->GetTDC()+kTimeOffset; // in ps AliDebug(2,Form(" tof time of the matched track: %f = ",tof)); Double_t tofcorr=tof; if(timeWalkCorr)tofcorr=CorrectTimeWalk(mindistZ,tof); @@ -652,17 +649,24 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ t->SetTOFsignal(tofcorr); t->SetTOFcluster(idclus); // pointing to the recPoints tree + AliDebug(2,Form(" Setting TOF raw time: %f, z distance: %f corrected time: %f ",rawTime,mindistZ,tofcorr)); + //Tracking info - Double_t time[AliPID::kSPECIES]; t->GetIntegratedTimes(time); + Double_t time[AliPID::kSPECIES]; t->GetIntegratedTimes(time); // in ps Double_t mom=t->GetP(); + AliDebug(1,Form(" Momentum for track %d -> %f", iseed,mom)); for(Int_t j=0;jPropagateTo(xpos); - t->UpdateTrackParams(trackTOFout,AliESDtrack::kTOFout); + + // Fill the track residual histograms. + FillResiduals(trackTOFout,c,kFALSE); + + t->UpdateTrackParams(trackTOFout,AliESDtrack::kTOFout); t->SetIntegratedLength(recL); t->SetIntegratedTimes(time); t->SetTOFLabel(tlab); @@ -690,7 +694,7 @@ void AliTOFtracker::MatchTracks( Bool_t mLastStep){ delete trackTOFout; } for (Int_t ii=0; ii<4; ii++) delete [] trackPos[ii]; - for (Int_t ii=0;ii<6;ii++) delete [] clind[ii]; + delete [] clind; } //_________________________________________________________________________ @@ -872,6 +876,23 @@ void AliTOFtracker::InitCheckHists() { //Init histos for Digits/Reco QA and Calibration + TDirectory *dir = gDirectory; + TFile *logFileTOF = 0; + + TSeqCollection *list = gROOT->GetListOfFiles(); + int n = list->GetEntries(); + Bool_t isThere=kFALSE; + for(int i=0; iAt(i); + if (strstr(logFileTOF->GetName(), "TOFQA.root")){ + isThere=kTRUE; + break; + } + } + + if(!isThere)logFileTOF = new TFile( "TOFQA.root","RECREATE"); + logFileTOF->cd(); + fCalTree = new TTree("CalTree", "Tree for TOF calibration"); fCalTree->Branch("TOFchannelindex",&fIch,"iTOFch/I"); fCalTree->Branch("ToT",&fToT,"TOFToT/F"); @@ -893,6 +914,9 @@ void AliTOFtracker::InitCheckHists() { fHRecSigZVsP=new TH2F("TOFDig_SigZVsP", "",40,0.,4.,100, 0.,5.); fHRecSigYVsPWin=new TH2F("TOFDig_SigYVsPWin", "",40,0.,4.,100, 0.,50.); fHRecSigZVsPWin=new TH2F("TOFDig_SigZVsPWin", "",40,0.,4.,100, 0.,50.); + + dir->cd(); + } //_________________________________________________________________________ @@ -901,16 +925,10 @@ void AliTOFtracker::SaveCheckHists() { //write histos for Digits/Reco QA and Calibration TDirectory *dir = gDirectory; - TFile *logFile = 0; TFile *logFileTOF = 0; TSeqCollection *list = gROOT->GetListOfFiles(); int n = list->GetEntries(); - for(int i=0; iAt(i); - if (strstr(logFile->GetName(), "AliESDs.root")) break; - } - Bool_t isThere=kFALSE; for(int i=0; iAt(i); @@ -920,21 +938,10 @@ void AliTOFtracker::SaveCheckHists() { } } - logFile->cd(); - fHDigClusMap->Write(fHDigClusMap->GetName(), TObject::kOverwrite); - fHDigNClus->Write(fHDigNClus->GetName(), TObject::kOverwrite); - fHDigClusTime->Write(fHDigClusTime->GetName(), TObject::kOverwrite); - fHDigClusToT->Write(fHDigClusToT->GetName(), TObject::kOverwrite); - fHRecNClus->Write(fHRecNClus->GetName(), TObject::kOverwrite); - fHRecDist->Write(fHRecDist->GetName(), TObject::kOverwrite); - fHRecSigYVsP->Write(fHRecSigYVsP->GetName(), TObject::kOverwrite); - fHRecSigZVsP->Write(fHRecSigZVsP->GetName(), TObject::kOverwrite); - fHRecSigYVsPWin->Write(fHRecSigYVsPWin->GetName(), TObject::kOverwrite); - fHRecSigZVsPWin->Write(fHRecSigZVsPWin->GetName(), TObject::kOverwrite); - //fCalTree->Write(fCalTree->GetName(),TObject::kOverwrite); - logFile->Flush(); - - if(!isThere)logFileTOF = new TFile( "TOFQA.root","RECREATE"); + if(!isThere) { + AliError(Form("File TOFQA.root not found!! not wring histograms....")); + return; + } logFileTOF->cd(); fHDigClusMap->Write(fHDigClusMap->GetName(), TObject::kOverwrite); fHDigNClus->Write(fHDigNClus->GetName(), TObject::kOverwrite); @@ -980,3 +987,19 @@ Float_t AliTOFtracker::GetTimeZerofromTOF(AliESDEvent * /*event*/) const { } return 0.; } +//_________________________________________________________________________ + +void AliTOFtracker::FillClusterArray(TObjArray* arr) const +{ + // + // Returns the TOF cluster array + // + + if (fN==0) + arr = 0x0; + else + for (Int_t i=0; iAdd(fClusters[i]); + +} +//_________________________________________________________________________ +