]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSAlignMille2Module.cxx
New fitter for millipede2 + updates to AliITSAlignMille2 (Ruben)
[u/mrichter/AliRoot.git] / ITS / AliITSAlignMille2Module.cxx
index 287c439caea5595c5b13257d0f2e4d25defd2c21..a9bcaf722c17ac415e88c0826b4eea3569df7829 100644 (file)
@@ -77,7 +77,8 @@ AliITSAlignMille2Module::AliITSAlignMille2Module() :
 } \r
 \r
 //-------------------------------------------------------------\r
-AliITSAlignMille2Module::AliITSAlignMille2Module(Int_t index,UShort_t volid,char* symname,TGeoHMatrix *m,Int_t nsv,UShort_t *volidsv) : \r
+AliITSAlignMille2Module::AliITSAlignMille2Module(Int_t index, UShort_t volid, const char* symname,\r
+                                                const TGeoHMatrix *m, Int_t nsv, const UShort_t *volidsv) : \r
   TNamed(), \r
   fNSensVol(0), \r
   fIndex(-1),  \r
@@ -252,7 +253,8 @@ AliITSAlignMille2Module::~AliITSAlignMille2Module() {
 } \r
 \r
 //-------------------------------------------------------------\r
-Int_t AliITSAlignMille2Module::Set(Int_t index, UShort_t volid, char* symname, TGeoHMatrix *m, Int_t nsv, UShort_t *volidsv) \r
+Int_t AliITSAlignMille2Module::Set(Int_t index, UShort_t volid, const char* symname, \r
+                                  const TGeoHMatrix *m, Int_t nsv, const UShort_t *volidsv) \r
 {\r
   // initialize a custom supermodule\r
   // index, volid, symname and matrix must be given\r
@@ -962,6 +964,36 @@ void AliITSAlignMille2Module::GetGeomParamsLoc(Double_t *pars)
   //\r
 }\r
 \r
+\r
+//-------------------------------------------------------------\r
+void AliITSAlignMille2Module::CalcDerivDPosDPar(Int_t sensVol,const Double_t* pl, Double_t *deriv)\r
+{\r
+  // calculate jacobian of the global position vs Parameters (dPos/dParam) \r
+  // for the point in the sensor sensVol\r
+  const double kDel = 0.01;\r
+  double pos0[3],pos1[3],pos2[3],pos3[3];\r
+  double delta[kMaxParGeom];\r
+  //\r
+  for (int ip=kMaxParGeom;ip--;) delta[ip] = 0;\r
+  //\r
+  for (int ip=kMaxParGeom;ip--;) {\r
+    //\r
+    delta[ip] -= kDel;\r
+    GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos0);    \r
+    delta[ip] += kDel/2;\r
+    GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos1);    \r
+    delta[ip] += kDel;\r
+    GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos2);    \r
+    delta[ip] += kDel/2;\r
+    GetSensitiveVolumeModifiedMatrix(sensVol,delta,!GeomParamsGlobal())->LocalToMaster(pl,pos3);    \r
+    //\r
+    delta[ip] = 0;\r
+    double *curd = deriv + ip*3;\r
+    for (int i=3;i--;) curd[i] = (8.*(pos2[i]-pos1[i]) - (pos3[i]-pos0[i]))/6./kDel;\r
+  }\r
+  //\r
+}\r
+\r
 //-------------------------------------------------------------\r
 void AliITSAlignMille2Module::CalcDerivGloLoc(Int_t idx,Double_t *deriv)\r
 {\r
@@ -1161,4 +1193,3 @@ void AliITSAlignMille2Module::GetLocalParams(const Double_t* glot, const Double_
   fgTempAlignObj.SetMatrix(*fSensVolMatrix);\r
   fgTempAlignObj.GetPars(t,r);\r
 }\r
-\r