Commit in lcsim/src/org/lcsim/contrib/SteveMagill on MAIN
PFATemplate.java+235-1071.2 -> 1.3


lcsim/src/org/lcsim/contrib/SteveMagill
PFATemplate.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- PFATemplate.java	20 Feb 2007 20:41:43 -0000	1.2
+++ PFATemplate.java	23 Apr 2007 18:05:01 -0000	1.3
@@ -1,42 +1,55 @@
-package org.lcsim.contrib.SteveMagill;
-
 import java.util.*;
 import org.lcsim.util.*;
+import org.lcsim.event.*;
+import org.lcsim.event.util.*;
 import org.lcsim.util.hitmap.*;
-import org.lcsim.util.aida.AIDA;
+
 import org.lcsim.recon.cluster.util.CalHitMapDriver;
 import org.lcsim.digisim.DigiSimDriver;
 import org.lcsim.digisim.SimCalorimeterHitsDriver;
+import org.lcsim.util.hitmap.HitListToHitMapDriver;
+import org.lcsim.util.hitmap.HitMapToHitListDriver;
+import org.lcsim.event.util.CreateFinalStateMCParticleList;
+import org.lcsim.recon.cluster.cheat.PerfectClusterer;
+import org.lcsim.recon.pfa.cheat.PerfectIdentifier;
+
+import org.lcsim.recon.cluster.cheat.CheatClusterDriver;
+import org.lcsim.recon.tracking.cheat.CheatTrackDriver;
+import org.lcsim.recon.particle.CheatParticleDriver;
+import org.lcsim.contrib.Cassell.recon.Cheat.PPRParticleDriver;
+
 import org.lcsim.recon.cluster.fixedcone.*;
 import org.lcsim.recon.cluster.nn.*;
