From ec7e4ad676dd5e6a5a081707dd9a1e0065e9b0cc Mon Sep 17 00:00:00 2001 From: jotwinow Date: Thu, 15 Dec 2011 13:25:19 +0000 Subject: [PATCH] TPC HV dip status --- TPC/AliTPCtrackerMI.cxx | 74 ++++++++++++++++++++++++++++++++++++++++- TPC/AliTPCtrackerMI.h | 5 +++ 2 files changed, 78 insertions(+), 1 deletion(-) diff --git a/TPC/AliTPCtrackerMI.cxx b/TPC/AliTPCtrackerMI.cxx index ad7cece1eed..f194cf48bde 100644 --- a/TPC/AliTPCtrackerMI.cxx +++ b/TPC/AliTPCtrackerMI.cxx @@ -144,7 +144,9 @@ #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; +} diff --git a/TPC/AliTPCtrackerMI.h b/TPC/AliTPCtrackerMI.h index aaf62f031ee..51fb0eb79a4 100644 --- a/TPC/AliTPCtrackerMI.h +++ b/TPC/AliTPCtrackerMI.h @@ -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 -- 2.39.3