]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDSaxHandler.cxx
changes from fzhou
[u/mrichter/AliRoot.git] / TRD / AliTRDSaxHandler.cxx
index 25592c67cee9d3af7d20c024a1e8d69a9a4f0f56..30acf532b1455b0cc721f2124491efc37a3d644f 100644 (file)
@@ -36,8 +36,9 @@
 #include <TObjArray.h>\r
 #include "AliTRDSaxHandler.h"\r
 #include "AliTRDgeometry.h"\r
-#include "Cal/AliTRDCalDCS.h"\r
-#include "Cal/AliTRDCalDCSFEE.h"\r
+#include "AliTRDcalibDB.h"\r
+#include "Cal/AliTRDCalDCSv2.h"\r
+#include "Cal/AliTRDCalDCSFEEv2.h"\r
 #include "Cal/AliTRDCalDCSGTU.h"\r
 \r
 ClassImp(AliTRDSaxHandler)\r
@@ -61,7 +62,7 @@ AliTRDSaxHandler::AliTRDSaxHandler()
   ,fDCSFEEObj(0)\r
   ,fDCSPTRObj(0)\r
   ,fDCSGTUObj(0)\r
-  ,fCalDCSObj(new AliTRDCalDCS())\r
+  ,fCalDCSObj(new AliTRDCalDCSv2())\r
   ,fLevel1Tag(-2)\r
   ,fLevel2Tag(-2)\r
   ,fInsideBoardInfo(false)\r
@@ -138,15 +139,66 @@ AliTRDSaxHandler::~AliTRDSaxHandler()
 }\r
 \r
 //_____________________________________________________________________________\r
-AliTRDCalDCS* AliTRDSaxHandler::GetCalDCSObj()\r
+AliTRDCalDCSv2* AliTRDSaxHandler::GetCalDCSObj()\r
 {\r
   // put the arrays in the global calibration object and return this\r
+\r
   fCalDCSObj->SetFEEArr(fFEEArr);\r
   fCalDCSObj->SetPTRArr(fPTRArr);\r
   fCalDCSObj->SetGTUObj(fDCSGTUObj);\r
   return fCalDCSObj;\r
 }\r
 \r
