Author: [log in to unmask] Date: Thu Mar 12 14:01:34 2015 New Revision: 2415 Log: Simplified the driver.. Now I do not fit the profile 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 Mar 12 14:01:34 2015 @@ -40,6 +40,7 @@ import java.lang.InterruptedException; import java.util.Arrays; import java.io.Console; +import java.io.File; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; @@ -123,6 +124,7 @@ private double[] mRMS = new double[NUM_CHANNELS]; private int nEventsMin=200; + private int nMinChannelsWithEvents=350; private double energy,fillEnergy,fillTime; private double energyCut=2; //we expect very high energy from the LEDs.. private double skipInitial=0.05; @@ -147,6 +149,7 @@ private int[] fitStatus = new int[NUM_CHANNELS]; private boolean doEmbedded=true; + private boolean isMonitoringApp=false; private double[] fPars; private double[] fPrevPars; @@ -200,7 +203,10 @@ public void setNEventsMin(int nEeventsMin){ this.nEventsMin=nEventsMin; } - + + public void setIsMonitoringApp(boolean app){ + this.isMonitoringApp=app; + } public void setDoEmbedded(boolean embedded){ this.doEmbedded=embedded; @@ -428,35 +434,37 @@ } else if (nEvents[id]<nEventsMin) { hCharge.add(aida.histogram1D("charge_"+id,200,0.,1.)); //create here the histogram to keep sync - System.err.println("LedAnalysis:: the channel X= "+column+" Y= "+row+" has no data"); + System.err.println("LedAnalysis:: the channel X= "+column+" Y= "+row+" has not enough"); + continue; } - /*Fill the profile*/ + //Fill the profile*/ nSkip=(int)(nEvents[id]*skipInitial); if (nSkip>iTuple.get(id).rows()){ System.out.println("Can't skip initial events?"); nSkip=0; } iTuple.get(id).start(); - iTuple.get(id).skip(nSkip); /*This is the work-around for those channels with charge starting from 0 and rapidly growing*/ + iTuple.get(id).skip(nSkip); //This is the work-around for those channels with charge starting from 0 and rapidly growing// n=0; - iTuple.get(id).next(); e=iTuple.get(id).getDouble(1); eMax=e; n++; /*eMax is the first sample*/ + iTuple.get(id).next(); while ( iTuple.get(id).next() ){ e=iTuple.get(id).getDouble(1); - eMin=e; /*eMin is the last sample*/ + if (e<eMin) eMin=e; + if (e>eMax) eMax=e; cProfile.fill(1.*n,e); n++; } - - - /*Init function parameters*/ + fFitter=aida.analysisFactory().createFitFactory().createFitter("chi2","","v"); + + /* + //Init function parameters double[] initialPars={eMax-eMin,nEvents[id]/10.,eMin}; if (initialPars[0]<0) initialPars[0]=0; fFunction.setParameters(initialPars); - /*Do the fit*/ - fFitter=aida.analysisFactory().createFitFactory().createFitter("chi2","","v"); + //Do the fit 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,fFunction); @@ -470,7 +478,7 @@ fFunction.setParameters(fPars); - /*Do again the fit: it is a terrible work-around*/ + //Do again the fit: it is a terrible work-around nFits=0; if (Double.isNaN(fParErrs[1])){ fPars=fPrevPars; @@ -495,12 +503,13 @@ 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/ - As a cross-check, also verify that tau > Nevents/10, otherwise skip the first Nevents/2 - and emit warning - */ + //Now we have the tau parameter. Take ONLY the events that are with N>5*tau/ + //As a cross-check, also verify that tau > Nevents/10, otherwise skip the first Nevents/2 + //and emit warning + */ + hCharge.add(aida.histogram1D("charge_"+id,200,eMin*0.9,eMax*1.1)); - nSkip=(int)( fPars[1]*5); + /* nSkip=(int)( fPars[1]*5); if (nSkip < (nEvents[id]*skipMin)){ System.out.println("LedAnalysis:: Skip number too low: "+nSkip+" Increment it to "+nEvents[id]/2); nSkip=(int)(nEvents[id]*skipMin); @@ -508,9 +517,10 @@ if (nSkip > nEvents[id]){ System.out.println("LedAnalysis:: Skip number too high, reduce it"); nSkip=(int)(nEvents[id]*skipMin); - } + }*/ + nSkip=(int)(nEvents[id]*(skipMin+skipInitial)); iTuple.get(id).start(); - iTuple.get(id).skip(nSkip); /*This is the work-around for those channels with charge starting from 0 and rapidly growing*/ + iTuple.get(id).skip(nSkip); n=0; while ( iTuple.get(id).next() ){ e=iTuple.get(id).getDouble(1); @@ -540,7 +550,7 @@ hMeanCharge2D.fill(column,row,mMean[id]); System.out.println("\n"); - }/*End loop on channels*/ + }//End loop on channels @@ -599,6 +609,10 @@ if (m_ret==1){ System.out.println("OK, upload to DB"); uploadToDB(); + if (isMonitoringApp){ + System.out.println("Save an Elog too"); + uploadToElog(); + } } System.out.println("endOfData end"); System.out.println("The program is not stucked. It is writing the output AIDA file, this takes time!"); @@ -674,6 +688,39 @@ System.out.println("Upload to DB done"); } + + private void uploadToElog(){ + String path="/home/clasrun/LedSequenceData/"; + String imgpath=path+"screenshots/"+runNumber+".png"; + File f=new File(path); + if (!f.exists()){ + System.err.println("LedMonitoringSequence:: wrong path"); + return; + } + if (pPlotter2==null){ + System.err.println("LedMonitoringSquence:: no plotter"); + } + try{ + pPlotter2.writeToFile(imgpath); + } + catch(Exception e){ + System.err.println("Exception "+e); + } + path="/home/clasrun/LedSequenceData/doElog.csh "+imgpath; + File f1=new File(path); + if (!f1.exists()){ + System.err.println("LedMonitoringSequence:: no script!"); + return; + } + try{ + Runtime.getRuntime().exec(path); + } + catch(Exception e){ + System.err.println("Exception "+e); + } + } + + private void drawProfiles(int ledID,int driverID){ int m_column,m_row,m_ledID,m_chID,m_ID,m_driverID;