12 #ifndef ROOT_TEveCaloData
13 #define ROOT_TEveCaloData
20 class TGLSelectRecord;
26 class TEveCaloData:
public TEveElement,
35 Color_t fTransparency;
37 SliceInfo_t(): fName(
""), fThreshold(0), fColor(kRed), fTransparency(0) {}
39 virtual ~SliceInfo_t() {}
41 void Setup(
const char* name, Float_t threshold, Color_t col, Char_t transp = 101)
44 fThreshold = threshold;
46 if (transp <= 100) fTransparency = transp;
49 ClassDef(SliceInfo_t, 0);
52 typedef std::vector<SliceInfo_t> vSliceInfo_t;
53 typedef std::vector<SliceInfo_t>::iterator vSliceInfo_i;
66 CellId_t(Int_t t, Int_t s, Float_t f=1.0f) : fTower(t), fSlice(s), fFraction(f) {}
68 bool operator<(
const CellId_t& o)
const
69 {
return (fTower == o.fTower) ? fSlice < o.fSlice : fTower < o.fTower; }
84 CellGeom_t(): fPhiMin(0), fPhiMax(0), fEtaMin(0), fEtaMax(0), fThetaMin(0), fThetaMax(0) {}
85 CellGeom_t(Float_t etaMin, Float_t etaMax, Float_t phiMin, Float_t phiMax) {Configure(etaMin, etaMax, phiMin, phiMax);}
86 virtual ~CellGeom_t() {}
88 void Configure(Float_t etaMin, Float_t etaMax, Float_t phiMin, Float_t phiMax);
90 Float_t EtaMin()
const {
return fEtaMin; }
91 Float_t EtaMax()
const {
return fEtaMax; }
92 Float_t Eta()
const {
return (fEtaMin+fEtaMax)*0.5f; }
93 Float_t EtaDelta()
const {
return fEtaMax-fEtaMin; }
95 Float_t PhiMin()
const {
return fPhiMin; }
96 Float_t PhiMax()
const {
return fPhiMax; }
97 Float_t Phi()
const {
return (fPhiMin+fPhiMax)*0.5f; }
98 Float_t PhiDelta()
const {
return fPhiMax-fPhiMin; }
100 Float_t ThetaMin()
const {
return fThetaMin; }
101 Float_t ThetaMax()
const {
return fThetaMax; }
102 Float_t Theta()
const {
return (fThetaMax+fThetaMin)*0.5f; }
103 Float_t ThetaDelta()
const {
return fThetaMax-fThetaMin; }
105 Bool_t IsUpperRho()
const
107 const Float_t phi = Phi();
108 return ((phi > 0 && phi <= TMath::Pi()) || phi < - TMath::Pi());
111 virtual void Dump()
const;
114 struct CellData_t :
public CellGeom_t
120 CellData_t() : CellGeom_t(), fValue(0) {}
121 virtual ~CellData_t() {}
123 Float_t Value(Bool_t)
const;
124 virtual void Dump()
const;
132 std::vector<Float_t> fSliceData;
133 std::vector<Int_t> fBinData;
135 Float_t* GetSliceVals(Int_t bin);
146 typedef std::vector<CellId_t> vCellId_t;
147 typedef std::vector<CellId_t>::iterator vCellId_i;
149 typedef std::vector<CellGeom_t> vCellGeom_t;
150 typedef std::vector<CellGeom_t>::iterator vCellGeom_i;
151 typedef std::vector<CellGeom_t>::const_iterator vCellGeom_ci;
154 TEveCaloData(
const TEveCaloData&);
155 TEveCaloData& operator=(
const TEveCaloData&);
158 vSliceInfo_t fSliceInfos;
170 vCellId_t fCellsSelected;
171 vCellId_t fCellsHighlighted;
174 TEveCaloData(
const char* n=
"TEveCalData",
const char* t=
"");
175 virtual ~TEveCaloData() {}
177 virtual void UnSelected();
178 virtual void UnHighlighted();
180 virtual TString GetHighlightTooltip();
182 virtual void FillImpliedSelectedSet(Set_t& impSelSet);
184 virtual void GetCellList(Float_t etaMin, Float_t etaMax,
185 Float_t phi, Float_t phiRng,
186 vCellId_t &out)
const = 0;
188 vCellId_t& GetCellsSelected() {
return fCellsSelected; }
189 vCellId_t& GetCellsHighlighted() {
return fCellsHighlighted; }
190 void PrintCellsSelected();
191 void ProcessSelection(vCellId_t& sel_cells, TGLSelectRecord& rec);
193 virtual void Rebin(TAxis *ax, TAxis *ay, vCellId_t &in, Bool_t et, RebinData_t &out)
const = 0;
196 virtual void GetCellData(
const CellId_t &
id, CellData_t& data)
const = 0;
198 virtual void InvalidateUsersCellIdCache();
199 virtual void DataChanged();
200 virtual void CellSelectionChanged();
202 Int_t GetNSlices()
const {
return fSliceInfos.size(); }
203 SliceInfo_t& RefSliceInfo(Int_t s) {
return fSliceInfos[s]; }
204 void SetSliceThreshold(Int_t slice, Float_t threshold);
205 Float_t GetSliceThreshold(Int_t slice)
const;
206 void SetSliceColor(Int_t slice, Color_t col);
207 Color_t GetSliceColor(Int_t slice)
const;
208 void SetSliceTransparency(Int_t slice, Char_t t);
209 Char_t GetSliceTransparency(Int_t slice)
const;
211 virtual void GetEtaLimits(Double_t &min, Double_t &max)
const = 0;
213 virtual void GetPhiLimits(Double_t &min, Double_t &max)
const = 0;
215 virtual Float_t GetMaxVal(Bool_t et)
const {
return et ? fMaxValEt : fMaxValE; }
216 Bool_t Empty()
const {
return fMaxValEt < 1e-5; }
218 virtual TAxis* GetEtaBins()
const {
return fEtaAxis; }
219 virtual void SetEtaBins(TAxis* ax) { fEtaAxis=ax; }
221 virtual TAxis* GetPhiBins()
const {
return fPhiAxis; }
222 virtual void SetPhiBins(TAxis* ax) { fPhiAxis=ax; }
224 virtual Float_t GetEps()
const {
return fEps; }
225 virtual void SetEps(Float_t eps) { fEps=eps; }
227 Bool_t GetWrapTwoPi()
const {
return fWrapTwoPi; }
228 void SetWrapTwoPi(Bool_t w) { fWrapTwoPi=w; }
230 static Float_t EtaToTheta(Float_t eta);
233 ClassDef(TEveCaloData, 0);
239 class TEveCaloDataVec:
public TEveCaloData
243 TEveCaloDataVec(
const TEveCaloDataVec&);
244 TEveCaloDataVec& operator=(
const TEveCaloDataVec&);
247 typedef std::vector<Float_t> vFloat_t;
248 typedef std::vector<Float_t>::iterator vFloat_i;
250 typedef std::vector<vFloat_t> vvFloat_t;
251 typedef std::vector<vFloat_t>::iterator vvFloat_i;
254 vCellGeom_t fGeomVec;
265 TEveCaloDataVec(Int_t nslices);
266 virtual ~TEveCaloDataVec();
269 Int_t AddTower(Float_t etaMin, Float_t etaMax, Float_t phiMin, Float_t phiMax);
270 void FillSlice(Int_t slice, Float_t value);
271 void FillSlice(Int_t slice, Int_t tower, Float_t value);
273 Int_t GetNCells() {
return fGeomVec.size(); }
274 std::vector<Float_t>& GetSliceVals(Int_t slice) {
return fSliceVec[slice]; }
275 std::vector<TEveCaloData::CellGeom_t>& GetCellGeom() {
return fGeomVec; }
277 virtual void GetCellList(Float_t etaMin, Float_t etaMax,
278 Float_t phi, Float_t phiRng,
279 vCellId_t &out)
const;
281 virtual void Rebin(TAxis *ax, TAxis *ay, vCellId_t &in, Bool_t et, RebinData_t &out)
const;
283 virtual void GetCellData(
const TEveCaloData::CellId_t &
id, TEveCaloData::CellData_t& data)
const;
284 virtual void GetEtaLimits(Double_t &min, Double_t &max)
const { min=fEtaMin, max=fEtaMax;}
285 virtual void GetPhiLimits(Double_t &min, Double_t &max)
const { min=fPhiMin; max=fPhiMax;}
288 virtual void DataChanged();
289 void SetAxisFromBins(Double_t epsX=0.001, Double_t epsY=0.001);
291 ClassDef(TEveCaloDataVec, 0);
297 class TEveCaloDataHist:
public TEveCaloData
300 TEveCaloDataHist(
const TEveCaloDataHist&);
301 TEveCaloDataHist& operator=(
const TEveCaloDataHist&);
308 virtual ~TEveCaloDataHist();
310 virtual void GetCellList( Float_t etaMin, Float_t etaMax,
311 Float_t phi, Float_t phiRng, vCellId_t &out)
const;
313 virtual void Rebin(TAxis *ax, TAxis *ay, vCellId_t &in, Bool_t et, RebinData_t &out)
const;
315 virtual void GetCellData(
const TEveCaloData::CellId_t &
id, TEveCaloData::CellData_t& data)
const;
317 virtual void GetEtaLimits(Double_t &min, Double_t &max)
const;
318 virtual void GetPhiLimits(Double_t &min, Double_t &max)
const;
321 virtual void DataChanged();
323 THStack* GetStack() {
return fHStack; }
325 TH2F* GetHist(Int_t slice)
const;
327 Int_t AddHistogram(TH2F* hist);
329 ClassDef(TEveCaloDataHist, 0);