TPC HV dip status
authorjotwinow <jotwinow@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 15 Dec 2011 13:25:19 +0000 (13:25 +0000)
committerjotwinow <jotwinow@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 15 Dec 2011 13:25:19 +0000 (13:25 +0000)
TPC/AliTPCtrackerMI.cxx
TPC/AliTPCtrackerMI.h

index ad7cece..f194cf4 100644 (file)
 #include "AliTPCdEdxInfo.h"
 #include "AliClonesPool.h"
 #include "AliPoolsSet.h"
-
+#include "AliDCSSensorArray.h"
+#include "AliDCSSensor.h"
+#include "AliDAQ.h"
 //
 
 ClassImp(AliTPCtrackerMI)
@@ -2878,6 +2880,29 @@ Int_t AliTPCtrackerMI::PropagateBack(AliESDEvent *event)
 }
 
 
+Int_t AliTPCtrackerMI::PostProcess(AliESDEvent *event)
+{
+  //
+  // Post process events 
+  //
+  if (!event) return 0;
+
+  //
+  // Set TPC event status
+  // 
+
+  // event affected by HV dip
+  // reset TPC status
+  if(IsTPCHVDipEvent(event)) { 
+    event->ResetDetectorStatus(AliDAQ::kTPC);
+  }
+  //printf("Status %d \n", event->IsDetectorOn(AliDAQ::kTPC));
+
+  return 0;
+}
+
+
 void AliTPCtrackerMI::DeleteSeeds()
 {
   //
@@ -6929,3 +6954,50 @@ void AliTPCtrackerMI::AddCovarianceAdd(AliTPCseed * seed){
   seed->AddCovariance(covar);
 }
 
+//_____________________________________________________________________________
+Bool_t  AliTPCtrackerMI::IsTPCHVDipEvent(AliESDEvent const *esdEvent) {
+//
+// check events affected by TPC HV dip
+//
+if(!esdEvent) return kFALSE;
+
+// Init TPC OCDB
+if(!AliTPCcalibDB::Instance()) return kFALSE;
+AliTPCcalibDB::Instance()->SetRun(esdEvent->GetRunNumber());
+
+// Get HV TPC chamber sensors and calculate the median
+AliDCSSensorArray *voltageArray= AliTPCcalibDB::Instance()->GetVoltageSensors(esdEvent->GetRunNumber());
+if(!voltageArray) return kFALSE;
+
+TString sensorName="";
+Double_t kTPCHVdip = 2.0; // allow for 2V dip as compared to median from given sensor
+
+
+  for(Int_t sector=0; sector<72; sector++)
+  {
+    Char_t sideName='A';
+    if ((sector/18)%2==1) sideName='C';
+    if (sector<36){
+      //IROC
+      sensorName=Form("TPC_ANODE_I_%c%02d_VMEAS",sideName,sector%18);
+    } else {
+      //OROC
+      sensorName=Form("TPC_ANODE_O_%c%02d_0_VMEAS",sideName,sector%18);
+    }
+    
+    AliDCSSensor* sensor = voltageArray->GetSensor(sensorName.Data());
+    if(!sensor) continue;
+    TGraph *graph = sensor->GetGraph();
+    if(!graph) continue;
+    Double_t median = TMath::Median(graph->GetN(), graph->GetY());
+    if(median == 0) continue;
+
+    //printf("chamber %d, sensor %s, HV %f, median %f\n", sector, sensorName.Data(), sensor->GetValue(esdEvent->GetTimeStamp()), median);
+    
+    if(TMath::Abs(sensor->GetValue(esdEvent->GetTimeStamp())-median)>kTPCHVdip) {
+      return kTRUE; 
+    }
+  } 
+  return kFALSE; 
+} 
index aaf62f0..51fb0eb 100644 (file)
@@ -31,6 +31,8 @@ class AliESDkink;
 class TTreeSRedirector;
 class AliTrackPoint;
 class AliClonesPool;
+class AliDCSSensorArray;
+class AliDCSSensor;
 
 
 class AliTPCtrackerMI : public AliTracker {
@@ -45,6 +47,7 @@ public:
   virtual Int_t LoadClusters (TTree * const tree);
   virtual Int_t LoadClusters (const TObjArray * arr); // another input
   virtual Int_t LoadClusters (const TClonesArray * arr); // another input
+  virtual Int_t PostProcess(AliESDEvent *esd); 
   Int_t  LoadClusters();
   void   UnloadClusters();
   Int_t LoadInnerSectors();
@@ -116,6 +119,8 @@ public:
 
    Int_t AcceptCluster(AliTPCseed * seed, AliTPCclusterMI * cluster);
 
+   Bool_t IsTPCHVDipEvent(AliESDEvent const *esdEvent);
+
 private:
   Bool_t IsFindable(AliTPCseed & t);
   AliTPCtrackerMI(const AliTPCtrackerMI& r);           //dummy copy constructor