]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDPreprocessor.cxx
a/ AliTRDCalibChamberStatus (in ProcessEvent the warning and in Check trying to fix...
[u/mrichter/AliRoot.git] / TRD / AliTRDPreprocessor.cxx
index 8b2bf56a9c85f677f73c553f1606cd5ef2428df3..b32bbc004fa8be186e73b7b69bc5aaf80acaf802 100644 (file)
@@ -122,11 +122,13 @@ UInt_t AliTRDPreprocessor::Process(TMap* dcsAliasMap)
       //TString runPar = GetRunParameter("HLTStatus");
       //if(runPar=="1") {
       if(GetHLTStatus()) {
-       if(ExtractHLT()) return 1; // for testing!
+       //if(ExtractHLT()) return 1; // for testing!
+       ExtractHLT();
       } 
       // DAQ if HLT failed
       if(!fVdriftHLT) {
-       if(ExtractDriftVelocityDAQ()) return 1; // for testing!
+       //if(ExtractDriftVelocityDAQ()) return 1; 
+       ExtractDriftVelocityDAQ(); // for testing!
       }
     }
   }
@@ -197,19 +199,19 @@ Bool_t AliTRDPreprocessor::ProcessDCS(TMap *dcsAliasMap)
     if (nGraph [iAlias] == 0) {
       Log("No TGraph for this dcsDatapointAlias : not stored");
       results [iAlias] = kFALSE;
-      error  = kTRUE;
+      //error  = kTRUE;
       continue;
     }
                
     oneTRDDCS->SetGraph(map);
-    results[iAlias]=Store("Calib", oneTRDDCS->GetStoreName().Data(), oneTRDDCS, &metaData, 0, kTRUE); 
+    results[iAlias]=Store("Calib", oneTRDDCS->GetStoreName().Data(), oneTRDDCS, &metaData, 0, kFALSE); 
     delete map;                
 
     //results [iAlias] = StoreReferenceData("Calib", oneTRDDCS->GetStoreName ().Data (), oneTRDDCS, &metaData); 
 
     if (!results[iAlias]) {
       AliError("Problem during StoreRef DCS");
-      error=kTRUE;
+      //error=kTRUE;
     }
 
     //BEGIN TEST (should not be removed ...)
@@ -245,6 +247,16 @@ Bool_t AliTRDPreprocessor::ProcessDCS(TMap *dcsAliasMap)
     //END TEST
 
   }
+
+  // Check errors
+  Int_t nbCount = 0;
+  for (Int_t iAlias = 0; iAlias < nEntries; iAlias++) {
+    if (results[iAlias]) {
+      nbCount++;
+    }
+  }
+  if(nbCount == 0) error = kTRUE;
+
                
   Log ("         Summury of DCS :\n");
   Log (Form("%30s %10s %10s", "dcsDatapointAlias", "Stored ?", "# graph"));
@@ -669,13 +681,16 @@ Bool_t AliTRDPreprocessor::ExtractDriftVelocityDAQ()
       Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(1))
        + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(1));
       Int_t nbfit        = calibra->GetNumberFit();