+import org.lcsim.recon.cluster.directedtree.DirectedTreeDriver;
+
+import hep.physics.jet.*;
 
 public class PFATemplate extends Driver
 {
-   private AIDA aida = AIDA.defaultInstance();
    
+//   String FSname = "SimFinalStateParticles";
+//   String Tname = "RefinedCheatTracks";
+//   String Cname = "CombinedDigiCheatClusters";
+//   String defRname = "CheatReconstructedParticles";
+     boolean FullPFA = true;
+    
    public PFATemplate()
    {
        
-//  INITIALIZE Analysis - use DIGISIM to get hits after timing, threshold, etc. cuts 
+//  use DIGISIM to get hits after timing, threshold, etc. cuts 
 //  this implementation allows individual steering file to be used
        add(new CalHitMapDriver());
        DigiSimDriver digi = new DigiSimDriver();
        //  set steering file - CHANGE THIS TO YOUR DIRECTORY
-       digi.setSteeringFile("C:\\Documents and Settings\\adminsrm\\.JAS3\\java\\WSc0005.steer");
+//       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
-
-//  MCFILTER here, PERFECT PFA here, etc.
-       //  add a MC Filter if wanted
-//       add(new ZPoleMCFilter());  //my old ZPole filter, but needs changed to reflect changes in Perfect PFA
-       //  add Perfect PFA calculation here - make perfect charged clusters, neutral clusters and photon clusters
-//       PerfectPFADriver ppfadriver = new PerfectPFADriver();
-//       String[] ppcollnames = {"EcalBarrDigiHits","HcalBarrDigiHits","EcalEndcapDigiHits","HcalEndcapDigiHits"};
-//       ppfadriver.setCollectionNames(ppcollnames);
-//       add(ppfadriver);
-
-//  To start PFA, make hitmaps - for now, separate by subdetector - uses DigiSim output collections
+       
+//  make subdetector hitmaps from DigiSim collections
        HitListToHitMapDriver ebhitmap = new HitListToHitMapDriver();
        ebhitmap.addInputList("EcalBarrDigiHits");
        ebhitmap.setOutput("EMBarrhitmap");
@@ -53,19 +66,78 @@
        hehitmap.addInputList("HcalEndcapDigiHits");
        hehitmap.setOutput("HADEndcaphitmap"); 
        add(hehitmap);
+
+// make a combined hitmap for the digisim output hits - now have 5 hitmaps, 1 for each cal subdetector and 1 with all hits
+       HitListToHitMapDriver digiHitMap = new HitListToHitMapDriver();
+       digiHitMap.addInputList("EcalBarrDigiHits");
+       digiHitMap.addInputList("EcalEndcapDigiHits");
+       digiHitMap.addInputList("HcalBarrDigiHits");
+       digiHitMap.addInputList("HcalEndcapDigiHits");
+       digiHitMap.setOutput("digi hitmap");
+       add(digiHitMap);
+       
+       // 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.;
+       CreateFinalStateMCParticleList mcListMakerGen = new CreateFinalStateMCParticleList("Gen");
+       CreateFinalStateMCParticleList mcListMakerSim = new CreateFinalStateMCParticleList("Sim");
+       mcListMakerSim.setRadiusCut(rcut);
+       mcListMakerSim.setZCut(zcut);
+//       mcListMakerSim.setKeepContinuousElectrons();
+//       mcListMakerSim.setKeepContinuousHadrons();
+//       mcListMakerSim.setKeepContinuousPhotons();
+       add(mcListMakerGen);
+       add(mcListMakerSim);
+       String mcListGen = "GenFinalStateParticles";
+       String mcListSim = "SimFinalStateParticles";
+       String mcList = mcListSim; // Can choose the Gen or Sim list here
+             
+       String Tname = "RefinedCheatTracks";
+       add(new CheatTrackDriver());
+       
+       String Cname = "PerfectCheatClusters";
+       String[] collections = {"EcalBarrDigiHits","EcalEndcapDigiHits","HcalBarrDigiHits","HcalEndcapDigiHits"};
+       add (new CheatClusterDriver(collections,Cname));
+              
+       String CRPname = "CheatReconstructedParticles";
+       CheatParticleDriver cpd = new CheatParticleDriver(Cname,Tname,mcList);
+       //  Inputs Cheated Tracks, Cheated Clusters, and MC particle list to create Cheated Particles
+       cpd.setOutputName(CRPname);
+       add(cpd);
+       
+       // now make (more realistic) cheat tracks, etc with PPR driver
+       String outName = "PerfectRecoParticles";
+       int minT = 0;
+       int minC = 0;
+       PPRParticleDriver d = new PPRParticleDriver(CRPname, outName);
+       d.setMinTrackerHits(minT);
+       d.setMinCalorimeterHits(minC);
+       add(d);
+       
+       //  this makes perfect tracks from the perfect particles
+       PerfectTrackDriver perftrk = new PerfectTrackDriver();
+//       perftrk.setParticleNames(CRPname);
+       perftrk.setParticleNames(outName);
+       perftrk.setTrackNames("PerfectTracks");
+       add(perftrk);
+
+       //  when ready, add real tracks here
        
 //  TRACK-MIP ASSOCIATION driver - this is an example of a PFA algorithm running on collections
 //  hitmaps are modified by the algorithm - mip hits are removed from hitmaps
-//       double dminE = 0.005;
-//       double dminH = 3*dminE;
-//       double dminTrC = 0.008;  // original default is 0.0075
-//       TrackMipClusterDriver TMdriver = new TrackMipClusterDriver(dminE, dminH, dminTrC);
-//       String[] tmcollnames = {"EcalBarrDigiHits","HcalBarrDigiHits","EcalEndcapDigiHits","HcalEndcapDigiHits"};
-//       TMdriver.setCollectionNames(tmcollnames);
-//       TMdriver.setClusterNameExtension("TMClusters");
-//       add(TMdriver);
+       double dminE = 0.005;
+       double dminH = 3*dminE;
+       double dminTrC = 0.0075;  // original default is 0.0075, .008
+       double mincd = 2.5;  // min density to make mip
+       TrackMipClusterDriver TMdriver = new TrackMipClusterDriver(dminE, dminH, dminTrC, mincd);
+       String[] tmcollnames = {"EcalBarrDigiHits","HcalBarrDigiHits","EcalEndcapDigiHits","HcalEndcapDigiHits"};
+       TMdriver.setCollectionNames(tmcollnames);
+       TMdriver.setClusterNameExtension("TMClusters");
+       add(TMdriver);
        
-//  Convert modified hitmaps to new hit collections for clustering
+       //  Convert modified hitmap to hit list for clustering after mips removed
        HitMapToHitListDriver embconverter = new HitMapToHitListDriver();
        embconverter.setInputHitMap("EMBarrhitmap");
        embconverter.setOutputList("EBTMHits");
@@ -83,110 +155,166 @@
        hadeconverter.setOutputList("HECTMHits");
        add(hadeconverter);
        
-//  PHOTON FINDER - another example algorithm - starts with clusters from selected collections
-       double radius = 0.05;
-       double seed = 0.;
-       double minE = 0.;
-       FixedConeClusterDriver FCdriver = new FixedConeClusterDriver(radius, seed, minE);
-       String[] fchitcollnames = {"EBTMHits","EECTMHits"};
-       FCdriver.setCollectionNames(fchitcollnames);
-       FCdriver.setClusterNameExtension("FCClus");
-       add(FCdriver);
-
-// add photon finder here - takes above clusters as input, output is photon clusters
-//       int mincells = 10;
-//       PhotonFinderDriver Phdriver = new PhotonFinderDriver(mincells);
-//       String[] phclusnames = {"EBTMHitsFCClus","EECTMHitsFCClus"};
-//       Phdriver.setClusterNames(phcollnames);
+//  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);
+       //  for now, use digihits, but will use EMBarrTMHits and EMEndcapTMHits eventually
+//       String[] fchitcollnames = {"EBTMHits","EECTMHits"};
+//       FCdriver.setCollectionNames(fchitcollnames);
+//       FCdriver.setClusterNameExtension("FCClus");
+//       add(FCdriver);
+       
+       //  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);
+
+       // add photon finder here - takes above DT (or fixed cone) clusters as input,
+       // runs NN 11110 on the cluster hits and applies HMatrix
+       // output is photon clusters  had mincells=40?, cluster must be more than dTrcl from track
+       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);
 //       Phdriver.setClusterNameExtension("PhoClus");
-//       add(Phdriver);
+       add(Phdriver);
        
-//  Now, first make photon clusters into a hitmap, then modify original hitmap by subtracting Photon hitmaps from original
-//  then make collectons for clustering again (ONLY WORKS WHEN PHOTONS ARE FOUND)
+       //  Now, modify hitmap taking out hits in Photons, then make collectons for hadron shower clustering
        //  barrel
-//       ClusterListToHitMapDriver BPhotoHitDriver = new ClusterListToHitMapDriver();
-//       BPhotoHitDriver.addInputList("PhotonBClusters");
-//       BPhotoHitDriver.setOutputHitMap("BPHitMap");
-//       add(BPhotoHitDriver);
-//       HitMapSubtractDriver TMBPhodriver = new HitMapSubtractDriver();
-//       TMBPhodriver.setFirstHitMap("EMBarrhitmap");
-//       TMBPhodriver.setSecondHitMap("BPHitMap");
-//       TMBPhodriver.setOutputHitMap("EMBarrhitmap");
-//       add(TMBPhodriver);
+       ClusterListToHitMapDriver BPhotoHitDriver = new ClusterListToHitMapDriver();
+       BPhotoHitDriver.addInputList("PhotonBClusters");
+       BPhotoHitDriver.setOutputHitMap("BPHitMap");
+       add(BPhotoHitDriver);
+       HitMapSubtractDriver TMBPhodriver = new HitMapSubtractDriver();
+       TMBPhodriver.setFirstHitMap("EMBarrhitmap");
+       TMBPhodriver.setSecondHitMap("BPHitMap");
+       TMBPhodriver.setOutputHitMap("EBTMPhitmap");
+       add(TMBPhodriver);
        HitMapToHitListDriver btmphoconverter = new HitMapToHitListDriver();
-       btmphoconverter.setInputHitMap("EMBarrhitmap");
+       btmphoconverter.setInputHitMap("EBTMPhitmap");
        btmphoconverter.setOutputList("EBTMPHits");
        add(btmphoconverter);
        //  endcap
-//       ClusterListToHitMapDriver ECPhotoHitDriver = new ClusterListToHitMapDriver();
-//       ECPhotoHitDriver.addInputList("PhotonECClusters");
-//       ECPhotoHitDriver.setOutputHitMap("ECPHitMap");
-//       add(ECPhotoHitDriver);
-//       HitMapSubtractDriver TMECPhodriver = new HitMapSubtractDriver();
-//       TMECPhodriver.setFirstHitMap("EMEndcaphitmap");
-//       TMECPhodriver.setSecondHitMap("ECPHitMap");
-//       TMECPhodriver.setOutputHitMap("EMEndcaphitmap");
-//       add(TMECPhodriver);
+       ClusterListToHitMapDriver ECPhotoHitDriver = new ClusterListToHitMapDriver();
+       ECPhotoHitDriver.addInputList("PhotonECClusters");
+       ECPhotoHitDriver.setOutputHitMap("ECPHitMap");
+       add(ECPhotoHitDriver);
+       HitMapSubtractDriver TMECPhodriver = new HitMapSubtractDriver();
+       TMECPhodriver.setFirstHitMap("EMEndcaphitmap");
+       TMECPhodriver.setSecondHitMap("ECPHitMap");
+       TMECPhodriver.setOutputHitMap("EECTMPhitmap");
+       add(TMECPhodriver);
        HitMapToHitListDriver ectmphoconverter = new HitMapToHitListDriver();
-       ectmphoconverter.setInputHitMap("EMEndcaphitmap");
+       ectmphoconverter.setInputHitMap("EECTMPhitmap");
        ectmphoconverter.setOutputList("EECTMPHits");
        add(ectmphoconverter);
        
-//  TRACK - CLUSTER MATCHING Algorithm here, first cluster remaining hits in ECAL, HCAL
-       //  HCALs
-       int dU = 6;
-       int dV = 6;
-       int dLayer = 6;
-       int ncells = 6;
-       double thresh = 0;
-       NearestNeighborClusterDriver NNHdriver = new NearestNeighborClusterDriver(dU, dV, dLayer, ncells, thresh);
+//  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;
+       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);
 
