LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  November 2014

HPS-SVN November 2014

Subject:

r1446 - in /java/trunk: ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/ ecal-recon/src/main/java/org/hps/recon/ecal/ monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/ steering-files/src/main/resources/org/hps/steering/users/celentan/ users/src/main/java/org/hps/users/celentan/

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Thu, 6 Nov 2014 09:19:44 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (959 lines)

Author: [log in to unmask]
Date: Thu Nov  6 01:19:32 2014
New Revision: 1446

Log:
Commit some files that were on the ecal-commissioning branch. Also, fixed a typo in the ecal event display PassiveViewer.java class

Added:
    java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/DummyRecon.lcsim
    java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/PedestalComputationRaw.lcsim
    java/trunk/users/src/main/java/org/hps/users/celentan/EcalChannelsAmplitude.java
    java/trunk/users/src/main/java/org/hps/users/celentan/RawPedestalComputator.java
Removed:
    java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/EcalMonitoringTestCelentan.lcsim
Modified:
    java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PassiveViewer.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/ECalUtils.java
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplay.java
    java/trunk/users/src/main/java/org/hps/users/celentan/StripChartTest.java

Modified: java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PassiveViewer.java
 =============================================================================
--- java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PassiveViewer.java	(original)
+++ java/trunk/ecal-event-display/src/main/java/org/hps/monitoring/ecal/eventdisplay/ui/PassiveViewer.java	Thu Nov  6 01:19:32 2014
@@ -38,7 +38,7 @@
      * @param min - The lower bound.
      * @param max - The upper bound.
      */
-    public void setScale(int min, int max) {
+    public void setScale(double min, double max) { //A.C. I modified these to double since ecalPanel methods use double
         ecalPanel.setScaleMinimum(min);
         ecalPanel.setScaleMaximum(max);
     }
@@ -48,14 +48,14 @@
      * scale.
      * @param max - The upper bound.
      */
-    public void setScaleMaximum(int max) { ecalPanel.setScaleMaximum(max); }
+    public void setScaleMaximum(double max) { ecalPanel.setScaleMaximum(max); } //A.C. I modified these to double since ecalPanel methods use double
     
     /**
      * Sets the lower bound for the calorimeter display's color mapping
      * scale.
      * @param min - The lower bound.
      */
-    public void setScaleMinimum(int min) { ecalPanel.setScaleMinimum(min); }
+    public void setScaleMinimum(double min) { ecalPanel.setScaleMinimum(min); } //A.C. I modified these to double since ecalPanel methods use double
     
     /**
      * Displays the hits and clusters added by the <code>addHit</code>

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/ECalUtils.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/ECalUtils.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/ECalUtils.java	Thu Nov  6 01:19:32 2014
@@ -98,4 +98,42 @@
         }
         return ret;
     }
+    
+
+    /**
+    * This is a very basic method that, given an array with the raw-waveform (in FADC units), returns the amplitude (in mV)
+    * @param data Array with data from FADC, in fadc units
+    * @param lenght The array lenght
+    * @param pedestalSamples How many samples at the beginning of the array to use for the pedestal. Must be < lenght
+    * @return double[], 0 is the amplitude in mV, 1 is the offest in ADC counts, 2 is the RMS in adc counts
+    */
+   public static double[] computeAmplitude(short [] data, int lenght, int pedestalSamples){
+   	double amplitude,pedestal,noise;
+   	pedestal=0;
+   	noise=0;
+   	amplitude=data[0];
+   	double[] ret={0.,0.,0.};
+   	if (pedestalSamples>lenght){
+   		return ret;
+   	}
+   	for (int jj = 0; jj < lenght; jj++){
+   		if (jj<pedestalSamples){
+   			pedestal+=data[jj];
+   			noise+=data[jj]*data[jj];
+   		}
+   		if (data[jj]>amplitude) amplitude=data[jj];
+   	}
+   	pedestal/=pedestalSamples;
+   	noise/=pedestalSamples;
+   	noise=Math.sqrt(noise-pedestal*pedestal);
+   	amplitude-=pedestal;
+   
+   	amplitude*=adcResolution*1000;
+   	ret[0]=amplitude;
+   	ret[1]=pedestal;
+   	ret[2]=noise;
+   	return ret;
+   	
+   }
+    
 }

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplay.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplay.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalEventDisplay.java	Thu Nov  6 01:19:32 2014
@@ -6,12 +6,20 @@
 import hep.aida.ICloud2D;
 import hep.aida.IPlotter;
 import hep.aida.IPlotterFactory;
+import hep.aida.IPlotterStyle;
 
 import java.awt.Point;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.util.ArrayList;
 import java.util.List;
+import java.lang.System;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.IOException;
+
 
 import org.hps.monitoring.ecal.eventdisplay.event.Cluster;
 import org.hps.monitoring.ecal.eventdisplay.event.EcalHit;
