Print

Print


Author: [log in to unmask]
Date: Wed Mar 11 11:53:45 2015
New Revision: 2410

Log:
Work on monitoring files and Led analysis

Modified:
    java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalHitPlots.java
    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/EcalMonitoringUtilities.java
    java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceMonitor.lcsim
    java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/LedAnalysisFromEvio.lcsim

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalHitPlots.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalHitPlots.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalHitPlots.java	Wed Mar 11 11:53:45 2015
@@ -250,22 +250,6 @@
                 botTimePlot2D.fill(botTime, botTrigTime);
             }
             hitMaxEnergyPlot.fill(maxEnergy);
-
-            /* for (int i = 0; i < hits.size(); i++) {
-                CalorimeterHit hit1 = hits.get(i);
-                int x1 = hit1.getIdentifierFieldValue("ix");
-                int y1 = hit1.getIdentifierFieldValue("iy");
-                for (int j = i + 1; j < hits.size(); j++) {
-                    CalorimeterHit hit2 = hits.get(j);
-                    int x2 = hit2.getIdentifierFieldValue("ix");
-                    int y2 = hit2.getIdentifierFieldValue("iy");
-                    if ((Math.abs(x1 - x2) <= 1 || x1 * x2 == -1) && (Math.abs(y1 - y2) <= 1)) {
-                        if (x1 != x2 || y1 != y2) {
-                          edgePlot.fill((x1 + x2) / 2.0, (y1 + y2) / 2.0);
-                        }
-                    }
-                }
-            }*/
         } else {
             hitCountPlot.fill(0);
         }         

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	Wed Mar 11 11:53:45 2015
@@ -12,12 +12,32 @@
 import hep.aida.IFitResult;
 import hep.aida.IFunctionFactory;
 import hep.aida.IPlotterStyle;
-
-
-
-
-import javax.swing.JOptionPane; 
-
+import hep.aida.IPlotterFactory;
+import hep.aida.ICloud1D;
+import hep.aida.ICloud2D;
+import hep.aida.IEvaluator;
+import hep.aida.ITreeFactory;
+import hep.aida.ITupleFactory;
+
+import javax.swing.JFrame;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JDialog;
+import javax.swing.JOptionPane;
+import javax.swing.JTextArea;
+import javax.swing.UIManager;
+import javax.swing.Icon;
+import javax.swing.WindowConstants;
+
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.EventQueue;
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeEvent;
+import java.lang.InterruptedException;
+import java.util.Arrays;
 import java.io.Console;
 import java.sql.SQLException;
 import java.util.ArrayList;