-       //  ECALs
-       dU = 5;
-       dV = 5;
-       dLayer = 5;
-       ncells = 5;
-       thresh = 0;
+       // now do EM also - use NN here
+       int dU = 2;
+       int dV = 2;
+       int dLayer = 2;
+       int ncells = 5;
+       double thresh = 0;
        NearestNeighborClusterDriver NNEdriver = new NearestNeighborClusterDriver(dU, dV, dLayer, ncells, thresh);
        String[] nnehitcollnames = {"EBTMPHits","EECTMPHits"};
        NNEdriver.setCollectionNames(nnehitcollnames);
        NNEdriver.setClusterNameExtension("NNEClus");
-       add(NNEdriver);       
+       add(NNEdriver);
+
+       //  put all clusters into 1 collection?
        
-//  add track/shower matching driver here
-//       TrackShowerClusterDriver TrShdriver = new TrackShowerClusterDriver();
+       //  add matching driver here
+       TrackShowerClusterDriver TrShdriver = new TrackShowerClusterDriver();
+       String[] shclnames = {"EBTMPHitsNNEClus","EECTMPHitsNNEClus","HBDTClus","HECDTClus"};
 //       String[] shclnames = {"EBTMPHitsNNEClus","EECTMPHitsNNEClus","HBTMHitsNNHClus","HECTMHitsNNHClus"};
