ROOT logo
#ifndef ALITPCCALIBRAW_H
#define ALITPCCALIBRAW_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

////////////////////////////////////////////////////////////////////////////////////////
//                                                                                    //
//                        TPC ALTRO Header analysis                                   //
//                                                                                    //
////////////////////////////////////////////////////////////////////////////////////////

#include <TVectorF.h>
#include <TObjArray.h>
#include <THnSparse.h>

#include "AliTPCCalibRawBase.h"
#include "AliTPCCalPad.h"
#include "AliTPCROC.h"

class TH2C;
class TH1F;
class TMap;
class TGraph;
class TCanvas;

class AliTPCCalibRaw : public AliTPCCalibRawBase {
public:
  AliTPCCalibRaw();
  AliTPCCalibRaw(const TMap *config);
  
  virtual ~AliTPCCalibRaw();

  enum {kNRCU=216};
  
  virtual Int_t Update(const Int_t isector, const Int_t iRow, const Int_t iPad,
                       const Int_t iTimeBin, const Float_t signal);
  virtual void UpdateDDL();
  virtual void EndEvent();
  virtual void ResetEvent();
  virtual void Analyse();

  UInt_t GetNFailL1Phase()                const  {return fNFailL1Phase;}
  UInt_t GetNFailL1PhaseEvents()          const  {return fNFailL1PhaseEvent;}
  Int_t   GetPeakDetectionMinus() const {return fPeakDetMinus;}
  Int_t   GetPeakDetectionPlus()  const {return fPeakDetPlus;}
  
  const TVectorF* GetALTROL1PhaseEvents() const {return &fArrALTROL1Phase;}

  const TVectorF *GetALTROL1PhaseEventsRCU(Int_t rcu) const {return (TVectorF*)fArrALTROL1PhaseEvent.At(rcu);}
  const TVectorF *GetALTROL1PhaseFailEventsRCU(Int_t rcu) const {return (TVectorF*)fArrALTROL1PhaseFailEvent.At(rcu);}

  const TVectorF *GetOccupancyEvent()          const {return &fVOccupancyEvent;}
  const TVectorF *GetOccupancyEventSensitive() const {return &fVOccupancySenEvent;}
  const TVectorF *GetSignalSumEvent()          const {return &fVSignalSumEvent;}
  const TVectorF *GetSignalSumEventSensitive() const {return &fVSignalSumSenEvent;}
  const TVectorF *GetFiredPadsSensitive()      const {return &fVNfiredPadsSenEvent;}
  const TVectorF *GetEventTimeStamps()         const {return &fVTimeStampEvent;}
  UInt_t GetFirstTimeStamp() const {return fFirstTimeStamp;}
  
  void  SetRangePeakDetection(Int_t minus, Int_t plus) { fPeakDetMinus=minus; fPeakDetPlus=plus;}
  //Phase info
  TH2C *MakeHistL1RCUEvents(Int_t type=0);
  TH2C *MakeHistL1RCUEventsIROC(Int_t type=0);
  TH2C *MakeHistL1RCUEventsOROC(Int_t type=0);
  TH1F *MakeHistL1PhaseDist();
  TVectorF *MakeVectL1PhaseDist();
  //Occupancy info
  TGraph*  MakeGraphOccupancy(const Int_t type=0, const Int_t xType=0);
//   TGraph*  MakeGraphNoiseEvents();
  TCanvas* MakeCanvasOccupancy(const Int_t xType=1, Bool_t sen=kFALSE);

  const THnSparseI *GetHnDrift() const {return fHnDrift;}
//   AliTPCCalPad *CreateCalPadL1Mean();
//   AliTPCCalPad *CreateCalPadL1RMS();
  
