]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliGRPDCS.cxx
Optimisation
[u/mrichter/AliRoot.git] / STEER / AliGRPDCS.cxx
index 86df227ff55294eeac140e37d30514dcbde2d9f0..1a1743a39001d654b9901162e412e14d45b6fb75 100644 (file)
@@ -19,6 +19,7 @@
 //                AliGRPDCS class
 //   This class deals with the DCS related info of the GRP
 //   Origin: Panos Christakoglou, UOA-CERN, Panos.Christakoglou@cern.ch
+//    Modified: Ernesto.Lopez.Torres@cern.ch  CEADEN-CERN
 //-----------------------------------------------------------------
 #include "Riostream.h"
 #include "TError.h"
@@ -35,7 +36,8 @@ ClassImp(AliGRPDCS)
 
 //_______________________________________________________________
 AliGRPDCS::AliGRPDCS():
-  TObject(), fStartTime(0), fStopTime(0), fDCSArray(new TObjArray()) {
+  TObject(), fStartTime(0), fStopTime(0), fDCSArray(new TObjArray())
+{
   // default constructor
   
 }
@@ -50,53 +52,90 @@ AliGRPDCS::AliGRPDCS(TObjArray *dcsArray, UInt_t fStart, UInt_t fStop):
 //___________________________________________________________________________
 AliGRPDCS::AliGRPDCS(const AliGRPDCS& grpDcs):
   TObject(grpDcs), 
-  fStartTime(grpDcs.fStartTime), fStopTime(grpDcs.fStopTime) {
+  fStartTime(grpDcs.fStartTime), fStopTime(grpDcs.fStopTime), 
+  fDCSArray(grpDcs.fDCSArray)
+{
   //copy constructor
 
-  if (grpDcs.fDCSArray) fDCSArray = new TObjArray();
+  //if (grpDcs.fDCSArray) fDCSArray = new TObjArray();
 }
 
 //_______________________________________________________________
-const char* AliGRPDCS::ProcessDCS(Int_t iType) {
+const char* AliGRPDCS::ProcessDCS(Int_t iType)
+{
   // process the dcs dps
   if(!fDCSArray->GetEntries()) {
     Error("AliGRPDCS::ProcessDCS","No entries in array!!!");
     return 0;
   }
 
-  //0:Int - 1:UInt - 2:Float - 3:String - 4:Bool
+  // 1:Bool - 2:Char - 3:Int - 4:UInt - 5:Float
   TString fDCSDataPointValue;
   switch (iType) {
-  case 0: {
-    fDCSDataPointValue += ProcessInt();
-    break;
-  }
-  case 1: {
-    fDCSDataPointValue += ProcessUInt();
-    break;
-  }
-  case 2: {
-    fDCSDataPointValue += ProcessFloat();
-    break;
-  }
-  case 3: {
-    fDCSDataPointValue += ProcessString();
-    cout<<fDCSDataPointValue.Data()<<endl;
-    break;
-  }
-  case 4: {
-    fDCSDataPointValue += ProcessBoolean();
-    break;
-  }
-  default: break;
+    case 1: {
+      fDCSDataPointValue += ProcessBoolean();
+      break;
+    }
+    case 2: {
+      fDCSDataPointValue += ProcessChar();
+      break;
+    }
+    case 3: {
+      fDCSDataPointValue += ProcessInt();
+      break;
+    }
+    case 4: {
+      fDCSDataPointValue += ProcessUInt();
+      break;
+    }
+    case 5: {
+      fDCSDataPointValue += ProcessFloat();
+      break;
+    }
+//  case 6: {
+//    fDCSDataPointValue += ProcessString();
+//    break;
+//  }
+    default: {
+      Error("AliGRPDCS::ProcessDCS", "Unknown type!!!" );
+      break;
+    }
   }//switch
 
-  cout<<fDCSDataPointValue.Data()<<endl;
+  //cout<<fDCSDataPointValue.Data()<<endl;
+  return fDCSDataPointValue.Data();
+}
+
+//_______________________________________________________________
+const char* AliGRPDCS::ProcessBoolean()
+{
+  Bool_t fDCSBool = kTRUE;
+  Bool_t previousBool = kTRUE;
+
+  AliDCSValue *v = 0x0;
+
+  for(Int_t iCount = 0; iCount < fDCSArray->GetEntries(); iCount++) {
+    v = (AliDCSValue *)fDCSArray->At(iCount);
+    if ((v->GetTimeStamp() < fStartTime) || (v->GetTimeStamp() > fStopTime)) {
+      AliError(Form("DCS values for the parameter outside the queried interval"));
+      continue;
+    }
+    fDCSBool = v->GetBool();
+    if (iCount > 0) {
+      if (fDCSBool != previousBool)
+       AliError(Form("DCS values for the parameter changed from %d to %d within the queried interval", (Int_t)previousBool, (Int_t)fDCSBool));
+    }
+    previousBool = fDCSBool;
+  }
+
+  TString fDCSDataPointValue = (fDCSBool)? "1" : "0";
+
   return fDCSDataPointValue.Data();
 }
 
 //_______________________________________________________________
-const char* AliGRPDCS::ProcessInt() {
+const char* AliGRPDCS::ProcessInt()
+{
   Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
   Int_t iCounts = 0;
   for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
@@ -115,7 +154,8 @@ const char* AliGRPDCS::ProcessInt() {
 }
 
 //_______________________________________________________________
-const char* AliGRPDCS::ProcessUInt() {
+const char* AliGRPDCS::ProcessUInt()
+{
   Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
   Int_t iCounts = 0;
   for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
@@ -134,9 +174,12 @@ const char* AliGRPDCS::ProcessUInt() {
 }
 
 //_______________________________________________________________
-const char* AliGRPDCS::ProcessFloat() {
+const char* AliGRPDCS::ProcessFloat()
+{
   Float_t fFDCSArraySum = 0.0, fFDCSArrayMean = 0.0;
   Int_t iCounts = 0;
+  //printf("Entries: %d\n",fDCSArray->GetEntries());
+  //printf("Start: %d - Stop: %d\n",fStartTime,fStopTime);
   for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
     AliDCSValue *v = (AliDCSValue *)fDCSArray->At(i);
     if((v->GetTimeStamp() >= fStartTime) &&(v->GetTimeStamp() <= fStopTime)) {
@@ -153,58 +196,50 @@ const char* AliGRPDCS::ProcessFloat() {
 }
 
 //_______________________________________________________________
-const char* AliGRPDCS::ProcessString() {
-  TString fDCSString, fDCSTemp;
-  Bool_t kFound = kFALSE;
-  Int_t iCount = 0;
+const char* AliGRPDCS::ProcessChar()
+{
+  TString fDCSString;
 
   AliDCSValue *v = 0x0;
 
-  printf("Entries: %d\n",fDCSArray->GetEntries());
-  printf("Start: %d - Stop: %d\n",fStartTime,fStopTime);
-
-  while(!kFound) {
+  //printf("Entries: %d\n",fDCSArray->GetEntries());
+  //printf("Start: %d - Stop: %d\n",fStartTime,fStopTime);
+  
+  for(Int_t iCount = 0; iCount < fDCSArray->GetEntries(); iCount++) {
     v = (AliDCSValue *)fDCSArray->At(iCount);
-    iCount += 1;
-    cout<<"Time: "<<v->GetTimeStamp()<<endl;
-    if((v->GetTimeStamp() >= fStartTime) &&(v->GetTimeStamp() <= fStopTime)) kFound = kTRUE;
-  }
-  fDCSTemp = v->GetChar();
-  cout<<"Found: "<<kFound<<" - String: "<<fDCSTemp.Data()<<endl;
-  for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
-    AliDCSValue *v1 = (AliDCSValue *)fDCSArray->At(i);
-    if((v1->GetTimeStamp() >= fStartTime) &&(v1->GetTimeStamp() <= fStopTime)) {
-      fDCSString = v1->GetChar();
-      if(fDCSTemp != fDCSString) AliFatal("DCS data point value changed within the run!!!");
-    }
+    if ((v->GetTimeStamp() >= fStartTime) && (v->GetTimeStamp() <= fStopTime)) 
+      AliError(Form("DCS values for the parameter changed within the queried interval"));
+    if (v->GetTimeStamp() > fStopTime) continue;
+    fDCSString = v->GetChar();
   }
+  
   TString fDCSDataPointValue = fDCSString;
-  cout<<"Returned String: "<<fDCSDataPointValue.Data()<<endl;
-
+  
   return fDCSDataPointValue.Data();
 }
 
+/*
 //_______________________________________________________________
-const char* AliGRPDCS::ProcessBoolean() {
-  Bool_t fDCSBool = kTRUE, fDCSTemp = kTRUE;
-  Bool_t kFound = kFALSE;
-  Int_t iCount = 0;
+const char* AliGRPDCS::ProcessString()
+{
+  TString fDCSString;
 
   AliDCSValue *v = 0x0;
-  while(!kFound) {
-    v = (AliDCSValue *)fDCSArray->At(iCount);
-    iCount += 1;
-    if((v->GetTimeStamp() >= fStartTime) &&(v->GetTimeStamp() <= fStopTime)) kFound = kTRUE;
-  }
-  fDCSTemp = v->GetBool();
-  for(Int_t i = 0; i < fDCSArray->GetEntries(); i++) {
-    AliDCSValue *v1 = (AliDCSValue *)fDCSArray->At(i);
-    if((v1->GetTimeStamp() >= fStartTime) &&(v1->GetTimeStamp() <= fStopTime)) {
-      fDCSBool = v1->GetBool();
-      if(fDCSTemp != fDCSBool) AliFatal("DCS data point value changed within the run!!!");
-    }
+
+  //printf("Entries: %d\n",fDCSArray->GetEntries());
+  //printf("Start: %d - Stop: %d\n",fStartTime,fStopTime);
+  
+  for(Int_t iCount = 0; iCount < fDCSArray->GetEntries(); iCount++) {
+    v = (TObjString *)fDCSArray->At(iCount);
+    if ((v->GetTimeStamp() >= fStartTime) && (v->GetTimeStamp() <= fStopTime)) 
+      AliError(Form("DCS values for the parameter changed within the queried interval"));
+    if (v->GetTimeStamp() > fStopTime) continue;
+    fDCSString = v->GetChar(); // FIXME  should be something like v->GetString()
   }
-  TString fDCSDataPointValue = fDCSBool;
+  
+  TString fDCSDataPointValue = fDCSString;
+  //cout<<"Returned String: "<<fDCSDataPointValue.Data()<<endl;
 
   return fDCSDataPointValue.Data();
 }
+*/