Commit in lcsim-contrib/src/main/java/org/lcsim/contrib/JanStrube/scala on MAIN
MainDriver.scala+35added 1.1
MainLoop.scala+40added 1.1
McParticleDriver.scala+16added 1.1
MuonDriver.scala+45added 1.1
PFO_TrackCounter.scala+33added 1.1
temp.scala+34added 1.1
+203
6 added files
Simple proof of principle scala Drivers
Nice demonstration of the conciseness of the language
Used for debugging the lcsim reco
To compile:
scalac -cp <path-to-lcsim-bin.jar>:. *.scala

To run:
scala -cp <path-to-lcsim-bin.jar>:. MLoop <directory-containing-a-bunch-of-slcio>

Modify MainLoop.scala or temp.scala to load different Drivers.

lcsim-contrib/src/main/java/org/lcsim/contrib/JanStrube/scala
MainDriver.scala added at 1.1
diff -N MainDriver.scala
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ MainDriver.scala	9 Apr 2011 10:57:15 -0000	1.1
@@ -0,0 +1,35 @@
+import org.lcsim.util.Driver
+import org.lcsim.event.EventHeader
+import scala.collection.JavaConversions._
+import org.lcsim.event.MCParticle
+import org.lcsim.util.aida.AIDA
+import org.lcsim.event.ReconstructedParticle
+import hep.physics.vec.VecOp
+import hep.physics.vec.BasicHepLorentzVector
+import org.lcsim.mc.fast.tracking.fix.FastMCTrackFactory
+
+class ScalaDriver extends Driver {
+    val trackFactory = new FastMCTrackFactory("sidloi3", 5, false)
+
+    override def process(event: EventHeader) {
+    	val aida = AIDA.defaultInstance
+        val mcParts = event.getMCParticles.par
+	    val recoParts = event.get(classOf[ReconstructedParticle], "PandoraPFOCollection").par
+	    val recoTracks = event.getTracks.par
+	    // FINALSTATE == 1
+        val chargedParts = mcParts filter(p => p.getGeneratorStatus() == 1 && math.abs(p.getCharge) > 0 && p.getMomentum().magnitude() > 0.5)
+	    val b_neutrinos = mcParts filter (p => (math.abs(p.getPDGID) == 12 || math.abs(p.getPDGID) == 14 || math.abs(p.getPDGID) == 16) && math.abs(p.getParents()(0).getPDGID) / 100 == 5)
+        val b_Mesons = mcParts filter(p => math.abs(p.getPDGID) / 100 == 5)
+        val barrel_bMesons = b_Mesons filter (p => math.abs(VecOp.cosTheta(p.getMomentum)) < 0.7)
+        for (track <- chargedParts) {
+            val t = trackFactory getUnsmearedTrack(track)
+            // d0 == parameter 0
+//            aida.cloud1D("MC_d0", -1).fill(t.getTrackParameter(0))
+            t.getTrackParameter(0)
+        }
+        for (track <- recoTracks) {
+//            aida.cloud1D("reco_d0", -1).fill(track.getTrackParameter(0))
+            track.getTrackParameter(0)
+        }
+    }
+}

lcsim-contrib/src/main/java/org/lcsim/contrib/JanStrube/scala
MainLoop.scala added at 1.1
diff -N MainLoop.scala
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ MainLoop.scala	9 Apr 2011 10:57:15 -0000	1.1
@@ -0,0 +1,40 @@
+// MainLoop.java
+// Java wrapper to enable running outside of JAS3
+// 16-JUL-2005 Jan Strube
+// from a response to the JAS mailing list by Tony Johnson
+
+import java.io.File;
+//import org.lcsim.mc.fast.MCFast;
+import org.lcsim.util.Driver;
+//import org.lcsim.util.aida.AIDA;
+import org.lcsim.util.loop.LCIODriver;
+import org.lcsim.util.loop.LCSimLoop;
+import org.lcsim.util.aida.AIDA
+import org.lcsim.util.loop.LCIOEventSource;
+//import TrackAnalyzer;
+
+object MainLoop {
+    def main(args: Array[String]) {
+        val loop = new LCSimLoop()
+        val input = new File(args(0))
+        val fileList = new java.util.ArrayList[File]
+        for (infile <- input.listFiles) {
+            if (infile.getName endsWith ".slcio") {
+                fileList.add(infile)
+            }
+        }
+        val inputSource = new LCIOEventSource("bb", fileList);
+        loop.setLCIORecordSource(inputSource)
+        val outputFile = new File("x.slcio")
+        val output = new LCIODriver(outputFile)
+        output.setWriteOnlyCollection("SignalParticles")
+        loop.add(new ScalaDriver)
+//        loop.add(new MuonDriver)
+//        loop.add(new McParticleDriver)
+  //      loop.add(output)
+        loop.loop(-1)
+        val aida = AIDA.defaultInstance
+        aida.saveAs("test.aida")
+        loop.dispose()
+    }
+}