@@ -28,7 +36,7 @@
 import org.lcsim.util.aida.AIDA;
 
 /**
- *  The driver <code>EcalEvendDisplay</code> implements the histogram shown to the user 
+ *  The driver <code>EcalEventDisplay</code> implements the histogram shown to the user 
  * in the fifth tab of the Monitoring Application, when using the Ecal monitoring lcsim file.
  * IT ALSO OPENS KYLE's EVENT DISPLAY <code>PEventViewer</code>.
  * The implementation is as follows:
@@ -54,11 +62,17 @@
     int eventRefreshRate = 1;
     int eventn = 0;
 	int ix,iy,id;
-	
+	int pedSamples=10;
+	
+	double amp,ped,sigma;
+	double hitE;
     int[] windowRaw=new int[47*11];//in case we have the raw waveform, this is the window lenght (in samples)
 	boolean[] isFirstRaw=new boolean[47*11];
 	
-    private PEventViewer viewer; //this is the Kyle event viewer.    
+	
+	boolean enableAllFadc=false; 
+    
+	private PEventViewer viewer; //this is the Kyle event viewer.    
 
     
     ArrayList<IHistogram1D> channelEnergyPlot;
@@ -67,16 +81,32 @@
    // ArrayList<ICloud1D> channelRawWaveform;
     ArrayList<IHistogram2D> channelTimeVsEnergyPlot;
    
+    IPlotterStyle pstyle;
     
     
     double maxEch = 2500 * ECalUtils.MeV;
+    double minEch = -0.1;
+    
+    int itmpx,itmpy;
     
     public EcalEventDisplay() {
     	
     }
 
+    public void setEnableAllFadc(boolean enableAllFadc){
+        this.enableAllFadc = enableAllFadc;
+    }
+    
     public void setMaxEch(double maxEch) {
         this.maxEch = maxEch;
+    }
+    
+    public void setMinEch(double minEch) {
+        this.minEch = minEch;
+    }
+    
+    public void setPedSamples(int pedSamples) {
+        this.pedSamples = pedSamples;
     }
     
     public void setInputCollection(String inputCollection) {
@@ -110,13 +140,12 @@
        //channelRawWaveform=new ArrayList<ICloud1D>();
        channelTimeVsEnergyPlot=new ArrayList<IHistogram2D>();
        //create the histograms for single channel energy and time distribution.
-       //these are NOT shown in this plotter, but are used in the event display.
        for(int ii = 0; ii < (47*11); ii = ii +1){
              int row=ECalUtils.getRowFromHistoID(ii);
              int column=ECalUtils.getColumnFromHistoID(ii);      
-             channelEnergyPlot.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Energy : " + (column) + " "+ (row)+ ": "+ii, 100, 0, maxEch));  
+             channelEnergyPlot.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Energy : " + (column) + " "+ (row)+ ": "+ii, 100, -.2, maxEch));  
              channelTimePlot.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Time : " + (column) + " "+ (row)+ ": "+ii, 100, 0, 400));     
-             channelTimeVsEnergyPlot.add(aida.histogram2D(detector.getDetectorName() + " : " + inputCollection + " : Hit Time Vs Energy : " + (column) + " "+ (row)+ ": "+ii, 100, 0, 400,100, 0, maxEch));              
+             channelTimeVsEnergyPlot.add(aida.histogram2D(detector.getDetectorName() + " : " + inputCollection + " : Hit Time Vs Energy : " + (column) + " "+ (row)+ ": "+ii, 100, 0, 400,100, -.2, maxEch));              
              channelRawWaveform.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Energy : " + (column) + " "+ (row)+ ": "+ii));
              //the above instruction is a terrible hack, just to fill the arrayList with all the elements. They'll be initialized properly during the event readout,
              //since we want to account for possibly different raw waveform dimensions!
@@ -130,49 +159,41 @@
    	   ix=ECalUtils.getColumnFromHistoID(id);  
    	   
    	   
-    	
-    			
-    			
-    			
-    	plotterFactory = aida.analysisFactory().createPlotterFactory("Ecal single channel plots");
+    	plotterFactory = aida.analysisFactory().createPlotterFactory("Single channel");       
+        plotter = plotterFactory.create("Single channel");
+   	    pstyle = this.createDefaultStyle(); 		
+        plotter.setTitle("");
    
-       
-        plotter = plotterFactory.create("Single channel");
-        plotter.setTitle("");
-        plotter.style().setParameter("hist2DStyle", "colorMap");
-        plotter.style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-        plotter.style().dataStyle().fillStyle().setParameter("showZeroHeightBins",Boolean.FALSE.toString());
-        plotter.style().dataStyle().errorBarStyle().setVisible(false);
+     
         plotter.createRegions(2,2);
 
 
-        
-        plotter.region(0).plot(channelEnergyPlot.get(id));
-        plotter.region(0).style().xAxisStyle().setLabel("Hit energy (GeV)");
-        plotter.region(0).style().yAxisStyle().setLabel("");
-        
-        plotter.region(1).plot(channelTimePlot.get(id));           	    
-        plotter.region(1).style().xAxisStyle().setLabel("Hit Time (ns)");
-        plotter.region(1).style().yAxisStyle().setLabel("");
-
-    	plotter.region(2).plot(channelTimeVsEnergyPlot.get(id));
-        plotter.region(2).style().xAxisStyle().setLabel("Hit Time (ns)");
-        plotter.region(2).style().yAxisStyle().setLabel("Hit Energy (GeV)");
-    
-    	
-	    plotter.region(3).plot(channelRawWaveform.get(id));
-	    plotter.region(3).style().xAxisStyle().setLabel("Hit energy (GeV)");
-        plotter.region(3).style().yAxisStyle().setLabel("");
-        plotter.region(3).style().dataStyle().fillStyle().setColor("orange");
-        plotter.region(3).style().dataStyle().markerStyle().setColor("orange");
-        plotter.region(3).style().dataStyle().errorBarStyle().setVisible(false);
-        
-        
+        pstyle.xAxisStyle().setLabel("Hit energy (GeV)");
+        pstyle.yAxisStyle().setLabel("");
+        plotter.region(0).plot(channelEnergyPlot.get(id),pstyle);
+   
+        pstyle.xAxisStyle().setLabel("Hit Time (ns)");
+        pstyle.yAxisStyle().setLabel("");    
+        plotter.region(1).plot(channelTimePlot.get(id),pstyle);           	    
+        
+        pstyle.xAxisStyle().setLabel("Hit Time (ns)");
+        pstyle.yAxisStyle().setLabel("Hit Energy (GeV)");    
+    	plotter.region(2).plot(channelTimeVsEnergyPlot.get(id),pstyle);
+
+    	pstyle.xAxisStyle().setLabel("Hit Energy (GeV)");    
+        pstyle.yAxisStyle().setLabel("");
+        pstyle.dataStyle().fillStyle().setColor("orange");
+        pstyle.dataStyle().markerStyle().setColor("orange");
+        pstyle.dataStyle().errorBarStyle().setVisible(false);
+	    plotter.region(3).plot(channelRawWaveform.get(id),pstyle);
+	
         
         
         System.out.println("Create the event viewer");
         viewer=new PEventViewer();
         viewer.addCrystalListener(this);
+        viewer.setScaleMinimum(minEch);
+        viewer.setScaleMaximum(maxEch);
         System.out.println("Done");
         
       
@@ -189,11 +210,12 @@
     }
 
     @Override
-    public void process(EventHeader event) {
+    public void process(EventHeader event){
     	
     	  int ii;
           int row = 0;
           int column = 0;
+          double[] result;
           
           boolean do_update=false;
     	  if (++eventn % eventRefreshRate == 0) {
@@ -214,12 +236,25 @@
                 column=hit.getIdentifierFieldValue("ix");           	
                 if ((row!=0)&&(column!=0)){
                     ii = ECalUtils.getHistoIDFromRowColumn(row,column);
-                    if (hit.getCorrectedEnergy() > 0) { //A.C. > 0 for the 2D plot drawing                 	
+                    hitE=hit.getCorrectedEnergy();
+                    if (hitE > 0) { //A.C. > 0 for the 2D plot drawing                 	
                     	channelEnergyPlot.get(ii).fill(hit.getCorrectedEnergy());
                         channelTimePlot.get(ii).fill(hit.getTime());
-                        channelTimeVsEnergyPlot.get(ii).fill(hit.getTime(),hit.getCorrectedEnergy());        
-                        if (do_update) viewer.addHit(new EcalHit(column,row, hit.getCorrectedEnergy()));         
+                        channelTimeVsEnergyPlot.get(ii).fill(hit.getTime(),hit.getCorrectedEnergy());                                    
                         }
+                    if ((do_update)){
+                    	if ((hitE>minEch)&&(hitE<maxEch)){
+                    		viewer.addHit(new EcalHit(column,row, hitE));  //before was in >0 check
+                    	}
+                    	else if (hitE>maxEch){
+                    		viewer.addHit(new EcalHit(column,row, maxEch));  
+                    	}
+                    	
+                   
+                    
+                    	
+                    	
+                    	}
                  } 
             }
         }
@@ -230,10 +265,12 @@
                 if (do_update){
                 the_cluster=new Cluster(seedHit.getIdentifierFieldValue("ix"), seedHit.getIdentifierFieldValue("iy"), cluster.getEnergy());
                 for (CalorimeterHit hit : cluster.getCalorimeterHits()) {
-                    if (hit.getRawEnergy() > 0) 
-                        column=hit.getIdentifierFieldValue("ix");
+                	hitE=hit.getCorrectedEnergy();
+                	if ((hitE>minEch)&&(hitE<maxEch)){               
+                		column=hit.getIdentifierFieldValue("ix");
                         row=hit.getIdentifierFieldValue("iy");                	
                         the_cluster.addComponentHit(hit.getIdentifierFieldValue("ix"),hit.getIdentifierFieldValue("iy"));
+                    }
                 }         
                 viewer.addCluster(the_cluster);
                }
@@ -246,19 +283,25 @@
         	for (RawTrackerHit hit : hits) {
         		 row=hit.getIdentifierFieldValue("iy");
                  column=hit.getIdentifierFieldValue("ix");
-                 if ((row!=0)&&(column!=0)&&(!ECalUtils.isInHole(row,column))){
-                     ii = ECalUtils.getHistoIDFromRowColumn(row,column);
-                     if (isFirstRaw[ii]){ //at the very first hit we read for this channel, we need to read the window length and save it
-                    	 isFirstRaw[ii]=false;
-                    	 windowRaw[ii]=hit.getADCValues().length;                   	 
-                    	 channelRawWaveform.set(ii,aida.histogram1D(detector.getDetectorName() + " : " + inputCollectionRaw + " : Raw Waveform : " + (column) + " "+ (row)+ ": "+ii,windowRaw[ii],-0.5*ECalUtils.ecalReadoutPeriod,(-0.5+windowRaw[ii])*ECalUtils.ecalReadoutPeriod));
-                     }
-                     if (do_update){
-                         channelRawWaveform.get(ii).reset();                     
-                         for (int jj = 0; jj < windowRaw[ii]; jj++) {
-                             channelRawWaveform.get(ii).fill(jj*ECalUtils.ecalReadoutPeriod, hit.getADCValues()[jj]*ECalUtils.adcResolution*1000);
-                         }                
-                     } 
+                 if ((row!=0)&&(column!=0)){
+                	 if (!ECalUtils.isInHole(row,column)||(enableAllFadc)){
+                	 
+                		 ii = ECalUtils.getHistoIDFromRowColumn(row,column);
+                		 if (isFirstRaw[ii]){ //at the very first hit we read for this channel, we need to read the window length and save it
+                			 isFirstRaw[ii]=false;
+                			 windowRaw[ii]=hit.getADCValues().length;                   	 
+                			 channelRawWaveform.set(ii,aida.histogram1D(detector.getDetectorName() + " : " + inputCollectionRaw + " : Raw Waveform : " + (column) + " "+ (row)+ ": "+ii,windowRaw[ii],-0.5*ECalUtils.ecalReadoutPeriod,(-0.5+windowRaw[ii])*ECalUtils.ecalReadoutPeriod));
+                		 }
+                		 if (do_update){
+                			 channelRawWaveform.get(ii).reset();                     
+                			 for (int jj = 0; jj < windowRaw[ii]; jj++) {
+                				 channelRawWaveform.get(ii).fill(jj*ECalUtils.ecalReadoutPeriod, hit.getADCValues()[jj]*ECalUtils.adcResolution*1000);
+                			 }                  
+                			 result=ECalUtils.computeAmplitude(hit.getADCValues(),windowRaw[ii],pedSamples);
+                			 channelRawWaveform.get(ii).setTitle("Ampl: "+String.format("%.2f",result[0])+" mV , ped : "+String.format("%.2f",result[1])+" "+String.format("%.2f",result[2])+" ADC counts");
+                			 plotter.region(3).refresh();
+                		 } 	
+                	 }
                  }
             }
         }
@@ -310,50 +353,86 @@
     @Override
 	public void crystalClicked(CrystalEvent e){
     
-    	int itmpx,itmpy;
+    	
     	Point displayPoint,ecalPoint;
     	displayPoint=e.getCrystalID();
     	ecalPoint=viewer.toEcalPoint(displayPoint);
     	itmpx=(int) ecalPoint.getX(); //column
     	itmpy=(int) ecalPoint.getY(); //row
     	
-    	if ((itmpx!=0)&&(itmpy!=0)&&(!ECalUtils.isInHole(itmpy,itmpx))){
-    		ix=itmpx;
-    		iy=itmpy;
-    	    id=ECalUtils.getHistoIDFromRowColumn(iy,ix);
-    	    System.out.println("Crystal event: "+ix+" "+iy+" "+id);
-        
-    	
-       	
-           	plotter.region(0).clear();
-            plotter.region(0).plot(channelEnergyPlot.get(id));
-            plotter.region(0).style().xAxisStyle().setLabel("Hit energy (GeV)");
-            plotter.region(0).style().yAxisStyle().setLabel("");
-            
-            plotter.region(1).clear();
-            plotter.region(1).plot(channelTimePlot.get(id));           	    
-            plotter.region(1).style().xAxisStyle().setLabel("Hit Time (ns)");
-            plotter.region(1).style().yAxisStyle().setLabel("");
-
-    	    plotter.region(2).clear();
-        	plotter.region(2).plot(channelTimeVsEnergyPlot.get(id));
-            plotter.region(2).style().yAxisStyle().setLabel("Hit Energy (GeV)");
-            plotter.region(2).style().xAxisStyle().setLabel("Hit Time (ns)");
+    	if ((itmpx!=0)&&(itmpy!=0))
+    		if (!ECalUtils.isInHole(itmpy,itmpx)||(enableAllFadc)){
+    			ix=itmpx;
+    			iy=itmpy;
+    			id=ECalUtils.getHistoIDFromRowColumn(iy,ix);
+    			System.out.println("Crystal event: "+ix+" "+iy+" "+id);
+        
+    	    
+    	    
+    	    
+    	    
+    			plotter.region(0).clear();
+    			pstyle.xAxisStyle().setLabel("Hit energy (GeV)");
+    			pstyle.yAxisStyle().setLabel("");
+    			plotter.region(0).plot(channelEnergyPlot.get(id),pstyle);
+       
+    			plotter.region(1).clear();
+    			pstyle.xAxisStyle().setLabel("Hit Time (ns)");
+    			pstyle.yAxisStyle().setLabel("");    
+    			plotter.region(1).plot(channelTimePlot.get(id),pstyle);           	    
+     
+    			plotter.region(2).clear();
+    			pstyle.xAxisStyle().setLabel("Hit Time (ns)");
+    			pstyle.yAxisStyle().setLabel("Hit Energy (GeV)");    
+    			plotter.region(2).plot(channelTimeVsEnergyPlot.get(id),pstyle);
+
+    			plotter.region(3).clear();
         	
-    	    plotter.region(3).clear();
-    	    plotter.region(3).plot(channelRawWaveform.get(id));
-    	    if (!isFirstRaw[id]){
-    	        plotter.region(3).style().yAxisStyle().setLabel("Signal amplitude (mV)");
-                plotter.region(3).style().xAxisStyle().setLabel("Time (ns)");
-                plotter.region(3).style().dataStyle().fillStyle().setColor("orange");
-                plotter.region(3).style().dataStyle().markerStyle().setColor("orange");
-                plotter.region(3).style().dataStyle().errorBarStyle().setVisible(false);
-    	    }
-    	    else{
-    	    	 plotter.region(3).style().xAxisStyle().setLabel("Hit energy (GeV)");
-    	         plotter.region(3).style().yAxisStyle().setLabel("");
-    	    }
+        	 
+    			if (!isFirstRaw[id]){
+    				pstyle.yAxisStyle().setLabel("Signal amplitude (mV)");
+    				pstyle.xAxisStyle().setLabel("Time (ns)");
+    				pstyle.dataStyle().fillStyle().setColor("orange");
+    				pstyle.dataStyle().markerStyle().setColor("orange");
+    				pstyle.dataStyle().errorBarStyle().setVisible(false);
+    			}
+    			else{
+    				pstyle.xAxisStyle().setLabel("Hit Energy (GeV)");    
+    				pstyle.yAxisStyle().setLabel("");  	    
+    			}
+    			plotter.region(3).plot(channelRawWaveform.get(id),pstyle);       
     	}
     }    
+    
+    
+    /*
+     * This method set the default style.
+     */
+    public IPlotterStyle createDefaultStyle() {
+    	IPlotterStyle pstyle = plotterFactory.createPlotterStyle();
+    	// Axis appearence.
+    	pstyle.xAxisStyle().labelStyle().setBold(true);
+    	pstyle.yAxisStyle().labelStyle().setBold(true);
+    	pstyle.xAxisStyle().tickLabelStyle().setBold(true);
+    	pstyle.yAxisStyle().tickLabelStyle().setBold(true);
+    	pstyle.xAxisStyle().lineStyle().setColor("black");
+    	pstyle.yAxisStyle().lineStyle().setColor("black");
+    	pstyle.xAxisStyle().lineStyle().setThickness(2);
+    	pstyle.yAxisStyle().lineStyle().setThickness(2);
+    	
+    	pstyle.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+    	pstyle.dataStyle().fillStyle().setParameter("showZeroHeightBins",Boolean.FALSE.toString());
+    	pstyle.dataStyle().errorBarStyle().setVisible(false);
+        pstyle.setParameter("hist2DStyle", "colorMap");
+    	// Force auto range to zero.
+    	pstyle.yAxisStyle().setParameter("allowZeroSuppression", "false");
+    	pstyle.xAxisStyle().setParameter("allowZeroSuppression", "false");
+    	// Title style.
+    	pstyle.titleStyle().textStyle().setFontSize(20);
+    	// Draw caps on error bars.
+    	pstyle.dataStyle().errorBarStyle().setParameter("errorBarDecoration", (new Float(1.0f)).toString());
+    	// Turn off grid lines until explicitly enabled.
+    	pstyle.gridStyle().setVisible(false);
+    	return pstyle;
+    	}   
 }