@@ -54,27 +74,31 @@
 public class EcalLedSequenceMonitor extends Driver{
 
     private static final int NUM_CHANNELS = 11 * 47;
-
-    String inputCollectionRaw = "EcalReadoutHits";
-    String inputCollection = "EcalCalHits";	
-    AIDA aida;
-
-    DatabaseConditionsManager conditionsManager;
-
-    private EcalChannelCollection ChannelCollection;	
-    private EcalLedCollection LedCollection;
-    private EcalConditions ecalConditions;
-
-    Map < Integer,Integer > LedTopMap;
-    Map < Integer,Integer > LedBotMap;
-
-    private boolean useRawEnergy=false;
-
     private static final String dbTag = "led";
     private static final String dbTableName = "ecal_led_calibrations";
     private static final int runNumberMax = 9999;
     private static final int nDrivers = 8;
     private static final int nSteps = 56;
+
+    String inputCollectionRaw = "EcalReadoutHits";
+    String inputCollection = "EcalCalHits";	
+    AIDA aida;
+
+    DatabaseConditionsManager conditionsManager;
+
+    private EcalChannelCollection ChannelCollection;	
+    private EcalLedCollection LedCollection;
+    private EcalConditions ecalConditions;
+
+    Map < Integer,Integer > LedTopMap; //chid (conditions) --> LED id
+    Map < Integer,Integer > LedBotMap; //chid (conditions) --> LED id 
+
+    Map < Integer,Integer > LedTopMapInverted; //LED id --> chid (conditions)
+    Map < Integer,Integer > LedBotMapInverted; //LED id  --> chid (conditions)
+
+    private boolean useRawEnergy=false;
+
+
 
     private int runNumber = 0;	
     private int eventN    = 0;
@@ -94,31 +118,87 @@
 
     private int[] iStep = new int[nDrivers];
     private int[] nEvents = new int[NUM_CHANNELS];
-
+    private double[] mMean = new double[NUM_CHANNELS];
+    private double[] mRMS = new double[NUM_CHANNELS];
+
+    private int nEventsMin=200;
     private double energy,fillEnergy,fillTime;
+    private double energyCut=2; //we expect very high energy from the LEDs..
+    private double skipInitial=0.1;
+
     private long cellID;
+    
+    
+    
+    
     //Histograms-functions-ntuples
     private ArrayList<ITuple> iTuple;
-    private ArrayList<IProfile1D> cProfile;
-    private ArrayList<IFunction> fFunction;
-    private ArrayList<IFunction> fFunction1;
+
+    private IFunction  fFunction,fFunction1;
+    private IProfile1D   cProfile;
+    private IHistogram2D			hMeanCharge2D;
     private ArrayList<IHistogram1D> hCharge;
-    private ArrayList<IHistogram2D> hChargeVsTime;
-    private ArrayList<IHistogram1D> hChargeALL;
-    private ArrayList<IHistogram2D> hChargeVsTimeALL;
-    IHistogram2D					hMeanCharge2D;
-
+    private ArrayList<IHistogram2D> hChargeVsEvn;
+    private IPlotterFactory factory;
+    private IPlotter pPlotter=null;
+    private IPlotter pPlotter2=null;
+    private IPlotterStyle style ;
+    
+    private boolean doEmbedded=false;
+    
+    private double[] fPars;    
+    private double[] fPrevPars;
+    private double[] fParErrs;
+    private String[] fParNames; 
+    
+    
+    private double fEvnMinDraw=0.;
+    private double fEvnMaxDraw=80000.;
+    private double fChargeMinDraw=0.;
+    private double fChargeMaxDraw=100.;
+
+    /*Components for user interaction*/
+    private JDialog dialog;
+    private JLabel  label;
+    String  labelString;
+    private JButton okButton,cancelButton;
+    private JFrame frame;
+    private int m_iteration=0;
+    private int m_ret=0;
+    static Object modalMonitor = new Object();
+    
     public void setUseRawEnergy(boolean useRawEnergy) {
         this.useRawEnergy=useRawEnergy;
     }
 
-
-    private double skipInitial=0.1;
+    public void setEnergyCut(double energyCut) {
+        this.energyCut=energyCut;
+    }
+    public void setSkipInitial(double skipInitial) {
+        this.skipInitial=skipInitial;
+    }
+
+    public void setEvnMinDraw(double evnMinDraw){
+        this.fEvnMinDraw=evnMinDraw;
+    }
+    public void setEvnMaxDraw(double evnMaxDraw){
+        this.fEvnMaxDraw=evnMaxDraw;
+    }
+    public void setChargeMinDraw(double chargeMinDraw){
+        this.fChargeMinDraw=chargeMinDraw;
+    }
+    public void setChargeMaxDraw(double chargeMaxDraw){
+        this.fChargeMaxDraw=chargeMaxDraw;
+    }
+    
+    public void setNEventsMin(int nEeventsMin){
+        this.nEventsMin=nEventsMin;
+    }
 
     @Override
     protected void detectorChanged(Detector detector) {
         System.out.println("LedAnalysis::Detector changed was called");
-
+        System.out.println(fEvnMinDraw+" "+fEvnMaxDraw);
         for (int ii=0;ii<nDrivers;ii++){
             iStep[ii]=-1;
         }
@@ -127,8 +207,12 @@
 
         conditionsManager = DatabaseConditionsManager.getInstance();
 
-        LedTopMap = new HashMap< Integer , Integer >(); //key: ecal channel ID. Value: 
+        LedTopMap = new HashMap< Integer , Integer >(); //key: ecal channel ID. Value:  led id
         LedBotMap = new HashMap< Integer , Integer >();	
+
+        LedTopMapInverted = new HashMap< Integer , Integer >(); //key: led id. Value: ecal channel id
+        LedBotMapInverted = new HashMap< Integer , Integer >(); 
+
 
         ChannelCollection = conditionsManager.getCachedConditions(EcalChannelCollection.class, "ecal_channels").getCachedData();	
         LedCollection = conditionsManager.getCachedConditions(EcalLedCollection.class, "ecal_leds").getCachedData();
@@ -140,38 +224,54 @@
                 if (Led.getEcalChannelId()==chid){
                     if (channel.getY()>0){
                         LedTopMap.put( chid , Led.getLedNumber() );
+                        LedTopMapInverted.put(  Led.getLedNumber(), chid  );
                     }
                     else if (channel.getY()<0){
                         LedBotMap.put( chid , Led.getLedNumber() );
+                        LedBotMapInverted.put( Led.getLedNumber(), chid );                    
                     }
                 }
             }
         }
 
