Commit in lcsim-contrib/src/main/java/org/lcsim/contrib/SteveMagill on MAIN
CherClusDriver.java+508added 1.1


lcsim-contrib/src/main/java/org/lcsim/contrib/SteveMagill
CherClusDriver.java added at 1.1
diff -N CherClusDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ CherClusDriver.java	12 Aug 2009 18:23:26 -0000	1.1
@@ -0,0 +1,508 @@
+package org.lcsim.contrib.SteveMagill;
+
+import org.lcsim.util.*;
+import org.lcsim.recon.cluster.util.*;
+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.event.util.JetDriver;
+import org.lcsim.recon.cluster.nn.*;
+import org.lcsim.recon.cluster.fixedcone.*;
+import org.lcsim.recon.cheater.*;
+import org.lcsim.recon.tracking.cheat.CheatTrackDriver;
+import org.lcsim.mc.fast.tracking.MCFastTracking;
+import hep.physics.jet.*;
+
+public class CherClusDriver extends Driver
+{
+       
+   public CherClusDriver()
+   {
+       
+//  use DIGISIM - makes threshold and timing cuts from steering file CCAL001.steer
+       add(new CalHitMapDriver());
+       DigiSimDriver digi = new DigiSimDriver();
+       String dsteer = ("C:\\LC Data\\CCAL002M10.steer");
+       digi.setSteeringFile(dsteer);
+       add(digi);
+       add(new SimCalorimeterHitsDriver());
+
+//  make subdetector hitmaps from DigiSim scintillator collections
+       HitListToHitMapDriver ebhitmap = new HitListToHitMapDriver();
+       ebhitmap.addInputList("Edep_EcalBarrDigiHits");
+       ebhitmap.setOutput("SCEBarrhitmap");
+       add(ebhitmap);
+       HitListToHitMapDriver hbhitmap = new HitListToHitMapDriver();
+       hbhitmap.addInputList("Edep_HcalBarrDigiHits");
+       hbhitmap.setOutput("SCHBarrhitmap");
+       add(hbhitmap);
+       HitListToHitMapDriver eehitmap = new HitListToHitMapDriver();
+       eehitmap.addInputList("Edep_EcalEndcapDigiHits");
+       eehitmap.setOutput("SCEEndcaphitmap");
+       add(eehitmap);
+       HitListToHitMapDriver hehitmap = new HitListToHitMapDriver();
+       hehitmap.addInputList("Edep_HcalEndcapDigiHits");
+       hehitmap.setOutput("SCHEndcaphitmap");
+       add(hehitmap);
+
+//  Can 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("Edep_EcalBarrDigiHits");
+       digiHitMap.addInputList("Edep_EcalEndcapDigiHits");
+       digiHitMap.addInputList("Edep_HcalBarrDigiHits");
+       digiHitMap.addInputList("Edep_HcalEndcapDigiHits");
+       digiHitMap.setOutput("AllScDigiHitMap");
+       add(digiHitMap);
+
+//  Convert to hit collection for display
+       HitMapToHitListDriver testlist = new HitMapToHitListDriver();
+       testlist.setInputHitMap("AllScDigiHitMap");
+       testlist.setOutputList("AllScDigiHits");
+       add(testlist);
+
+//  Same thing for DigiSim cherenkov hits
+       HitListToHitMapDriver ebchitmap = new HitListToHitMapDriver();
+       ebchitmap.addInputList("Ceren_EcalBarrDigiHits");
+       ebchitmap.setOutput("ChEBarrhitmap");
+       add(ebchitmap);
+       HitListToHitMapDriver hbchitmap = new HitListToHitMapDriver();
+       hbchitmap.addInputList("Ceren_HcalBarrDigiHits");
+       hbchitmap.setOutput("ChHBarrhitmap");
+       add(hbchitmap);
+       HitListToHitMapDriver eechitmap = new HitListToHitMapDriver();
+       eechitmap.addInputList("Ceren_EcalEndcapDigiHits");
+       eechitmap.setOutput("ChEEndcaphitmap");
+       add(eechitmap);
+       HitListToHitMapDriver hechitmap = new HitListToHitMapDriver();
+       hechitmap.addInputList("Ceren_HcalEndcapDigiHits");
+       hechitmap.setOutput("ChHEndcaphitmap");
+       add(hechitmap);
+
+//  Can make a combined hitmap for the digisim output hits - now have 5 hitmaps,
+//  1 for each cal subdetector and 1 with all hits
+       HitListToHitMapDriver cdigiHitMap = new HitListToHitMapDriver();
+       cdigiHitMap.addInputList("Ceren_EcalBarrDigiHits");
+       cdigiHitMap.addInputList("Ceren_EcalEndcapDigiHits");
+       cdigiHitMap.addInputList("Ceren_HcalBarrDigiHits");
+       cdigiHitMap.addInputList("Ceren_HcalEndcapDigiHits");
+       cdigiHitMap.setOutput("AllChDigiHitMap");
+       add(cdigiHitMap);
+
+//  Convert to hit collection for display
+       HitMapToHitListDriver ctestlist = new HitMapToHitListDriver();
+       ctestlist.setInputHitMap("AllChDigiHitMap");
+       ctestlist.setOutputList("AllChDigiHits");
+       add(ctestlist);
+
+//  check # of MC particle contribution to hits for both scintillator and cerenkov hits
+       MCContribHitDriver mcconthits = new MCContribHitDriver();
+       String singsc = ("SingMCScHits");
+       String multisc = ("MultiMCScHits");
+       String singch = ("SingMCChHits");
+       String multich = ("MultiMCChHits");
+       String[] scmcollnames = {"Edep_EcalBarrDigiHits","Edep_HcalBarrDigiHits","Edep_EcalEndcapDigiHits","Edep_HcalEndcapDigiHits"};
+       String[] chmcollnames = {"Ceren_EcalBarrDigiHits","Ceren_HcalBarrDigiHits","Ceren_EcalEndcapDigiHits","Ceren_HcalEndcapDigiHits"};
+       mcconthits.setScHitNames(scmcollnames);
+       mcconthits.setChHitNames(chmcollnames);
+       mcconthits.setOutSingScHitName(singsc);
+       mcconthits.setOutMultiScHitName(multisc);
+       mcconthits.setOutSingChHitName(singch);
+       mcconthits.setOutMultiChHitName(multich);
+       add(mcconthits);
+
+//  Make a list of MCParticles to be considered - this gets final states from generator
+//  eventually replace with Perfect DR objects for each simulated detector
+       CreateFinalStateMCParticleList cfs = new CreateFinalStateMCParticleList("Gen");
+       String fname = ("MCGenFSParticles");
+       cfs.setCollectionName(fname);
+       add(cfs);
+
+       //  get perfect tracks
+       String tempTname = "TempCheatTracks";
+       String tempPname = "TempCheatParticles";
+       add(new CheatTrackDriver(tempTname, tempPname));
+
+       String outFastMC = ("PerfectTracks");
+       MCFastTracking mcft = new MCFastTracking();
+//       mcft.setFSList(tempPname);
+       mcft.setFSList(fname);
+       mcft.setOutputList(outFastMC);
+       add(mcft);
+
+//  check MC for qqbar M and E and make MC Particle jets if generated this way
+//  make the perfect DR objects into perfect ReconstructedParticles
+       MCqqbarME mcme = new MCqqbarME();
+       String mcrpname = ("MCFSRecoParticles");
+       mcme.setMCParticleName(fname);
+       mcme.setMCRecoParticleName(mcrpname);
+       add(mcme);
+
+//  get tracks from MC for now, eventually get from reconstructed track list
+//  need tracks for some algorithms
+//       String outptrack = ("PerfectTracks");
+//       MCFSTrackDriver ptrack = new MCFSTrackDriver();
+//       ptrack.setMCFSNames(fname);
+//       ptrack.setTrackNames(outptrack);
+//       add(ptrack);
+
+//  this gets MC info for cheated tracks using LCRelation
+       MCTrPropertyDriver mtprop = new MCTrPropertyDriver();
+       String mtrelation = ("TracksToMCP");
+       mtprop.setTrackName(outFastMC);
+       mtprop.setTrMCRelationName(mtrelation);
+       add(mtprop);
+
+//  now get mip hits - use cerenkov light to find mip trace and interaction point
+//  this calorimeter has large visible back-scattering since no non-active absorber
+//  interaction layer is embedded in the shower and found by directional light going
+//  forward - back-scattered particles maybe too slow to emit cerenkov light anyway?
+       double dminE = 0.055;  // default 0.0052
+       double dminH = 2*dminE;
+       double dminTrC = 0.04;  // default range is 0.0175 - 0.0225 tuned with muons
+       double mincd = 2.75;  // min density to make mip (def 3.5)
+       GTrackMipClusterDriver TMdriver = new GTrackMipClusterDriver(dminE, dminH, dminTrC, mincd);
+       String[] tmcollnames = {"Ceren_EcalBarrDigiHits","Ceren_HcalBarrDigiHits","Ceren_EcalEndcapDigiHits","Ceren_HcalEndcapDigiHits"};
+       TMdriver.setCollectionNames(tmcollnames);
+       TMdriver.setClusterNameExtension("TMClusters");
+       add(TMdriver);
+
+//  Diagnostic routine checks results from mip finder
+       GTrMipCompDriver tmcdriver = new GTrMipCompDriver();
+       tmcdriver.setTrMipClusName("TMClusters");
+       add(tmcdriver);
+
+//  make modified hit collections from hitmaps modified by mip finder
+       HitMapToHitListDriver eblist = new HitMapToHitListDriver();
+       eblist.setInputHitMap("ChEBarrhitmap");
+       eblist.setOutputList("ChEBHits");
+       add(eblist);
+       HitMapToHitListDriver eeclist = new HitMapToHitListDriver();
+       eeclist.setInputHitMap("ChEEndcaphitmap");
+       eeclist.setOutputList("ChEECHits");
+       add(eeclist);
+       HitMapToHitListDriver hblist = new HitMapToHitListDriver();
+       hblist.setInputHitMap("ChHBarrhitmap");
+       hblist.setOutputList("ChHBHits");
+       add(hblist);
+       HitMapToHitListDriver heclist = new HitMapToHitListDriver();
+       heclist.setInputHitMap("ChHEndcaphitmap");
+       heclist.setOutputList("ChHECHits");
+       add(heclist);
+
+//  make some maps linking cellID to CalHits for each collection (facillitates cluster
+//  linking later
+       IDHitMapDriver semidmap = new IDHitMapDriver();
+       String[] semidnames = {"Edep_EcalBarrDigiHits","Edep_EcalEndcapDigiHits"};
+       String semidoutmap = "ScEMIDMap";
+       semidmap.setInHitnames(semidnames);
+       semidmap.setOutMapname(semidoutmap);
+       add(semidmap);
+
+       IDHitMapDriver cemidmap = new IDHitMapDriver();
+       String[] cemidnames = {"Ceren_EcalBarrDigiHits","Ceren_EcalEndcapDigiHits"};
+       String cemidoutmap = "ChEMIDMap";
+       cemidmap.setInHitnames(cemidnames);
+       cemidmap.setOutMapname(cemidoutmap);
+       add(cemidmap);
+
+       IDHitMapDriver shadidmap = new IDHitMapDriver();
+       String[] shadidnames = {"Edep_HcalBarrDigiHits","Edep_HcalEndcapDigiHits"};
+       String shadidoutmap = "ScHADIDMap";
+       shadidmap.setInHitnames(shadidnames);
+       shadidmap.setOutMapname(shadidoutmap);
+       add(shadidmap);
+
+       IDHitMapDriver chadidmap = new IDHitMapDriver();
+       String[] chadidnames = {"Ceren_HcalBarrDigiHits","Ceren_HcalEndcapDigiHits"};
+       String chadidoutmap = "ChHADIDMap";
+       chadidmap.setInHitnames(chadidnames);
+       chadidmap.setOutMapname(chadidoutmap);
+       add(chadidmap);
+
+//  make some test histos for cal
+       ChCalHitDriver ccalhits = new ChCalHitDriver();
+       String[] sccollnames = {"Edep_EcalBarrDigiHits","Edep_HcalBarrDigiHits","Edep_EcalEndcapDigiHits","Edep_HcalEndcapDigiHits"};
+//       String[] chcollnames = {"Ceren_EcalBarrDigiHits","Ceren_HcalBarrDigiHits"};
+       String[] chcollnames = {"ChEBHits","ChHBHits","ChEECHits","ChHECHits"};
+       ccalhits.setScHitNames(sccollnames);
+       ccalhits.setChHitNames(chcollnames);
+       add(ccalhits);
+
+//  Now, have removed mip hits from cerenkov collection, ready to cluster remaining
+//  hits in both cerenkov and scintillator collections
+//  Cluster scintillator hits with Nearest Neighbor clusterer
+       int sdU = 1;
+       int sdV = 1;
+       int sdLayer = 1;
+       int sncells = 3;  // for NN, 3 means number of hits at least 4 in cluster
+       double sthresh = 0.001;
+       NearestNeighborClusterDriver NNSdriver = new NearestNeighborClusterDriver(sdU, sdV, sdLayer, sncells, sthresh);
+       String[] snhhitcollnames = {"Edep_EcalBarrDigiHits","Edep_HcalBarrDigiHits","Edep_EcalEndcapDigiHits","Edep_HcalEndcapDigiHits"};
+       NNSdriver.setCollectionNames(snhhitcollnames);
+       NNSdriver.setClusterNameExtension("NNSClus");
+       add(NNSdriver);
+
+//  Cluster cherenkov hits with Nearest Neighbor clusterer
+       int cdU = 1;
+       int cdV = 1;
+       int cdLayer = 1;
+       int cncells = 3;  // for NN, 3 means number of hits at least 4 in cluster
+       double cthresh = 0.000001;
+       NearestNeighborClusterDriver NNCdriver = new NearestNeighborClusterDriver(cdU, cdV, cdLayer, cncells, cthresh);
+//       String[] cnhhitcollnames = {"Ceren_EcalBarrDigiHits","Ceren_HcalBarrDigiHits","Ceren_EcalEndcapDigiHits","Ceren_HcalEndcapDigiHits"};
+       String[] cnhhitcollnames = {"ChEBHits","ChHBHits","ChEECHits","ChHECHits"};
+       NNCdriver.setCollectionNames(cnhhitcollnames);
+       NNCdriver.setClusterNameExtension("NNCClus");
+       add(NNCdriver);
+  
+//  try cone clusterer on hit collections - this works, but radius cut artificially defines
+//  the number of clusters found - not the cluster shape as in NN
+//       double radius = 0.2;
+//       double seedE = 0.025;
+//       double minE = 0.005;
+//       FixedConeClusterDriver fcdriver = new FixedConeClusterDriver(radius,seedE,minE);
+//       String[] hitcollnames = {"Edep_EcalBarrDigiHits","Edep_HcalBarrDigiHits","Edep_EcalEndcapDigiHits","Edep_HcalEndcapDigiHits"};
+//       fcdriver.setCollectionNames(hitcollnames);
+//       fcdriver.setClusterNameExtension("FCClus");
+//       add(fcdriver);
+            
+//  Try DT clusterer on hitmaps
+//       int minBsize = 50;
+//       int idbug = 5;
+//       int minden = 5;  //  another DT parameter, not used
+//       DirectedTreeDriver DTHBdriver = new DirectedTreeDriver();
+//       DTHBdriver.setInputHitMap("OrigSCHitMap");
+//       DTHBdriver.setOutputClusterList("SCDTClus");
+//       DTHBdriver.setMinimumClusterSize(minBsize);
+//       DTHBdriver.setMinimumHitDensity(minden);
+//       DTHBdriver.setDebugLevel(idbug);
+//       add(DTHBdriver);
+       
+       //  try out cluster pointing algorithm here
+//       double mdisip = 0.20;
+//       double mdisil = 0.04;  // default is 0.04 from ZZ events
+//       double mdiscl = 0.07;  // default 0.07  from ZZ events
+//       ClusterPointAlgDriver clpdriver = new ClusterPointAlgDriver(mdisip,mdisil,mdiscl);
+//       clpdriver.setInputClusterList("AllCandClusters");
+//       String[] ptclnames = {"IPClusters","ILSPClusters","NPClusters"};
+//       clpdriver.setOutputClusterLists(ptclnames);
+//       add(clpdriver);
+
+//  combine scintillator clusters into a single cluster list
+       String[] inList = {"Edep_EcalBarrDigiHitsNNSClus","Edep_HcalBarrDigiHitsNNSClus","Edep_EcalEndcapDigiHitsNNSClus","Edep_HcalEndcapDigiHitsNNSClus"};
+       String outList = "AllNNSClus";
+       CombineClLists ccldriver = new CombineClLists(inList,outList);
+       add(ccldriver);
+
+//  combine cerenkov clusters into a single cluster list
+       String[] incList = {"ChEBHitsNNCClus","ChHBHitsNNCClus","ChEECHitsNNCClus","ChHECHitsNNCClus"};
+       String outcList = "AllNNCClus";
+       CombineClLists cclcdriver = new CombineClLists(incList,outcList);
+       add(cclcdriver);
+
+//  Combine EM Scin and EM Ceren clusters for future RPs
+       String[] insemList = {"Edep_EcalBarrDigiHitsNNSClus","Edep_EcalEndcapDigiHitsNNSClus"};
+       String outsemList = "AllNNSEMClus";
+       CombineClLists cclsemdriver = new CombineClLists(insemList,outsemList);
+       add(cclsemdriver);
+       String[] incemList = {"ChEBHitsNNCClus","ChEECHitsNNCClus"};
+       String outcemList = "AllNNCEMClus";
+       CombineClLists cclcemdriver = new CombineClLists(incemList,outcemList);
+       add(cclcemdriver);
+
+//  Combine Scin HAD clusters and Ceren HAD clusters
+       String[] inchList = {"ChHBHitsNNCClus","ChHECHitsNNCClus"};
+       String outchList = "AllNNCHADClus";
+       CombineClLists cclchdriver = new CombineClLists(inchList,outchList);
+       add(cclchdriver);
+       String[] inshList = {"Edep_HcalBarrDigiHitsNNSClus","Edep_HcalEndcapDigiHitsNNSClus"};
+       String outshList = "AllNNSHADClus";
+       CombineClLists cclshdriver = new CombineClLists(inshList,outshList);
+       add(cclshdriver);
+
+//  Cluster Pointing algorithm here - requires mip finding first (or fake shower IL track link)
+       double mdisip = 0.20;  // .2 gets most photons
+       double mdisil = 0.04;  // .03 to .04 seems to be best for gas, scint
+       double mdiscl = 0.07;
+       ClPointDriver clpdriver = new ClPointDriver(mdisip,mdisil,mdiscl);
+       clpdriver.setInputClusterName("AllNNSClus");
+       String[] clpnames = {"ILSPClusters","IPClusters","NPClusters"};
+       clpdriver.setOutputClusterLists(clpnames);
+       add(clpdriver);
+
+       //  try to merge em and had clusters for scintillator signal in barrel
+       double distee = 0.075;
+       double disthh = 0.075;
+       double disteh = 0.075;
+       int nhmerg = 10;
+       ClMergeDriver emhdriver = new ClMergeDriver(distee,disthh,disteh,nhmerg);
+       String emname = ("Edep_EcalBarrDigiHitsNNSClus");
+       String hadname = ("Edep_HcalBarrDigiHitsNNSClus");
+       String mergname = ("MergedEHSBClus");
+       emhdriver.setInputEMClusterName(emname);
+       emhdriver.setInputHADClusterName(hadname);
+       emhdriver.setOutputClusterName(mergname);
+       add(emhdriver);
+
+       //  try to merge em and had clusters for scintillator signal in endcap
+//       double distee = 0.075;
+//       double disthh = 0.075;
+//       double disteh = 0.075;
+//       int nhmerg = 10;
+       ClMergeDriver emhecdriver = new ClMergeDriver(distee,disthh,disteh,nhmerg);
+       String emecname = ("Edep_EcalEndcapDigiHitsNNSClus");
+       String hadecname = ("Edep_HcalEndcapDigiHitsNNSClus");
+       String mergecname = ("MergedEHSECClus");
+       emhecdriver.setInputEMClusterName(emecname);
+       emhecdriver.setInputHADClusterName(hadecname);
+       emhecdriver.setOutputClusterName(mergecname);
+       add(emhecdriver);
+
+       //  try to merge em and had clusters for cherenkov signal in barrel
+       double cdistee = 0.075;
+       double cdisthh = 0.075;
+       double cdisteh = 0.075;
+       int cnhmerg = 5;
+       ClMergeDriver cemhdriver = new ClMergeDriver(cdistee,cdisthh,cdisteh,cnhmerg);
+       String cemname = ("ChEBHitsNNCClus");
+       String chadname = ("ChHBHitsNNCClus");
+       String cmergname = ("MergedEHChBClus");
+       cemhdriver.setInputEMClusterName(cemname);
+       cemhdriver.setInputHADClusterName(chadname);
+       cemhdriver.setOutputClusterName(cmergname);
+       add(cemhdriver);
+
+       //  try to merge em and had clusters for cherenkov signal in endcap
+//       double cdistee = 0.075;
+//       double cdisthh = 0.075;
+//       double cdisteh = 0.075;
+//       int cnhmerg = 5;
+       ClMergeDriver cemhecdriver = new ClMergeDriver(cdistee,cdisthh,cdisteh,cnhmerg);
+       String cemecname = ("ChEECHitsNNCClus");
+       String chadecname = ("ChHECHitsNNCClus");
+       String cmergecname = ("MergedEHChECClus");
+       cemhecdriver.setInputEMClusterName(cemecname);
+       cemhecdriver.setInputHADClusterName(chadecname);
+       cemhecdriver.setOutputClusterName(cmergecname);
+       add(cemhecdriver);
+
+//  combine uncorrected scintillator clusters into a single cluster list
+       String[] inListms = {mergname,mergecname};
+       String outListms = "AllMergedSClus";
+       CombineClLists cclmsdriver = new CombineClLists(inListms,outListms);
+       add(cclmsdriver);
+
+//  combine cerenkov clusters into a single cluster list
+       String[] inListmc = {cmergname,cmergecname};
+       String outListmc = "AllMergedCClus";
+       CombineClLists cclmcdriver = new CombineClLists(inListmc,outListmc);
+       add(cclmcdriver);
+
+//  now link scintillator and cherenkov had clusters by map
+//       double ldist = 0.05;
+//       SChClLinkDriver linkdriver = new SChClLinkDriver(ldist);
+//       String linkmap = ("SChHClusMap");
+//       linkdriver.setInputScinClusterName(outshList);
+//       linkdriver.setInputCherClusterName(outchList);
+//       linkdriver.setOutputLinkMapName(linkmap);
+//       add(linkdriver);
+
+       //  Correct scintillator cluster energy with cherenkov
+//       ScinClusCorrDriver sccdriver = new ScinClusCorrDriver();
+//       sccdriver.setScChMapName(linkmap);
+//       add(sccdriver);
+
+       //  make Scin clusters into Rec Part for input to jet algorithm
+       double scalib = 1.047;
+       ClusterToRPDriver clrpdriver = new ClusterToRPDriver(scalib);
+       String RPname = ("SClusRecParticles");
+//       clrpdriver.setClusterNames("AllMergedSClus");  //  uses merged clusters
+       clrpdriver.setClusterNames("AllNNSClus");  //  uses all Scin clusters
+//       clrpdriver.setClusterNames("AllNNSHADClus");  //  uses all Scin HAD clusters
+       clrpdriver.setRecoParticleName(RPname);
+       add(clrpdriver);
+
+       //  make Ceren clusters into Rec Part for input to jet algorithm
+       double ccalib = 7913.0;
+       ClusterToRPDriver cclrpdriver = new ClusterToRPDriver(ccalib);
+       String cRPname = ("CClusRecParticles");
+//       cclrpdriver.setClusterNames("AllMergedCClus");  // uses merged clusters
+       cclrpdriver.setClusterNames("AllNNCClus");  //  uses all Ceren clusters
+//       cclrpdriver.setClusterNames("AllNNCHADClus");  //  uses all Ceren HAD clusters
+       cclrpdriver.setRecoParticleName(cRPname);
+       add(cclrpdriver);
+
+//  find jets with MC Reco Particles
+       JetDriver mcjet = new JetDriver();
+       mcjet.setInputCollectionName(mcrpname);
+       mcjet.setOutputCollectionName("MCRPJets");
+//       JetFinder tworealjets = new FixNumberOfJetsFinder(2);  // uses Jade by default
+//       mcjet.setFinder(tworealjets);
+       DurhamJetFinder ktjet = new DurhamJetFinder(0.02);
+       JetFinder twoktjets = new FixNumberOfJetsFinder(2,ktjet);
+       mcjet.setFinder(twoktjets);
+//       JetFinder sixrealjets = new FixNumberOfJetsFinder(6);
+//       PFAjet.setFinder(sixrealjets);
+       //  for Durham jet, ycut = 0.25 at ZPole, 0.01 at 500 GeV ZZ
+//       JetFinder rktjet = new DurhamJetFinder(0.1025);
+//       mcjet.setFinder(rktjet);
+       add(mcjet);
+
+//  find jets with Scin Cluster Reco Particles
+       JetDriver cljet = new JetDriver();
+       cljet.setInputCollectionName(RPname);
+       cljet.setOutputCollectionName("SClusRPJets");
+//       JetFinder tworealjets = new FixNumberOfJetsFinder(2);  // uses Jade by default
+//       cljet.setFinder(tworealjets);
+       DurhamJetFinder ktcljet = new DurhamJetFinder(0.02);
+       JetFinder twoktcljets = new FixNumberOfJetsFinder(2,ktcljet);
+       cljet.setFinder(twoktcljets);
+//       JetFinder sixrealjets = new FixNumberOfJetsFinder(6);
+//       PFAjet.setFinder(sixrealjets);
+       //  for Durham jet, ycut = 0.25 at ZPole, 0.01 at 500 GeV ZZ
+//       JetFinder rktjet = new DurhamJetFinder(0.1025);
+//       mcjet.setFinder(rktjet);
+       add(cljet);
+
+//  find jets with Ceren Cluster Reco Particles
+       JetDriver chjet = new JetDriver();
+       chjet.setInputCollectionName(cRPname);
+       chjet.setOutputCollectionName("CClusRPJets");
+       //  default 2 jet finder uses JADE
+//       JetFinder tworealjets = new FixNumberOfJetsFinder(2);  // uses Jade by default
+//       chjet.setFinder(tworealjets);
+       //  for kT jet finder
+       DurhamJetFinder ktchjet = new DurhamJetFinder(0.02);
+       JetFinder twoktchjets = new FixNumberOfJetsFinder(2,ktchjet);
+       chjet.setFinder(twoktchjets);
+       //  6 jet finder
+//       JetFinder sixrealjets = new FixNumberOfJetsFinder(6);
+//       PFAjet.setFinder(sixrealjets);
+       //  for Durham jet, ycut = 0.25 at ZPole, 0.01 at 500 GeV ZZ
+//       JetFinder rktjet = new DurhamJetFinder(0.1025);
+//       mcjet.setFinder(rktjet);
+       add(chjet);
+
+       //  now link scintillator and cherenkov jets by map
+       double jdist = 0.7;
+       SChJetLinkDriver jlinkdriver = new SChJetLinkDriver(jdist);
+       String jlinkmap = ("SChJetMap");
+       jlinkdriver.setInputScinJetName("SClusRPJets");
+       jlinkdriver.setInputCherJetName("CClusRPJets");
+       jlinkdriver.setOutputLinkMapName(jlinkmap);
+       add(jlinkdriver);
+
+       MCRPdijetm djm = new MCRPdijetm();
+       djm.setInputJets("MCRPJets");
+       add(djm);
+
+       SRPdijetm sdjm = new SRPdijetm();
+       sdjm.setInputScChJetMap(jlinkmap);
+       sdjm.setInputScinJets("SClusRPJets");
+       add(sdjm);
+
+   }
+}
CVSspam 0.2.8