Public Member Functions | Private Attributes | List of all members
caldata::CalWireAna Class Reference

Base class for creation of raw signals on wires. More...

Inheritance diagram for caldata::CalWireAna:
art::EDAnalyzer art::detail::Analyzer art::detail::LegacyModule art::Observer art::ModuleBase

Public Member Functions

 CalWireAna (fhicl::ParameterSet const &pset)
 
void analyze (const art::Event &evt)
 read/write access to event More...
 
void beginJob ()
 
void endJob ()
 
- Public Member Functions inherited from art::EDAnalyzer
 EDAnalyzer (fhicl::ParameterSet const &pset)
 
template<typename Config >
 EDAnalyzer (Table< Config > const &config)
 
std::string workerType () const
 
- Public Member Functions inherited from art::detail::Analyzer
virtual ~Analyzer () noexcept
 
 Analyzer (fhicl::ParameterSet const &pset)
 
template<typename Config >
 Analyzer (Table< Config > const &config)
 
void doBeginJob (SharedResources const &resources)
 
void doEndJob ()
 
void doRespondToOpenInputFile (FileBlock const &fb)
 
void doRespondToCloseInputFile (FileBlock const &fb)
 
void doRespondToOpenOutputFiles (FileBlock const &fb)
 
void doRespondToCloseOutputFiles (FileBlock const &fb)
 
bool doBeginRun (RunPrincipal &rp, ModuleContext const &mc)
 
bool doEndRun (RunPrincipal &rp, ModuleContext const &mc)
 
bool doBeginSubRun (SubRunPrincipal &srp, ModuleContext const &mc)
 
bool doEndSubRun (SubRunPrincipal &srp, ModuleContext const &mc)
 
bool doEvent (EventPrincipal &ep, ModuleContext const &mc, std::atomic< std::size_t > &counts_run, std::atomic< std::size_t > &counts_passed, std::atomic< std::size_t > &counts_failed)
 
- Public Member Functions inherited from art::Observer
 ~Observer () noexcept
 
 Observer (Observer const &)=delete
 
 Observer (Observer &&)=delete
 
Observeroperator= (Observer const &)=delete
 
Observeroperator= (Observer &&)=delete
 
void registerProducts (ProductDescriptions &, ModuleDescription const &)
 
void fillDescriptions (ModuleDescription const &)
 
fhicl::ParameterSetID selectorConfig () const
 
- Public Member Functions inherited from art::ModuleBase
virtual ~ModuleBase () noexcept
 
 ModuleBase ()
 
ModuleDescription const & moduleDescription () const
 
void setModuleDescription (ModuleDescription const &)
 
std::array< std::vector< ProductInfo >, NumBranchTypes > const & getConsumables () const
 
void sortConsumables (std::string const &current_process_name)
 
template<typename T , BranchType BT>
ViewToken< T > consumesView (InputTag const &tag)
 
template<typename T , BranchType BT>
ViewToken< T > mayConsumeView (InputTag const &tag)
 

Private Attributes

std::string fCalWireModuleLabel
 name of module that produced the wires More...
 
std::string fDetSimModuleLabel
 
TH1F * fDiffsR
 histogram of Raw tdc to tdc differences More...
 
TH1F * fDiffsW
 histogram of Wire (post-deconvoution) tdc to tdc differences More...
 
TH1F * fDiffsRW
 
TH1F * fDiffsRWgph
 
TH1F * fMin
 
TH1F * fMax
 
TH1F * fIR
 
TH1F * fCR
 
TH1F * fIW
 
TH1F * fCW
 
TH1F * fRawIndPeak
 
TH1F * fRawColPeak
 
TH1F * fCalIndPeak
 
TH1F * fCalColPeak
 
TH1F * fNoiseHist
 
TH1F * fNoiseRMS
 
TH2F * fWireSig
 
TH2F * fRawSig
 
TH2F * fRD_WireMeanDiff2D
 histogram of difference between original tdc value and compressesed value vs original value More...
 
