//_HADES_CLASS_DESCRIPTION
////////////////////////////////////////////////////////////////////////////
//*-- AUTHOR : J. Markert
////////////////////////////////////////////////////////////////////////////
// HMdcWireStat
//
// Container class for lookup parameters of the status of the
// wire (working or dead + noise + efficiency).
// The parameters are stored in TH2F histograms which can be plotted.
// This container is needed by HMdcDigitizer and HMdcTrackFinder
//
// THe Status value is coded in the following way
//
// status of the wire: 1=working,
// -1=not connected,
// -3=no correct offset,
// -7=dead,
// -10=init
//
//
////////////////////////////////////////////////////////////////////////////
#include "hmdcwirestat.h"
#include "hpario.h"
#include "hdetpario.h"
#include "hmessagemgr.h"
#include "hparamlist.h"
#include "hmessagemgr.h"
#include "hmdcdetector.h"
#include "hspectrometer.h"
#include "TStyle.h"
#include "TObjArray.h"
#include "TH1.h"
#include <stdlib.h>
ClassImp(HMdcWireStat)
HMdcWireStat::HMdcWireStat(const char* name,const char* title,
const char* context)
: HParCond(name,title,context)
{
//
strcpy(detName,"Mdc");
Char_t histname[300];
for(Int_t s=0;s<6;s++){
for(Int_t m=0;m<4;m++){
sprintf(histname,"status_s%i_%i",s,m);
statusmap[s][m]=new TH2F(histname,histname,220,0,220,6,0,6);
sprintf(histname,"efficiency_s%i_%i",s,m);
efficiency[s][m]=new TH2F(histname,histname,220,0,220,6,0,6);
sprintf(histname,"mb_s%i_%i",s,m);
mb[s][m]=new TH2F(histname,histname,220,0,220,6,0,6);
sprintf(histname,"tdc_s%i_%i",s,m);
tdc[s][m]=new TH2F(histname,histname,220,0,220,6,0,6);
}
}
unsetDirectory();
clear();
}
HMdcWireStat::~HMdcWireStat()
{
// destructor
for(Int_t s=0;s<6;s++){
for(Int_t m=0;m<4;m++){
delete statusmap[s][m];
delete efficiency[s][m];
delete mb[s][m];
delete tdc[s][m];
}
}
}
void HMdcWireStat::clear()
{
for(Int_t s=0;s<6;s++){
for(Int_t m=0;m<4;m++){
for(Int_t binx=0;binx<220;binx++){
for(Int_t biny=0;biny<6;biny++){
statusmap [s][m]->SetBinContent(binx+1,biny+1,-10);
efficiency[s][m]->SetBinContent(binx+1,biny+1,-10);
mb [s][m] ->SetBinContent(binx+1,biny+1,-10);
tdc[s][m] ->SetBinContent(binx+1,biny+1,-10);
}
}
}
}
status=kFALSE;
resetInputVersions();
changed=kFALSE;
}
void HMdcWireStat::printStats()
{
Int_t working; // 1
Int_t notconnected; // -1
Int_t nooffset; // -3
Int_t dead; // -7
Int_t workingsum=0; // 1
Int_t notconnectedsum=0; // -1
Int_t nooffsetsum=0; // -3
Int_t deadsum=0; // -7
Int_t stat;
for(Int_t s=0;s<6;s++){
for(Int_t m=0;m<4;m++){
working=0;
notconnected=0;
nooffset=0;
dead=0;
for(Int_t biny=0;biny<6;biny++){
for(Int_t binx=0;binx<220;binx++){
stat=(Int_t)statusmap [s][m]->GetBinContent(binx+1,biny+1,-10);
if(stat== 1) working++;
if(stat==-1) notconnected++;
if(stat==-3) nooffset++;
if(stat==-7) dead++;
}
}
workingsum =workingsum+working;
notconnectedsum=notconnectedsum+notconnected;
nooffsetsum =nooffsetsum+nooffset;
deadsum =deadsum+dead;
printf("s %i m %i n" ,s,m);
printf(" working: %i n",working);
printf(" not connected: %i n",notconnected);
printf(" no calibration: %i n",nooffset);
printf(" dead: %i n",dead);
}
}
printf("SUMn");
printf(" working: %i n",workingsum);
printf(" not connected: %i n",notconnectedsum);
printf(" no calibration: %i n",nooffsetsum);
printf(" dead: %i n",deadsum);
}
void HMdcWireStat::printStatsSum()
{
Int_t working; // 1
Int_t notconnected; // -1
Int_t nooffset; // -3
Int_t dead; // -7
Int_t workingsum=0; // 1
Int_t notconnectedsum=0; // -1
Int_t nooffsetsum=0; // -3
Int_t deadsum=0; // -7
Int_t stat;
for(Int_t s=0;s<6;s++){
for(Int_t m=0;m<4;m++){
working=0;
notconnected=0;
nooffset=0;
dead=0;
for(Int_t biny=0;biny<6;biny++){
for(Int_t binx=0;binx<220;binx++){
stat=(Int_t)statusmap [s][m]->GetBinContent(binx+1,biny+1,-10);
if(stat== 1) working++;
if(stat==-1) notconnected++;
if(stat==-3) nooffset++;
if(stat==-7) dead++;
}
}
workingsum =workingsum+working;
notconnectedsum=notconnectedsum+notconnected;
nooffsetsum =nooffsetsum+nooffset;
deadsum =deadsum+dead;
}
}
printf("SUMn");
printf(" working: %i n",workingsum);
printf(" not connected: %i n",notconnectedsum);
printf(" no calibration: %i n",nooffsetsum);
printf(" dead: %i n",deadsum);
}
Int_t HMdcWireStat::getDeadWires()
{
Int_t working; // 1
Int_t notconnected; // -1
Int_t nooffset; // -3
Int_t dead; // -7
Int_t workingsum=0; // 1
Int_t notconnectedsum=0; // -1
Int_t nooffsetsum=0; // -3
Int_t deadsum=0; // -7
Int_t stat;
for(Int_t s=0;s<6;s++){
for(Int_t m=0;m<4;m++){
working=0;
notconnected=0;
nooffset=0;
dead=0;
for(Int_t biny=0;biny<6;biny++){
for(Int_t binx=0;binx<220;binx++){
stat=(Int_t)statusmap [s][m]->GetBinContent(binx+1,biny+1,-10);
if(stat== 1) working++;
if(stat==-1) notconnected++;
if(stat==-3) nooffset++;
if(stat==-7) dead++;
}
}
workingsum =workingsum+working;
notconnectedsum=notconnectedsum+notconnected;
nooffsetsum =nooffsetsum+nooffset;
deadsum =deadsum+dead;
}
}
return nooffsetsum;
}
Int_t HMdcWireStat::getDeadWires(Int_t sec,Int_t mod)
{
Int_t working=0;
Int_t notconnected=0;
Int_t nooffset=0;
Int_t dead=0;
Int_t s=sec;
Int_t m=mod;
Int_t stat;
for(Int_t biny=0;biny<6;biny++){
for(Int_t binx=0;binx<220;binx++){
stat=(Int_t)statusmap [s][m]->GetBinContent(binx+1,biny+1,-10);
if(stat== 1) working++;
if(stat==-1) notconnected++;
if(stat==-3) nooffset++;
if(stat==-7) dead++;
}
}
return nooffset;
}
void HMdcWireStat::printParam(void)
{
// prints the parameters of HMdcWireStat to the screen.
SEPERATOR_msg("#",60);
INFO_msg(10,HMessageMgr::DET_MDC,"HMdcWireStat:");
INFO_msg(10,HMessageMgr::DET_MDC,"Status:");
for(Int_t s=0;s<6;s++){
for(Int_t m=0;m<4;m++){
for(Int_t l=0;l<6;l++){
for(Int_t c=0;c<220;c++){
gHades->getMsg()->info(10,HMessageMgr::DET_MDC,GetName(),
"s %i m %i l %i c %3i mb %2i tdc %2i status %i efficiency %5.4f",
s,m,l,c,
(Int_t)mb[s][m] ->GetBinContent(c+1,l+1),
(Int_t)tdc[s][m] ->GetBinContent(c+1,l+1),
(Int_t)statusmap[s][m] ->GetBinContent(c+1,l+1),
efficiency[s][m] ->GetBinContent(c+1,l+1));
}
}
}
}
SEPERATOR_msg("#",60);
}
Bool_t HMdcWireStat::init(HParIo* inp,Int_t* set)
{
// intitializes the container from an input
HDetParIo* input=inp->getDetParIo("HCondParIo");
if (input) return (input->init(this,set));
return kFALSE;
}
Int_t HMdcWireStat::write(HParIo* output)
{
// writes the container to an output
HDetParIo* out=output->getDetParIo("HCondParIo");
if (out) return out->write(this);
return -1;
}
void HMdcWireStat::putParams(HParamList* l)
{
// Puts all params of HMdcWireStat to the parameter list of
// HParamList (which ist used by the io);
if (!l) return;
TObjArray Mb(24);
TObjArray Tdc(24);
TObjArray Status(24);
TObjArray Efficiency(24);
for(Int_t s=0;s<6;s++){
for(Int_t m=0;m<4;m++){
Mb.AddAt(mb[s][m],s*4+m);
Tdc.AddAt(tdc[s][m],s*4+m);
Status.AddAt(statusmap[s][m],s*4+m);
Efficiency.AddAt(efficiency[s][m],s*4+m);
}
}
Mb.SetOwner(kFALSE);
Tdc.SetOwner(kFALSE);
Status.SetOwner(kFALSE);
Efficiency.SetOwner(kFALSE);
l->addBinary("mb" ,&Mb);
l->addBinary("tdc" ,&Tdc);
l->addBinary("status" ,&Status);
l->addBinary("efficiency",&Efficiency);
}
Bool_t HMdcWireStat::getParams(HParamList* l)
{
if (!l) return kFALSE;
TObjArray Mb(24);
TObjArray Tdc(24);
TObjArray Status(24);
TObjArray Efficiency(24);
for(Int_t s=0;s<6;s++){
for(Int_t m=0;m<4;m++){
delete mb[s][m];
delete tdc[s][m];
delete statusmap[s][m];
delete efficiency[s][m];
}
}
Mb.SetOwner(kFALSE);
Tdc.SetOwner(kFALSE);
Status.SetOwner(kFALSE);
Efficiency.SetOwner(kFALSE);
if(!( l->fillBinary("mb" ,&Mb ))) return kFALSE;
if(!( l->fillBinary("tdc" ,&Tdc))) return kFALSE;
if(!( l->fillBinary("status" ,&Status))) return kFALSE;
if(!( l->fillBinary("efficiency",&Efficiency)))return kFALSE;
for(Int_t s=0;s<6;s++){
for(Int_t m=0;m<4;m++){
mb [s][m]=(TH2F*)Mb.At(s*4+m);
tdc [s][m]=(TH2F*)Tdc.At(s*4+m);
statusmap [s][m]=(TH2F*)Status.At(s*4+m);
efficiency[s][m]=(TH2F*)Efficiency.At(s*4+m);
}
}
unsetDirectory();
return kTRUE;
}
TCanvas* HMdcWireStat::plotStatusMbVsTdc()
{
gStyle->SetOptStat(0);
Char_t name[400];
sprintf(name,"%s","Mb_vs_Tdc");
TCanvas* result=new TCanvas(name,name,1000,800);
result->Divide(6,4);
TH2F* hmb_vs_tdc[6][4];
Int_t mbo,t,st;
for(Int_t sec=0;sec<6;sec++){
for(Int_t mod=0;mod<4;mod++){
sprintf(name,"%s%i%s%i","hStatusMb_vs_Tdc_sec",sec,"_mod",mod);
hmb_vs_tdc[sec][mod]=new TH2F(name,name,96,0,96,16,0,16);
hmb_vs_tdc[sec][mod]->SetXTitle("tdc channel");
hmb_vs_tdc[sec][mod]->SetYTitle("Mbo");
for(Int_t bx=0;bx<96;bx++){
for(Int_t by=0;by<16;by++){
hmb_vs_tdc[sec][mod]->SetBinContent(bx+1,by+1,-10);
}
}
for(Int_t l=0;l<6;l++){
Int_t ncell=statusmap[sec][mod]->GetNbinsX();
for(Int_t c=0;c<ncell;c++){
mbo=(Int_t)mb[sec][mod] ->GetBinContent(c+1,l+1);
t =(Int_t)tdc[sec][mod] ->GetBinContent(c+1,l+1);
st =(Int_t)statusmap[sec][mod]->GetBinContent(c+1,l+1);
hmb_vs_tdc[sec][mod]->SetBinContent(t+1,mbo+1,st);
}
}
hmb_vs_tdc[sec][mod]->SetMinimum(-4);
result->cd(mod*6+sec+1);
hmb_vs_tdc[sec][mod]->DrawCopy("Colz");
}
}
return result;
}
TCanvas* HMdcWireStat::plotEfficiencyMbVsTdc()
{
gStyle->SetOptStat(0);
Char_t name[400];
sprintf(name,"%s","Mb_vs_Tdc");
TCanvas* result=new TCanvas(name,name,1000,800);
result->Divide(6,4);
TH2F* hmb_vs_tdc[6][4];
Int_t mbo,t;
Float_t eff;
for(Int_t sec=0;sec<6;sec++){
for(Int_t mod=0;mod<4;mod++){
sprintf(name,"%s%i%s%i","hEfficiencyMb_vs_Tdc_sec",sec,"_mod",mod);
hmb_vs_tdc[sec][mod]=new TH2F(name,name,96,0,96,16,0,16);
hmb_vs_tdc[sec][mod]->SetXTitle("tdc channel");
hmb_vs_tdc[sec][mod]->SetYTitle("Mbo");
for(Int_t bx=0;bx<96;bx++){
for(Int_t by=0;by<16;by++){
hmb_vs_tdc[sec][mod]->SetBinContent(bx+1,by+1,-10);
}
}
for(Int_t l=0;l<6;l++){
Int_t ncell=statusmap[sec][mod]->GetNbinsX();
for(Int_t c=0;c<ncell;c++){
mbo=(Int_t)mb[sec][mod] ->GetBinContent(c+1,l+1);
t =(Int_t)tdc[sec][mod] ->GetBinContent(c+1,l+1);
eff=(Float_t)efficiency[sec][mod]->GetBinContent(c+1,l+1);
hmb_vs_tdc[sec][mod]->SetBinContent(t+1,mbo+1,eff);
}
}
result->cd(mod*6+sec+1);
hmb_vs_tdc[sec][mod]->DrawCopy("Colz");
}
}
return result;
}
TCanvas* HMdcWireStat::plotStatus(Int_t sec,Int_t mod)
{
gStyle->SetOptStat(0);
Char_t name[400];
sprintf(name,"status_s%i_m%i",sec,mod);
TCanvas* result=new TCanvas(name,name,1000,800);
result->Divide(1,6);
TH1F* hmdcstatus[6];
Int_t mbo,t,st;
for(Int_t l=0;l<6;l++){
sprintf(name,"%s%i%s%i%s%i","hmdcstatus_sec",sec,"_mod",mod,"_layer",l);
hmdcstatus[l]=new TH1F(name,name,220,0,220);
hmdcstatus[l]->SetXTitle("wire number");
hmdcstatus[l]->SetYTitle("status");
hmdcstatus[l]->SetFillColor(8);
Int_t ncell=statusmap[sec][mod]->GetNbinsX();
for(Int_t c=0;c<ncell;c++){
mbo=(Int_t)mb[sec][mod] ->GetBinContent(c+1,l+1);
t =(Int_t)tdc[sec][mod] ->GetBinContent(c+1,l+1);
st =(Int_t)statusmap[sec][mod]->GetBinContent(c+1,l+1);
hmdcstatus[l]->SetBinContent(c+1,st);
}
result->cd(l+1);
hmdcstatus[l]->DrawCopy();
}
return result;
}
TCanvas* HMdcWireStat::plotEfficiency(Int_t sec,Int_t mod)
{
gStyle->SetOptStat(0);
Char_t name[400];
sprintf(name,"efficiency_s%i_m%i",sec,mod);
TCanvas* result=new TCanvas(name,name,1000,800);
result->Divide(1,6);
TH1F* hmdcefficiency[6];
Int_t mbo,t;
Float_t eff;
for(Int_t l=0;l<6;l++){
sprintf(name,"%s%i%s%i%s%i","hmdcefficiency_sec",sec,"_mod",mod,"_layer",l);
hmdcefficiency[l]=new TH1F(name,name,220,0,220);
hmdcefficiency[l]->SetXTitle("wire number");
hmdcefficiency[l]->SetYTitle("efficiency");
Int_t ncell=efficiency[sec][mod]->GetNbinsX();
for(Int_t c=0;c<ncell;c++){
mbo=(Int_t)mb[sec][mod] ->GetBinContent(c+1,l+1);
t =(Int_t)tdc[sec][mod] ->GetBinContent(c+1,l+1);
eff=(Float_t)efficiency[sec][mod]->GetBinContent(c+1,l+1);
hmdcefficiency[l]->SetBinContent(c+1,eff);
}
result->cd(l+1);
hmdcefficiency[l]->DrawCopy();
}
return result;
}
void HMdcWireStat::unsetDirectory()
{
for(Int_t s=0;s<6;s++){
for(Int_t m=0;m<4;m++){
mb [s][m]->SetDirectory(0);
tdc [s][m]->SetDirectory(0);
statusmap [s][m]->SetDirectory(0);
efficiency[s][m]->SetDirectory(0);
}
}
}
void HMdcWireStat::Streamer(TBuffer &R__b)
{
// Stream an object of class HMdcWireStat.
UInt_t R__s, R__c;
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
HParCond::Streamer(R__b);
int R__i;
for (R__i = 0; R__i < 24; R__i++)
R__b >> mb[0][R__i];
for (R__i = 0; R__i < 24; R__i++)
R__b >> tdc[0][R__i];
for (R__i = 0; R__i < 24; R__i++)
R__b >> statusmap[0][R__i];
for (R__i = 0; R__i < 24; R__i++)
R__b >> efficiency[0][R__i];
R__b.CheckByteCount(R__s, R__c, HMdcWireStat::IsA());
unsetDirectory();
} else {
R__c = R__b.WriteVersion(HMdcWireStat::IsA(), kTRUE);
HParCond::Streamer(R__b);
int R__i;
for (R__i = 0; R__i < 24; R__i++)
R__b << (TObject*)mb[0][R__i];
for (R__i = 0; R__i < 24; R__i++)
R__b << (TObject*)tdc[0][R__i];
for (R__i = 0; R__i < 24; R__i++)
R__b << (TObject*)statusmap[0][R__i];
for (R__i = 0; R__i < 24; R__i++)
R__b << (TObject*)efficiency[0][R__i];
R__b.SetByteCount(R__c, kTRUE);
}
}
ROOT page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.