Print

Print


Commit in java/trunk/users/src/main/java/org/lcsim/hps/users/gcharles on MAIN
FADCSignalAnalysis.java+109-6251 -> 252
add Gabriel's FADC debug plots

java/trunk/users/src/main/java/org/lcsim/hps/users/gcharles
FADCSignalAnalysis.java 251 -> 252
--- java/trunk/users/src/main/java/org/lcsim/hps/users/gcharles/FADCSignalAnalysis.java	2014-02-21 20:03:22 UTC (rev 251)
+++ java/trunk/users/src/main/java/org/lcsim/hps/users/gcharles/FADCSignalAnalysis.java	2014-02-21 20:11:10 UTC (rev 252)
@@ -1,10 +1,14 @@
 package org.lcsim.hps.users.gcharles;
 
 import hep.aida.IHistogram1D;
+
 import java.util.List;
+
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.EventHeader;
 import org.lcsim.hps.readout.ecal.FADCEcalReadoutDriver;
+import org.lcsim.hps.readout.ecal.FADCEcalReadoutDriver.FADCPipeline;
+import org.lcsim.hps.recon.ecal.EcalConditions;
 import org.lcsim.hps.util.RingBuffer;
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
@@ -19,7 +23,21 @@
 
     private AIDA aida = AIDA.defaultInstance();
     FADCEcalReadoutDriver readoutDriver = new FADCEcalReadoutDriver();
+    IHistogram1D h1d = aida.histogram1D("Pipeline", 4096, -0.5, 4096 - 0.5);
+    IHistogram1D h1d_2 = aida.histogram1D("ECrys", 4096 * 100, 0.0, 4096 * 100);
+    IHistogram1D h1d_3 = aida.histogram1D("Sum", 200, 0.0, 102400);
+    IHistogram1D h1d_4 = aida.histogram1D("Max", 500, 0.0, 4096);
+    IHistogram1D h1d_5 = aida.histogram1D("Sum_sig", 200, 0.0, 50);
+    final int ecal_NLayX = 46; // number of crystal layers in X direction 
+    final int ecal_NLayY = 11; // number of crystal layers in Y direction
+    final int decX = 23;       // for crystal index to start at 0
+    final int decY = 5;
+    private boolean plotPulseShapes = false;
 
