]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - T0/AliT0Parameters.cxx
Geometry now properly loaded
[u/mrichter/AliRoot.git] / T0 / AliT0Parameters.cxx
index 3f39f5b8976cdc402d603244edac5bbcee8cc7df..7f8e44bed8611de55d2866f7e2a6ee0b3247e00e 100644 (file)
 #include "AliT0LookUpValue.h"
 #include <AliCDBManager.h>        
 #include <AliCDBEntry.h>          
-#include <AliCDBStorage.h>          
+#include <AliCDBStorage.h>  
+#include <TMath.h>
+#include <TSystem.h>
 #include <Riostream.h>
+#include <TGeoManager.h>
+#include <TGeoPhysicalNode.h>
+#include <AliGeomManager.h>
 
 AliT0CalibData* AliT0Parameters::fgCalibData = 0;
 AliT0CalibData* AliT0Parameters::fgLookUp = 0;
+AliT0CalibData* AliT0Parameters::fgSlewCorr =0;
 //====================================================================
 ClassImp(AliT0Parameters)
 #if 0
@@ -44,42 +50,48 @@ ClassImp(AliT0Parameters)
 //____________________________________________________________________
 AliT0Parameters* AliT0Parameters::fgInstance = 0;
 //____________________________________________________________________
-AliT0Parameters* 
-AliT0Parameters::Instance() 
+AliT0Parameters* AliT0Parameters::Instance() 
 {
   // Get static instance 
-  if (!fgInstance) fgInstance = new AliT0Parameters;
+  if (!fgInstance) {
+    fgInstance = new AliT0Parameters;
+  }
   return fgInstance;
 }
 
 //____________________________________________________________________
 AliT0Parameters::AliT0Parameters()
-  :fIsInit(kFALSE),fPh2Mip(0),fmV2Mip(0),fChannelWidth(0),fmV2Channel(0),fQTmin(0),fQTmax(0),fFixedGain(0),fSlewingLED(),fSlewingRec(),fPMTeff(),fTimeDelayLED(0),fTimeDelayCFD(0),fTimeDelayTVD(0),fCalibentry() 
+  :fIsInit(kFALSE),
+   fPh2Mip(0),fmV2Mip(0),
+   fChannelWidth(0),fmV2Channel(0),
+   fQTmin(0),fQTmax(0),
+   fAmpLEDRec(0), 
+   fPMTeff(),
+   fWalk(0),
+   fTimeDelayDA(0), 
+   fTimeDelayCFD(0), 
+   fTimeDelayTVD(0),
+   fMeanT0(500),
+   fLookUp(0),
+   fNumberOfTRMs(2),
+   fCalibentry(), fLookUpentry(),fSlewCorr()
+
+  
 {
   // Default constructor 
-
   for (Int_t ipmt=0; ipmt<24; ipmt++)
     {
-      SetTimeDelayCablesCFD(ipmt);
-      SetTimeDelayCablesLED(ipmt);
-      SetTimeDelayElectronicCFD(ipmt);
-      SetTimeDelayElectronicLED(ipmt);
-      SetTimeDelayPMT(ipmt);
-       SetVariableDelayLine(ipmt);
-      SetSlewingLED(ipmt);
-      SetSlewingRec(ipmt);
       SetPh2Mip();      
       SetmV2Mip();      
       SetChannelWidth();
       SetmV2channel();
-      SetGain();
       SetQTmin();
       SetQTmax();
       SetPMTeff(ipmt);
-   }
+    }
   SetTimeDelayTVD();
   SetZposition();
-  
+    
 }
 
 //__________________________________________________________________