-//       TrShdriver.setClusterNames(shclnames);
-//       add(TrShdriver);
+       TrShdriver.setClusterNames(shclnames);
+       add(TrShdriver);
 
-//  more hitmap manipulation here if needed
-//  add neutral hadron finder driver here
-//       NeutralHadronDriver NHdriver = new NeutralHadronDriver();
-//       String[] nshclnames = {"EBTMPHitsNNEClus","EECTMPHitsNNEClus","HBTMHitsNNHClus","HECTMHitsNNHClus"};
-//       NHdriver.setClusterNames(nshclnames);
-//       add(NHdriver);  
+       if (FullPFA)
+       {
+       //  Do dijet mass for PFA after making Reconstructed Particle List
+       ClusterToReconstructedParticleDriver ClRPdriver = new ClusterToReconstructedParticleDriver();
+       ClRPdriver.setTrackNames("PerfectTracks");
+       String[] phnames = {"PhotonBClusters","PhotonECClusters"};
+       ClRPdriver.setPhotonNames(phnames);
+       ClRPdriver.setNeutralHadNames("NeuHClusters");
+       add(ClRPdriver);
        
-   }
-
-//  if you need event loop, add here (shows how filter is applied
-//   protected void process(EventHeader event)
-//   {
-       
-//       super.process(event);    // executes all added drivers
-       
-//        boolean mcfltr = true;
-//        mcfltr = (Boolean)event.get("MCFilt");
-//        System.out.println("MCFilt is " +mcfltr);
-//        if (mcfltr)
-//        {
-            // put processing here
-            
-//        }
+       //  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);   
+       }
 
-   //  end of everything in event   
-//   }
+   }
 }
CVSspam 0.2.8