]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSOnlineSDDInjectors.h
store also difference in local Y
[u/mrichter/AliRoot.git] / ITS / AliITSOnlineSDDInjectors.h
index 6490198b3ad9ea24bdffe36a41c648f8ac09951f..e49459b8e9e29210b3ae5e645eea698d30abb28e 100644 (file)
@@ -14,6 +14,7 @@
 #include "AliITSOnlineSDD.h"
 
 
+class TH1F;
 class TH2F;
 class TGraphErrors;
 class AliITSOnlineSDDInjectors : public AliITSOnlineSDD {
@@ -23,15 +24,23 @@ class AliITSOnlineSDDInjectors : public AliITSOnlineSDD {
   AliITSOnlineSDDInjectors(Int_t nddl, Int_t ncarlos, Int_t sid);
   virtual ~AliITSOnlineSDDInjectors();
 
-  void SetThresholds(Float_t tl, Float_t th){
-    fLowThreshold=tl;
-    fHighThreshold=th;
+
+  void SetThresholds(Int_t ilin, Float_t tl, Float_t th){
+    fLowThreshold[ilin]=tl;
+    fHighThreshold[ilin]=th;
+  }
+  void SetMaxNumberOfCellsPerAnode(Int_t maxc=40){
+    fMaxCellsAboveThreshold=maxc;
   }
+
   void SetInjLineRange(Int_t jlin, Int_t tbmin, Int_t tbmax){
     fTbMin[jlin]=tbmin;
     fTbMax[jlin]=tbmax;
   }
-  void SetPolOrder(Int_t n){fPolOrder=n;}
+  void Set20MHzConfig();
+  void Set40MHzConfig();
+
+  void SetPolDegree(Int_t n){fPolDegree=n;}
   void SetMinDriftSpeed(Float_t vmin){fMinDriftSpeed=vmin;}
   void SetMaxDriftSpeed(Float_t vmax){fMaxDriftSpeed=vmax;}
   void SetMaxDriftSpeedErr(Float_t maxval){
@@ -41,7 +50,7 @@ class AliITSOnlineSDDInjectors : public AliITSOnlineSDD {
     fFirstPadForFit=firstpad;
     fLastPadForFit=lastpad;
   }
-  void SetPadStatusCutForFit(Int_t cutval=1){
+  void SetPadStatusCutForFit(Int_t cutval=4){
     fPadStatusCutForFit=cutval;
   }
   void SetDefaults();
@@ -51,6 +60,10 @@ class AliITSOnlineSDDInjectors : public AliITSOnlineSDD {
   void SetUseTimeZeroSignal(Bool_t useTZ=kTRUE){
     fUseTimeZeroSignal=useTZ;
   }
+  void SetUseLine(Int_t iLine, Bool_t use=kTRUE){
+    if(iLine>=0 && iLine<kInjLines) fUseLine[iLine]=use;
+  }
+  TH1F* GetMeanDriftSpeedVsPadHisto() const;
   TGraphErrors* GetTimeVsDistGraph(Int_t jpad) const;
   TGraphErrors* GetDriftSpeedGraph() const;
   TGraphErrors* GetSelectedDriftSpeedGraph(Int_t minAcceptStatus) const;
@@ -78,6 +91,8 @@ class AliITSOnlineSDDInjectors : public AliITSOnlineSDD {
   void PrintInjectorStatus();
   void PrintCentroids();
   void WriteToASCII(Int_t evNumb, UInt_t timeStamp, Int_t optAppend=0);
+  void WriteInjectorStatusToASCII();
+  Bool_t WriteToROOT(TFile *fil) const;
 
   void Reset();
   void AnalyzeEvent(TH2F* his);
@@ -87,11 +102,21 @@ class AliITSOnlineSDDInjectors : public AliITSOnlineSDD {
   void CalcDriftSpeed(Int_t jpad);
   void CalcTimeBinZero();
   void FitDriftSpeedVsAnode();
+  void PolyFit(Int_t degree=3);
   Double_t GetMeanDriftSpeed(Int_t ipad) const{
-    if(fNEvents==0) return 0.;
-    return fSumDriftSpeed[ipad]/(Double_t)fNEvents;
+    if(fNEventsInPad[ipad]==0) return 0.;
+    return fSumDriftSpeed[ipad]/(Double_t)fNEventsInPad[ipad];
   }
   Double_t GetRMSDriftSpeed(Int_t ipad) const;
+  Double_t GetMeanPadStatusCut(Int_t ipad) const{
+    if(fNEventsInPad[ipad]==0) return 0.;
+    return (Double_t)fSumPadStatusCut[ipad]/(Double_t)fNEventsInPad[ipad];
+  }
+  Double_t GetMeanPadStatus(Int_t ipad) const{
+    if(fNEvents==0) return 0.;
+    return (Double_t)fSumPadStatus[ipad]/(Double_t)fNEvents;
+  }
+
   void FitMeanDriftSpeedVsAnode();
 
  protected:
@@ -105,11 +130,13 @@ class AliITSOnlineSDDInjectors : public AliITSOnlineSDD {
   AliITSOnlineSDDInjectors& operator = (const AliITSOnlineSDDInjectors& source);
   static const Float_t fgkSaturation;        // ADC saturation value (1008)
   static const Float_t fgkDefaultLThreshold;  // Default for fLowThreshold
+  static const Float_t fgkDefaultLThreshold1;  // Default for fLowThreshold
   static const Float_t fgkDefaultHThreshold;  // Default for fHighThreshold
+  static const Float_t fgkDefaultHThreshold1;  // Default for fHighThreshold
   static const Float_t fgkDefaultMinSpeed;   // Default for fMinDriftSpeed
   static const Float_t fgkDefaultMaxSpeed;   // Default for fMaxDriftSpeed
   static const Float_t fgkDefaultMaxErr;     // Default for fMaxDriftSpeedErr
-  static const Int_t   fgkDefaultPolOrder;   // Default for fPolOrder
+  static const Int_t   fgkDefaultPolDegree;   // Default for fPolDegree
   static const Float_t fgkDefaultTimeStep;   // Default for fTimeStep
   static const UShort_t   fgkDefaultTbMin[kInjLines];  // Defaults for fTbMin
   static const UShort_t   fgkDefaultTbMax[kInjLines];  // Defaults for fTbMax
@@ -119,34 +146,41 @@ class AliITSOnlineSDDInjectors : public AliITSOnlineSDD {
   Double_t fTbZero;                           // Time zero for injector event
   Double_t fRMSTbZero;                        // Error on time zero 
   Double_t fPosition[kInjLines];              // Coordinates of injector lines
-  UShort_t fTbMin[kInjLines];                // Minimum time bin for each line
-  UShort_t fTbMax[kInjLines];                // Maximum time bin for each line
-  Bool_t fGoodInj[kInjPads][kInjLines];      // array of good injectors
+  UShort_t fTbMin[kInjLines];                 // Minimum time bin for each line
+  UShort_t fTbMax[kInjLines];                 // Maximum time bin for each line
+  Bool_t fGoodInj[kInjPads][kInjLines];       // array of good injectors
   Double_t fCentroid[kInjPads][kInjLines];    // array of time bin centroids
   Double_t fRMSCentroid[kInjPads][kInjLines]; // array of time rms of injectors
   Double_t fDriftSpeed[kInjPads];             // drift speed  
   Double_t fDriftSpeedErr[kInjPads];          // error on drift speed
-  Int_t fNEvents;                            // number of events
+  Int_t fNEvents;                             // number of events
+  Int_t fNEventsInPad[kInjPads];              // number of events per pad
   Double_t fSumDriftSpeed[kInjPads];          // drift speed summed over events  
   Double_t fSumSqDriftSpeed[kInjPads];        // drift speed^2 sum
+  Int_t fSumPadStatus[kInjPads];              // pad status sum
+  Int_t fSumPadStatusCut[kInjPads];           // pad status (> cut) sum
   
-  Double_t *fParam;                           // parameters of polinomial fit to
+  Double_t *fParam;                          // parameters of polinomial fit to
                                              // drift speed vs. anode number
-  Int_t fPolOrder;                   // order of polinomial fit
+  Int_t fPolDegree;                  // Degree of polynomial fit
+  Int_t fActualPolDegree;            // Degree actually used (<=fPolDegree)
   Float_t fMinDriftSpeed;            // Minimum value for drift speed
   Float_t fMaxDriftSpeed;            // Maximum value for drift speed
   Float_t fMaxDriftSpeedErr;         // Maximum value for error on drift speed
-  Float_t fLowThreshold;             // Low threshold for injector signal
-  Float_t fHighThreshold;            // High threshold for injector signal
+  Float_t fLowThreshold[kInjLines];  // Low threshold for injector signal
+  Float_t fHighThreshold[kInjLines]; // High threshold for injector signal
 
+  Bool_t fUseLine[kInjLines];        // Flag to use/not use a line
   Int_t fFirstPadForFit;             // first injector pad used in fit
   Int_t fLastPadForFit;              // last injector pad used in fit
   Int_t fPadStatusCutForFit;         // minimum value of pad status for fit
 
-  Double_t fTimeStep;                 // time bin value (25 or 50 ns)
+  Double_t fTimeStep;                // time bin value (25 or 50 ns)
   Bool_t fUseTimeZeroSignal;         // flag for usage of time zero signal
                                      // in drift speed calculation
 
-  ClassDef(AliITSOnlineSDDInjectors,6)
+  Int_t fMaxCellsAboveThreshold;     // cut to remove noisy anodes
+
+  ClassDef(AliITSOnlineSDDInjectors,9)
 };
 #endif