  void Merge(AliTPCCalibRaw * const sig);
  virtual Long64_t Merge(TCollection * const list);
  
private:
  Int_t   fPeakDetMinus;             //  Consecutive timebins on rising edge to be regarded as a signal
  Int_t   fPeakDetPlus;              //  Consecutive timebins on falling edge to be regarded as a signal
  UInt_t  fNFailL1Phase;             //Number of failures in L1 phase
  UInt_t  fNFailL1PhaseEvent;        //Number of events with L1 phase failures
  //binning dv hist
  UInt_t  fNSecTime;                 //Number of seconds per bin in time
  UInt_t  fNBinsTime;                //Number of bin in time
  //processing information
  Bool_t    fPadProcessed;           //! if last pead has already been filled for the current pad
  Int_t     fCurrentChannel;         //! current channel processed
  Int_t     fCurrentSector;          //! current sector processed
  Int_t     fLastSector;             //! current sector processed
  Int_t     fCurrentRow;             //! current row processed
  Int_t     fCurrentPad;             //! current pad processed
  Int_t     fLastTimeBinProc;        //! last time bin processed
  Int_t     fPeakTimeBin;            //! time bin with local maximum
  Int_t     fLastSignal;             //! last signal processed
  Int_t     fNOkPlus;                //! number of processed time bins fullfilling peak criteria
  Int_t     fNOkMinus;               //! number of processed time bins fullfilling peak criteria
  Int_t     fNanoSec;                //! current nano seconds stamp
//
  //L1 phase stuff
  TVectorF fArrCurrentPhaseDist;       //!Phase distribution of the current event
  TVectorF fArrCurrentPhase;           //!Current phase of all RCUs
  TVectorF fArrFailEventNumber;        //event numbers of failed events;
  TVectorF fArrALTROL1Phase;           //Array of L1 phases on an event bases;
  TObjArray fArrALTROL1PhaseEvent;     //L1 phase for each RCU and event
  TObjArray fArrALTROL1PhaseFailEvent; //L1 failure for each RCU and event
  //drift velocity stuff
  enum {kHnBinsDV=3};
  THnSparseI *fHnDrift;                //Histogram last time bin vs. ROC, Time
  //occupancy
  TVectorF fVOccupancyEvent;           //occupancy per event (number of samples above threshold)
  TVectorF fVSignalSumEvent;           //occupancy per event (sum of all adc values)
  TVectorF fVOccupancySenEvent;        //occupancy per event (number of samples abouve threshold) in sensitive regions
  TVectorF fVSignalSumSenEvent;        //occupancy per event (sum of all adc values) in sensitive regions
  TVectorF fVNfiredPadsSenEvent;       //number of pads with a signal above threshold in sensitive regions
  TVectorF fVTimeStampEvent;           //timestamp for all events
  
  TVectorF *MakeArrL1PhaseRCU(Int_t rcu, Bool_t force=kFALSE);
  TVectorF *MakeArrL1PhaseFailRCU(Int_t rcu, Bool_t force=kFALSE);
  
  Bool_t IsEdgePad(Int_t sector, Int_t row, Int_t pad) const;
  void CreateDVhist();
  
  AliTPCCalibRaw(const AliTPCCalibRaw &calib);
  AliTPCCalibRaw& operator = (const  AliTPCCalibRaw &source);

  ClassDef(AliTPCCalibRaw,4) //  Analysis of the Altro header information
};

//----------------------
// Inline Functions
//----------------------
inline TVectorF *AliTPCCalibRaw::MakeArrL1PhaseRCU(Int_t rcu, Bool_t force)
{
  TVectorF *arr=(TVectorF*)fArrALTROL1PhaseEvent.UncheckedAt(rcu);
  if (!arr && force) {
    arr=new TVectorF(100);
    fArrALTROL1PhaseEvent.AddAt(arr,rcu);
  }
  return arr;
}
//
inline TVectorF *AliTPCCalibRaw::MakeArrL1PhaseFailRCU(Int_t rcu, Bool_t force)
{
  TVectorF *arr=(TVectorF*)fArrALTROL1PhaseFailEvent.UncheckedAt(rcu);
  if (!arr && force) {
    arr=new TVectorF(100);
    fArrALTROL1PhaseFailEvent.AddAt(arr,rcu);
  }
  return arr;
}
//_____________________________________________________________________
inline Bool_t AliTPCCalibRaw::IsEdgePad(Int_t sector, Int_t row, Int_t pad) const
{
  //
  // return true if pad is on the edge of a row
  //
  Int_t edge1   = 0;
  if ( pad == edge1 ) return kTRUE;
  Int_t edge2   = fROC->GetNPads(sector,row)-1;
  if ( pad == edge2 ) return kTRUE;
  
  return kFALSE;
}


