]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCcalibSummary.cxx
Updated list of libraries
[u/mrichter/AliRoot.git] / TPC / AliTPCcalibSummary.cxx
index dfa0d90525a58fa363ebef5ce837b622e7ddf50a..289e2f0235c2ea2a19f6e7f4809f3d742d2390d2 100644 (file)
@@ -57,7 +57,10 @@ delete calibSummary;
 #include <AliCTPTimeParams.h>
 #include <AliTPCcalibSummary.h>
 #include <TStatToolkit.h>
-#include <TCut.h>
+#include <TCut.h> 
+#include "AliTPCCalibGlobalMisalignment.h"
+#include "AliTPCExBTwist.h"
+#include "AliTPCComposedCorrection.h"
 //
 //
 //
@@ -140,7 +143,7 @@ void AliTPCcalibSummary::Process(const char * runList, Int_t first, Int_t last){
       if (startTime>0&&endTime>0) break;
     }
     AliDCSSensorArray* goofieArray = fCalibDB->GetGoofieSensors(irun); 
-    if (goofieArray) fDButil->FilterGoofie(goofieArray,0.5,4.,6.85,7.05,fPcstream);
+    if (goofieArray) fDButil->FilterGoofie(goofieArray,0.5,4.,4,10,fPcstream);
     // don't filter goofie for the moment
     ProcessRun(irun, startTime,endTime);
   }
@@ -173,7 +176,7 @@ void AliTPCcalibSummary::ProcessRun(Int_t irun, Int_t startTime, Int_t endTime){
   AliTPCTempMap * tempMap = new AliTPCTempMap(tempArray);
   AliDCSSensorArray* goofieArray = fCalibDB->GetGoofieSensors(irun);
   //
-  Int_t dtime = TMath::Max((endTime-startTime)/20,10*60);
+  Int_t dtime = TMath::Max((endTime-startTime)/20,10);
   //
   //Goofie statistical data
   //
@@ -229,6 +232,13 @@ void AliTPCcalibSummary::ProcessRun(Int_t irun, Int_t startTime, Int_t endTime){
   Float_t bz=AliTPCcalibDB::GetBz(irun);
   Char_t  l3pol=AliTPCcalibDB::GetL3Polarity(irun);
   //
+  //QA data processing
+  //
+  TVectorD vQaOcc;
+  TVectorD vQaQtot;
+  TVectorD vQaQmax;
+  fDButil->ProcessQAData(vQaOcc, vQaQtot, vQaQmax);
+  //
   //calibration Pulser data processing
   //
   Int_t nOffChannels=0;
@@ -306,8 +316,8 @@ void AliTPCcalibSummary::ProcessRun(Int_t irun, Int_t startTime, Int_t endTime){
     }
     //
     TVectorD voltagesIROC(36);
-    TVectorD voltagesOROC(36);
-    for(Int_t j=1; j<36; j++) voltagesIROC[j-1] = fCalibDB->GetChamberHighVoltage(irun, j,itime);
+    TVectorD voltagesOROC(36); 
+      for(Int_t j=0; j<36; j++) voltagesIROC[j] = fCalibDB->GetChamberHighVoltage(irun, j,itime); 
     for(Int_t j=36; j<72; j++) voltagesOROC[j-36] = fCalibDB->GetChamberHighVoltage(irun, j,itime);
     Double_t voltIROC = TMath::Median(36, voltagesIROC.GetMatrixArray());
     Double_t voltOROC = TMath::Median(36, voltagesOROC.GetMatrixArray());
@@ -376,8 +386,9 @@ void AliTPCcalibSummary::ProcessRun(Int_t irun, Int_t startTime, Int_t endTime){
     ProcessCTP(irun,itime);
     ProcessAlign(irun,itime);
     ProcessGain(irun,itime);
-    ProcessDriftCERef();
-    ProcessPulserRef();
+    //ProcessDriftCERef();
+    //ProcessPulserRef();
+    ProcessCurrent(irun,itime);
 
 
     (*fPcstream)<<"dcs"<<      
@@ -387,7 +398,11 @@ void AliTPCcalibSummary::ProcessRun(Int_t irun, Int_t startTime, Int_t endTime){
       "rmsNoise.="<<&vNoiseRMS<<
       "rmsNoiseSen.="<<&vNoiseRMSSenRegions<<
       "zeroNoise="<<nonMaskedZero<<
-      "nNaN="<<nNaN<<
+      "nNaN="<<nNaN<<  
+      //QA data
+      "occQA.="  << &vQaOcc  <<
+      "qQA.="    << &vQaQtot <<
+      "qmaxQA.=" << &vQaQmax <<
       //pulser data
       "timePulser.=" << &vTimePulser <<
       "nOffPulser="<<nOffChannels<<
@@ -514,6 +529,34 @@ void AliTPCcalibSummary::ProcessDrift(Int_t run, Int_t timeStamp){
     "slaserA="<<slaserA<<
     "slaserC="<<slaserC<<
     "scosmic="<<scosmic;
+
+  static TGeoMatrix * matrixAlign=0;
+  static Double_t twistX=0;
+  static Double_t twistY=0;
+  if (matrixAlign==0){
+    AliTPCComposedCorrection * corr =  (AliTPCComposedCorrection *)array->FindObject("FitCorrectionTime");
+    if (!corr) {
+      matrixAlign=new TGeoHMatrix;
+      
+    }
+    if (corr){
+       AliTPCCalibGlobalMisalignment *align = (AliTPCCalibGlobalMisalignment*)corr->GetCorrections()->FindObject("FitAlignTime");
+       AliTPCExBTwist *twist  = (AliTPCExBTwist*)corr->GetCorrections()->FindObject("FitExBTwistTime");
+       if (twist){
+        twistX=twist->GetXTwist();
+        twistY=twist->GetYTwist();
+        //delete twist;
+       }
+       if (align && align->GetAlignGlobal()){
+        matrixAlign =  (TGeoMatrix*) (align->GetAlignGlobal()->Clone());        
+        //delete align;
+       }
+    }    
+  }
+  (*fPcstream)<<"dcs"<<
+    "alignTime.="<<matrixAlign<<
+    "twistX="<<twistX<<
+    "twistY="<<twistY;
 }
 
 void AliTPCcalibSummary::ProcessDriftCE(Int_t run,Int_t timeStamp){
@@ -570,9 +613,10 @@ void AliTPCcalibSummary::ProcessDriftAll(Int_t run,Int_t timeStamp){
   // test of utils
   static Double_t vdriftCEA=0, vdriftCEC=0, vdriftCEM=0;
   static Double_t vdriftLTA=0, vdriftLTC=0, vdriftLTM=0;
+  static Double_t vdriftLTAon=0, vdriftLTCon=0, vdriftLTMon=0;
   static Double_t vdriftITS=0;
   static Double_t vdriftP=0;
-  static Double_t dcea=0, dcec=0, dcem=0,  dla=0,dlc=0,dlm=0,dp=0;
+  static Double_t dcea=0, dcec=0, dcem=0,  dla=0,dlc=0,dlm=0, dlaon=0,dlcon=0,dlmon=0, dp=0;
   static Double_t dits=0;
   static Double_t ltime0A;
   static Double_t ltime0C;
@@ -590,6 +634,10 @@ void AliTPCcalibSummary::ProcessDriftAll(Int_t run,Int_t timeStamp){
   vdriftLTC= fDButil->GetVDriftTPCLaserTracks(dlc,run,timeStamp,36000,1);
   vdriftLTM= fDButil->GetVDriftTPCLaserTracks(dlm,run,timeStamp,36000,2);
   //
+  vdriftLTAon= fDButil->GetVDriftTPCLaserTracksOnline(dlaon,run,timeStamp,36000,0);
+  vdriftLTCon= fDButil->GetVDriftTPCLaserTracksOnline(dlcon,run,timeStamp,36000,1);
+  vdriftLTMon= fDButil->GetVDriftTPCLaserTracksOnline(dlmon,run,timeStamp,36000,2);
+  //
   vdriftITS= fDButil->GetVDriftTPCITS(dits, run,timeStamp);
   //
   ltime0A  = fDButil->GetLaserTime0(run,timeStamp,36000,0);
@@ -609,6 +657,12 @@ void AliTPCcalibSummary::ProcessDriftAll(Int_t run,Int_t timeStamp){
     "dla="<<dla<<
     "dlc="<<dlc<<
     "dlm="<<dlm<<
+    "vdriftLTAon="<<vdriftLTAon<<   // drift velocity laser tracks and CE from online algorithm
+    "vdriftLTCon="<<vdriftLTCon<<
+    "vdriftLTMon="<<vdriftLTMon<<
+    "dlaOn="<<dlaon<<
+    "dlcOn="<<dlcon<<
+    "dlmOn="<<dlmon<<
     //
     //
     "vdriftITS="<<vdriftITS<<
@@ -697,22 +751,58 @@ void AliTPCcalibSummary::ProcessGain(Int_t irun, Int_t timeStamp){
   static Float_t  attachMIP = 0;
   static Double_t dMIP=0; 
   Double_t dummy=0;
+  static TVectorD vGainGraphIROC(36);
+  static TVectorD vGainGraphOROCmed(36);
+  static TVectorD vGainGraphOROClong(36);
+  static TVectorD vGainGraphIROCErr(36);
+  static TVectorD vGainGraphOROCmedErr(36);
+  static TVectorD vGainGraphOROClongErr(36);
+  
+  TGraphErrors grDummy;
   TObjArray * gainSplines = fCalibDB->GetTimeGainSplinesRun(irun);
   if (gainSplines) {
     TGraphErrors * graphMIP = (TGraphErrors *) gainSplines->FindObject("TGRAPHERRORS_MEAN_GAIN_BEAM_ALL");
     TGraphErrors * graphCosmic = (TGraphErrors *) gainSplines->FindObject("TGRAPHERRORS_MEAN_GAIN_COSMIC_ALL");
     TGraphErrors * graphAttach = (TGraphErrors *) gainSplines->FindObject("TGRAPHERRORS_MEAN_ATTACHMENT_BEAM_ALL");
+    //
+    TGraphErrors * graphGainIROC       = (TGraphErrors *) gainSplines->FindObject("TGRAPHERRORS_MEAN_CHAMBERGAIN_SHORT_BEAM_ALL");
+    TGraphErrors * graphGainOROCMedium = (TGraphErrors *) gainSplines->FindObject("TGRAPHERRORS_MEAN_CHAMBERGAIN_MEDIUM_BEAM_ALL");
+    TGraphErrors * graphGainOROCLong   = (TGraphErrors *) gainSplines->FindObject("TGRAPHERRORS_MEAN_CHAMBERGAIN_LONG_BEAM_ALL");
+
+    if (graphGainIROC && graphGainOROCMedium && graphGainOROCLong) {
+      Double_t x=0,y=0;
+      for (Int_t i=0; i<36; ++i){
+        graphGainIROC->GetPoint(i,x,y);
+        vGainGraphIROC(i)=y;
+        graphGainOROCMedium->GetPoint(i,x,y);
+        vGainGraphOROCmed(i)=y;
+        graphGainOROCLong->GetPoint(i,x,y);
+        vGainGraphOROClong(i)=y;
+        //errors
+        vGainGraphIROCErr(i)     = graphGainIROC->GetEY()[i];
+        vGainGraphOROCmedErr(i)  = graphGainOROCMedium->GetEY()[i];
+        vGainGraphOROClongErr(i) = graphGainOROCLong->GetEY()[i];
+      }
+    }
+    
     if (graphMIP) gainMIP = AliTPCcalibDButil::EvalGraphConst(graphMIP,timeStamp);
     if (graphCosmic) gainCosmic = AliTPCcalibDButil::EvalGraphConst(graphCosmic,timeStamp);
     if (graphAttach) attachMIP = AliTPCcalibDButil::EvalGraphConst(graphAttach,timeStamp);
-    if (graphMIP)  AliTPCcalibDButil::GetNearest(graphMIP, timeStamp, dMIP,dummy);
+    if (graphMIP)  AliTPCcalibDButil::GetNearest(graphMIP, timeStamp, dMIP,dummy);    
   }
+    
   // time dependence of gain
   (*fPcstream)<<"dcs"<<
-    "gainMIP="<<gainMIP<<
-    "attachMIP="<<attachMIP<<
-    "dMIP="<<dMIP<<
-    "gainCosmic="<<gainCosmic;     
+    "rocGainIROC.="            << &vGainGraphIROC        <<
+    "rocGainOROCMedium.="      << &vGainGraphOROCmed     <<
+    "rocGainOROCLong.="        << &vGainGraphOROClong    <<
+    "rocGainErrIROC.="         << &vGainGraphIROCErr     <<
+    "rocGainErrOROCMedium.="   << &vGainGraphOROCmedErr  <<
+    "rocGainErrOROCLong.="     << &vGainGraphOROClongErr <<
+    "gainMIP="                 << gainMIP                <<
+    "attachMIP="               << attachMIP              <<
+    "dMIP="                    << dMIP                   <<
+    "gainCosmic="              << gainCosmic;
 }
 
 
@@ -917,6 +1007,135 @@ void AliTPCcalibSummary::ProcessPulserRef(){
     "PulserTChi2.="<<&vecAChi2;  // chi2 (rms in cm)
 }
 
+void AliTPCcalibSummary::ProcessCurrent(Int_t irun, Int_t itime){
+  //
+  // Dump current 
+  //
+  //variables to export
+  //
+  static TObjArray *currentArray=new TObjArray(72);   // current graphs
+  static TObjArray *currentArray2=new TObjArray(72);  // current graphs to export
+  //
+  static TVectorD currentIROC(36);                    // current snapshots
+  static TVectorD currentOROC(36); 
+  static TVectorF sector(72);                         //
+  static Double_t medcurIROC = 0;
+  static Double_t medcurOROC = 0;
+  //
+  static TVectorF minROC(72);                         // current mean +-5 minutes
+  static TVectorF maxROC(72);
+  static TVectorF meanROC(72);
+  static TVectorF medianROC(72);
+  static Double_t meanIIROC=0;
+  static Double_t meanIOROC=0;
+  static Double_t medianIIROC=0;
+  static Double_t medianIOROC=0;
+  //
+  AliDCSSensorArray* voltageArray = AliTPCcalibDB::Instance()->GetVoltageSensors(irun);
+  //
+  for(Int_t j=1; j<36; j++) currentIROC[j-1] = fCalibDB->GetChamberHighVoltage(irun, j,itime,-1,kTRUE);
+  for(Int_t j=36; j<72; j++) currentOROC[j-36] = fCalibDB->GetChamberHighVoltage(irun, j,itime,-1,kTRUE);
+  medcurIROC = TMath::Median(36, currentIROC.GetMatrixArray());
+  medcurOROC = TMath::Median(36, currentOROC.GetMatrixArray());
+
+
+  if (currentArray->At(0)==0){
+    for (Int_t isec=0; isec<72; isec++){
+      TString sensorName="";
+      const char* sideName=(isec%36<18) ? "A":"C";
+      if (isec<36){
+       //IROC
+       sensorName=Form("TPC_ANODE_I_%s%02d_IMEAS",sideName,isec%18);
+      }else{
+       //OROC
+       sensorName=Form("TPC_ANODE_O_%s%02d_0_IMEAS",sideName,isec%18);
+      }      
+    
+      AliDCSSensor *sensor = 0;
+      if (voltageArray) sensor= voltageArray->GetSensor(sensorName);   
+      TGraph *gr=0;
+      if (!sensor) gr=new TGraph(1);
+      else{
+       if (!sensor->GetGraph()) gr=new TGraph(1);
+       else{
+         gr=sensor->GetGraph();
+         Double_t startTime=sensor->GetStartTime();
+         Double_t * time = new Double_t[gr->GetN()];
+         for (Int_t ip=0; ip<gr->GetN(); ip++){ time[ip]= (gr->GetX()[ip]*3600.)+startTime;}     
+         gr=new TGraph(gr->GetN(), time, gr->GetY());  
+         delete [] time;
+       }      
+      }
+      gr->Sort();
+      currentArray->AddAt(gr, isec);
+      currentArray->AddAt(gr->Clone(), isec);
+    }
+  }
+
+
+  for (Int_t isec=0; isec<72; isec++){
+    sector[isec]=isec;
+    TGraph * gr = (TGraph*)currentArray->At(isec);
+    TGraph * graph2 = (TGraph*)currentArray2->At(isec);    
+    Int_t firstBin= TMath::BinarySearch(gr->GetN(), gr->GetX(), itime-300.)-2;
+    Int_t lastBin= TMath::BinarySearch(gr->GetN(), gr->GetX(), itime+300.)+2;
+    if (firstBin<0) firstBin=0;
+    if (lastBin>=gr->GetN()) lastBin=gr->GetN()-1;
+    //
+    if (firstBin<lastBin){
+      //
+      minROC[isec]=TMath::MinElement(lastBin-firstBin, &(gr->GetY()[firstBin]));
+      maxROC[isec]=TMath::MaxElement(lastBin-firstBin, &(gr->GetY()[firstBin]));
+      meanROC[isec]=TMath::Mean(lastBin-firstBin, &(gr->GetY()[firstBin]));
+      medianROC[isec]=TMath::Median(lastBin-firstBin, &(gr->GetY()[firstBin]));       
+      graph2 = new TGraph(lastBin-firstBin, &(gr->GetX()[firstBin]), &(gr->GetY()[firstBin]));
+      delete currentArray2->At(isec);
+      currentArray2->AddAt(graph2,isec);
+    }
+    (*fPcstream)<<"dcs"<<     // current information
+      Form("current%d.=",isec)<<graph2;
+  }     
+  meanIIROC=TMath::Mean(36, &(meanROC.GetMatrixArray()[0]));
+  meanIOROC=TMath::Mean(36, &(meanROC.GetMatrixArray()[36]));
+  medianIIROC=TMath::Median(36, &(meanROC.GetMatrixArray()[0]));
+  medianIOROC=TMath::Median(36, &(meanROC.GetMatrixArray()[36]));
+  //
+  (*fPcstream)<<"dcs"<<     // current information
+    "isec.="<<&sector<<                       //sector number
+    "IIROC.="<<&currentIROC<<               // current sample at given moment
+    "IOROC.="<<&currentOROC<<               // current sample at given moment
+    "medianIIROC="<<medcurIROC<<            // median at given moment 
+    "medianIOROC="<<medcurOROC<<            // median at given moment
+    //
+    "minIROC.="<<&minROC<<                  // minimum in +-5 min 
+    "maxIROC.="<<&maxROC<<                  // maximum in +-5 min
+    "meanIROC.="<<&meanROC<<                // mean in +-5 min
+    "medianIROC.="<<&medianROC<<              // median in +-5 min
+    "meanIIROC5="<<meanIIROC<<               // mean current in IROC +-5 minutes 
+    "meanIOROC5="<<meanIOROC<<               // mean current in OROC 
+    "medianIIROC5="<<medianIIROC<<           // median current in IROC 
+    "medianIOROC5="<<medianIOROC;           // medianan current in OROC 
+   
+
+  (*fPcstream)<<"current"<<     // current information
+    "time="<<itime<<
+    "isec.="<<&sector<<                       //sector number
+    "IIROC.="<<&currentIROC<<               // current sample at given moment
+    "IOROC.="<<&currentOROC<<               // current sample at given moment
+    "medianIIROC="<<medcurIROC<<            // median at given moment 
+    "medianIOROC="<<medcurOROC<<            // median at given moment
+    //
+    "minIROC.="<<&minROC<<                  // minimum in +-5 min 
+    "maxIROC.="<<&maxROC<<                  // maximum in +-5 min
+    "meanIROC.="<<&meanROC<<                // mean in +-5 min
+    "medianIROC.="<<&medianROC<<              // median in +-5 min
+    "meanIIROC5="<<meanIIROC<<               // mean current in IROC +-5 minutes 
+    "meanIOROC5="<<meanIOROC<<               // mean current in OROC 
+    "medianIIROC5="<<medianIIROC<<           // median current in IROC 
+    "medianIOROC5="<<medianIOROC<< // medianan current in OROC 
+    "\n";
+
+}