]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSAlignMille.h
Fix for bug #78521: Cmake - recompiling AliRoot when switching to a new ROOT tag
[u/mrichter/AliRoot.git] / ITS / AliITSAlignMille.h
index a64fe526256fc226a4a0cb84145b625c29a71368..24a28a997e2d39a63ad42c2e8f15d24f48615f6c 100644 (file)
 #include <TObject.h>
 #include "AliTrackPointArray.h"
 
+// number of used objects
+#define ITSMILLENDETELEM    2198
+#define ITSMILLENPARCH         6
+#define ITSMILLENLOCAL         5
+#define ITSMILLENSTDEV         3       
+
 class AliMillepede;
 class AliAlignObjParams;
 class TGeoManager;
 class TGeoHMatrix;
 class AliITSAlignMilleModule;
-
-// number of used objects
-#define ITSMILLE_NDETELEM    2198
-#define ITSMILLE_NPARCH         6
-#define ITSMILLE_NLOCAL         4
-#define ITSMILLE_NSTDEV         3       
+class AliTrackFitterRieman;
+class AliITSAlignMilleData;
 
 class AliITSAlignMille:public TObject
 {
-
 public:
   AliITSAlignMille(const Char_t *configFilename="AliITSAlignMille.conf", Bool_t initmille=kTRUE);
   virtual ~AliITSAlignMille();
   
   // geometry methods 
-  Int_t  GetModuleIndex(const Char_t *symname);
+  Int_t     GetModuleIndex(const Char_t *symname);
   Int_t     GetModuleIndex(UShort_t voluid);
   UShort_t  GetModuleVolumeID(const Char_t *symname);
   UShort_t  GetModuleVolumeID(Int_t index);
@@ -50,11 +51,16 @@ public:
   const Char_t* GetPreAlignmentFileName() {return fPreAlignmentFileName.Data();}
   void      PrintCurrentModuleInfo();
   void      Print(Option_t*) const;
+  Bool_t    IsConfigured() const {return fIsConfigured;}
+  void      SetRequiredPoint(Char_t* where, Int_t ndet, Int_t updw, Int_t nreqpts);
   
   // fitting methods
   void      SetMinNPtsPerTrack(Int_t pts=3) {fMinNPtsPerTrack=pts;}
   Int_t     ProcessTrack(AliTrackPointArray *track);
+  AliTrackPointArray *PrepareTrack(AliTrackPointArray *track); // build a new AliTrackPointArray with selected conditions
   void      InitTrackParams(int meth=1);
+  Bool_t    InitRiemanFit();
+  AliTrackFitterRieman  *GetRiemanFitter() const {return fRieman;}
   Int_t     InitModuleParams();
   Int_t     CheckCurrentTrack();
   Bool_t    CheckVolumeID(UShort_t voluid) const; // checks voluid for sensitive volumes
@@ -62,9 +68,11 @@ public:
   Int_t     IsContained(UShort_t voluid) const;
   Int_t     CalcIntersectionPoint(Double_t *lpar, Double_t *gpar);
   Int_t     CalcDerivatives(Int_t paridx, Bool_t islpar);
-  Double_t* GetLocalIntersectionPoint() {return fPintLoc;}
-  Double_t* GetGlobalIntersectionPoint() {return fPintGlo;}
+  const Double_t* GetLocalIntersectionPoint() const {return fPintLoc;}
+  const Double_t* GetGlobalIntersectionPoint() const {return fPintGlo;}
   void      SetInitTrackParamsMeth(Int_t meth=1) {fInitTrackParamsMeth=meth;}
+  AliTrackPointArray *SortTrack(AliTrackPointArray *atp);
+  void      SetTemporaryExcludedModule(Int_t index) {fTempExcludedModule=index;}
 
   // millepede methods
   void      FixParameter(Int_t param, Double_t value);
@@ -78,23 +86,40 @@ public:
   void      GlobalFit(Double_t *parameters,Double_t *errors,Double_t *pulls);
   void      PrintGlobalParameters();
   Double_t  GetParError(Int_t iPar);
-  Int_t     SetLocalEquations();
+  Int_t     AddLocalEquation(AliITSAlignMilleData &m);
+  void      SetLocalEquations(AliITSAlignMilleData *m, Int_t neq);
   
   // fitting stuffs
-  AliTrackPointArray *GetCurrentTrack() {return fTrack;}
-  AliTrackPoint      *GetCurrentCluster() {return &fCluster;}
+  AliTrackPointArray *GetCurrentTrack() const {return fTrack;}
+  const AliTrackPoint      *GetCurrentCluster() const {return &fCluster;}
+  void      SetCurrentTrack(AliTrackPointArray * const atp) {fTrack=atp;}
+  void      SetCurrentCluster(const AliTrackPoint &atp) {fCluster=atp;}
 
   // geometry stuffs
-  Int_t  GetNModules() const {return fNModules;}
-  Int_t  GetCurrentModuleIndex() const {return fCurrentModuleIndex;}
-  TGeoHMatrix *GetCurrentModuleHMatrix() {return fCurrentModuleHMatrix;}
-  Double_t    *GetCurrentModuleTranslation() {return fCurrentModuleTranslation;}
-  Int_t  GetCurrentModuleInternalIndex() const {return fCurrentModuleInternalIndex;}
-  Int_t       *GetModuleIndexArray() {return fModuleIndex;}
+  Int_t     GetNModules() const {return fNModules;}
+  Int_t     GetCurrentModuleIndex() const {return fCurrentModuleIndex;}
+  TGeoHMatrix *GetCurrentModuleHMatrix() const {return fCurrentModuleHMatrix;}
+  const Double_t *GetCurrentModuleTranslation() const {return fCurrentModuleTranslation;}
+  Int_t     GetCurrentModuleInternalIndex() const {return fCurrentModuleInternalIndex;}
+  const Int_t    *GetModuleIndexArray() const {return fModuleIndex;}
+  const Int_t    *GetProcessedPoints() const {return fProcessedPoints;}
+  Int_t     GetTotBadLocEqPoints() const {return fTotBadLocEqPoints;}
   AliITSAlignMilleModule  *GetMilleModule(UShort_t voluid); // get pointer to the defined supermodule
-  AliITSAlignMilleModule  *GetCurrentModule();
-  UShort_t    *GetModuleVolumeIDArray() {return fModuleVolumeID;}
-  
+  AliITSAlignMilleModule  *GetCurrentModule() const;
+  const UShort_t *GetModuleVolumeIDArray() const {return fModuleVolumeID;}
+
+  // debug stuffs
+  const Double_t  *GetMeasLoc() const { return fMeasLoc;}
+  const Double_t  *GetSigmaLoc() const { return fSigmaLoc;}
+  Double_t   GetBField() const {return fBField;}
+  const Double_t  *GetLocalInitParam() const {return fLocalInitParam;}
+  Double_t   GetLocalDX() const {return fDerivativeXLoc;}
+  Double_t   GetLocalDZ() const {return fDerivativeZLoc;}
+  Double_t   GetParSigTranslations() const {return fParSigTranslations;}
+  Double_t   GetParSigRotations() const {return fParSigRotations;}
+  Int_t      GetPreAlignmentQualityFactor(Int_t index) const; // if not prealign. return -1
+  void       SetBug(Int_t bug) {fBug=bug;} // 1:SSD inversion sens.18-19
+
  private:
 
   // configuration methods
@@ -126,22 +151,33 @@ public:
   AliTrackPointArray *fTrack;       ///< pointer to current track 
   AliTrackPoint fCluster;           ///< current cluster
   Double_t     *fGlobalDerivatives;   ///< Array of global derivatives
-  Double_t      fLocalDerivatives[ITSMILLE_NLOCAL]; ///< Array of local deriv.
-  Double_t      fLocalInitParam[ITSMILLE_NLOCAL];   ///< Array with inital values for local parameters for current track
-  Double_t      fModuleInitParam[ITSMILLE_NPARCH];  ///< Array with inital values for current module parameters (init geometry)
+  Double_t      fLocalDerivatives[ITSMILLENLOCAL]; ///< Array of local deriv.
+  Double_t      fLocalInitParam[ITSMILLENLOCAL];   ///< Array with inital values for local parameters for current track
+  Double_t      fModuleInitParam[ITSMILLENPARCH];  ///< Array with inital values for current module parameters (init geometry)
   Double_t      fPintLoc[3]; ///
   Double_t      fPintLoc0[3]; ///
   Double_t      fPintGlo[3]; ///
   Double_t      fMeasLoc[3]; // current point local coordinates (the original ones)
   Double_t      fMeasGlo[3]; // current point glob. coord (AliTrackPoint)
   Double_t      fSigmaLoc[3]; // stdev current point
-  //TGeoHMatrix  *fTempHMat; ///
+  Double_t      fSigmaXfactor; ///
+  Double_t      fSigmaZfactor; ///
   AliAlignObjParams *fTempAlignObj; ///
   Double_t      fDerivativeXLoc; // localX deriv.
   Double_t      fDerivativeZLoc; // localZ deriv.
-  Double_t      fDeltaPar; ///
   Int_t         fMinNPtsPerTrack; ///
   Int_t         fInitTrackParamsMeth; ///
+  Int_t        *fProcessedPoints; /// array of statistics of used points per module
+  Int_t         fTotBadLocEqPoints; /// total number of reject points because of bad EqLoc
+  AliTrackFitterRieman *fRieman; /// riemann fitter for helices
+  Bool_t        fRequirePoints;  // required points in specific layers
+  Int_t         fNReqLayUp[6];    /// number of points required in layer[n] with Y>0
+  Int_t         fNReqLayDown[6];  /// number of points required in layer[n] with Y<0
+  Int_t         fNReqLay[6];      /// number of points required in layer[n] 
+  Int_t         fNReqDetUp[3];    /// number of points required in Detector[n] with Y>0
+  Int_t         fNReqDetDown[3];  /// number of points required in Detector[n] with Y<0
+  Int_t         fNReqDet[3];      /// number of points required in Detector[n]
+  Int_t         fTempExcludedModule; /// single module temporary excluded from initial fit
 
   // geometry stuffs
   TString       fGeometryFileName;  ///
@@ -152,18 +188,26 @@ public:
   Int_t         fCurrentSensVolIndex;   /// Current point (sens. vol.) index
   Double_t      fCurrentModuleTranslation[3]; ///
   Int_t         fNModules;  /// number of defined modules from config file
-  Int_t         fModuleIndex[ITSMILLE_NDETELEM*2]; ///
-  UShort_t      fModuleVolumeID[ITSMILLE_NDETELEM*2];  ///
-  Bool_t        fFreeParam[ITSMILLE_NDETELEM*2][ITSMILLE_NPARCH];  ///
+  Int_t         fModuleIndex[ITSMILLENDETELEM*2]; ///
+  UShort_t      fModuleVolumeID[ITSMILLENDETELEM*2];  ///
+  Bool_t        fFreeParam[ITSMILLENDETELEM*2][ITSMILLENPARCH];  ///
   Bool_t        fUseLocalShifts; /// 
   Bool_t        fUseSuperModules; /// 
   Bool_t        fUsePreAlignment; /// 
+  Bool_t        fUseSortedTracks; /// default is kTRUE 
+  Bool_t        fBOn; /// magentic field ON
+  Double_t      fBField; /// value of magnetic field
   Int_t         fNSuperModules; /// number of custom supermodules in SM file
   TGeoHMatrix  *fCurrentModuleHMatrix; /// SuperModule matrix
+  Bool_t        fIsConfigured; ///
+  Int_t         fPreAlignQF[ITSMILLENDETELEM*2]; ///
+  Double_t      fSensVolSigmaXfactor[ITSMILLENDETELEM*2]; ///
+  Double_t      fSensVolSigmaZfactor[ITSMILLENDETELEM*2]; ///
+  Int_t         fBug; /// tag for temporary bug correction
 
-  AliITSAlignMilleModule *fMilleModule[ITSMILLE_NDETELEM*2]; /// array of super modules to be aligned
+  AliITSAlignMilleModule *fMilleModule[ITSMILLENDETELEM*2]; /// array of super modules to be aligned
 
-  AliITSAlignMilleModule *fSuperModule[ITSMILLE_NDETELEM*2]; /// array of super modules defined in supermodule file
+  AliITSAlignMilleModule *fSuperModule[ITSMILLENDETELEM*2]; /// array of super modules defined in supermodule file
 
   AliITSAlignMille(const AliITSAlignMille& rhs);
   AliITSAlignMille& operator=(const AliITSAlignMille& rhs);