LCOV - code coverage report
Current view: top level - TPC/TPCcalib - AliTPCcalibAlign.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 19 5.3 %
Date: 2016-06-14 17:26:59 Functions: 1 19 5.3 %

          Line data    Source code
       1             : #ifndef ALITPCCALIBALIGN_H
       2             : #define ALITPCCALIBALIGN_H
       3             : 
       4             : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       5             :  * See cxx source for full Copyright notice                               */
       6             : 
       7             : ////
       8             : ////
       9             : ////
      10             : 
      11             : class TFile;
      12             : class TGraphErrors;
      13             : class TH1;
      14             : class THnSparse;
      15             : class THnBase;
      16             : class THn;
      17             : #include <TLinearFitter.h>
      18             : #include <TMatrixDfwd.h>
      19             : class TObjArray;
      20             : class TTree;
      21             : 
      22             : #include "AliTPCcalibBase.h"
      23             : class AliExternalTrackParam;
      24             : class AliTPCPointCorrection;
      25             : class AliTPCseed;
      26             : 
      27             : class AliTPCcalibAlign:public AliTPCcalibBase {
      28             : public:
      29             :   enum HistoType {kY=0, kZ =1, kPhi=2, kTheta=3, 
      30             :                   kYPhi=4, kZTheta=5, 
      31             :                   kYz=6,kZz=7,kPhiZ=8,kThetaZ=9};
      32             :   enum FitType{ k6=0, k9=1, k12=2};
      33             :   AliTPCcalibAlign();
      34             :   AliTPCcalibAlign(const Text_t *name, const Text_t *title);
      35             :   AliTPCcalibAlign(const AliTPCcalibAlign &align);
      36             :   //
      37             :   virtual ~AliTPCcalibAlign();
      38             :   void     Process(AliESDEvent *event);
      39             :   virtual void ProcessSeed(AliTPCseed *track);
      40           0 :   virtual void Process(AliTPCseed */*track*/){ return ;}
      41             :   virtual void Analyze();
      42             :   virtual void Terminate();  
      43             :   virtual Long64_t Merge(TCollection* const list);
      44             :   void ExportTrackPoints(AliESDEvent *event);
      45             :   //
      46             :   //
      47             :   void MakeReportDy(TFile *output); 
      48             :   void MakeReportDyPhi(TFile *output);
      49             :   //
      50             :   void UpdatePointCorrection(AliTPCPointCorrection * correction);
      51             :   //
      52             :   virtual void EvalFitters(Int_t minPoints=20);
      53             :   TH1 * GetHisto(HistoType type, Int_t s1, Int_t s2, Bool_t force=kFALSE);
      54             :   void  MakeTree(const char *fname="alignTree.root", Int_t minPoints=20);
      55             :   TGraphErrors * MakeGraph(Int_t sec0, Int_t sec1, Int_t dsec, 
      56             :                            Int_t i0, Int_t i1, FitType type); 
      57             :   Int_t  RefitLinear(const AliTPCseed * seed, Int_t isec, Double_t *fitParam, Int_t refSector, TMatrixD &param, TMatrixD&covar, Double_t xRef, Bool_t both=kFALSE);
      58             :   
      59             :   void ProcessTracklets(const AliExternalTrackParam &t1,
      60             :                         const AliExternalTrackParam &t2,
      61             :                         const AliTPCseed * seed,
      62             :                         Int_t s1,Int_t s2);
      63             :   
      64             :   void UpdateClusterDeltaField(const AliTPCseed * seed);
      65             :   void UpdateAlignSector(const AliTPCseed * seed,Int_t isec); 
      66           0 :   Int_t GetIndex(Int_t s1,Int_t s2) const {return 72*s1+s2;}
      67             :   //
      68             :   inline const TMatrixD     * GetTransformation(Int_t s1,Int_t s2, Int_t fitType);
      69             :   //
      70             :   inline TLinearFitter* GetFitter12(Int_t s1,Int_t s2);
      71             :   inline TLinearFitter* GetFitter9(Int_t s1,Int_t s2);
      72             :   inline TLinearFitter* GetFitter6(Int_t s1,Int_t s2);
      73             :   //
      74             :   Bool_t GetTransformation12(Int_t s1,Int_t s2,TMatrixD &a);
      75             :   Bool_t GetTransformation9(Int_t s1,Int_t s2,TMatrixD &a);
      76             :   Bool_t GetTransformation6(Int_t s1,Int_t s2,TMatrixD &a);
      77             :   Int_t  AcceptTracklet(const AliExternalTrackParam &tp1,
      78             :                         const AliExternalTrackParam &tp2) const;
      79             :   Int_t  AcceptTracklet(const Double_t *t1,
      80             :                         const Double_t *t2) const;
      81             : 
      82             :   void ProcessDiff(const AliExternalTrackParam &t1,
      83             :                    const AliExternalTrackParam &t2,
      84             :                    const AliTPCseed *seed,
      85             :                    Int_t s1,Int_t s2);
      86             :   void ProcessAlign(Double_t * t1, Double_t * t2, Int_t s1,Int_t s2);
      87             : 
      88             : //   Bool_t GetTransformationCovar12(Int_t s1,Int_t s2,TMatrixD &a, Bool_t norm=kFALSE);
      89             : //   Bool_t GetTransformationCovar9(Int_t s1,Int_t s2,TMatrixD &a, Bool_t norm=kFALSE);
      90             : //   Bool_t GetTransformationCovar6(Int_t s1,Int_t s2,TMatrixD &a, Bool_t norm=kFALSE);
      91             :   void Add(AliTPCcalibAlign * align);
      92           0 :   const Int_t *GetPoints() const {return fPoints;}
      93           0 :   void     Process(AliESDtrack *const track, Int_t runNo=-1){AliTPCcalibBase::Process(track,runNo);};
      94             :   TLinearFitter* GetOrMakeFitter12(Int_t s1,Int_t s2);
      95             :   TLinearFitter* GetOrMakeFitter9(Int_t s1,Int_t s2);
      96             :   TLinearFitter* GetOrMakeFitter6(Int_t s1,Int_t s2);
      97             :   void Process12(const Double_t *t1, const Double_t *t2,
      98             :                  TLinearFitter *fitter) const;
      99             :   void Process9(const Double_t *const t1, const Double_t *const t2, TLinearFitter *fitter) const;
     100             :   void Process6(const Double_t *const t1, const Double_t *const t2, TLinearFitter *fitter) const;
     101             :   void GlobalAlign6(Int_t minPoints, Float_t sysError, Int_t niter);
     102             :   //
     103             :   // Cluster comparison Part
     104             :   //
     105             :   //
     106             :   // For visualization and test purposes
     107             :   //
     108             :   Double_t Correct(Int_t type, Int_t value, Int_t s1, Int_t s2, Double_t x, Double_t y, Double_t z, Double_t phi,Double_t theta); 
     109           0 :   static Double_t SCorrect(Int_t type, Int_t value, Int_t s1, Int_t s2, Double_t x, Double_t y, Double_t z, Double_t phi,Double_t theta){return Instance()->Correct(type,value,s1,s2,x,y,z,phi,theta);}
     110             :   static AliTPCcalibAlign* Instance();
     111           0 :   void SetInstance(AliTPCcalibAlign* const param){fgInstance = param;}
     112             :   static void Constrain1Pt(AliExternalTrackParam &t1, const AliExternalTrackParam &t2, Bool_t noField);
     113           0 :   void SetNoField(Bool_t noField){ fNoField=noField;}
     114             : 
     115             :   //
     116             :   // Kalman fileter for sectors
     117             :   //
     118             :   void MakeSectorKalman();
     119             :   void UpdateSectorKalman(Int_t sector, Int_t quadrant0, Int_t quadrant1,  TMatrixD *const p0, TMatrixD *const c0, TMatrixD *const p1, TMatrixD *const c1);
     120             :   void UpdateSectorKalman(TMatrixD &par0, TMatrixD &cov0, TMatrixD &para1, TMatrixD &cov1);
     121             :   Double_t GetCorrectionSector(Int_t coord, Int_t sector, Double_t lx, Double_t ly, Double_t lz); 
     122             :   static Double_t SGetCorrectionSector(Int_t coord, Int_t sector, Double_t lx, Double_t ly, Double_t lz); 
     123             : 
     124             :   //
     125             :   // Kalman filter for full TPC
     126             :   //
     127             :   void MakeKalman();
     128             :   void UpdateKalman(Int_t sector0, Int_t sector1,  TMatrixD &p0, TMatrixD &c0, TMatrixD &p1, TMatrixD &c1);
     129             :   void UpdateKalman(TMatrixD &par0, TMatrixD &cov0, TMatrixD &para1, TMatrixD &cov1);
     130             :   //
     131             :   //private:
     132             :   static Int_t CheckCovariance(TMatrixD &covar);
     133             :   //
     134             :   //
     135             :   void MakeResidualHistos();
     136             :   void MakeResidualHistosTracklet();
     137           0 :   THn * GetClusterDelta(Int_t index) const  { return fClusterDelta[index];}
     138           0 :   THnSparse * GetTrackletDelta(Int_t index) const  { return fTrackletDelta[index];}
     139             : public:
     140             :   
     141             :   void FillHisto(const Double_t *t1,
     142             :                  const Double_t *t2,
     143             :                  Int_t s1,Int_t s2);
     144             :   void FillHisto(AliExternalTrackParam *tp1,
     145             :                  AliExternalTrackParam *tp2,
     146             :                  Int_t s1,Int_t s2);
     147             : 
     148           0 :   static void SetMergeEntriesCut(Double_t entriesCut){fgkMergeEntriesCut = entriesCut;}
     149             : protected:
     150             :   THn     *fClusterDelta[2];  //clusters residuals
     151             :   THnSparse     *fTrackletDelta[4]; //track residuals
     152             : 
     153             :   TObjArray fDphiHistArray;    // array of residual histograms  phi      -kPhi
     154             :   TObjArray fDthetaHistArray;  // array of residual histograms  theta    -kTheta
     155             :   TObjArray fDyHistArray;      // array of residual histograms  y        -kY
     156             :   TObjArray fDzHistArray;      // array of residual histograms  z        -kZ
     157             :   //
     158             :   TObjArray fDyPhiHistArray;      // array of residual histograms  y     -kYPhi
     159             :   TObjArray fDzThetaHistArray;    // array of residual histograms  z-z   -kZTheta
     160             :   //
     161             :   TObjArray fDphiZHistArray;      // array of residual histograms  phi   -kPhiz
     162             :   TObjArray fDthetaZHistArray;    // array of residual histograms  theta -kThetaz
     163             :   TObjArray fDyZHistArray;        // array of residual histograms  y     -kYz
     164             :   TObjArray fDzZHistArray;        // array of residual histograms  z     -kZz
     165             :   //
     166             :   //
     167             :   TObjArray fFitterArray12;    // array of fitters
     168             :   TObjArray fFitterArray9;     // array of fitters
     169             :   TObjArray fFitterArray6;     // array of fitters
     170             :   //
     171             :   TObjArray fMatrixArray12;    // array of transnformtation matrix
     172             :   TObjArray fMatrixArray9;     // array of transnformtation matrix
     173             :   TObjArray fMatrixArray6;     // array of transnformtation matrix 
     174             :   //
     175             :   //
     176             :   //
     177             :   //
     178             :   TObjArray fCombinedMatrixArray6;      // array  combeined transformation matrix
     179             :   //
     180             :   //
     181             :   Int_t fPoints[72*72];        // number of points in the fitter 
     182             :   Bool_t fNoField;             // flag - no field data
     183             :   // refernce x
     184             :   Double_t fXIO;               // OROC-IROC boundary
     185             :   Double_t fXmiddle;           // center of the TPC sector local X
     186             :   Double_t fXquadrant;         // x quadrant
     187             :   //
     188             :   // Kalman filter for sector internal  alignemnt
     189             :   //
     190             :   TObjArray fArraySectorIntParam; // array of sector alignment parameters
     191             :   TObjArray fArraySectorIntCovar; // array of sector alignment covariances 
     192             :   //
     193             :   // Kalman filter for global alignment
     194             :   //
     195             :   TMatrixD  *fSectorParamA;     // Kalman parameter   for A side
     196             :   TMatrixD  *fSectorCovarA;     // Kalman covariance  for A side 
     197             :   TMatrixD  *fSectorParamC;     // Kalman parameter   for A side
     198             :   TMatrixD  *fSectorCovarC;     // Kalman covariance  for A side 
     199             :   //
     200             :   //
     201             :   //
     202             :   Bool_t    fUseInnerOuter;         // flag- use Inner Outer sector for left righ alignment
     203             :   
     204             :   static AliTPCcalibAlign*   fgInstance; //! Instance of this class (singleton implementation)
     205             :   static Double_t            fgkMergeEntriesCut;  //maximal number of entries for merging  -can be modified via setter
     206             : private:
     207             :   AliTPCcalibAlign&  operator=(const AliTPCcalibAlign&);// not implemented
     208             : 
     209             :   // IMPORTANT: If you change the data members, 
     210             :   // please do not forget to increment the ClassDef and to update the Streamer in AliTPCcalibAlign.cxx
     211           6 :   ClassDef(AliTPCcalibAlign,7)
     212             : };
     213             : 
     214             : 
     215             : TLinearFitter* AliTPCcalibAlign::GetFitter12(Int_t s1,Int_t s2) {
     216           0 :   return static_cast<TLinearFitter*>(fFitterArray12[GetIndex(s1,s2)]);
     217             : }
     218             : TLinearFitter* AliTPCcalibAlign::GetFitter9(Int_t s1,Int_t s2) {
     219           0 :   return static_cast<TLinearFitter*>(fFitterArray9[GetIndex(s1,s2)]);
     220             : }
     221             : TLinearFitter* AliTPCcalibAlign::GetFitter6(Int_t s1,Int_t s2) {
     222           0 :   return static_cast<TLinearFitter*>(fFitterArray6[GetIndex(s1,s2)]);
     223             : }
     224             : 
     225             : const TMatrixD * AliTPCcalibAlign::GetTransformation(Int_t s1,Int_t s2, Int_t fitType){
     226           0 :   if (fitType==0) return static_cast<TMatrixD*>(fMatrixArray6[GetIndex(s1,s2)]);
     227           0 :   if (fitType==1) return static_cast<TMatrixD*>(fMatrixArray9[GetIndex(s1,s2)]);
     228           0 :   if (fitType==2) return static_cast<TMatrixD*>(fMatrixArray12[GetIndex(s1,s2)]);
     229           0 :   return 0;
     230           0 : }
     231             : 
     232             : 
     233             : 
     234             : #endif

Generated by: LCOV version 1.11