-
+    
+        
         // Setup plots
         aida = AIDA.defaultInstance();
         aida.tree().cd("/");
-
-        //  IPlotterFactory factory= aida.analysisFactory().createPlotterFactory("ECAL DAQ Plots");
-        iTuple = new ArrayList<ITuple>(NUM_CHANNELS);
-        cProfile= new ArrayList<IProfile1D>(NUM_CHANNELS);
-        fFunction= new ArrayList<IFunction>(NUM_CHANNELS);	
-        fFunction1= new ArrayList<IFunction>(NUM_CHANNELS);		
+        hMeanCharge2D = aida.histogram2D("Average LED response", 47, -23.5, 23.5, 11, -5.5, 5.5);
+        
+        factory= aida.analysisFactory().createPlotterFactory("Ecal Led Sequence");
+        pPlotter= factory.create("Drivers");
+        pPlotter.createRegions(4,2);
+        if (doEmbedded){
+            pPlotter2=factory.create("Sequence Map");
+            pPlotter2.createRegions(1,1);
+            pPlotter2.region(0).plot(hMeanCharge2D);
+        }   
+        iTuple = new ArrayList<ITuple>(NUM_CHANNELS);   
         hCharge = new ArrayList<IHistogram1D>(NUM_CHANNELS);
-        // hChargeVsTime = new ArrayList<IHistogram2D>(NUM_CHANNELS);
-        hChargeALL = new ArrayList<IHistogram1D>(NUM_CHANNELS);
-        hChargeVsTimeALL = new ArrayList<IHistogram2D>(NUM_CHANNELS);
-        hMeanCharge2D = aida.histogram2D("Average LED response", 47, -23.5, 23.5, 11, -5.5, 5.5);
-
+        hChargeVsEvn = new ArrayList<IHistogram2D>(nDrivers);
+
+
+
+        //pPlotter2.region(0).plot(hMeanCharge2D);
+        
         for (int ii=0;ii<NUM_CHANNELS;ii++){
             int row = EcalMonitoringUtilities.getRowFromHistoID(ii);
             int column = EcalMonitoringUtilities.getColumnFromHistoID(ii);	    
             iTuple.add(aida.analysisFactory().createTupleFactory(aida.tree()).create("nTuple"+ii,"nTuple"+ii,"int fEvn=0 , double fCharge=0.,double fTime=0.",""));
 
-            hChargeALL.add(aida.histogram1D("ChargeAllEvents_"+ii,400,0.,100.));
-            hChargeVsTimeALL.add(aida.histogram2D("ChargeVsTimeAllEvents_"+ii,100,0.,400.,100,0.,100.));
-        }
+
+        }
+
+        for (int ii=0;ii<nDrivers;ii++){
+            hChargeVsEvn.add(aida.histogram2D("Driver"+ii,100,fEvnMinDraw,fEvnMaxDraw,100,fChargeMinDraw,fChargeMaxDraw));
+            pPlotter.region(ii).plot( hChargeVsEvn.get(ii));
+        }
+
+        pPlotter.show();
+        if (doEmbedded) pPlotter2.show();
 
     }		
 
@@ -187,9 +287,10 @@
                 column = hit.getIdentifierFieldValue("ix");
                 row = hit.getIdentifierFieldValue("iy");
                 id = EcalMonitoringUtilities.getHistoIDFromRowColumn(row, column);