+    public void setPlotPulseShapes(boolean plotPulseShapes) {
+        this.plotPulseShapes = plotPulseShapes;
+    }
+
     @Override
     public void startOfData() {
 
@@ -30,15 +48,14 @@
         readoutDriver.setEcalRawCollectionName("EcalRawHits");
         readoutDriver.setConstantTriggerWindow(true);
         readoutDriver.setScaleFactor(1);
-        //readoutDriver.setFixedGain(1.1);
+        readoutDriver.setFixedGain(1);
         readoutDriver.setUseCRRCShape(false);
-
         super.startOfData();
     }
 
     @Override
     public void process(EventHeader event) {
-        if (event.hasCollection(CalorimeterHit.class, "EcalHits")) {
+        if (plotPulseShapes && event.hasCollection(CalorimeterHit.class, "EcalHits")) {
             List<CalorimeterHit> hits = event.get(CalorimeterHit.class, "EcalHits");
 
             for (CalorimeterHit hit : hits) {
@@ -52,15 +69,101 @@
             }
         }
 
-
-        //now run the subdriver, so we can see the effect of adding the hits
         super.process(event);
+//        System.out.println("Coucou"+event.getEventNumber());
 
 
         if (event.hasCollection(CalorimeterHit.class, "EcalHits")) {
             List<CalorimeterHit> hits = event.get(CalorimeterHit.class, "EcalHits");
 
+            int temp_dec = 0;   // to take into account the fact that there is a line of 0 in the X direction
+            int ecal_Ecrys[][] = new int[ecal_NLayX][ecal_NLayY];
+            // Initialization
+            for (int j = 0; j < ecal_NLayX; j++) {
+                for (int k = 0; k < ecal_NLayY; k++) {
+                    ecal_Ecrys[j][k] = 0;
+                }
+            }
+            float ecal_Ecrys_sig[][] = new float[ecal_NLayX][ecal_NLayY];
+            // Initialization
+            for (int j = 0; j < ecal_NLayX; j++) {
+                for (int k = 0; k < ecal_NLayY; k++) {
+                    ecal_Ecrys_sig[j][k] = 0;
+                }
+            }
+            int sumCrys = 0;    // sum of the fADC values for all crystals 
+            float sumCrys_sig = 0;
+            int max = 0;
+
             for (CalorimeterHit hit : hits) {
+
+                FADCPipeline pipeBuffer = readoutDriver.getPipelineMap().get(hit.getCellID());
+                int pedestal = (int) Math.round(EcalConditions.physicalToPedestal(hit.getCellID()));
+                RingBuffer signalBuffer = readoutDriver.getSignalMap().get(hit.getCellID());
+//   System.out.println(pipeBuffer.getLength());
+                int sumBuffer = 0;  // sum of the fADC values contained in the buffer
+                float sumBuffer_sig = 0;
+                int temp;
+                for (int i = 0; i < signalBuffer.getLength(); i++) {
+
+                    sumBuffer += pipeBuffer.getValue(i) - pedestal;
+                    sumBuffer_sig += signalBuffer.getValue(i);
+                    temp = Math.min((int) Math.round(signalBuffer.getValue(i) * (int) ((Math.pow(2, 12) - 1) / 2.0)), (int) Math.pow(2, 12));
+                    if (23 < temp) {
+                        System.out.println(pipeBuffer.getValue(i) - pedestal + "   " + signalBuffer.getValue(i) + "    " + temp);
+                    }
+
+                    if (max < pipeBuffer.getValue(i) - pedestal) {
+                        max = pipeBuffer.getValue(i) - pedestal;
+                    }
+//                	if(event.getEventNumber()==293) System.out.println(hit.getIdentifierFieldValue("ix") + "  " + hit.getIdentifierFieldValue("iy") + "    " + hit.getRawEnergy() + "    " + pipeBuffer.getValue(i));
+                    h1d.fill(pipeBuffer.getValue(i) - pedestal);
+                    if (4096 < pipeBuffer.getValue(i) - pedestal) {
+                        System.out.println("pipeBuffer value too high.");
+                    }
+//                	if(293==event.getEventNumber()) System.out.println(pipeBuffer.getValue(i));
+                }
+
+                if (hit.getIdentifierFieldValue("ix") > 0) {
+                    temp_dec = -1; // 0 is not included in the x values
+                }
+                ecal_Ecrys[hit.getIdentifierFieldValue("ix") + decX + temp_dec][hit.getIdentifierFieldValue("iy") + decY] += sumBuffer;
+                ecal_Ecrys_sig[hit.getIdentifierFieldValue("ix") + decX + temp_dec][hit.getIdentifierFieldValue("iy") + decY] += sumBuffer_sig;
+                if (4096 * 100 < sumBuffer) {
+                    System.out.println("sumBuffer too high " + sumBuffer + "  " + event.getEventNumber());
+                }
+                temp_dec = 0;
+//                if(29<event.getEventNumber() && event.getEventNumber()<31) System.out.println(hit.getIdentifierFieldValue("ix")+decX+temp_dec+ " " + hit.getIdentifierFieldValue("iy")+decY + " " + sumBuffer);
+            } // hits
+
+            for (int j = 0; j < ecal_NLayX; j++) {
+                for (int k = 0; k < ecal_NLayY; k++) {
+                    if (150 < ecal_Ecrys[j][k]) {
+                        sumCrys += ecal_Ecrys[j][k];
+                        sumCrys_sig += ecal_Ecrys_sig[j][k];
+                    }
+                    h1d_2.fill(ecal_Ecrys[j][k]);
+                    if (4096 * 100 < ecal_Ecrys[j][k]) {
+                        System.out.println("C'est quoi ce bazard ?");
+                    }
+//        		    if(30<event.getEventNumber() && event.getEventNumber()<32) System.out.println(j+ " " + k + " " + ecal_Ecrys[j][k] + " " + sumCrys);
+                }
+            }
+
+            if (0 < sumCrys && 250 < max) {
+                h1d_3.fill(sumCrys); // 250<max for 2 GeV, 1000 for 6 GeV
+                h1d_5.fill(sumCrys_sig);
+            }
+            h1d_4.fill(max);
+//            System.out.println(event.getEventNumber() + " " + sumCrys); 
+
+
+        } // if(event.hasCollection)        
+
+        if (plotPulseShapes && event.hasCollection(CalorimeterHit.class, "EcalHits")) {
+            List<CalorimeterHit> hits = event.get(CalorimeterHit.class, "EcalHits");
+
+            for (CalorimeterHit hit : hits) {
                 hit.getCellID();
                 RingBuffer signalBuffer = readoutDriver.getSignalMap().get(hit.getCellID());
                 String name = String.format("pipeline x=%d, y=%d after hit in event %d, time %f, energy %f", hit.getIdentifierFieldValue("ix"), hit.getIdentifierFieldValue("iy"), event.getEventNumber(), hit.getTime(), hit.getRawEnergy());
@@ -70,5 +173,5 @@
                 }
             }
         }
-    }
+    } // event
 }
SVNspam 0.1