TH2F * fRD_WireRMSDiff2D
 histogram of difference between original tdc value and compressesed value vs original value More...
 
TH2F * fDiffsRWvsR
 
TH2F * fDiffsRWvsRgph
 
TH2F * fWindow
 

Additional Inherited Members

- Public Types inherited from art::EDAnalyzer
using WorkerType = WorkerT< EDAnalyzer >
 
using ModuleType = EDAnalyzer
 
- Protected Member Functions inherited from art::Observer
std::string const & processName () const
 
bool wantAllEvents () const noexcept
 
bool wantEvent (ScheduleID id, Event const &e) const
 
Handle< TriggerResultsgetTriggerResults (Event const &e) const
 
 Observer (fhicl::ParameterSet const &config)
 
 Observer (std::vector< std::string > const &select_paths, std::vector< std::string > const &reject_paths, fhicl::ParameterSet const &config)
 
- Protected Member Functions inherited from art::ModuleBase
ConsumesCollectorconsumesCollector ()
 
template<typename T , BranchType = InEvent>
ProductToken< T > consumes (InputTag const &)
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > consumesView (InputTag const &)
 
template<typename T , BranchType = InEvent>
void consumesMany ()
 
template<typename T , BranchType = InEvent>
ProductToken< T > mayConsume (InputTag const &)
 
template<typename Element , BranchType = InEvent>
ViewToken< Element > mayConsumeView (InputTag const &)
 
template<typename T , BranchType = InEvent>
void mayConsumeMany ()
 

Detailed Description

Base class for creation of raw signals on wires.

Definition at line 42 of file CalWireAna_module.cc.

Constructor & Destructor Documentation

caldata::CalWireAna::CalWireAna ( fhicl::ParameterSet const &  pset)
explicit

Definition at line 91 of file CalWireAna_module.cc.

92  : EDAnalyzer (pset)
93  , fCalWireModuleLabel(pset.get< std::string >("CalWireModuleLabel"))
94  , fDetSimModuleLabel (pset.get< std::string >("DetSimModuleLabel"))
95  {
96 
97  }
std::string string
Definition: nybbler.cc:12
EDAnalyzer(fhicl::ParameterSet const &pset)
Definition: EDAnalyzer.h:25
std::string fCalWireModuleLabel
name of module that produced the wires
std::string fDetSimModuleLabel

Member Function Documentation

void caldata::CalWireAna::analyze ( const art::Event evt)

read/write access to event

loop over all the raw digits in a window around peak

Definition at line 142 of file CalWireAna_module.cc.

