Misc/ReadPamGuardBinaries.R

######## ReadPamGuardBinaries.R     code from Taiki Sakai

# Package PamBinaries is on Github.  It is 25 separate R files so the easiest way to 
# get it is to install it with the devtools package.
# 
# library(devtools)
# devtools::install_github('TaikiSan21/PamBinaries')

library(PamBinaries)


# setwd("S:\\1650_PASCAL_2016\\Data\\DASBR_Pamguard_Post_Processing\\Binaries\\Final_Dataset")
# setwd("S:\\1650_PASCAL_2016\\Data\\DASBR_Pamguard_Post_Processing\\Binaries\\Emily")
setwd("S:\\1650_PASCAL_2016\\Data\\DASBR_Pamguard_Post_Processing\\Binaries\\Full_Click_Runs\\Processed_Master_Copies_incomplete")
folders= list.dirs(recursive=F)
nfolders= length(folders)
ifolder=1     #use only for testing

for (ifolder in 1:nfolders) {
    
  files= list.files(folders[ifolder],pattern=glob2rx("Click_Detector_Click_Detector_Clicks*.pgdf"),recursive=TRUE,full.names=TRUE)
  OutputFileName=  paste(sub(pattern="./",replacement="",x=folders[ifolder]),".CSV",sep="")
  first <- TRUE
  nfiles= length(files)
  for (ifile in 1:nfiles) {
    
    cat(ifile," of ",nfiles,"  ",files[ifile],"\n")
    # Useage - loadPamguardBinaryFile will load any binary file type
    binaryData <- loadPamguardBinaryFile(files[ifile])
    
    # This is a list with two objects - data and fileInfo
    
    # To get your grouped click data:
    clickDf <- do.call(rbind, lapply(binaryData$data, function(x) {
        # Grabbing everything but the wave form
        waveId <- grep('wave', names(x))
        data.frame(x[-waveId])
    }))
    clickDf$ClickNo= 0:(length(clickDf$date)-1)
    clickDf$BinaryFile= sub(pattern="./",replacement="/",x=files[ifile])
    # This data is missing the columns in your output created by a 'clickAmplitude'
    # function that you had in Matlab. If you can send me that function I can add it.
    
    # To get waves together:
    nClicks <- length(binaryData$data)
    if (nClicks > 0) {
#       waves <- vector('list', nClicks) # Initializing for speed
#       for(i in 1:nClicks) {
#           waves[[i]] <- binaryData$data[[i]]$wave
#       }
      if (first) {
        write.csv(clickDf,file=OutputFileName,row.names=FALSE)
        first <<- FALSE  
      } else {
        write.table(clickDf,file=OutputFileName,append=TRUE,sep=",",col.names=FALSE,row.names=FALSE)
      }
    }
  
  }
}
TaikiSan21/PamBinaries documentation built on Jan. 9, 2025, 7:20 a.m.