lcsim-contrib/src/main/java/org/lcsim/contrib/JanStrube/scala
McParticleDriver.scala added at 1.1
diff -N McParticleDriver.scala
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ McParticleDriver.scala	9 Apr 2011 10:57:15 -0000	1.1
@@ -0,0 +1,16 @@
+import org.lcsim.util.Driver
+import org.lcsim.event.EventHeader
+import scala.collection.JavaConversions._
+import org.lcsim.event.MCParticle
+import org.lcsim.util.aida.AIDA
+
+class McParticleDriver extends Driver {
+    override def process(event: EventHeader) {
+    	val aida = AIDA.defaultInstance
+        val mcParts = event.getMCParticles
+        val mcBGParts = event.get(classOf[MCParticle], "MCParticles_gghad")
+        val signal = mcParts filter(p => ! mcBGParts.contains(p))
+        
+    	event.put("SignalParticles", signal, classOf[MCParticle], 0)
+    }
+}

lcsim-contrib/src/main/java/org/lcsim/contrib/JanStrube/scala
MuonDriver.scala added at 1.1
diff -N MuonDriver.scala
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ MuonDriver.scala	9 Apr 2011 10:57:15 -0000	1.1
@@ -0,0 +1,45 @@
+import org.lcsim.util.Driver
+import org.lcsim.event.EventHeader
+import org.lcsim.event.ReconstructedParticle
+import scala.collection.JavaConversions._
+import org.lcsim.util.aida.AIDA
+import hep.physics.vec.VecOp
+
+class MuonDriver extends Driver {
+	override def process(event: EventHeader) {
+		val mcParts = event.getMCParticles
+		val recoParts = event.get(classOf[ReconstructedParticle], "PandoraPFOCollection")
+		
+		val finalStates = mcParts filter(p => p.getGeneratorStatus == 1 && math.abs(VecOp.cosTheta(p.getMomentum())) < 0.7)
+		val mcMuons = finalStates filter(p => math.abs(p.getPDGID) == 13)
+		val mcProtons = finalStates filter(p => math.abs(p.getPDGID) == 2212)
+		val mcNeutrons = finalStates filter(p => math.abs(p.getPDGID) == 2112)
+		val barrelRecoParts = recoParts filter(p => math.abs(VecOp.cosTheta(p.getMomentum())) < 0.7)
+		val recoMuons = barrelRecoParts filter(p => math.abs(p.getType) == 13)
+		val recoProtons = barrelRecoParts filter (p => math.abs(p.getType) == 2212)
+		val recoNeutrons = barrelRecoParts filter (p => math.abs(p.getType) == 2112)
+		val otherParts = barrelRecoParts filter(p => math.abs(p.getType) != 13 && math.abs(p.getType) != 2212 && math.abs(p.getType) != 2112)
+		val aida = AIDA.defaultInstance
+		
+		val recoProtonE = recoProtons.foldLeft(0.)((r, c) => r + c.getEnergy)
+		val mcProtonE = mcProtons.foldLeft(0.)((r, c) => r + c.getEnergy)
+		val recoMuonE = recoMuons.foldLeft(0.)((r, c) => r + c.getEnergy)
+		val mcMuonE = mcMuons.foldLeft(0.)((r, c) => r + c.getEnergy)
+		val recoNeutronE = recoNeutrons.foldLeft(0.)((r, c) => r + c.getEnergy)
+		val mcNeutronE = mcNeutrons.foldLeft(0.)((r, c) => r + c.getEnergy)
+		
+		for (p <- otherParts) {
+			aida.cloud1D("otherParts").fill(p.getType, 100000)
+		}
+		
+		for (p <- finalStates) {
+			aida.cloud1D("finalStates").fill(p.getPDGID, 100000)
+		}
+		aida.cloud1D("delta_mcMuons").fill(mcMuons.length - recoMuons.length)
+		aida.cloud1D("delta_mcProtons").fill(mcProtons.length - recoProtons.length)
+		aida.cloud1D("delta_mcNeutrons").fill(mcNeutrons.length - recoNeutrons.length)
+		aida.cloud1D("deltaE_Protons").fill(mcProtonE - recoProtonE)
+		aida.cloud1D("deltaE_Muons").fill(mcMuonE - recoMuonE)
+		aida.cloud1D("deltaE_Neutrons").fill(mcNeutronE - recoNeutronE)
+	}
+}
\ No newline at end of file

