hps-java/src/main/resources/org/lcsim/hps/steering
diff -u -r1.1 -r1.2
--- MPAlignment.lcsim 7 Sep 2012 22:42:53 -0000 1.1
+++ MPAlignment.lcsim 14 Nov 2012 22:08:23 -0000 1.2
@@ -1,65 +1,70 @@
<lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
+ <inputFiles>
+ <!--<fileRegExp baseDir="./../data/mc/v3" >egs.*filt.*recon.*</fileRegExp>-->
+ <!--<fileRegExp baseDir="./../data/mc/SVT-CF" >.*</fileRegExp>-->
+ <!--<fileRegExp baseDir="./../data/mc/SVT-CF-THINSI" >.*</fileRegExp>-->
+ </inputFiles>
<control>
- <numberOfEvents>-1</numberOfEvents>
- <printInputFiles>false</printInputFiles>
+ <numberOfEvents>10000</numberOfEvents>
+ <printInputFiles>true</printInputFiles>
<printDriversDetailed>true</printDriversDetailed>
</control>
<execute>
-
-
<driver name="EventMarkerDriver"/>
<driver name="HPSCalibrationDriver"/>
- <driver name="RawTrackerHitSensorSetup"/>
+ <driver name="RawTrackerHitSensorSetup"/>
<driver name="RawTrackerHitFitterDriver" />
<driver name="TrackerHitDriver"/>
<driver name="TrackerReconDriver"/>
<driver name="EcalRawConverter" />
<driver name="EcalClusterer" />
- <!-- <driver name="TrackingReconstructionPlots"/> -->
+<!-- <driver name="TrackingReconstructionPlots"/> -->
+<!-- <driver name="MCParticlePlots"/> -->
+<!-- <driver name="TruthMomentumAnalysis"/> -->
+ <driver name="HelicalTrackHitResidualsDriver"/>
<driver name="MPAlignment"/>
- <driver name="ExtrapolatorAnalysis"/>
-
-<!--
- <driver name="LCIOWriter"/>
+<!-- <driver name="LCIOWriter"/> -->
<driver name="CleanupDriver"/>
--->
</execute>
<drivers>
-
- <driver name="MPAlignment"
+ <driver name="MPAlignment"
type="org.lcsim.hps.users.phansson.RunMPAlignment">
<residualLimitFileName>/Users/phansson/work/HPS/software/reco/hps-java/src/main/java/org/lcsim/hps/users/phansson/residualLimits.txt</residualLimitFileName>
<debug>false</debug>
- <hideFrame>true</hideFrame>
- <outputPlotFileName>mpalignment.aida</outputPlotFileName>
- <resLayer1MinY>-1.0</resLayer1MinY>
+ <hideFrame>false</hideFrame>
+ <milleFile>${milleFile}</milleFile>
+ <outputPlotFileName></outputPlotFileName>
</driver>
+ <driver name="TruthMomentumAnalysis"
+ type="org.lcsim.hps.users.phansson.TruthMomentumResolutionDriver">
+ <hideFrame>false</hideFrame>
+ <debug>false</debug>
+ </driver>
+ <driver name="MCParticlePlots" type="org.lcsim.hps.analysis.ecal.HPSMCParticlePlotsDriver" />
<driver name="TrackingReconstructionPlots" type="org.lcsim.hps.monitoring.svt.TrackingReconstructionPlots">
<outputPlots>trackingPlots.aida</outputPlots>
</driver>
- <driver name="ExtrapolatorAnalysis" type="org.lcsim.hps.users.mgraham.TrackExtrapolationAnalysis">
- <hideFrame>true</hideFrame>
- <outputPlotFileName>extrapolatoranalysis.aida</outputPlotFileName>
- </driver>
<driver name="CleanupDriver"
type="org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver">
<collectionNames>TrackerHits SVTRawTrackerHits SVTFittedRawTrackerHits</collectionNames>
</driver>
- <driver name="EcalMonitoringPlots" type="org.lcsim.hps.monitoring.ecal.EcalMonitoringPlots"/>
- <driver name="SVTOccupancyPlots" type="org.lcsim.hps.monitoring.svt.SensorOccupancyPlotsDriver">
- <rawTrackerHitCollectionName>SVTRawTrackerHits</rawTrackerHitCollectionName>
- <eventRefreshRate>1</eventRefreshRate>
+ <driver name="HelicalTrackHitResidualsDriver" type="org.lcsim.hps.users.phansson.HelicalTrackHitResidualsDriver">
+ <debug>false</debug>
+ <hideFrame>false</hideFrame>
</driver>
-
+
- <driver name="HPSCalibrationDriver" type="org.lcsim.hps.monitoring.HPSCalibrationDriver"/>
+
+ <driver name="HPSCalibrationDriver" type="org.lcsim.hps.monitoring.HPSCalibrationDriver">
+ <runNumber>1351</runNumber>
+ </driver>
<driver name="EventMarkerDriver"
type="org.lcsim.job.EventMarkerDriver">
<eventInterval>1000</eventInterval>
@@ -95,5 +100,78 @@
+
+
+
+
+
+
+
+
+
+
+ <driver name="EcalReadout"
+ type="org.lcsim.hps.recon.ecal.HPSEcalFADCReadoutDriver">
+ <readoutPeriod>4.0</readoutPeriod>
+ <coincidenceWindow>2</coincidenceWindow>
+ <ecalName>Ecal</ecalName>
+ <ecalCollectionName>EcalHits</ecalCollectionName>
+ <ecalRawCollectionName>EcalRawHits</ecalRawCollectionName>
+ <triggerThreshold>80</triggerThreshold>
+ <readoutThreshold>50</readoutThreshold>
+ </driver>
+
+ <driver name="EcalConverter"
+ type="org.lcsim.hps.recon.ecal.HPSEcalConverterDriver">
+ <rawCollectionName>EcalRawHits</rawCollectionName>
+ <ecalCollectionName>EcalCorrectedHits</ecalCollectionName>
+ <scale>1</scale>
+ </driver>
+
+ <driver name="EcalTriggerFilter" type="org.lcsim.hps.recon.ecal.HPSEcalTriggerFilterDriver">
+ <inputCollection>EcalCorrectedHits</inputCollection>
+ <outputCollection>EcalFilteredHits</outputCollection>
+ </driver>
+
+ <driver name="EcalCTPClusterer"
+ type="org.lcsim.hps.recon.ecal.HPSEcalCTPClusterer">
+ <ecalName>Ecal</ecalName>
+ <clusterWindow>32.0</clusterWindow>
+ <ecalCollectionName>EcalFilteredHits</ecalCollectionName>
+ </driver>
+
+ <driver name="EcalTrigger"
+ type="org.lcsim.hps.recon.ecal.TestRunTriggerDriver">
+ <clusterCollectionName>EcalClusters</clusterCollectionName>
+ <deadTime>10</deadTime>
+ </driver>
+ <driver name="SimpleSVTReadout" type="org.lcsim.hps.recon.tracking.SimpleSvtReadout">
+ </driver>
+
+ <driver name="SVTReadout" type="org.lcsim.hps.recon.tracking.apv25.SvtReadout">
+ <debug>false</debug>
+ <pedestalRun>false</pedestalRun>
+ <triggerLatencyTime>288</triggerLatencyTime>
+ </driver>
+
+ <driver name="Digitization" type="org.lcsim.hps.recon.tracking.RearTransitionModule" />
+
+ <driver name="DataProcessing" type="org.lcsim.hps.recon.tracking.TestRunDataProcessingModule" >
+ <enablePileUpCut>true</enablePileUpCut>
+ <enableThresholdCut>true</enableThresholdCut>
+ <noiseThreshold>2</noiseThreshold>
+ <numberOfSamplesAboveTreshold>3</numberOfSamplesAboveTreshold>
+ <numberOfSamplesToReadOut>6</numberOfSamplesToReadOut>
+ </driver>
+
+ <driver name="ClockDriver"
+ type="org.lcsim.hps.util.ClockDriver">
+ </driver>
+
+ <driver name="TestRunReconToLcio" type="org.lcsim.hps.evio.TestRunTriggeredReconToLcio">
+ <!--<outputFile>${outputFile}</outputFile>-->
+ </driver>
+
+
</drivers>
</lcsim>
\ No newline at end of file
hps-java/src/main/java/org/lcsim/hps/users/phansson
diff -u -r1.17 -r1.18
--- MPAlignmentParameters.java 7 Nov 2012 20:55:23 -0000 1.17
+++ MPAlignmentParameters.java 14 Nov 2012 22:08:23 -0000 1.18
@@ -151,7 +151,8 @@
String half = hitsOnTrack.get(0).getPosition()[2]>0 ? "top" : "bottom";
pWriter.printf("TRACK %s (%d)\n",half,itrack);
aida.cloud1D("Track Chi2 "+ half).fill(track.getChi2());
- if(_DEBUG) System.out.printf("%s: track %d has %d hits\n",this.getClass().getSimpleName(),itrack,hitsOnTrack.size());
+ aida.cloud1D("Track Chi2ndf "+ half).fill(track.getChi2()/track.getNDF());
+ if(_DEBUG) System.out.printf("%s: track %d (chi2=%.2f ndf=%d) has %d hits\n",this.getClass().getSimpleName(),itrack,track.getChi2(),track.getNDF(),hitsOnTrack.size());
for (TrackerHit hit : hitsOnTrack) {
HelicalTrackHit htc = (HelicalTrackHit) hit;
@@ -730,82 +731,6 @@
- /*
-
-
- //****************************************************************************
- //Derivatives of the predicted hit position qp for a rotation alpha around the x-axis
-
- dqp_da_TRACK.setElement(0, 0, _alignUtils.dx_dalpha());
- dqp_da_TRACK.setElement(1, 0, _alignUtils.dy_dalpha());
- dqp_da_TRACK.setElement(2, 0, _alignUtils.dz_dalpha());
-
-
- //Put it into a matrix to be able to transform easily
- //BasicMatrix _dqp_da_TRACK = FillMatrix(dqp_da_TRACK, 3, 1);
- //Transform derivatives to sensor frame!
- dfdp = (BasicMatrix) MatrixOp.mult(trkToStrip, dqp_da_TRACK);
- //Add it to the global parameter object
- GlobalParameter gp_ra = new GlobalParameter("Rotation alpha",side,layer,2000,100,true);
- gp_ra.setDfDp(dfdp);
- _glp.add(gp_ra);
- if (_DEBUG) {
- gp_ra.print();
- System.out.println("Track frame dfdp: " + dqp_da_TRACK);
- //System.out.printf("dfdp = %5.5f %5.5f %5.5f GL%d name: %s\n", gp.dfdp(0), gp.dfdp(1), gp.dfdp(2), gp.getLabel(),gp.getName());
- }
-
-
- //****************************************************************************
- //Calculate derivatives for a residual in x,y,z-direction for rotation beta (rotation around beamline direction y )
-
- dqp_da_TRACK.setElement(0, 0, _alignUtils.dx_dbeta());
- dqp_da_TRACK.setElement(1, 0, _alignUtils.dy_dbeta());
- dqp_da_TRACK.setElement(2, 0, _alignUtils.dz_dbeta());
-
-
- //Put it into a matrix to be able to transform easily
- //BasicMatrix _dqp_da_TRACK = FillMatrix(dqp_da_TRACK, 3, 1);
- //Transform derivatives to sensor frame!
- dfdp = (BasicMatrix) MatrixOp.mult(trkToStrip, dqp_da_TRACK);
- //Add it to the global parameter object
- GlobalParameter gp_rb = new GlobalParameter("Rotation beta",side,layer,2000,200,true);
- gp_rb.setDfDp(dfdp);
- _glp.add(gp_rb);
- if (_DEBUG) {
- gp_rb.print();
- System.out.println("Track frame dfdp: " + dqp_da_TRACK);
- //System.out.printf("dfdp = %5.5f %5.5f %5.5f GL%d name: %s\n", gp.dfdp(0), gp.dfdp(1), gp.dfdp(2), gp.getLabel(),gp.getName());
- }
-
-
- //****************************************************************************
- //Calculate derivatives for a residual in x,y,z-direction for rotation gamma (rotation around beamline direction z )
-
- dqp_da_TRACK.setElement(0, 0, _alignUtils.dx_dgamma());
- dqp_da_TRACK.setElement(1, 0, _alignUtils.dy_dgamma());
- dqp_da_TRACK.setElement(2, 0, _alignUtils.dz_dgamma());
-
-
- //Put it into a matrix to be able to transform easily
- //BasicMatrix _dqp_da_TRACK = FillMatrix(dqp_da_TRACK, 3, 1);
- //Transform derivatives to sensor frame!
- dfdp = (BasicMatrix) MatrixOp.mult(trkToStrip, dqp_da_TRACK);
- //Add it to the global parameter object
- GlobalParameter gp_rg = new GlobalParameter("Rotation gamma",side,layer,2000,300,true);
- gp_rg.setDfDp(dfdp);
- _glp.add(gp_rg);
- if (_DEBUG) {
- gp_rg.print();
- System.out.println("Track frame dfdp: " + dqp_da_TRACK);
- //System.out.printf("dfdp = %5.5f %5.5f %5.5f GL%d name: %s\n", gp.dfdp(0), gp.dfdp(1), gp.dfdp(2), gp.getLabel(),gp.getName());
- }
-
- */
-
-
-
-
}
@@ -947,10 +872,13 @@
private void PrintStripResiduals(HelicalTrackStrip strip) {
+ String side = SvtUtils.getInstance().isTopLayer((SiSensor) ((RawTrackerHit)strip.rawhits().get(0)).getDetectorElement()) ? "top" : "bottom";
if (_DEBUG) {
System.out.printf("%s: --- Alignment Results for this Strip ---\n",this.getClass().getSimpleName());
- String side = SvtUtils.getInstance().isTopLayer((SiSensor) ((RawTrackerHit)strip.rawhits().get(0)).getDetectorElement()) ? "top" : "bottom";
- System.out.printf("%s: Strip layer %4d in %s at origin %s\n",this.getClass().getSimpleName(), strip.layer(), side, strip.origin().toString());
+
+ String sensor_type = SvtUtils.getInstance().isAxial((SiSensor) ((RawTrackerHit)strip.rawhits().get(0)).getDetectorElement()) ? "axial" : "stereo";
+ System.out.printf("%s: Strip layer %4d is %s in %s at origin %s\n",this.getClass().getSimpleName(), strip.layer(),sensor_type, side, strip.origin().toString());
+ System.out.printf("%s: u=%s v=%s w=%s\n",this.getClass().getSimpleName(), strip.u().toString(),strip.v().toString(),strip.w().toString());
System.out.printf("%s: Residuals (u,v,w) : %5.5e %5.5e %5.5e\n",this.getClass().getSimpleName(), _resid[0], _resid[1], _resid[2]);
System.out.printf("%s: Errors (u,v,w) : %5.5e %5.5e %5.5e\n",this.getClass().getSimpleName(), _error[0], _error[1], _error[2]);
String[] q = {"d0", "z0", "slope", "phi0", "R"};
@@ -970,7 +898,7 @@
// Loop over the three directions u,v,w and print residuals and derivatives
//String[] d = {"u","v","w"};
String[] d = {"u"}; //phansson use only u direction!
- String side;
+
int s;
for(int j=0;j<1;++j){
side = "bottom";
@@ -1014,12 +942,6 @@
aida.histogram1D("reserr_"+d[j]+"_layer" + strip.layer() + "_" + side).fill(_error[j]);
aida.histogram1D("respull_"+d[j]+"_layer" + strip.layer() + "_" + side).fill(_resid[j]/_error[j]);
-// double phi0 = _trk.phi0();
-// double R = _trk.R();
-// double xint = trackUtil.calculateHelixInterceptXPlane(_trk, strip);
-// //double xint = strip.origin().x();
-// double pathLength = HelixUtils.PathToXPlane(_trk, xint, 0, 0).get(0);
-// double phi = -s/R + phi0;
aida.histogram2D("respull_slope_"+d[j]+"_layer" + strip.layer() + "_" + side).fill(_trk.slope(),_resid[j]/_error[j]);
}
@@ -1069,13 +991,17 @@
String[] side = {"top","bottom"};
IPlotter plotter_chi2 = af.createPlotterFactory().create();
- plotter_chi2.createRegions(2,1,0);
+ plotter_chi2.createRegions(2,2);
plotter_chi2.setTitle("Track Chi2");
plotterFrame.addPlotter(plotter_chi2);
ICloud1D hchi2_top = aida.cloud1D("Track Chi2 top");
ICloud1D hchi2_bot = aida.cloud1D("Track Chi2 bottom");
+ ICloud1D hchi2ndf_top = aida.cloud1D("Track Chi2ndf top");
+ ICloud1D hchi2ndf_bot = aida.cloud1D("Track Chi2ndf bottom");
plotter_chi2.region(0).plot(hchi2_top);
plotter_chi2.region(1).plot(hchi2_bot);
+ plotter_chi2.region(2).plot(hchi2ndf_top);
+ plotter_chi2.region(3).plot(hchi2ndf_bot);
String[] direction = {"u"};
hps-java/src/main/java/org/lcsim/hps/recon/tracking
diff -u -r1.9 -r1.10
--- TrackUtils.java 7 Nov 2012 20:57:12 -0000 1.9
+++ TrackUtils.java 14 Nov 2012 22:08:23 -0000 1.10
@@ -24,7 +24,7 @@
/**
*
* @author Omar Moreno <[log in to unmask]>
- * @version $Id: TrackUtils.java,v 1.9 2012/11/07 20:57:12 phansson Exp $
+ * @version $Id: TrackUtils.java,v 1.10 2012/11/14 22:08:23 phansson Exp $
* TODO: Switch to JLab coordinates
*/
@@ -474,7 +474,7 @@
double s_wrong = track.PathMap().get(hth);
//This is how I do it with HelicalTrackFits
double s = HelixUtils.PathToXPlane(track, hth.x(), 0, 0).get(0);
- System.out.printf("x %f s %f smap %f\n",hth.x(),s,s_wrong);
+ //System.out.printf("x %f s %f smap %f\n",hth.x(),s,s_wrong);
Hep3Vector posOnHelix = HelixUtils.PointOnHelix(track, s);
double resy = hth.y() - posOnHelix.y();
double erry = includeMS ? wrphi : drphi_res;