15 #include "lbne-raw-data/Services/ChannelMap/ChannelMapService.h" 25 using std::istringstream;
35 const string myname =
"test_Dune35tNoiseRemovalService: ";
37 cout << myname <<
"NDEBUG must be off." <<
endl;
40 string line =
"-----------------------------";
42 cout << myname << line <<
endl;
44 cout << myname <<
"Using existing top-level FCL." <<
endl;
48 cout << myname <<
"Creating top-level FCL." <<
endl;
49 string gname =
"dune35t4apa_v6";
51 config <<
"services.Geometry: {" <<
endl;
52 config <<
" DisableWiresInG4: true" <<
endl;
53 config <<
" GDML: \"" << gname <<
".gdml\"" <<
endl;
54 config <<
" Name: \"" << gname <<
"\"" <<
endl;
55 config <<
" ROOT: \"" << gname <<
"\"" <<
endl;
56 config <<
" SortingParameters: { DetectorVersion: \"" << gname <<
"\" ChannelsPerOpDet: 12} " <<
endl;
57 config <<
" SurfaceY: 0" <<
endl;
58 config <<
"}" <<
endl;
59 config <<
"services.ExptGeoHelperInterface: {" <<
endl;
60 config <<
" service_provider: \"DUNEGeometryHelper\"" <<
endl;
61 config <<
"}" <<
endl;
62 config <<
"services.ChannelMapService: {" <<
endl;
63 config <<
" LogLevel: 1" <<
endl;
64 config <<
" FileName: \"35tTPCChannelMap_v6.txt\"" <<
endl;
65 config <<
"}" <<
endl;
66 config <<
"services.AdcNoiseRemovalService: {" <<
endl;
67 config <<
" service_provider: Dune35tNoiseRemovalService" <<
endl;
68 config <<
" LogLevel: 1" <<
endl;
69 config <<
" GroupingFlag: 1" <<
endl;
70 config <<
" SkipStuckCodes: false" <<
endl;
71 config <<
" SkipSignals: false" <<
endl;
72 config <<
" CorrectStuckCodes: true" <<
endl;
73 config <<
" ShowGroups: 2" <<
endl;
74 config <<
" ShowGroupsChannel: 4" <<
endl;
75 config <<
"}" <<
endl;
79 cout << myname << line <<
endl;
80 cout << myname <<
"Fetch channel map." <<
endl;
83 cout << myname << line <<
endl;
84 cout << myname <<
"Fetch noise removal." <<
endl;
89 cout << myname << line <<
endl;
90 cout << myname <<
"Build offline channel list." <<
endl;
91 cout << myname <<
"Create data." <<
endl;
92 unsigned int nchan = 64;
93 unsigned int nsig = 200;
96 for (
AdcChannel chan=0; chan<nchan; ++chan ) {
97 cout <<
" Online Channel: " << chan <<
endl;
99 cout <<
" Offline Channel: " << chanoff <<
endl;
100 assert( hlcm->Online(chanoff) == chan );
102 data.channel = chanoff;
105 unsigned int isig1 = 10 + chan;
106 for (
unsigned int isig=0; isig<isig1; ++isig ) sigs.push_back(0);
107 for (
unsigned int i=0; i<10; ++i ) sigs.push_back(fac*i);
108 for (
unsigned int i=10; i<1000; --i ) sigs.push_back(fac*i);
109 for (
unsigned int i=19; i<1000; --i ) sigs.push_back(-sigs[i+isig1]);
110 for (
unsigned int isig=sigs.size(); isig<nsig; ++isig ) sigs.push_back(0);
113 for (
auto& chdata : datamap ) {
116 int reg = hlcm->RegulatorFromOfflineChannel(chanoff);
117 int ori = hlcm->PlaneFromOfflineChannel(chanoff);
118 for (
unsigned int isig=0; isig<nsig; ++isig ) {
120 AdcSignal noise = 50.0*reg + 10*ori + isig%5;
125 cout << myname << line <<
endl;
126 cout << myname <<
"Data before noise removal:" <<
endl;
127 unsigned int wcha = 5;
128 unsigned int wsig = 5;
129 for ( AdcChannelDataMap::value_type& idata : datamap ) {
132 cout <<
setw(wcha) << chan <<
": ";
133 for (
unsigned int isig=0; isig<40; ++isig ) {
139 cout << myname << line <<
endl;
140 cout << myname <<
"Remove noise." <<
endl;
141 assert( hanr->
update(datamap) == 0 );
143 cout << myname << line <<
endl;
144 cout << myname <<
"Data after noise removal:" <<
endl;
145 for ( AdcChannelDataMap::value_type& idata : datamap ) {
148 cout <<
setw(wcha) << chan <<
": ";
149 for (
unsigned int isig=0; isig<40; ++isig ) {
155 cout << myname << line <<
endl;
156 cout << myname <<
"Check unpolluted data after noise removal:" <<
endl;
157 for (
auto& chdata : datamap ) {
159 for (
unsigned int isig=0; isig<10; ++isig ) {
160 assert(data.
samples[isig] == 0.0);
164 cout << myname << line <<
endl;
165 cout << myname <<
"Done." <<
endl;
172 bool useExistingFcl =
false;
173 bool skipTest =
false;
175 string sarg(argv[1]);
176 if ( sarg ==
"-h" ) {
177 cout <<
"Usage: " << argv[0] <<
" [ARG]" <<
endl;
178 cout <<
" If ARG = true, existing FCL file is used." <<
endl;
181 useExistingFcl = sarg ==
"true" || sarg ==
"1";
182 }
else if ( skipTest ) {
183 cout <<
"Skipping test_Dune35tNoiseRemovalService to avoid hang." <<
endl;
184 cout <<
"See https://cdcvs.fnal.gov/redmine/issues/19206" <<
endl;
def line(rflist, normalization=13700 *units.eplus)
static constexpr FileOnPath_t FileOnPath
static void load_services(std::string const &config)
Q_EXPORT QTSManip setprecision(int p)
std::vector< AdcSignal > AdcSignalVector
int main(int argc, char *argv[])
virtual int update(AdcChannelDataMap &datamap) const =0
Q_EXPORT QTSManip setw(int w)
virtual std::ostream & print(std::ostream &out=std::cout, std::string prefix="") const =0
int test_Dune35tNoiseRemovalService(bool useExistingFcl)
std::map< AdcChannel, AdcChannelData > AdcChannelDataMap
QTextStream & endl(QTextStream &s)