From e9f38a4bbcde7a48f0917155bfe7a4343e397ce5 Mon Sep 17 00:00:00 2001 From: marian Date: Tue, 1 Jul 2008 09:24:22 +0000 Subject: [PATCH] Preprocessing of the Laser information (Marian) --- TPC/AliTPCcalibLaser.cxx | 220 +++++++++++++++++++++++++++++++++------ TPC/AliTPCcalibLaser.h | 20 +++- 2 files changed, 205 insertions(+), 35 deletions(-) diff --git a/TPC/AliTPCcalibLaser.cxx b/TPC/AliTPCcalibLaser.cxx index 63d3e583c9d..88f8e270063 100644 --- a/TPC/AliTPCcalibLaser.cxx +++ b/TPC/AliTPCcalibLaser.cxx @@ -31,6 +31,8 @@ #include "TLinearFitter.h" #include "AliTPCcalibLaser.h" #include "AliExternalTrackParam.h" +#include "AliESDEvent.h" +#include "AliESDfriend.h" #include "AliESDtrack.h" #include "AliTPCTracklet.h" #include "TH1D.h" @@ -55,22 +57,37 @@ using namespace std; ClassImp(AliTPCcalibLaser) AliTPCcalibLaser::AliTPCcalibLaser(): - AliTPCcalibBase() + AliTPCcalibBase(), + fESD(0), + fESDfriend(), + fTracksMirror(1000), + fTracksEsd(1000), + fTracksEsdParam(1000), + fTracksTPC(1000), + fRun(0) { // // Constructor // + fTracksEsdParam.SetOwner(kTRUE); } AliTPCcalibLaser::AliTPCcalibLaser(const Text_t *name, const Text_t *title): - AliTPCcalibBase() + AliTPCcalibBase(), + fESD(0), + fESDfriend(0), + fTracksMirror(1000), + fTracksEsd(1000), + fTracksEsdParam(1000), + fTracksTPC(1000), + fRun(0) { SetName(name); SetTitle(title); // // Constructor // - + fTracksEsdParam.SetOwner(kTRUE); } AliTPCcalibLaser::~AliTPCcalibLaser() { @@ -79,14 +96,60 @@ AliTPCcalibLaser::~AliTPCcalibLaser() { // } -void AliTPCcalibLaser::Process(AliESDtrack *track, Int_t run) { + + +void AliTPCcalibLaser::Process(AliESDEvent * event) { // // + // Loop over tracks and call Process function + // + fESD = event; + if (!fESD) { + return; + } + fESDfriend=static_cast(fESD->FindListObject("AliESDfriend")); + if (!fESDfriend) { + return; + } + fTracksTPC.Clear(); + fTracksEsd.Clear(); + fTracksEsdParam.Delete(); + // + Int_t n=fESD->GetNumberOfTracks(); + Int_t run = fESD->GetRunNumber(); + fRun = run; + for (Int_t i=0;iGetTrack(i); + AliESDtrack *track=fESD->GetTrack(i); + TObject *calibObject=0; + AliTPCseed *seed=0; + for (Int_t j=0;(calibObject=friendTrack->GetCalibObject(j));++j) + if ((seed=dynamic_cast(calibObject))) + break; + if (track&&seed) FindMirror(track,seed); + // + } + + FitDriftV(); + + // + for (Int_t id=0; id<1000; id++){ + // + // + if (!fTracksEsdParam.At(id)) continue; + DumpLaser(id); + RefitLaser(id); + } +} + +Int_t AliTPCcalibLaser::FindMirror(AliESDtrack *track, AliTPCseed *seed){ + // + // Find corresponding mirror + // add the corresponding tracks // - // 1. Propagate track to the mirror radius Float_t kRadius0 = 252; Float_t kRadius = 254.25; - if (!track->GetOuterParam()) return; + if (!track->GetOuterParam()) return -1; AliExternalTrackParam param(*(track->GetOuterParam())); AliTracker::PropagateTrackTo(¶m,kRadius0,0.10566,3,kTRUE); AliTracker::PropagateTrackTo(¶m,kRadius,0.10566,0.1,kTRUE); @@ -98,47 +161,42 @@ void AliTPCcalibLaser::Process(AliESDtrack *track, Int_t run) { ltrp=(AliTPCLaserTrack*)AliTPCLaserTrack::GetTracks()->UncheckedAt(id); else ltrp=<r; + + if (id>=0){ + if (!fTracksMirror.At(id)) fTracksMirror.AddAt(ltrp,id); + fTracksEsdParam.AddAt(param.Clone(),id); + fTracksEsd.AddAt(track,id); + fTracksTPC.AddAt(seed,id); + } + return id; +} + + + +void AliTPCcalibLaser::DumpLaser(Int_t id) { + // + // Dump Laser info to the tree + // + AliESDtrack *track = (AliESDtrack*)fTracksEsd.At(id); + AliExternalTrackParam *param=(AliExternalTrackParam*)fTracksEsdParam.At(id); + AliTPCLaserTrack *ltrp = ( AliTPCLaserTrack*)fTracksMirror.At(id); // // Fast laser ID // Double_t xyz[3]; Double_t pxyz[3]; - param.GetXYZ(xyz); - param.GetPxPyPz(pxyz); - Int_t side = (param.GetZ()>0) ? 0:1; - // - Int_t beam = 0; - Int_t beamphi = 0; - if (side==0) { - beam = TMath::Nint((180*param.GetAlpha()/TMath::Pi()+20)/60.); - beamphi = TMath::Pi()*(60.*Double_t(beam)-20.)/180.; - if (beam<0) beam+=6; - } - // - if (side==1) { - beam = TMath::Nint((180*param.GetAlpha()/TMath::Pi()-20)/60.); - beamphi = TMath::Pi()*(60.*Double_t(beam)+20.)/180.; - if (beam<0) beam+=6; - } - - //Int_t id(180*atan2(x1,x0)/pi+20)/60.; - Int_t bundle=TMath::Nint(param.GetZ()/80.); - // - // + param->GetXYZ(xyz); + param->GetPxPyPz(pxyz); if (fStreamLevel>0){ TTreeSRedirector *cstream = GetDebugStreamer(); if (cstream){ (*cstream)<<"Track"<< - "run="<GetClusterPointer(i); + if (c) nclusters[c->GetDetector()]++; + } + + for (Int_t isec=0; isec<72;isec++){ + if (nclusters[isec]GetClusterPointer(irow); + //if (c && RejectCluster(c)) continue; + if (c&&c->GetDetector()==isec) { + Double_t xd = c->GetX()-120;; + Double_t x[2]={xd,xd*xd}; + fy2.AddPoint(x,c->GetY()); + fz2.AddPoint(x,c->GetZ()); + // + fy1.AddPoint(x,c->GetY()); + fz1.AddPoint(x,c->GetZ()); + } + } + fy2.Eval(); + fz2.Eval(); + fy1.Eval(); + fz1.Eval(); + fy1.GetParameters(vecy1); + fy2.GetParameters(vecy2); + fz1.GetParameters(vecz1); + fz2.GetParameters(vecz2); + + if (fStreamLevel>0){ + TTreeSRedirector *cstream = GetDebugStreamer(); + if (cstream){ + Float_t dedx = track->GetdEdx(); + (*cstream)<<"Tracklet"<< + "LTr.="<GetClusterPointer(irow); + // if (c && RejectCluster(c)) continue; + // if (c&&c->GetDetector()==isec) { + // Double_t x[2]={c->GetX(),c->GetX()*c->GetX()}; + // fy2.AddPoint(&x,c->GetY()); + // fz2.AddPoint(&x,c->GetZ()); + // // + // fy1.AddPoint(&x,c->GetY()); + // fz1.AddPoint(&x,c->GetZ()); + // } + // } + +} + + void AliTPCcalibLaser::Analyze(){ // // diff --git a/TPC/AliTPCcalibLaser.h b/TPC/AliTPCcalibLaser.h index 42837ac0416..033951bd28c 100644 --- a/TPC/AliTPCcalibLaser.h +++ b/TPC/AliTPCcalibLaser.h @@ -16,6 +16,8 @@ class AliExternalTrackParam; class AliESDtrack; +class AliESDEvent; +class AliESDfriend; class TGraphErrors; class AliTPCcalibLaser:public AliTPCcalibBase { @@ -23,11 +25,27 @@ public: AliTPCcalibLaser(); AliTPCcalibLaser(const Text_t *name, const Text_t *title); virtual ~AliTPCcalibLaser(); - virtual void Process(AliESDtrack *track, Int_t run); + virtual void Process(AliESDEvent *event); virtual void Analyze(); // + // + // + virtual void DumpLaser(Int_t id); + virtual void RefitLaser(Int_t id); + void FitDriftV(){return;} private: + Int_t FindMirror(AliESDtrack *track, AliTPCseed *seed); + + AliESDEvent * fESD; //! ESD event - not OWNER + AliESDfriend * fESDfriend; //! ESD event - not OWNER + TObjArray fTracksMirror; //! tracks with mirror information + TObjArray fTracksEsd; //! tracks with reconstructed information - + // not owner ESD + TObjArray fTracksEsdParam; //! tracks with reconstructed information - + // is owner ESD at mirror + TObjArray fTracksTPC; //! tracks with reconstructed information - TPC + Int_t fRun; // current run number ClassDef(AliTPCcalibLaser,1) }; -- 2.39.3