lcsim-contrib/src/main/java/org/lcsim/contrib/JanStrube/scala
PFO_TrackCounter.scala added at 1.1
diff -N PFO_TrackCounter.scala
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ PFO_TrackCounter.scala	9 Apr 2011 10:57:15 -0000	1.1
@@ -0,0 +1,33 @@
+import org.lcsim.util.Driver
+import org.lcsim.event.EventHeader
+import scala.collection.JavaConversions._
+import org.lcsim.event.MCParticle
+import org.lcsim.util.aida.AIDA
+import org.lcsim.event.ReconstructedParticle
+import hep.physics.vec.VecOp
+import hep.physics.vec.BasicHepLorentzVector
+import org.lcsim.mc.fast.tracking.fix.FastMCTrackFactory
+
+class PFO_TrackCounter extends Driver {
+    var moreTracks:Int = 0
+    val aida = AIDA.defaultInstance
+    
+    def truthMatching() {
+    
+    }
+    
+    
+    override def process(event: EventHeader) {
+	    val recoParts = event.get(classOf[ReconstructedParticle], "PandoraPFOCollection") filter(p => p.getCharge != 0)
+            val noClusters = recoParts filter(p => p.getClusters.size == 0)
+	    //val recoTracks = event.getTracks
+	    //if (recoParts.size < recoTracks.size) {
+	    //    printf("ERROR! %s Event %d in Run %d has more tracks than charged reco particles!\n", event.get("INPUT_FILE").toString, event.getEventNumber, event.getRunNumber)
+	    //    printf("\t nRecoTracks = %d; nTracks = %d\n\n", recoParts.size, recoTracks.size)
+	    //}
+            //println(noClusters.size)
+            if (noClusters.size > 0) {
+                println("FOUND!")
+            }
+    }
+}

lcsim-contrib/src/main/java/org/lcsim/contrib/JanStrube/scala
temp.scala added at 1.1
diff -N temp.scala
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ temp.scala	9 Apr 2011 10:57:15 -0000	1.1
@@ -0,0 +1,34 @@
+// MainLoop.java
+// Java wrapper to enable running outside of JAS3
+// 16-JUL-2005 Jan Strube
+// from a response to the JAS mailing list by Tony Johnson
+
+import java.io.File;
+//import org.lcsim.mc.fast.MCFast;
+import org.lcsim.util.Driver;
+//import org.lcsim.util.aida.AIDA;
+import org.lcsim.util.loop.LCIODriver;
+import org.lcsim.util.loop.LCSimLoop;
+import org.lcsim.util.aida.AIDA
+import org.lcsim.util.loop.LCIOEventSource;
+//import TrackAnalyzer;
+
+object MLoop {
+    def main(args: Array[String]) {
+        val loop = new LCSimLoop()
+        val input = new File(args(0))
+        val fileList = new java.util.ArrayList[File]
+        for (infile <- input.listFiles) {
+            if (infile.getName endsWith ".slcio") {
+                fileList.add(infile)
+            }
+        }
+        val inputSource = new LCIOEventSource("bb", fileList);
+        loop.setLCIORecordSource(inputSource)
+        loop.add(new PFO_TrackCounter)
+        loop.loop(1000)
+        val aida = AIDA.defaultInstance
+        aida.saveAs("t.aida")
+        loop.dispose()
+    }
+}
CVSspam 0.2.8