-

Added: java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/DummyRecon.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/DummyRecon.lcsim	(added)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/DummyRecon.lcsim	Thu Nov  6 01:19:32 2014
@@ -0,0 +1,55 @@
+<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" 
+       xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">       
+    <control>
+        <numberOfEvents>-1</numberOfEvents> 
+        <printInputFiles>true</printInputFiles>
+        <printDriversDetailed>true</printDriversDetailed>
+    </control>    
+    <execute>
+        <driver name="EventMarkerDriver"/>
+  <!--      <driver name="ConditionsDriver"/> -->
+        <driver name="CalibrationDriver"/>
+        <driver name="EcalRawConverter"/>     
+        <driver name="EcalChannelsAmplitude"/>     
+ 		
+
+
+<!--        <driver name="RunControlDriver" />-->
+      <driver name="AidaSaveDriver"/>
+      <driver name="CleanupDriver"/>
+    </execute>   
+    
+<!--  Here starts the drivers description -->
+    <drivers>
+       <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
+            <eventInterval>1</eventInterval>
+        </driver>
+
+        <driver name="CalibrationDriver" type="org.hps.conditions.deprecated.CalibrationDriver"/>   
+        
+        <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
+<!--            <threshold>150</threshold>-->
+            <applyBadCrystalMap>false</applyBadCrystalMap>
+<!--            <dropBadFADC>true</dropBadFADC>-->
+        </driver> 
+        
+            
+        <driver name="EcalChannelsAmplitude" type="org.hps.users.celentan.EcalChannelsAmplitude">
+            <inputCollection>EcalCalHits</inputCollection>
+            <inputCollectionRaw>EcalReadoutHits</inputCollectionRaw>
+            <inputClusterCollection>EcalClusters</inputClusterCollection>
+            <enableAllFadc>true</enableAllFadc>
+            <pedSamples>20</pedSamples>
+            <maxEch>10.0</maxEch>
+            <minEch>-0.01</minEch>
+            <eventRefreshRate>100</eventRefreshRate>
+        </driver>
+      
+         <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
+            <outputFileName>${outputFile}</outputFileName>
+        </driver>
+            
+        <driver name="CleanupDriver" type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver"/>
+    </drivers>
+</lcsim>
+    

