Print

Print


Commit in java/trunk/users/src/main/java/org/hps/users/luca on MAIN
mycluster2.java+298added 690


java/trunk/users/src/main/java/org/hps/users/luca
mycluster2.java added at 690
--- java/trunk/users/src/main/java/org/hps/users/luca/mycluster2.java	                        (rev 0)
+++ java/trunk/users/src/main/java/org/hps/users/luca/mycluster2.java	2014-06-09 10:24:16 UTC (rev 690)
@@ -0,0 +1,298 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.hps.users.luca;
+import hep.aida.IHistogram1D;
+import hep.aida.IHistogram2D;
+import java.io.IOException;
+import java.util.*;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+import org.hps.readout.ecal.ClockSingleton;
+import org.hps.readout.ecal.TriggerDriver;
+
+import org.hps.recon.ecal.ECalUtils;
+import org.hps.recon.ecal.HPSEcalCluster;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.EventHeader;
+import org.lcsim.geometry.Detector;
+import org.lcsim.util.aida.AIDA;
+import org.lcsim.util.Driver;
+import hep.aida.*;
+import hep.aida.IHistogram3D;
+import java.io.FileWriter;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.MCParticle;
+
+/**
+ * 
+ * @author Luca Colaneri 
+ */
+public class mycluster2 extends Driver {
+    int posx=0;
+    int posy=6;
+    int Clustercount=0;
+    protected String clusterCollectionName = "EcalClusters";
+    
+    ArrayList<HPSEcalCluster> ClusterQueue;
+    List<HPSEcalCluster> goodCluster;
+ 
+    private FileWriter writer;
+    //private FileWriter writer2;
+    String outputFileName = "ClusterInfoTutti.txt";
+   // String outputFileName2 = "ClusterEnePos2.txt";
+
+ // AIDA aida = AIDA.defaultInstance();
+
+   
+ 
+   
+ //   IHistogram2D MCendpoint = aida.histogram2D("endpoint MCParticles ",700,-350,350,200,-100,100);
+  // IHistogram1D ClusterEne = aida.histogram1D("energia cluster", 100, 0.0,3.0);
+   
+   
+   
+   double[] position;
+    public void setClusterPosition (int posix, int posiy){
+    this.posx=posix;
+    this.posy=posiy;
+    }
+   
+    public void setClusterCollectionName(String clusterCollectionName) {
+        this.clusterCollectionName = clusterCollectionName;
+    }
+ 
+   public void setOutputFileName(String outputFileName){
+this.outputFileName = outputFileName;
+}
+  /*
+   *
+   *
+   *
+   */
+   
+   @Override   
+public void startOfData(){
+
+ 
+    ClusterQueue=new ArrayList<HPSEcalCluster>();
+    goodCluster = new ArrayList<HPSEcalCluster>();
+    
+    
+    try{
+    //initialize the writers
+    writer=new FileWriter(outputFileName,true);
+ //   writer2=new FileWriter(outputFileName2);
+    //Clear the files
+    //writer.write("");
+  //  writer2.write("");
+}
+catch(IOException e ){
+System.err.println("Error initializing output file for event display.");
+}
+}
+  
+@Override
+public void endOfData(){
+System.out.println("Ho contato" + Clustercount + "clusters \n");
+    ClusterAnalyzer();
+    try{
+//close the file writer.
+    writer.close();
+   // writer2.close();
+    }
+catch(IOException e){
+    System.err.println("Error closing utput file for event display.");
+}
+} 
+   
+ @Override  
+ public void process (EventHeader event){
+   
+          
+           
+           
+     
+     
+     if(event.hasCollection(HPSEcalCluster.class, "EcalClusters")) {
+            
+         fillQueue(event.get(HPSEcalCluster.class, clusterCollectionName));
+          
+            
+            }       
+    
+}
+ /**
+ * Puts cluster collected from events in the ClusterQueue
+ */
+ public void fillQueue (List<HPSEcalCluster> ecalClusters){
+ for(HPSEcalCluster cluster : ecalClusters)
+ {
+     
+     ClusterQueue.add(cluster);
+ }
+ 
+ 
+ }
+ /**
+  * For each crystal, looks for clusters that hit that clystar, if it is an isolated cluster, it's put in goodclusterqueue
+  */
+ public void ClusterAnalyzer(){
+ 
+
+ ///cerca i cluster nella posizione che ci interessa poi chiama la funzione che decide se sono "isolati"
+   //System.out.println("Sta partendo il for sulla Queue \n");
+ for(int y=-5;y<6;y++){
+     for(int x=-23;x<24;x++){
+      posx=x;
+      posy=y;
+         
+         
+    for(int i=0; i< ClusterQueue.size(); i++){
+    if(ClusterQueue.get(i).getSeedHit().getIdentifierFieldValue("ix")== posx && ClusterQueue.get(i).getSeedHit().getIdentifierFieldValue("iy")==posy && ClusterQueue.get(i).getEnergy()>1.6){
+        // System.out.println("sono nel primo if, ovvero ci sono cluster dove voglio io");
+           if(ClusterChecker(i)){
+      goodCluster.add(ClusterQueue.get(i));}
+      }
+     
+     
+    }
+ 
+ 
+ 
+ }
+ }
+ 
+ 
+ int id;
+ for(HPSEcalCluster cluster :goodCluster){
+   Clustercount++;
+   id=getCrystal(cluster);
+     try{
+     writer.append(id + " " + cluster.getSeedHit().getIdentifierFieldValue("ix") + " " + cluster.getSeedHit().getIdentifierFieldValue("iy")+ " " + cluster.getEnergy()+ " " + cluster.getSize() + " " + cluster.getSeedHit().getRawEnergy() + " ");
+     /*for(CalorimeterHit hit : cluster.getCalorimeterHits())
+     {writer.append(hit.getRawEnergy()+ " ");
+       }*/
+     writer.append("\n");
+     }
+     
+   catch(IOException e ){System.err.println("Error writing tooutput for event display");}   
+     
+ }
+ // System.out.println("Ci sono " + Clustercount + "cluster! \n" );
+ }
+ /**
+  * Check if the cluster is isolaterd checking if there are clusters near it in time and in space
+  * @param pos
+  * @return 
+  */
+ 
+public boolean ClusterChecker (int pos){
+//System.out.println("Sono nel clustercheck! \n");
+    
+boolean check=true;
+    double deltaT=0;
+    for (int i=(pos-5);i<pos+5;i++){
+        ///controlla che non esca da array
+        if(i>=0 && i < ClusterQueue.size()){
+            deltaT=Math.abs(ClusterQueue.get(i).getSeedHit().getTime()-ClusterQueue.get(pos).getSeedHit().getTime());
+    ///controlla la differenza temporale che deve essere >80ns, se è maggiore, check=true, se è minore, checka la posizione
+     if(deltaT<80)
+     {check=PositionChecker(i);}
+            
+        
+        }
+    }
+return check;
+
+}
+      
+ public boolean PositionChecker(int i){
+       boolean test=true;
+
+//controllo su posizione orizzontale
+     if(ClusterQueue.get(i).getSeedHit().getIdentifierFieldValue("ix")< posx-2 || ClusterQueue.get(i).getSeedHit().getIdentifierFieldValue("ix")> posx+2){
+        //se orizzonale soddisfatto, controllo verticale
+         if(ClusterQueue.get(i).getSeedHit().getIdentifierFieldValue("iy")< posy-2 || ClusterQueue.get(i).getSeedHit().getIdentifierFieldValue("ix")> posy+2){
+         test= true;
+         }
+     
+     }
+     
+     else{
+     test= false;}
+     
+     return test;
+ }
+ 
+ public int getCrystal (HPSEcalCluster cluster){
+ int x,y,id=0;
+ x= -1*cluster.getSeedHit().getIdentifierFieldValue("ix");
+ y= cluster.getSeedHit().getIdentifierFieldValue("iy");
+ 
+ if(y==5){
+ if(x<0)
+ {id=x+24;}
+ else id= x+23;
+ }
+ 
+ else if(y==4)
+ {if(x<0){
+  id=x+70;}
+ else id=x+69;}
+ 
+ else if(y==3)
+ {if(x<0){
+  id=x+116;}
+ else id=x+115;}
+ 
+ else if(y==2)
+ {if(x<0){
+  id=x+162;}
+ else id=x+161;}
+ 
+ else if(y==1)
+ {if(x<0){
+  id=x+208;}
+ else id=x+198;}
+ 
+  else if(y==-1)
+ {if(x<0){
+  id=x+245;}
+ else id=x+235;}
+ 
+ else if(y==-2)
+ {if(x<0){
+  id=x+282;}
+ else id=x+281;}
+ 
+  else if(y==-3)
+ {if(x<0){
+  id=x+328;}
+ else id=x+327;}
+ 
+ else if(y==-4)
+ {if(x<0){
+  id=x+374;}
+ else id=x+373;}
+ 
+ else if(y==-5)
+ {if(x<0){
+  id=x+420;}
+ else id=x+419;}
+ 
+ return id;
+ 
+ }
+ 
+ } //chiusura driver  
+    
+    
+    
SVNspam 0.1