lcsim/src/org/lcsim/contrib/SteveMagill
diff -u -r1.5 -r1.6
--- PFATemplate.java 23 Apr 2007 20:27:07 -0000 1.5
+++ PFATemplate.java 18 May 2007 19:59:21 -0000 1.6
@@ -33,7 +33,7 @@
// String Tname = "RefinedCheatTracks";
// String Cname = "CombinedDigiCheatClusters";
// String defRname = "CheatReconstructedParticles";
- boolean FullPFA = true;
+ boolean FullPFA = false;
public PFATemplate()
{
@@ -43,8 +43,10 @@
add(new CalHitMapDriver());
DigiSimDriver digi = new DigiSimDriver();
// set steering file - CHANGE THIS TO YOUR DIRECTORY
-// digi.setSteeringFile("org.lcsim.contrib.SteveMagill\\WSc000225.steer"); // for Scintillator HCALs 1/4 Mip thr
- digi.setSteeringFile("org.lcsim.contrib.SteveMagill\\WRPCnothr.steer"); // for RPC HCALs
+ digi.setSteeringFile("C:\\Documents and Settings\\adminsrm\\.JAS3\\java\\WSc0005.steer");
+// digi.setSteeringFile("C:\\Documents and Settings\\adminsrm\\.JAS3\\java\\WSc000225.steer");
+// digi.setSteeringFile("C:\\Documents and Settings\\adminsrm\\.JAS3\\java\\WSc001.steer");
+// digi.setSteeringFile("C:\\Documents and Settings\\adminsrm\\.JAS3\\java\\WRPCnothr.steer");
add(digi);
add(new SimCalorimeterHitsDriver());
// output of DigiSim is hit collections - EcalBarrDigiHits, EcalEndcapDigiHits, HcalBarrDigiHits, HcalEndcapDigiHits
@@ -79,8 +81,8 @@
// Set up the MC list for perfect PFA
// double rcut = 730.; // can have 3 hits in tracker (layer 3 is at 727 for ACME 0605)
// double zcut = 730.; // can have 3 hits in tracker (layer 3 is at 727 for ACME 0605)
- double rcut = 300.; // Bruce said 400 mm at meeting March 13
- double zcut = 300.;
+ double rcut = 400.; // Bruce said 400 mm at meeting March 13
+ double zcut = 400.;
CreateFinalStateMCParticleList mcListMakerGen = new CreateFinalStateMCParticleList("Gen");
CreateFinalStateMCParticleList mcListMakerSim = new CreateFinalStateMCParticleList("Sim");
mcListMakerSim.setRadiusCut(rcut);
@@ -109,8 +111,8 @@
// now make (more realistic) cheat tracks, etc with PPR driver
String outName = "PerfectRecoParticles";
- int minT = 0;
- int minC = 0;
+ int minT = 3;
+ int minC = 2;
PPRParticleDriver d = new PPRParticleDriver(CRPname, outName);
d.setMinTrackerHits(minT);
d.setMinCalorimeterHits(minC);
@@ -154,30 +156,52 @@
hadeconverter.setInputHitMap("HADEndcaphitmap");
hadeconverter.setOutputList("HECTMHits");
add(hadeconverter);
-
+
// PHOTON FINDER
// Fixed Cone (use for photons now until DT is fixed)
-// double radius = 0.04;
-// double seed = 0.;
-// double minE = 0.;
-// FixedConeClusterDriver FCdriver = new FixedConeClusterDriver(radius, seed, minE);
+ double radius = 0.025;
+ double seed = 0.;
+ double minE = 0.0;
+ FixedConeClusterDriver FCdriver = new FixedConeClusterDriver(radius, seed, minE);
// for now, use digihits, but will use EMBarrTMHits and EMEndcapTMHits eventually
-// String[] fchitcollnames = {"EBTMHits","EECTMHits"};
-// FCdriver.setCollectionNames(fchitcollnames);
-// FCdriver.setClusterNameExtension("FCClus");
-// add(FCdriver);
-
+ String[] fchitcollnames = {"EBTMHits","EECTMHits","HBTMHits","HECTMHits"};
+ FCdriver.setCollectionNames(fchitcollnames);
+ FCdriver.setClusterNameExtension("FCClus");
+ add(FCdriver);
+
+ // to select EM clusters for photon finding, first need to eliminate those EM clusters
+ // that match with a HAD cluster. Pick a clusterer with good purity - don't want to
+ // make clusters from too many different particles.
+ // first for barrel
+// CombinedClusterDriver CCBdriver = new CombinedClusterDriver();
+// String embclusname = ("EBTMHitsFCClus");
+// String hadbclusname = ("HBTMHitsFCClus");
+// String EBclname = ("EBOnlyClusters");
+// CCBdriver.setInputEClusterName(embclusname);
+// CCBdriver.setInputHClusterName(hadbclusname);
+// CCBdriver.setOutputClusterName(EBclname);
+// add(CCBdriver);
+ // for endcap
+// CombinedClusterDriver CCECdriver = new CombinedClusterDriver();
+// String emecclusname = ("EECTMHitsFCClus");
+// String hadecclusname = ("HECTMHitsFCClus");
+// String EECclname = ("EECOnlyClusters");
+// CCECdriver.setInputEClusterName(emecclusname);
+// CCECdriver.setInputHClusterName(hadecclusname);
+// CCECdriver.setOutputClusterName(EECclname);
+// add(CCECdriver);
+
// Use Directed Tree clusterer first to set up photon finding
// this is setup differently than NN - no choice in hit collections - does all hits
- DirectedTreeDriver DTBdriver = new DirectedTreeDriver();
- DTBdriver.setInputHitMap("EMBarrhitmap");
- DTBdriver.setOutputClusterList("EBTMHitsFCClus");
- add(DTBdriver);
-
- DirectedTreeDriver DTECdriver = new DirectedTreeDriver();
- DTECdriver.setInputHitMap("EMEndcaphitmap");
- DTECdriver.setOutputClusterList("EECTMHitsFCClus");
- add(DTECdriver);
+// DirectedTreeDriver DTBdriver = new DirectedTreeDriver();
+// DTBdriver.setInputHitMap("EMBarrhitmap");
+// DTBdriver.setOutputClusterList("EBTMHitsFCClus");
+// add(DTBdriver);
+
+// DirectedTreeDriver DTECdriver = new DirectedTreeDriver();
+// DTECdriver.setInputHitMap("EMEndcaphitmap");
+// DTECdriver.setOutputClusterList("EECTMHitsFCClus");
+// add(DTECdriver);
// add photon finder here - takes above DT (or fixed cone) clusters as input,
// runs NN 11110 on the cluster hits and applies HMatrix
@@ -185,8 +209,10 @@
int mincells = 20;
double dTrcl = 0.05; // Graham says photons are 0.06 wide
PhotonFinderDriver Phdriver = new PhotonFinderDriver(mincells,dTrcl);
-// String[] phcollnames = {"EMBarrTMHits","EMEndcapTMHits"};
-// Phdriver.setCollectionNames(phcollnames);
+ String EBclname = ("EBTMHitsFCClus");
+ String EECclname = ("EECTMHitsFCClus");
+ Phdriver.setBInputClusterName(EBclname);
+ Phdriver.setECInputClusterName(EECclname);
// Phdriver.setClusterNameExtension("PhoClus");
add(Phdriver);
@@ -220,101 +246,115 @@
ectmphoconverter.setOutputList("EECTMPHits");
add(ectmphoconverter);
+ // make a combined hitmap for hits left after mip, photon finding
+ HitListToHitMapDriver newHitMap = new HitListToHitMapDriver();
+ newHitMap.addInputList("EBTMPHits");
+ newHitMap.addInputList("EECTMPHits");
+ newHitMap.addInputList("HBTMHits");
+ newHitMap.addInputList("HECTMHits");
+ newHitMap.setOutput("PreTrShowerhitmap");
+ add(newHitMap);
+
+ // make a collection to display
+ HitMapToHitListDriver prTrShconverter = new HitMapToHitListDriver();
+ prTrShconverter.setInputHitMap("PreTrShowerhitmap");
+ prTrShconverter.setOutputList("PreTrShowHits");
+ add(prTrShconverter);
+
// TRACK - CLUSTER MATCHING Algorithm here
// cluster remaining hits in ECAL, HCAL for track matching -
// use loose NN clusterer 10,10,10,10?
- int hdU = 2;
- int hdV = 2;
- int hdLayer = 2;
- int hncells = 5;
+ int hdU = 3;
+ int hdV = 3;
+ int hdLayer = 3;
+ int hncells = 2;
double hthresh = 0;
NearestNeighborClusterDriver NNHdriver = new NearestNeighborClusterDriver(hdU, hdV, hdLayer, hncells, hthresh);
String[] nnhhitcollnames = {"HBTMHits","HECTMHits"};
NNHdriver.setCollectionNames(nnhhitcollnames);
NNHdriver.setClusterNameExtension("NNHClus");
add(NNHdriver);
-
- // try fixed cone in HCAL - picks up more hits - probably worse for higher E
-// double hradius = 0.25;
-// double hseed = 0.0;
-// double hminE = 0.05;
-// FixedConeClusterDriver HFCdriver = new FixedConeClusterDriver(hradius, hseed, hminE);
-// String[] hfchitcollnames = {"HBTMHits","HECTMHits"};
-// HFCdriver.setCollectionNames(hfchitcollnames);
-// HFCdriver.setClusterNameExtension("FCClus");
-// add(HFCdriver);
-
- DirectedTreeDriver DTHBdriver = new DirectedTreeDriver();
- DTHBdriver.setInputHitMap("HADBarrhitmap");
- DTHBdriver.setOutputClusterList("HBDTClus");
- add(DTHBdriver);
-
- DirectedTreeDriver DTHECdriver = new DirectedTreeDriver();
- DTHECdriver.setInputHitMap("HADEndcaphitmap");
- DTHECdriver.setOutputClusterList("HECDTClus");
- add(DTHECdriver);
-
+
// now do EM also - use NN here
- int dU = 2;
- int dV = 2;
- int dLayer = 2;
- int ncells = 5;
+ int dU = 1;
+ int dV = 1;
+ int dLayer = 3;
+ int ncells = 2;
double thresh = 0;
NearestNeighborClusterDriver NNEdriver = new NearestNeighborClusterDriver(dU, dV, dLayer, ncells, thresh);
String[] nnehitcollnames = {"EBTMPHits","EECTMPHits"};
NNEdriver.setCollectionNames(nnehitcollnames);
NNEdriver.setClusterNameExtension("NNEClus");
add(NNEdriver);
+
+// DirectedTreeDriver DTHECdriver = new DirectedTreeDriver();
+// DTHECdriver.setInputHitMap("HADEndcaphitmap");
+// DTHECdriver.setOutputClusterList("HECDTClus");
+// add(DTHECdriver);
- // put all clusters into 1 collection?
+// DirectedTreeDriver DTEBdriver = new DirectedTreeDriver();
+// DTEBdriver.setInputHitMap("EBTMPhitmap");
+// DTEBdriver.setOutputClusterList("EBDTClus");
+// add(DTEBdriver);
+
+// DirectedTreeDriver DTEECdriver = new DirectedTreeDriver();
+// DTEECdriver.setInputHitMap("EECTMPhitmap");
+// DTEECdriver.setOutputClusterList("EECDTClus");
+// add(DTEECdriver);
// add matching driver here
- TrackShowerClusterDriver TrShdriver = new TrackShowerClusterDriver();
- String[] shclnames = {"EBTMPHitsNNEClus","EECTMPHitsNNEClus","HBDTClus","HECDTClus"};
-// String[] shclnames = {"EBTMPHitsNNEClus","EECTMPHitsNNEClus","HBTMHitsNNHClus","HECTMHitsNNHClus"};
+ double minsep = 0.015;
+ int nloop = 4;
+ double minEp = 0.65;
+ TrackShowerClusterDriver TrShdriver = new TrackShowerClusterDriver(minsep, nloop, minEp);
+// String[] shclnames = {"EBTMPHitsNNEClus","EECTMPHitsNNEClus","HBDTClus","HECDTClus"}; // EM NN, HAD DT
+ String[] shclnames = {"EBTMPHitsNNEClus","EECTMPHitsNNEClus","HBTMHitsNNHClus","HECTMHitsNNHClus"}; // EM NN, HAD NN
+// String[] shclnames = {"EBDTClus","EECDTClus","HBDTClus","HECDTClus"}; // EM DT, HAD DT
TrShdriver.setClusterNames(shclnames);
add(TrShdriver);
+
+ ClusterListToHitMapDriver TrShowerHitDriver = new ClusterListToHitMapDriver();
+ TrShowerHitDriver.addInputList("TrackShowerClusters");
+ TrShowerHitDriver.setOutputHitMap("TSHitMap");
+ add(TrShowerHitDriver);
+ HitMapSubtractDriver TSsubdriver = new HitMapSubtractDriver();
+ TSsubdriver.setFirstHitMap("PreTrShowerhitmap");
+ TSsubdriver.setSecondHitMap("TSHitMap");
+ TSsubdriver.setOutputHitMap("LeftOverhitmap");
+ add(TSsubdriver);
+
+ HitMapToHitListDriver LOconverter = new HitMapToHitListDriver();
+ LOconverter.setInputHitMap("LeftOverhitmap");
+ LOconverter.setOutputList("TMPTrHits");
+ add(LOconverter);
+
+ // try DT here with fewer hits
+ DirectedTreeDriver DTNHdriver = new DirectedTreeDriver();
+ DTNHdriver.setInputHitMap("LeftOverhitmap");
+ DTNHdriver.setOutputClusterList("NHCandClusters");
+ add(DTNHdriver);
+
+ // add neutral hadron finder here
+// NeutralHadronClusterDriver NHCldriver = new NeutralHadronClusterDriver();
+ int ncell = 12; // minimum number of cal cells in a NH cluster
+ double Enmin = 0.250; // minimum cluster energy
+ double ccdistance = 0.125; // distance in dthdphi to merge clusters
+ NHCandClusterDriver NHCldriver = new NHCandClusterDriver(ncell,Enmin,ccdistance);
+// String[] shclnames = {"EBTMPHitsNNEClus","EECTMPHitsNNEClus","HBDTClus","HECDTClus"}; // EM NN, HAD DT
+// String nhclname = {"NHCandClusters"};
+// String[] shclnames = {"EBDTClus","EECDTClus","HBDTClus","HECDTClus"}; // EM DT, HAD DT
+ NHCldriver.setInputClusterName("NHCandClusters");
+ NHCldriver.setOutputClusterName("NeutralHadronClusters");
+ add(NHCldriver);
- if (FullPFA)
- {
- // Do dijet mass for PFA after making Reconstructed Particle List
+ // Make Reconstructed Particle List from tracks, clusters
ClusterToReconstructedParticleDriver ClRPdriver = new ClusterToReconstructedParticleDriver();
ClRPdriver.setTrackNames("PerfectTracks");
String[] phnames = {"PhotonBClusters","PhotonECClusters"};
ClRPdriver.setPhotonNames(phnames);
- ClRPdriver.setNeutralHadNames("NeuHClusters");
+ ClRPdriver.setNeutralHadNames("NeutralHadronClusters");
+ ClRPdriver.setRecoParticleName("AllRecoParticles");
add(ClRPdriver);
-
- // now find jets with real Reco Particles
- JetDriver PFAjet = new JetDriver();
- PFAjet.setInputCollectionName("AllRecoParticles");
- PFAjet.setOutputCollectionName("PFAJets");
- JetFinder tworealjets = new FixNumberOfJetsFinder(2);
- PFAjet.setFinder(tworealjets);
- // for Durham jet, ycut = 0.25 at ZPole, 0.01 at 500 GeV ZZ
-// JetFinder rktjet = new DurhamJetFinder(0.0003);
-// PFAjet.setFinder(rktjet);
- add(PFAjet);
-
- // make perfect jets out of perfect particles
- JetDriver j = new JetDriver();
- j.setInputCollectionName(outName);
- j.setOutputCollectionName("PerfectJets");
- JetFinder twojet = new FixNumberOfJetsFinder(2);
- j.setFinder(twojet);
- // for Durham jet, ycut = 0.25 at ZPole, 0.01 at 500 GeV ZZ
-// JetFinder ktjet = new DurhamJetFinder(0.0003);
-// j.setFinder(ktjet);
- add(j);
-
- // make plots etc. from results
- PPFAPlotDriver ppfaplots = new PPFAPlotDriver();
- ppfaplots.setMCPartName(CRPname);
- ppfaplots.setPerfJetName("PerfectJets");
- ppfaplots.setPFAJetName("PFAJets");
- ppfaplots.setPerfPartName(outName);
- add(ppfaplots);
- }
}
}