class TCanvas;
class TObjArray;
-class TAxis;
class AliTRDclusterResolution : public AliTRDrecoTask
{
public:
enum EAxisBinning { // bins in z and x direction
- kNTB = 24
- ,kND = 25
- ,kN = kND*kNTB
+ kND = 1
};
enum EResultContainer { // results container type
- kCenter = 0 // cluster2center pad calibration
- ,kQRes = 1 // resolution on charge dependence
+ kYSys = 0 // cluster2center pad calibration
+ ,kYRes = 1 // resolution on charge dependence
,kSigm = 2 // sigma cluster as func of x and z
,kMean = 3 // shift cluster as func of x and z
- ,kNtasks = 4 // total number os sub tasks
+ ,kNtasks = 4 // total number of subtasks
};
- enum ECheckBits { // force setting the ExB
- kSaveAs = BIT(22)
- ,kExB = BIT(23)
+ enum ECalibrationParam { // calibration parameters to be used from OCDB
+ kVdrift = 0
+ ,kT0 = 1
+ ,kGain = 2
+ };
+ enum ECheckBits {
+ kSaveAs = BIT(21) // save intermediary results
+ ,kCalibrated = BIT(22) // load calibration
+ ,kGlobal = BIT(23) // load global position
};
AliTRDclusterResolution();
- AliTRDclusterResolution(const char *name, const char *title="Cluster error monitor");
+ AliTRDclusterResolution(const char *name);
virtual ~AliTRDclusterResolution();
- void ConnectInputData(Option_t *);
void UserCreateOutputObjects();
void UserExec(Option_t *);
Int_t GetDetector() const { return fDet; }
+ void GetPad(Int_t &c, Int_t &r) const { c=fCol, r=fRow; return;}
+ inline void GetDiffCoeff(Float_t &dt, Float_t &dl) const;
inline Float_t GetExB() const;
inline Float_t GetVdrift() const;
+ inline Float_t GetT0() const;
+ inline Float_t GetGain() const;
+ Float_t GetDyRange() const {return fDyRange;}
Bool_t GetRefFigure(Int_t ifig);
- Bool_t HasProcess(EResultContainer bit) const {return TESTBIT(fStatus, bit);}
- Bool_t HasExB() const { return TestBit(kExB);}
+ Bool_t HasProcess(EResultContainer bit) const {return TESTBIT(fSubTaskMap, bit);}
+ Bool_t IsCalibrated() const { return TestBit(kCalibrated);}
+ Bool_t HasGlobalPosition() const { return TestBit(kGlobal);}
+ Bool_t IsUsingCalibParam(ECalibrationParam par) const {return TESTBIT(fUseCalib, par);}
TObjArray* Histos();
TObjArray* Results() const {return fResults;};
Bool_t IsVisual() const {return Bool_t(fCanvas);}
Bool_t IsSaveAs() const {return TestBit(kSaveAs);}
+ Bool_t LoadCalibration();
+ Bool_t LoadGlobalChamberPosition();
Bool_t PostProcess();
- Bool_t SetExB(Int_t det=-1, Int_t c = 70, Int_t r = 7);
+ void SetCalibrationRegion(Int_t det, Int_t col=-1, Int_t row=-1);
void SetVisual();
- void SetProcess(EResultContainer bit, Bool_t v = kTRUE) {v ? SETBIT(fStatus, bit) : CLRBIT(fStatus, bit);}
+ void SetDyRange(Float_t dy) {if(dy>0) fDyRange = dy;}
+ void SetProcess(EResultContainer bit, Bool_t v = kTRUE) {v ? SETBIT(fSubTaskMap, bit) : CLRBIT(fSubTaskMap, bit);}
void SetSaveAs(Bool_t v = kTRUE) {SetBit(kSaveAs, v);}
- inline void ResetProcess();
+ void SetUseCalibParam(ECalibrationParam par, Bool_t v = kTRUE) {v ? SETBIT(fUseCalib, par) : CLRBIT(fUseCalib, par);}
+ inline void ResetProcesses();
protected:
void ProcessCharge();
- void ProcessCenterPad();
+ Bool_t ProcessNormalTracks();
void ProcessSigma();
void ProcessMean();
TCanvas *fCanvas; //! visualization canvas
TObjArray *fInfo; //! list of cluster info
- TObjArray *fResults;// list of result graphs/histos
- TAxis *fAt; //! binning in the x(radial) direction (time)
- UChar_t fStatus; // steer parameter of the task
+ TObjArray *fResults;// list of result graphs/histos/trees
+ UChar_t fSubTaskMap; // steer map for subtasks
+ UChar_t fUseCalib; // steer map for calibration params
Short_t fDet; // detector (-1 for all)
+ Char_t fCol; // pad column (-1 for all)
+ Char_t fRow; // pad row (-1 for all)
Float_t fExB; // tg of the Lorentz angle
+ Float_t fDt; // diffusion coeff. transversal
+ Float_t fDl; // diffusion coeff. longitudinal
Float_t fVdrift; // mean drift velocity
+ Float_t fT0; // time 0
+ Float_t fGain; // gain
+ Float_t fXch; // anode wire position for chamber
+ Float_t fZch; // Z position for calibration element
+ Float_t fH; // tg of tilting angle
static const Float_t fgkTimeBinLength;// time bin length (invers of sampling frequency)
// working named variables
- UChar_t fLy; //! TRD plane
- Float_t fX; //! local drift length
- Float_t fY; //! local rphi offset
- Float_t fZ; //! local anode wire offset
- Float_t fR[4]; //! mean/sgm resolution
- Float_t fP[4]; //! mean/sgm pulls
+ Float_t fDyRange; // min/max dy
+ UChar_t fLy; // TRD plane
+ Float_t fT; // calibrated time
+ Float_t fX; // local drift length
+ Float_t fY; // local rphi offset
+ Float_t fZ; // local anode wire offset
+ Float_t fR[4]; // mean/sgm resolution
+ Float_t fP[4]; // mean/sgm pulls
- ClassDef(AliTRDclusterResolution, 3) // cluster resolution
+ ClassDef(AliTRDclusterResolution, 6) // cluster resolution
};
+//___________________________________________________
+inline void AliTRDclusterResolution::GetDiffCoeff(Float_t &dt, Float_t &dl) const
+{
+ if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetDiffCoeff() : Instance not calibrated.\n");
+ dt=fDt; dl=fDl;
+ return;
+}
+
+
//___________________________________________________
inline Float_t AliTRDclusterResolution::GetExB() const
{
- if(!HasExB()){
- printf("WARNING :: ExB was not set. Use B=0.\n");
- }
+ if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetExB() : Instance not calibrated.\n");
return fExB;
}
//___________________________________________________
inline Float_t AliTRDclusterResolution::GetVdrift() const
{
- if(!HasExB()){
- printf("WARNING :: ExB was not set. Use B=0.\n");
- }
+ if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetVdrift() : Instance not calibrated.\n");
return fVdrift;
}
//___________________________________________________
-inline void AliTRDclusterResolution::ResetProcess()
+inline Float_t AliTRDclusterResolution::GetT0() const
+{
+ if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetT0() : Instance not calibrated.\n");
+ return fT0;
+}
+
+//___________________________________________________
+inline Float_t AliTRDclusterResolution::GetGain() const
+{
+ if(!IsCalibrated()) printf(" - W - AliTRDclusterResolution::GetGain() : Instance not calibrated.\n");
+ return fGain;
+}
+
+//___________________________________________________
+inline void AliTRDclusterResolution::ResetProcesses()
{
- CLRBIT(fStatus, kQRes);
- CLRBIT(fStatus, kCenter);
- CLRBIT(fStatus, kSigm);
- CLRBIT(fStatus, kMean);
+ CLRBIT(fSubTaskMap, kYRes);
+ CLRBIT(fSubTaskMap, kYSys);
+ CLRBIT(fSubTaskMap, kSigm);
+ CLRBIT(fSubTaskMap, kMean);
}
#endif