+//_____________________________________________________________________________\r
+void AliTRDSaxHandler::ParseConfigName(TString cfgname) const\r
+{\r
+  // Evaluate the config name and set the individual parameters\r
+\r
+  // protect\r
+  if (!AliTRDcalibDB::Instance()) {\r
+    AliError("Could not create an instance of AliTRDcalibDB!");\r
+    return;\r
+  }\r
+\r
+  TString cfg = "", par = "", pars = "";\r
+  Int_t nPar = AliTRDcalibDB::Instance()->GetNumberOfParsDCS(cfgname);\r
+  if (nPar == 0) return;\r
+\r
+  for (Int_t i=1; i<=nPar; i++) {\r
+    // Get the configuration parameter\r
+    AliTRDcalibDB::Instance()->GetDCSConfigParOption(cfgname, i, 0, cfg);\r
+\r
+    // Set Parameters accordingly\r
+    if (i == AliTRDcalibDB::kFltrSet) fDCSFEEObj->SetFilterType(cfg);\r
+    if (i == AliTRDcalibDB::kTrigSet) fDCSFEEObj->SetTriggerSetup(cfg);\r
+    if (i == AliTRDcalibDB::kAddOpti) fDCSFEEObj->SetAddOptions(cfg);\r
+    if (i == AliTRDcalibDB::kTimebin) fDCSFEEObj->SetNumberOfTimeBins(AliTRDcalibDB::Instance()->ExtractTimeBinsFromString(cfg));\r
+    if (i == AliTRDcalibDB::kReadout) fDCSFEEObj->SetReadoutParam(cfg);\r
+    if (i == AliTRDcalibDB::kTrkMode) fDCSFEEObj->SetTrackletMode(cfg);\r
+\r
+    // Set options of parameters accordingly\r
+    Int_t nOpt = AliTRDcalibDB::Instance()->GetNumberOfOptsDCS(cfgname, i);\r
+    if (nOpt == 0) continue;\r
+\r
+    for (Int_t j=1; j<=nOpt; j++) {\r
+      // Get the parameter option\r
+      AliTRDcalibDB::Instance()->GetDCSConfigParOption(cfgname, i, j, par);\r
+\r
+      if (i == AliTRDcalibDB::kReadout) {\r
+       if (par.EqualTo("stat")) fDCSFEEObj->SetFastStatNoise(1);\r
+      }\r
+      if (i == AliTRDcalibDB::kTrkMode) {\r
+       if ((j > 1) && (par.Length() != 0)) pars += "-";\r
+       pars += par;\r
+      }\r
+      // SetTCFilterWeight, SetTCFilterShortDecPar, SetTCFilterLongDecPar might be filled here, too\r
+      // SetSingleHitThres, SetThreePadClustThres, SetSelectiveNoZS, SetTestPattern might be filled here, too\r
+    }\r
+\r
+    fDCSFEEObj->SetTrackletDef(pars);\r
+  }\r
+}\r
+\r
 //_____________________________________________________________________________\r
 void AliTRDSaxHandler::OnStartDocument() const\r
 {\r
@@ -324,7 +376,7 @@ void AliTRDSaxHandler::OnStartElement(const char *name, const TList *attributes)
   // if there is a new DCS element put it in the correct array\r
   if (CompareString(tagName, "DCS")) {\r
     if (fSystem == kInsideFEE) {\r
-      fDCSFEEObj = new AliTRDCalDCSFEE(name,dcsTitle);\r
+      fDCSFEEObj = new AliTRDCalDCSFEEv2();\r
       fDCSFEEObj->SetDCSid(dcsId);\r
     }\r
     if (fSystem == kInsidePTR) {\r
@@ -392,27 +444,15 @@ void AliTRDSaxHandler::OnEndElement(const char *name)
   // store informations of the FEE DCS-Board\r
   if (fSystem == kInsideFEE) {\r
     if (CompareString(tagName, "DNR"))            fDCSFEEObj->SetStatusBit(fContent.Atoi());\r
-    if (CompareString(tagName, "CFGNME"))         fDCSFEEObj->SetConfigName(fContent);\r
     if (CompareString(tagName, "CFGTAG"))         fDCSFEEObj->SetConfigTag(fContent.Atoi());\r
     if (CompareString(tagName, "CFGVRSN"))        fDCSFEEObj->SetConfigVersion(fContent);\r
-    if (CompareString(tagName, "NTB"))            fDCSFEEObj->SetNumberOfTimeBins(fContent.Atoi());\r
     if (CompareString(tagName, "SM-ID"))          fDCSFEEObj->SetSM(fContent.Atoi());\r
     if (CompareString(tagName, "STACK-ID"))       fDCSFEEObj->SetStack(fContent.Atoi());\r
     if (CompareString(tagName, "LAYER-ID"))       fDCSFEEObj->SetLayer(fContent.Atoi());\r
-    if (CompareString(tagName, "SINGLEHITTHRES")) fDCSFEEObj->SetSingleHitThres(fContent.Atoi());\r
-    if (CompareString(tagName, "THRPADCLSTHRS"))  fDCSFEEObj->SetThreePadClustThres(fContent.Atoi());\r
-    if (CompareString(tagName, "SELNOZS"))        fDCSFEEObj->SetSelectiveNoZS(fContent.Atoi());\r
-    if (CompareString(tagName, "FASTSTATNOISE"))  fDCSFEEObj->SetFastStatNoise(fContent.Atoi());\r
-    if (CompareString(tagName, "FILTWEIGHT"))     fDCSFEEObj->SetTCFilterWeight(fContent.Atoi());\r
-    if (CompareString(tagName, "FILTSHRTDCYPRM")) fDCSFEEObj->SetTCFilterShortDecPar(fContent.Atoi());\r
-    if (CompareString(tagName, "FILTLNGDCYPRM"))  fDCSFEEObj->SetTCFilterLongDecPar(fContent.Atoi());\r
-    if (CompareString(tagName, "FLTR"))           fDCSFEEObj->SetFilterType(fContent);\r
-    if (CompareString(tagName, "READOUTPAR"))     fDCSFEEObj->SetReadoutParam(fContent);\r
-    if (CompareString(tagName, "TESTPATTERN"))    fDCSFEEObj->SetTestPattern(fContent);\r
-    if (CompareString(tagName, "TRCKLTMODE"))     fDCSFEEObj->SetTrackletMode(fContent);\r
-    if (CompareString(tagName, "TRCKLTDEF"))      fDCSFEEObj->SetTrackletDef(fContent);\r
-    if (CompareString(tagName, "TRIGGERSETUP"))   fDCSFEEObj->SetTriggerSetup(fContent);\r
-    if (CompareString(tagName, "ADDOPTIONS"))     fDCSFEEObj->SetAddOptions(fContent);\r
+    if (CompareString(tagName, "CFGNME")) {\r
+      fDCSFEEObj->SetConfigName(fContent);\r
+      ParseConfigName(fContent);\r
+    }\r
     if (CompareString(tagName, "gaintbl")) {\r
       fLevel1Tag = kInsideNone;\r
       fCurrentROB = -1;\r
@@ -422,9 +462,13 @@ void AliTRDSaxHandler::OnEndElement(const char *name)
     if (fLevel1Tag == kInsideGainTable) {\r
       if (CompareString(tagName, "name"))   fDCSFEEObj->SetGainTableName(fContent);\r
       if (CompareString(tagName, "desc"))   fDCSFEEObj->SetGainTableDesc(fContent);\r
-      if (CompareString(tagName, "adcdac")) fDCSFEEObj->SetGainTableAdcdac(fCurrentROB, fCurrentMCM, fContent.Atoi());\r
-      if (CompareString(tagName, "fgfn"))   fDCSFEEObj->SetGainTableFgfn(fCurrentROB, fCurrentMCM, fCurrentADC, fContent.Atoi());\r
-      if (CompareString(tagName, "fgan"))   fDCSFEEObj->SetGainTableFgan(fCurrentROB, fCurrentMCM, fCurrentADC, fContent.Atoi());\r
+      if (fCurrentROB>=0 && fCurrentMCM>=0) {\r
+       if (CompareString(tagName, "adcdac")) fDCSFEEObj->SetGainTableAdcdac(fCurrentROB, fCurrentMCM, fContent.Atoi());\r
+       if (fCurrentADC>=0) {\r
+         if (CompareString(tagName, "fgfn"))   fDCSFEEObj->SetGainTableFgfn(fCurrentROB, fCurrentMCM, fCurrentADC, fContent.Atoi());\r
+         if (CompareString(tagName, "fgan"))   fDCSFEEObj->SetGainTableFgan(fCurrentROB, fCurrentMCM, fCurrentADC, fContent.Atoi());\r
+       }\r
+      }\r
     }\r
     if (fInsideRstate == 1) {\r
       if (fCurrentROB>=0 && fCurrentMCM>=0) {\r