Print

Print


Author: [log in to unmask]
Date: Thu Oct 29 15:33:34 2015
New Revision: 3915

Log:
Working on EcalLedSequence

Modified:
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedSequenceMonitor.java

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedSequenceMonitor.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedSequenceMonitor.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedSequenceMonitor.java	Thu Oct 29 15:33:34 2015
@@ -46,7 +46,6 @@
 import org.hps.conditions.ecal.EcalLedCalibration;
 import org.hps.conditions.ecal.EcalLedCalibration.EcalLedCalibrationCollection;
 import org.hps.conditions.ecal.EcalLedCalibration.LedColor;
-import org.hps.conditions.ecal.EcalLedCalibration.LedColor;
 import org.hps.recon.ecal.EcalUtils;
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.EventHeader;
@@ -65,6 +64,8 @@
     private static final int runNumberMax = 9999;
     private static final int nDrivers = 8;
     private static final int nSteps = 56;
+    
+   
 
     String inputCollectionRaw = "EcalReadoutHits";
     String inputCollection = "EcalCalHits";	
@@ -89,8 +90,8 @@
 
     private int runNumber = 0;	
     private int eventN    = 0;
-    private int id,row,column,chid,ledid,driverid;
-    private  int[][] LEDStep = new int[][]{
+    private int id,row,column,chid,ledId,driverId;
+    private  int[][] expectedSequence = new int[][]{ /*A.C. it is a terrible thing to have this hard-coded here!*/
             //first 4 are the flasher1 sequence, TOP controller 
             {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,-1,-1},
             {56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111},
@@ -102,6 +103,7 @@
             {112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167},	
             {168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223},
     };
+    private int[][] actualSequence=new int[nDrivers][nSteps];
 
     private int[] iStep = new int[nDrivers];
     private int[] nEvents = new int[NUM_CHANNELS];
@@ -154,9 +156,9 @@
     private JFrame frame;
     private JPanel panel;
     String  labelString;
-    private JButton okButton,cancelButton;
+    private JButton okButtonRed,okButtonBlue,cancelButton;
     private int m_iteration=0;
-    private int m_ret=0;
+    private LedColor m_ret=LedColor.UNKNOWN; //use UNKNONW as CANCEL button
     static Object modalMonitor = new Object();
 
     public void setUseRawEnergy(boolean useRawEnergy) {
@@ -207,7 +209,8 @@
         System.out.println("LedAnalysis::Detector changed was called");
         System.out.println(fEvnMinDraw+" "+fEvnMaxDraw);
         for (int ii=0;ii<nDrivers;ii++){
-            iStep[ii]=-1;
+            iStep[ii]=0;
+            // actualSequence[ii][iStep[ii]]=-1;
         }
 
         // Setup conditions
@@ -296,6 +299,7 @@
                 chid = ChannelCollection.findGeometric(cellID).getChannelId();
 
                 energy = hit.getCorrectedEnergy();
+                
                 if (useRawEnergy){
                     fillEnergy = getRawADCSum(energy,cellID);
                 }
@@ -307,30 +311,43 @@
 
                 //find the LED
                 if (row>0){
-                    ledid=LedTopMap.get(chid);
+                    ledId=LedTopMap.get(chid);
                 }
                 else if (row<0){
-                    ledid=LedBotMap.get(chid);
-                }
-                driverid=getDriver(ledid);
-                if (row<0) driverid+=4;
+                    ledId=LedBotMap.get(chid);
+                }
+                driverId=getDriver(ledId);
+                if (row<0) driverId+=4;
 
 
 
                 /*Skip the events under thr*/
                 if (energy<energyCut) continue;
-
+                
                 /*First, check if this led is the one in the NEXT step. Therefore, increment by 1 the step*/
-                if (iStep[driverid]<(nSteps-1)){
-                    if (ledid==LEDStep[driverid][iStep[driverid]+1]){   
-                        iStep[driverid]++;
-                        System.out.println("LedAnalysis:: increment step ("+iStep[driverid]+") for driver "+driverid+" . Led ID: "+ledid+" Column: "+column+" Row: "+row);
-                        if (iStep[driverid]>0) drawProfiles(LEDStep[driverid][iStep[driverid]-1],driverid);      
-                    }	
-                }
-
-
-                if (iStep[driverid]==-1) continue;
+                if (iStep[driverId]==0){
+                    actualSequence[driverId][iStep[driverId]]=ledId;
+                    iStep[driverId]=1;                  
+                }
+                else if ((iStep[driverId]==1)&&(ledId!=actualSequence[driverId][0])){              
+                    System.out.println("LedAnalysis:: increment step ("+iStep[driverId]+") for driver "+driverId+" . Led ID: "+ledId+" Column: "+column+" Row: "+row);                 
+                    if (iStep[driverId]>0) drawProfiles(actualSequence[driverId][iStep[driverId]-1],driverId); 
+                    actualSequence[driverId][iStep[driverId]]=ledId;
+                    iStep[driverId]++;
+                }
+                else if ((iStep[driverId]>1)&&(ledId!=actualSequence[driverId][iStep[driverId]-1])&&(ledId!=actualSequence[driverId][iStep[driverId]-2])){
+                    System.out.println("LedAnalysis:: increment step ("+iStep[driverId]+") for driver "+driverId+" . Led ID: "+ledId+" Column: "+column+" Row: "+row);                 
+                    if (iStep[driverId]>0) drawProfiles(actualSequence[driverId][iStep[driverId]-1],driverId); 
+                    actualSequence[driverId][iStep[driverId]]=ledId;
+                    iStep[driverId]++;
+                }
+
+
+
+
+
+
+                if (iStep[driverId]==-1) continue; /*Not yet data*/
 
                 /*Put this code here, since we want to always fill the ntuple*/
                 iTuple.get(id).fill(0,nEvents[id]);
@@ -339,17 +356,11 @@
                 iTuple.get(id).addRow();
                 nEvents[id]++;
 
-                /*Case 1: this led is the one in the corresponding step*/;
-                if (ledid==LEDStep[driverid][iStep[driverid]]){
-
-                }
-                else{	/*Case 2: this led is not one in the corresponding step (but maybe is the neighborhood??Ctalk??)*/;
-
-                }
+
 
                 /*Add a debug print */
                 if (eventN % 10000==0){
-                    System.out.println("Debug. LED ID: "+ledid+" DRIVER ID: "+driverid+" ECAL ID: "+id+" ROW: "+row+" COLUMN: "+column+ "HISTO ID: "+id);
+                    System.out.println("Debug. Event "+eventN+" LED ID: "+ledId+" DRIVER ID: "+driverId+" ECAL ID: "+id+" ROW: "+row+" COLUMN: "+column+ "HISTO ID: "+id);
                 }
             }
             if (eventN % 10000==0){
@@ -579,25 +590,29 @@
             askUploadToDBDialog();
             synchronized (modalMonitor) {
                 try{
-                    modalMonitor.wait(120000); //wait 2 minutes for user interaction.
+                    modalMonitor.wait(60000); //wait 1 minute for user interaction.
                 }
                 catch(InterruptedException excp){
                     System.out.println("Got exception: "+excp);
                 }
             }
-            if (m_ret==1){
-                System.out.println("OK, upload to DB");
+            if ((m_ret!=LedColor.UNKNOWN)){
+                if (m_ret==LedColor.BLUE)    System.out.println("OK, upload to DB BLUE");
+                else System.out.println("OK, upload to DB RED");
                 try {
-                    uploadToDB();
+                    uploadToDB(m_ret);
                 } catch (SQLException | DatabaseObjectException | ConditionsObjectException error) {
-                    throw new RuntimeException("Error uploading to the database.", error);
+                    throw new RuntimeException("Error uploading to the database ", error);
                 }
 
                 System.out.println("Save an Elog too");
                 uploadToElog();
             }
-        }
-        
+            else{
+                System.out.println("Cancel pressed. Nothing to do");
+            }
+        }
+
         /*Write a file with the LED values*/
         try {
             if (useRawEnergy){
@@ -679,7 +694,7 @@
     }
 
     /**
-     * Very simple method to retreive the pedestal-subtracted raw Energy.
+     * Very simple method to retrieve the pedestal-subtracted raw Energy.
      * If the gain changes (because we do a re-calibration), I do not want to include this in the LED analysis
      * @param energy
      * @param cellID
@@ -694,13 +709,15 @@
         return ret;
     }
 
-    private void uploadToDB() throws DatabaseObjectException, ConditionsObjectException, SQLException {
+    private void uploadToDB(LedColor color) throws DatabaseObjectException, ConditionsObjectException, SQLException {
         int x,y,id;
         double mean,rms;
         System.out.println(String.format("Uploading new led data to the database, runMin=%d, runMax=%d, tag=%s ....",
                 runNumber,runNumberMax,dbTag));
-
+        
+        conditionsManager = DatabaseConditionsManager.getInstance();
         EcalLedCalibrationCollection led_calibrations =  new EcalLedCalibrationCollection();
+        led_calibrations.setConnection(conditionsManager.getConnection());
 
         TableMetaData tableMetaData = conditionsManager.findTableMetaData(dbTableName);
         led_calibrations.setTableMetaData(tableMetaData);
@@ -712,7 +729,7 @@
             id=EcalMonitoringUtilities.getHistoIDFromRowColumn(y,x);
             mean=mMean[id];
             rms=mRMS[id];
-            led_calibrations.add(new EcalLedCalibration(cid,mean,rms,LedColor.UNKNOWN));
+            led_calibrations.add(new EcalLedCalibration(cid,mean,rms,color));
         }
 
         int collectionId = -1;
@@ -720,6 +737,7 @@
         try {
             collectionId = conditionsManager.getCollectionId(led_calibrations, "loaded by EcalLedSequenceMonitor");
         } catch (Exception e) {
+            System.out.println("Got exception on uploadToDB "+ e);
             throw new RuntimeException(e);
         }
         System.err.println("CollectionID:  "+collectionId);
@@ -727,6 +745,7 @@
         ConditionsRecord conditionsRecord = new ConditionsRecord(
                 led_calibrations.getCollectionId(), runNumber, runNumberMax, dbTableName, dbTableName, 
                 "Generated by LedAnalysis from Run #"+runNumber, dbTag);
+        conditionsRecord.setConnection(conditionsManager.getConnection());
         conditionsRecord.insert();
 
         System.out.println("Upload to DB done");
@@ -809,13 +828,14 @@
 
 
     private void askUploadToDBDialog(){
-        m_ret=0;
-
-        okButton = new JButton("OK");
+        m_ret=LedColor.UNKNOWN;
+
+        okButtonRed = new JButton("Yes, red");
+        okButtonBlue = new JButton("Yes, blue");
         cancelButton = new JButton("Cancel");
         labelString = "<html> Update conditions to DB <br> for run: <br> "+runNumber+" - "+runNumberMax+" <br> ???? <br> "
-                + "Use the monitoring app to look at the map<br>" 
-                + "(Tab LED sequence)<br"
+                + "Use the monitoring app to look at the map<br>"
+                + "(Tab LED sequence)<br>"
                 +"Reply in 60 seconds<br>"+"</html>";   
         label = new JLabel( labelString);
 
@@ -835,17 +855,32 @@
         //dialog.pack();
         panel.add(label);
         panel.add(cancelButton);
-        panel.add(okButton);
+        panel.add(okButtonBlue);
+        panel.add(okButtonRed);
+     
 
         frame.setVisible(true);
-        okButton.addActionListener(new ActionListener(){
+        okButtonBlue.addActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent event)
             {
-                m_ret=1;
+                m_ret=LedColor.BLUE;
                 frame.dispose();    
                 synchronized(modalMonitor)
                 {
-                    System.out.println("Ok pressed");
+                    System.out.println("Blue pressed");
+                    modalMonitor.notify();
+                }
+            }
+        }
+                );
+        okButtonRed.addActionListener(new ActionListener(){
+            public void actionPerformed(ActionEvent event)
+            {
+                m_ret=LedColor.RED;
+                frame.dispose();    
+                synchronized(modalMonitor)
+                {
+                    System.out.println("Red pressed");
                     modalMonitor.notify();
                 }
             }
@@ -855,7 +890,7 @@
         cancelButton.addActionListener(new ActionListener(){
             public void actionPerformed(ActionEvent event)
             {
-                m_ret=0;
+                m_ret=LedColor.UNKNOWN;
                 frame.dispose();   
                 synchronized(modalMonitor)
                 {