#include "AliMUONTriggerLut.h"
#include "AliLog.h"
#include <TFile.h>
#include <TH3.h>
#include <TMap.h>
#include <TObjString.h>
ClassImp(AliMUONTriggerLut)
AliMUONTriggerLut::AliMUONTriggerLut()
: TNamed(),
fLptPlus(0),
fLptMinu(0),
fLptUnde(0),
fHptPlus(0),
fHptMinu(0),
fHptUnde(0),
fAptPlus(0),
fAptMinu(0),
fAptUnde(0),
fMap(0x0)
{
}
AliMUONTriggerLut::~AliMUONTriggerLut()
{
delete fLptPlus;
delete fLptMinu;
delete fLptUnde;
delete fHptPlus;
delete fHptMinu;
delete fHptUnde;
delete fAptPlus;
delete fAptMinu;
delete fAptUnde;
delete fMap;
}
Int_t
AliMUONTriggerLut::Compare(TH3* h1, TH3* h2) const
{
AliDebug(1,Form("h1 %s h2 %s",h1 ? h1->GetName() : "null", h2 ? h2->GetName() : "null"));
if (!h1 || !h2)
{
return 0;
}
Int_t bin;
for ( Int_t ix = 0; ix <= h1->GetNbinsX()+1; ix++ )
for ( Int_t iy = 0; iy <= h1->GetNbinsY()+1; iy++ )
for ( Int_t iz = 0; iz <= h1->GetNbinsZ()+1; iz++ )
{
{
{
bin = h1->GetBin(ix,iy,iz);
Double_t x1 = h1->GetBinContent(bin);
Double_t x2 = h2->GetBinContent(bin);
if ( x1 != x2 ) return 0;
}
}
}
AliDebug(1,"same");
return 1;
}
Int_t
AliMUONTriggerLut::Compare(const TObject* object) const
{
const AliMUONTriggerLut* lut = static_cast<const AliMUONTriggerLut*>(object);
Int_t rvLpt(0);
rvLpt += Compare(fLptPlus,lut->fLptPlus);
rvLpt += Compare(fLptMinu,lut->fLptMinu);
rvLpt += Compare(fLptUnde,lut->fLptUnde);
Int_t rvHpt(0);
rvHpt += Compare(fHptPlus,lut->fHptPlus);
rvHpt += Compare(fHptMinu,lut->fHptMinu);
rvHpt += Compare(fHptUnde,lut->fHptUnde);
Int_t rv(0);
rv += Compare(fAptPlus,lut->fAptPlus);
rv += Compare(fAptMinu,lut->fAptMinu);
rv += Compare(fAptUnde,lut->fAptUnde);
AliDebug(1,Form("Same Lpt %d Hpt %d Apt %d",rvLpt,rvHpt,rv));
if ( rvLpt == 3 && rvHpt == 3 )
{
return 0;
}
return 1;
}
void AliMUONTriggerLut::ReadFromFile(const char* filename)
{
TFile f(filename);
if ( f.IsZombie() )
{
AliFatal(Form("Could not open file %s",filename));
}
AliDebug(1,Form("filename=%s",filename));
fLptPlus = (TH3*)(f.Get("LptPlus"));
fLptMinu = (TH3*)(f.Get("LptMinu"));
fLptUnde = (TH3*)(f.Get("LptUnde"));
fHptPlus = (TH3*)(f.Get("HptPlus"));
fHptMinu = (TH3*)(f.Get("HptMinu"));
fHptUnde = (TH3*)(f.Get("HptUnde"));
fAptPlus = (TH3*)(f.Get("AptPlus"));
fAptMinu = (TH3*)(f.Get("AptMinu"));
fAptUnde = (TH3*)(f.Get("AptUnde"));
fLptPlus->SetDirectory(0);
fLptMinu->SetDirectory(0);
fLptUnde->SetDirectory(0);
fHptPlus->SetDirectory(0);
fHptMinu->SetDirectory(0);
fHptUnde->SetDirectory(0);
fAptPlus->SetDirectory(0);
fAptMinu->SetDirectory(0);
fAptUnde->SetDirectory(0);
RegisterHistos();
}
void
AliMUONTriggerLut::RegisterHistos()
{
Add(fLptPlus);
Add(fLptMinu);
Add(fLptUnde);
Add(fHptPlus);
Add(fHptMinu);
Add(fHptUnde);
Add(fAptPlus);
Add(fAptMinu);
Add(fAptUnde);
}
void
AliMUONTriggerLut::Add(TH3* h)
{
if (!fMap)
{
fMap = new TMap;
fMap->SetOwner(kTRUE);
}
if (h) fMap->Add(new TObjString(h->GetName()),h);
}
void
AliMUONTriggerLut::SetContent(const char* hname, Int_t icirc, UChar_t istripX,
UChar_t idev, Short_t value)
{
if (!fMap)
{
fLptPlus = new TH3S("LptPlus","LptPlus",234,0,234,31,0,31,31,0,31);
fLptMinu = new TH3S("LptMinu","LptMinu",234,0,234,31,0,31,31,0,31);
fLptUnde = new TH3S("LptUnde","LptUnde",234,0,234,31,0,31,31,0,31);
fHptPlus = new TH3S("HptPlus","HptPlus",234,0,234,31,0,31,31,0,31);
fHptMinu = new TH3S("HptMinu","HptMinu",234,0,234,31,0,31,31,0,31);
fHptUnde = new TH3S("HptUnde","HptUnde",234,0,234,31,0,31,31,0,31);
fAptPlus = new TH3S("AptPlus","AptPlus",234,0,234,31,0,31,31,0,31);
fAptMinu = new TH3S("AptMinu","AptMinu",234,0,234,31,0,31,31,0,31);
fAptUnde = new TH3S("AptUnde","AptUnde",234,0,234,31,0,31,31,0,31);
RegisterHistos();
}
TH3* h = static_cast<TH3*>(fMap->GetValue(hname));
Int_t bin = h->GetBin(icirc,istripX,idev);
h->SetBinContent(bin,value);
}
void AliMUONTriggerLut::GetLutOutput(Int_t circuit, Int_t xstrip, Int_t idev,
Int_t ystrip, Int_t lutLpt[2],
Int_t lutHpt[2]) const
{
if ( !fLptPlus )
{
AliError("LUT not initialized");
}
Int_t bin;
Short_t binc;
Int_t mask = GetMask(ystrip);
bin = fLptPlus->GetBin(circuit,xstrip,idev);
binc = (Short_t)fLptPlus->GetBinContent(bin);
if ((binc & mask)!=0) lutLpt[1]=1;
bin = fLptMinu->GetBin(circuit,xstrip,idev);
binc = (Short_t)fLptMinu->GetBinContent(bin);
if ((binc & mask)!=0) lutLpt[0]=1;
bin = fLptUnde->GetBin(circuit,xstrip,idev);
binc = (Short_t)fLptUnde->GetBinContent(bin);
if ((binc & mask)!=0) lutLpt[0]=lutLpt[1]=1;
bin = fHptPlus->GetBin(circuit,xstrip,idev);
binc = (Short_t)fHptPlus->GetBinContent(bin);
if ((binc & mask)!=0) lutHpt[1]=1;
bin = fHptMinu->GetBin(circuit,xstrip,idev);
binc = (Short_t)fHptMinu->GetBinContent(bin);
if ((binc & mask)!=0) lutHpt[0]=1;
bin = fHptUnde->GetBin(circuit,xstrip,idev);
binc = (Short_t)fHptUnde->GetBinContent(bin);
if ((binc & mask)!=0) lutHpt[0]=lutHpt[1]=1;
}
Int_t AliMUONTriggerLut::GetMask(Int_t ystrip) const
{
return (Int_t)(1<<ystrip);
}
void AliMUONTriggerLut::SetLutCode(const UChar_t lutCode)
{
if (!fMap) {
AliWarning("Nothing registered in the map ?... ");
return;
}
TH3* h = static_cast<TH3*>(fMap->GetValue("LptPlus"));
h->SetTitle(Form("LptPlus 0x%02x",lutCode));
}
void AliMUONTriggerLut::PrintLutCode()
{
TString lutCode = fLptPlus->GetTitle();
lutCode.Remove(0,8);
if (lutCode.Length() == 0) {
AliInfo("No code stored (older version).");
} else {
AliInfo(lutCode.Data());
AliInfo("---------------------------------");
AliInfo("1st/2nd cut code pt cut [GeV/c]");
AliInfo(" ");
AliInfo(" 0 0.5 (a.k.a. Apt)");
AliInfo(" 1 1.0 (a.k.a. Lpt)");
AliInfo(" 2 1.7 (a.k.a. Hpt)");
AliInfo(" 3 4.2 (a.k.a. infinity)");
AliInfo(" 4 free");
AliInfo(" .");
AliInfo(" .");
AliInfo(" .");
AliInfo("15 default (for backward compatibility)");
AliInfo("---------------------------------------");
}
}
AliMUONTriggerLut.cxx:100 AliMUONTriggerLut.cxx:101 AliMUONTriggerLut.cxx:102 AliMUONTriggerLut.cxx:103 AliMUONTriggerLut.cxx:104 AliMUONTriggerLut.cxx:105 AliMUONTriggerLut.cxx:106 AliMUONTriggerLut.cxx:107 AliMUONTriggerLut.cxx:108 AliMUONTriggerLut.cxx:109 AliMUONTriggerLut.cxx:110 AliMUONTriggerLut.cxx:111 AliMUONTriggerLut.cxx:112 AliMUONTriggerLut.cxx:113 AliMUONTriggerLut.cxx:114 AliMUONTriggerLut.cxx:115 AliMUONTriggerLut.cxx:116 AliMUONTriggerLut.cxx:117 AliMUONTriggerLut.cxx:118 AliMUONTriggerLut.cxx:119 AliMUONTriggerLut.cxx:120 AliMUONTriggerLut.cxx:121 AliMUONTriggerLut.cxx:122 AliMUONTriggerLut.cxx:123 AliMUONTriggerLut.cxx:124 AliMUONTriggerLut.cxx:125 AliMUONTriggerLut.cxx:126 AliMUONTriggerLut.cxx:127 AliMUONTriggerLut.cxx:128 AliMUONTriggerLut.cxx:129 AliMUONTriggerLut.cxx:130 AliMUONTriggerLut.cxx:131 AliMUONTriggerLut.cxx:132 AliMUONTriggerLut.cxx:133 AliMUONTriggerLut.cxx:134 AliMUONTriggerLut.cxx:135 AliMUONTriggerLut.cxx:136 AliMUONTriggerLut.cxx:137 AliMUONTriggerLut.cxx:138 AliMUONTriggerLut.cxx:139 AliMUONTriggerLut.cxx:140 AliMUONTriggerLut.cxx:141 AliMUONTriggerLut.cxx:142 AliMUONTriggerLut.cxx:143 AliMUONTriggerLut.cxx:144 AliMUONTriggerLut.cxx:145 AliMUONTriggerLut.cxx:146 AliMUONTriggerLut.cxx:147 AliMUONTriggerLut.cxx:148 AliMUONTriggerLut.cxx:149 AliMUONTriggerLut.cxx:150 AliMUONTriggerLut.cxx:151 AliMUONTriggerLut.cxx:152 AliMUONTriggerLut.cxx:153 AliMUONTriggerLut.cxx:154 AliMUONTriggerLut.cxx:155 AliMUONTriggerLut.cxx:156 AliMUONTriggerLut.cxx:157 AliMUONTriggerLut.cxx:158 AliMUONTriggerLut.cxx:159 AliMUONTriggerLut.cxx:160 AliMUONTriggerLut.cxx:161 AliMUONTriggerLut.cxx:162 AliMUONTriggerLut.cxx:163 AliMUONTriggerLut.cxx:164 AliMUONTriggerLut.cxx:165 AliMUONTriggerLut.cxx:166 AliMUONTriggerLut.cxx:167 AliMUONTriggerLut.cxx:168 AliMUONTriggerLut.cxx:169 AliMUONTriggerLut.cxx:170 AliMUONTriggerLut.cxx:171 AliMUONTriggerLut.cxx:172 AliMUONTriggerLut.cxx:173 AliMUONTriggerLut.cxx:174 AliMUONTriggerLut.cxx:175 AliMUONTriggerLut.cxx:176 AliMUONTriggerLut.cxx:177 AliMUONTriggerLut.cxx:178 AliMUONTriggerLut.cxx:179 AliMUONTriggerLut.cxx:180 AliMUONTriggerLut.cxx:181 AliMUONTriggerLut.cxx:182 AliMUONTriggerLut.cxx:183 AliMUONTriggerLut.cxx:184 AliMUONTriggerLut.cxx:185 AliMUONTriggerLut.cxx:186 AliMUONTriggerLut.cxx:187 AliMUONTriggerLut.cxx:188 AliMUONTriggerLut.cxx:189 AliMUONTriggerLut.cxx:190 AliMUONTriggerLut.cxx:191 AliMUONTriggerLut.cxx:192 AliMUONTriggerLut.cxx:193 AliMUONTriggerLut.cxx:194 AliMUONTriggerLut.cxx:195 AliMUONTriggerLut.cxx:196 AliMUONTriggerLut.cxx:197 AliMUONTriggerLut.cxx:198 AliMUONTriggerLut.cxx:199 AliMUONTriggerLut.cxx:200 AliMUONTriggerLut.cxx:201 AliMUONTriggerLut.cxx:202 AliMUONTriggerLut.cxx:203 AliMUONTriggerLut.cxx:204 AliMUONTriggerLut.cxx:205 AliMUONTriggerLut.cxx:206 AliMUONTriggerLut.cxx:207 AliMUONTriggerLut.cxx:208 AliMUONTriggerLut.cxx:209 AliMUONTriggerLut.cxx:210 AliMUONTriggerLut.cxx:211 AliMUONTriggerLut.cxx:212 AliMUONTriggerLut.cxx:213 AliMUONTriggerLut.cxx:214 AliMUONTriggerLut.cxx:215 AliMUONTriggerLut.cxx:216 AliMUONTriggerLut.cxx:217 AliMUONTriggerLut.cxx:218 AliMUONTriggerLut.cxx:219 AliMUONTriggerLut.cxx:220 AliMUONTriggerLut.cxx:221 AliMUONTriggerLut.cxx:222 AliMUONTriggerLut.cxx:223 AliMUONTriggerLut.cxx:224 AliMUONTriggerLut.cxx:225 AliMUONTriggerLut.cxx:226 AliMUONTriggerLut.cxx:227 AliMUONTriggerLut.cxx:228 AliMUONTriggerLut.cxx:229 AliMUONTriggerLut.cxx:230 AliMUONTriggerLut.cxx:231 AliMUONTriggerLut.cxx:232 AliMUONTriggerLut.cxx:233 AliMUONTriggerLut.cxx:234 AliMUONTriggerLut.cxx:235 AliMUONTriggerLut.cxx:236 AliMUONTriggerLut.cxx:237 AliMUONTriggerLut.cxx:238 AliMUONTriggerLut.cxx:239 AliMUONTriggerLut.cxx:240 AliMUONTriggerLut.cxx:241 AliMUONTriggerLut.cxx:242 AliMUONTriggerLut.cxx:243 AliMUONTriggerLut.cxx:244 AliMUONTriggerLut.cxx:245 AliMUONTriggerLut.cxx:246 AliMUONTriggerLut.cxx:247 AliMUONTriggerLut.cxx:248 AliMUONTriggerLut.cxx:249 AliMUONTriggerLut.cxx:250 AliMUONTriggerLut.cxx:251 AliMUONTriggerLut.cxx:252 AliMUONTriggerLut.cxx:253 AliMUONTriggerLut.cxx:254 AliMUONTriggerLut.cxx:255 AliMUONTriggerLut.cxx:256 AliMUONTriggerLut.cxx:257 AliMUONTriggerLut.cxx:258 AliMUONTriggerLut.cxx:259 AliMUONTriggerLut.cxx:260 AliMUONTriggerLut.cxx:261 AliMUONTriggerLut.cxx:262 AliMUONTriggerLut.cxx:263 AliMUONTriggerLut.cxx:264 AliMUONTriggerLut.cxx:265 AliMUONTriggerLut.cxx:266 AliMUONTriggerLut.cxx:267 AliMUONTriggerLut.cxx:268 AliMUONTriggerLut.cxx:269 AliMUONTriggerLut.cxx:270 AliMUONTriggerLut.cxx:271 AliMUONTriggerLut.cxx:272 AliMUONTriggerLut.cxx:273 AliMUONTriggerLut.cxx:274 AliMUONTriggerLut.cxx:275 AliMUONTriggerLut.cxx:276 AliMUONTriggerLut.cxx:277 AliMUONTriggerLut.cxx:278 AliMUONTriggerLut.cxx:279 AliMUONTriggerLut.cxx:280 AliMUONTriggerLut.cxx:281 AliMUONTriggerLut.cxx:282 AliMUONTriggerLut.cxx:283 AliMUONTriggerLut.cxx:284 AliMUONTriggerLut.cxx:285 AliMUONTriggerLut.cxx:286 AliMUONTriggerLut.cxx:287 AliMUONTriggerLut.cxx:288 AliMUONTriggerLut.cxx:289 AliMUONTriggerLut.cxx:290 AliMUONTriggerLut.cxx:291 AliMUONTriggerLut.cxx:292 AliMUONTriggerLut.cxx:293 AliMUONTriggerLut.cxx:294 AliMUONTriggerLut.cxx:295 AliMUONTriggerLut.cxx:296 AliMUONTriggerLut.cxx:297 AliMUONTriggerLut.cxx:298 AliMUONTriggerLut.cxx:299 AliMUONTriggerLut.cxx:300 AliMUONTriggerLut.cxx:301 AliMUONTriggerLut.cxx:302 AliMUONTriggerLut.cxx:303 AliMUONTriggerLut.cxx:304 AliMUONTriggerLut.cxx:305 AliMUONTriggerLut.cxx:306 AliMUONTriggerLut.cxx:307 AliMUONTriggerLut.cxx:308 AliMUONTriggerLut.cxx:309 AliMUONTriggerLut.cxx:310 AliMUONTriggerLut.cxx:311 AliMUONTriggerLut.cxx:312 AliMUONTriggerLut.cxx:313 AliMUONTriggerLut.cxx:314 AliMUONTriggerLut.cxx:315 AliMUONTriggerLut.cxx:316 AliMUONTriggerLut.cxx:317 AliMUONTriggerLut.cxx:318 AliMUONTriggerLut.cxx:319 AliMUONTriggerLut.cxx:320 AliMUONTriggerLut.cxx:321 AliMUONTriggerLut.cxx:322 AliMUONTriggerLut.cxx:323 AliMUONTriggerLut.cxx:324 AliMUONTriggerLut.cxx:325 AliMUONTriggerLut.cxx:326 AliMUONTriggerLut.cxx:327 AliMUONTriggerLut.cxx:328 AliMUONTriggerLut.cxx:329 AliMUONTriggerLut.cxx:330 AliMUONTriggerLut.cxx:331 AliMUONTriggerLut.cxx:332 AliMUONTriggerLut.cxx:333 AliMUONTriggerLut.cxx:334 AliMUONTriggerLut.cxx:335 AliMUONTriggerLut.cxx:336 AliMUONTriggerLut.cxx:337 AliMUONTriggerLut.cxx:338 AliMUONTriggerLut.cxx:339 AliMUONTriggerLut.cxx:340 AliMUONTriggerLut.cxx:341 AliMUONTriggerLut.cxx:342 AliMUONTriggerLut.cxx:343 AliMUONTriggerLut.cxx:344 AliMUONTriggerLut.cxx:345 AliMUONTriggerLut.cxx:346 AliMUONTriggerLut.cxx:347 AliMUONTriggerLut.cxx:348 AliMUONTriggerLut.cxx:349 AliMUONTriggerLut.cxx:350 AliMUONTriggerLut.cxx:351 AliMUONTriggerLut.cxx:352 AliMUONTriggerLut.cxx:353 AliMUONTriggerLut.cxx:354 AliMUONTriggerLut.cxx:355 AliMUONTriggerLut.cxx:356 AliMUONTriggerLut.cxx:357 AliMUONTriggerLut.cxx:358 AliMUONTriggerLut.cxx:359 AliMUONTriggerLut.cxx:360 AliMUONTriggerLut.cxx:361 AliMUONTriggerLut.cxx:362 AliMUONTriggerLut.cxx:363 AliMUONTriggerLut.cxx:364 AliMUONTriggerLut.cxx:365