#include "AliEveMUONChamber.h"
#include <EveDet/AliEveMUONData.h>
#include <EveDet/AliEveMUONChamberData.h>
#include <TBuffer3D.h>
#include <TBuffer3DTypes.h>
#include <TVirtualPad.h>
#include <TVirtualViewer3D.h>
#include <TStyle.h>
#include <TMath.h>
ClassImp(AliEveMUONChamber)
AliEveMUONChamber::AliEveMUONChamber(Int_t id, const Text_t* n, const Text_t* t) :
TEveElement(fFrameColor),
TNamed(n,t),
fMUONData(0),
fFrameColor(2),
fRTS(1),
fChamberID(0),
fQuadSet1(n,t),
fQuadSet2(n,t),
fPointSet1(n),
fPointSet2(n),
fThreshold(0),
fMaxVal(4096),
fClusterSize(5),
fHitSize(5),
fColorArray(0)
{
Char_t name[256];
if (id < 10) {
snprintf(name,256,"Chamber %02d (trac)",id);
} else {
snprintf(name,256,"Chamber %02d (trig)",id);
}
SetName(name);
ComputeBBox();
}
AliEveMUONChamber::~AliEveMUONChamber()
{
if(fMUONData) fMUONData->DecRefCount();
}
void AliEveMUONChamber::ComputeBBox()
{
#if ROOT_VERSION_CODE <= ROOT_VERSION(5,11,2)
bbox_init();
#else
BBoxInit();
#endif
fBBox[0] = - 400.0;
fBBox[1] = + 400.0;
fBBox[2] = - 400.0;
fBBox[3] = + 400.0;
fBBox[4] = -1800.0;
fBBox[5] = + 500.0;
Float_t* b1 = fQuadSet1.AssertBBox();
for(Int_t i=0; i<6; ++i) { b1[i] = fBBox[i]; }
Float_t* b2 = fQuadSet2.AssertBBox();
for(Int_t i=0; i<6; ++i) { b2[i] = fBBox[i]; }
Float_t* b3 = fPointSet1.AssertBBox();
for(Int_t i=0; i<6; ++i) { b3[i] = fBBox[i]; }
Float_t* b4 = fPointSet2.AssertBBox();
for(Int_t i=0; i<6; ++i) { b4[i] = fBBox[i]; }
}
void AliEveMUONChamber::Paint(Option_t*)
{
if(fRnrSelf == kFALSE)
return;
TBuffer3D buffer(TBuffer3DTypes::kGeneric);
buffer.fID = this;
buffer.fColor = 2;
buffer.fTransparency = 0;
buffer.fLocalFrame = 0;
buffer.SetSectionsValid(TBuffer3D::kCore);
Int_t reqSections = gPad->GetViewer3D()->AddObject(buffer);
if (reqSections == TBuffer3D::kNone) {
return;
}
printf("AliEveMUONChamber::Paint only GL supported.\n");
return;
}
void AliEveMUONChamber::SetThreshold(Short_t t)
{
fThreshold = TMath::Min(t, (Short_t)(fMaxVal - 1));
ClearColorArray();
IncRTS();
}
void AliEveMUONChamber::SetMaxVal(Int_t mv)
{
fMaxVal = TMath::Max(mv, (Int_t)(fThreshold + 1));
ClearColorArray();
IncRTS();
}
void AliEveMUONChamber::SetClusterSize(Int_t size)
{
fClusterSize = TMath::Max(1, size);
IncRTS();
}
void AliEveMUONChamber::SetHitSize(Int_t size)
{
fHitSize = TMath::Max(1, size);
IncRTS();
}
void AliEveMUONChamber::SetupColor(Int_t val, UChar_t* pixel) const
{
Float_t div = TMath::Max(1, fMaxVal - fThreshold);
Int_t nCol = gStyle->GetNumberOfColors();
Int_t cBin = (Int_t) TMath::Nint(nCol*(val - fThreshold)/div);
TEveUtil::TEveUtil::ColorFromIdx(gStyle->GetColorPalette(TMath::Min(nCol - 1, cBin)), pixel);
}
Int_t AliEveMUONChamber::ColorIndex(Int_t val) const
{
if(val < fThreshold) val = fThreshold;
if(val > fMaxVal) val = fMaxVal;
Float_t div = TMath::Max(1, fMaxVal - fThreshold);
Int_t nCol = gStyle->GetNumberOfColors();
Int_t cBin = (Int_t) TMath::Nint(nCol*(val - fThreshold)/div);
return gStyle->GetColorPalette(TMath::Min(nCol - 1, cBin));
}
void AliEveMUONChamber::SetupColorArray() const
{
if(fColorArray)
return;
fColorArray = new UChar_t [4 * (fMaxVal - fThreshold + 1)];
UChar_t* p = fColorArray;
for(Int_t v=fThreshold; v<=fMaxVal; ++v, p+=4)
SetupColor(v, p);
}
void AliEveMUONChamber::ClearColorArray()
{
if(fColorArray) {
delete [] fColorArray;
fColorArray = 0;
}
}
void AliEveMUONChamber::SetDataSource(AliEveMUONData* data)
{
if (data == fMUONData) return;
if(fMUONData) fMUONData->DecRefCount();
fMUONData = data;
if(fMUONData) fMUONData->IncRefCount();
IncRTS();
}
AliEveMUONChamberData* AliEveMUONChamber::GetChamberData() const
{
return fMUONData ? fMUONData->GetChamberData(fChamberID) : 0;
}
void AliEveMUONChamber::UpdateQuads()
{
fQuadSet1.Reset(TEveQuadSet::kQT_RectangleXY, kTRUE, 32);
fQuadSet2.Reset(TEveQuadSet::kQT_RectangleXY, kTRUE, 32);
fPointSet1.Reset();
fPointSet2.Reset();
AliEveMUONChamberData* data = GetChamberData();
Float_t *buffer;
Float_t x0, y0, z, w, h, clsq;
Int_t charge, cathode, nDigits, nClusters, nHits, oldSize, ic1, ic2;
Double_t clsX, clsY, clsZ;
Float_t hitX, hitY, hitZ;
if (data != 0) {
SetupColorArray();
nDigits = data->GetNDigits();
for (Int_t id = 0; id < nDigits; id++) {
buffer = data->GetDigitBuffer(id);
x0 = buffer[0]-buffer[2];
y0 = buffer[1]-buffer[3];
w = 2*buffer[2];
h = 2*buffer[3];
z = buffer[4];
charge = (Int_t)buffer[5];
cathode = (Int_t)buffer[6];
if (charge <= fThreshold) continue;
if (cathode == 0) {
fQuadSet1.AddQuad(x0, y0, z, w, h);
fQuadSet1.QuadColor(ColorIndex(charge));
}
if (cathode == 1) {
fQuadSet2.AddQuad(x0, y0, z, w, h);
fQuadSet2.QuadColor(ColorIndex(charge));
}
}
nClusters = data->GetNClusters()/2;
oldSize = fPointSet1.GrowFor(nClusters);
ic1 = ic2 = 0;
for (Int_t ic = 0; ic < (nClusters*2); ic++) {
buffer = data->GetClusterBuffer(ic);
clsX = (Double_t)buffer[0];
clsY = (Double_t)buffer[1];
clsZ = (Double_t)buffer[2];
clsq = buffer[3];
cathode = (Int_t)buffer[4];
if (cathode == 0) {
fPointSet1.SetPoint(ic1,clsX,clsY,clsZ);
ic1++;
}
}
nHits = data->GetNHits();
oldSize = fPointSet2.GrowFor(nHits);
for (Int_t ih = 0; ih < nHits; ih++) {
buffer = data->GetHitBuffer(ih);
hitX = buffer[0];
hitY = buffer[1];
hitZ = buffer[2];
fPointSet2.SetPoint(ih,hitX,hitY,hitZ);
}
}
}
void AliEveMUONChamber::SetChamberID(Int_t id)
{
if (id < 0) id = 0;
if (id > 13) id = 13;
fChamberID = id;
IncRTS();
}
AliEveMUONChamber.cxx:100 AliEveMUONChamber.cxx:101 AliEveMUONChamber.cxx:102 AliEveMUONChamber.cxx:103 AliEveMUONChamber.cxx:104 AliEveMUONChamber.cxx:105 AliEveMUONChamber.cxx:106 AliEveMUONChamber.cxx:107 AliEveMUONChamber.cxx:108 AliEveMUONChamber.cxx:109 AliEveMUONChamber.cxx:110 AliEveMUONChamber.cxx:111 AliEveMUONChamber.cxx:112 AliEveMUONChamber.cxx:113 AliEveMUONChamber.cxx:114 AliEveMUONChamber.cxx:115 AliEveMUONChamber.cxx:116 AliEveMUONChamber.cxx:117 AliEveMUONChamber.cxx:118 AliEveMUONChamber.cxx:119 AliEveMUONChamber.cxx:120 AliEveMUONChamber.cxx:121 AliEveMUONChamber.cxx:122 AliEveMUONChamber.cxx:123 AliEveMUONChamber.cxx:124 AliEveMUONChamber.cxx:125 AliEveMUONChamber.cxx:126 AliEveMUONChamber.cxx:127 AliEveMUONChamber.cxx:128 AliEveMUONChamber.cxx:129 AliEveMUONChamber.cxx:130 AliEveMUONChamber.cxx:131 AliEveMUONChamber.cxx:132 AliEveMUONChamber.cxx:133 AliEveMUONChamber.cxx:134 AliEveMUONChamber.cxx:135 AliEveMUONChamber.cxx:136 AliEveMUONChamber.cxx:137 AliEveMUONChamber.cxx:138 AliEveMUONChamber.cxx:139 AliEveMUONChamber.cxx:140 AliEveMUONChamber.cxx:141 AliEveMUONChamber.cxx:142 AliEveMUONChamber.cxx:143 AliEveMUONChamber.cxx:144 AliEveMUONChamber.cxx:145 AliEveMUONChamber.cxx:146 AliEveMUONChamber.cxx:147 AliEveMUONChamber.cxx:148 AliEveMUONChamber.cxx:149 AliEveMUONChamber.cxx:150 AliEveMUONChamber.cxx:151 AliEveMUONChamber.cxx:152 AliEveMUONChamber.cxx:153 AliEveMUONChamber.cxx:154 AliEveMUONChamber.cxx:155 AliEveMUONChamber.cxx:156 AliEveMUONChamber.cxx:157 AliEveMUONChamber.cxx:158 AliEveMUONChamber.cxx:159 AliEveMUONChamber.cxx:160 AliEveMUONChamber.cxx:161 AliEveMUONChamber.cxx:162 AliEveMUONChamber.cxx:163 AliEveMUONChamber.cxx:164 AliEveMUONChamber.cxx:165 AliEveMUONChamber.cxx:166 AliEveMUONChamber.cxx:167 AliEveMUONChamber.cxx:168 AliEveMUONChamber.cxx:169 AliEveMUONChamber.cxx:170 AliEveMUONChamber.cxx:171 AliEveMUONChamber.cxx:172 AliEveMUONChamber.cxx:173 AliEveMUONChamber.cxx:174 AliEveMUONChamber.cxx:175 AliEveMUONChamber.cxx:176 AliEveMUONChamber.cxx:177 AliEveMUONChamber.cxx:178 AliEveMUONChamber.cxx:179 AliEveMUONChamber.cxx:180 AliEveMUONChamber.cxx:181 AliEveMUONChamber.cxx:182 AliEveMUONChamber.cxx:183 AliEveMUONChamber.cxx:184 AliEveMUONChamber.cxx:185 AliEveMUONChamber.cxx:186 AliEveMUONChamber.cxx:187 AliEveMUONChamber.cxx:188 AliEveMUONChamber.cxx:189 AliEveMUONChamber.cxx:190 AliEveMUONChamber.cxx:191 AliEveMUONChamber.cxx:192 AliEveMUONChamber.cxx:193 AliEveMUONChamber.cxx:194 AliEveMUONChamber.cxx:195 AliEveMUONChamber.cxx:196 AliEveMUONChamber.cxx:197 AliEveMUONChamber.cxx:198 AliEveMUONChamber.cxx:199 AliEveMUONChamber.cxx:200 AliEveMUONChamber.cxx:201 AliEveMUONChamber.cxx:202 AliEveMUONChamber.cxx:203 AliEveMUONChamber.cxx:204 AliEveMUONChamber.cxx:205 AliEveMUONChamber.cxx:206 AliEveMUONChamber.cxx:207 AliEveMUONChamber.cxx:208 AliEveMUONChamber.cxx:209 AliEveMUONChamber.cxx:210 AliEveMUONChamber.cxx:211 AliEveMUONChamber.cxx:212 AliEveMUONChamber.cxx:213 AliEveMUONChamber.cxx:214 AliEveMUONChamber.cxx:215 AliEveMUONChamber.cxx:216 AliEveMUONChamber.cxx:217 AliEveMUONChamber.cxx:218 AliEveMUONChamber.cxx:219 AliEveMUONChamber.cxx:220 AliEveMUONChamber.cxx:221 AliEveMUONChamber.cxx:222 AliEveMUONChamber.cxx:223 AliEveMUONChamber.cxx:224 AliEveMUONChamber.cxx:225 AliEveMUONChamber.cxx:226 AliEveMUONChamber.cxx:227 AliEveMUONChamber.cxx:228 AliEveMUONChamber.cxx:229 AliEveMUONChamber.cxx:230 AliEveMUONChamber.cxx:231 AliEveMUONChamber.cxx:232 AliEveMUONChamber.cxx:233 AliEveMUONChamber.cxx:234 AliEveMUONChamber.cxx:235 AliEveMUONChamber.cxx:236 AliEveMUONChamber.cxx:237 AliEveMUONChamber.cxx:238 AliEveMUONChamber.cxx:239 AliEveMUONChamber.cxx:240 AliEveMUONChamber.cxx:241 AliEveMUONChamber.cxx:242 AliEveMUONChamber.cxx:243 AliEveMUONChamber.cxx:244 AliEveMUONChamber.cxx:245 AliEveMUONChamber.cxx:246 AliEveMUONChamber.cxx:247 AliEveMUONChamber.cxx:248 AliEveMUONChamber.cxx:249 AliEveMUONChamber.cxx:250 AliEveMUONChamber.cxx:251 AliEveMUONChamber.cxx:252 AliEveMUONChamber.cxx:253 AliEveMUONChamber.cxx:254 AliEveMUONChamber.cxx:255 AliEveMUONChamber.cxx:256 AliEveMUONChamber.cxx:257 AliEveMUONChamber.cxx:258 AliEveMUONChamber.cxx:259 AliEveMUONChamber.cxx:260 AliEveMUONChamber.cxx:261 AliEveMUONChamber.cxx:262 AliEveMUONChamber.cxx:263 AliEveMUONChamber.cxx:264 AliEveMUONChamber.cxx:265 AliEveMUONChamber.cxx:266 AliEveMUONChamber.cxx:267 AliEveMUONChamber.cxx:268 AliEveMUONChamber.cxx:269 AliEveMUONChamber.cxx:270 AliEveMUONChamber.cxx:271 AliEveMUONChamber.cxx:272 AliEveMUONChamber.cxx:273 AliEveMUONChamber.cxx:274 AliEveMUONChamber.cxx:275 AliEveMUONChamber.cxx:276 AliEveMUONChamber.cxx:277 AliEveMUONChamber.cxx:278 AliEveMUONChamber.cxx:279 AliEveMUONChamber.cxx:280 AliEveMUONChamber.cxx:281 AliEveMUONChamber.cxx:282 AliEveMUONChamber.cxx:283 AliEveMUONChamber.cxx:284 AliEveMUONChamber.cxx:285 AliEveMUONChamber.cxx:286 AliEveMUONChamber.cxx:287 AliEveMUONChamber.cxx:288 AliEveMUONChamber.cxx:289 AliEveMUONChamber.cxx:290 AliEveMUONChamber.cxx:291 AliEveMUONChamber.cxx:292 AliEveMUONChamber.cxx:293 AliEveMUONChamber.cxx:294 AliEveMUONChamber.cxx:295 AliEveMUONChamber.cxx:296 AliEveMUONChamber.cxx:297 AliEveMUONChamber.cxx:298 AliEveMUONChamber.cxx:299 AliEveMUONChamber.cxx:300 AliEveMUONChamber.cxx:301 AliEveMUONChamber.cxx:302 AliEveMUONChamber.cxx:303 AliEveMUONChamber.cxx:304 AliEveMUONChamber.cxx:305 AliEveMUONChamber.cxx:306 AliEveMUONChamber.cxx:307 AliEveMUONChamber.cxx:308 AliEveMUONChamber.cxx:309 AliEveMUONChamber.cxx:310 AliEveMUONChamber.cxx:311 AliEveMUONChamber.cxx:312 AliEveMUONChamber.cxx:313 AliEveMUONChamber.cxx:314 AliEveMUONChamber.cxx:315 AliEveMUONChamber.cxx:316 AliEveMUONChamber.cxx:317 AliEveMUONChamber.cxx:318 AliEveMUONChamber.cxx:319 AliEveMUONChamber.cxx:320 AliEveMUONChamber.cxx:321 AliEveMUONChamber.cxx:322 AliEveMUONChamber.cxx:323 AliEveMUONChamber.cxx:324 AliEveMUONChamber.cxx:325 AliEveMUONChamber.cxx:326 AliEveMUONChamber.cxx:327 AliEveMUONChamber.cxx:328 AliEveMUONChamber.cxx:329 AliEveMUONChamber.cxx:330 AliEveMUONChamber.cxx:331 AliEveMUONChamber.cxx:332 AliEveMUONChamber.cxx:333 AliEveMUONChamber.cxx:334 AliEveMUONChamber.cxx:335 AliEveMUONChamber.cxx:336 AliEveMUONChamber.cxx:337 AliEveMUONChamber.cxx:338 AliEveMUONChamber.cxx:339 AliEveMUONChamber.cxx:340 AliEveMUONChamber.cxx:341 AliEveMUONChamber.cxx:342 AliEveMUONChamber.cxx:343 AliEveMUONChamber.cxx:344 AliEveMUONChamber.cxx:345 AliEveMUONChamber.cxx:346 AliEveMUONChamber.cxx:347 AliEveMUONChamber.cxx:348 AliEveMUONChamber.cxx:349 AliEveMUONChamber.cxx:350 AliEveMUONChamber.cxx:351 AliEveMUONChamber.cxx:352 AliEveMUONChamber.cxx:353 AliEveMUONChamber.cxx:354 AliEveMUONChamber.cxx:355 AliEveMUONChamber.cxx:356 AliEveMUONChamber.cxx:357 AliEveMUONChamber.cxx:358 AliEveMUONChamber.cxx:359 AliEveMUONChamber.cxx:360 AliEveMUONChamber.cxx:361 AliEveMUONChamber.cxx:362 AliEveMUONChamber.cxx:363 AliEveMUONChamber.cxx:364 AliEveMUONChamber.cxx:365 AliEveMUONChamber.cxx:366 AliEveMUONChamber.cxx:367 AliEveMUONChamber.cxx:368 AliEveMUONChamber.cxx:369 AliEveMUONChamber.cxx:370 AliEveMUONChamber.cxx:371