ROOT logo
#ifndef HMDCTRACKGSPLINE_H
#define HMDCTRACKGSPLINE_H
#include "TNamed.h"
#include <iostream>
#include <fstream>
#include "TString.h"
#include "TMath.h" 
#include "hmdctrackgfield.h"
#include "hmdctrackgcorrections.h"
#include "hmdctrackgcorrpar.h"
#include "hgeomvector.h"
#include "hmdcseg.h"
#include "hmdckickplane.h"
#include "hmdcgetcontainers.h"
#include "heventheader.h"
class HMdcTrackGSpline : public TNamed{
private:
   Double_t pi;
   Double_t XX,YY,ZZ;
   Double_t XXdir,YYdir,ZZdir;
   Double_t distfield;
   Double_t errorY;
   Int_t polarity;//polarity of particle
   Double_t target;//targets z position in mm
   Double_t A1,B1,D1;
   Double_t A2,B2,D2;
   Double_t A3,B3,D3;
   Double_t A4,B4,D4;
   Int_t N,N1,N2;//number of points in the field region
   HGeomVector *equationXY;
   Double_t *x;
   Double_t *Bx,*By,*Bz;//Field components
   Double_t phi,teta;//in radian
   Double_t *XZ,*YZ,*XZP,*YZP;//parameters of spline fit
   Double_t *FXZ,*FYZ,*FXZP,*FYZP;//parameters of spline fit
   Double_t *dydz,*dxdz,*d2ydz,*d2xdz, *curv;
   Double_t *x2,*zz2,*z2,*y2;
   Double_t precon,preconErr; //reconstructed momentum
   Double_t precon111;
   Double_t *dist;
   Double_t metaDistance;
   Double_t tetadig,phidig,phidigg,teta2dig,phi2dig;//in degrees
   HMdcTrackGField*  b;
   HMdcKickPlane *kickplane;
   HMdcTrackGCorrections* c;
   HMdcTrackGCorrections *corrScan[3];
   HGeomVector *point; //Intitial points from MDC's
   HGeomVector *fieldpoints,*secDer,*Tfieldpoints,*BB;//points selected in field region
   HGeomVector *field;//field components 
   Float_t fScal;
   Bool_t isInitialized; //! if middle Plane params have been set =kTRUE
   Bool_t isKickIsInitialized;
   void getPoint();
   void transteta();
   void transPhi();
   // void spline(HGeomVector *,Double_t *,Double_t *,Double_t *,Double_t *,Int_t);
   void init1();
   void getpoints();
   void fieldequation();
   void solveMomentum();
   Int_t getMomentum(Bool_t,Int_t);
   void transFieldpoints();
   void getcorrE(Int_t,Int_t,Int_t,Double_t &,Int_t);
   void getcorrP(Int_t,Int_t,Int_t,Double_t &,Int_t);
   
   Double_t qSpline;
   void initParams(Int_t,Int_t);
   void clearParams();
   void remove(Double_t *);
   void remove(HGeomVector *);
   Double_t middleA,middleB,middleD;
   Double_t middleA4,middleB4,middleD4;                     
   void calcErrors(Double_t *);
   //  Double_t SplineMinimize(HGeomVector *eq,Int_t size);
   HGeomVector SegmentPoints;
   Float_t zGlobal;
   Bool_t isSecDerY;
 

   HGeomVector geomParams[6][4];
   Double_t    middleGA[6][4];
   Double_t    middleGB[6][4];
   Double_t    middleGD[6][4];
public:
   Float_t calcIOMatching(HMdcSeg *segments[2]);
   void checkSecDer(Double_t *,Double_t * );
   void getXYpoint(Float_t *,Float_t *,Float_t *);
   void getField(Float_t *,Float_t *,Float_t *);
   Double_t SplineMinimize(HGeomVector *,HGeomVector *,Int_t size);
   void SolveDiffEquation(HGeomVector *,HGeomVector *,Int_t ,Float_t *,Float_t *);
   Double_t det3(Double_t a[3][3]);
   void spline(HGeomVector *,Double_t *,Double_t *,Double_t *,Double_t *,Int_t);
   