-                cellID=hit.getCellID();
+                cellID=hit.getCellID();        
+                chid = ChannelCollection.findGeometric(cellID).getChannelId();
+
                 energy = hit.getCorrectedEnergy();
-
                 if (useRawEnergy){
                     fillEnergy = getRawADCSum(energy,cellID);
                 }
@@ -198,12 +299,9 @@
                 }
                 fillTime = hit.getTime();
 
-                //fill "all" histograms
-                hChargeALL.get(id).fill(fillEnergy);
-                hChargeVsTimeALL.get(id).fill(fillTime,fillEnergy);
+
 
                 //find the LED
-                chid = ChannelCollection.findGeometric(cellID).getChannelId();
                 if (row>0){
                     ledid=LedTopMap.get(chid);
                 }
@@ -213,28 +311,31 @@
                 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]){
+                    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;
-
+                
+                /*Put this code here, since we want to always fill the ntuple*/
+                iTuple.get(id).fill(0,nEvents[id]);
+                iTuple.get(id).fill(1,fillEnergy);
+                iTuple.get(id).fill(2,fillTime);
+                iTuple.get(id).addRow();
+                nEvents[id]++;
+                
                 /*Case 1: this led is the one in the corresponding step*/;
-                //if (ledid==LEDStep[driverid][iStep[driverid]]){
-                if (true){
-
-                    iTuple.get(id).fill(0,nEvents[id]);
-                    iTuple.get(id).fill(1,fillEnergy);
-                    iTuple.get(id).fill(2,fillTime);
-                    iTuple.get(id).addRow();
-
-
-                    nEvents[id]++;
+                if (ledid==LEDStep[driverid][iStep[driverid]]){
+                    
                 }
                 else{	/*Case 2: this led is not one in the corresponding step (but maybe is the neighborhood??Ctalk??)*/;
 
@@ -269,20 +370,16 @@
      */
     @Override
     public void endOfData() {
-    }
-    public void MYendOfData() {
         System.out.println("LedAnalysis::end of data");
-
-     
+        System.out.println("LedAnalysis:: nEventsMin is: "+nEventsMin);
+
         double e,eMin,eMax;
         double t;
         int n,nBins,nFits,nSkip;
 
-        double[] fPars;	
-        double[] fParErrs;
-        String[] fParNames;	
+       
         IFunctionFactory fFactory=aida.analysisFactory().createFunctionFactory(aida.tree());
-        IPlotter pPlotter= aida.analysisFactory().createPlotterFactory().create();
+
         IFitResult fResult;
         IFitter	   fFitter;
 
@@ -293,25 +390,34 @@
             row = EcalMonitoringUtilities.getRowFromHistoID(id);
             column = EcalMonitoringUtilities.getColumnFromHistoID(id);
             System.out.println("Doing channel: X= "+column+" Y= "+row);
+            System.out.println("Number of recognized events: "+nEvents[id]);
+            System.out.println("Number of entries in analysis ntuple: "+iTuple.get(id).rows());
             /*Create the profile. Create it for all the channels, to keep sync.*/
             nBins=nEvents[id]/100;
             if (nBins<=0) nBins=1;
-            cProfile.add(aida.profile1D("strip_"+id,nBins,-0.5,nEvents[id]*(1-skipInitial)+0.5));
-
+
+            /*Clear previous*/
+
+            if (id>0){
+                aida.tree().rm("strip");
+                aida.tree().rm("fun0");
+                aida.tree().rm("fun1");
+            }
+            /*Create the profile.*/
+            cProfile=aida.profile1D("strip",nBins,-0.5,nEvents[id]*(1-skipInitial)+0.5);
+            cProfile.reset();
             /*Create the function for the profile fit and the gaus fit*/
-            /* Create it for all the channels, to keep sync.*/
-            fFunction.add(fFactory.createFunctionFromScript("fun0_"+id,1,"A*exp(-x[0]/tau)+B","A,tau,B","",null));
-            fFunction1.add(fFactory.createFunctionByName("fun1_"+id,"G"));
+            fFunction=fFactory.createFunctionFromScript("fun0",1,"A*exp(-x[0]/tau)+B","A,tau,B","",null);
+            fFunction1=fFactory.createFunctionByName("fun1","G");
 
             if (EcalMonitoringUtilities.isInHole(row,column)==true){
                 hCharge.add(aida.histogram1D("charge_"+id,200,0.,1.)); //create here the histogram to keep sync
-                //   hChargeVsTime.add(aida.histogram2D("chargeVsTime_"+id,200,0.,400.,200,0.,1.));
+                System.out.println("In hole, skip");
                 continue;
             }
-            if (nEvents[id]==0) {
+            else if (nEvents[id]<nEventsMin) {
                 hCharge.add(aida.histogram1D("charge_"+id,200,0.,1.)); //create here the histogram to keep sync
-                //  hChargeVsTime.add(aida.histogram2D("chargeVsTime_"+id,200,0.,400.,200,0.,1.));            
-                //System.out.println("LedAnalysis: channel x= "+column+" y= "+row+" not found");
+                System.err.println("LedAnalysis:: the channel X= "+column+" Y= "+row+" has no data");
                 continue;
             }			  
 
@@ -328,20 +434,20 @@
             while ( iTuple.get(id).next() ){
                 e=iTuple.get(id).getDouble(1);
                 eMin=e;           			  /*eMin is the last sample*/
-                cProfile.get(id).fill(1.*n,e);
+                cProfile.fill(1.*n,e);
                 n++;
             }			
 
 
             /*Init function parameters*/
             double[] initialPars={eMax-eMin,nEvents[id]/10.,eMin};
-            fFunction.get(id).setParameters(initialPars);
+            fFunction.setParameters(initialPars);
 
             /*Do the fit*/
             fFitter=aida.analysisFactory().createFitFactory().createFitter("chi2","","v");
             System.out.println("LedAnalysis:: do profile fit "+id+" "+fFitter.engineName()+" "+fFitter.fitMethodName());
             System.out.println("LedAnalysis:: initial parameters "+initialPars[0]+" "+initialPars[1]+" "+initialPars[2]);
-            fResult=fFitter.fit(cProfile.get(id),fFunction.get(id));
+            fResult=fFitter.fit(cProfile,fFunction);
             fPars     = fResult.fittedParameters();
             fParErrs  = fResult.errors();
             fParNames = fResult.fittedParameterNames();			
@@ -349,29 +455,32 @@
             for(int i=0; i< fResult.fittedFunction().numberOfParameters(); i++ ){
                 System.out.println(fParNames[i]+" : "+fPars[i]+" +- "+fParErrs[i]);
             }  
-            fFunction.get(id).setParameters(fPars);
+            fFunction.setParameters(fPars);
 
 
             /*Do again the fit: it is a terrible work-around*/
             nFits=0;
+            if (Double.isNaN(fParErrs[1])){
+                fPars=fPrevPars;
+            }
             while (Double.isNaN(fParErrs[1])){
                 System.out.println("LedAnalysis:: redo fit");
-                fFunction.get(id).setParameters(fPars);
-                fResult=fFitter.fit(cProfile.get(id),fFunction.get(id));
+                fFunction.setParameters(fPars);
+                fResult=fFitter.fit(cProfile,fFunction);
                 fPars     = fResult.fittedParameters();
                 fParErrs  = fResult.errors();
                 System.out.println("LedAnalysis:: Status= "+fResult.fitStatus()+" "+fResult.isValid()+" Chi2 = "+fResult.quality()+" NDF: "+fResult.ndf());
                 for(int i=0; i< fResult.fittedFunction().numberOfParameters(); i++ ){
                     System.out.println(fParNames[i]+" : "+fPars[i]+" +- "+fParErrs[i]);
                 }  
-                fFunction.get(id).setParameters(fPars);
+                fFunction.setParameters(fPars);
                 nFits++;
                 if (nFits>=10){
                     System.out.println("LedAnalysis:: Error, too many fits without convergence");
                     break;
                 }
             }
-
+            fPrevPars=Arrays.copyOf(fPars,fPars.length);
             System.out.println("LedAnalysis:: fit "+id+" done");  
 
             /*Now we have the tau parameter. Take ONLY the events that are with N>5*tau/
@@ -379,7 +488,6 @@
 				and emit warning
              */
             hCharge.add(aida.histogram1D("charge_"+id,200,eMin*0.9,eMax*1.1));
-            // hChargeVsTime.add(aida.histogram2D("chargeVsTime_"+id,200,0.,400.,200,eMin*0.9,eMax*1.1));     
             nSkip=(int)( fPars[1]*5);
             if (nSkip < (nEvents[id]/2)){
                 System.out.println("LedAnalysis:: Skip number too low: "+nSkip+" Increment it to "+nEvents[id]/2);
@@ -396,7 +504,6 @@
                 e=iTuple.get(id).getDouble(1);
                 t=iTuple.get(id).getDouble(2);
                 hCharge.get(id).fill(e);
-                //   hChargeVsTime.get(id).fill(t,e);
                 n++;
             }			
 
@@ -406,8 +513,8 @@
             System.out.println("LedAnalysis:: Gaus fit");
             System.out.println("LedAnalysis:: initial parameters "+initialPars1[0]+" "+initialPars1[1]+" "+initialPars1[2]);
 
-            fFunction1.get(id).setParameters(initialPars1);
-            fResult=fFitter.fit(hCharge.get(id),fFunction1.get(id));
+            fFunction1.setParameters(initialPars1);
+            fResult=fFitter.fit(hCharge.get(id),fFunction1);
             fPars     = fResult.fittedParameters();
             fParErrs  = fResult.errors();
             fParNames = fResult.fittedParameterNames();			
@@ -415,50 +522,73 @@
             for(int i=0; i< fResult.fittedFunction().numberOfParameters(); i++ ){
                 System.out.println(fParNames[i]+" : "+fPars[i]+" +- "+fParErrs[i]);
             }  
-            fFunction1.get(id).setParameters(fPars);
-
-            hMeanCharge2D.fill(column,row,fPars[1]);
+            fFunction1.setParameters(fPars);
+            mMean[id]=fPars[1];
+            mRMS[id]=fPars[2];
+
+            hMeanCharge2D.fill(column,row,mMean[id]);
             System.out.println("\n");
         }/*End loop on channels*/
 
 
-        pPlotter.createRegions(1,1);
-        IPlotterStyle style = pPlotter.region(0).style();
-        style.setParameter("hist2DStyle", "colorMap");
-        style.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-        style.dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString());
-
-        pPlotter.region(0).plot(hMeanCharge2D);
-        pPlotter.show();
-
-        int ret=JOptionPane.showConfirmDialog(null, "Do you want to load these conditions to the database\n"+
-                "for Runs: "+runNumber+" "+runNumberMax+" ? ", "Message", 
-                JOptionPane.YES_NO_OPTION);
-        if (ret == JOptionPane.YES_OPTION){
-            ret=JOptionPane.showConfirmDialog(null, "Confirm?", "Message", 
-                    JOptionPane.YES_NO_OPTION);
-            if (ret == JOptionPane.YES_OPTION){
-                System.out.println("You confirmed \n");
-                System.out.println("Load DB condtions \n");
-                //               uploadToDB();
-            }   
-        }
-        /* System.err.println("\n\n\n***************************************************************\n");
-        String userInput="";
-        String outputFilePrefix="";
-        userInput=cc.readLine("Enter filename prefix, or just press RETURN ...");
-        if (userInput==null || userInput.length()==0 || userInput=="") {
-            String home=System.getenv().get("HOME");
-            outputFilePrefix = home+"/LedAnalysis_"+runNumber+"_";
-        } else {
-            outputFilePrefix = userInput;
+
+        if ((pPlotter2!=null)&&(doEmbedded)){
+            style = pPlotter2.region(0).style();
+            style.setParameter("hist2DStyle", "colorMap");
+            style.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+            style.dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString()); 
+            pPlotter2.region(0).plot(hMeanCharge2D);
+            pPlotter2.region(0).refresh();
+        }
+        else{
+            IPlotterStyle pstyle =  aida.analysisFactory().createPlotterFactory().createPlotterStyle();
+            pPlotter2 = null;
+            pPlotter2 =  aida.analysisFactory().createPlotterFactory().create();
+            pstyle.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+            pstyle.dataStyle().fillStyle().setParameter("showZeroHeightBins", Boolean.FALSE.toString());
+            pstyle.setParameter("hist2DStyle", "colorMap");
+            if (pPlotter2!=null){
+                pPlotter2.createRegion().plot(hMeanCharge2D,pstyle);
+                pPlotter2.show();
+            }
+        }
+
+
+
+        
+        /*
+        Console cc = System.console();
+        if (cc == null) {
+            System.err.println("No console.");
+        }
+        else{
+            String userInput="";
+            System.out.println("Enter 'YES' - case sensitive - to write conditions database for run range "+runNumber+" - "+runNumberMax);
+            System.out.println("Use the monitoring app (Led sequence - Sequence Map) to look at the current sequence");
+            userInput=cc.readLine(String.format("Your choice: YES or NO?"));
+            System.out.println("***********"+userInput+"********");
+            if (userInput!=null && userInput.equals("YES")) {
+                userInput=cc.readLine("Really?");
+                if (userInput!=null && userInput.equals("YES")) {
+                   m_ret=1;
+                }
+            }
+            
         }*/
-
-
-
-
-
-
+        askUploadToDBDialog();
+        synchronized (modalMonitor) {
+            try{
+            modalMonitor.wait(120000); //wait 2 minutes, then go on!
+            }
+            catch(InterruptedException excp){
+                System.out.println("Got exception: "+excp);
+            }
+        }
+        if (m_ret==1){
+            System.out.println("OK, upload to DB");
+            uploadToDB();
+        }
+       System.out.println("endOfData end");
     }/*End endOfData*/
 
 
@@ -510,8 +640,8 @@
             x = cc.getX(); //This is the column
             y = cc.getY(); //This is the row
             id=EcalMonitoringUtilities.getHistoIDFromRowColumn(y,x);
-            mean=fFunction1.get(id).parameters()[1];
-            rms=fFunction1.get(id).parameters()[2];
+            mean=mMean[id];
+            rms=mRMS[id];
             led_calibrations.add(new EcalLedCalibration(cid,mean,rms));
         }
 
@@ -531,14 +661,91 @@
 
 
     }
