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>