]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCcalibDButil.h
Added possibility to run without reading the MC (Andrea)
[u/mrichter/AliRoot.git] / TPC / AliTPCcalibDButil.h
index d0f49a58e10d698377f88d8c34b9b4b528b6ede1..8b89585394c2c25a17e29142ec36c757b0fbafe8 100644 (file)
 ///////////////////////////////////////////////////////////////////////////////
 
 #include <TObject.h>
+#include <TArrayI.h>
 
 class AliDCSSensorArray;
 class AliTPCcalibDB;
 class AliTPCCalPad;
 class AliTPCmapper;
 class AliTPCCalibRaw;
+class TGraph;
+class TGraphErrors;
+class TTreeSRedirector;
 
 class AliTPCcalibDButil : public TObject
 {
@@ -28,7 +32,7 @@ public:
   void UpdateFromCalibDB();
   //data processing functions
   void ProcessCEdata(const char* fitFormula, TVectorD &fitResultsA, TVectorD &fitResultsC,
-                     Int_t &noutliersCE, AliTPCCalPad *outCE=0);
+                     Int_t &noutliersCE, Double_t & chi2A, Double_t &chi2C, AliTPCCalPad *outCE=0);
   void ProcessCEgraphs(TVectorD &vecTEntries, TVectorD &vecTMean, TVectorD &vecTRMS, TVectorD &vecTMedian,
                        TVectorD &vecQEntries, TVectorD &vecQMean, TVectorD &vecQRMS, TVectorD &vecQMedian,
                        Float_t &driftTimeA, Float_t &driftTimeC );
@@ -68,11 +72,43 @@ public:
                 {fRefALTROMasked=masked;}
   
   //creation of derived pad by pad calibration data
-  AliTPCCalPad *CreatePadTime0(Int_t model=0);
+  AliTPCCalPad *CreatePadTime0(Int_t model, Double_t &gyA, Double_t &gyC, Double_t &chi2A, Double_t &chi2C);
   //
+  // create outlyer maps
+  //
+  AliTPCCalPad *CreateCEOutlyerMap(Int_t &noutliersCE, AliTPCCalPad *ceOut=0, Float_t minSignal=10, Float_t cutTrmsMin=0.9, Float_t cutTrmsMax=1.2, Float_t cutMaxDistT=0.7);
+  AliTPCCalPad *CreatePulserOutlyerMap(Int_t &noutliersPulser, AliTPCCalPad *pulserOut=0, Float_t cutTime=3, Float_t cutnRMSQ=5, Float_t cutnRMSrms=5);
+  //
+  AliTPCCalPad *CreatePadTime0CE(TVectorD &fitResultsA, TVectorD&fitResultsC, Int_t &nOut, Double_t &chi2A, Double_t &chi2C, const char *dumpfile=0);
+  //
+
   void UpdatePulserOutlierMap();
   void UpdateRefPulserOutlierMap();
   void PulserOutlierMap(AliTPCCalPad *pulOut, const AliTPCCalPad *pulT, const AliTPCCalPad *pulQ);
+
+  //
+  // graph tools
+  //
+  static Double_t GetLaserTime0(Int_t run, Int_t timeStamp, Int_t deltaT, Int_t side);
+  static TGraph* FilterGraphMedian(TGraph * graph, Float_t sigmaCut, Double_t &medianY);
+  static TGraph* FilterGraphMedianAbs(TGraph * graph, Float_t cut, Double_t &medianY);
+  static TGraphErrors* FilterGraphMedianErr(TGraphErrors * graph, Float_t sigmaCut,Double_t &medianY);
+  //
+  static void Sort(TGraph *graph);
+  static void SmoothGraph(TGraph *graph, Double_t delta);
+  static Int_t     GetNearest(TGraph *graph, Double_t xref, Double_t &dx, Double_t &y);
+  static Double_t EvalGraphConst(TGraph *graph, Double_t xref);
+  
+  void FilterCE(Double_t deltaT=100, Double_t cutAbs=10, Double_t cutSigma=4., TTreeSRedirector *pcstream=0);
+  void FilterTracks(Int_t run, Double_t cutSigma=20., TTreeSRedirector *pcstream=0);
+
+  void FilterGoofie(AliDCSSensorArray * goofieArray, Double_t deltaT=2, Double_t cutSigma=4., TTreeSRedirector *pcstream=0);
+  static Double_t  GetTriggerOffsetTPC(Int_t run, Int_t timeStamp, Double_t deltaT=86400, Double_t deltaTLaser=3600, Int_t valType=0);
+  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);
+  static Double_t  GetVDriftTPCLaserTracks(Double_t &dist,Int_t run, Int_t timeStamp, Double_t deltaT=43200, Int_t side=2);
+  static Double_t  GetVDriftTPCCE(Double_t &dist, Int_t run, Int_t timeStamp, Double_t deltaT=43200, Int_t side=2);
+  Int_t MakeRunList(Int_t startRun, Int_t stopRun); // find the list of usable runs
+  Int_t FindRunTPC(Int_t    itime, Bool_t debug=kFALSE);
 private:
   AliTPCcalibDB *fCalibDB;            //pointer to calibDB object
   AliTPCCalPad  *fPadNoise;           //noise information
@@ -112,7 +148,17 @@ private:
   Float_t fPulTmaxLimitAbs;              //maximum variation of Pulser Signals (time) before pads will be treated as outliers
   Float_t fPulQmaxLimitAbs;              //maximum variation of Pulser Signals (charge) before pads will be treated as outliers
   Float_t fPulQminLimit;                 //minimum charge value for Pulser Signals before pads will be treated as outliers
+
+  //
+  // helpers to get the run number for given time stamps
+  //
+  // filters  
   
+public:
+  TArrayI fRuns;                         // run list with OCDB info
+  TArrayI fRunsStart;                    // start time for given run
+  TArrayI fRunsStop;                     // stop time for given run
+private:
   AliTPCcalibDButil (const AliTPCcalibDButil& );
   AliTPCcalibDButil& operator= (const AliTPCcalibDButil& );