143  {
144 
145  // loop over the raw digits and get the adc vector for each, then compress it and uncompress it
146 
147  lariov::ChannelStatusProvider const& channelStatus
150  evt.getByLabel(fDetSimModuleLabel,rdHandle);
152  evt.getByLabel(fCalWireModuleLabel,wHandle);
153 
154  // get the raw::RawDigit associated by fCalWireModuleLabel to wires in wHandle;
155  // RawDigitsFromWire.at(index) will be a art::Ptr<raw::RawDigit>
156  art::FindOneP<raw::RawDigit> RawDigitsFromWire(wHandle, evt, fCalWireModuleLabel);
157 
159  for(unsigned int i = 0; i < wHandle->size(); ++i){
160  art::Ptr<recob::Wire> w(wHandle,i);
161  wvec.push_back(w);
162  }
164  for(unsigned int i = 0; i < rdHandle->size(); ++i){
165  art::Ptr<raw::RawDigit> r(rdHandle,i);
166  rdvec.push_back(r);
167  }
168 
171  double pedestal = rdvec[0]->GetPedestal();
172  double threshold = 9.0;
173  double signalSize = rdvec[0]->Samples();
174  uint32_t indChan0=64;
175  uint32_t indChan1=110;
176  uint32_t colChan0=312;
177  uint32_t colChan1=354;
178  std::vector<double> ir(fft->FFTSize()),iw(fft->FFTSize()),cr(fft->FFTSize()),cw(fft->FFTSize());
179  ir[signalSize]=iw[signalSize]=cr[signalSize]=cw[signalSize]=1.0;
180  /// loop over all the raw digits in a window around peak
181  for(unsigned int rd = 0; rd < rdvec.size(); ++rd){
182  // Find corresponding wire.
183  std::vector<double> signal(fft->FFTSize());
184  for(unsigned int wd = 0; wd < wvec.size(); ++wd){
185  // if (wvec[wd]->RawDigit() == rdvec[rd]){
186  if (RawDigitsFromWire.at(wd) == rdvec[rd]){
187  std::vector<float> wirSig = wvec[wd]->Signal();
188  if(wirSig.size() > signal.size()) {
189  MF_LOG_DEBUG("CalWireAna")<<"Incompatible vector size "<<wirSig.size()
190  <<" "<<signal.size();
191  return;
192  }
193  for(unsigned int ii = 0; ii < wirSig.size(); ++ii) {
194  signal[ii] = wirSig[ii];
195  }
196  break;
197  }
198  if (wd == (wvec.size()-1) ){
199  MF_LOG_DEBUG("CalWireAna") << "caldata::CalWireAna:Big problem! No matching Wire for RawDigit. Bailing." << rd;
200  return;
201  }
202  }
203 
204  std::vector<double> adc(fft->FFTSize());
205 
206  for(unsigned int t = 1; t < rdvec[rd]->Samples(); ++t){
207  fDiffsR->Fill(rdvec[rd]->ADC(t) - rdvec[rd]->ADC(t-1));
208  adc[t-1]=rdvec[rd]->ADC(t-1);
209  fRawSig->Fill(rd,rdvec[rd]->ADC(t));
210  }
211  //get the last one for the adc vector
212  adc[rdvec[rd]->Samples()-1] = rdvec[rd]->ADC(rdvec[rd]->Samples()-1);
213  if(!channelStatus.IsBad(rdvec[rd]->Channel()) &&
214  (*max_element(adc.begin(),adc.end()) < pedestal+threshold &&
215  *min_element(adc.begin(),adc.end()) >pedestal -threshold)) {
216  double sum=0;
217  for(int i = 0; i < signalSize; i++) sum+=pow(adc[i]-pedestal,2.0);
218  fNoiseRMS->Fill(TMath::Sqrt(sum/(double)signalSize));
219  std::vector<double> temp(fft->FFTSize());
220  std::vector<TComplex> fTemp(fft->FFTSize()/2+1);
221  for(int i = 0; i < signalSize; i++) temp[i]=(adc[i]-pedestal)*sin(TMath::Pi()*(double)i/signalSize);
222  fft->DoFFT(temp,fTemp);
223  for(int i = 0; i < fft->FFTSize()/2+1; i++) fNoiseHist->Fill(i,fTemp[i].Rho());
224  }
225  if(geom->SignalType(rdvec[rd]->Channel()) == geo::kInduction &&
226  rdvec[rd]->Channel() > indChan0 &&
227  rdvec[rd]->Channel() < indChan1){
228  fft->AlignedSum(ir,adc);
229  fft->AlignedSum(iw,signal);
230  }
231  if(geom->SignalType(rdvec[rd]->Channel()) == geo::kCollection &&
232  rdvec[rd]->Channel() > colChan0 &&
233  rdvec[rd]->Channel() < colChan1) {
234  fft->AlignedSum(cr,adc);
235  fft->AlignedSum(cw,signal);
236  }
237  if(geom->SignalType(rdvec[rd]->Channel()) == geo::kInduction) {
238  if(*max_element(adc.begin(),adc.end()) > pedestal+threshold)
239  fRawIndPeak->Fill(*max_element(adc.begin(),adc.end()));
240  if(*max_element(signal.begin(),signal.end()) > pedestal+threshold)
241  fCalIndPeak->Fill(*max_element(signal.begin(),signal.end()));
242  }
243  if(geom->SignalType(rdvec[rd]->Channel()) == geo::kCollection) {
244  if(*max_element(adc.begin(),adc.end()) > pedestal +threshold)
245  fRawColPeak->Fill(*max_element(adc.begin(),adc.end()));
246  if(*max_element(signal.begin(),signal.end()) > pedestal+threshold)
247  fCalColPeak->Fill(*max_element(signal.begin(),signal.end()));
248  }
249 
250  int window = 8;
251  static unsigned int pulseHeight = 5;
252  unsigned int tmin = 1;
253  unsigned int tmax = 1;
254  int indMax = TMath::LocMax(signalSize,&adc[0]);
255  double sigMin = 0.0;
256  double sigMax = TMath::MaxElement(signalSize,&adc[0]);
257  if(geom->SignalType(rdvec[rd]->Channel()) == geo::kInduction && sigMax>=pulseHeight) {
258  int indMin = TMath::LocMin(signalSize,&adc[0]);
259  sigMin = TMath::MinElement(signalSize,&adc[0]);
260  tmin = std::max(indMax-window,0);
261  tmax = std::min(indMin+window,(int)signalSize-1);
262  MF_LOG_DEBUG("CalWireAna") << "Induction channel, indMin,tmin,tmax "
263  << rd<< " " << indMin<< " " << tmin << " " << tmax;
264  }
265  else if (sigMax>=pulseHeight){
266  tmin = std::max(indMax-window,0);
267  tmax = std::min(indMax+window,(int)signalSize-1);
268  MF_LOG_DEBUG("CalWireAna") << "Collection channel, tmin,tmax "<< rd<< " " << tmin << " " << tmax;
269  }
270 
271  fMin->Fill(sigMin);
272  fMax->Fill(sigMax);
273  fWindow->Fill(indMax, tmax - tmin);
274 
275  std::vector<double> winDiffs;
276  int cnt=0;
277  // for(unsigned int t = tmin; t < tmax; ++t)
278  static unsigned int tRawLead = 0;
279  for(unsigned int t = 1; t < signalSize; ++t){
280  fDiffsW->Fill(signal[t]-signal[t-1]);
281  fWireSig->Fill(rd,signal[t]);
282 
283  if (t>=tmin && t<=tmax && tmax>=pulseHeight && (t+tRawLead)<signalSize){
284  cnt++;
285  winDiffs.push_back((adc[t+tRawLead]-signal[t])/adc[t+tRawLead]);
286  fDiffsRW->Fill(adc[t+tRawLead]-signal[t]);
287  fDiffsRWvsR->Fill(rd,adc[t+tRawLead]-signal[t]);
288  if (sigMax >= pulseHeight){
289  fDiffsRWgph->Fill(adc[t+tRawLead]-signal[t]);
290  fDiffsRWvsRgph->Fill(rd,adc[t+tRawLead]-signal[t]);
291  }
292  }
293  }
294 
295  MF_LOG_DEBUG("CalWireAna") << "on channel " << rdvec[rd]->Channel();
296  // TMath::Mean with iterators doesn't work. EC,23-Sep-2010.
297  double tmp = TMath::Mean(winDiffs.size(),&winDiffs[0]);
298  double tmp2 = TMath::RMS(winDiffs.size(),&winDiffs[0]);
299  double tmp3=0;
300  for (unsigned int ii=0; ii<rdvec[rd]->Samples(); ii++) tmp3+=rdvec[rd]->ADC(ii);
301  for(int i = 0; i < fft->FFTSize(); i++) {
302  fIR->Fill(i,ir[i]);
303  fIW->Fill(i,iw[i]);
304  fCR->Fill(i,cr[i]);
305  fCW->Fill(i,cw[i]);
306  }
307  fRD_WireMeanDiff2D->Fill(rd,tmp);
308  fRD_WireRMSDiff2D->Fill(rd,tmp2);
309 
310  }//end loop over rawDigits
311 
312  return;
313  }//end analyze method
virtual bool IsBad(raw::ChannelID_t channel) const =0
Returns whether the specified channel is bad in the current run.
TH2F * fRD_WireMeanDiff2D
histogram of difference between original tdc value and compressesed value vs original value ...
constexpr T pow(T x)
Definition: pow.h:72
int16_t adc
Definition: CRTFragment.hh:202
void DoFFT(std::vector< T > &input, std::vector< TComplex > &output)
Definition: LArFFT.h:98
SigType_t SignalType(geo::PlaneID const &pid) const
Returns the type of signal on the channels of specified TPC plane.
TH1F * fDiffsR
histogram of Raw tdc to tdc differences
int FFTSize() const
Definition: LArFFT.h:69
TH2F * fRD_WireRMSDiff2D
histogram of difference between original tdc value and compressesed value vs original value ...
bool getByLabel(std::string const &label, std::string const &instance, Handle< PROD > &result) const
Definition: DataViewImpl.h:633
void push_back(Ptr< U > const &p)
Definition: PtrVector.h:435
Signal from induction planes.
Definition: geo_types.h:145
string tmp
Definition: languages.py:63
Class providing information about the quality of channels.
static int max(int a, int b)
size_type size() const
Definition: PtrVector.h:302
std::string fCalWireModuleLabel
name of module that produced the wires
T min(sqlite3 *const db, std::string const &table_name, std::string const &column_name)
Definition: statistics.h:55
void AlignedSum(std::vector< T > &input, std::vector< T > &output, bool add=true)
Definition: LArFFT.h:244
std::string fDetSimModuleLabel
#define MF_LOG_DEBUG(id)
TH1F * fDiffsW
histogram of Wire (post-deconvoution) tdc to tdc differences
Signal from collection planes.
Definition: geo_types.h:146
void caldata::CalWireAna::beginJob ( )
virtual

