Commit in lcsim/src/org/lcsim/contrib/SteveMagill on MAIN
PFATemplate.java+136-961.5 -> 1.6


lcsim/src/org/lcsim/contrib/SteveMagill
PFATemplate.java 1.5 -> 1.6
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);   
-       }
 
    }
 }
CVSspam 0.2.8