#endif
 AliTPCCalibRaw.h:1
 AliTPCCalibRaw.h:2
 AliTPCCalibRaw.h:3
 AliTPCCalibRaw.h:4
 AliTPCCalibRaw.h:5
 AliTPCCalibRaw.h:6
 AliTPCCalibRaw.h:7
 AliTPCCalibRaw.h:8
 AliTPCCalibRaw.h:9
 AliTPCCalibRaw.h:10
 AliTPCCalibRaw.h:11
 AliTPCCalibRaw.h:12
 AliTPCCalibRaw.h:13
 AliTPCCalibRaw.h:14
 AliTPCCalibRaw.h:15
 AliTPCCalibRaw.h:16
 AliTPCCalibRaw.h:17
 AliTPCCalibRaw.h:18
 AliTPCCalibRaw.h:19
 AliTPCCalibRaw.h:20
 AliTPCCalibRaw.h:21
 AliTPCCalibRaw.h:22
 AliTPCCalibRaw.h:23
 AliTPCCalibRaw.h:24
 AliTPCCalibRaw.h:25
 AliTPCCalibRaw.h:26
 AliTPCCalibRaw.h:27
 AliTPCCalibRaw.h:28
 AliTPCCalibRaw.h:29
 AliTPCCalibRaw.h:30
 AliTPCCalibRaw.h:31
 AliTPCCalibRaw.h:32
 AliTPCCalibRaw.h:33
 AliTPCCalibRaw.h:34
 AliTPCCalibRaw.h:35
 AliTPCCalibRaw.h:36
 AliTPCCalibRaw.h:37
 AliTPCCalibRaw.h:38
 AliTPCCalibRaw.h:39
 AliTPCCalibRaw.h:40
 AliTPCCalibRaw.h:41
 AliTPCCalibRaw.h:42
 AliTPCCalibRaw.h:43
 AliTPCCalibRaw.h:44
 AliTPCCalibRaw.h:45
 AliTPCCalibRaw.h:46
 AliTPCCalibRaw.h:47
 AliTPCCalibRaw.h:48
 AliTPCCalibRaw.h:49
 AliTPCCalibRaw.h:50
 AliTPCCalibRaw.h:51
 AliTPCCalibRaw.h:52
 AliTPCCalibRaw.h:53
 AliTPCCalibRaw.h:54
 AliTPCCalibRaw.h:55
 AliTPCCalibRaw.h:56
 AliTPCCalibRaw.h:57
 AliTPCCalibRaw.h:58
 AliTPCCalibRaw.h:59
 AliTPCCalibRaw.h:60
 AliTPCCalibRaw.h:61
 AliTPCCalibRaw.h:62
 AliTPCCalibRaw.h:63
 AliTPCCalibRaw.h:64
 AliTPCCalibRaw.h:65
 AliTPCCalibRaw.h:66
 AliTPCCalibRaw.h:67
 AliTPCCalibRaw.h:68
 AliTPCCalibRaw.h:69
 AliTPCCalibRaw.h:70
 AliTPCCalibRaw.h:71
 AliTPCCalibRaw.h:72
 AliTPCCalibRaw.h:73
 AliTPCCalibRaw.h:74
 AliTPCCalibRaw.h:75
 AliTPCCalibRaw.h:76
 AliTPCCalibRaw.h:77
 AliTPCCalibRaw.h:78
 AliTPCCalibRaw.h:79
 AliTPCCalibRaw.h:80
 AliTPCCalibRaw.h:81
 AliTPCCalibRaw.h:82
 AliTPCCalibRaw.h:83
 AliTPCCalibRaw.h:84
 AliTPCCalibRaw.h:85
 AliTPCCalibRaw.h:86
 AliTPCCalibRaw.h:87
 AliTPCCalibRaw.h:88
 AliTPCCalibRaw.h:89
 AliTPCCalibRaw.h:90
 AliTPCCalibRaw.h:91
 AliTPCCalibRaw.h:92
 AliTPCCalibRaw.h:93
 AliTPCCalibRaw.h:94
 AliTPCCalibRaw.h:95
 AliTPCCalibRaw.h:96
 AliTPCCalibRaw.h:97
 AliTPCCalibRaw.h:98
 AliTPCCalibRaw.h:99
 AliTPCCalibRaw.h:100
 AliTPCCalibRaw.h:101
 AliTPCCalibRaw.h:102
 AliTPCCalibRaw.h:103
 AliTPCCalibRaw.h:104
 AliTPCCalibRaw.h:105
 AliTPCCalibRaw.h:106
 AliTPCCalibRaw.h:107
 AliTPCCalibRaw.h:108
 AliTPCCalibRaw.h:109
 AliTPCCalibRaw.h:110
 AliTPCCalibRaw.h:111
 AliTPCCalibRaw.h:112
 AliTPCCalibRaw.h:113
 AliTPCCalibRaw.h:114
 AliTPCCalibRaw.h:115
 AliTPCCalibRaw.h:116
 AliTPCCalibRaw.h:117
 AliTPCCalibRaw.h:118
 AliTPCCalibRaw.h:119
 AliTPCCalibRaw.h:120
 AliTPCCalibRaw.h:121
 AliTPCCalibRaw.h:122
 AliTPCCalibRaw.h:123
 AliTPCCalibRaw.h:124
 AliTPCCalibRaw.h:125
 AliTPCCalibRaw.h:126
 AliTPCCalibRaw.h:127
 AliTPCCalibRaw.h:128
 AliTPCCalibRaw.h:129
 AliTPCCalibRaw.h:130
 AliTPCCalibRaw.h:131
 AliTPCCalibRaw.h:132
 AliTPCCalibRaw.h:133
 AliTPCCalibRaw.h:134
 AliTPCCalibRaw.h:135
 AliTPCCalibRaw.h:136
 AliTPCCalibRaw.h:137
 AliTPCCalibRaw.h:138
 AliTPCCalibRaw.h:139
 AliTPCCalibRaw.h:140
 AliTPCCalibRaw.h:141
 AliTPCCalibRaw.h:142
 AliTPCCalibRaw.h:143
 AliTPCCalibRaw.h:144
 AliTPCCalibRaw.h:145
 AliTPCCalibRaw.h:146
 AliTPCCalibRaw.h:147
 AliTPCCalibRaw.h:148
 AliTPCCalibRaw.h:149
 AliTPCCalibRaw.h:150
 AliTPCCalibRaw.h:151
 AliTPCCalibRaw.h:152
 AliTPCCalibRaw.h:153
 AliTPCCalibRaw.h:154
 AliTPCCalibRaw.h:155
 AliTPCCalibRaw.h:156
 AliTPCCalibRaw.h:157
 AliTPCCalibRaw.h:158
 AliTPCCalibRaw.h:159
 AliTPCCalibRaw.h:160
 AliTPCCalibRaw.h:161
 AliTPCCalibRaw.h:162
 AliTPCCalibRaw.h:163
 AliTPCCalibRaw.h:164
 AliTPCCalibRaw.h:165
 AliTPCCalibRaw.h:166
 AliTPCCalibRaw.h:167
 AliTPCCalibRaw.h:168