Reimplemented from art::EDAnalyzer.

Definition at line 100 of file CalWireAna_module.cc.

101  {
102  // get access to the TFile service
104 
105  fDiffsR = tfs->make<TH1F>("One timestamp diffs in RawDigits", ";#Delta ADC;", 40, -19.5, 20.5);
106  fDiffsW = tfs->make<TH1F>("One timestamp diffs in Wires", ";#Delta ADC;", 20, -9.5, 10.5);
107  fDiffsRW = tfs->make<TH1F>("Same timestamp diffs in RD-Wires", ";#Delta ADC;", 20, -9.5, 10.5);
108  fDiffsRWvsR = tfs->make<TH2F>("Same timestamp diffs in RD-Wires vs R", ";#Delta ADC;", 481,-0.5,480.5, 20, -9.5, 10.5);
109  fDiffsRWgph = tfs->make<TH1F>("Same timestamp diffs in RD-Wires gph", ";#Delta ADC;", 20, -9.5, 10.5);
110  fDiffsRWvsRgph = tfs->make<TH2F>("Same timestamp diffs in RD-Wires vs R gph", ";#Delta ADC;", 481,-0.5,480.5, 20, -9.5, 10.5);
111  fRawSig = tfs->make<TH2F>("One event, one channel Raw", "timestamp", 481,-0.5,480.5, 21,-0.5, 20.5);
112  fWireSig = tfs->make<TH2F>("One event, one channel Wire", "timestamp", 481,-0.5,480.5, 21, -0.5, 20.5);
113 
114  fRD_WireMeanDiff2D = tfs->make<TH2F>("Mean (Raw-CALD)-over-Raw in Window gph","Wire number",481,-0.05,480.5, 40, -1., 1.);
115  fRD_WireRMSDiff2D = tfs->make<TH2F>("RMS (Raw-CALD)-over-Raw in Window gph","Wire number",481,-0.05,480.5, 10, 0., 2.);
116 
117  fWindow = tfs->make<TH2F>("tmax-tmin vs indMax", "ticks", 200, 0, 2000, 20, -2.5, 60.5);
118  fMin = tfs->make<TH1F>("Value of min", "ticks", 21, -20.5, 0.5);
119  fMax = tfs->make<TH1F>("Value of max", "ticks", 21, 0.5, 20.5);
120  fRawIndPeak = tfs->make<TH1F>("indPeakRaw", ";Induction Peaks Raw;",40,5,45);
121  fRawColPeak = tfs->make<TH1F>("colPeakRaw", ";Collection Peaks Raw;",40,5,45);
122  fCalIndPeak = tfs->make<TH1F>("indPeakCal", ";Induction Peaks Calibrated;",40,5,45);
123  fCalColPeak = tfs->make<TH1F>("colPeakCal", ";Collection Peaks Calibrated;",40,5,45);
124 
125  fIR = tfs->make<TH1F>("Raw Ind signal","time ticks",4096,0.0,4096.);
126  fCR = tfs->make<TH1F>("Raw Coll signal","time ticks",4096,0.0,4096.);
127  fIW = tfs->make<TH1F>("Wire Ind signal","time ticks",4096,0.0,4096.);
128  fCW = tfs->make<TH1F>("Wire Coll signal","time ticks",4096,0.0,4096.);
129  fNoiseHist = tfs->make<TH1F>("Noise Histogram","FFT Bins",2049,0,2049);
130  fNoiseRMS = tfs->make<TH1F>("Noise RMS","RMS",25,0,2.0);
131 
132  return;
133 
134  }
TH2F * fRD_WireMeanDiff2D
histogram of difference between original tdc value and compressesed value vs original value ...
TH1F * fDiffsR
histogram of Raw tdc to tdc differences
TH2F * fRD_WireRMSDiff2D
histogram of difference between original tdc value and compressesed value vs original value ...
TH1F * fDiffsW
histogram of Wire (post-deconvoution) tdc to tdc differences
void caldata::CalWireAna::endJob ( )
virtual