-
-
-
-    public EcalChannel findChannel(int channel_id) {
+    private void drawProfiles(int ledID,int driverID){
+
+        int m_column,m_row,m_ledID,m_chID,m_ID,m_driverID;
+
+        m_ledID = ledID;
+        m_driverID = driverID;
+        m_chID = 0;
+
+
+        if (m_driverID<=3) m_chID = LedTopMapInverted.get(ledID);
+        else m_chID = LedBotMapInverted.get(ledID);
+
+        m_column=findChannel(m_chID).getX();
+        m_row=findChannel(m_chID).getY();
+        m_ID=EcalMonitoringUtilities.getHistoIDFromRowColumn(m_row, m_column);
+        /* 
+        System.out.println("Going to draw LED id "+m_ledID+" X= "+m_column+" Y= "+m_row+" driver: "+m_driverID);
+        System.out.println("Ch_ID: "+m_chID);
+        System.out.println("Histo ID:"+m_ID);
+        System.out.println("Events: "+iTuple.get(m_ID).rows());
+         */      
+        hChargeVsEvn.get(m_driverID).reset();
+        hChargeVsEvn.get(m_driverID).setTitle("Driver_"+m_driverID+" Led_"+ledID);
+        IEvaluator evaluatorX = aida.analysisFactory().createTupleFactory(aida.analysisFactory().createTreeFactory().create()).createEvaluator("fEvn");
+        IEvaluator evaluatorY = aida.analysisFactory().createTupleFactory(aida.analysisFactory().createTreeFactory().create()).createEvaluator("fCharge");  
+
+        iTuple.get(m_ID).project(hChargeVsEvn.get(m_driverID),evaluatorX,evaluatorY);
+
+        pPlotter.region(m_driverID).clear();  
+        pPlotter.region(m_driverID).plot(hChargeVsEvn.get(m_driverID));
+        pPlotter.region(m_driverID).refresh();
+
+    }
+
+    private EcalChannel findChannel(int channel_id) {
         return ecalConditions.getChannelCollection().findChannel(channel_id);
     }
 
 
-
-
-}
+    private void askUploadToDBDialog(){
+        m_ret=0;
+
+        okButton = new JButton("OK");
+        cancelButton = new JButton("Cancel");
+        labelString = "<html> Update conditions to DB <br> for run: <br> "+runNumber+" - "+runNumberMax+" <br> ????  </html>";
+        label = new JLabel( labelString);
+        
+        frame  = new JFrame("Upload to DB?");
+        frame.setPreferredSize(new Dimension(200,200));
+        dialog = new JDialog(frame, "User selection");
+        dialog.setSize(200,200);
+        dialog.setLayout(new FlowLayout());
+        dialog.add(label);
+        dialog.add(cancelButton);
+        dialog.add(okButton);
+        dialog.setVisible(true);
+        //dialog.pack();
+        frame.setVisible(true);
+        okButton.addActionListener(new ActionListener(){
+            public void actionPerformed(ActionEvent event)
+            {
+                m_ret=1;
+                dialog.dispose();    
+                synchronized(modalMonitor)
+                {
+                    modalMonitor.notify();
+                }
+            }
+        }
+                );
+
+        cancelButton.addActionListener(new ActionListener(){
+            public void actionPerformed(ActionEvent event)
+            {
+                m_ret=0;
+                dialog.dispose();   
+                synchronized(modalMonitor)
+                {
+                    modalMonitor.notify();
+                }
+            }
+        }
+        );
+        
+        System.out.println("askUploadDB done");
+    }
+    
+}