Added: java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/PedestalComputationRaw.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/PedestalComputationRaw.lcsim	(added)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/PedestalComputationRaw.lcsim	Thu Nov  6 01:19:32 2014
@@ -0,0 +1,36 @@
+<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" 
+       xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">       
+    <control>
+        <numberOfEvents>-1</numberOfEvents> 
+        <printInputFiles>true</printInputFiles>
+        <printDriversDetailed>true</printDriversDetailed>
+    </control>    
+    <execute>
+        <driver name="EventMarkerDriver"/>
+  <!--      <driver name="ConditionsDriver"/> -->
+        <driver name="CalibrationDriver"/>
+        <driver name="EcalRawConverter"/>     
+        <driver name="Pedestal"/>        
+
+
+<!--        <driver name="RunControlDriver" />-->
+        <!--<driver name="AidaSaveDriver"/>-->
+    </execute>   
+    
+<!--  Here starts the drivers description -->
+    <drivers>
+       <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
+            <eventInterval>1</eventInterval>
+        </driver>
+
+        <driver name="CalibrationDriver" type="org.hps.conditions.deprecated.CalibrationDriver"/>   
+        
+        <driver name="EcalRawConverter" type="org.hps.recon.ecal.EcalRawConverterDriver">
+<!--            <threshold>150</threshold>-->
+            <applyBadCrystalMap>false</applyBadCrystalMap>
+<!--            <dropBadFADC>true</dropBadFADC>-->
+        </driver> 
+        <driver name="Pedestal" type="org.hps.users.celentan.RawPedestalComputator"/>               
+    </drivers>
+</lcsim>
+    