   Float_t calcTarDist(HVertex &,HMdcSeg *SEG,HGeomTransform *);
   Float_t calcTarDist(HGeomVector &,HGeomVector &,HGeomVector &);
   HGeomVector getSegmentPoints() {return SegmentPoints;}
   Double_t getFieldDistance();
   
   
   Double_t getqSpline() const {return qSpline;}
   Double_t getErrP() {return preconErr;}
   void calcSegPoints(HMdcSeg *seg[2], HGeomVector *);
   void calcSegPoints(HGeomVector *,HMdcSeg *seg);
   void mixPoints(HGeomVector &, HGeomVector &);
   void calcSegPoints123(HMdcSeg *seg[2], HGeomVector *);
   void calcSegPoints123P4(HMdcSeg *seg[2], HGeomVector *);
   Int_t getPolarity() const {return polarity;}
   void setMagnetScaling(Float_t FScal) {fScal=FScal;}
   void equationofLine(Double_t*  ,Double_t*,Double_t ,Double_t &);
   void equationofLine3D(HGeomVector,HGeomVector,Double_t,Double_t &,Double_t &); 
   HGeomVector calcMetaDir(HMdcSeg *, HGeomVector );
   //Calculates direction from kickplane to META, META hits are suposed
   //to be in sector coordinate system;
     HGeomVector calcKickIntersection(HMdcSeg *);
   
   //calculates intersection of segment with kickplane;
   void calcKickIntersectionErr(HMdcSeg *,HGeomVector &, HGeomVector &);
   Double_t getDistField() const {return distfield;}
   HGeomVector getPointOne() const {return point[1];}
   void calcInter(Double_t,Double_t,Double_t,HGeomVector,HGeomVector,HGeomVector &);
   HMdcTrackGSpline(const Char_t * name="Spline",const Char_t * title="Spline");
   ~HMdcTrackGSpline();
   void setDataPointer(HMdcTrackGField* field = 0,HMdcTrackGCorrections* corr = 0);
   void setCorrScan(HMdcTrackGCorrections* corr[]);
   
   void setF(HMdcTrackGField* field) {b=field;}
   void setCorrPointer(HMdcTrackGCorrections* corr=0);
   void setKickPointer(HMdcKickPlane *kickpointer=0);
   Double_t calcMomentum(HGeomVector *,Bool_t cond=kTRUE,Double_t targetz=0.,Int_t nch=4);
   Double_t calcMomentum(HMdcSeg *seg[2],Bool_t cond=kTRUE,Double_t targetz=0.);
   Double_t calcMomentum123(HMdcSeg *seg[2],Bool_t cond=kTRUE,Double_t targetz=0.);
   Double_t calcMomentum123P4(HMdcSeg *seg[2],Bool_t cond=kTRUE,Double_t targetz=0.);
      void getDistance(Double_t  *);
   Double_t getMetaDistance(Double_t, Double_t, Double_t);
   void transSpline(Double_t,Double_t,HGeomVector &,HGeomVector &);
   void transSplineB(Double_t,Double_t,HGeomVector &,HGeomVector &);
   void transSplineLocal(Double_t ,Double_t , HGeomVector &in,HGeomVector & out);
   HMdcTrackGCorrections *scanCorrections();      
   void initPlanes();
   void setZGlobal(Float_t _zGlobal) {zGlobal=_zGlobal;}
   void initMiddleParams(HGeomVector );
   void initMiddleParamsP4(HGeomVector );
   HGeomVector takeMiddleParams( HMdcGetContainers * ,Int_t ,Int_t);
   Int_t takeMiddleParams(const HGeomTransform* , Int_t , Int_t);
   void initMiddleParamsAll();
   Bool_t splineIsInitialized() {return isInitialized;}
   Bool_t splineKickIsInitialized() {return isKickIsInitialized;}
   
   ClassDef(HMdcTrackGSpline,0)
       };
