From 9dcfce73927c2fc1e71c6a82e59c301f44ea3df2 Mon Sep 17 00:00:00 2001 From: marian Date: Mon, 18 Aug 2008 19:13:14 +0000 Subject: [PATCH] Adding class to refit the tracks using the specified OCDB entry Just for check purposes (Marian) --- TPC/AliTPCcalibCalib.cxx | 246 +++++++++++++++++++++++++++++++++++++++ TPC/AliTPCcalibCalib.h | 37 ++++++ TPC/TPCcalibLinkDef.h | 1 + TPC/libTPCcalib.pkg | 2 +- 4 files changed, 285 insertions(+), 1 deletion(-) create mode 100644 TPC/AliTPCcalibCalib.cxx create mode 100644 TPC/AliTPCcalibCalib.h diff --git a/TPC/AliTPCcalibCalib.cxx b/TPC/AliTPCcalibCalib.cxx new file mode 100644 index 00000000000..d0c60d2682d --- /dev/null +++ b/TPC/AliTPCcalibCalib.cxx @@ -0,0 +1,246 @@ +/************************************************************************** + * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ + + +/////////////////////////////////////////////////////////////////////////////// +// // +// Component for redoing the reconstruction from the clusters and tracks +// +// The new calibration data used +// +// In reality it overwrites the content of the ESD +// + +// marian.ivanov@cern.ch +// +#include "AliTPCcalibCalib.h" +#include "TSystem.h" +#include "TFile.h" +#include "TTreeStream.h" +#include "AliLog.h" +#include "TTimeStamp.h" +#include "AliESDEvent.h" +#include "AliESDfriend.h" +#include "AliESDtrack.h" +#include "AliTracker.h" + +#include "AliTPCcalibDB.h" +#include "AliTPCTransform.h" +#include "AliTPCclusterMI.h" +#include "AliTPCseed.h" + +ClassImp(AliTPCcalibCalib) + +AliTPCcalibCalib::AliTPCcalibCalib(): + AliTPCcalibBase() +{ + // + // Constructor + // +} + + +AliTPCcalibCalib::AliTPCcalibCalib(const Text_t *name, const Text_t *title) + :AliTPCcalibBase() +{ + SetName(name); + SetTitle(title); +} + + +AliTPCcalibCalib::AliTPCcalibCalib(const AliTPCcalibCalib&calib): + AliTPCcalibBase(calib) +{ + // + // copy constructor + // +} + +AliTPCcalibCalib &AliTPCcalibCalib::operator=(const AliTPCcalibCalib&calib){ + // + // + // + ((AliTPCcalibBase *)this)->operator=(calib); + return *this; +} + + +AliTPCcalibCalib::~AliTPCcalibCalib() { + // + // destructor + // +} + + +void AliTPCcalibCalib::Process(AliESDEvent *event){ + // + // + // + if (!event) { + return; + } + AliESDfriend *ESDfriend=static_cast(event->FindListObject("AliESDfriend")); + if (!ESDfriend) { + return; + } + + if (GetDebugLevel()>20) printf("Hallo world: Im here\n"); + Int_t ntracks=event->GetNumberOfTracks(); + // + // + // + + for (Int_t i=0;iGetTrack(i); + const AliExternalTrackParam * trackIn = track->GetInnerParam(); + const AliExternalTrackParam * trackOut = track->GetOuterParam(); + if (!trackIn) continue; + if (!trackOut) continue; + + AliESDfriendTrack *friendTrack = ESDfriend->GetTrack(i); + TObject *calibObject; + AliTPCseed *seed = 0; + for (Int_t l=0;(calibObject=friendTrack->GetCalibObject(l));++l) { + if ((seed=dynamic_cast(calibObject))) break; + } + if (!seed) continue; + RefitTrack(track, seed); + } + return; +} + +Bool_t AliTPCcalibCalib::RefitTrack(AliESDtrack * track, AliTPCseed *seed){ + // + // Refit track + // + + // + // First apply calibration + // + + AliTPCTransform *transform = AliTPCcalibDB::Instance()->GetTransform(); + for (Int_t irow=0;irow<159;irow++) { + AliTPCclusterMI *cluster=seed->GetClusterPointer(irow); + if (!cluster) continue; + AliTPCclusterMI cl0(*cluster); + Double_t x[3]={cluster->GetRow(),cluster->GetPad(),cluster->GetTimeBin()}; + Int_t i[1]={cluster->GetDetector()}; + transform->Transform(x,i,0,1); + if (cluster->GetDetector()%36>17){ + x[1]*=-1; + } + // + cluster->SetX(x[0]); + cluster->SetY(x[1]); + cluster->SetZ(x[2]); + if (fStreamLevel>2){ + TTreeSRedirector *cstream = GetDebugStreamer(); + if (cstream){ + (*cstream)<<"Clusters"<< + "cl0.="<<&cl0<< + "cl.="<GetNumberOfClusters(); + // + // And now do refit + // + AliExternalTrackParam * trackInOld = (AliExternalTrackParam*)track->GetInnerParam(); + AliExternalTrackParam * trackOutOld = (AliExternalTrackParam*)track->GetOuterParam(); + + AliExternalTrackParam trackIn = *trackOutOld; + AliExternalTrackParam trackOut = *trackInOld; + trackIn.ResetCovariance(10.); + trackOut.ResetCovariance(10.); + Double_t xyz[3]; + Int_t nclIn=0,nclOut=0; + // + // Refit out + // + for (Int_t irow=0; irow<160; irow++){ + AliTPCclusterMI *cl=seed->GetClusterPointer(irow); + if (!cl) continue; + if (cl->GetX()<80) continue; + Int_t sector = cl->GetDetector(); + Float_t dalpha = TMath::DegToRad()*(sector%18*20.+10.)-trackOut.GetAlpha(); + + if (TMath::Abs(dalpha)>0.01) + trackOut.Rotate(TMath::DegToRad()*(sector%18*20.+10.)); + //if (RejectCluster(cl,&trackOut)) continue; + Double_t r[3]={cl->GetX(),cl->GetY(),cl->GetZ()}; + Double_t cov[3]={0.01,0.,0.01}; //TODO: correct error parametrisation + trackOut.GetXYZ(xyz); + Double_t bz = AliTracker::GetBz(xyz); + if (trackOut.PropagateTo(r[0],bz)) nclOut++; + trackOut.Update(&r[1],cov); + + } + // + // Refit in + // + + for (Int_t irow=159; irow>0; irow--){ + AliTPCclusterMI *cl=seed->GetClusterPointer(irow); + if (!cl) continue; + if (cl->GetX()<80) continue; + Int_t sector = cl->GetDetector(); + Float_t dalpha = TMath::DegToRad()*(sector%18*20.+10.)-trackIn.GetAlpha(); + if (TMath::Abs(dalpha)>0.01) + trackIn.Rotate(TMath::DegToRad()*(sector%18*20.+10.)); + //if (RejectCluster(cl,&trackIn)) continue; + Double_t r[3]={cl->GetX(),cl->GetY(),cl->GetZ()}; + Double_t cov[3]={0.01,0.,0.01}; //TODO: correct error parametrisation + trackOut.GetXYZ(xyz); + Double_t bz = AliTracker::GetBz(xyz); + + if (trackIn.PropagateTo(r[0],bz)) nclIn++; + trackIn.Update(&r[1],cov); + } + + if (fStreamLevel>0){ + TTreeSRedirector *cstream = GetDebugStreamer(); + if (cstream){ + (*cstream)<<"Tracks"<< + "nclIn="<GetX()*TMath::Tan(TMath::Pi()/18); + Float_t dist = edgeY - TMath::Abs(cl->GetY()); + if (param) dist = TMath::Abs(edgeY - TMath::Abs(param->GetY())); + if (dist<3) isReject=kTRUE; + if (cl->GetType()<0) isReject=kTRUE; + return isReject; +} + + diff --git a/TPC/AliTPCcalibCalib.h b/TPC/AliTPCcalibCalib.h new file mode 100644 index 00000000000..548ed6237ff --- /dev/null +++ b/TPC/AliTPCcalibCalib.h @@ -0,0 +1,37 @@ +#ifndef ALITPCCALIBCALIB_H +#define ALITPCCALIBCALIB_H + +/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +//// +//// +//// + +#include "AliTPCcalibBase.h" +class AliTPCseed; +class AliESDEvent; +class AliESDtrack; +class TCollection; +class TTreeSRedirector; +class AliExternalTrackParam; +class AliTPCclusterMI; + +class AliTPCcalibCalib:public AliTPCcalibBase { +public: + AliTPCcalibCalib(); + AliTPCcalibCalib(const Text_t *name, const Text_t *title); + AliTPCcalibCalib(const AliTPCcalibCalib&calib); + AliTPCcalibCalib &operator=(const AliTPCcalibCalib&calib); + virtual ~AliTPCcalibCalib(); + virtual void Process(AliESDEvent *event); + virtual void Analyze(){return;} + + Bool_t RefitTrack(AliESDtrack * track, AliTPCseed *seed); + Bool_t RejectCluster(AliTPCclusterMI* cl, AliExternalTrackParam * param); +protected: +private: + ClassDef(AliTPCcalibCalib,1) +}; + +#endif diff --git a/TPC/TPCcalibLinkDef.h b/TPC/TPCcalibLinkDef.h index a1e69a83593..20a500fc174 100644 --- a/TPC/TPCcalibLinkDef.h +++ b/TPC/TPCcalibLinkDef.h @@ -20,6 +20,7 @@ #pragma link C++ class AliTPCSelectorTracks+; #pragma link C++ class AliAnaTPCTrackBase+; #pragma link C++ class AliTPCcalibBase+; +#pragma link C++ class AliTPCcalibCalib+; #pragma link C++ class AliAnaTPCTrackCalib+; #pragma link C++ class AliTPCcalibAlign+; #pragma link C++ class AliTPCcalibAlignment+; diff --git a/TPC/libTPCcalib.pkg b/TPC/libTPCcalib.pkg index 36c99c88fd0..764fac0ea70 100644 --- a/TPC/libTPCcalib.pkg +++ b/TPC/libTPCcalib.pkg @@ -1,7 +1,7 @@ #-*- Mode: Makefile -*- SRCS = AliTPCcalibTracksCuts.cxx AliTPCcalibTracks.cxx AliTPCcalibTracksGain.cxx \ - AliTPCSelectorESD.cxx AliTPCSelectorTracks.cxx AliTPCCalPadRegion.cxx AliTPCFitPad.cxx AliAnaTPCTrackBase.cxx AliAnaTPCTrackCalib.cxx AliTPCcalibAlign.cxx AliTPCcalibAlignment.cxx AliTPCcalibV0.cxx AliTPCCalibKr.cxx AliTPCcalibBase.cxx AliTPCAnalysisTaskcalib.cxx AliTPCCalibKrTask.cxx AliTPCcalibLaser.cxx AliTPCcalibCosmic.cxx AliTPCLaserTrack.cxx + AliTPCSelectorESD.cxx AliTPCSelectorTracks.cxx AliTPCCalPadRegion.cxx AliTPCFitPad.cxx AliAnaTPCTrackBase.cxx AliAnaTPCTrackCalib.cxx AliTPCcalibAlign.cxx AliTPCcalibAlignment.cxx AliTPCcalibV0.cxx AliTPCCalibKr.cxx AliTPCcalibBase.cxx AliTPCAnalysisTaskcalib.cxx AliTPCCalibKrTask.cxx AliTPCcalibLaser.cxx AliTPCcalibCosmic.cxx AliTPCLaserTrack.cxx AliTPCcalibCalib.cxx HDRS:= $(SRCS:.cxx=.h) -- 2.43.0