Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members

writeESD.cpp

Go to the documentation of this file.
00001 
00002 //we have to minimize includes in order not to have compile problems!!!!!
00004 #include <Utilities/Configuration/interface/Architecture.h>
00005 
00006 #include <XANADOO/domain/interface/writeESD.h>
00007 
00008 #include <XANADOO/domain/test/setHeader.icc>
00009 #include <XANADOO/domain/test/setAllTrackHits.icc>
00010 #include <XANADOO/domain/test/setCaloRecHits.icc>
00011 #include <XANADOO/domain/test/setElectrons.icc>
00012 #include <XANADOO/domain/test/setPhotons.icc>
00013 #include <XANADOO/domain/test/setElectronsGSF.icc>
00014 #include <XANADOO/domain/test/setElectronsGSFPixelMatch.icc>
00015 #include <XANADOO/domain/test/setElectronTracks.icc>
00016 #include <XANADOO/domain/test/setElectronsZZVertex.icc>
00017 #include <XANADOO/domain/test/setEmClusters.icc>
00018 #include <XANADOO/domain/test/setEndcapSuperClusters.icc>
00019 #include <XANADOO/domain/test/setHadClusters.icc>
00020 #include <XANADOO/domain/test/setJets.icc>
00021 #include <XANADOO/domain/test/setMcTruth.icc>
00022 #include <XANADOO/domain/test/setMet.icc>
00023 #include <XANADOO/domain/test/setMuons.icc>
00024 #include <XANADOO/domain/test/setSuperClusters.icc>
00025 #include <XANADOO/domain/test/setTracks.icc>
00026 #include <XANADOO/domain/test/setTriggerInfo.icc>
00027 #include <XANADOO/domain/test/setVertices.icc>
00028 
00029 #include <XANADOO/domain/interface/XANAEsdEvent.h>
00030 #include <XANADOO/XANAClusters/interface/XANASuperCluster.h>
00031 #include <XANADOO/XANAClusters/interface/XANAHadCluster.h>
00032 #include <XANADOO/XANATracks/interface/XANATrackHit.h>
00033 #include <XANADOO/XANAVertex/interface/XANAVertex.h>
00034 #include <XANADOO/XANAMcInfo/interface/XANAGeneratorEvent.h>
00035 #include <XANADOO/XANAMcInfo/interface/XANAGeneratorParticle.h>
00036 #include <XANADOO/XANAMcInfo/interface/XANAGeantEvent.h>
00037 #include <XANADOO/XANAMcInfo/interface/XANAGeantVertex.h>
00038 #include <XANADOO/XANAMcInfo/interface/XANAGeantTrack.h>
00039 #include <XANADOO/XANATriggerInfo/interface/XANATriggerInfo.h>
00040 #include <XANADOO/XANAUtilities/interface/XANAToolkit.h>
00041 #include <XANADOO/XANAUtilities/interface/XANAMemLog.h>
00042 #include <XANADOO/XANAElectronCandidate/interface/XANAElectronCandidate.h>
00043 #include <XANADOO/XANAPhotonCandidate/interface/XANAPhotonCandidate.h>
00044 #include <XANADOO/XANAElectronCandidate/interface/XANAElectronGSFTrack.h>
00045 #include <XANADOO/XANAElectronCandidate/interface/XANAElectronSeed.h>
00046 #include <XANADOO/XANAMuons/interface/XANAMuonCandidate.h>
00047 #include <XANADOO/XANAMuons/interface/XANAMuonTrack.h>
00048 #include <XANADOO/XANAJets/interface/XANAJet.h>
00049 #include <XANADOO/XANAMet/interface/XANAMet.h>
00050 
00051 #include <ElectronPhoton/ClusterTools/interface/IsoCalculator.h>
00052 
00053 #include <TrackerReco/TkRecoDebugTools/interface/LayerMediumPropertySetter.h>
00054 #include <TrackerReco/GsfPattern/interface/GsfMaterialEffectsFactory.h>
00055 #include <TrackerReco/GsfPattern/interface/GsfMultiStateUpdator.h>
00056 #include <TrackerReco/GsfPattern/interface/GsfPropagatorWithMaterial.h>
00057 #include <TrackerReco/GtfPattern/interface/CombinatorialTrajectoryBuilder.h>
00058 #include <TrackerReco/GsfPattern/interface/GsfChi2MeasurementEstimator.h>
00059 #include <TrackerReco/GsfPattern/interface/GsfTrajectoryFitter.h>
00060 #include <TrackerReco/GtfPattern/interface/ModularKfReconstructor.h>
00061 #include <TrackerReco/TkSeedGenerator/interface/CombinatorialSeedGeneratorFromPixel.h>
00062 #include <TrackerReco/GsfPattern/interface/GsfTrajectorySmoother.h>
00063 
00064 #include <CommonReco/TrackFitters/interface/KFFittingSmoother.h>
00065 #include <CommonReco/PatternTools/interface/TransverseImpactPointExtrapolator.h>
00066 #include <CommonReco/GeomPropagators/interface/AnalyticalPropagator.h>
00067 #include <CommonReco/MaterialEffects/interface/PropagatorWithMaterial.h>
00068 #include <CommonReco/KalmanUpdators/interface/KFUpdator.h>
00069 #include <CommonReco/KalmanUpdators/interface/Chi2MeasurementEstimator.h>
00070 #include <CommonReco/TrackFitters/interface/KFFittingSmoother.h>
00071 #include <CommonReco/TrackFitters/interface/KFTrajectoryFitter.h>
00072 #include <CommonReco/TrackFitters/interface/KFTrajectorySmoother.h>
00073 #include <CommonReco/MaterialEffects/interface/MaterialEffectsFactory.h>
00074 #include <CommonReco/PatternTools/interface/TrajectoryCleanerBySharedHits.h>
00075 
00076 #include <CommonDet/BasicDet/interface/DetUnit.h>
00077 #include <Tracker/TkLayout/interface/CmsTracker.h>
00078 #include <Tracker/TkLayout/interface/FullTracker.h>
00079 #include <CommonDet/BasicDet/interface/DetType.h>
00080 #include <CommonDet/BasicDet/interface/Readout.h>
00081 
00082 #include <CARF/G3Event/interface/G3SetUp.h>
00083 #include <CARF/Reco/interface/AutoRecCollection.h>
00084 #include <CARF/Reco/interface/RecQuery.h>
00085 #include <CARF/Reco/interface/ConfigAlgoFactory.h>
00086 #include <CARF/Reco/interface/RecBuilder.h>
00087 
00088 #include <Utilities/Notification/interface/PackageInitializer.h>
00089 #include <Utilities/Notification/interface/Singleton.h>
00090 
00091 #include <ClassReuse/GeomVector/interface/GlobalVector.h>
00092 
00093 
00094 #include <TROOT.h>
00095 #include <TObjectTable.h>
00096 #include <TFile.h>
00097 #include <TTree.h>
00098 #include <TBranch.h>
00099 #include <TClonesArray.h>
00100 #include <TBits.h>
00101 
00102 #include <CLHEP/Units/PhysicalConstants.h>
00103 
00104 #include <vector>
00105 #include <map>
00106 #include <string>
00107 #include <iostream> 
00108 #include <iomanip>  
00109 #include <numeric>
00110 
00111 
00112 XANAEsdBuilder::XANAEsdBuilder(): clusters(0), superClusters(0), endcapSuperClusters(0), towers(0), tracks(0), vertices(0),
00113    muons(0), electrons(0), photons(0), eltracks(0), jets(0), mets(0), hlt(0), xanaEsdTree_(0),  xanaEsdEventBranch_(0), xanaEsdFile_(0), 
00114    xanaEsdEvent_(0), xanaGenEventBranch_(0), xanaGenEvent_(0), xanaGeantEventBranch_(0),
00115    xanaGeantEvent_(0), ciso_(0), xanamemlog_(0), nbClusters_(0), nbTracks_(0), nbElectrons_(0)
00116    
00117 { 
00118 
00119    // initialize observer    
00120    xana::out(1) << "Constructing an XANAEsdBuilder" << endl ;
00121    Observer<G3EventProxy *>::init() ; 
00122    Observer<G3SetUp *>::init() ; 
00123 
00124    // algos configuration
00125    clusterizerName_ = 
00126     SimpleConfigurable<std::string>("EGBCluster","XANADOO:Clusterizer");
00127    superClusterizerName_ =
00128     SimpleConfigurable<std::string>("EGSCluster","XANADOO:SuperClusterizer");
00129    endcapSuperClusterizerName_ =
00130     SimpleConfigurable<std::string>("EGECluster","XANADOO:EndcapSuperClusterizer");
00131    hcalClusterizerName_ =
00132     SimpleConfigurable<std::string>("TowerBuilder","XANADOO:HcalClusterizer");
00133    trackReconstructorName_=
00134     SimpleConfigurable<std::string>("TransientCombinatorialTrackFinder","XANADOO:TrackReconstructor");
00135    vertexReconstructorName_=
00136     SimpleConfigurable<std::string>("PrincipalVertexFinder","XANADOO:VertexReconstructor");
00137    muonReconstructorName_=
00138     SimpleConfigurable<std::string>("GlobalMuonReconstructor","XANADOO:MuonReconstructor");
00139    electronReconstructorName_=
00140     SimpleConfigurable<std::string>("GSF","XANADOO:ElectronReconstructor");
00141    gsfForwardFit_=
00142     SimpleConfigurable<std::string>("GSF","XANADOO:gsfForwardFit");
00143    electronTrackSeeding_=
00144     SimpleConfigurable<std::string>("PixelMatch","XANADOO:ElectronTrackSeeding");
00145    hZZVertexReconstructor_=
00146     SimpleConfigurable<bool>(false,"XANADOO:hZZVertexReconstructor");
00147    jetsFromTrueInformation_ = 
00148     SimpleConfigurable<bool>(false,"XANADOO:jetsFromTrueInformation");
00149    metsFromTrueInformation_ = 
00150     SimpleConfigurable<bool>(false,"XANADOO:metsFromTrueInformation");
00151    // get L1 trigger config from Data/TriggerData/L1GlobalTrigger/$lumichoice/trigger_menu.dat
00152    l1Menu_ = 
00153     SimpleConfigurable<std::string>("lumi2x1033","L1Globaltrigger:TriggerMenu");
00154    // set HLT trigger config from xml file
00155    hltMenu_ = 
00156     SimpleConfigurable<std::string>("2x1033HLT.xml","HighLevelTriggerXML:XMLfile");
00157 
00158 
00159    // xanadoo steering
00160    writeTree_ = SimpleConfigurable<bool>(false,"XANADOO:writeEsd");
00161    writeCaloRecHits_ = SimpleConfigurable<bool>(false,"XANADOO:EsdWithCaloRecHits");
00162    writeTrackHits_ = SimpleConfigurable<bool>(false,"XANADOO:EsdWithTrackHits");   writeAllTrackHits_ = SimpleConfigurable<bool>(false,"XANADOO:EsdWithAllTrackHits");
00163    writeEleTrackHits_ = SimpleConfigurable<bool>(false,"XANADOO:EsdWithEleTrackHits");
00164 
00165      // memory log
00166    memlog_ = SimpleConfigurable<bool>(false,"XANADOO:memlog");
00167    if (memlog_) xanamemlog_=new XANAMemLog();
00168 
00169    // creates output file
00170    fileName_ = SimpleConfigurable<std::string>("single_eminus_pt100.root","XANADOO:FileName");
00171    xanaEsdFile_ = new TFile(fileName_.value().c_str(),"RECREATE");
00172    compressionLevel_ = SimpleConfigurable<int>(1,"XANADOO:CompressionLevel");        
00173    xanaEsdFile_->SetCompressionLevel(compressionLevel_);
00174 
00175    // create TTree
00176    autosave_ = SimpleConfigurable<int>(1000000000,"XANADOO:AutoSaveSize");        
00177    bufferSize_ = SimpleConfigurable<int>(256000,"XANADOO:BufferSize");        
00178    splitMode_ = SimpleConfigurable<int>(99,"XANADOO:SplitMode");        
00179    xana::out(1) << "creating xanaEsdTree  .."<<endl; 
00180    treeName_ = SimpleConfigurable<std::string>("XANAESD","XANADOO:TreeName");
00181    xanaEsdTree_ = new TTree(treeName_.value().c_str(),"test XANADOO ESD tree");  
00182    xanaEsdTree_->SetAutoSave(autosave_);
00183    int bufferSizeValue = bufferSize_.value();
00184    if (splitMode_.value()) bufferSizeValue /= 4; //from ROOT example
00185 
00186    // initialize event and create branches
00187    xanaEsdEvent_ = new XANAEsdEvent();
00188    xana::out(1) << "creating xanaEsdEventBranch  .."<<endl; 
00189    xanaEsdEventBranch_ = 
00190    xanaEsdTree_->Branch("Event.","XANAEsdEvent",&xanaEsdEvent_,bufferSizeValue,splitMode_.value());
00191    xana::out(1) << "xanaEsdEventBranch  branch created .."<<endl; 
00192 
00193    xanaGenEvent_ = new XANAGeneratorEvent();
00194    xana::out(1) << "creating xanaGeneratorEventBranch  .."<<endl; 
00195    xanaGenEventBranch_ = 
00196    xanaEsdTree_->Branch("GeneratorEvent.","XANAGeneratorEvent",&xanaGenEvent_,bufferSizeValue,splitMode_.value());
00197    xana::out(1) << "xanaGeneratorEventBranch  branch created .."<<endl; 
00198 
00199    xanaGeantEvent_ = new XANAGeantEvent();
00200    xana::out(1) << "creating xanaGeantEventBranch  .."<<endl; 
00201    xanaGeantEventBranch_ = 
00202    xanaEsdTree_->Branch("GeantEvent.","XANAGeantEvent",&xanaGeantEvent_,bufferSizeValue,splitMode_.value());
00203    xana::out(1) << "xanaGeantEventBranch  branch created .."<<endl; 
00204 
00205    // create links between generator-geant event and ESD-geant Event
00206    xanaGeantEvent_->addGeneratorEvent(xanaGenEvent_);
00207    xanaGeantEvent_->addEsdEvent(xanaEsdEvent_);
00208 
00209   //CC is this still needed?   
00210    ciso_ = Singleton<IsoCalculator>::instance();
00211 
00212 }
00213    
00214          
00215 XANAEsdBuilder::~XANAEsdBuilder() 
00216 {
00217    
00218   xana::out(1) << "Deleting XANAEsdBuilder" << std::endl;  
00219   xanaEsdFile_->Write();
00220   xanaEsdTree_->Print();
00221   delete xanaEsdFile_;
00222   if (memlog_) xanamemlog_->writeHistogram();
00223 
00224 }
00225 
00226 
00227 void XANAEsdBuilder::upDate( G3EventProxy * ev ) 
00228 { 
00229     
00230   xana::out(1) << "[update] updating XANAEsdBuilder for event " << std::endl;  
00231   if (!ev) return ;    
00232 
00233   //    UInt_t saveNumber=TProcessID::GetObjectCount();
00234      
00235   setHeader(ev);
00236   if (writeCaloRecHits_) setCaloRecHits(ev);
00237   setEmClusters(ev);
00238   setSuperClusters(ev);
00239   setEndcapClusters(ev);
00240   setHadClusters(ev);
00241   setTracks(ev);
00242   if (writeAllTrackHits_) setAllTrackHits(ev);
00243   setVertices(ev);
00244   setMuons(ev);
00245   if (!strcmp(electronReconstructorName_.value().c_str(),"GSF")) {
00246     // new electron candidates
00247     if (electronTrackSeeding_.value() == "Regional") setElectronsGSF(ev);
00248     else if (electronTrackSeeding_.value() == "PixelMatch") setElectronsGSFPixelMatch(ev);
00249     else {
00250       cout << "writeESD: unknown electronTrackSeeding option" << electronTrackSeeding_.value()<< endl;
00251     }
00252   }
00253   else {
00254     // egamma electron candidates 
00255     setElectronTracks(ev);
00256     setElectrons(ev);
00257   }
00258   if (hZZVertexReconstructor_) setElectronsZZVertex(ev);
00259   setPhotons(ev);
00260   setJets(ev);
00261   setMet(ev);
00262   setMcTruth(ev);
00263   setTriggerInfo(ev);
00264 
00265   if (writeTree_) writeTree();
00266   
00267   if (memlog_) xanamemlog_->fill();
00268 
00269   xanaEsdEvent_->clear();
00270   xanaGenEvent_->clear();
00271   xanaGeantEvent_->clear();
00272 
00273 //      TProcessID::SetObjectCount(saveNumber);
00274 
00275 }      
00276 
00277 
00278 void XANAEsdBuilder::upDate (G3SetUp *) 
00279 {
00280 
00281     xana::out(5) << "Starting initSetUp==================================" << std::endl;
00282     theVertexTrackCompatibilityEstimator = new KalmanVertexTrackCompatibilityEstimator();
00283     if (strcmp(electronReconstructorName_.value().c_str(),"GSF"))     return;
00284     
00285     // new from Wolfgang
00286     
00287     // RecQuery for regional tracks
00288     RecQuery regionalQuery("RegionalCombinatorialTrackFinder");
00289 
00290     // Building:
00291     RecQuery builderQuery("CombinatorialTrajectoryBuilder");
00292     builderQuery.setParameter("chiSquarCut",100000.);
00293     builderQuery.setParameter("mass",0.000511);
00294     builderQuery.setParameter("maxCand",2);
00295     builderQuery.setParameter("maxLostHit",1);
00296     builderQuery.setParameter("maxConsecLostHit",1);
00297     builderQuery.setParameter("lostHitPenalty",50.);
00298     builderQuery.setParameter("intermediateCleaning",true);
00299     builderQuery.setParameter("minimumNumberOfHits",5);
00300     builderQuery.setParameter("ptCut", 3.);
00301     builderQuery.setParameter("alwaysUseInvalidHits",true);
00302 
00303     // Fit & smooth part
00304     RecQuery fitQuery("KFFittingSmoother");
00305     fitQuery.setParameter("mass",0.000511); 
00306     
00307     // to fit forward with the gsf:
00308     if (!strcmp(gsfForwardFit_.value().c_str(),"GSF") ) 
00309       {
00310         RecQuery fwdQuery("GsfElectronFitter");
00311         fwdQuery.setParameter("mass",0.000511);
00312         fitQuery.setComponent("Fitter",fwdQuery);
00313       }
00314 
00315     // to fit forward with the kf:
00316     if (!strcmp(gsfForwardFit_.value().c_str(),"KF") ) 
00317       {
00318         RecQuery fwdQuery("KFTrajectoryFitter");   
00319         fwdQuery.setParameter("mass",0.000511); 
00320         fitQuery.setComponent("Fitter",fwdQuery);
00321       }
00322 
00323     // Smoother
00324     RecQuery bwdQuery("GsfElectronSmoother");
00325     fitQuery.setComponent("Smoother",bwdQuery);
00326 
00327     // Complete query for regional tracks 
00328     regionalQuery.setParameter("mass",0.000511);
00329     regionalQuery.setParameter("createPersistableTracks",false);
00330     regionalQuery.setComponent("TrajectoryBuilder",builderQuery); 
00331     regionalQuery.setComponent("Smoother",fitQuery);
00332 
00333     // Create ConfigAlgorithm
00334     theRegionalTrackFinder = createAlgo<RegionalTrackFinder>(regionalQuery);
00335     // end new from Wolfgang
00336 
00337  }
00338 
00339 
00340 void XANAEsdBuilder::setEleTrackHits(std::vector<TrajectoryMeasurement> MyEleTrMeas, XANAElectronTrack *xTrack) 
00341 {
00342   // add electron track hits for this track, if asked for
00343 
00344   //     std::vector<TrajectoryMeasurement> MyEleTrMeas = eltrack->measurements();
00345      std::vector<TrajectoryMeasurement>::const_iterator IterEleTrMeas;
00346 
00347      xana::out(2) << "[update] adding electronic track hits " << std::endl; 
00348      xana::out(2) << "[update] number of measurements " <<MyEleTrMeas.size() << std::endl;
00349      //     xana::out(2) << "[update] number of valid hits "<<eltrack->foundHits()<< std::endl;
00350 
00351      XANATrackHit *elethit=0;
00352      int nbhits=0;
00353      for (IterEleTrMeas=MyEleTrMeas.begin(); IterEleTrMeas!=MyEleTrMeas.end(); IterEleTrMeas++)
00354        {
00355         // taking the rec hit 
00356         RecHit IterEleRecHit = IterEleTrMeas->recHit();                
00357         // checking if it is valid or not  
00358         if( !(IterEleRecHit.isValid()) ){xana::out(2) << "[update] non valid hit" << std::endl;}
00359 
00360         // taking the updated state 
00361         TrajectoryStateOnSurface IterEleTSN = IterEleTrMeas->updatedState();                
00362         // checking if it is valid or not  
00363         if( !(IterEleTSN.isValid()) ){xana::out(2) << "[update] non valid updated state" << std::endl;}
00364 
00365 
00366         // analysis only if both are valid 
00367         if (!(IterEleRecHit.isValid()) && (IterEleTSN.isValid())){xana::out(2)<<"[update] non valid hit but valid updated state"<< std::endl;}
00368         if ((IterEleRecHit.isValid()) && !(IterEleTSN.isValid())){xana::out(2)<<"[update] non valid updated state but valid hit"<< std::endl;}
00369         if(  IterEleRecHit.isValid() && IterEleTSN.isValid() )
00370         {
00371           HepPoint3D elehitposition( (IterEleRecHit).globalPosition().x(), 
00372                                      (IterEleRecHit).globalPosition().y(), 
00373                                      (IterEleRecHit).globalPosition().z());
00374 
00375           HepPoint3D eleupdposition( (IterEleTSN).globalPosition().x(),
00376                                      (IterEleTSN).globalPosition().y(),
00377                                      (IterEleTSN).globalPosition().z());
00378 
00379           HepVector3D eleupdmomentum( (IterEleTSN).globalMomentum().x(),
00380                                       (IterEleTSN).globalMomentum().y(),
00381                                       (IterEleTSN).globalMomentum().z());
00382 
00383           elethit = new XANATrackHit( elehitposition, eleupdposition, eleupdmomentum ); 
00384           elethit->setIsStereo((IterEleRecHit).det().detUnits().front()->type().isStereo());
00385           Bool_t isBarrel = (((IterEleRecHit).det().detUnits().front()->type().part() == barrel) ? true : false);
00386           elethit->setIsBarrel(isBarrel);
00387 
00388             xana::out(1) << "[update] ELE - NEW STEP" << std::endl; 
00389             xana::out(1) << "[update] new hit" << std::endl;    
00390             xana::out(1) << (IterEleRecHit).globalPosition().x() << std::endl;     
00391             xana::out(1) << (IterEleRecHit).globalPosition().y() << std::endl;          
00392             xana::out(1) << (IterEleRecHit).globalPosition().z() << std::endl;          
00393             xana::out(1) << "[update] new updated state: position" << std::endl;        
00394             xana::out(1) << (IterEleTSN).globalPosition().x() << std::endl;     
00395             xana::out(1) << (IterEleTSN).globalPosition().y() << std::endl;     
00396             xana::out(1) << (IterEleTSN).globalPosition().z() << std::endl;     
00397             xana::out(1) << "[update] new updated state: momentum" << std::endl;        
00398             xana::out(1) << (IterEleTSN).globalMomentum().x() << std::endl;     
00399             xana::out(1) << (IterEleTSN).globalMomentum().y() << std::endl;     
00400             xana::out(1) << (IterEleTSN).globalMomentum().z() << std::endl;     
00401 
00402           xanaEsdEvent_->addEleTrackHit(elethit, xTrack);           
00403           ++nbhits;
00404           delete elethit;
00405 
00406        } // valid hit and upd state
00407        } // loop on measurements
00408      xana::out(2) << "[update] number of hits that were added "<<nbhits<< std::endl;
00409 }
00410 
00411 
00412 void XANAEsdBuilder::writeTree() 
00413 {
00414 
00415   xana::out(2) << "[update] writing event " << std::endl;     
00416   
00417   xanaEsdTree_->Fill();  //fill the tree
00418 
00419 }
00420 
00421 
00422 std::string XANAEsdBuilder::getAlgoName(int algo) {
00423 
00424   if (algo==1) return std::string("EgammaBasicIsland");
00425   else if (algo>=100) return std::string("EgammaBasicHybrid");
00426   else return std::string("");
00427 
00428 }      
00429 
00430 static PKBuilder<XANAEsdBuilder> eventObserver("XANAEsdBuilder") ;
00431 
00432 //CC to get offline mode for EGCandidate
00433 
00434 #include "ElectronPhoton/EgammaAnalysis/interface/EGDummy.h"
00435 #include "ElectronPhoton/EgammaL2Selection/src/EGCandidateRecAlgo.h"
00436 
00437 static PKBuilder< RecBuilder<EGCandidateRecAlgo<EGDummy,EgammaSuperCluster> > > egoffbcandbuilder("EGCandfromEGSClusterBuilder");
00438 static PKBuilder< RecBuilder<EGCandidateRecAlgo<EGDummy,EgammaEndcapCluster> > > egoffecandbuilder("EGCandfromEGEClusterBuilder");

Generated on Thu Oct 27 21:59:46 2005 for XANADOO by doxygen 1.3.5