{"cells":[{"metadata":{"_uuid":"598ea993763a69315e3c8c594af3ab0f358b3309"},"cell_type":"markdown","source":"I'd like to switch from python to R and otherwise.  Some things are easier/faster depending the language or some libraries are available only in one of them. So I, write a vectorized version for the scoring function that runs fast enough to be used as a metric scoring function in ML approaches"},{"metadata":{"_execution_state":"idle","_uuid":"c4a9b02a70ae981d88f8b5a0fb2bd92e35c33ca2","trusted":true,"_cell_guid":"fa14aab8-7bae-492f-897c-840ccf9ba81e"},"cell_type":"code","source":"require(data.table)\nrequire(bit64)\nrequire(dbscan)\n","execution_count":2,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"52d4d8438fabe2f162dc4c1d2b65e4025b0a6df7"},"cell_type":"code","source":"path='../input/train_1/'\n\nscore<-function(sub,dft){\n  df=merge(sub,dft[,.(hit_id,particle_id,weight)])\n  df[,Np:=.N,by=particle_id]# Np = Hits per Particle\n  df[,Nt:=.N,by=track_id]   # Nt = Hits per Track\n  df[,Ntp:=.N,by=list(track_id,particle_id)]# Hits per Particle per Track\n  df[,r1:=Ntp/Nt]\n  df[,r2:=Ntp/Np]\n  sum(df[r1>.5 & r2>.5,weight])\n}","execution_count":6,"outputs":[]},{"metadata":{"_uuid":"10ace5dcdbf13d59b60a138e40c7a162fbef526a"},"cell_type":"markdown","source":"First ,  we take a look to one event and some distributions"},{"metadata":{"trusted":true,"_uuid":"3c554460395c277ad7443b9312cbc1c50780d2a6"},"cell_type":"code","source":"nev=1000\ndfh=fread(paste0(path,'event00000',nev,'-hits.csv'))\ndfh[,r:=sqrt(x*x+y*y+z*z)]\ndfh[,rt:=sqrt(x*x+y*y)]\n\ndfh[,x1:=x/r]\ndfh[,y1:=y/r]\ndfh[,z1:=z/rt]\n\npar(mfrow=c(2,2))\nhist(dfh$x,breaks=500)\nhist(dfh$y,breaks=500)\nhist(dfh$z,breaks=500)\nplot(dfh[,.(x,z)],pch='.',col=rgb(abs(dfh$rt)/1100,0,0,.01))\nplot(dfh[,.(x,y)],pch='.',col=rgb(abs(dfh$r)/3200,0,0,.01))\nhist(dfh$r,breaks=500)\nhist(dfh$rt,breaks=500)\nplot(dfh[,.(x,x1)],pch='.',col=rgb(abs(dfh$z)/3100,0,0,.01))\nplot(dfh[,.(z,z1)],pch='.',col=rgb(abs(dfh$z)/3100,0,0,.01))\nplot(dfh[,.(x,r)],pch='.',col=rgb(abs(dfh$z)/3100,0,0,.01))\n","execution_count":36,"outputs":[]},{"metadata":{"_uuid":"51b9a26e3e10bd6d6017bac4e5b97201b3c1606d"},"cell_type":"markdown","source":"Now,  we score the dbscan solution over 100 events"},{"metadata":{"trusted":true,"_uuid":"ae8b13b6984888586c6335b097844f66688bbd3e"},"cell_type":"code","source":"sc=1:100\nfor(i in 0:99){\n  nev=1000+i\n  dfh=fread(paste0(path,'event00000',nev,'-hits.csv'))\n  dft=fread(paste0(path,'event00000',nev,'-truth.csv'),stringsAsFactors = T)\n\n  dfh[,r:=sqrt(x*x+y*y+z*z)]\n  dfh[,rt:=sqrt(x*x+y*y)]\n\n  dfh[,x1:=x/r]\n  dfh[,y1:=y/r]\n  dfh[,z1:=z/rt]\n\n  dfs=scale((dfh[,.(x1,y1,z1)]))\n  res=dbscan(dfs,eps=.007,minPts = 1)\n  sub=data.table(hit_id=dfh$hit_id,track_id=res$cluster)\n  s=score(sub,dft)\n  print(c(i,s))\n  sc[i+1]=s\n}\n\nmean(sc) \nhist(sc)\n \n","execution_count":32,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"R","language":"R","name":"ir"},"language_info":{"mimetype":"text/x-r-source","name":"R","pygments_lexer":"r","version":"3.4.2","file_extension":".r","codemirror_mode":"r"}},"nbformat":4,"nbformat_minor":1}