From 4b598bb1380ac8fcb8a2310be0f30dcfdb900f5d Mon Sep 17 00:00:00 2001 From: kharlov Date: Sun, 1 Apr 2007 19:16:52 +0000 Subject: [PATCH] D.P.: Produce EMCTrackSegments using TPC/ITS tracks (no CPV) --- PHOS/AliPHOSTrackSegmentMakerv2.cxx | 120 ++++++++++------------------ PHOS/AliPHOSTrackSegmentMakerv2.h | 2 - PHOS/AliPHOSTracker.cxx | 8 +- 3 files changed, 48 insertions(+), 82 deletions(-) diff --git a/PHOS/AliPHOSTrackSegmentMakerv2.cxx b/PHOS/AliPHOSTrackSegmentMakerv2.cxx index e49794a0b74..929115f911e 100644 --- a/PHOS/AliPHOSTrackSegmentMakerv2.cxx +++ b/PHOS/AliPHOSTrackSegmentMakerv2.cxx @@ -50,6 +50,7 @@ // // --- ROOT system --- +#include "TFile.h" #include "TTree.h" #include "TBenchmark.h" @@ -132,7 +133,7 @@ AliPHOSTrackSegmentMakerv2::AliPHOSTrackSegmentMakerv2(const AliPHOSTrackSegment if (!fDefaultInit) delete fLinkUpArray ; for(Int_t imod=0; imod<5; imod++){ - if(fTPC[imod]) fTPC[imod]->Delete() ; + if(fTPC[imod]) delete fTPC[imod] ; } } @@ -161,35 +162,40 @@ void AliPHOSTrackSegmentMakerv2::FillOneModule() fEmcLast ++) ; //Now TPC tracks - Int_t nTracks = fESD->GetNumberOfTracks(); - TVector3 inPHOS ; - - //In this particular case we use fixed vertex position at zero - Double_t vtx[3]={0.,0.,0.} ; - AliESDtrack *track; - Double_t xyz[3] ; - Int_t nPHOSmod = geom->GetNModules() ; - for(Int_t imod=0 ; imod< nPHOSmod; imod++){ - fTPC[imod]->Clear() ; - } - Double_t rEMC = geom->GetIPtoCrystalSurface() ; //Use here ideal geometry - for (Int_t iTrack=0; iTrackGetTrack(iTrack); - if (!track->GetXYZAt(rEMC, fESD->GetMagneticField(), xyz)) - continue; //track coord on the cylinder of PHOS radius - if ((TMath::Abs(xyz[0])+TMath::Abs(xyz[1])+TMath::Abs(xyz[2]))<=0) - continue; - //Check if this track hits PHOS - inPHOS.SetXYZ(xyz[0],xyz[1],xyz[2]); - Int_t modNum ; - Double_t x,z ; - geom->ImpactOnEmc(vtx, inPHOS.Theta(), inPHOS.Phi(), modNum, x,z) ; - if(modNum>0 && modNum<=nPHOSmod){ - //Mark this track as one belonging to module - fTPC[modNum-1]->AddLast(track) ; + if(fESD){ + //Do it ones, only first time + if(fModule==1){ + Int_t nTracks = fESD->GetNumberOfTracks(); + TVector3 inPHOS ; + + //In this particular case we use fixed vertex position at zero + Double_t vtx[3]={0.,0.,0.} ; + AliESDtrack *track; + Double_t xyz[3] ; + Int_t nPHOSmod = geom->GetNModules() ; + for(Int_t imod=0 ; imod< nPHOSmod; imod++){ + fTPC[imod]->Clear() ; + } + Double_t rEMC = geom->GetIPtoCrystalSurface() ; //Use here ideal geometry + for (Int_t iTrack=0; iTrackGetTrack(iTrack); + if (!track->GetXYZAt(rEMC, fESD->GetMagneticField(), xyz)) + continue; //track coord on the cylinder of PHOS radius + if ((TMath::Abs(xyz[0])+TMath::Abs(xyz[1])+TMath::Abs(xyz[2]))<=0) + continue; + //Check if this track hits PHOS + inPHOS.SetXYZ(xyz[0],xyz[1],xyz[2]); + Int_t modNum ; + Double_t x,z ; + geom->ImpactOnEmc(vtx, inPHOS.Theta(), inPHOS.Phi(), modNum, x,z) ; + if(modNum>0 && modNum<=nPHOSmod){ + //Mark this track as one belonging to module + fTPC[modNum-1]->AddLast(track) ; + } + } } } - + } //____________________________________________________________________________ @@ -204,12 +210,16 @@ void AliPHOSTrackSegmentMakerv2::GetDistanceInPHOSPlane(AliPHOSEmcRecPoint * em TVector3 emcGlobal; // Global position of the CPV recpoint geom->GetGlobal((AliRecPoint*)emcClu,emcGlobal); Double_t rEMC = emcGlobal.Pt() ;// Radius from IP to current point + +// printf("EMC: x=%f, y=%f, z=%f \n",emcGlobal.X(),emcGlobal.Y(),emcGlobal.Z()) ; + Double_t xyz[3] ; if (track->GetXYZAt(rEMC, fESD->GetMagneticField(), xyz)){ //calculate distance +// printf("xyz: x=%f, y=%f, z=%f \n",xyz[0],xyz[1],xyz[2]) ; dx=TMath::Sqrt((emcGlobal.X()-xyz[0])*(emcGlobal.X()-xyz[0])+(emcGlobal.Y()-xyz[1])*(emcGlobal.Y()-xyz[1])) ; dx=TMath::Sign(dx,(Float_t)(emcGlobal.X()-xyz[0])) ; //set direction dz=emcGlobal.Z()-xyz[2] ; - +// printf(" dx=%f, dz=%f \n",dx,dz) ; } else{ dx=999. ; @@ -271,12 +281,12 @@ void AliPHOSTrackSegmentMakerv2::MakeLinks()const Int_t iEmcRP; for(iEmcRP = fEmcFirst; iEmcRP < fEmcLast; iEmcRP++ ) { emcclu = dynamic_cast(emcRecPoints->At(iEmcRP)) ; - Int_t mod=emcclu->GetPHOSMod() ; TIter next(fTPC[mod-1]) ; AliESDtrack *track ; Int_t itrack=0 ; while((track= static_cast(next()))){ + itrack = track->GetID() ; Float_t dx,dz ; GetDistanceInPHOSPlane(emcclu, track, dx,dz) ; if(TMath::Sqrt(dx*dx+dz*dz) < fRtpc ){ @@ -312,7 +322,7 @@ void AliPHOSTrackSegmentMakerv2::MakePairs() Int_t * tpcExist = 0; - Int_t nTracks = fTPC[fModule]->GetSize() ; + Int_t nTracks = fTPC[fModule-1]->GetSize() ; if(nTracks>0) tpcExist = new Int_t[nTracks] ; @@ -338,7 +348,6 @@ void AliPHOSTrackSegmentMakerv2::MakePairs() AliPHOSTrackSegment(dynamic_cast(emcRecPoints->At(linkUp->GetEmc())) , nullpointer, linkUp->GetTrack(),dx,dz) ; - (dynamic_cast(trackSegments->At(fNTrackSegments)))->SetIndexInList(fNTrackSegments); fNTrackSegments++ ; emcExist[linkUp->GetEmc()-fEmcFirst] = -1 ; //Mark emc that Cpv was found @@ -401,9 +410,6 @@ void AliPHOSTrackSegmentMakerv2::Exec(Option_t *option) gime->TrackSegments()->Clear(); - GetVertex() ; - EvalRecPoints() ; - // if(!ReadRecPoints(ievent)) continue; //reads RecPoints for event ievent for(fModule = 1; fModule <= geom->GetNModules() ; fModule++ ) { @@ -431,50 +437,6 @@ void AliPHOSTrackSegmentMakerv2::Exec(Option_t *option) Unload(); } //____________________________________________________________________________ -void AliPHOSTrackSegmentMakerv2::GetVertex(void) -{ //extract vertex either using ESD or generator - - //Try to extract vertex from data - if(fESD){ - const AliESDVertex *esdVtx = fESD->GetVertex() ; - if(esdVtx){ - fVtx.SetXYZ(esdVtx->GetXv(),esdVtx->GetYv(),esdVtx->GetZv()) ; - return ; - } - } - - AliWarning("Can not read vertex from data, use fixed \n") ; - fVtx.SetXYZ(0.,0.,0.) ; - -} -//____________________________________________________________________________ -void AliPHOSTrackSegmentMakerv2::EvalRecPoints(void) -{ //calculate parameters of RecPoints using vertex and writing them - - AliPHOSGetter * gime = AliPHOSGetter::Instance() ; - TClonesArray * digits = gime->Digits() ; - AliPHOSClusterizer * cl = gime->Clusterizer() ; - Double_t w0=cl->GetEmcLogWeight() ; - TObjArray * emcRecPoints = gime->EmcRecPoints() ; - for(Int_t i=0; iGetEntriesFast() ; i++){ - static_cast(emcRecPoints->At(i))->EvalAll(w0,fVtx,digits) ; - } - emcRecPoints->Sort() ; - - TObjArray * cpvRecPoints = gime->CpvRecPoints() ; - if(cpvRecPoints){ - Double_t w0CPV=cl->GetCpvLogWeight() ; - for(Int_t i=0; iGetEntriesFast() ; i++){ - static_cast(cpvRecPoints->At(i))->EvalAll(w0CPV,fVtx,digits) ; - } - cpvRecPoints->Sort() ; - } - - //write recaculated RecPoints - gime->WriteRecPoints("OVERWRITE"); - -} -//____________________________________________________________________________ void AliPHOSTrackSegmentMakerv2::Unload() { // Unloads the task from the folder diff --git a/PHOS/AliPHOSTrackSegmentMakerv2.h b/PHOS/AliPHOSTrackSegmentMakerv2.h index 9e2e2054c18..08d139be080 100644 --- a/PHOS/AliPHOSTrackSegmentMakerv2.h +++ b/PHOS/AliPHOSTrackSegmentMakerv2.h @@ -88,8 +88,6 @@ private: void InitParameters() ; void PrintTrackSegments(Option_t *option) ; virtual void WriteTrackSegments() ; - void GetVertex(void) ; - void EvalRecPoints(void) ; private: diff --git a/PHOS/AliPHOSTracker.cxx b/PHOS/AliPHOSTracker.cxx index 3b3bf36f863..8e8ffd403af 100644 --- a/PHOS/AliPHOSTracker.cxx +++ b/PHOS/AliPHOSTracker.cxx @@ -1,5 +1,7 @@ #include "AliPHOSTracker.h" +#include "AliPHOSClusterizerv1.h" #include "AliPHOSTrackSegmentMakerv1.h" +#include "AliPHOSTrackSegmentMakerv2.h" #include "AliPHOSPIDv1.h" #include "AliRunLoader.h" #include "AliESD.h" @@ -23,10 +25,14 @@ Int_t AliPHOSTracker::PropagateBack(AliESD *esd) { TString headerFile(fRunLoader->GetFileName()) ; TString branchName(fRunLoader->GetEventFolder()->GetName()) ; - + AliPHOSTrackSegmentMakerv1 tsm(headerFile, branchName); +// AliPHOSTrackSegmentMakerv2 tsm(headerFile, branchName); tsm.SetESD(esd) ; AliPHOSPIDv1 pid(headerFile, branchName); + pid.SetESD(esd) ; + + SetDebug() ; // do current event; the loop over events is done by AliReconstruction::Run() tsm.SetEventRange(eventNumber, eventNumber) ; -- 2.31.1