Added: java/trunk/users/src/main/java/org/hps/users/celentan/EcalChannelsAmplitude.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/celentan/EcalChannelsAmplitude.java	(added)
+++ java/trunk/users/src/main/java/org/hps/users/celentan/EcalChannelsAmplitude.java	Thu Nov  6 01:19:32 2014
@@ -0,0 +1,201 @@
+package org.hps.users.celentan;
+
+import hep.aida.IHistogram1D;
+import hep.aida.IHistogram2D;
+import hep.aida.ICloud1D;
+import hep.aida.ICloud2D;
+import hep.aida.IPlotter;
+import hep.aida.IPlotterFactory;
+import hep.aida.IPlotterStyle;
+
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.List;
+import java.lang.System;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.IOException;
+
+import org.hps.recon.ecal.ECalUtils;
+import org.hps.recon.ecal.HPSEcalCluster;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.geometry.Detector;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+
+/**
+ *  The driver <code>EcalChannelAmplitude</code> implements the histogram shown to the user 
+ * in the fifth tab of the Monitoring Application, when using the Ecal monitoring lcsim file.
+ * The implementation is as follows:
+ * - The event display is opened in a separate window
+ * - It is updated regularly, according to the event refresh rate
+ * - If the user clicks on a crystal, the corresponding energy and time distributions (both Histogram1D) are shown in the last panel of the MonitoringApplication,
+ * as well as a 2D histogram (hit time vs hit energy). Finally, if available, the raw waveshape (in mV) is displayed.
+ * 
+ * @author Andrea Celentano
+ *  *
+ */
+
+public class EcalChannelsAmplitude extends Driver{
+
+  
+    String inputCollection = "EcalCalHits";
+    String inputCollectionRaw = "EcalReadoutHits";
+    String clusterCollection = "EcalClusters";
+
+    private AIDA aida=AIDA.defaultInstance();
+    private Detector detector;
+  
+    int eventRefreshRate = 1;
+    int eventn = 0;
+	int ix,iy,id;
+	int pedSamples=10;
+	
+	double amp,ped,sigma;
+	double hitE;
+    int[] windowRaw=new int[47*11];//in case we have the raw waveform, this is the window lenght (in samples)
+	boolean[] isFirstRaw=new boolean[47*11];
+	
+	
+	boolean enableAllFadc=false; 
+   
+
+    
+    ArrayList<IHistogram1D> channelAmplitudePlot;
+    ArrayList<IHistogram1D> channelRawWaveform;
+   
+   
+    
+    double maxEch = 2500 * ECalUtils.MeV;
+    double minEch = -0.1;
+    
+    int itmpx,itmpy;
+    
+    public  EcalChannelsAmplitude() {
+    	
+    }
+
+    public void setEnableAllFadc(boolean enableAllFadc){
+        this.enableAllFadc = enableAllFadc;
+    }
+    
+    public void setMaxEch(double maxEch) {
+        this.maxEch = maxEch;
+    }
+    
+    public void setMinEch(double minEch) {
+        this.minEch = minEch;
+    }
+    
+    public void setPedSamples(int pedSamples) {
+        this.pedSamples = pedSamples;
+    }
+    
+    public void setInputCollection(String inputCollection) {
+        this.inputCollection = inputCollection;
+    }
+    
+    public void setInputCollectionRaw(String inputCollectionRaw) {
+        this.inputCollectionRaw = inputCollectionRaw;
+    }
+    
+    public void setInputClusterCollection(String inputClusterCollection) {
+        this.clusterCollection = inputClusterCollection;
+    }
+    
+    public void setEventRefreshRate(int eventRefreshRate) {
+        this.eventRefreshRate = eventRefreshRate;
+    }
+    
+    @Override
+    public void detectorChanged(Detector detector) {
+    	System.out.println("Ecal event display detector changed");
+        this.detector = detector;
+    	
+    	aida.tree().cd("/");
+    	
+      
+    	
+       channelAmplitudePlot=new ArrayList<IHistogram1D>();
+       channelRawWaveform=new ArrayList<IHistogram1D>();
+       //create the histograms for single channel energy and time distribution.
+       for(int ii = 0; ii < (47*11); ii = ii +1){
+             int row=ECalUtils.getRowFromHistoID(ii);
+             int column=ECalUtils.getColumnFromHistoID(ii);      
+             channelAmplitudePlot.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Amplitude : " + (column) + " "+ (row)+ ": "+ii, 100, -.2, 2100.));           
+             channelRawWaveform.add(aida.histogram1D(detector.getDetectorName() + " : " + inputCollection + " : Hit Amplitude : " + (column) + " "+ (row)+ ": "+ii));
+             //the above instruction is a terrible hack, just to fill the arrayList with all the elements. They'll be initialized properly during the event readout,
+             //since we want to account for possibly different raw waveform dimensions!
+         
+             
+             isFirstRaw[ii]=true;
+             windowRaw[ii]=1;
+       }
+       id=0;
+       iy=ECalUtils.getRowFromHistoID(id);
+   	   ix=ECalUtils.getColumnFromHistoID(id);        
+    }
+
+    @Override
+    public void endOfData() {
+     System.out.println("END OF DATA");
+    }
+
+    @Override
+    public void process(EventHeader event){
+    	
+    	  int ii;
+          int row = 0;
+          int column = 0;
+          double[] result;
+          
+           	
+     if (event.hasCollection(RawTrackerHit.class, inputCollectionRaw)){       	
+        	List<RawTrackerHit> hits = event.get(RawTrackerHit.class, inputCollectionRaw);
+        	for (RawTrackerHit hit : hits) {
+                row=hit.getIdentifierFieldValue("iy");
+                column=hit.getIdentifierFieldValue("ix");        
+                ii = ECalUtils.getHistoIDFromRowColumn(row,column);             
+                if ((row!=0)&&(column!=0)&&(!(ECalUtils.isInHole(row,column)))){
+                	if (isFirstRaw[ii]){ //at the very first hit we read for this channel, we need to read the window length and save it
+           			 isFirstRaw[ii]=false;
+           			 windowRaw[ii]=hit.getADCValues().length;                   	 
+           			 channelRawWaveform.set(ii,aida.histogram1D(detector.getDetectorName() + " : " + inputCollectionRaw + " : Raw Waveform : " + (column) + " "+ (row)+ ": "+ii,windowRaw[ii],-0.5*ECalUtils.ecalReadoutPeriod,(-0.5+windowRaw[ii])*ECalUtils.ecalReadoutPeriod));
+           		 }                       
+                 result=ECalUtils.computeAmplitude(hit.getADCValues(),windowRaw[ii],pedSamples);
+                 channelAmplitudePlot.get(ii).fill(result[0]);                                    
+                 } 
+            }
+        }        
+     
+    }
+    
+    /*
+    @Override
+    public void reset(){
+        for(int ii = 0; ii < (47*11); ii = ii +1){         
+            channelEnergyPlot.get(ii).reset();
+            channelTimePlot.get(ii).reset();
+            channelTimeVsEnergyPlot.get(ii).reset();
+        }
+    }
+    */
+    
+    
+	
+	
+    
+    
+}
+
+
+
+
+
+