Reimplemented from art::EDAnalyzer.

Definition at line 137 of file CalWireAna_module.cc.

138  {
139  }

Member Data Documentation

TH1F* caldata::CalWireAna::fCalColPeak
private

Definition at line 71 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fCalIndPeak
private

Definition at line 70 of file CalWireAna_module.cc.

std::string caldata::CalWireAna::fCalWireModuleLabel
private

name of module that produced the wires

Definition at line 55 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fCR
private

Definition at line 65 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fCW
private

Definition at line 67 of file CalWireAna_module.cc.

std::string caldata::CalWireAna::fDetSimModuleLabel
private

Definition at line 56 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fDiffsR
private

histogram of Raw tdc to tdc differences

Definition at line 58 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fDiffsRW
private

Definition at line 60 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fDiffsRWgph
private

Definition at line 61 of file CalWireAna_module.cc.

TH2F* caldata::CalWireAna::fDiffsRWvsR
private

Definition at line 78 of file CalWireAna_module.cc.

TH2F* caldata::CalWireAna::fDiffsRWvsRgph
private

Definition at line 79 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fDiffsW
private

histogram of Wire (post-deconvoution) tdc to tdc differences

Definition at line 59 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fIR
private

Definition at line 64 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fIW
private

Definition at line 66 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fMax
private

Definition at line 63 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fMin
private

Definition at line 62 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fNoiseHist
private

Definition at line 72 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fNoiseRMS
private

Definition at line 73 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fRawColPeak
private

Definition at line 69 of file CalWireAna_module.cc.

TH1F* caldata::CalWireAna::fRawIndPeak
private

Definition at line 68 of file CalWireAna_module.cc.

TH2F* caldata::CalWireAna::fRawSig
private

Definition at line 75 of file CalWireAna_module.cc.

TH2F* caldata::CalWireAna::fRD_WireMeanDiff2D
private

histogram of difference between original tdc value and compressesed value vs original value

Definition at line 76 of file CalWireAna_module.cc.

TH2F* caldata::CalWireAna::fRD_WireRMSDiff2D
private

histogram of difference between original tdc value and compressesed value vs original value

Definition at line 77 of file CalWireAna_module.cc.

TH2F* caldata::CalWireAna::fWindow
private

Definition at line 80 of file CalWireAna_module.cc.

TH2F* caldata::CalWireAna::fWireSig
private

Definition at line 74 of file CalWireAna_module.cc.


The documentation for this class was generated from the following file: