LCOV - code coverage report
Current view: top level - TPC/TPCbase - AliTPCcalibDButil.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 31 3.2 %
Date: 2016-06-14 17:26:59 Functions: 1 35 2.9 %

          Line data    Source code
       1             : #ifndef ALITPCCALIBDBUTIL_H
       2             : #define ALITPCCALIBDBUTIL_H
       3             : 
       4             : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       5             :  * See cxx source for full Copyright notice                               */
       6             : 
       7             : /// \class AliTPCcalibDButil
       8             : /// \brief Class providing the calculation of derived quantities (mean,rms,fits,...) of calibration entries
       9             : 
      10             : #include <TObject.h>
      11             : #include <TArrayI.h>
      12             : #include <TVectorDfwd.h>
      13             : #include <TVectorFfwd.h>
      14             : #include <TMatrixDfwd.h>
      15             : 
      16             : class TGraph;
      17             : class TMap;
      18             : class AliDCSSensorArray;
      19             : class AliTPCcalibDB;
      20             : class AliTPCCalPad;
      21             : class AliTPCCalROC;
      22             : class AliTPCmapper;
      23             : class AliTPCCalibRaw;
      24             : class AliCDBEntry;
      25             : class AliDCSSensor;
      26             : class AliDCSSensorArray;
      27             : class AliTPCSensorTempArray;
      28             : class AliTPCdataQA;
      29             : class TGraphErrors;
      30             : class TTreeSRedirector;
      31             : class AliTPCCalROC;
      32             : class AliSplineFit;
      33             : 
      34             : class AliTPCcalibDButil : public TObject
      35             : {
      36             : public:
      37             :   AliTPCcalibDButil();
      38             :   virtual ~AliTPCcalibDButil();
      39             : 
      40             :   void UpdateFromCalibDB();
      41             :   //data processing functions
      42             :   void ProcessCEdata(const char* fitFormula, TVectorD &fitResultsA, TVectorD &fitResultsC,
      43             :                      Int_t &noutliersCE, Double_t & chi2A, Double_t &chi2C, AliTPCCalPad * const outCE=0);
      44             :   void ProcessCEgraphs(TVectorD &vecTEntries, TVectorD &vecTMean, TVectorD &vecTRMS, TVectorD &vecTMedian,
      45             :                        TVectorD &vecQEntries, TVectorD &vecQMean, TVectorD &vecQRMS, TVectorD &vecQMedian,
      46             :                        Float_t &driftTimeA, Float_t &driftTimeC );
      47             :   void ProcessNoiseData(TVectorD &vNoiseMean, TVectorD &vNoiseMeanSenRegions,
      48             :                         TVectorD &vNoiseRMS, TVectorD &vNoiseRMSSenRegions,
      49             :                         Int_t &nonMaskedZero, Int_t &nNaN);
      50             :   void ProcessQAData(TVectorD &vQaOcc, TVectorD &vQaQtot, TVectorD &vQaQmax);
      51             :   void ProcessPulser(TVectorD &vMeanTime);
      52             :   void ProcessALTROConfig(Int_t &nMasked);
      53             :   void ProcessGoofie(TVectorD & vecEntries, TVectorD & vecMedian, TVectorD &vecMean, TVectorD &vecRMS);
      54             :   
      55             :   //processing functions using reference data
      56             :   void ProcessPedestalVariations(TVectorF &pedestalDeviations);
      57             :   void ProcessNoiseVariations(TVectorF &noiseDeviations);
      58             :   void ProcessPulserVariations(TVectorF &pulserQdeviations, Float_t &varQMean, Int_t &npadsOutOneTB, Int_t &npadsOffAdd);
      59             :   
      60             :   //getter preprocess information
      61           0 :   Int_t GetNPulserOutliers() const {return fNpulserOutliers;}
      62             :   Float_t GetMeanAltro(const AliTPCCalROC *roc, const Int_t row, const Int_t pad, AliTPCCalROC * const rocOut=0x0);
      63           0 :   AliTPCCalPad *GetPulserOutlierMap() const {return fPulserOutlier;}
      64             : 
      65             :   //getters ref data
      66           0 :   TMap *GetReferenceMap() const {return fRefMap;}
      67             :   Int_t GetReferenceRun(const char* type) const;
      68           0 :   const char* GetRefValidity() const {return fRefValidity.Data();}
      69             :   
      70           0 :   AliTPCCalPad* GetRefPadNoise() const {return fRefPadNoise;}
      71           0 :   AliTPCCalPad* GetRefPedestals() const {return fRefPedestals;}
      72           0 :   AliTPCCalPad* GetRefPedestalMasked() const {return fRefPedestalMasked;}
      73           0 :   AliTPCCalPad* GetRefPulserTmean() const {return fRefPulserTmean;}
      74           0 :   AliTPCCalPad* GetRefPulserTrms() const {return fRefPulserTrms;}
      75           0 :   AliTPCCalPad* GetRefPulserQmean() const {return fRefPulserQmean;}
      76           0 :   AliTPCCalPad* GetRefPulserOutlier() const {return fRefPulserOutlier;}
      77           0 :   AliTPCCalPad* GetRefPulserMasked() const {return fRefPulserMasked;}
      78           0 :   AliTPCCalPad* GetRefCETmean() const {return fRefCETmean;}
      79           0 :   AliTPCCalPad* GetRefCETrms() const {return fRefCETrms;}
      80           0 :   AliTPCCalPad* GetRefCEQmean() const {return fRefCEQmean;}
      81           0 :   AliTPCCalPad* GetRefCEMasked() const {return fRefCEMasked;}
      82           0 :   AliTPCCalPad* GetRefALTROFPED() const {return fRefALTROFPED;}
      83           0 :   AliTPCCalPad* GetRefALTROZsThr() const {return fRefALTROZsThr;}
      84           0 :   AliTPCCalPad* GetRefALTROAcqStart() const {return fRefALTROAcqStart;}
      85           0 :   AliTPCCalPad* GetRefALTROAcqStop() const {return fRefALTROAcqStop;}
      86           0 :   AliTPCCalPad* GetRefALTROMasked() const {return fRefALTROMasked;}
      87             :   
      88             :   
      89             :   //setters for pad by pad information
      90             :   void SetPulserData(AliTPCCalPad * const tmean, AliTPCCalPad * const trms=0x0, AliTPCCalPad * const qmean=0x0)
      91           0 :                 {fPulserTmean=tmean; fPulserTrms=trms; fPulserQmean=qmean;}
      92             :   void SetCEData(AliTPCCalPad *const tmean, AliTPCCalPad *const trms=0x0, AliTPCCalPad *const qmean=0x0)
      93           0 :                 {fCETmean=tmean; fCETrms=trms; fCEQmean=qmean;}
      94             :   void SetNoisePedestal(AliTPCCalPad *const noise, AliTPCCalPad *const pedestal=0x0)
      95           0 :                 {fPadNoise=noise; fPedestals=pedestal;}
      96             :   void SetALTROData(AliTPCCalPad *const masked)
      97           0 :                 {fALTROMasked=masked;}
      98           0 :   void SetGoofieArray(AliDCSSensorArray *const arr) {fGoofieArray=arr;}
      99             :   
     100             :   //setters for pad by pad information
     101             :   void SetRefFile(const char* filename);
     102             :   void SetReferenceRun(Int_t run=-1);
     103             :   void UpdateRefDataFromOCDB();
     104             :   void SetRefPulserData(AliTPCCalPad *const tmean, AliTPCCalPad *const trms=0x0, AliTPCCalPad *const qmean=0x0)
     105           0 :                 {fRefPulserTmean=tmean; fRefPulserTrms=trms; fRefPulserQmean=qmean;}
     106             :   void SetRefCEData(AliTPCCalPad *const tmean, AliTPCCalPad *const trms=0x0, AliTPCCalPad *const qmean=0x0)
     107           0 :                 {fRefCETmean=tmean; fRefCETrms=trms; fRefCEQmean=qmean;}
     108             :   void SetRefNoisePedestal(AliTPCCalPad *const noise, AliTPCCalPad *const pedestal=0x0)
     109           0 :                 {fRefPadNoise=noise; fRefPedestals=pedestal;}
     110             :   void SetRefALTROData(AliTPCCalPad *const masked)
     111           0 :                 {fRefALTROMasked=masked;}
     112             :   
     113             :   //creation of derived pad by pad calibration data
     114             :   AliTPCCalPad *CreatePadTime0(Int_t model, Double_t &gyA, Double_t &gyC, Double_t &chi2A, Double_t &chi2C);
     115             :   //
     116             :   // create outlyer maps
     117             :   //
     118             :   AliTPCCalPad *CreateCEOutlyerMap(Int_t &noutliersCE, AliTPCCalPad * const ceOut=0, Float_t minSignal=10, Float_t cutTrmsMin=0.9, Float_t cutTrmsMax=1.2, Float_t cutMaxDistT=0.7);
     119             :   AliTPCCalPad *CreatePulserOutlyerMap(Int_t &noutliersPulser, AliTPCCalPad * const pulserOut=0, Float_t cutTime=3, Float_t cutnRMSQ=5, Float_t cutnRMSrms=5);
     120             :   //
     121             :   AliTPCCalPad *CreatePadTime0CE(TVectorD &fitResultsA, TVectorD&fitResultsC, Int_t &nOut, Double_t &chi2A, Double_t &chi2C, const char *dumpfile=0);
     122             :   //
     123             : 
     124             :   void UpdatePulserOutlierMap();
     125             :   void UpdateRefPulserOutlierMap();
     126             :   void PulserOutlierMap(AliTPCCalPad *pulOut, const AliTPCCalPad *pulT, const AliTPCCalPad *pulQ);
     127             : 
     128             :   const char* GetGUIRefTreeDefaultName();
     129             :   
     130             :   Bool_t CreateGUIRefTree(const char* filename="");
     131             :   //
     132             :   // graph tools
     133             :   //
     134             :   static Double_t GetLaserTime0(Int_t run, Int_t timeStamp, Int_t deltaT, Int_t side);
     135             :   static TGraph* FilterGraphMedian(TGraph * const graph, Float_t sigmaCut, Double_t &medianY);
     136             :   static TGraph* FilterGraphMedianAbs(TGraph * graph, Float_t cut, Double_t &medianY);
     137             :   static TGraphErrors* FilterGraphMedianErr(TGraphErrors * graph, Float_t sigmaCut,Double_t &medianY);
     138             :   //
     139             :   static void Sort(TGraph *graph);
     140             :   static void SmoothGraph(TGraph *graph, Double_t delta);
     141             :   static Int_t     GetNearest(TGraph *graph, Double_t xref, Double_t &dx, Double_t &y);
     142             :   static Double_t EvalGraphConst(TGraph * const graph, Double_t xref);
     143             :   static Double_t EvalGraphConst(AliSplineFit *graph, Double_t xref);
     144             : 
     145             :   //
     146             :   // Filter sensors
     147             :   //
     148             :   static Float_t FilterSensor(AliDCSSensor * sensor, Double_t ymin, Double_t ymax, Double_t maxdy, Double_t sigmaCut); 
     149             :   //
     150             :   // Filter AliRelAlignmentKalman - Alignment/Drift velocity
     151             :   //
     152             :   static TMatrixD* MakeStatRelKalman(TObjArray * const array, Float_t minFraction, Int_t minStat, Float_t maxvd);
     153             :   static TObjArray *SmoothRelKalman(TObjArray * const array,const TMatrixD * statP, Bool_t direction, Float_t sigmaCut);
     154             :   static TObjArray *SmoothRelKalman(TObjArray * const arrayP, TObjArray * const arrayM);
     155             :   static void FilterCE(Double_t deltaT=100, Double_t cutAbs=10, Double_t cutSigma=4., TTreeSRedirector * const pcstream=0);
     156             :   static void FilterTracks(Int_t run, Double_t cutSigma=20., TTreeSRedirector * const pcstream=0);
     157             :   static Float_t FilterTemperature(AliTPCSensorTempArray *tempArray, Double_t ymin=15, Double_t ymax=22, Double_t sigmaCut=5); 
     158             : 
     159             :   static   void FilterGoofie(AliDCSSensorArray * goofieArray, Double_t deltaT=2, Double_t cutSigma=4.,  Double_t minVdn=8.5, Double_t maxVdn=9.05, TTreeSRedirector * const pcstream=0);
     160             :   static Double_t  GetTriggerOffsetTPC(Int_t run, Int_t timeStamp, Double_t deltaT=86400, Double_t deltaTLaser=3600, Int_t valType=0);
     161             :   static Double_t  GetVDriftTPC(Double_t &dist, Int_t run, Int_t timeStamp, Double_t deltaT=86400, Double_t deltaTLaser=3600, Int_t valType=0);
     162             :   static Double_t  GetVDriftTPCLaserTracks(Double_t &dist,Int_t run, Int_t timeStamp, Double_t deltaT=43200, Int_t side=2);
     163             :   static Double_t  GetVDriftTPCLaserTracksOnline(Double_t &dist, Int_t /*run*/, Int_t timeStamp, Double_t deltaT=43200, Int_t side=2);
     164             :   static Double_t  GetVDriftTPCCE(Double_t &dist, Int_t run, Int_t timeStamp, Double_t deltaT=43200, Int_t side=2);
     165             :   static Double_t  GetVDriftTPCITS(Double_t &dist, Int_t run, Int_t timeStamp);
     166             :   static Double_t  GetTime0TPCITS(Double_t &dist, Int_t run, Int_t timeStamp);
     167             :   Int_t MakeRunList(Int_t startRun, Int_t stopRun); // find the list of usable runs
     168             :   Int_t FindRunTPC(Int_t    itime, Bool_t debug=kFALSE);
     169             : 
     170             :  AliTPCCalPad* GetRefCalPad(AliCDBEntry *entry, const char* objName);
     171             :   AliTPCCalPad* GetRefCalPad(AliCDBEntry *entry);
     172             :   AliTPCCalPad* GetAltroMasked(const char* cdbPath, const char* name);
     173             :   Bool_t HasRefChanged(const char *cdbPath);
     174             :   Int_t GetCurrentReferenceRun(const char* type) const;
     175             :   AliCDBEntry* GetRefEntry(const char* cdbPath);
     176             : 
     177             :   static TTree* ConnectGainTrees(TString baseDir);
     178             :   static TTree* ConnectPulserTrees(TString baseDir, TTree * tree=0);
     179             :   //static TTree* ConnectNoiseTrees(TString baseDir,  TTree * tree=0); 
     180             :   static TTree* ConnectDistortionTrees(TString baseDir, TString  selection, TTree *tMain);
     181             :   static  TTree* ConnectCalPadTrees(TString baseDir, TString pattern,  TTree *tMain, Bool_t checkAliases);
     182             : 
     183             : private:
     184             :   AliTPCcalibDB *fCalibDB;            ///< pointer to calibDB object
     185             :   AliTPCCalPad  *fPadNoise;           ///< noise information
     186             :   AliTPCCalPad  *fPedestals;          ///< pedestal information
     187             :   AliTPCCalPad  *fPulserTmean;        ///< pulser mean time information
     188             :   AliTPCCalPad  *fPulserTrms;         ///< pulser rms time information
     189             :   AliTPCCalPad  *fPulserQmean;        ///< pulser mean q information
     190             :   AliTPCCalPad  *fPulserOutlier;      ///< pulser outlier map
     191             :   AliTPCCalPad  *fCETmean;            ///< central electrode mean time information
     192             :   AliTPCCalPad  *fCETrms;             ///< central electrode rms time information
     193             :   AliTPCCalPad  *fCEQmean;            ///< central electrode mean q information
     194             :   AliTPCCalPad  *fALTROMasked;        ///< ALTRO masked channels information
     195             :   //
     196             :   AliTPCCalibRaw *fCalibRaw;          ///< raw calibration object
     197             :   //
     198             :   AliTPCdataQA   *fDataQA;            ///< data qa
     199             :   //reference data
     200             :   TMap *fRefMap;                        ///< latest map to reference information
     201             :   TMap *fCurrentRefMap;                 ///< reference data map of entries currently loaded
     202             :   TString fRefValidity;                 ///< validity range of reference data
     203             :   //  
     204             :   AliTPCCalPad  *fRefPadNoise;           ///< Reference noise information
     205             :   AliTPCCalPad  *fRefPedestals;          ///< Reference pedestal information
     206             :   AliTPCCalPad  *fRefPedestalMasked;     ///< Reference masked channels in pedestal run
     207             :   AliTPCCalPad  *fRefPulserTmean;        ///< Reference pulser mean time information
     208             :   AliTPCCalPad  *fRefPulserTrms;         ///< Reference pulser rms time information
     209             :   AliTPCCalPad  *fRefPulserQmean;        ///< Reference pulser mean q information
     210             :   AliTPCCalPad  *fRefPulserOutlier;      ///< Reference pulser outlier map
     211             :   AliTPCCalPad  *fRefPulserMasked;       ///< Reference masked channels in pulser run
     212             :   AliTPCCalPad  *fRefCETmean;            ///< Reference central electrode mean time information
     213             :   AliTPCCalPad  *fRefCETrms;             ///< Reference central electrode rms time information
     214             :   AliTPCCalPad  *fRefCEQmean;            ///< Reference central electrode mean q information
     215             :   AliTPCCalPad  *fRefCEMasked;           ///< Reference masked channels in laser run
     216             :   AliTPCCalPad  *fRefALTROFPED;          ///< Reference fixed pedestal value
     217             :   AliTPCCalPad  *fRefALTROZsThr;         ///< Reference zero suppression threshol
     218             :   AliTPCCalPad  *fRefALTROAcqStart;      ///< Reference accquistion start time bin
     219             :   AliTPCCalPad  *fRefALTROAcqStop;       ///< Reference accquistion stop time bin
     220             :   AliTPCCalPad  *fRefALTROMasked;        ///< Reference ALTRO masked channels information
     221             :   //
     222             :   AliTPCCalibRaw *fRefCalibRaw;          ///< Reference raw calibration object
     223             :   //
     224             :   AliTPCdataQA   *fRefDataQA;            ///< Reference data QA
     225             :   //
     226             :   AliDCSSensorArray* fGoofieArray;    ///< Goofie Data
     227             :   //
     228             :   AliTPCmapper  *fMapper;             ///< TPC mapping handler
     229             :   Int_t fNpulserOutliers;             ///< number of outliers from Pulser calibration
     230             :   
     231             :   Float_t fIrocTimeOffset;               ///< timing offset between IROC and OROC in timebins
     232             :   Float_t fCETmaxLimitAbs;               ///< maximum variation in CE data before pads will be treated as outliers
     233             :   Float_t fPulTmaxLimitAbs;              ///< maximum variation of Pulser Signals (time) before pads will be treated as outliers
     234             :   Float_t fPulQmaxLimitAbs;              ///< maximum variation of Pulser Signals (charge) before pads will be treated as outliers
     235             :   Float_t fPulQminLimit;                 ///< minimum charge value for Pulser Signals before pads will be treated as outliers
     236             : 
     237             :   //
     238             :   // helpers to get the run number for given time stamps
     239             :   //
     240             :   // filters  
     241             :   
     242             :   TArrayI fRuns;                         ///< run list with OCDB info
     243             :   TArrayI fRunsStart;                    ///< start time for given run
     244             :   TArrayI fRunsStop;                     ///< stop time for given run
     245             :   
     246             :   AliTPCcalibDButil (const AliTPCcalibDButil& );
     247             :   AliTPCcalibDButil& operator= (const AliTPCcalibDButil& );
     248             : 
     249             :   
     250             :   static Double_t  GetVDriftTPCLaserTracksCommon(Double_t &dist, Int_t timeStamp, Double_t deltaT, Int_t side, TObjArray * const array);
     251             :   
     252             :   
     253             :   /// \cond CLASSIMP
     254          24 :   ClassDef(AliTPCcalibDButil,0)
     255             :   /// \endcond
     256             : };
     257             : 
     258             : 
     259             : #endif

Generated by: LCOV version 1.11