+      Int_t nbfitSuccess = calibra->GetNumberFitSuccess();
       Int_t nbE        = calibra->GetNumberEnt();
       
       // if enough statistics store the results
       if ((nbtg >                  0) && 
-         (nbfit        >= 0.5*nbE)) {
+         (nbfit        >= 0.5*nbE) && (nbE > 30) && (nbfitSuccess > 30)) {
        // create the cal objects
+       calibra->RemoveOutliers(1,kTRUE);
        calibra->PutMeanValueOtherVectorFit(1,kTRUE);
+       calibra->RemoveOutliers2(kTRUE);
        calibra->PutMeanValueOtherVectorFit2(1,kTRUE);
        TObjArray object      = calibra->GetVectorFit();
        AliTRDCalDet *objdriftvelocitydet = calibra->CreateDetObjectVdrift(&object,kTRUE);
@@ -769,8 +784,8 @@ Bool_t AliTRDPreprocessor::ExtractHLT()
     
     // gain
     TH2I *histogain = (TH2I *) filehlt->Get("CH2d");
-    histogain->SetDirectory(0);
     if (histogain) {
+      histogain->SetDirectory(0);
       // store the reference data
       if(!StoreReferenceData("HLTData","Gain",(TObject *) histogain,&metaData)){
        Log("Error storing 2D histos for gain");
@@ -786,7 +801,7 @@ Bool_t AliTRDPreprocessor::ExtractHLT()
       Int_t nbE         = calibra->GetNumberEnt();
       // enough statistics
       if ((nbtg >                  0) && 
-         (nbfit        >= 0.5*nbE)) {
+         (nbfit        >= 0.5*nbE) && (nbE > 30)) {
        // create the cal objects
        calibra->PutMeanValueOtherVectorFit(1,kTRUE);
        TObjArray object           = calibra->GetVectorFit();
@@ -808,8 +823,8 @@ Bool_t AliTRDPreprocessor::ExtractHLT()
     // vdrift
     fVdriftHLT = kFALSE;
     TProfile2D *histodriftvelocity = (TProfile2D *) filehlt->Get("PH2d");
-    histodriftvelocity->SetDirectory(0);
     if (histodriftvelocity) {
+      histodriftvelocity->SetDirectory(0);
       // store the reference data
       if(!StoreReferenceData("HLTData","VdriftT0",(TObject *) histodriftvelocity,&metaData)){
        Log("Error storing 2D Profile for average pulse height (HLT)");
@@ -822,12 +837,15 @@ Bool_t AliTRDPreprocessor::ExtractHLT()
       Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(1))
        + 6*  18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(1));
       Int_t nbfit        = calibra->GetNumberFit();
+      Int_t nbfitSuccess = calibra->GetNumberFitSuccess();
       Int_t nbE          = calibra->GetNumberEnt();
       // enough statistics
       if ((nbtg >                  0) && 
-         (nbfit        >= 0.5*nbE)) {
+         (nbfit        >= 0.5*nbE) && (nbE > 30) && (nbfitSuccess > 30)) {
        // create the cal objects
+       calibra->RemoveOutliers(1,kTRUE);
        calibra->PutMeanValueOtherVectorFit(1,kTRUE);
+       calibra->RemoveOutliers2(kTRUE);
        calibra->PutMeanValueOtherVectorFit2(1,kTRUE);
        TObjArray object  = calibra->GetVectorFit();
        AliTRDCalDet *objdriftvelocitydet = calibra->CreateDetObjectVdrift(&object,kTRUE);
@@ -859,8 +877,8 @@ Bool_t AliTRDPreprocessor::ExtractHLT()
     
     // prf
     TProfile2D *histoprf = (TProfile2D *) filehlt->Get("PRF2d");
-    histoprf->SetDirectory(0);
     if (histoprf) {
+      histoprf->SetDirectory(0);    
       // store reference data
       if(!StoreReferenceData("HLTData","PRF",(TObject *) histoprf,&metaData)){
        Log("Error storing the 2D Profile for Pad Response Function");
@@ -876,7 +894,7 @@ Bool_t AliTRDPreprocessor::ExtractHLT()
       Int_t nbE          = calibra->GetNumberEnt();
       // enough statistics
       if ((nbtg >                  0) && 
-         (nbfit        >= 0.95*nbE)) {
+         (nbfit        >= 0.95*nbE) && (nbE > 30)) {
        // create cal pad objects 
        TObjArray object            = calibra->GetVectorFit();
        TObject *objPRFpad          = calibra->CreatePadObjectPRF(&object);
@@ -904,78 +922,92 @@ UInt_t AliTRDPreprocessor::ProcessDCSConfigData()
   // parse it/them and store TObjArrays in the CDB
   //
   // return 0 for success, otherwise:
-  //  5 : Could not get the SOR and EOR file from the FXS
-  //  8 : Something wrong with the SOR file
-  //  9 : Something wrong with the EOR file
+  //  5 : Could not get the (SOR and EOR) or SOR file from the FXS
+  //  8 : Both files are not valid
   // 10 : SOR XML is not well-formed
   // 11 : EOR XML is not well-formed
-  // 12 : ERROR in XML SAX validation: something wrong with the content
-  // 14 : ERROR while creating calibration objects in the handler
-  // 15 : ERROR while storing data in the CDB
+  // 12 : ERROR in SOR XML SAX validation: something wrong with the content
+  // 12 : ERROR in EOR XML SAX validation: something wrong with the content
+  // 14 : ERROR while creating SOR calibration objects in the handler
+  // 15 : ERROR while creating EOR calibration objects in the handler
+  // 16 : ERROR while storing data in the CDB
   //
 
   Log("Processing the DCS config summary files.");
 
   // get the XML files
   Log("Requesting the 2 summaryfiles from the FXS..");
-  const char *xmlFileS = GetFile(kDCS,"CONFIGSUMMARYSOR","");
-  const char *xmlFileE = GetFile(kDCS,"CONFIGSUMMARYEOR","");
+  TString xmlFileS = GetFile(kDCS,"CONFIGSUMMARYSOR","");
+  TString xmlFileE = GetFile(kDCS,"CONFIGSUMMARYEOR","");
   // Request EOR and SOR files from the fxs, if both are not found exit
 
-  if (xmlFileS == NULL && xmlFileE == NULL) {
-    Log(Form("ERROR: SOR and EOR Files %s and %s not found!",xmlFileS,xmlFileE));
-    return 5;
-  } 
+  Bool_t fileExistE = kTRUE, fileExistS = kTRUE;
 
-  Bool_t fileExistE = true, fileExistS = true;
+  // check if the files are there
+  if (xmlFileS.IsNull()) {
+         Log(Form("Warning: SOR file %s not found!", xmlFileS.Data()));
+    fileExistS = kFALSE;
+  } else Log(Form("SOR file found: %s", xmlFileS.Data()));
 
-  if (xmlFileS == NULL) {
-    Log(Form("Warning: SOR File %s not found!",xmlFileS));
-    fileExistE = false;
-  } else if (xmlFileE == NULL) {
-    Log(Form("Warning: EOR File %s not found!",xmlFileE));
-    fileExistS = false;
-  } else {
-    Log(Form("Both Files (%s and %s) found.",xmlFileS,xmlFileE));
+  if (xmlFileE.IsNull()) {
+    Log(Form("Warning: EOR file %s not found!", xmlFileE.Data()));
+    fileExistE = kFALSE;
+  } else Log(Form("EOR file found: %s", xmlFileE.Data()));
+
+  if (fileExistS==0 && fileExistE==0) {
+    Log(Form("ERROR: SOR and EOR files not found: %s and %s", xmlFileS.Data(), xmlFileE.Data()));
+    return 5;
   }
 
+  // test the files
   if (fileExistS) {
-    // test the files
+    Log("Checking if SOR file is valid.");
     std::ifstream fileTestS;
-    fileTestS.open(xmlFileS, std::ios_base::binary | std::ios_base::in);
+    fileTestS.open(xmlFileS.Data(), std::ios_base::binary | std::ios_base::in);
     if (!fileTestS.good() || fileTestS.eof() || !fileTestS.is_open()) {
-      Log(Form("ERROR: File %s not valid!",xmlFileS));
-      return 8;
+      Log(Form("Warning: File %s not valid!",xmlFileS.Data()));
+      fileExistS = kFALSE;
+      return 5;
     }
+    Log("Checking if SOR file is not empty.");
     fileTestS.seekg(0, std::ios_base::end);
     if (static_cast<int>(fileTestS.tellg()) < 2) {
-      Log(Form("ERROR: File %s is empty!",xmlFileS));
-      return 8;
+      Log(Form("Warning: File %s is empty!",xmlFileS.Data()));
+      fileExistS = kFALSE;
+      return 5;
     }
   }
 
+
   if (fileExistE) {
+    Log("Checking if EOR file is valid.");
     std::ifstream fileTestE;
-    fileTestE.open(xmlFileE, std::ios_base::binary | std::ios_base::in);
+    fileTestE.open(xmlFileE.Data(), std::ios_base::binary | std::ios_base::in);
     if (!fileTestE.good() || fileTestE.eof() || !fileTestE.is_open()) {
-      Log(Form("ERROR: File %s not valid!",xmlFileE));
-      return 9;
+      Log(Form("Warning: File %s not valid!",xmlFileE.Data()));
+      fileExistE = kFALSE;
     }
+    Log("Checking if EOR file is not empty.");
     fileTestE.seekg(0, std::ios_base::end);
     if (static_cast<int>(fileTestE.tellg()) < 2) {
-      Log(Form("ERROR: File %s is empty!",xmlFileE));
-      return 9;
+      Log(Form("Warning: File %s is empty!",xmlFileE.Data()));
+      fileExistE = kFALSE;
     }
   }
 
-  Log("Tested files are valid.");   
+  if (fileExistS==0 && fileExistE==0) {
+    Log("ERROR: Both files (SOR/EOR) are not valid!");
+    return 8;
+  }
+
+  Log("One or both of the tested files are valid.");
 
   // make a robust XML validation
   TSAXParser testParser;
-  if (fileExistS && testParser.ParseFile(xmlFileS) < 0 ) {
+  if (fileExistS && testParser.ParseFile(xmlFileS.Data()) < 0 ) {
     Log("ERROR: XML content (SOR) is not well-formed.");
     return 10;
-  } else if (fileExistE && testParser.ParseFile(xmlFileE) < 0 ) {
+  } else if (fileExistE && testParser.ParseFile(xmlFileE.Data()) < 0 ) {
     Log("ERROR: XML content (EOR) is not well-formed.");
     return 11;
   }
@@ -984,39 +1016,34 @@ UInt_t AliTRDPreprocessor::ProcessDCSConfigData()
   // create parser and parse
   TSAXParser saxParserS, saxParserE;
   AliTRDSaxHandler saxHandlerS, saxHandlerE;
-
   if (fileExistS) {
     saxParserS.ConnectToHandler("AliTRDSaxHandler", &saxHandlerS);
-    saxParserS.ParseFile(xmlFileS);
+    saxParserS.ParseFile(xmlFileS.Data());
   }
   if (fileExistE) {
     saxParserE.ConnectToHandler("AliTRDSaxHandler", &saxHandlerE);
-    saxParserE.ParseFile(xmlFileE);
+    saxParserE.ParseFile(xmlFileE.Data());
   }
-
-  // report errors if present 
-  if (((fileExistS && saxParserS.GetParseCode() == 0) || !fileExistS) && (!fileExistE || (fileExistE && saxParserE.GetParseCode() == 0))) {
-    Log("XML file validation OK.");
-  } else {
-    if (fileExistS) {
-      Log(Form("ERROR in XML file validation. SOR Parse Code: %s", saxParserS.GetParseCode()));
-    }
-    if (fileExistE) {
-      Log(Form("ERROR in XML file validation. EOR Parse Code: %s", saxParserE.GetParseCode()));
-    }
+  // report errors of the parser if present
+  if (fileExistS && saxParserS.GetParseCode() != 0) {
+    Log(Form("ERROR in XML file validation. SOR Parse Code: %s", saxParserS.GetParseCode()));
     return 12;
   }
-  if (((fileExistS && saxHandlerS.GetHandlerStatus() == 0) || !fileExistS) && (!fileExistE || (saxHandlerE.GetHandlerStatus() == 0))) {
-    Log("SAX handler reports no errors.");
-  } else  {
-    if (fileExistS) {
-      Log(Form("ERROR while creating calibration objects. SOR Error code: %s", saxHandlerS.GetHandlerStatus()));
-    }
-    if (fileExistE) {
-      Log(Form("ERROR while creating calibration objects. EOR Error code: %s", saxHandlerE.GetHandlerStatus()));
-    }
-    return 14;
+  if (fileExistE && saxParserE.GetParseCode() != 0) {
+    Log(Form("ERROR in XML file validation. EOR Parse Code: %s", saxParserE.GetParseCode()));
+    return 13;
+  }
+  Log("XML file validation OK.");
+  // report errors of the handler if present
+  if (fileExistS && saxHandlerS.GetHandlerStatus() != 0) {
+    Log(Form("ERROR while creating calibration objects. SOR Error code: %s", saxHandlerS.GetHandlerStatus()));
+    return 14;  
   }
+  if (fileExistE && saxHandlerE.GetHandlerStatus() != 0) {
+    Log(Form("ERROR while creating calibration objects. EOR Error code: %s", saxHandlerE.GetHandlerStatus()));
+    return 15;
+  }
+  Log("SAX handler reports no errors.");
 
   // put both objects in one TObjArray to store them
   TObjArray* fCalObjArray = new TObjArray(2);
@@ -1026,13 +1053,21 @@ UInt_t AliTRDPreprocessor::ProcessDCSConfigData()
   if (fileExistS) {
     AliTRDCalDCS* fCalDCSObjSOR = saxHandlerS.GetCalDCSObj();
     fCalDCSObjSOR->EvaluateGlobalParameters();
+    fCalDCSObjSOR->SetRunType(GetRunType());
+    fCalDCSObjSOR->SetStartTime(GetStartTimeDCSQuery());
+    fCalDCSObjSOR->SetEndTime(GetEndTimeDCSQuery());
     fCalObjArray->AddAt(fCalDCSObjSOR,0);
+    Log("TRDCalDCS object for SOR created.");
   }
 
   if (fileExistE) {
     AliTRDCalDCS* fCalDCSObjEOR = saxHandlerE.GetCalDCSObj();
     fCalDCSObjEOR->EvaluateGlobalParameters();
+    fCalDCSObjEOR->SetRunType(GetRunType());
+    fCalDCSObjEOR->SetStartTime(GetStartTimeDCSQuery());
+    fCalDCSObjEOR->SetEndTime(GetEndTimeDCSQuery());
     fCalObjArray->AddAt(fCalDCSObjEOR,1);
+    Log("TRDCalDCS object for EOR created.");
   }
 
   // store the DCS calib data in the CDB
@@ -1042,13 +1077,16 @@ UInt_t AliTRDPreprocessor::ProcessDCSConfigData()
   metaData1.SetComment("DCS configuration data in two AliTRDCalDCS objects in one TObjArray (0:SOR, 1:EOR).");
   if (!Store("Calib", "DCS", fCalObjArray, &metaData1, 0, kTRUE)) {
     Log("problems while storing DCS config data object");
-    return 15;
+    return 16;
   } else {
     Log("DCS config data object stored.");
   }
 
   //delete fCalObjArray;
 
-  Log("Processing of the DCS config summary file DONE.");  
+  Log("SUCCESS: Processing of the DCS config summary file DONE.");  
   return 0;
 }
+
+
+