lcsim/src/org/lcsim/digisim
diff -u -r1.10 -r1.11
--- DigiSimDriver.java 18 Jul 2005 19:18:25 -0000 1.10
+++ DigiSimDriver.java 26 Jul 2005 23:58:41 -0000 1.11
@@ -13,7 +13,7 @@
* both parameters and events from the framework.
*
* @author Guilherme Lima
- * @version $Id: DigiSimDriver.java,v 1.10 2005/07/18 19:18:25 tonyj Exp $
+ * @version $Id: DigiSimDriver.java,v 1.11 2005/07/26 23:58:41 lima Exp $
*/
public class DigiSimDriver extends Driver {
@@ -28,7 +28,10 @@
}
/** Private constructor, not to be used */
- private DigiSimDriver() { }
+ public DigiSimDriver() {
+ _name = new String("");
+ _digitizers = new Vector<Digitizer>();
+ }
/**
* Driver initialization. Instantiates and initializes all
@@ -36,11 +39,14 @@
* information, are stored in the same configuration file
*/
public void init() {
- // FIXME: This should be using conditions system
+ // FIXME: This should be using conditions system
+// System.out.println("DSDriver.init(): _name=<"+_name+">");
+ if(_name.equals("")) return;
+
// open released config file from lcsim.jar
- ConfigReader file = new ConfigReader(DigiSimDriver.class.getResourceAsStream(_name+".steer"));
+ ConfigReader file = new ConfigReader(DigiSimDriver.class.getResourceAsStream(_name+".steer"));
// use local config file
-// ConfigReader file = new ConfigReader(_name+".steer");
+// ConfigReader file = new ConfigReader(_name+".steer");
// read config file
Map<String,Vector<String>> sections = file.digiSimParse();
@@ -83,6 +89,12 @@
/** Called for every event - the event loop */
protected void process( EventHeader event ) {
+
+ if(_name.equals("")) {
+ _name = event.getDetectorName();
+ this.init();
+ }
+
// System.out.println("DigiSimDriver::process() "+ _name
// +" in event "+ evt.getEventNumber()
// +" (run "+ evt.getRunNumber() + ") ");
@@ -119,4 +131,16 @@
/** modifiers */
private Vector<Digitizer> _digitizers;
// private String _digisimURL = "http://nicadd.niu.edu/digisim/config/";
+
+ // static registration globals
+ private static boolean _gaindisc = GainDiscrimination.registerMe();
+ private static boolean _gaussnoise = GaussianNoise.registerMe();
+ private static boolean _exponoise = ExponentialNoise.registerMe();
+ private static boolean _hotcell = HotCell.registerMe();
+ private static boolean _deadcell = DeadCell.registerMe();
+ private static boolean _sipmsatur = SiPMSaturation.registerMe();
+ private static boolean _xtalk = Crosstalk.registerMe();
+ private static boolean _absdisc = AbsValueDiscrimination.registerMe();
+ private static boolean _gain = SmearedGain.registerMe();
+ private static boolean _timing = SmearedTiming.registerMe();
}
lcsim/src/org/lcsim/digisim
diff -u -r1.7 -r1.8
--- DigiSimMain.java 20 Jul 2005 21:14:48 -0000 1.7
+++ DigiSimMain.java 26 Jul 2005 23:58:41 -0000 1.8
@@ -18,20 +18,33 @@
import org.lcsim.digisim.DigiSimDriver;
/**
- * The main driver for digitization simulation.
+ * The main driver for standalone digitization simulation
*
* @author Guilherme Lima
- * @version $Id: DigiSimMain.java,v 1.7 2005/07/20 21:14:48 lima Exp $
+ * @version $Id: DigiSimMain.java,v 1.8 2005/07/26 23:58:41 lima Exp $
*/
public class DigiSimMain extends Driver {
public DigiSimMain() {
+ this( new String[0] );
+ }
+
+ public DigiSimMain(String[] args) {
// instantiate all needed drivers
- String name = "SDJan03";
_hitmgr = new CalHitMapDriver();
- _digi = new DigiSimDriver(name);
+
+ if( args.length>0 ) {
+ // Config file given in CL. Pass it to the driver
+ String name = args[0];
+ _digi = new DigiSimDriver(name);
+ }
+ else {
+ _digi = new DigiSimDriver();
+ }
+
_calhit = new CalorimeterHitsDriver();
+
_nevt = 0;
// initialize data provider and digitizers
@@ -40,6 +53,13 @@
_calhit.init();
}
+ /** Debugging printout control */
+ public void setDebug() {
+ // format: "Digitizer:Modifier"
+// _digi.setDebug("EcalEndcapDigitizer:EMECcrosstalk", 1);
+// _digi.setDebug("HcalBarrDigitizer:HBExpoNoise", 1);
+ }
+
//
protected void process(final EventHeader event) {
// event counter
@@ -59,105 +79,102 @@
// +" EM="+emhits.size()+", HAD="+hadhits.size());
//.. test digisim works
- // using fixed factors, compare sim and raw hits
try {
+ // using fixed factors, compare sim and raw hits
List<LCRelation> raw2simLinks
= event.get( LCRelation.class, "EcalBarrRaw2sim" );
for( LCRelation rel : raw2simLinks ) {
RawCalorimeterHit rawhit = (RawCalorimeterHit)rel.getFrom();
SimCalorimeterHit simhit = (SimCalorimeterHit)rel.getTo();
- int simE = (int)(simhit.getEnergy()*1000000.0);
+ int simE = (int)(simhit.getEnergy()*100000000.0);
assert simE == rawhit.getAmplitude()
: "Discrepancy on EcalBarr: simE=" + simE
+ ", rawE=" + rawhit.getAmplitude() ;
}
+
+// checkCrosstalk(event);
}
catch(IllegalArgumentException e) {
// no problem if data is not there
}
+ }
- // Test crosstalk modifier: Use fixed 10% values, check neighbours,
- // weights, etc.
- try {
- List<SimCalorimeterHit> simhits
- = event.get(SimCalorimeterHit.class, "EcalEndcapHits");
- List<RawCalorimeterHit> rawhits
- = event.get(RawCalorimeterHit.class, "EcalEndcapRawHits");
- List<LCRelation> raw2simLinks
- = event.get(LCRelation.class, "EcalEndcapRaw2sim");
-
- System.out.println("Checking crosstalk for EcalEndcaps...");
- System.out.println("# hits: sim="+( simhits==null? 0 : simhits.size() )
- +", raw=" +( rawhits==null? 0 : rawhits.size() )
- +" - #links="+( raw2simLinks==null? 0: raw2simLinks.size()));
-
- Map<Long,Double> weightMap = new HashMap<Long,Double>();
- int ilink = 0;
- for( LCRelation rel : raw2simLinks ) {
- ++ilink;
- RawCalorimeterHit rawhit = (RawCalorimeterHit)rel.getFrom();
- SimCalorimeterHit simhit = (SimCalorimeterHit)rel.getTo();
-
- Long rawid = new Long(rawhit.getCellID());
- long simid = (simhit!=null ? simhit.getCellID() : 0);
- Double temp = weightMap.get(rawid);
- if(temp==null) {
- temp = new Double( rel.getWeight() );
- weightMap.put( rawid, temp );
- }
- else {
- temp += rel.getWeight();
+ private void checkCrosstalk(final EventHeader event) {
+ // Test crosstalk modifier: Use fixed 10% values, check neighbours,
+ // weights, etc.
+ try {
+ List<SimCalorimeterHit> simhits
+ = event.get(SimCalorimeterHit.class, "EcalEndcapHits");
+ List<RawCalorimeterHit> rawhits
+ = event.get(RawCalorimeterHit.class, "EcalEndcapRawHits");
+ List<LCRelation> raw2simLinks
+ = event.get(LCRelation.class, "EcalEndcapRaw2sim");
+
+ System.out.println("Checking crosstalk for EcalEndcaps...");
+ System.out.println("# hits: sim="+( simhits==null? 0 : simhits.size() )
+ +", raw=" +( rawhits==null? 0 : rawhits.size() )
+ +" - #links="+( raw2simLinks==null? 0: raw2simLinks.size()));
+
+ Map<Long,Double> weightMap = new HashMap<Long,Double>();
+ int ilink = 0;
+ for( LCRelation rel : raw2simLinks ) {
+ ++ilink;
+ RawCalorimeterHit rawhit = (RawCalorimeterHit)rel.getFrom();
+ SimCalorimeterHit simhit = (SimCalorimeterHit)rel.getTo();
+
+ Long rawid = new Long(rawhit.getCellID());
+ long simid = (simhit!=null ? simhit.getCellID() : 0);
+ Double temp = weightMap.get(rawid);
+ if(temp==null) {
+ temp = new Double( rel.getWeight() );
+ weightMap.put( rawid, temp );
+ }
+ else {
+ temp += rel.getWeight();
// double newval = temp.doubleValue() + rel.getWeight();
// weightMap.put( new Long(rawid), new Double(rel.getWeight()) );
- }
+ }
- // discard links where simid==rawid or simid==zero
- if(rawid==simid) {
- System.out.println("link "+ilink+" not crosstalk.");
- continue;
- }
- if(simid==0.0) {
- System.out.println("link "+ilink+", simid=zero.");
- continue;
- }
+ // discard links where simid==rawid or simid==zero
+ if(rawid==simid) {
+// System.out.println("link "+ilink+" not crosstalk.");
+ continue;
+ }
+ if(simid==0.0) {
+// System.out.println("link "+ilink+", simid=zero.");
+ continue;
+ }
- // make sure sim,raw cells are good neighbors
+ // make sure sim,raw cells are good neighbors
// IDDecoder decoder = new IDDecoder();
- assert ((simid & 0x7f) == (rawid & 0x7f))
- : "link "+ilink+", layer discrepancy: "+ simid +" "+rawid;
- assert ((simid & 0x1f80) == (rawid & 0x1f80))
- : "link "+ilink+", system+barrel discrepancy: "+ simid +" "+rawid;
-
- // check theta,phi distance
- int rawthe = (int)(rawid >> 32) & 0x7ff;
- int simthe = (int)(simid >> 32) & 0x7ff;
- int rawphi = (int)(rawid >> 43) & 0x7ff;
- int simphi = (int)(simid >> 43) & 0x7ff;
- int delthe = rawthe - simthe + 1;
- int delphi = rawphi - simphi + 1;
- assert ((delthe>=0) && (delthe<=2))
- : "link "+ilink+", theta discrepancy: "+ simid +" "+rawid;
- assert ((delphi>=0) && (delphi<=2))
- : "link "+ilink+", phi discrepancy: "+ simid +" "+rawid;
-
- int simE = (int)(simhit.getEnergy()*1000000.0);
- int rawE = (int)(rawhit.getAmplitude());
- System.out.println("X-check: simid="+Long.toHexString(simid)
- +", simE=" + simE
- + " - RawID="+Long.toHexString(rawid.longValue())
- +", rawE=" + rawE );
+ assert ((simid & 0x7f) == (rawid & 0x7f))
+ : "link "+ilink+", layer discrepancy: "+ simid +" "+rawid;
+ assert ((simid & 0x1f80) == (rawid & 0x1f80))
+ : "link "+ilink+", system+barrel discrepancy: "+ simid +" "+rawid;
+
+ // check theta,phi distance
+ int rawthe = (int)(rawid >> 32) & 0x7ff;
+ int simthe = (int)(simid >> 32) & 0x7ff;
+ int rawphi = (int)(rawid >> 43) & 0x7ff;
+ int simphi = (int)(simid >> 43) & 0x7ff;
+ int delthe = rawthe - simthe + 1;
+ int delphi = rawphi - simphi + 1;
+ assert ((delthe>=0) && (delthe<=2))
+ : "link "+ilink+", theta discrepancy: "+ simid +" "+rawid;
+ assert ((delphi>=0) && (delphi<=2))
+ : "link "+ilink+", phi discrepancy: "+ simid +" "+rawid;
+
+ int simE = (int)(simhit.getEnergy()*1000000.0);
+ int rawE = (int)(rawhit.getAmplitude());
+ System.out.println("X-check: simid="+Long.toHexString(simid)
+ +", simE=" + simE
+ + " - RawID="+Long.toHexString(rawid.longValue())
+ +", rawE=" + rawE );
+ }
+ }
+ catch(IllegalArgumentException e) {
+ // a collection requested does not exist in current event
}
- }
- catch(IllegalArgumentException e) {
- // a collection requested does not exist in current event
- }
- }
-
- /** Debugging printout control */
- public void setDebug() {
- // format: "Digitizer:Modifier"
-// _digi.setDebug("EcalEndcapDigitizer:EMECcrosstalk", 1);
-// _digi.setDebug("HcalBarrDigitizer:HBExpoNoise", 1);
}
//***** FIELDS *****
@@ -169,18 +186,6 @@
private DigiSimDriver _digi;
private CalorimeterHitsDriver _calhit;
- // static registration globals
- private static boolean _gaindisc = GainDiscrimination.registerMe();
- private static boolean _gaussnoise = GaussianNoise.registerMe();
- private static boolean _exponoise = ExponentialNoise.registerMe();
- private static boolean _hotcell = HotCell.registerMe();
- private static boolean _deadcell = DeadCell.registerMe();
- private static boolean _sipmsatur = SiPMSaturation.registerMe();
- private static boolean _xtalk = Crosstalk.registerMe();
- private static boolean _absdisc = AbsValueDiscrimination.registerMe();
- private static boolean _gain = SmearedGain.registerMe();
- private static boolean _timing = SmearedTiming.registerMe();
-
//***** MAIN ENTRY POINT *****
public static void main(String[] args) throws Exception {
@@ -191,22 +196,24 @@
// setup input/outfile files
File input = new File("inputfile");
loop.setLCIORecordSource(input);
- File output = new File("digisim.slcio");
// drivers needed
- DigiSimMain digidriver = new DigiSimMain();
- loop.add( digidriver );
+ DigiSimMain digimain = new DigiSimMain(args);
+ loop.add( digimain );
+
+ // output file
+ File output = new File("digisim.slcio");
loop.add( new LCIODriver(output) );
// debugging control
- digidriver.setDebug();
+ digimain.setDebug();
// event loop
- loop.loop(10); // -1 for all
+ loop.loop(-1); // -1 for all
loop.dispose();
org.lcsim.util.aida.AIDA.defaultInstance().saveAs("myhistos.aida");
- System.out.println("Analyzed "+digidriver._nevt+" events");
+ System.out.println("Analyzed "+digimain._nevt+" events");
}
private void log(String text) {