]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HMPID/AliHMPIDParam.cxx
impoved num precision
[u/mrichter/AliRoot.git] / HMPID / AliHMPIDParam.cxx
index ae44679189ff588c5e724c6c7ea0bd6c2ab68ec2..ae7045f66026c8762e9b193ff3bf88e49f791fa4 100644 (file)
@@ -17,6 +17,8 @@
 #include "AliLog.h"         //general
 #include <AliRunLoader.h>   //Stack()
 #include <AliStack.h>       //Stack()
+#include "AliCDBManager.h"  //ctor
+#include "AliCDBEntry.h"    //ctor
 #include <TLatex.h>         //TestTrans()  
 #include <TView.h>          //TestTrans()
 #include <TPolyMarker3D.h>  //TestTrans()
 #include <TParticle.h>      //Stack()    
 #include <TGeoPhysicalNode.h> //ctor
 #include <TGeoBBox.h>
+#include <TF1.h>                 //ctor
+
 ClassImp(AliHMPIDParam)
 
 
+// Mathieson constant definition
+const Double_t AliHMPIDParam::fgkD     = 0.222500;  // ANODE-CATHODE distance 0.445/2
+//                                                                                          K3 = 0.66 along the wires (anode-cathode/wire pitch=0.5625)
+const Double_t AliHMPIDParam::fgkSqrtK3x = TMath::Sqrt(0.66);
+const Double_t AliHMPIDParam::fgkK2x     = TMath::PiOver2()*(1 - 0.5*fgkSqrtK3x);
+const Double_t AliHMPIDParam::fgkK1x     = 0.25*fgkK2x*fgkSqrtK3x/TMath::ATan(fgkSqrtK3x);
+const Double_t AliHMPIDParam::fgkK4x     = fgkK1x/(fgkK2x*fgkSqrtK3x);
+//                                                                                          K3 = 0.87 along the wires (anode-cathode/wire pitch=0.5625)
+const Double_t AliHMPIDParam::fgkSqrtK3y = TMath::Sqrt(0.87);
+const Double_t AliHMPIDParam::fgkK2y     = TMath::PiOver2()*(1 - 0.5*fgkSqrtK3y);
+const Double_t AliHMPIDParam::fgkK1y     = 0.25*fgkK2y*fgkSqrtK3y/TMath::ATan(fgkSqrtK3y);
+const Double_t AliHMPIDParam::fgkK4y     = fgkK1y/(fgkK2y*fgkSqrtK3y);
+//
+  
+
 Float_t AliHMPIDParam::fgkMinPcX[]={0.,0.,0.,0.,0.,0.};
 Float_t AliHMPIDParam::fgkMaxPcX[]={0.,0.,0.,0.,0.,0.};
 Float_t AliHMPIDParam::fgkMinPcY[]={0.,0.,0.,0.,0.,0.};
@@ -48,14 +67,35 @@ AliHMPIDParam* AliHMPIDParam::fgInstance=0x0;        //singleton pointer
 Int_t AliHMPIDParam::fgSigmas=4;
 
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-AliHMPIDParam::AliHMPIDParam(Bool_t noGeo=kFALSE):TNamed("HmpidParam","default version") 
+AliHMPIDParam::AliHMPIDParam(Bool_t noGeo=kFALSE):
+  TNamed("HmpidParam","default version"),
+  fX(0), fY(0), fRefIdx(1.28947),fPhotEMean(6.675),fTemp(25)                          //just set a refractive index for C6F14 at ephot=6.675 eV @ T=25 C
 {
 // Here all the intitializition is taken place when AliHMPIDParam::Instance() is invoked for the first time.
 // In particular, matrices to be used for LORS<->MARS trasnformations are initialized from TGeo structure.    
 // Note that TGeoManager should be already initialized from geometry.root file  
 
+  AliCDBManager *pCDB = AliCDBManager::Instance();
+  if(!pCDB) {
+     AliWarning("No Nmean C6F14 from OCDB. Default is taken from ctor.");
+  } else {
+    AliCDBEntry *pNmeanEnt =pCDB->Get("HMPID/Calib/Nmean"); //contains TObjArray of 42 TF1 + 1 EPhotMean
+    if(!pNmeanEnt) {
+      AliWarning("No Nmean C6F14 from OCDB. Default is taken from ctor.");
+    } else {
+      TObjArray *pNmean = (TObjArray*)pNmeanEnt->GetObject();
+      if(pNmean->GetEntries()==43) {                                               //for backward compatibility
+        Double_t tmin,tmax;
+        ((TF1*)pNmean->At(42))->GetRange(tmin,tmax);
+        fPhotEMean = ((TF1*)pNmean->At(42))->Eval(tmin);                          //photon eMean from OCDB
+        AliInfo(Form("EPhotMean = %f eV successfully loaded from OCDB",fPhotEMean));
+      } else {
+        AliWarning("For backward compatibility EPhotMean is taken from ctor.");
+      }
+    }
+  }
 
-  fRadNmean = MeanIdxRad(); //initialization of the running ref. index of freon
+  fRefIdx = MeanIdxRad(); //initialization of the running ref. index of freon
   
   Float_t dead=2.6;// cm of the dead zones between PCs-> See 2CRC2099P1
 
@@ -103,7 +143,7 @@ AliHMPIDParam::AliHMPIDParam(Bool_t noGeo=kFALSE):TNamed("HmpidParam","default v
         IdealPosition(i,fM[i]);
       } else {
         TGeoPhysicalNode *pnode = pne->GetPhysicalNode();
-        if(pnode) fM[i]=pnode->GetMatrix();
+        if(pnode) fM[i]=new TGeoHMatrix(*(pnode->GetMatrix()));
         else {
           fM[i]=new TGeoHMatrix;
           IdealPosition(i,fM[i]);
@@ -302,7 +342,7 @@ Double_t AliHMPIDParam::SigGeom(Double_t trkTheta,Double_t trkPhi,Double_t theta
   if (k<0) return 1e10;
 
   Double_t eTr = 0.5*RadThick()*betaM*TMath::Sqrt(k)/(GapThick()*alpha);     // formula (14)
-  Double_t lambda = 1.-sint*sint*sinf*sinf;                                                  // formula (15)
+  Double_t lambda = (1.-sint*sinf)*(1.+sint*sinf);                                                  // formula (15)
 
   Double_t c1 = 1./(1.+ eTr*k/(alpha*alpha*costheta*costheta));                              // formula (13.a)
   Double_t c2 = betaM*TMath::Power(k,1.5)*tantheta*lambda/(GapThick()*alpha*alpha);  // formula (13.b)