@@ -88,55 +100,89 @@ AliT0Parameters::Init()
 {
   // Initialize the parameters manager.  We need to get stuff from the
   // CDB here. 
-  //   if (fIsInit) return;
-  
-  // AliCDBManager* cdb      = AliCDBManager::Instance();
-  // fCalibentry  = cdb->Get("T0/Calib/Gain_TimeDelay_Slewing_Walk");
+   if (fIsInit) return;
+
+   AliCDBManager *stor =AliCDBManager::Instance();
 
-  AliCDBStorage *stor =AliCDBManager::Instance()->GetStorage("local://$ALICE_ROOT");
-  AliCDBEntry* fCalibentry  = stor->Get("T0/Calib/Gain_TimeDelay_Slewing_Walk",0);
- if (fCalibentry){
+   //time equalizing
+  fCalibentry  = stor->Get("T0/Calib/TimeDelay");
+  if (fCalibentry)
    fgCalibData  = (AliT0CalibData*)fCalibentry->GetObject();
+  else {
+    AliFatal(" ALARM !!!! No time delays in CDB "); 
+    fIsInit = kFALSE;
+    return;
+  }
+ //slewing correction
+  fSlewCorr  = stor->Get("T0/Calib/Slewing_Walk");
+  if (fSlewCorr){
+    fgSlewCorr  = (AliT0CalibData*)fSlewCorr->GetObject();
   }
- // fLookUpentry  = cdb->Get("T0/Calib/LookUp_Table");
-  fLookUpentry  = stor->Get("T0/Calib/LookUp_Table",0);
+  else {
+    AliFatal(" ALARM !!!! No slewing correction in CDB "); 
+    fIsInit = kFALSE;
+    return;
+  }
+  //lookup table
+  fLookUpentry  = stor->Get("T0/Calib/LookUp_Table");
   if (fLookUpentry){
     fgLookUp  = (AliT0CalibData*)fLookUpentry->GetObject();
-    //   fgLookUp->Dump();
   }
   else {
-    fgLookUp->ReadAsciiLookup("$ALICE_ROOT/T0/lookUpTable.txt");
+    AliFatal(" ALARM !!!! No Lookup table  in CDB "); 
+    fIsInit = kFALSE;
+    return;
   }
-
   fIsInit = kTRUE;
 }
 
 
 //__________________________________________________________________
-Float_t
-AliT0Parameters::GetGain(Int_t ipmt) const
-{
-  // Returns the calibrated gain for each PMT 
-  // 
 
-  if (!fCalibentry) 
-    return fFixedGain;
-   
-  return fgCalibData->GetGain(ipmt);
+void AliT0Parameters::InitIfOnline()
+{
+// should be used in online
+// for switching to this one should write
+  // AliT0RawReader myrawreader(rawReader);
+//     myrawreader.SetOnlineMode(kTRUE);
+     
+  if (fIsInit) return;
+   //standart configuration (used for simulation)
+   //Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
+  // configuration for test Jun07.
+  fNumberOfTRMs = 2;
+  Int_t trm=0; Int_t tdc=0; Int_t chain=0; Int_t channel=0;
+  for (Int_t ik=0; ik<110; ik++)
+        {
+         AliT0LookUpKey * lookkey= new AliT0LookUpKey();
+         AliT0LookUpValue * lookvalue= new AliT0LookUpValue();
+
+
+          lookvalue->SetTRM(trm);
+          lookvalue->SetTDC(tdc);
+          lookvalue->SetChain(chain);
+          lookvalue->SetChannel(channel);
+          lookkey->SetKey(ik);
+         if (channel<6) channel +=2;
+         else {channel = 0; tdc++;}
+          if(ik==57) { tdc=0; channel=0; trm=1;}
+           fLookUp.Add((TObject*)lookvalue,(TObject*)lookkey); 
+       }
+  
+  fIsInit=kTRUE;
 }
-
 //__________________________________________________________________
+
 Float_t
-AliT0Parameters::GetTimeDelayLED(Int_t ipmt) 
+AliT0Parameters::GetTimeDelayDA(Int_t ipmt) 
 {
   // return time delay for LED channel
   // 
   if (!fCalibentry) {
-    fTimeDelayLED = fTimeDelayCablesLED[ipmt] + fTimeDelayElectronicLED[ipmt] + fTimeDelayPMT[ipmt];
-    return  fTimeDelayLED;
+    fTimeDelayDA = 500;
+    return  fTimeDelayDA;
   } 
-  return fgCalibData ->GetTimeDelayLED(ipmt);
+  return fgCalibData ->GetTimeDelayDA(ipmt);
 }
 //__________________________________________________________________
 Float_t
@@ -146,91 +192,59 @@ AliT0Parameters::GetTimeDelayCFD(Int_t ipmt)
    // 
   if (!fCalibentry) 
     {
-      fTimeDelayCFD = fTimeDelayCablesCFD[ipmt] + fTimeDelayElectronicCFD[ipmt] + fTimeDelayPMT[ipmt] + fVariableDelayLine[ipmt];
-      return fTimeDelayCFD+37;
+      fTimeDelayCFD = 1000+ipmt*100;
+      return fTimeDelayCFD;
     }
    
   return fgCalibData->GetTimeDelayCFD(ipmt);
 }
 
 //__________________________________________________________________
-
-void 
-AliT0Parameters::SetSlewingLED(Int_t ipmt)
-{
-  //  Set Slweing Correction for LED channel 
-     Float_t mv[23] = {25, 30,40,60, 80,100,150,200,250,300,
-                      400,500,600,800,1000,1500, 2000, 3000, 4000, 5500,
-                      6000, 7000,8000};
-      Float_t y[23] = {5044, 4719, 3835, 3224, 2847, 2691,2327, 2067, 1937, 1781,
-                      1560, 1456 ,1339, 1163.5, 1027, 819, 650, 520, 370.5, 234,
-                      156, 78, 0};
-      
-      TGraph* gr = new TGraph(23,mv,y);
-      fSlewingLED.AddAtAndExpand(gr,ipmt);
-  }
-//__________________________________________________________________
-
-Float_t AliT0Parameters::GetSlewingLED(Int_t ipmt, Float_t mv) const
+Int_t
+AliT0Parameters::GetMeanT0() 
 {
-  if (!fCalibentry) {
-    return ((TGraph*)fSlewingLED.At(ipmt))->Eval(mv); 
-  } 
-  return fgCalibData->GetSlewingLED(ipmt, mv) ;
+  // return mean of T0 distrubution with vertex=0
+   // 
+  if (!fCalibentry) 
+    {
+      return fMeanT0;
+    }
+   
+  return fgCalibData->GetMeanT0();
 }
-
-
 //__________________________________________________________________
 
-TGraph *AliT0Parameters::GetSlew(Int_t ipmt) const
+TGraph *AliT0Parameters::GetAmpLEDRec(Int_t ipmt) const
 {
-  if (!fCalibentry) {
-    return  (TGraph*)fSlewingLED.At(ipmt); 
+   if (!fSlewCorr) {
+     AliError("No slewing correction is available!");
+     return  (TGraph*)fAmpLEDRec.At(ipmt); 
   } 
-  return fgCalibData -> GetSlew(ipmt) ;
+  return fgSlewCorr -> GetAmpLEDRec(ipmt) ;
 }
 
 //__________________________________________________________________
 
-
-void 
-AliT0Parameters::SetSlewingRec(Int_t ipmt)
-{
-  //  Set Slweing Correction for LED channel 
-      Float_t mv[23] = {25, 30, 40,60, 80,100,150,200,250,300,
-                       400,500,600,800,1000,1500, 2000, 3000, 4000, 5500,
-                       6000, 7000,8000};
-      Float_t y[23] = {5044, 4719, 3835, 3224, 2847, 2691,2327, 2067, 1937, 1781, 
-                      1560, 1456 ,1339, 1163.5, 1027, 819, 650, 520, 370.5, 234, 
-                      156, 78, 0};
-      Float_t y1[23], mv1[23];
-      for (Int_t i=0; i<23; i++){
-       y1[i] = y[22-i]; mv1[i] = mv[22-i];}
-
-      TGraph* gr = new TGraph(23,y1,mv1);
-      fSlewingRec.AddAtAndExpand(gr,ipmt);
-
-}
-//__________________________________________________________________
-
-Float_t AliT0Parameters::GetSlewingRec(Int_t ipmt, Float_t mv) const
+TGraph *AliT0Parameters::GetWalk(Int_t ipmt) const
 {
-  if (!fCalibentry) {
-    return ((TGraph*)fSlewingRec.At(ipmt))->Eval(mv); 
+  if (!fSlewCorr) {
+    AliError("No walk correction is available!");
+    return  (TGraph*)fWalk.At(ipmt); 
   } 
-  return fgCalibData -> GetSlewingRec(ipmt, mv) ;
+  return fgSlewCorr -> GetWalk(ipmt) ;
 }
 
 //__________________________________________________________________
 
-TGraph *AliT0Parameters::GetSlewRec(Int_t ipmt) const
+Float_t AliT0Parameters::GetWalkVal(Int_t ipmt, Float_t mv) const
 {
-  if (!fCalibentry) {
-    return  (TGraph*)fSlewingRec.At(ipmt); 
+  if (!fSlewCorr) {
+    return ((TGraph*)fWalk.At(ipmt))->Eval(mv); 
   } 
-  return fgCalibData -> GetSlewRec(ipmt) ;
+  return fgSlewCorr -> GetWalkVal(ipmt, mv) ;
 }
 
+
 //__________________________________________________________________
 void 
 AliT0Parameters::SetPMTeff(Int_t ipmt)
@@ -260,15 +274,62 @@ AliT0Parameters::GetChannel(Int_t trm,  Int_t tdc, Int_t chain, Int_t channel)
   
   AliT0LookUpKey * lookkey;  //= new AliT0LookUpKey();
   AliT0LookUpValue * lookvalue= new AliT0LookUpValue(trm,tdc,chain,channel);
-    
-   lookkey = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)lookvalue);
+  if (fgLookUp)
+       lookkey = (AliT0LookUpKey*) fgLookUp->GetMapLookup()->GetValue((TObject*)lookvalue);
+   else
+   lookkey = (AliT0LookUpKey*) fLookUp.GetValue((TObject*)lookvalue);
+
   if (!lookkey ) {
-    cout<<" no such address "<<endl; return -1;
+    AliInfo(Form("No such address (%d %d %d %d)!",trm,tdc,chain,channel));
+    return -1;
   }
   
-
-  //cout<<"AliT0Parameters:: key "<<lookkey->GetKey()<<endl;
   return lookkey->GetKey();
   
 
 }
+//__________________________________________________________________
+TMap *AliT0Parameters::GetMapLookup()
+{
+  if (!fgLookUp){
+    cout<<" No look up table in OCDB";
+    return 0;
+  }
+  return   fgLookUp->GetMapLookup();
+}
+//__________________________________________________________________
+
+Int_t
+AliT0Parameters::GetNumberOfTRMs() 
+{
+  // return number of trms
+  // 
+  if (!fgLookUp) {
+    //  fNumberOfTRMs = 2;
+    return  fNumberOfTRMs;
+  } 
+  return  fgLookUp ->GetNumberOfTRMs();
+}
+//________________________________________________________________________________
+Double_t AliT0Parameters::GetZPosition(const char* symname){
+// Get the global z coordinate of the given T0 alignable volume
+//
+  Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
+
+  return tr[2];
+}
+//________________________________________________________________________________
+
+Double_t AliT0Parameters::GetZPositionShift(const char* symname)
+{
+// Get the global z coordinate of the given T0 alignable volume
+//
+  Double_t *tr = AliGeomManager::GetMatrix(symname)->GetTranslation();
+
+  TGeoHMatrix origmat;
+  AliGeomManager::GetOrigGlobalMatrix(symname,origmat);
+  Double_t *otr = origmat.GetTranslation();
+
+  return (tr[2]-otr[2]);
+}
+