X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TOF%2FAliTOFtracker.cxx;h=0bb4892c04df725dbff422c0fbaf8e9607e7a3bf;hb=dc72981662c6eb5047d90931b54648707e57b8c5;hp=a982ae1c65cd29c8ee5fca4bf2cedd16c50c0ed9;hpb=564887ca617e02bf3498c7424e4493dc26724a79;p=u%2Fmrichter%2FAliRoot.git diff --git a/TOF/AliTOFtracker.cxx b/TOF/AliTOFtracker.cxx index a982ae1c65c..0bb4892c04d 100644 --- a/TOF/AliTOFtracker.cxx +++ b/TOF/AliTOFtracker.cxx @@ -70,6 +70,7 @@ AliTOFtracker::AliTOFtracker(): fnbadmatch(0), fnunmatch(0), fnmatch(0), + fESDEv(0), fTracks(new TClonesArray("AliTOFtrack")), fSeeds(new TObjArray(100)), fTOFtrackPoints(new TObjArray(10)), @@ -98,11 +99,12 @@ AliTOFtracker::AliTOFtracker(): // Getting the geometry fGeom = new AliTOFGeometry(); - + /* RS? for(Int_t i=0; i< 20000;i++){ fClusterESD[i] = NULL; + fHit[i] = NULL; } - + */ InitCheckHists(); } @@ -148,13 +150,18 @@ AliTOFtracker::~AliTOFtracker() { for (Int_t ii=0; iiDelete(); - for(Int_t i=0; i< 20000;i++){ - if(fClusterESD[i]){ - delete fClusterESD[i]; - fClusterESD[i] = NULL; - } - } - + /* RS? + for(Int_t i=0; i< 20000;i++){ + if(fClusterESD[i]){ + delete fClusterESD[i]; + fClusterESD[i] = NULL; + } + if(fHit[i]){ + delete fHit[i]; + fHit[i] = NULL; + } + } + */ } //_____________________________________________________________________________ @@ -172,11 +179,9 @@ Int_t AliTOFtracker::PropagateBack(AliESDEvent * const event) { // // Gets seeds from ESD event and Match with TOF Clusters // - - if(fNTOFmatched==0) - event->SetTOFcluster(1,fClusterESD); - - if (fNTOFmatched==0) { + fESDEv = event; + // + if (fN==0) { AliInfo("No TOF recPoints to be matched with reconstructed tracks"); return 0; } @@ -193,6 +198,13 @@ Int_t AliTOFtracker::PropagateBack(AliESDEvent * const event) { //if(fkRecoParam->GetApplyPbPbCuts())fkRecoParam=fkRecoParam->GetPbPbparam(); //fkRecoParam->PrintParameters(); + /* RS? + // create clusters from hit + for(Int_t i=0;i < fNTOFmatched;i++){ + fClusterESD[i] = new AliESDTOFCluster(fHit[i],event); + fClusterESD[i]->SetStatus(fClusters[i]->GetStatus()); + } + */ //Initialise some counters fNseeds=0; @@ -209,15 +221,15 @@ Int_t AliTOFtracker::PropagateBack(AliESDEvent * const event) { //Load ESD tracks into a local Array of ESD Seeds for (Int_t i=0; iAddLast(event->GetTrack(i)); - event->GetTrack(i)->SetESDEvent(event); + // event->GetTrack(i)->SetESDEvent(event); // RS: Why this is needed? The event is already set } - //Prepare ESD tracks candidates for TOF Matching CollectESD(); if (fNseeds==0 || fNseedsTOF==0) { - event->SetTOFcluster(1,fClusterESD); AliInfo("No seeds to try TOF match"); + fSeeds->Clear(); + fTracks->Clear(); return 0 ; } @@ -230,10 +242,12 @@ Int_t AliTOFtracker::PropagateBack(AliESDEvent * const event) { //Third Step without kTOFout flag (just to update clusters) MatchTracks(2); - event->SetTOFcluster(fNTOFmatched,fClusterESD); + //RS? event->SetTOFcluster(fNTOFmatched,fClusterESD); - if (fNTOFmatched==0) { + if (fN==0) { AliInfo("No TOF recPoints to be matched with reconstructed tracks"); + fSeeds->Clear(); + fTracks->Clear(); return 0; } @@ -242,40 +256,40 @@ Int_t AliTOFtracker::PropagateBack(AliESDEvent * const event) { //Update the matched ESD tracks for (Int_t i=0; iGetTrack(i); + // RS: This is a bogus code since t and seed are the same object + // AliESDtrack *t=event->GetTrack(i); AliESDtrack *seed =(AliESDtrack*)fSeeds->At(i); - if ( (seed->GetStatus()&AliESDtrack::kTOFin)!=0 ) { - t->SetStatus(AliESDtrack::kTOFin); + //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->SetTOFsignalDx(seed->GetTOFsignalDx()); - t->SetTOFDeltaBC(seed->GetTOFDeltaBC()); - t->SetTOFL0L1(seed->GetTOFL0L1()); - t->SetTOFCalChannel(seed->GetTOFCalChannel()); + //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->SetTOFsignalDx(seed->GetTOFsignalDx()); + //t->SetTOFDeltaBC(seed->GetTOFDeltaBC()); + //t->SetTOFL0L1(seed->GetTOFL0L1()); + //t->SetTOFCalChannel(seed->GetTOFCalChannel()); Int_t tlab[3]; seed->GetTOFLabel(tlab); - t->SetTOFLabel(tlab); + //t->SetTOFLabel(tlab); - Double_t alphaA = (Double_t)t->GetAlpha(); - Double_t xA = (Double_t)t->GetX(); - Double_t yA = (Double_t)t->GetY(); - Double_t zA = (Double_t)t->GetZ(); - Double_t p1A = (Double_t)t->GetSnp(); - Double_t p2A = (Double_t)t->GetTgl(); - Double_t p3A = (Double_t)t->GetSigned1Pt(); - const Double_t *covA = (Double_t*)t->GetCovariance(); + Double_t alphaA = (Double_t)seed->GetAlpha(); + Double_t xA = (Double_t)seed->GetX(); + Double_t yA = (Double_t)seed->GetY(); + Double_t zA = (Double_t)seed->GetZ(); + Double_t p1A = (Double_t)seed->GetSnp(); + Double_t p2A = (Double_t)seed->GetTgl(); + Double_t p3A = (Double_t)seed->GetSigned1Pt(); + const Double_t *covA = (Double_t*)seed->GetCovariance(); // 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); + //t->SetTOFInfo(info); AliDebug(3,Form(" distance=%f; residual in the pad reference frame: dX=%f, dZ=%f", info[0],info[1],info[2])); // Check done: @@ -295,19 +309,19 @@ Int_t AliTOFtracker::PropagateBack(AliESDEvent * const event) { */ Double_t time[AliPID::kSPECIESC]; seed->GetIntegratedTimes(time,AliPID::kSPECIESC); - t->SetIntegratedTimes(time); - - Double_t length = seed->GetIntegratedLength(); - t->SetIntegratedLength(length); - - Double_t alphaB = (Double_t)t->GetAlpha(); - Double_t xB = (Double_t)t->GetX(); - Double_t yB = (Double_t)t->GetY(); - Double_t zB = (Double_t)t->GetZ(); - Double_t p1B = (Double_t)t->GetSnp(); - Double_t p2B = (Double_t)t->GetTgl(); - Double_t p3B = (Double_t)t->GetSigned1Pt(); - const Double_t *covB = (Double_t*)t->GetCovariance(); + //t->SetIntegratedTimes(time); + + //Double_t length = seed->GetIntegratedLength(); + //t->SetIntegratedLength(length); + + Double_t alphaB = (Double_t)seed->GetAlpha(); + Double_t xB = (Double_t)seed->GetX(); + Double_t yB = (Double_t)seed->GetY(); + Double_t zB = (Double_t)seed->GetZ(); + Double_t p1B = (Double_t)seed->GetSnp(); + Double_t p2B = (Double_t)seed->GetTgl(); + Double_t p3B = (Double_t)seed->GetSigned1Pt(); + const Double_t *covB = (Double_t*)seed->GetCovariance(); AliDebug(3,"Track params -now(before)-:"); AliDebug(3,Form(" X: %f(%f), Y: %f(%f), Z: %f(%f) --- alpha: %f(%f)", xB,xA, @@ -341,20 +355,20 @@ Int_t AliTOFtracker::PropagateBack(AliESDEvent * const event) { )); AliDebug(2,Form(" TOF params: %6d %f %f %f %f %f %6d %3d %f", i, - t->GetTOFsignalRaw(), - t->GetTOFsignal(), - t->GetTOFsignalToT(), - t->GetTOFsignalDz(), - t->GetTOFsignalDx(), - t->GetTOFCalChannel(), - t->GetTOFcluster(), - t->GetIntegratedLength())); + seed->GetTOFsignalRaw(), + seed->GetTOFsignal(), + seed->GetTOFsignalToT(), + seed->GetTOFsignalDz(), + seed->GetTOFsignalDx(), + seed->GetTOFCalChannel(), + seed->GetTOFcluster(), + seed->GetIntegratedLength())); AliDebug(2,Form(" %f %f %f %f %f %f %f %f %f", time[0], time[1], time[2], time[3], time[4], time[5], time[6], time[7], time[8])); } } } - + /* RS? if(fNTOFmatched){ Int_t *matchmap = new Int_t[fNTOFmatched]; event->SetTOFcluster(fNTOFmatched,fClusterESD,matchmap); @@ -365,6 +379,7 @@ Int_t AliTOFtracker::PropagateBack(AliESDEvent * const event) { delete[] matchmap; } + */ //Make TOF PID // Now done in AliESDpid @@ -790,11 +805,11 @@ void AliTOFtracker::MatchTracks( Int_t mLastStep){ nfound++; AliDebug(3,Form(" C - istep=%d ~ %d %d ~ nfound=%d",istep,trackInsideCluster,i,nfound)); - - - if(clind[i] < 20000 && mLastStep==2 && !isClusterMatchable[i]){ // add TOF clusters to the track + + // store the match in the ESD + if (mLastStep==2 && !isClusterMatchable[i]) { // add TOF clusters to the track + // isClusterMatchable[i] = kTRUE; - //Tracking info Double_t mom=t->GetP(); AliDebug(3,Form(" Momentum for track %d -> %f", iseed,mom)); @@ -807,9 +822,10 @@ void AliTOFtracker::MatchTracks( Int_t mLastStep){ time[isp]+=(trackPos[3][istep]-trackPos[3][0])/kSpeedOfLight*TMath::Sqrt(momz*momz+mass*mass)/momz; //time[isp]+=(trackPos[3][istep]-trackPos[3][0])/kSpeedOfLight*TMath::Sqrt(mom*mom+mass*mass)/mom; } - - if(!fClusterESD[clind[i]]->Update(t->GetID(),dist3d[1],dist3d[0],dist3d[2],trackPos[3][istep],time))//x,y,z -> tracking RF - t->AddTOFcluster(clind[i]); + // + AliESDTOFCluster* esdTOFCl = GetESDTOFCluster(clind[i]); + if(!esdTOFCl->Update(t->GetID(),dist3d[0],dist3d[1],dist3d[2],trackPos[3][istep],time))//x,y,z -> tracking RF + t->AddTOFcluster(esdTOFCl->GetESDID()); } // ***** NEW ***** @@ -942,13 +958,13 @@ void AliTOFtracker::MatchTracks( Int_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); +// t->SetTOFsignalToT(tToT); Float_t rawTime=AliTOFGeometry::TdcBinWidth()*c->GetTDCRAW()+kTimeOffset; // RAW time,in ps - t->SetTOFsignalRaw(rawTime); - t->SetTOFsignalDz(mindistZ); - t->SetTOFsignalDx(mindistY); - t->SetTOFDeltaBC(c->GetDeltaBC()); - t->SetTOFL0L1(c->GetL0L1Latency()); +// t->SetTOFsignalRaw(rawTime); +// t->SetTOFsignalDz(mindistZ); +// t->SetTOFsignalDx(mindistY); +// t->SetTOFDeltaBC(c->GetDeltaBC()); +// t->SetTOFL0L1(c->GetL0L1Latency()); Float_t info[10] = {mindist,mindistY,mindistZ, 0.,0.,0.,0.,0.,0.,0.}; @@ -963,7 +979,7 @@ void AliTOFtracker::MatchTracks( Int_t mLastStep){ ind[3]=c->GetDetInd(3); ind[4]=c->GetDetInd(4); Int_t calindex = AliTOFGeometry::GetIndex(ind); - t->SetTOFCalChannel(calindex); +// t->SetTOFCalChannel(calindex); // keep track of the track labels in the matched cluster Int_t tlab[3]; @@ -977,7 +993,7 @@ void AliTOFtracker::MatchTracks( Int_t mLastStep){ if(timeWalkCorr)tofcorr=CorrectTimeWalk(mindistZ,tof); AliDebug(3,Form(" tof time of the matched track, after TW corr: %f = ",tofcorr)); //Set TOF time signal and pointer to the matched cluster - t->SetTOFsignal(tofcorr); +// t->SetTOFsignal(tofcorr); t->SetTOFcluster(idclus); // pointing to the recPoints tree AliDebug(3,Form(" Setting TOF raw time: %f, z distance: %f corrected time: %f ",rawTime,mindistZ,tofcorr)); @@ -1029,7 +1045,11 @@ void AliTOFtracker::MatchTracks( Int_t mLastStep){ // t->SetIntegratedTimes(time); // t->SetTOFLabel(tlab); - // add tof cluster to the track also for step 2 + // add tof cluster to the track also for step 2 + AliESDTOFCluster* esdTOFCl = GetESDTOFCluster(idclus); + esdTOFCl->Update(t->GetID(),mindistY,mindist,mindistZ,recL,time); + t->AddTOFcluster(esdTOFCl->GetESDID()); + /* RS? if(idclus < 20000){ fClusterESD[idclus]->Update(t->GetID(),mindistY,mindist,mindistZ,recL,time);//x,y,z -> tracking RF @@ -1038,7 +1058,7 @@ void AliTOFtracker::MatchTracks( Int_t mLastStep){ else{ AliInfo("Too many TOF clusters matched with tracks (> 20000)"); } - + */ } // Fill Reco-QA histos for Reconstruction fHRecNClus->Fill(nc); @@ -1104,18 +1124,12 @@ Int_t AliTOFtracker::LoadClusters(TTree *cTree) { fN = 0; fNTOFmatched = 0; - for(Int_t i=0; i< 20000;i++){ - if(fClusterESD[i]){ - delete fClusterESD[i]; - fClusterESD[i] = NULL; - } - } for (Int_t i=0; iUncheckedAt(i); //PH fClusters[i]=new AliTOFcluster(*c); fN++; fClusters[i]=c; fN++; - + c->SetESDID(-1); // Fill Digits QA histos Int_t isector = c->GetDetInd(0); @@ -1127,16 +1141,16 @@ Int_t AliTOFtracker::LoadClusters(TTree *cTree) { Float_t time =(AliTOFGeometry::TdcBinWidth()*c->GetTDC())*1E-3; // in ns Float_t tot = (AliTOFGeometry::TdcBinWidth()*c->GetToT())*1E-3;//in ns + /* RS? Int_t ind[5]; ind[0]=isector; ind[1]=iplate; ind[2]=istrip; - ind[3]=ipadX; - ind[4]=ipadZ; - + ind[3]=ipadZ; + ind[4]=ipadX; Int_t calindex = AliTOFGeometry::GetIndex(ind); Int_t tofLabels[3]={c->GetLabel(0),c->GetLabel(1),c->GetLabel(2)}; - + */ Int_t stripOffset = 0; switch (iplate) { case 0: @@ -1164,23 +1178,19 @@ Int_t AliTOFtracker::LoadClusters(TTree *cTree) { fHDigClusTime->Fill(time); fHDigClusToT->Fill(tot); + fNTOFmatched++; // RS: Actually number of clusters + /* RS? if(fNTOFmatched < 20000){ - fClusterESD[fNTOFmatched] = new AliESDTOFcluster(i,calindex, - AliTOFGeometry::TdcBinWidth()*c->GetTDC()/*ps*/, - AliTOFGeometry::TdcBinWidth()*c->GetTDCRAW()/*ps*/, - AliTOFGeometry::ToTBinWidth()*c->GetToT()*1E-3/*ns*/, - tofLabels, - c->GetDeltaBC(),c->GetL0L1Latency(), - c->GetStatus(),c->GetZ(),c->GetPhi(),c->GetR()); + fHit[fNTOFmatched] = new AliESDTOFHit(AliTOFGeometry::TdcBinWidth()*c->GetTDC(), + AliTOFGeometry::TdcBinWidth()*c->GetTDCRAW(), + AliTOFGeometry::ToTBinWidth()*c->GetToT()*1E-3, + calindex,tofLabels,c->GetL0L1Latency(), + c->GetDeltaBC(),i,c->GetZ(),c->GetR(),c->GetPhi()); fNTOFmatched++; } - + */ } - - if(fNTOFmatched == 0) - fClusterESD[0] = new AliESDTOFcluster(); - return 0; } //_________________________________________________________________________ @@ -1192,7 +1202,20 @@ void AliTOFtracker::UnloadClusters() { //PH delete fClusters[i]; fClusters[i] = 0x0; } + /* RS + for(Int_t i=0; i< 20000;i++){ + if(fClusterESD[i]){ + delete fClusterESD[i]; + fClusterESD[i] = NULL; + } + if(fHit[i]){ + delete fHit[i]; + fHit[i] = NULL; + } + } + */ fN=0; + fNTOFmatched = 0; } //_________________________________________________________________________ @@ -1395,5 +1418,43 @@ void AliTOFtracker::FillClusterArray(TObjArray* arr) const for (Int_t i=0; iAdd(fClusters[i]); } -//_________________________________________________________________________ +//_________________________________________________________________________ +AliESDTOFCluster* AliTOFtracker::GetESDTOFCluster(int clID) +{ + // get ESDTOFcluster corresponding to fClusters[clID]. If the original cluster + // was not stored yet in the ESD, first do this + AliTOFcluster *c = fClusters[clID]; + AliESDTOFCluster *clESD = 0; + int esdID = c->GetESDID(); // was this cluster already stored in the ESD clusters? + TClonesArray* esdTOFClArr = fESDEv->GetESDTOFClusters(); + if (esdID<0) { // cluster was not stored yet, do this + esdID = esdTOFClArr->GetEntriesFast(); + c->SetESDID(esdID); + // first store the hits of the cluster + TClonesArray* esdTOFHitArr = fESDEv->GetESDTOFHits(); + int nh = esdTOFHitArr->GetEntriesFast(); + Int_t tofLabels[3]={c->GetLabel(0),c->GetLabel(1),c->GetLabel(2)}; + Int_t ind[5] = {c->GetDetInd(0), c->GetDetInd(1), c->GetDetInd(2), c->GetDetInd(3), c->GetDetInd(4) }; + Int_t calindex = AliTOFGeometry::GetIndex(ind); + /*AliESDTOFHit* esdHit = */ + new ( (*esdTOFHitArr)[nh] ) + AliESDTOFHit( AliTOFGeometry::TdcBinWidth()*c->GetTDC(), + AliTOFGeometry::TdcBinWidth()*c->GetTDCRAW(), + AliTOFGeometry::ToTBinWidth()*c->GetToT()*1E-3, + calindex,tofLabels,c->GetL0L1Latency(), + c->GetDeltaBC(),esdID,c->GetZ(),c->GetR(),c->GetPhi()); + // + clESD = new( (*esdTOFClArr)[esdID] ) AliESDTOFCluster( clID ); + clESD->SetEvent(fESDEv); + clESD->SetStatus( c->GetStatus() ); + clESD->SetESDID(esdID); + // + // register hits in the cluster + clESD->AddESDTOFHitIndex(nh); + } + else clESD = (AliESDTOFCluster*)esdTOFClArr->At(esdID); // cluster is aready stored in the ESD + // + return clESD; + // +}