From: marian Date: Wed, 1 Jul 2009 16:38:19 +0000 (+0000) Subject: Adding the AliTPCcalibAlign::ExportTrackPoints X-Git-Url: http://git.uio.no/git/?a=commitdiff_plain;h=4de48bc7170ad8c9c0ab772d28ffe0819cfa9aab;p=u%2Fmrichter%2FAliRoot.git Adding the AliTPCcalibAlign::ExportTrackPoints Input for KalmanFilter alignment/calibration --- diff --git a/TPC/AliTPCcalibAlign.cxx b/TPC/AliTPCcalibAlign.cxx index 141c7882f4d..249247f05b7 100644 --- a/TPC/AliTPCcalibAlign.cxx +++ b/TPC/AliTPCcalibAlign.cxx @@ -107,6 +107,7 @@ #include "AliTPCcalibAlign.h" #include "AliTPCROC.h" #include "AliTPCPointCorrection.h" +#include "AliTrackPointArray.h" #include "AliExternalTrackParam.h" #include "AliESDEvent.h" @@ -193,7 +194,8 @@ AliTPCcalibAlign::AliTPCcalibAlign() fSectorParamA(0), // Kalman parameter for A side fSectorCovarA(0), // Kalman covariance for A side fSectorParamC(0), // Kalman parameter for A side - fSectorCovarC(0) // Kalman covariance for A side + fSectorCovarC(0), // Kalman covariance for A side + fUseInnerOuter(kTRUE)// flag- use Inner Outer sector for left righ alignment { // // Constructor @@ -239,7 +241,9 @@ AliTPCcalibAlign::AliTPCcalibAlign(const Text_t *name, const Text_t *title) fSectorParamA(0), // Kalman parameter for A side fSectorCovarA(0), // Kalman covariance for A side fSectorParamC(0), // Kalman parameter for A side - fSectorCovarC(0) // Kalman covariance for A side + fSectorCovarC(0), // Kalman covariance for A side + fUseInnerOuter(kTRUE)// flag- use Inner Outer sector for left righ alignment + { // // Constructor @@ -289,8 +293,9 @@ AliTPCcalibAlign::AliTPCcalibAlign(const AliTPCcalibAlign &align) fSectorParamA(0), // Kalman parameter for A side fSectorCovarA(0), // Kalman covariance for A side fSectorParamC(0), // Kalman parameter for A side - fSectorCovarC(0) // Kalman covariance for A side - + fSectorCovarC(0), // Kalman covariance for A side + fUseInnerOuter(kTRUE)// flag- use Inner Outer sector for left righ alignment + { // // copy constructor - copy also the content @@ -420,6 +425,7 @@ void AliTPCcalibAlign::Process(AliESDEvent *event) { // // Process pairs of cosmic tracks // + ExportTrackPoints(event); // export track points for external calibration const Int_t kMaxTracks =50; const Int_t kminCl = 40; AliESDfriend *ESDfriend=static_cast(event->FindListObject("AliESDfriend")); @@ -486,8 +492,10 @@ void AliTPCcalibAlign::Process(AliESDEvent *event) { Double_t parLine0[10]; Double_t parLine1[10]; TMatrixD par0(4,1),cov0(4,4),par1(4,1),cov1(4,4); - Int_t nl0 = RefitLinear(seed0,s0, parLine0, s0,par0,cov0,fXIO,kFALSE); - Int_t nl1 = RefitLinear(seed1,s1, parLine1, s0,par1,cov1,fXIO,kFALSE); + Bool_t useInnerOuter = kFALSE; + if (s1%36!=s0%36) useInnerOuter = fUseInnerOuter; // for left - right alignment both sectors refit can be used if specified + Int_t nl0 = RefitLinear(seed0,s0, parLine0, s0,par0,cov0,fXIO,useInnerOuter); + Int_t nl1 = RefitLinear(seed1,s1, parLine1, s0,par1,cov1,fXIO,useInnerOuter); parLine0[0]=0; // reference frame in IO boundary parLine1[0]=0; // if (nl0(event->FindListObject("AliESDfriend")); + if (!ESDfriend) return; + Int_t ntracks=event->GetNumberOfTracks(); + //cuts + const Int_t kminCl = 60; + const Int_t kminClSum = 120; + // const Double_t kDistY = 5; + // const Double_t kDistZ = 40; + const Double_t kDistTh = 0.05; + const Double_t kDist1Pt = 0.1; + // + Float_t dca0[2]; + Float_t dca1[2]; + Int_t index0=0,index1=0; + // + for (Int_t i0=0;i0GetTrack(i0); + if (!track0) continue; + if ((track0->GetStatus() & AliESDtrack::kTPCrefit)==0) continue; + if (track0->GetOuterParam()==0) continue; + AliESDtrack *track1P = 0; + if (track0->GetTPCNcls()GetImpactParameters(dca0[0],dca0[1]); + index0=i0; + index1=-1; + // + for (Int_t i1=0;i1GetTrack(i1); + if (!track1) continue; + if ((track1->GetStatus() & AliESDtrack::kTPCrefit)==0) continue; + if (track1->GetOuterParam()==0) continue; + if (track1->GetTPCNcls()GetImpactParameters(dca1[0],dca1[1]); + //if (TMath::Abs(dca1[0]-dca0[0])>kDistY) continue; + //if (TMath::Abs(dca1[1]-dca0[1])>kDistZ) continue; + if (TMath::Abs(track0->GetTgl()+track1->GetTgl())>kDistTh) continue; + if (TMath::Abs(track0->GetSigned1Pt()+track1->GetSigned1Pt())>kDist1Pt) continue; + track1P = track1; + index1=i1; + } + AliESDfriendTrack *friendTrack = 0; + TObject *calibObject=0; + AliTPCseed *seed0 = 0,*seed1=0; + // + friendTrack = (AliESDfriendTrack *)ESDfriend->GetTrack(index0);; + for (Int_t l=0;(calibObject=friendTrack->GetCalibObject(l));++l) { + if ((seed0=dynamic_cast(calibObject))) break; + } + if (index1>0){ + friendTrack = (AliESDfriendTrack *)ESDfriend->GetTrack(index1);; + for (Int_t l=0;(calibObject=friendTrack->GetCalibObject(l));++l) { + if ((seed1=dynamic_cast(calibObject))) break; + } + } + // + Int_t npoints=0, ncont=0; + if (seed0) {npoints+=seed0->GetNumberOfClusters(); ncont++;} + if (seed1) {npoints+=seed1->GetNumberOfClusters(); ncont++;} + if (npointsGetClusterPointer(icl); + if (!cluster) continue; + Float_t xyz[3]; + Float_t cov[6]; + cluster->GetGlobalXYZ(xyz); + cluster->GetGlobalCov(cov); + AliTrackPoint point(xyz,cov,cluster->GetDetector()); + array.AddPoint(npoints, &point); + if (cpoint>=npoints) continue; //shoul not happen + array.AddPoint(cpoint, &point); + cpoint++; + } + if (seed1) for (Int_t icl = 0; icl<160; icl++){ + AliTPCclusterMI *cluster=seed1->GetClusterPointer(icl); + if (!cluster) continue; + Float_t xyz[3]; + Float_t cov[6]; + cluster->GetGlobalXYZ(xyz); + cluster->GetGlobalCov(cov); + AliTrackPoint point(xyz,cov,cluster->GetDetector()); + array.AddPoint(npoints, &point); + if (cpoint>=npoints) continue; //shoul not happen + array.AddPoint(cpoint, &point); + cpoint++; + } + // + // + // + TTreeSRedirector *cstream = GetDebugStreamer(); + if (cstream){ + static AliExternalTrackParam dummy; + AliExternalTrackParam *p0In = &dummy; + AliExternalTrackParam *p1In = &dummy; + AliExternalTrackParam *p0Out = &dummy; + AliExternalTrackParam *p1Out = &dummy; + if (track0) { + p0In= new AliExternalTrackParam(*track0); + p0Out=new AliExternalTrackParam(*(track0->GetOuterParam())); + } + if (track1P) { + p1In= new AliExternalTrackParam(*track1P); + p1Out=new AliExternalTrackParam(*(track1P->GetOuterParam())); + } + + (*cstream)<<"trackPoints"<< + "run="<StoreData(kTRUE); + fitter->StoreData(kFALSE); fFitterArray6.AddAt(fitter,GetIndex(s1,s2)); counter6++; if (GetDebugLevel()>0) cerr<<"Creating fitter6 "<