Modified: java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringUtilities.java
 =============================================================================
--- java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringUtilities.java	(original)
+++ java/trunk/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalMonitoringUtilities.java	Wed Mar 11 11:53:45 2015
@@ -35,6 +35,8 @@
                 return true;
             }
         }
+        else if (row == 0) return true;
+        else if (column ==0) return true;
         return false;
     }
     

Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceMonitor.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceMonitor.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/monitoring/EcalLedSequenceMonitor.lcsim	Wed Mar 11 11:53:45 2015
@@ -15,7 +15,7 @@
     </execute>           
     <drivers>    
         <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver">
-            <eventInterval>10000</eventInterval>            
+            <eventInterval>100000</eventInterval>            
         </driver>
          <driver name="EcalRunningPedestal" type="org.hps.recon.ecal.ECalRunningPedestalDriver">
             <minLookbackEvents>10</minLookbackEvents>
@@ -29,17 +29,22 @@
             <useRunningPedestal>true</useRunningPedestal>
             <useTimeWalkCorrection>true</useTimeWalkCorrection>
         </driver>       
-        <driver name="LedAnalysisDriver" type="org.hps.users.celentan.LedAnalysis">    
-           <useRawEnergy>true</useRawEnergy>
-        </driver>
+        
           <driver name="EcalEventDisplay" type="org.hps.monitoring.ecal.plots.EcalEventDisplay">
             <inputCollection>EcalCalHits</inputCollection>
             <inputCollectionRaw>EcalReadoutHits</inputCollectionRaw>
             <inputClusterCollection>EcalClusters</inputClusterCollection>
             <pedSamples>20</pedSamples>
