Commit 5ab55be4 authored by Stezowski Olivier's avatar Stezowski Olivier
Browse files

Merge branch 'Histogramer' into 'preprod'

Histogramer into Preprod

See merge request IPNL_GAMMA/narval_emulator!33
parents c29f1cba 96915ab6
zPrograms/FitSpek.o
zPrograms/ListFrames
zPrograms/ListFrames.o
zPrograms/Misc.o
zPrograms/Mixfft.o
zPrograms/ReadSpek.o
zPrograms/RecalEnergy
zPrograms/RecalEnergy.o
zPrograms/SortCapsule
zPrograms/SortCapsule.o
zPrograms/SortFFT
zPrograms/SortFFT.o
zPrograms/SortPsaHits
zPrograms/SortPsaHits.o
zPrograms/matlib.o
zPrograms/speclib.o
zPrograms/xTalkInvert
zPrograms/xTalkInvert.o
zPrograms/xTalkMake
zPrograms/xTalkMake.o
zPrograms/xTalkSort
zPrograms/xTalkSort.o
#define MAX_TH1BINS 4096
#define MAX_TH2BINS 1024
#define MAX_TH1HISTS 79
#define MAX_TH2HISTS 1
#define MAX_TH2BINSPSA 50
#define MAX_CHAR_SIZE 200
#define MAX_NUM_SIGNALS 10
//38*ERaw + 2*timestamps + MAX_NUM_SIGNALS*38
#define N_TH1HISTS_PROD 420
#define N_TH2HISTS_PROD 0
//38*ERaw + 38*Baseline + 38*T0 + 2*timestamps + 1*DeltaT
#define N_TH1HISTS_PREP 117
//1*EvsId
#define N_TH2HISTS_PREP 1
//38*Ampli + 2*CoreT + 2*timestamps + HitMult
#define N_TH1HISTS_PSA 43
//6*YvsX slices + ZvsX + ZvsR
#define N_TH2HISTS_PSA 8
struct Hist
{
......@@ -35,10 +51,39 @@ struct Hist2F : Hist
char ytitle[MAX_CHAR_SIZE];
};
struct ActorMap
struct Hist2F_PSA : Hist
{
Float_t ybinmin = -1;
Float_t ybinmax = -1;
Int_t ynbins = -1;
Float_t bins[(MAX_TH2BINSPSA+2)*(MAX_TH2BINSPSA+2)]; // +2 for underflow and overflow bins
char ytitle[MAX_CHAR_SIZE];
};
struct ProdMap
{
int N_TH1_Entries = 0; // number of 1d histograms
int N_TH2_Entries = 0; // number of 2d histograms
Hist1F hist1f_list[N_TH1HISTS_PROD];
Hist2F hist2f_list[N_TH2HISTS_PROD];
};
struct PrepMap
{
int N_TH1_Entries = 0; // number of 1d histograms
int N_TH2_Entries = 0; // number of 2d histograms
Hist1F hist1f_list[N_TH1HISTS_PREP];
Hist2F hist2f_list[N_TH2HISTS_PREP];
};
struct PSAMap
{
int N_TH1_Entries = 0; // number of 1d histograms
int N_TH2_Entries = 0; // number of 2d histograms
Hist1F hist1f_list[MAX_TH1HISTS];
Hist2F hist2f_list[MAX_TH2HISTS];
int N_TH2_heavy_Entries = 0; // number of 2d histograms
Hist1F hist1f_list[N_TH1HISTS_PSA];
Hist2F_PSA hist2f_list[N_TH2HISTS_PSA];
Hist2F hist2f_heavy_list[1];
};
......@@ -79,6 +79,8 @@ UInt_t Histogramer::ProcessBlock(ADF::FrameBlock &inBlock)
UInt_t error_code = 0;
UInt_t nevs = 0;
fFirstBlock = true;
while ( fFrameIO.Notify() )
{
// fill local variables with data from the input
......@@ -207,12 +209,24 @@ std::string Histogramer::GetSegmentNameFromID(const Int_t id)
return name;
}
Hist1F *Histogramer::NewHist1F(std::string name, std::string title, std::string xtitle, std::string gruname, int nbins, float min, float max, ActorMap *map_ptr, Int_t PortNumber)
Hist1F *Histogramer::NewHist1F(std::string name, std::string title, std::string xtitle, std::string gruname, int nbins, float min, float max, void *map_ptr, Int_t PortNumber)
{
Log.ClearMessage();
Log.SetProcessMethod("NewHist1F");
fFrameIO.Print(Log());
ProdMap *prodmap = nullptr;
PrepMap *prepmap = nullptr;
PSAMap *psamap = nullptr;
if(fBasePortNumber==10)
prodmap = static_cast<ProdMap*>(map_ptr);
else if(fBasePortNumber==11)
prepmap = static_cast<PrepMap*>(map_ptr);
else if(fBasePortNumber==12)
psamap = static_cast<PSAMap*>(map_ptr);
else return nullptr;
if(nbins>MAX_TH1BINS)
{
Log.SetLevel(LogMessage::kError);
......@@ -220,19 +234,45 @@ Hist1F *Histogramer::NewHist1F(std::string name, std::string title, std::string
return nullptr;
}
if(map_ptr->N_TH1_Entries == MAX_TH1HISTS)
if(prodmap && prodmap->N_TH1_Entries == N_TH1HISTS_PROD)
{
Log.SetLevel(LogMessage::kError);
Log << "Cannot allocate more than " << N_TH1HISTS_PROD << " TH1F at producer level, in the shared memory" << dolog;
return nullptr;
}
if(prepmap && prepmap->N_TH1_Entries == N_TH1HISTS_PREP)
{
Log.SetLevel(LogMessage::kError);
Log << "Cannot allocate more than " << N_TH1HISTS_PREP << " TH1F at preprocessing level, in the shared memory" << dolog;
return nullptr;
}
if(psamap && psamap->N_TH1_Entries == N_TH1HISTS_PSA)
{
Log.SetLevel(LogMessage::kError);
Log << "Cannot allocate more than " << MAX_TH1HISTS << " TH1F, in the shared memory" << dolog;
Log << "Cannot allocate more than " << N_TH1HISTS_PSA << " TH1F at psa level, in the shared memory" << dolog;
return nullptr;
}
Hist1F *histptr = &map_ptr->hist1f_list[map_ptr->N_TH1_Entries];
Hist1F *histptr = nullptr;
if(prodmap)
histptr = &prodmap->hist1f_list[prodmap->N_TH1_Entries];
else if(prepmap)
histptr = &prepmap->hist1f_list[prepmap->N_TH1_Entries];
else if(psamap)
histptr = &psamap->hist1f_list[psamap->N_TH1_Entries];
strcpy(histptr->name,name.data());
strcpy(histptr->title,title.data());
strcpy(histptr->gruname,gruname.data());
histptr->spec_number = PortNumber*10000+1000 + map_ptr->N_TH1_Entries; //2 first digits: actor ; 3 next: crystal id ; 1next: (1 -> TH1 ; 2 -> TH2) ; 3 next, spectrum id
if(prodmap)
histptr->spec_number = PortNumber*10000+1000 + prodmap->N_TH1_Entries; //2 first digits: actor ; 3 next: crystal id ; 1next: (1 -> TH1 ; 2 -> TH2) ; 3 next, spectrum id
else if(prepmap)
histptr->spec_number = PortNumber*10000+1000 + prepmap->N_TH1_Entries; //2 first digits: actor ; 3 next: crystal id ; 1next: (1 -> TH1 ; 2 -> TH2) ; 3 next, spectrum id
else if(psamap)
histptr->spec_number = PortNumber*10000+1000 + psamap->N_TH1_Entries; //2 first digits: actor ; 3 next: crystal id ; 1next: (1 -> TH1 ; 2 -> TH2) ; 3 next, spectrum id
histptr->nevts = 0;
histptr->xbinmin=min;
......@@ -241,54 +281,136 @@ Hist1F *Histogramer::NewHist1F(std::string name, std::string title, std::string
strcpy(histptr->xtitle,xtitle.data());
memset(histptr->bins, 0, sizeof(histptr->bins));
map_ptr->N_TH1_Entries++;
if(prodmap)
prodmap->N_TH1_Entries++;
if(prepmap)
prepmap->N_TH1_Entries++;
if(psamap)
psamap->N_TH1_Entries++;
return histptr;
}
Hist2F *Histogramer::NewHist2F(std::string name, std::string title, std::string xtitle, std::string ytitle, std::string gruname, int nbinsx, float xmin, float xmax, int nbinsy, float ymin, float ymax, ActorMap *map_ptr, Int_t PortNumber)
void *Histogramer::NewHist2F(std::string name, std::string title, std::string xtitle, std::string ytitle, std::string gruname, int nbinsx, float xmin, float xmax, int nbinsy, float ymin, float ymax, void *map_ptr, Int_t PortNumber)
{
Log.ClearMessage();
Log.SetProcessMethod("NewHist2F");
fFrameIO.Print(Log());
ProdMap *prodmap = nullptr;
PrepMap *prepmap = nullptr;
PSAMap *psamap = nullptr;
Hist2F *histptr = nullptr;
Hist2F_PSA *histptr_psa = nullptr;
if(nbinsx>MAX_TH2BINS || nbinsy>MAX_TH2BINS)
if(fBasePortNumber==10)
prodmap = static_cast<ProdMap*>(map_ptr);
else if(fBasePortNumber==11)
prepmap = static_cast<PrepMap*>(map_ptr);
else if(fBasePortNumber==12)
psamap = static_cast<PSAMap*>(map_ptr);
else return nullptr;
if((prodmap || prepmap) && (nbinsx>MAX_TH2BINS || nbinsy>MAX_TH2BINS))
{
Log.SetLevel(LogMessage::kError);
Log << name << ": Cannot define more than " << MAX_TH2BINS << " in TH2F axis" << dolog;
return nullptr;
}
if(psamap && (nbinsx>MAX_TH2BINSPSA || nbinsy>MAX_TH2BINSPSA))
{
Log.SetLevel(LogMessage::kError);
Log << name << ": Cannot define more than " << MAX_TH2BINSPSA << " in TH2F of PSA actor axis" << dolog;
return nullptr;
}
if(map_ptr->N_TH2_Entries == MAX_TH2HISTS)
if(prodmap && prodmap->N_TH2_Entries == N_TH2HISTS_PROD)
{
Log.SetLevel(LogMessage::kError);
Log << "Cannot allocate more than " << MAX_TH2HISTS << " TH2F, in the shared memory" << dolog;
Log << "Cannot allocate more than " << N_TH2HISTS_PROD << " TH2F at producer level, in the shared memory" << dolog;
return nullptr;
}
histptr = &map_ptr->hist2f_list[map_ptr->N_TH2_Entries];
if(prepmap && prepmap->N_TH2_Entries == N_TH2HISTS_PREP)
{
Log.SetLevel(LogMessage::kError);
Log << "Cannot allocate more than " << N_TH2HISTS_PREP << " TH2F at preprocessing level, in the shared memory" << dolog;
return nullptr;
}
strcpy(histptr->name,name.data());
strcpy(histptr->title,title.data());
strcpy(histptr->gruname,gruname.data());
histptr->spec_number = PortNumber*10000+2000 + map_ptr->N_TH2_Entries; //2 first digits: actor ; 3 next: crystal id ; 1next: (1 -> TH1 ; 2 -> TH2) ; 3 next, spectrum id
histptr->nevts = 0;
if(psamap && psamap->N_TH2_Entries == N_TH2HISTS_PSA)
{
Log.SetLevel(LogMessage::kError);
Log << "Cannot allocate more than " << N_TH2HISTS_PSA << " TH2F at psa level, in the shared memory" << dolog;
return nullptr;
}
histptr->xnbins = nbinsx;
histptr->xbinmin= xmin;
histptr->xbinmax= xmax;
strcpy(histptr->xtitle,xtitle.data());
if(prodmap)
histptr = &prodmap->hist2f_list[prodmap->N_TH2_Entries];
else if(prepmap)
histptr = &prepmap->hist2f_list[prepmap->N_TH2_Entries];
else if(psamap)
histptr_psa = &psamap->hist2f_list[psamap->N_TH2_Entries];
histptr->ynbins = nbinsy;
histptr->ybinmin= ymin;
histptr->ybinmax= ymax;
strcpy(histptr->ytitle,ytitle.data());
if(histptr_psa)
{
strcpy(histptr_psa->name,name.data());
strcpy(histptr_psa->title,title.data());
strcpy(histptr_psa->gruname,gruname.data());
memset(histptr->bins, 0, sizeof(histptr->bins));
histptr_psa->nevts = 0;
histptr_psa->xnbins = nbinsx;
histptr_psa->xbinmin= xmin;
histptr_psa->xbinmax= xmax;
strcpy(histptr_psa->xtitle,xtitle.data());
map_ptr->N_TH2_Entries++;
histptr_psa->ynbins = nbinsy;
histptr_psa->ybinmin= ymin;
histptr_psa->ybinmax= ymax;
strcpy(histptr_psa->ytitle,ytitle.data());
memset(histptr_psa->bins, 0, sizeof(histptr_psa->bins));
}
else
{
strcpy(histptr->name,name.data());
strcpy(histptr->title,title.data());
strcpy(histptr->gruname,gruname.data());
histptr->nevts = 0;
histptr->xnbins = nbinsx;
histptr->xbinmin= xmin;
histptr->xbinmax= xmax;
strcpy(histptr->xtitle,xtitle.data());
histptr->ynbins = nbinsy;
histptr->ybinmin= ymin;
histptr->ybinmax= ymax;
strcpy(histptr->ytitle,ytitle.data());
memset(histptr->bins, 0, sizeof(histptr->bins));
}
if(prodmap)
histptr->spec_number = PortNumber*10000+2000 + prodmap->N_TH2_Entries; //2 first digits: actor ; 3 next: crystal id ; 1next: (1 -> TH1 ; 2 -> TH2) ; 3 next, spectrum id
else if(prepmap)
histptr->spec_number = PortNumber*10000+2000 + prepmap->N_TH2_Entries; //2 first digits: actor ; 3 next: crystal id ; 1next: (1 -> TH1 ; 2 -> TH2) ; 3 next, spectrum id
else if(psamap)
histptr_psa->spec_number = PortNumber*10000+2000 + psamap->N_TH2_Entries; //2 first digits: actor ; 3 next: crystal id ; 1next: (1 -> TH1 ; 2 -> TH2) ; 3 next, spectrum id
if(prodmap)
prodmap->N_TH2_Entries++;
else if(prepmap)
prepmap->N_TH2_Entries++;
else if(psamap)
{
psamap->N_TH2_Entries++;
return histptr_psa;
}
return histptr;
}
......@@ -317,36 +439,65 @@ void Histogramer::FillHist1F(Hist1F *hist, Float_t val, Float_t weight)
hist->bins[bin] += weight;
hist->nevts++;
// cout<<"val = "<<val<<" ; bin "<<bin<<" filled : "<<hist->bins[bin]<<" ; nevts = "<<hist->nevts<<endl;
// cout<<"val = "<<val<<" ; bin "<<bin<<" filled : "<<hist->bins[bin]<<" ; nevts = "<<hist->nevts<<endl;
}
void Histogramer::FillHist2F(Hist2F *hist, Float_t valx, Float_t valy, Float_t weight)
void Histogramer::FillHist2F(void *hist, Float_t valx, Float_t valy, Float_t weight)
{
Int_t binx = 1 + Int_t(hist->xnbins*(valx-hist->xbinmin)/(hist->xbinmax-hist->xbinmin));
if(binx<0) binx=0;
else if(binx>hist->xnbins) binx=hist->xnbins+1;
Hist2F *hist2f = nullptr;
Hist2F_PSA *hist2fPSA = nullptr;
Int_t biny = 1 + Int_t(hist->ynbins*(valy-hist->ybinmin)/(hist->ybinmax-hist->ybinmin));
if(biny<0) biny=0;
else if(biny>hist->ynbins) biny=hist->ynbins+1;
if(fBasePortNumber==12)
hist2fPSA = static_cast<Hist2F_PSA*>(hist);
else
hist2f = static_cast<Hist2F*>(hist);
Int_t bin = biny*(hist->xnbins+2) + binx;
if(hist2f)
{
Int_t binx = 1 + Int_t(hist2f->xnbins*(valx-hist2f->xbinmin)/(hist2f->xbinmax-hist2f->xbinmin));
if(binx<0) binx=0;
else if(binx>hist2f->xnbins) binx=hist2f->xnbins+1;
hist->bins[bin] += weight;
hist->nevts++;
Int_t biny = 1 + Int_t(hist2f->ynbins*(valy-hist2f->ybinmin)/(hist2f->ybinmax-hist2f->ybinmin));
if(biny<0) biny=0;
else if(biny>hist2f->ynbins) biny=hist2f->ynbins+1;
Int_t bin = biny*(hist2f->xnbins+2) + binx;
hist2f->bins[bin] += weight;
hist2f->nevts++;
}
else if(hist2fPSA)
{
Int_t binx = 1 + Int_t(hist2fPSA->xnbins*(valx-hist2fPSA->xbinmin)/(hist2fPSA->xbinmax-hist2fPSA->xbinmin));
if(binx<0) binx=0;
else if(binx>hist2fPSA->xnbins) binx=hist2fPSA->xnbins+1;
Int_t biny = 1 + Int_t(hist2fPSA->ynbins*(valy-hist2fPSA->ybinmin)/(hist2fPSA->ybinmax-hist2fPSA->ybinmin));
if(biny<0) biny=0;
else if(biny>hist2fPSA->ynbins) biny=hist2fPSA->ynbins+1;
// cout<<hist->nevts<<" "<<bin<<" "<< binx << " " << valx << " " << biny << " " << valy <<" "<<hist->bins[bin]<<endl;
Int_t bin = biny*(hist2fPSA->xnbins+2) + binx;
hist2fPSA->bins[bin] += weight;
hist2fPSA->nevts++;
}
// cout<<hist->nevts<<" "<<bin<<" "<< binx << " " << valx << " " << biny << " " << valy <<" "<<hist->bins[bin]<<endl;
}
ActorMap *Histogramer::CreateNewSMz(const char *name, Int_t Size, Int_t PortNumber)
void *Histogramer::CreateNewSMz(const char *name, Int_t Size, Int_t PortNumber)
{
Log.ClearMessage();
Log.SetProcessMethod("NewHist2F");
Log.SetProcessMethod("CreateNewSMz");
fFrameIO.Print(Log());
int fd;
ostringstream SMZ;
ActorMap *map_ptr = nullptr;
ProdMap *prodmap = nullptr;
PrepMap *prepmap = nullptr;
PSAMap *psamap = nullptr;
bool SMZ_exists = TestSMZ(name);
......@@ -384,7 +535,7 @@ ActorMap *Histogramer::CreateNewSMz(const char *name, Int_t Size, Int_t PortNumb
SMZ << "\"port\":" << PortNumber << ", ";
SMZ << "\"log_level\":\"debug\"}'";
SMZ << " -H \"Content-Type: application/json\" -X POST ";
// cout<<SMZ.str()<<endl;
// cout<<SMZ.str()<<endl;
result = system(SMZ.str().data());
cout<<endl;
if(result==-1)
......@@ -399,7 +550,7 @@ ActorMap *Histogramer::CreateNewSMz(const char *name, Int_t Size, Int_t PortNumb
SMZ << "\"name\":\"source_" << name << "\", ";
SMZ << "\"action\":\"connect\"}'";
SMZ << " -H \"Content-Type: application/json\" -X PUT ";
// cout<<SMZ.str()<<endl;
// cout<<SMZ.str()<<endl;
result = system(SMZ.str().data());
cout<<endl;
if(result==-1)
......@@ -420,24 +571,55 @@ ActorMap *Histogramer::CreateNewSMz(const char *name, Int_t Size, Int_t PortNumb
fprintf(stderr, "Open failed for hist %s :%s\n",name, strerror(errno));
exit(EXIT_FAILURE);
}
//alocate the size of the shared memory zone
if (ftruncate(fd, sizeof(ActorMap)) == -1)
if (ftruncate(fd, Size) == -1)
{
fprintf(stderr, "truncate failed for hist %s :%s\n",name, strerror(errno));
exit(EXIT_FAILURE);
}
//map the data on a ActorMap pointer
map_ptr = (ActorMap*) mmap(NULL, sizeof(ActorMap), PROT_WRITE, MAP_SHARED, fd, 0);
if (map_ptr == MAP_FAILED)
if(fBasePortNumber==10)
prodmap = (ProdMap*) mmap(NULL, Size, PROT_WRITE, MAP_SHARED, fd, 0);
else if(fBasePortNumber==11)
prepmap = (PrepMap*) mmap(NULL, Size, PROT_WRITE, MAP_SHARED, fd, 0);
else if(fBasePortNumber==12)
psamap = (PSAMap*) mmap(NULL, Size, PROT_WRITE, MAP_SHARED, fd, 0);
if ((prodmap && prodmap == MAP_FAILED) ||
(prepmap && prepmap == MAP_FAILED) ||
(psamap && psamap == MAP_FAILED))
{
fprintf(stderr, "Map failed for hist %s :%s\n",name,strerror(errno));
exit(EXIT_FAILURE);
}
map_ptr->N_TH1_Entries = 0;
map_ptr->N_TH2_Entries = 0;
if(prodmap)
{
prodmap->N_TH1_Entries = 0;
prodmap->N_TH2_Entries = 0;
return map_ptr;
return prodmap;
}
else if(prepmap)
{
prepmap->N_TH1_Entries = 0;
prepmap->N_TH2_Entries = 0;
return prepmap;
}
else if(psamap)
{
psamap->N_TH1_Entries = 0;
psamap->N_TH2_Entries = 0;
return psamap;
}
else
{
return nullptr;
}
}
bool Histogramer::TestSMZ(const char *name)
......
......@@ -73,6 +73,8 @@ protected:
Int_t fBasePortNumber;
Bool_t fFirstBlock;
Float_t fRefreshTime = 2.0;
public:
......@@ -110,15 +112,15 @@ protected:
virtual UInt_t GetParameters(const std::string& confFile, Bool_t doList=false){return 0;}
virtual void InitSMZ(Int_t){return;}
ActorMap *CreateNewSMz(const char *name, Int_t Size, Int_t PortNumber);
void *CreateNewSMz(const char *name, Int_t Size, Int_t PortNumber);
bool TestSMZ(const char *name);
Hist1F *NewHist1F(std::string name, std::string title, std::string xtitle, std::string gruname, int nbins, float min, float max, ActorMap *map_ptr, Int_t PortNumber);
Hist2F *NewHist2F(std::string name, std::string title, std::string xtitle, std::string ytitle, std::string gruname, int nbinsx, float xmin, float xmax, int nbinsy, float ymin, float ymax, ActorMap *map_ptr, Int_t PortNumber);
Hist1F *NewHist1F(std::string name, std::string title, std::string xtitle, std::string gruname, int nbins, float min, float max, void *map_ptr, Int_t PortNumber);
void *NewHist2F(std::string name, std::string title, std::string xtitle, std::string ytitle, std::string gruname, int nbinsx, float xmin, float xmax, int nbinsy, float ymin, float ymax, void *map_ptr, Int_t PortNumber);
void ResetHist1F(Hist1F *hist);
void FillHist1F(Hist1F *hist, Float_t val, Float_t weight=1.);
void FillHist2F(Hist2F *hist, Float_t valx, Float_t valy, Float_t weight=1.);
void FillHist2F(void *hist, Float_t valx, Float_t valy, Float_t weight=1.);
};
}
......
......@@ -7,5 +7,6 @@ MESSAGE("[AGAPRO] + ${PROJECT_NAME}")
add_subdirectory(ProdHist)
add_subdirectory(PreproHist)
add_subdirectory(PSAHist)
/***************************************************************************
* Copyright (C) 2018 by Jeremie Dudouet *
* jeremie.dudouet(AT)csnsm.in2p3.fr *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifndef AGAPRO_PSAHist
#include "AGAPRO_PSAHist.h"
#endif
#include <iostream>
#include <iomanip>
#include <fstream>
#include <sstream>
#include <cmath>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include "PSAFilter.h"
#include "AgataKeyFactory.h"
#include "AgataFrameFactory.h"
#include "adetParams.h"
#include "commonDefs.h"
using namespace ADF;
using namespace AGAPRO;
PSAHist::PSAHist() :
Histogramer("data:psa")
{
gActualClass = "PSAHist";
fBasePortNumber = 12;
vector<void* > AmpliList;
fListOfHists.push_back(AmpliList);
vector<void* > HitPaternsList;
fListOfHists.push_back(HitPaternsList);