X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONTriggerLut.cxx;h=f87c637a3d7b0cc9dc6bfe520d51baa8457c271f;hb=9de8c7230b814b13f1cf4785a74024a359a6c816;hp=9e8dd59b82fd62b59fcc54ad043c7decb2ecf829;hpb=d1525c79192542217af4ed0e39d27c7329d9b1d9;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONTriggerLut.cxx b/MUON/AliMUONTriggerLut.cxx index 9e8dd59b82f..f87c637a3d7 100644 --- a/MUON/AliMUONTriggerLut.cxx +++ b/MUON/AliMUONTriggerLut.cxx @@ -15,35 +15,59 @@ /* $Id$ */ -// ----------------------------------- -// Class AliMUONTriggerLut -// ----------------------------------- -// Local Trigger Look Up Table - reading interface -// LUT data is stored into TH3S histograms and readout -// from the Local Trigger algorithm. +//----------------------------------------------------------------------------- +/// \class AliMUONTriggerLut +/// +/// Local Trigger Look Up Table +/// reading interface LUT data is stored into TH3S histograms and readout +/// from the Local Trigger algorithm +/// +/// Histograms structure is : +/// X 234 bins, 1 to 235 = local board number +/// Y 31 bins, 0 to 31 = x strip +/// Z 31 bins, 0 to 31 = x deviation +/// content = Short_t = y strip mask +/// +/// overflow bin is used ! +/// +/// \author Philippe Crochet +//----------------------------------------------------------------------------- #include "AliMUONTriggerLut.h" #include "AliLog.h" -#include "TFile.h" -#include "TH3.h" +#include +#include +#include +#include +/// \cond CLASSIMP ClassImp(AliMUONTriggerLut) +/// \endcond //---------------------------------------------------------------------- AliMUONTriggerLut::AliMUONTriggerLut() - : TNamed() + : TNamed(), + fLptPlus(0), + fLptMinu(0), + fLptUnde(0), + fHptPlus(0), + fHptMinu(0), + fHptUnde(0), + fAptPlus(0), + fAptMinu(0), + fAptUnde(0), + fMap(0x0) { -// constructor - fLptPlus = fLptMinu = fLptUnde = 0; - fHptPlus = fHptMinu = fHptUnde = 0; - fAptPlus = fAptMinu = fAptUnde = 0; +/// ctor } + //---------------------------------------------------------------------- AliMUONTriggerLut::~AliMUONTriggerLut() { - // destructor +/// Destructor + delete fLptPlus; delete fLptMinu; delete fLptUnde; @@ -53,34 +77,82 @@ AliMUONTriggerLut::~AliMUONTriggerLut() delete fAptPlus; delete fAptMinu; delete fAptUnde; + delete fMap; } //---------------------------------------------------------------------- -AliMUONTriggerLut::AliMUONTriggerLut (const AliMUONTriggerLut& theMUONTriggerLut) - : TNamed(theMUONTriggerLut) +Int_t +AliMUONTriggerLut::Compare(TH3* h1, TH3* h2) const { -// Protected copy constructor +/// Return 0 if both histograms are strictly equal (at the bin-by-bin level) + + 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; + } + } + } - AliFatal("Not implemented."); + AliDebug(1,"same"); + + return 1; } //---------------------------------------------------------------------- -AliMUONTriggerLut & -AliMUONTriggerLut::operator=(const AliMUONTriggerLut& rhs) +Int_t +AliMUONTriggerLut::Compare(const TObject* object) const { -// Protected assignement operator +/// Return 0 if the two luts are strictly equal - if (this == &rhs) return *this; + const AliMUONTriggerLut* lut = static_cast(object); + + Int_t rvLpt(0); + + rvLpt += Compare(fLptPlus,lut->fLptPlus); + rvLpt += Compare(fLptMinu,lut->fLptMinu); + rvLpt += Compare(fLptUnde,lut->fLptUnde); - AliFatal( "Not implemented."); - - return *this; + 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) +//---------------------------------------------------------------------- +void AliMUONTriggerLut::ReadFromFile(const char* filename) { -// return output of LuT for corresponding TH3S +/// Return output of LuT for corresponding TH3S + TFile f(filename); if ( f.IsZombie() ) @@ -88,16 +160,18 @@ AliMUONTriggerLut::ReadFromFile(const char* filename) AliFatal(Form("Could not open file %s",filename)); } - fLptPlus = (TH3*)(f.Get("LptPlus")->Clone()); - fLptMinu = (TH3*)(f.Get("LptMinu")->Clone()); - fLptUnde = (TH3*)(f.Get("LptUnde")->Clone()); - fHptPlus = (TH3*)(f.Get("HptPlus")->Clone()); - fHptMinu = (TH3*)(f.Get("HptMinu")->Clone()); - fHptUnde = (TH3*)(f.Get("HptUnde")->Clone()); - fAptPlus = (TH3*)(f.Get("AptPlus")->Clone()); - fAptMinu = (TH3*)(f.Get("AptMinu")->Clone()); - fAptUnde = (TH3*)(f.Get("AptUnde")->Clone()); - + 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")); + // insure we "detach" those histograms from file f fLptPlus->SetDirectory(0); fLptMinu->SetDirectory(0); @@ -108,18 +182,85 @@ AliMUONTriggerLut::ReadFromFile(const char* filename) fAptPlus->SetDirectory(0); fAptMinu->SetDirectory(0); fAptUnde->SetDirectory(0); + + RegisterHistos(); +} + +//---------------------------------------------------------------------- +void +AliMUONTriggerLut::RegisterHistos() +{ +/// Add histos to our internal map + + Add(fLptPlus); + Add(fLptMinu); + Add(fLptUnde); + + Add(fHptPlus); + Add(fHptMinu); + Add(fHptUnde); + + Add(fAptPlus); + Add(fAptMinu); + Add(fAptUnde); +} + +//---------------------------------------------------------------------- +void +AliMUONTriggerLut::Add(TH3* h) +{ + /// Update internal map + 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) +{ + /// Set the content of one bin of one histogram + + if (!fMap) + { + //..........................................circuit/stripX/deviation + 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(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], Int_t lutApt[2]) + Int_t ystrip, Int_t lutLpt[2], + Int_t lutHpt[2]) const { - // return output of LuT for corresponding TH3S +/// Return output of LuT for corresponding TH3S if ( !fLptPlus ) { - ReadFromFile("$(ALICE_ROOT)/MUON/data/MUONTriggerLut.root"); + AliError("LUT not initialized"); +// ReadFromFile("$(ALICE_ROOT)/MUON/data/MUONTriggerLut.root"); } Int_t bin; @@ -151,7 +292,7 @@ void AliMUONTriggerLut::GetLutOutput(Int_t circuit, Int_t xstrip, Int_t idev, bin = fHptUnde->GetBin(circuit,xstrip,idev); binc = (Short_t)fHptUnde->GetBinContent(bin); if ((binc & mask)!=0) lutHpt[0]=lutHpt[1]=1; - +/* // All pts............................................. bin = fAptPlus->GetBin(circuit,xstrip,idev); binc = (Short_t)fAptPlus->GetBinContent(bin); @@ -164,21 +305,15 @@ void AliMUONTriggerLut::GetLutOutput(Int_t circuit, Int_t xstrip, Int_t idev, bin = fAptUnde->GetBin(circuit,xstrip,idev); binc = (Short_t)fAptUnde->GetBinContent(bin); if ((binc & mask)!=0) lutApt[0]=lutApt[1]=1; - +*/ } //---------------------------------------------------------------------- -Int_t AliMUONTriggerLut::GetMask(Int_t ystrip) +Int_t AliMUONTriggerLut::GetMask(Int_t ystrip) const { - // returns the mask corresponding to ystrip - Int_t tabMask[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; - Int_t mask=0; - tabMask[ystrip]=1; - for (Int_t i=0; i<16; i++) - { - mask += tabMask[i]<