-            <maxEch>5.0</maxEch>
+            <maxEch>15.0</maxEch>
             <minEch>0.005</minEch>
-            <eventRefreshRate>5</eventRefreshRate>
+            <eventRefreshRate>2</eventRefreshRate>
+        </driver>
+        <driver name="LedAnalysisDriver" type="org.hps.monitoring.ecal.plots.EcalLedSequenceMonitor">    
+           <useRawEnergy>true</useRawEnergy>
+           <energyCut>2</energyCut>
+           <nEventsMin>300</nEventsMin>
+           <evnMinDraw>0.</evnMinDraw>
+           <evnMaxDraw>20000.</evnMaxDraw>
         </driver>
         <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
             <outputFileName>LedSequenceMonitorOut.aida</outputFileName>

Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/LedAnalysisFromEvio.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/LedAnalysisFromEvio.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/users/celentan/LedAnalysisFromEvio.lcsim	Wed Mar 11 11:53:45 2015
@@ -30,6 +30,7 @@
         </driver>       
         <driver name="LedAnalysisDriver" type="org.hps.users.celentan.LedAnalysis">    
            <useRawEnergy>true</useRawEnergy>
+           <energyCut>5</energyCut>
         </driver>
         <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver">
             <outputFileName>${outputFile}.aida</outputFileName>