Added: java/trunk/users/src/main/java/org/hps/users/celentan/RawPedestalComputator.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/celentan/RawPedestalComputator.java	(added)
+++ java/trunk/users/src/main/java/org/hps/users/celentan/RawPedestalComputator.java	Thu Nov  6 01:19:32 2014
@@ -0,0 +1,131 @@
+package org.hps.users.celentan;
+
+import java.util.List;
+
+import org.hps.conditions.deprecated.EcalConditions;
+import org.hps.recon.ecal.ECalUtils;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.GenericObject;
+import org.lcsim.event.RawCalorimeterHit;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.geometry.Detector;
+import org.lcsim.lcio.LCIOConstants;
+import org.lcsim.util.Driver;
+import java.io.PrintWriter;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+
+public class RawPedestalComputator extends Driver{
+	
+	   String inputCollectionRaw = "EcalReadoutHits";
+	   int row,column;
+	   
+	   int[] windowRaw=new int[47*11];//in case we have the raw waveform, this is the window lenght (in samples)
+	   boolean[] isFirstRaw=new boolean[47*11];  
+	   
+	   double[] pedestal=new double[47*11];
+	   double[] noise=new double[47*11];
+	   double[] result;
+	   
+	   int pedSamples=50;
+	   int nEvents=0;
+	   @Override
+	    public void detectorChanged(Detector detector) {
+	    	System.out.println("Pedestal computator: detector changed");
+	    	for (int ii=0;ii<11*47;ii++){
+	    		isFirstRaw[ii]=true;
+	    		pedestal[ii]=0;
+	    		noise[ii]=0;
+	    	}
+	   }
+	   
+
+	    @Override
+	    public void process(EventHeader event) {
+	    	int ii=0;
+	    	if (event.hasCollection(RawTrackerHit.class, inputCollectionRaw)){       	
+	    		List<RawTrackerHit> hits = event.get(RawTrackerHit.class, inputCollectionRaw);
+	          	for (RawTrackerHit hit : hits) {
+	          		row=hit.getIdentifierFieldValue("iy");
+	                column=hit.getIdentifierFieldValue("ix");	
+	                ii = ECalUtils.getHistoIDFromRowColumn(row,column);
+	                if ((row!=0)&&(column!=0)){
+	                	if (!ECalUtils.isInHole(row,column)){
+	                		if (isFirstRaw[ii]){ //at the very first hit we read for this channel, we need to read the window length and save it
+	                			isFirstRaw[ii]=false;
+	                			windowRaw[ii]=hit.getADCValues().length;  
+	                		 }
+	                  		result=ECalUtils.computeAmplitude(hit.getADCValues(),windowRaw[ii],pedSamples);
+	                  		pedestal[ii]+=result[1];
+	                  		noise[ii]+=result[2];	                  		
+	                	}
+	                }	
+	          	}		
+	    	  }	
+	    	nEvents++;
+	    }
+	    
+	    @Override
+	    public void endOfData() {
+	    	try{
+	    	PrintWriter writerTop = new PrintWriter("default01.ped","UTF-8");
+    		PrintWriter writerBottom = new PrintWriter("default02.ped","UTF-8");	
+	    	
+	    	for (int ii=0;ii<11*47;ii++){	    	
+	    		int row,column;	
+	    		row=ECalUtils.getRowFromHistoID(ii);
+	    		column=ECalUtils.getColumnFromHistoID(ii);
+	    		if (ECalUtils.isInHole(row,column)) continue;
+   				if ((row==0)||(column==0)) continue;
+	    		pedestal[ii]/=nEvents;
+	    		noise[ii]/=nEvents;
+
+	    		long daqID=EcalConditions.physicalToDaqID(EcalConditions.makePhysicalID(column,row));
+	    		
+	    		int crate=EcalConditions.getCrate(daqID);
+	    		int slot=EcalConditions.getSlot(daqID);
+	    		int channel=EcalConditions.getChannel(daqID);
+
+	    		System.out.println(column+" "+row+" "+crate+" "+slot+" "+channel+" "+pedestal[ii]+" "+noise[ii]);
+	    		
+	    		
+	    		
+	    		if (crate==37){
+	    			writerTop.print(slot+" "+channel+" "+(int)(Math.round(pedestal[ii]))+" "+(int)(Math.round(noise[ii]))+"\r\n");
+	    		}
+	    		else if (crate==39){
+	    			writerBottom.print(slot+" "+channel+" "+(int)(Math.round(pedestal[ii]))+" "+(int)(Math.round(noise[ii]))+"\r\n");
+	    		}
+	    		
+	    	}
+
+    		writerTop.close();
+    		writerBottom.close();
+	    	}
+	    	 catch(FileNotFoundException fnfe)
+	        {
+
+	            System.out.println(fnfe.getMessage());
+
+	        }
+
+	        catch(IOException ioe)
+	        {
+
+	            System.out.println(ioe.getMessage());
+
+	        }
+	    }
+}
+
+
+
+
+
+
+
+
+
+

Modified: java/trunk/users/src/main/java/org/hps/users/celentan/StripChartTest.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/celentan/StripChartTest.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/celentan/StripChartTest.java	Thu Nov  6 01:19:32 2014
@@ -6,5 +6,5 @@
  */
 public class StripChartTest  {
            
-    
+	int dummy;    
 }

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use