#endif
       
       

     
     



 hmdctrackgspline.h:1
 hmdctrackgspline.h:2
 hmdctrackgspline.h:3
 hmdctrackgspline.h:4
 hmdctrackgspline.h:5
 hmdctrackgspline.h:6
 hmdctrackgspline.h:7
 hmdctrackgspline.h:8
 hmdctrackgspline.h:9
 hmdctrackgspline.h:10
 hmdctrackgspline.h:11
 hmdctrackgspline.h:12
 hmdctrackgspline.h:13
 hmdctrackgspline.h:14
 hmdctrackgspline.h:15
 hmdctrackgspline.h:16
 hmdctrackgspline.h:17
 hmdctrackgspline.h:18
 hmdctrackgspline.h:19
 hmdctrackgspline.h:20
 hmdctrackgspline.h:21
 hmdctrackgspline.h:22
 hmdctrackgspline.h:23
 hmdctrackgspline.h:24
 hmdctrackgspline.h:25
 hmdctrackgspline.h:26
 hmdctrackgspline.h:27
 hmdctrackgspline.h:28
 hmdctrackgspline.h:29
 hmdctrackgspline.h:30
 hmdctrackgspline.h:31
 hmdctrackgspline.h:32
 hmdctrackgspline.h:33
 hmdctrackgspline.h:34
 hmdctrackgspline.h:35
 hmdctrackgspline.h:36
 hmdctrackgspline.h:37
 hmdctrackgspline.h:38
 hmdctrackgspline.h:39
 hmdctrackgspline.h:40
 hmdctrackgspline.h:41
 hmdctrackgspline.h:42
 hmdctrackgspline.h:43
 hmdctrackgspline.h:44
 hmdctrackgspline.h:45
 hmdctrackgspline.h:46
 hmdctrackgspline.h:47
 hmdctrackgspline.h:48
 hmdctrackgspline.h:49
 hmdctrackgspline.h:50
 hmdctrackgspline.h:51
 hmdctrackgspline.h:52
 hmdctrackgspline.h:53
 hmdctrackgspline.h:54
 hmdctrackgspline.h:55
 hmdctrackgspline.h:56
 hmdctrackgspline.h:57
 hmdctrackgspline.h:58
 hmdctrackgspline.h:59
 hmdctrackgspline.h:60
 hmdctrackgspline.h:61
 hmdctrackgspline.h:62
 hmdctrackgspline.h:63
 hmdctrackgspline.h:64
 hmdctrackgspline.h:65
 hmdctrackgspline.h:66
 hmdctrackgspline.h:67
 hmdctrackgspline.h:68
 hmdctrackgspline.h:69
 hmdctrackgspline.h:70
 hmdctrackgspline.h:71
 hmdctrackgspline.h:72
 hmdctrackgspline.h:73
 hmdctrackgspline.h:74
 hmdctrackgspline.h:75
 hmdctrackgspline.h:76
 hmdctrackgspline.h:77
 hmdctrackgspline.h:78
 hmdctrackgspline.h:79
 hmdctrackgspline.h:80
 hmdctrackgspline.h:81
 hmdctrackgspline.h:82
 hmdctrackgspline.h:83
 hmdctrackgspline.h:84
 hmdctrackgspline.h:85
 hmdctrackgspline.h:86
 hmdctrackgspline.h:87
 hmdctrackgspline.h:88
 hmdctrackgspline.h:89
 hmdctrackgspline.h:90
 hmdctrackgspline.h:91
 hmdctrackgspline.h:92
 hmdctrackgspline.h:93
 hmdctrackgspline.h:94
 hmdctrackgspline.h:95
 hmdctrackgspline.h:96
 hmdctrackgspline.h:97
 hmdctrackgspline.h:98
 hmdctrackgspline.h:99
 hmdctrackgspline.h:100
 hmdctrackgspline.h:101
 hmdctrackgspline.h:102
 hmdctrackgspline.h:103
 hmdctrackgspline.h:104
 hmdctrackgspline.h:105
 hmdctrackgspline.h:106
 hmdctrackgspline.h:107
 hmdctrackgspline.h:108
 hmdctrackgspline.h:109
 hmdctrackgspline.h:110
 hmdctrackgspline.h:111
 hmdctrackgspline.h:112
 hmdctrackgspline.h:113
 hmdctrackgspline.h:114
 hmdctrackgspline.h:115
 hmdctrackgspline.h:116
 hmdctrackgspline.h:117
 hmdctrackgspline.h:118
 hmdctrackgspline.h:119
 hmdctrackgspline.h:120
 hmdctrackgspline.h:121
 hmdctrackgspline.h:122
 hmdctrackgspline.h:123
 hmdctrackgspline.h:124
 hmdctrackgspline.h:125
 hmdctrackgspline.h:126
 hmdctrackgspline.h:127
 hmdctrackgspline.h:128
 hmdctrackgspline.h:129
 hmdctrackgspline.h:130
 hmdctrackgspline.h:131
 hmdctrackgspline.h:132
 hmdctrackgspline.h:133
 hmdctrackgspline.h:134
 hmdctrackgspline.h:135
 hmdctrackgspline.h:136
 hmdctrackgspline.h:137
 hmdctrackgspline.h:138
 hmdctrackgspline.h:139
 hmdctrackgspline.h:140
 hmdctrackgspline.h:141
 hmdctrackgspline.h:142
 hmdctrackgspline.h:143
 hmdctrackgspline.h:144
 hmdctrackgspline.h:145
 hmdctrackgspline.h:146
 hmdctrackgspline.h:147
 hmdctrackgspline.h:148
 hmdctrackgspline.h:149
 hmdctrackgspline.h:150
 hmdctrackgspline.h:151
 hmdctrackgspline.h:152
 hmdctrackgspline.h:153
 hmdctrackgspline.h:154
 hmdctrackgspline.h:155
 hmdctrackgspline.h:156
 hmdctrackgspline.h:157
 hmdctrackgspline.h:158
 hmdctrackgspline.h:159