diff --git a/CLIC/CLICenv.sh b/CLIC/CLICenv.sh deleted file mode 100644 index 0192432..0000000 --- a/CLIC/CLICenv.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -#run marlin (SLC5) -source /afs/cern.ch/eng/clic/software/x86_64-slc5-gcc41/ILCSOFT/v01-16/init_ilcsoft.sh - -#run analysis (SLC6) -#source /afs/cern.ch/eng/clic/software/setupSLC6.sh - -#make sure pyroot is there -#export LD_LIBRARY_PATH=$ROOTSYS/lib:$PYTHONDIR/lib:$LD_LIBRARY_PATH -#export PYTHONPATH=$ROOTSYS/lib:$PYTHONPATH diff --git a/CLIC/README.md b/CLIC/README.md deleted file mode 100644 index 10cd05a..0000000 --- a/CLIC/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# PFCal: CLIC studies - -Check https://twiki.cern.ch/twiki/bin/view/CMS/PerformanceStudiesWithILD - -## Setup environment - -Check CLICenv.sh - -## Run FastJet over a set of SLCIO files in castor/eos (SLC5) - -python test/submitMarlinRun.py -i /castor/cern.ch/grid/ilc/prod/clic/1.4tev/h_nunu/ILD/DST/00002022/000 -o /store/cmst3/user/psilva/PFcal/hbb_nunu_ILD -s test/fastjet_newpfos.xml -l ${PWD}/FARMILD - -python test/submitMarlinRun.py -i /store/cmst3/user/psilva/PFcal/pp_WZ/DST/ -o /store/cmst3/user/psilva/PFcal/pp_WZ/DST/FJ -s test/fastjet_pp.xml -l ${PWD}/FARMWZ -python test/submitMarlinRun.py -i /store/cmst3/user/psilva/PFcal/pp_WZ/PU10/DST -o /store/cmst3/user/psilva/PFcal/pp_WZ/PU10/FJ -s test/fastjet_pp.xml -l ${PWD}/FARMWZPU10 - -## Run simple analyzer over SLCIO files in EOS (SLC6) - -python test/submitSLCIOanalysis.py -s `pwd`/test/runSLCIOanalysis.py -o "-j SelectedKt075PF" -i /store/cmst3/user/psilva/PFcal/hbb_nunu_ILD -l `pwd`/hbb_nunu_ILD -q 8nh - -python test/submitSLCIOanalysis.py -s `pwd`/test/runSLCIOanalysis.py -o "-j Kt4PF" -i /store/cmst3/user/psilva/PFcal/pp_WZ/DST/FJ -l `pwd`/pp_WZ_AK4 -q 8nh -python test/submitSLCIOanalysis.py -s `pwd`/test/runSLCIOanalysis.py -o "-j Kt4PF" -i /store/cmst3/user/psilva/PFcal/pp_WZ/PU10/FJ -l `pwd`/pp_WZPU10_AK4 -q 8nh -python test/submitSLCIOanalysis.py -s `pwd`/test/runSLCIOanalysis.py -o "-j Kt4PF" -i /store/cmst3/user/psilva/PFcal/pp_quarkGun/DST/FJ -l `pwd`/pp_quarkGun_AK4 -q 8nh - - -# Merge outputs and show plots - -hadd hbb_nunu_ILD.root hbb_nunu_ILD/output/*.root -rm -rf hbb_nunu_ILD -python test/studyVqqResolution.py -i hbb_nunu_ILD.root \ No newline at end of file diff --git a/CLIC/src/MyEDMtoHEPMCAnalyzer.cc b/CLIC/src/MyEDMtoHEPMCAnalyzer.cc deleted file mode 100644 index 42992fa..0000000 --- a/CLIC/src/MyEDMtoHEPMCAnalyzer.cc +++ /dev/null @@ -1,176 +0,0 @@ -// -*- C++ -*- -// -// Package: MyEDMtoHEPMCAnalyzer -// Class: MyEDMtoHEPMCAnalyzer -// -/**\class MyEDMtoHEPMCAnalyzer MyEDMtoHEPMCAnalyzer.cc MyEDMtoHEPMCAnalyzer/MyEDMtoHEPMCAnalyzer/src/MyEDMtoHEPMCAnalyzer.cc - - Description: [one line class summary] - - Implementation: - [Notes on implementation] -*/ -// -// Original Author: Pedro Vieira De Castro Ferreira Da Silva,40 3-A16,+41227679443, -// Created: Tue Sep 10 15:45:12 CEST 2013 -// $Id$ -// -// - - -// system include files -#include - -// user include files -#include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/EDAnalyzer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "HepMC/GenEvent.h" -#include "HepMC/IO_HEPEVT.h" -#include "HepMC/IO_GenEvent.h" - -#include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -#include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h" -#include "SimDataFormats/GeneratorProducts/interface/GenRunInfoProduct.h" - -using namespace std; - -// -// class declaration -// - -class MyEDMtoHEPMCAnalyzer : public edm::EDAnalyzer { - public: - explicit MyEDMtoHEPMCAnalyzer(const edm::ParameterSet&); - ~MyEDMtoHEPMCAnalyzer(); - - static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - - - private: - virtual void beginJob() ; - virtual void analyze(const edm::Event&, const edm::EventSetup&); - virtual void endJob() ; - - virtual void beginRun(edm::Run const&, edm::EventSetup const&); - virtual void endRun(edm::Run const&, edm::EventSetup const&); - virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&); - virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&); - - // ----------member data --------------------------- - - HepMC::IO_GenEvent ascii_out; -}; - -// -// constants, enums and typedefs -// - -// -// static data member definitions -// - -// -// constructors and destructor -// -MyEDMtoHEPMCAnalyzer::MyEDMtoHEPMCAnalyzer(const edm::ParameterSet& iConfig) -{ - // actually, pset is NOT in use - we keep it here just for illustratory putposes - HepMC::IO_GenEvent ascii_out("IO_GenEvent.dat",std::ios::out); -} - - -MyEDMtoHEPMCAnalyzer::~MyEDMtoHEPMCAnalyzer() -{ - - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) - -} - - -// -// member functions -// - -// ------------ method called for each event ------------ -void -MyEDMtoHEPMCAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) -{ - using namespace edm; - - // here's an example of accessing GenEventInfoProduct - Handle< GenEventInfoProduct > GenInfoHandle; - iEvent.getByLabel( "generator", GenInfoHandle ); - double qScale = GenInfoHandle->qScale(); - double pthat = ( GenInfoHandle->hasBinningValues() ? - (GenInfoHandle->binningValues())[0] : 0.0); - cout << " qScale = " << qScale << " pthat = " << pthat << endl; - - - Handle< HepMCProduct > EvtHandle ; - iEvent.getByLabel( "generator", EvtHandle ) ; - - const HepMC::GenEvent* Evt = EvtHandle->GetEvent() ; - - //write GenEvent into HepMC file - ascii_out << Evt; - - return ; -} - - -// ------------ method called once each job just before starting event loop ------------ -void -MyEDMtoHEPMCAnalyzer::beginJob() -{ - return ; -} - -// ------------ method called once each job just after ending the event loop ------------ -void -MyEDMtoHEPMCAnalyzer::endJob() -{ -} - -// ------------ method called when starting to processes a run ------------ -void -MyEDMtoHEPMCAnalyzer::beginRun(edm::Run const&, edm::EventSetup const&) -{ -} - -// ------------ method called when ending the processing of a run ------------ -void -MyEDMtoHEPMCAnalyzer::endRun(edm::Run const&, edm::EventSetup const&) -{ -} - -// ------------ method called when starting to processes a luminosity block ------------ -void -MyEDMtoHEPMCAnalyzer::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} - -// ------------ method called when ending the processing of a luminosity block ------------ -void -MyEDMtoHEPMCAnalyzer::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} - -// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ -void -MyEDMtoHEPMCAnalyzer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - //The following says we do not know what parameters are allowed so do no validation - // Please change this to state exactly what you do use, even if it is no parameters - edm::ParameterSetDescription desc; - desc.setUnknown(); - descriptions.addDefault(desc); -} - -//define this as a plug-in -DEFINE_FWK_MODULE(MyEDMtoHEPMCAnalyzer); diff --git a/CLIC/test/Mokka/MokkaSim.tar.gz b/CLIC/test/Mokka/MokkaSim.tar.gz deleted file mode 100644 index a5848f8..0000000 Binary files a/CLIC/test/Mokka/MokkaSim.tar.gz and /dev/null differ diff --git a/CLIC/test/Mokka/submitMokkaRun.py b/CLIC/test/Mokka/submitMokkaRun.py deleted file mode 100755 index d7b18a6..0000000 --- a/CLIC/test/Mokka/submitMokkaRun.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python - -import os,sys -import optparse -import commands - - -usage = 'usage: %prog [options]' -parser = optparse.OptionParser(usage) -parser.add_option('-q', '--queue' , dest='queue' , help='batch queue' , default='1nw') -parser.add_option('-R', '--R' , dest='requirementtoBatch' , help='requirement for batch queue' , default='pool>30000') -parser.add_option('-i', '--i' , dest='input' , help='input directory' , default='/store/cmst3/user/psilva/PFcal/pp_WZ/HepEvt') -parser.add_option('-o', '--out' , dest='output' , help='output directory' , default='/store/cmst3/user/psilva/PFcal/pp_WZ/') -parser.add_option('-l', '--localout' , dest='locoutput' , help='local output directory' , default='${PWD}/FARM/') -(opt, args) = parser.parse_args() - - -#prepare output -os.system('cmsMkdir %s/DST'%opt.output) -os.system('cmsMkdir %s/REC'%opt.output) -outDir=os.path.expandvars(opt.locoutput) -os.system('mkdir -p %s'%outDir) - - -j=0 -fList=commands.getstatusoutput('cmsLs %s | awk \'{print $5}\''%opt.input)[1].split('\n') -for f in fList: - - j=j+1 - jobName='ilcsim%d'%j - - basef=os.path.basename(f) - basef=basef.replace('.hepevt','_DST.slcio') - baserecf=os.path.basename(f) - baserecf=baserecf.replace('.hepevt','.slcio') - - #create a standalone Mokka and Marlin job - scriptFile = open('%s/runJob_%d.sh'%(outDir,j), 'w') - scriptFile.write('#!/bin/bash\n') - scriptFile.write('source /afs/cern.ch/eng/clic/software/x86_64-slc5-gcc41/ILCSOFT/v01-16/init_ilcsoft.sh\n') - scriptFile.write('mkdir /tmp/ilcsim%d\n'%(j)) - scriptFile.write('cd /tmp/ilcsim%d\n'%(j)) - scriptFile.write('gtar -xzvf /afs/cern.ch/user/p/psilva/CLIC/PFCal/test/Mokka/MokkaSim.tar.gz -C ./\n') - scriptFile.write('cmsStage %s ./bbudsc_3evt.hepevt\n'%(f)) - scriptFile.write('echo "Running simulation"\n') - scriptFile.write('Mokka -M ILD_o1_v05 bbudsc_3evt.steer\n') - scriptFile.write('cmsStage bbudsc_3evt.slcio %s/REC/%s\n'%(opt.output,baserecf)) - scriptFile.write('echo "Running reconstruction"\n') - scriptFile.write('Marlin bbudsc_3evt_stdreco.xml\n') - scriptFile.write('cmsStage bbudsc_3evt_DST.slcio %s/DST/%s\n'%(opt.output,basef)) - scriptFile.write('cd -\n') - scriptFile.write('rm -rf /tmp/ilcsim%d\n'%(j)) - scriptFile.write('echo "All done for job %d" \n'%j) - scriptFile.close() - - os.system('chmod u+rwx %s/runJob_%d.sh'%(outDir,j)) - os.system("bsub -q %s -R \"%s\" -J %s \'%s/runJob_%d.sh\'"%(opt.queue,opt.requirementtoBatch,jobName,outDir,j)) - diff --git a/CLIC/test/fastjet.xml b/CLIC/test/fastjet.xml deleted file mode 100644 index 3f442a8..0000000 --- a/CLIC/test/fastjet.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - myfile.slcio - - - MESSAGE - - - - kt_algorithm 0.75 - InclusiveIterativeNJets 4 10 - Kt075PF - PandoraPFOCollection - E_scheme - - - - kt_algorithm 0.75 - InclusiveIterativeNJets 4 10 - LooseKt075PF - LooseSelectedPandoraPFOCollection - E_scheme - - - - kt_algorithm 0.75 - InclusiveIterativeNJets 4 10 - SelectedKt075PF - SelectedPandoraPFOCollection - E_scheme - - - - kt_algorithm 0.75 - InclusiveIterativeNJets 4 10 - TightKt075PF - TightSelectedPandoraPFOCollection - E_scheme - - - - - outputfile.slcio - WRITE_NEW - - - - - - - diff --git a/CLIC/test/fastjet_newpfos.xml b/CLIC/test/fastjet_newpfos.xml deleted file mode 100644 index 04059bc..0000000 --- a/CLIC/test/fastjet_newpfos.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - myfile.slcio - - - MESSAGE - - - - kt_algorithm 0.75 - InclusiveIterativeNJets 4 10 - Kt075PF - PandoraPFANewPFOs - E_scheme - - - - kt_algorithm 0.75 - InclusiveIterativeNJets 4 10 - LooseKt075PF - LooseSelectedPandoraPFANewPFOs - E_scheme - - - - kt_algorithm 0.75 - InclusiveIterativeNJets 4 10 - SelectedKt075PF - SelectedPandoraPFANewPFOs - E_scheme - - - - kt_algorithm 0.75 - InclusiveIterativeNJets 4 10 - TightKt075PF - TightSelectedPandoraPFANewPFOs - E_scheme - - - - - outputfile.slcio - WRITE_NEW - - - - - - - diff --git a/CLIC/test/fastjet_pp.xml b/CLIC/test/fastjet_pp.xml deleted file mode 100644 index 0d99177..0000000 --- a/CLIC/test/fastjet_pp.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - myfile.slcio - - - MESSAGE - - - - antikt_algorithm 0.4 - Inclusive 5 - Kt4PF - PandoraPFOs - E_scheme - - - - antikt_algorithm 0.5 - Inclusive 5 - Kt5PF - PandoraPFOs - E_scheme - - - - kt_algorithm 0.75 - Inclusive 5 - Kt075PF - PandoraPFOs - E_scheme - - - - kt_algorithm 0.8 - Inclusive 5 - Kt8PF - PandoraPFOs - E_scheme - - - - outputfile.slcio - WRITE_NEW - - - - - - - diff --git a/CLIC/test/runMyEDMtoHEPMCAnalyzer_cfg.py b/CLIC/test/runMyEDMtoHEPMCAnalyzer_cfg.py deleted file mode 100644 index b73cf98..0000000 --- a/CLIC/test/runMyEDMtoHEPMCAnalyzer_cfg.py +++ /dev/null @@ -1,16 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -import sys - -startEv=0 -if len(sys.argv)>2 : startEv=int(sys.argv[2]) -print '[runMyEDMtoHEPMCAnalyzer_cfg.py] starting at event #%d'%startEv - -process = cms.Process("Analysis") -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(20) ) -process.source = cms.Source( "PoolSource", - fileNames = cms.untracked.vstring('file:pp_WZtoAnything_13TeV.root'), - skipEvents = cms.untracked.uint32(startEv) - ) -process.HepMCconvert = cms.EDAnalyzer( "MyEDMtoHEPMCAnalyzer" ) -process.p = cms.Path( process.HepMCconvert ) diff --git a/CLIC/test/runSLCIOanalysis.py b/CLIC/test/runSLCIOanalysis.py deleted file mode 100644 index 8c0284a..0000000 --- a/CLIC/test/runSLCIOanalysis.py +++ /dev/null @@ -1,369 +0,0 @@ -#! /usr/bin/env python - -from pyLCIO import IOIMPL -from ROOT import TFile, TH1F, TH2F, TLorentzVector -import optparse -import math -import re -import os - -def findRecoMatch(genP,jetHandle,cone=0.5): - - toReturn=[genP,None] - if jetHandle is None: return toReturn - if genP.getLorentzVec().Pt()==0 : return toReturn - - minDR=9999. - matchedJet=None - for jet in jetHandle : - if jet.getLorentzVec().Pt()==0 : continue - dR=jet.getLorentzVec().DeltaR(genP.getLorentzVec()) - if dR>minDR : continue - minDR=dR - matchedJet=jet - - #if not matchedJet is None: - # print '%d (%3.1f,%3.1f,%3.1f) \t (%3.1f,%3.1f,%3.1f) \t\t %3.1f'%( - # genP.getPDG(), - # genP.getLorentzVec().Pt(),genP.getLorentzVec().Eta(),genP.getLorentzVec().Phi(), - # matchedJet.getLorentzVec().Pt(),matchedJet.getLorentzVec().Eta(),matchedJet.getLorentzVec().Phi(), - # minDR - # ) - - if minDR>cone : matchedJet=None - toReturn[1]=matchedJet - - return toReturn - - -def analyze( dstFileName, genCollName, jetCollName, output, minPt=0.5 ): - - jetCone=0.5 - #parse the number - #if jetCollName=="JetOut": jetCone=0.75 - #else : - # jetCone = float( (re.findall(r'[0-9]+', jetCollName))[0] )/10 - # if jetCone==7.5 : jetCone=0.75 - - print 'Using %s jet collection with matching R=%f'%(jetCollName,jetCone) - - #open root file to store the histograms - rootFile=TFile(output,'recreate') - histos={} - histos['sel'] = TH1F('sel', ';Selection;Events', 4,0,4) - histos['sel'].GetXaxis().SetBinLabel(1,'Total') - histos['sel'].GetXaxis().SetBinLabel(2,'Gen V') - histos['sel'].GetXaxis().SetBinLabel(3,'Gen V#rightarrowqq') - histos['sel'].GetXaxis().SetBinLabel(4,'Reco V#rightarrowqq') - - histos['nvtx'] = TH1F('nvtx', ';Vertices;Events',20,0,20) - - histos['pfsumpt'] = TH1F('pfsumpt', ';Scalar transverse momentum sum [GeV];Events', 50,0,500) - histos['pfmet'] = TH1F('pfmet', ';Raw PF MET [GeV];Events', 50,0,100) - histos['pfmetoversumpt'] = TH1F('pfmetoversumpt', ';MET/#Sigma p_{T};Events', 50,0,0.5) - - kin=['','30to40','40to50','50to75','75to100','100toInf'] - reg=['','barrel','endcap'] - for k in kin: - for r in reg: - histos['jden'+k+r] = TH1F('den'+k+r, ';#DeltaE/E;Jets', 100,-2,2) - histos['jdpt'+k+r] = TH1F('dpt'+k+r, ';#Deltap_{T}/p_{T};Jets', 100,-2,2) - histos['jdphi'+k+r] = TH1F('dphi'+k+r, ';|#Delta#phi| [rad];Jets', 25,0,0.5) - histos['jdeta'+k+r] = TH1F('deta'+k+r, ';|#Delta#eta|;Jets', 25,0,0.5) - histos['jdr'+k+r] = TH1F('dr'+k+r, ';#DeltaR(jet,q);Jets', 25,0,0.5) - - bos=['','h','w','z'] - kin=['','50','100'] - reg=['','bb','ee','eb'] - for ib in bos: - histos[ib+'mqq'] = TH1F(ib+'mqq', ';Diquark mass [GeV];Events', 250,0,250) - histos[ib+'qpt'] = TH1F(ib+'qpt', ';Quark transverse momentum [GeV];Events', 250,0,250) - histos[ib+'qeta'] = TH1F(ib+'qeta', ';Quark pseudo-rapidity;Events', 50,0,3.0) - for k in kin: - for r in reg: - histos[ib+'mjj'+k+r] = TH1F(ib+'mjj'+k+r, ';Dijet mass [GeV];Events', 400,0,200) - histos[ib+'dmjj'+k+r] = TH1F(ib+'dmjj'+k+r, ';#Delta m/m;Events', 100,-2.02,1.98) - - for key in histos: - histos[key].Sumw2() - histos[key].SetMarkerStyle(20) - histos[key].SetMarkerColor(1) - histos[key].SetLineColor(1) - if key[0]=='v': - histos[key].SetFillStyle(3002) - histos[key].SetFillColor(32) - - # create the LCReader and open the input file - lcReader = IOIMPL.LCFactory.getInstance().createLCReader() - lcReader.open(dstFileName) - - # filling the tree - #print 'Generated \t\t Reconstructed \t\t\t Delta' - ievent=0 - for event in lcReader: - ievent=ievent+1 - print 'Event %d'%ievent - - genHandle=None - jetHandle=None - pfHandle=None - pfClusterHandle=None - pvHandle=None - for collectionName, collection in event: - if collectionName == genCollName : genHandle=collection - if collectionName == jetCollName : jetHandle=collection - if collectionName == "PandoraPFOs" : pfHandle=collection - if collectionName == "PrimaryVertex" : pvHandle=collection - if jetHandle is None : continue - - histos['nvtx'].Fill(len(pvHandle)) - - pfsumpt=0. - pfmet=TLorentzVector(0,0,0,0) - for pf in pfHandle: - pfmet = pfmet + pf.getLorentzVec() - pfsumpt = pfsumpt+pf.getLorentzVec().Pt() - histos['pfsumpt'].Fill(pfsumpt) - histos['pfmet'].Fill(pfmet.Pt()) - histos['pfmetoversumpt'].Fill(pfmet.Pt()/pfsumpt) - - - #Hard process: status 3 particles - #save only after at least one boson was found, otherwise incoming partons will be considered - genBosons=[] - promptQuarks=[] - for p in genHandle: - if p.getGeneratorStatus()!=3 : continue - if math.fabs(p.getPDG())==23 or math.fabs(p.getPDG())==24 or math.fabs(p.getPDG())==25: - genBosons.append(p) - if len(genBosons)==0: continue - #if math.fabs(p.getPDG())>6 : continue - if math.fabs(p.getPDG())>4 : continue - promptQuarks.append( p ) - - #if none found, check if from ILD official production (status is different) - if len(genBosons)==0 : - for p in genHandle: - #if math.fabs(p.getPDG())!=23 and math.fabs(p.getPDG())!=24 and math.fabs(p.getPDG())!=25: continue - if math.fabs(p.getPDG())!=25 : continue - if p.getGeneratorStatus()!=2 : continue - genBosons.append(p) - for d in p.getDaughters() : - if math.fabs(d.getPDG())>6 : continue - promptQuarks.append(d) - - #if still not found may be the quark/gluon gun: take all quarks status 2 - if len(genBosons)==0 : - for p in genHandle: - if not(math.fabs(p.getPDG())<4 or math.fabs(p.getPDG())==21) : continue - if p.getGeneratorStatus()!=2 : continue - histos['qpt'].Fill( p.getLorentzVec().Pt() ) - histos['qeta'].Fill( math.fabs( p.getLorentzVec().Eta() ) ) - if math.fabs( p.getLorentzVec().Eta() ) > 2.5 : continue - jet=findRecoMatch(p,jetHandle,jetCone)[1] - if jet is None: continue - - pt=p.getLorentzVec().Pt() - eta=math.fabs(p.getLorentzVec().Eta()) - if pt<20 or eta>2.5 : continue - - jetKin=[''] - if pt<40 : jetKin.append('30to40') - elif pt<50 : jetKin.append('40to50') - elif pt<75 : jetKin.append('50to75') - elif pt<100 : jetKin.append('75to100') - else : jetKin.append('100toInf') - - jetReg=[''] - if eta<1.5 : jetReg.append('barrel') - else : jetReg.append('endcap') - - for k in jetKin: - for r in jetReg: - histos['jden'+k+r].Fill(jet.getLorentzVec().E()/p.getLorentzVec().E()-1) - histos['jdpt'+k+r].Fill(jet.getLorentzVec().Pt()/p.getLorentzVec().Pt()-1) - histos['jdr'+k+r].Fill(p.getLorentzVec().DeltaR(jet.getLorentzVec())) - histos['jdeta'+k+r].Fill(math.fabs(p.getLorentzVec().Eta()-jet.getLorentzVec().Eta())) - histos['jdphi'+k+r].Fill(math.fabs(p.getLorentzVec().DeltaPhi(jet.getLorentzVec()))) - - - #match di-quarks to bosons, match- each quark to a reco jet (if available) - bosonDecays=[] - bosonRecoDecays=[] - goodBosonRecoFound=False - nPromptQuarks=len(promptQuarks) - matchedPromptQuarksIdx=[] - for b in genBosons: - - requireSameFlavor=( math.fabs(b.getPDG())==23 or math.fabs(b.getPDG())==25 ) - bosonCharge=b.getCharge() - bosonMass=b.getLorentzVec().M() - - for i in xrange(0,nPromptQuarks): - if i in matchedPromptQuarksIdx : continue - for j in xrange(i+1,nPromptQuarks): - if j in matchedPromptQuarksIdx : continue - - #di-quark - qqCharge=promptQuarks[i].getCharge()+promptQuarks[j].getCharge() - qq=promptQuarks[i].getLorentzVec()+promptQuarks[j].getLorentzVec() - drqq2b=qq.DeltaR(b.getLorentzVec()) - qqMass=qq.M() - dm=math.fabs(qqMass-bosonMass) - qqFlavor=math.fabs(promptQuarks[i].getPDG()+promptQuarks[j].getPDG()) - - #total charge - if int(qqCharge) != int(bosonCharge) : continue - - #check if both have the same flavor (Z/H do not mix different weak isospin components) - if requireSameFlavor : - if qqFlavor!=0 : continue - - #match direction - if drqq2b>0.1 : continue - - bosName=[''] - if math.fabs(b.getPDG())==25 : bosName.append('h') - if math.fabs(b.getPDG())==23 : bosName.append('z') - if math.fabs(b.getPDG())==24 : bosName.append('w') - for ibname in bosName : histos[ibname+'mqq'].Fill(qq.M()) - - #match mass within 5 GeV - if dm>2.5 : continue - - #acceptance cuts for individual quarks - for ibname in bosName : - histos[ib+'qpt'].Fill( promptQuarks[i].getLorentzVec().Pt() ) - histos[ib+'qpt'].Fill( promptQuarks[j].getLorentzVec().Pt() ) - histos[ib+'qeta'].Fill( math.fabs( promptQuarks[i].getLorentzVec().Eta() ) ) - histos[ib+'qeta'].Fill( math.fabs( promptQuarks[j].getLorentzVec().Eta() ) ) - if promptQuarks[i].getLorentzVec().Pt()<20 : continue - if promptQuarks[j].getLorentzVec().Pt()<20 : continue - if math.fabs( promptQuarks[i].getLorentzVec().Eta() ) > 2.5 : continue - if math.fabs( promptQuarks[j].getLorentzVec().Eta() ) > 2.5 : continue - - #ok to analyze this one - bosonDecays.append([b,promptQuarks[i],promptQuarks[j]]) - j1=findRecoMatch(promptQuarks[i],jetHandle,jetCone)[1] - j2=findRecoMatch(promptQuarks[j],jetHandle,jetCone)[1] - if j1 is not None and j2 is not None: goodBosonRecoFound=True - bosonRecoDecays.append([b,j1,j2]) - matchedPromptQuarksIdx.append(i) - matchedPromptQuarksIdx.append(j) - break - - #event selection - histos['sel'].Fill(0) - if len(genBosons)==0 : continue - histos['sel'].Fill(1) - if len(bosonDecays)==0: continue - histos['sel'].Fill(2) - if goodBosonRecoFound==True: histos['sel'].Fill(3) - - #match the generated decays at reconstruction level - for i in xrange(0,len(bosonDecays)): - b=bosonDecays[i][0] - q1=bosonDecays[i][1] - q2=bosonDecays[i][2] - j1=bosonRecoDecays[i][1] - j2=bosonRecoDecays[i][2] - if j1 is None: continue - if j2 is None: continue - - dijet=j1.getLorentzVec()+j2.getLorentzVec() - dRjj=j1.getLorentzVec().DeltaR( j2.getLorentzVec() ) - if dRjj < jetCone: - print 'Merged jets are not considered...' - continue - - - inMwindow = (math.fabs(dijet.M()-b.getLorentzVec().M())<15) - pt1=j1.getLorentzVec().Pt() - eta1=math.fabs(j1.getLorentzVec().Eta()) - pt2=j2.getLorentzVec().Pt() - eta2=math.fabs(j2.getLorentzVec().Eta()) - - jjKin=[''] - if pt1>50 or pt2>50 : jjKin.append('50') - if pt1>100 or pt2>100 : jjKin.append('100') - - jjReg='b' - if eta1>1.5: jjReg='e' - if eta2<=1.5: jjReg='b'+jjReg - if eta2>1.5: jjReg='e'+jjReg - if jjReg=='be' : jjReg='eb' - jjRegs=['',jjReg] - - bosNames=[''] - if math.fabs(b.getPDG())==25 : bosNames.append('h') - if math.fabs(b.getPDG())==23 : bosNames.append('z') - if math.fabs(b.getPDG())==24 : bosNames.append('w') - - for ib in bosNames: - for k in jjKin: - for r in jjRegs: - histos[ib+'mjj'+k+r].Fill(dijet.M()) - histos[ib+'dmjj'+k+r].Fill(dijet.M()/b.getLorentzVec().M()-1) - - - #individual jet resolutions - for qj in [[q1,j1],[q2,j2]]: - quark=qj[0] - jet=qj[1] - - pt=quark.getLorentzVec().Pt() - eta=math.fabs(quark.getLorentzVec().Eta()) - if pt<20 or eta>2.5 : continue - - jetKin=[''] - if pt<40 : jetKin.append('30to40') - elif pt<50 : jetKin.append('40to50') - elif pt<75 : jetKin.append('50to75') - elif pt<100 : jetKin.append('75to100') - else : jetKin.append('100toInf') - - jetReg=[''] - if eta<1.5 : jetReg.append('barrel') - else : jetReg.append('endcap') - - - for k in jetKin: - for r in jetReg: - histos['jden'+k+r].Fill(jet.getLorentzVec().E()/quark.getLorentzVec().E()-1) - histos['jdpt'+k+r].Fill(jet.getLorentzVec().Pt()/quark.getLorentzVec().Pt()-1) - histos['jdr'+k+r].Fill(quark.getLorentzVec().DeltaR(jet.getLorentzVec())) - histos['jdeta'+k+r].Fill(math.fabs(quark.getLorentzVec().Eta()-jet.getLorentzVec().Eta())) - histos['jdphi'+k+r].Fill(math.fabs(quark.getLorentzVec().DeltaPhi(jet.getLorentzVec()))) - - # write and close the file - rootFile.Write() - rootFile.Close() - - -if __name__ == '__main__': - - usage = 'usage: %prog [options]' - parser = optparse.OptionParser(usage) - parser.add_option('-i', '--input', dest='input' , help='input' , default='../Test/bbudsc_3evt_DST.slcio') - parser.add_option('-o', '--output', dest='output', help='output' , default='analysis.root') - parser.add_option('-g', '--gen' , dest='genColl', help='gen level collection' , default='MCParticlesSkimmed') - parser.add_option('-j', '--jet' , dest='jetColl', help='pf jet collection' , default='AK5PF') - (opt,args)=parser.parse_args() - - fToProcess=opt.input - if(fToProcess.find('/store/')==0): - print 'Copying input locally to tmp' - locF='/tmp/%s'%os.path.basename(fToProcess) - os.system('cmsStage %s %s'%(fToProcess,locF)) - fToProcess=locF - - analyze( dstFileName=fToProcess, genCollName=opt.genColl, jetCollName=opt.jetColl, output=opt.output) - print 'Analysis ended' - - if(fToProcess.find('/tmp/')==0): - print 'Removing local input' - os.system('rm %s'%fToProcess) - - - - diff --git a/CLIC/test/studyVqqResolution.py b/CLIC/test/studyVqqResolution.py deleted file mode 100644 index 62820e8..0000000 --- a/CLIC/test/studyVqqResolution.py +++ /dev/null @@ -1,468 +0,0 @@ -#! /usr/bin/env python - -from ROOT import TFile, TF1, TH1F, TH2F,TCanvas, TProfile, TPaveText, TLorentzVector, TLegend,TGraphErrors, gStyle, gROOT -from ROOT import RooArgSet, RooRealVar,RooGaussian, RooDataHist, RooAbsData, RooArgList, RooCBShape, RooAddPdf, RooAbsPdf, RooFit -import optparse -import math - -allHeaders=[] - -def drawHeader() : - allHeaders.append(TPaveText(0.08,0.92,0.6,0.98,'brNDC')) - ih=len(allHeaders)-1 - allHeaders[ih].SetBorderSize(0) - allHeaders[ih].SetFillStyle(0) - allHeaders[ih].SetTextAlign(12) - allHeaders[ih].AddText('ILD simulation, pp collisions @ 14 TeV') - allHeaders[ih].Draw() - - - -def studyVqqResolution(rootFile): - - #get all from file - histos={} - inF=TFile.Open(rootFile) - keys=inF.GetListOfKeys() - for k in keys: - obj=inF.Get(k.GetName()) - obj.SetDirectory(0) - histos[k.GetName()]=obj - inF.Close() - - #plot - gROOT.SetBatch() - gROOT.SetStyle('Plain') - gStyle.SetOptStat(0) - gStyle.SetOptFit(1111) - gStyle.SetOptTitle(0) - gStyle.SetStatFont(42) - - kin=['','30to40','40to50','50to75','75to100','100toInf'] - for k in kin: - c=TCanvas('c','c',600,600) - c.cd() - c.SetCanvasSize(1000,500) - c.SetWindowSize(1000,500) - c.Divide(2,1) - c.cd(1) - histos['deta'+k+'barrel'].SetLineWidth(2) - histos['deta'+k+'barrel'].SetTitle('barrel') - histos['deta'+k+'barrel'].Draw('hist') - histos['deta'+k+'endcap'].SetLineWidth(2) - histos['deta'+k+'endcap'].SetLineStyle(7) - histos['deta'+k+'endcap'].SetTitle('endcap') - histos['deta'+k+'endcap'].Draw('histsame') - leg=TLegend(0.6,0.92,0.9,0.98) - leg.SetFillStyle(0) - leg.SetBorderSize(0) - leg.SetTextFont(42) - leg.AddEntry(histos['deta'+k+'barrel'],'barrel','f') - leg.AddEntry(histos['deta'+k+'endcap'],'endcap','f') - leg.SetNColumns(2) - leg.Draw() - drawHeader() - c.cd(2) - histos['dphi'+k+'barrel'].SetLineWidth(2) - histos['dphi'+k+'barrel'].SetTitle('barrel') - histos['dphi'+k+'barrel'].Draw('hist') - histos['dphi'+k+'endcap'].SetLineWidth(2) - histos['dphi'+k+'endcap'].SetLineStyle(7) - histos['dphi'+k+'endcap'].SetTitle('endcap') - histos['dphi'+k+'endcap'].Draw('histsame') - c.Modified() - c.Update() - c.SaveAs('dr_%s.png'%k) - - - labels=[] - responseVars=['dpt','den','dphi','deta','dr'] - for r in responseVars: - barrelResponse=TGraphErrors() - barrelResponse.SetName(r+'barrelresponse') - barrelResponse.SetLineWidth(2) - barrelResponse.SetFillStyle(0) - barrelResponse.SetMarkerStyle(20) - barrelCoreResponse=barrelResponse.Clone(r+'barrelcoreresponse') - endcapResponse=TGraphErrors() - endcapResponse.SetName(r+'endcapresponse') - endcapResponse.SetLineWidth(2) - endcapResponse.SetFillStyle(0) - endcapResponse.SetMarkerStyle(24) - endcapCoreResponse=endcapResponse.Clone(r+'endcapresponse') - for k in kin: - c.cd() - c.Clear() - c.SetWindowSize(1000,500) - c.Divide(2,1) - for i in [1,2] : - c.cd(i) - reg='barrel' - if i==2: reg='endcap' - - h=histos[r+k+reg] - x=RooRealVar("x", h.GetXaxis().GetTitle(), h.GetXaxis().GetXmin(), h.GetXaxis().GetXmax()) - data=RooDataHist("data", "dataset with x", RooArgList(x), h) - frame=x.frame() - RooAbsData.plotOn( data, frame, RooFit.DataError(RooAbsData.SumW2) ) - - mean1=RooRealVar("mean1","mean1",0,-0.5,0.5); - sigma1=RooRealVar("sigma1","sigma1",0.1,0.01,1.0); - gauss1=RooGaussian("g1","g",x,mean1,sigma1) - - if r=='dpt' or r=='den' : - mean2=RooRealVar("mean2","mean2",0,-0.5,0.5); - sigma2=RooRealVar("sigma2","sigma2",0.1,0.01,1.0); - alphacb=RooRealVar("alphacb","alphacb",1,0.1,3); - ncb=RooRealVar("ncb","ncb",4,1,100) - gauss2 = RooCBShape("cb2","cb",x,mean2,sigma2,alphacb,ncb); - else: - mean1.setRange(0,0.5) - mean2=RooRealVar("mean2","mean",0,0,1); - sigma2=RooRealVar("sigma2","sigma",0.1,0.01,1.0); - gauss2=RooGaussian("g2","g",x,mean2,sigma2) ; - - frac = RooRealVar("frac","fraction",0.9,0.0,1.0) - if data.sumEntries()<100 : - frac.setVal(1.0) - frac.setConstant(True) - model = RooAddPdf("sum","g1+g2",RooArgList(gauss1,gauss2), RooArgList(frac)) - - status=model.fitTo(data,RooFit.Save()).status() - if status!=0 : continue - - model_cdf=model.createCdf(RooArgSet(x)) ; - cl=0.90 - ul=0.5*(1.0+cl) - closestToCL=1.0 - closestToUL=-1 - closestToMedianCL=1.0 - closestToMedian=-1 - for ibin in xrange(1,h.GetXaxis().GetNbins()*10): - xval=h.GetXaxis().GetXmin()+(ibin-1)*h.GetXaxis().GetBinWidth(ibin)/10. - x.setVal(xval) - cdfValToCL=math.fabs(model_cdf.getVal()-ul) - if cdfValToCL%3.0f GeV'%ptthreshold) - labels[ilab].Draw() - - c.Modified() - c.Update() - c.SaveAs('mjj'+k+r+'.png') - - - massResolutionGrs=[] - for r in region: - massResolution=TGraphErrors() - massResolution.SetName(r+'dm') - massResolution.SetLineWidth(2) - massResolution.SetFillStyle(0) - massResolution.SetMarkerStyle(20+len(massResolutionGrs)) - massResolution.SetMarkerColor(1+len(massResolutionGrs)) - massResolution.SetLineColor(1+len(massResolutionGrs)) - massResolution.SetFillColor(1+len(massResolutionGrs)) - massResolutionGrs.append(massResolution) - - for k in kin: - - c=TCanvas('c','c',600,600) - c.cd() - h=histos['dmjj'+k+r] - x=RooRealVar("x", h.GetXaxis().GetTitle(), h.GetXaxis().GetXmin(), h.GetXaxis().GetXmax()) - data=RooDataHist("data", "dataset with x", RooArgList(x), h) - frame=x.frame() - RooAbsData.plotOn( data, frame, RooFit.DataError(RooAbsData.SumW2) ) - - mean1=RooRealVar("mean1","mean1",0,-0.5,0.5); - sigma1=RooRealVar("sigma1","sigma1",0.1,0.01,1.0); - gauss1=RooGaussian("g1","g",x,mean1,sigma1) - mean2=RooRealVar("mean2","mean2",0,-0.5,0.5); - sigma2=RooRealVar("sigma2","sigma2",0.1,0.01,1.0); - alphacb=RooRealVar("alphacb","alphacb",1,0.1,3); - ncb=RooRealVar("ncb","ncb",4,1,100) - gauss2 = RooCBShape("cb2","cb",x,mean2,sigma2,alphacb,ncb); - frac = RooRealVar("frac","fraction",0.9,0.0,1.0) - model = RooAddPdf("sum","g1+g2",RooArgList(gauss1,gauss2), RooArgList(frac)) - status=model.fitTo(data,RooFit.Save()).status() - if status!=0 : continue - RooAbsPdf.plotOn(model,frame) - frame.Draw() - - labels.append( TPaveText(0.6,0.65,0.85,0.9,'brNDC') ) - ilab=len(labels)-1 - labels[ilab].SetName(r+k+'dmfitrestxt') - labels[ilab].SetBorderSize(0) - labels[ilab].SetFillStyle(0) - labels[ilab].SetTextFont(42) - labels[ilab].SetTextAlign(12) - labels[ilab].AddText('Gaussian #1 (f=%3.3f)'%frac.getVal()) - labels[ilab].AddText('#mu=%3.3f#pm%3.3f'%(mean1.getVal(),mean1.getError())) - labels[ilab].AddText('#sigma=%3.3f#pm%3.3f'%(sigma1.getVal(),sigma1.getError())) - labels[ilab].AddText('Gaussian #2 (f=%3.3f)'%(1-frac.getVal())) - labels[ilab].AddText('#mu=%3.3f#pm%3.3f'%(mean2.getVal(),mean2.getError())) - labels[ilab].AddText('#sigma=%3.3f#pm%3.3f'%(sigma2.getVal(),sigma2.getError())) - labels[ilab].Draw() - - drawHeader() - labels.append( TPaveText(0.15,0.8,0.4,0.9,'brNDC') ) - ilab=len(labels)-1 - labels[ilab].SetName(k+r+'dmjj') - labels[ilab].SetBorderSize(0) - labels[ilab].SetFillStyle(0) - labels[ilab].SetTextFont(42) - labels[ilab].SetTextAlign(12) - regionTitle="inclusive" - if r == 'bb' : regionTitle='barrel-barrel' - if r == 'eb' : regionTitle='endcap-barrel' - if r == 'ee' : regionTitle='endcap-endcap' - labels[ilab].AddText(regionTitle) - ptthreshold=30 - if k!='' : ptthreshold=float(k) - labels[ilab].AddText('p_{T}>%3.0f GeV'%ptthreshold) - labels[ilab].Draw() - - c.Modified() - c.Update() - c.SaveAs('dmjj'+k+r+'.png') - - massResolution.SetTitle(regionTitle) - ip=massResolution.GetN() - x=40 - xerr=10 - if k=='50' : - x=75 - xerr=25 - elif k=='100': - x=150 - xerr=50 - y=sigma1.getVal() - yerr=sigma1.getError() - if frac.getVal()<0.8: - if sigma2.getVal()=0 : - isCastor=True - lsCommand='rfdir %s | awk \'{print $9}\''%opt.input - -j=0 -fList=commands.getstatusoutput(lsCommand)[1].split('\n') -for f in fList: - - #get the base name of the file (normalize castor and EOS outputs) - f=os.path.basename(f) - if f.find('.slcio')<0 : continue - - j=j+1 - jobName='ilcsim%d'%j - - #create a standalone Marlin job - scriptFile = open('%s/runJob_%d.sh'%(outDir,j), 'w') - scriptFile.write('#!/bin/bash\n') - scriptFile.write('source /afs/cern.ch/eng/clic/software/x86_64-slc5-gcc41/ILCSOFT/v01-16/init_ilcsoft.sh\n') - if isCastor : scriptFile.write('rfcp %s/%s /tmp/%s \n'%(opt.input,f,f)) - else : scriptFile.write('cmsStage %s/%s /tmp/%s \n'%(opt.input,f,f)) - scriptFile.write('Marlin %s/../%s --MyLCIOOutputProcessor.LCIOOutputFile=/tmp/fj_%s --global.LCIOInputFiles=/tmp/%s \n'%(outDir,opt.steer,f,f)) - scriptFile.write('cmsStage /tmp/fj_%s %s \n'%(f,opt.output)) - scriptFile.write('rm /tmp/*.slcio \n') - scriptFile.write('echo "All done for job %d" \n'%j) - scriptFile.close() - - os.system('chmod u+rwx %s/runJob_%d.sh'%(outDir,j)) - os.system("bsub -q %s -R \"%s\" -J %s \'%s/runJob_%d.sh\'"%(opt.queue,opt.requirementtoBatch,jobName,outDir,j)) - diff --git a/CLIC/test/submitSLCIOanalysis.py b/CLIC/test/submitSLCIOanalysis.py deleted file mode 100755 index 347a1fa..0000000 --- a/CLIC/test/submitSLCIOanalysis.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python - -import os,sys -import optparse -import commands - - -usage = 'usage: %prog [options]' -parser = optparse.OptionParser(usage) -parser.add_option('-q', '--queue' , dest='queue' , help='batch queue' , default='8nm') -parser.add_option('-R', '--R' , dest='requirementtoBatch' , help='requirement for batch queue' , default='pool>30000') -parser.add_option('-i', '--i' , dest='input' , help='input directory' , default='/store/cmst3/user/psilva/PFcal/h_nunu') -parser.add_option('-l', '--localout' , dest='locoutput' , help='local output directory' , default='${PWD}/FARM/') -parser.add_option('-s', '--script' , dest='script' , help='analysis script' , default='${PWD}/test/runSLCIOanalysis.py') -parser.add_option('-o', '--options' , dest='options' , help='options' , default='-j CA8') -(opt, args) = parser.parse_args() - - -#prepare output -outDir=os.path.expandvars(opt.locoutput) -os.system('mkdir -p %s/output'%outDir) - - -j=0 -fList=commands.getstatusoutput('cmsLs %s | awk \'{print $5}\''%opt.input)[1].split('\n') - -for f in fList: - if len(f)==0 : continue - - j=j+1 - jobName='ilcsim%d'%j - - #create the steer for the job - - #create a standalone job - scriptFile = open('%s/runJob_%d.sh'%(outDir,j), 'w') - scriptFile.write('#!/bin/bash\n') - scriptFile.write('source /afs/cern.ch/eng/clic/software/setupSLC6.sh \n') - scriptFile.write('python %s -i %s -o %s/output/job_%d.root %s \n'%(opt.script,f,outDir,j,opt.options)) - scriptFile.write('echo "All done for job %d" \n'%j) - scriptFile.close() - - os.system('chmod u+rwx %s/runJob_%d.sh'%(outDir,j)) - os.system("bsub -q %s -R \"%s\" -J %s \'%s/runJob_%d.sh\'"%(opt.queue,opt.requirementtoBatch,jobName,outDir,j)) - diff --git a/PFCalEE/include/DetectorConstruction.hh b/PFCalEE/include/DetectorConstruction.hh index ac7df15..8950dcf 100644 --- a/PFCalEE/include/DetectorConstruction.hh +++ b/PFCalEE/include/DetectorConstruction.hh @@ -71,6 +71,12 @@ public: v_HGCALHE_v8=61, v_HGCALBE_v8=62, v_HGCAL_v8=63, + v_HGCAL_v80=80, //FH+BH granularity studies + v_HGCAL_v81=81, + v_HGCAL_v82=82, + v_HGCAL_v83=83, + v_HGCAL_v84=84, + v_HGCAL_v85=85, v_HGCALEE_TB=100, v_HGCALEE_TB_gap0=101, v_HGCALEE_TB_allW=102, @@ -110,7 +116,10 @@ public: int getVersion() const { return version_; } unsigned getShape() const { return shape_; } - + void SetPhiSectorSegmentation(std::vector segList) { phiSegmentationList_=segList; } + std::vector GetPhiSectorSegmentation() { return phiSegmentationList_; } + void SetFirstBHCAL2Layer(unsigned layer) { firstBHCAL2Layer_=layer; } + unsigned GetFirstBHCAL2Layer() { return firstBHCAL2Layer_; } const std::vector & getSiLogVol() {return m_logicSi; } const std::vector & getAlLogVol() {return m_logicAl; } @@ -180,7 +189,10 @@ private: unsigned firstHFlayer_; unsigned firstMixedlayer_; unsigned firstScintlayer_; + unsigned firstBHCAL2Layer_; + unsigned nbhLayers_; + std::vector phiSegmentationList_; std::vector absThickW_; std::vector absThickPb_; std::vector dropLayer_; diff --git a/PFCalEE/include/EventAction.hh b/PFCalEE/include/EventAction.hh index 4b06e56..52f61e5 100644 --- a/PFCalEE/include/EventAction.hh +++ b/PFCalEE/include/EventAction.hh @@ -47,12 +47,14 @@ public: //std::ofstream & fout() {return fout_;} bool isFirstVolume(const std::string volname) const; + void SetFirstBHCAL2Layer(G4int layer) { firstBHCAL2Layer_=layer; } + G4int GetFirstBHCAL2Layer() { return firstBHCAL2Layer_; } private: RunAction* runAct; std::vector *detector_; G4int evtNb_,printModulo; - + G4int firstBHCAL2Layer_; HGCSSGeometryConversion* geomConv_; TFile *outF_; diff --git a/PFCalEE/include/SamplingSection.hh b/PFCalEE/include/SamplingSection.hh index ab5035e..6ebdd49 100644 --- a/PFCalEE/include/SamplingSection.hh +++ b/PFCalEE/include/SamplingSection.hh @@ -175,6 +175,7 @@ public: G4double getAverageTime(); G4int getTotalSensHits(); G4double getTotalSensE(); + G4double getTotalThick() { return Total_thick; } const G4SiHitVec & getSiHitVec(const unsigned & idx) const; const G4SiHitVec & getAlHitVec() const; diff --git a/PFCalEE/src/DetectorConstruction.cc b/PFCalEE/src/DetectorConstruction.cc index e8bd633..91526c5 100644 --- a/PFCalEE/src/DetectorConstruction.cc +++ b/PFCalEE/src/DetectorConstruction.cc @@ -324,7 +324,8 @@ DetectorConstruction::DetectorConstruction(G4int ver, G4int mod, break; } - case v_HGCALEE_v8: case v_HGCAL_v8: + case v_HGCALEE_v8: case v_HGCAL_v8: + case v_HGCAL_v80: case v_HGCAL_v81: case v_HGCAL_v82: case v_HGCAL_v83: { G4cout << "[DetectorConstruction] starting v_HGCAL(EE)_v8"<< G4endl; @@ -401,19 +402,18 @@ DetectorConstruction::DetectorConstruction(G4int ver, G4int mod, m_minEta.push_back(m_minEta0);m_maxEta.push_back(m_maxEta0); } - if(version_==v_HGCAL_v8){ - //add HCAL - //FH = FH+BH silicon version = 24 layers - buildHGCALFHE(8); - //BH = FH+BH scintillator version = 16 layers - buildHGCALBHE(8); - } + if(version_==v_HGCAL_v8 || + version_==v_HGCAL_v80 || version_==v_HGCAL_v81 || version_==v_HGCAL_v82 || version_==v_HGCAL_v83) + { + //add HCAL + //FH = FH+BH silicon version = 24 layers + buildHGCALFHE(8); + //BH = FH+BH scintillator version = 16 layers + buildHGCALBHE(8); + } break; } - - - case v_HGCALEE_v5: case v_HGCALEE_v5_gap4: case v_HGCAL_v5: case v_HGCAL_v5_gap4: { G4cout << "[DetectorConstruction] starting v_HCALEE_v5"<< G4endl; @@ -717,105 +717,155 @@ void DetectorConstruction::buildHGCALFHE(const unsigned aVersion){ std::vector lThick; std::vector lEle; if (aVersion==8){ + G4double airThick = 1.5*mm; G4double pcbThick = 1.6*mm; - if (version_==v_HGCAL_v8){ - //back of ecal - lThick.push_back(pcbThick);lEle.push_back("PCB"); - lThick.push_back(airThick);lEle.push_back("Air"); - lThick.push_back(pcbThick);lEle.push_back("PCB"); - lThick.push_back(0.1*mm);lEle.push_back("Cu"); - lThick.push_back(1*mm);lEle.push_back("SSteel"); + G4double fhSSteelThick = 35*mm; + G4double bhSSteelThick = 68*mm; + G4double m_z0pos(2980); + G4double firstMixed_z0pos(3920.7); + G4double lastFH_z0pos(4071.53); + G4double lastBH_z0pos(5129.2); + if(version_==v_HGCAL_v80){ + fhSSteelThick = 53*mm; + bhSSteelThick = 53*mm; + } + if(version_==v_HGCAL_v81){ + fhSSteelThick = 60*mm; + bhSSteelThick = 97*mm; + } + if(version_==v_HGCAL_v82){ + fhSSteelThick = 76*mm; + bhSSteelThick = 76*mm; + } + if(version_==v_HGCAL_v83){ + fhSSteelThick = 25.3*mm; + bhSSteelThick = 54.9*mm; } - //CE-H layers 1 - lThick.push_back(40*mm);lEle.push_back("SSteel"); - lThick.push_back(6*mm);lEle.push_back("Cu"); - lThick.push_back(1*mm);lEle.push_back("SSteel"); - lThick.push_back(0.1*mm);lEle.push_back("Si"); - lThick.push_back(0.1*mm);lEle.push_back("Si"); - lThick.push_back(0.1*mm);lEle.push_back("Si"); - m_caloStruct.push_back( SamplingSection(lThick,lEle) ); - m_minEta.push_back(m_minEta0);m_maxEta.push_back(m_maxEta0); - //CE-H layers 2-9 - lThick.clear(); - lEle.clear(); - lThick.push_back(pcbThick);lEle.push_back("PCB"); - lThick.push_back(airThick);lEle.push_back("Air"); - lThick.push_back(pcbThick);lEle.push_back("PCB"); - lThick.push_back(1*mm);lEle.push_back("Cu"); - lThick.push_back(1*mm);lEle.push_back("Air"); - lThick.push_back(35*mm);lEle.push_back("SSteel"); - lThick.push_back(6*mm);lEle.push_back("Cu"); - lThick.push_back(1*mm);lEle.push_back("SSteel"); - lThick.push_back(0.1*mm);lEle.push_back("Si"); - lThick.push_back(0.1*mm);lEle.push_back("Si"); - lThick.push_back(0.1*mm);lEle.push_back("Si"); - //layers 2-8 - for(unsigned i=0; i<7; i++) { + //back of ecal + first layer + if (version_==v_HGCAL_v8 || + version_==v_HGCAL_v80 || version_==v_HGCAL_v81 || version_==v_HGCAL_v82 || version_==v_HGCAL_v83 ) { + lThick.push_back(pcbThick); lEle.push_back("PCB"); + lThick.push_back(airThick); lEle.push_back("Air"); + lThick.push_back(pcbThick); lEle.push_back("PCB"); + lThick.push_back(0.1*mm); lEle.push_back("Cu"); + lThick.push_back(1*mm); lEle.push_back("SSteel"); + } + lThick.push_back(40*mm); lEle.push_back("SSteel"); + lThick.push_back(6*mm); lEle.push_back("Cu"); + lThick.push_back(1*mm); lEle.push_back("SSteel"); + lThick.push_back(0.1*mm); lEle.push_back("Si"); + lThick.push_back(0.1*mm); lEle.push_back("Si"); + lThick.push_back(0.1*mm); lEle.push_back("Si"); + m_caloStruct.push_back( SamplingSection(lThick,lEle) ); + m_minEta.push_back(m_minEta0); m_maxEta.push_back(m_maxEta0); + size_t curIdx(m_caloStruct.size()-1); + G4double Total_thick(0.); + for(auto cstruct : m_caloStruct ) Total_thick += cstruct.getTotalThick(); + + //pure Si layers (2-9 in TDR geometry) + int npureSi(1); + lThick.clear(); lEle.clear(); + lThick.push_back(pcbThick); lEle.push_back("PCB"); + lThick.push_back(airThick); lEle.push_back("Air"); + lThick.push_back(pcbThick); lEle.push_back("PCB"); + lThick.push_back(1*mm); lEle.push_back("Cu"); + lThick.push_back(1*mm); lEle.push_back("Air"); + lThick.push_back(fhSSteelThick); lEle.push_back("SSteel"); + lThick.push_back(6*mm); lEle.push_back("Cu"); + lThick.push_back(1*mm); lEle.push_back("SSteel"); + lThick.push_back(0.1*mm); lEle.push_back("Si"); + lThick.push_back(0.1*mm); lEle.push_back("Si"); + lThick.push_back(0.1*mm); lEle.push_back("Si"); + do{ m_caloStruct.push_back( SamplingSection(lThick,lEle) ); m_minEta.push_back(m_minEta0);m_maxEta.push_back(m_maxEta0); - } - //layer 9 + curIdx=m_caloStruct.size()-1; + Total_thick += m_caloStruct[curIdx].getTotalThick(); + npureSi++; + }while(Total_thick<=firstMixed_z0pos-m_z0pos); + cout << "Placed " << npureSi << " FH sections until z=" << firstMixed_z0pos << " , starting mixed sections" << endl; + + //mixed layers FH + int nmixedSiFH(0); + G4double rLimit(1450); firstMixedlayer_ = m_caloStruct.size(); m_caloStruct.push_back( SamplingSection(lThick,lEle) ); - m_minEta.push_back(getEtaFromRZ(1450,3920.7));m_maxEta.push_back(m_maxEta0); - //CE-H layers 10-12 + m_minEta.push_back(getEtaFromRZ(rLimit,Total_thick+m_z0pos)); m_maxEta.push_back(m_maxEta0); + curIdx=m_caloStruct.size()-1; + cout << "First mixed layer @ z=" << Total_thick+m_z0pos + << " covers [" << m_minEta[curIdx] << "," << m_maxEta[curIdx] << "] in eta" + << endl; + Total_thick += m_caloStruct[curIdx].getTotalThick(); + nmixedSiFH++; + cout << "\t ending at z=" << Total_thick+m_z0pos << endl; + lThick.clear(); - lEle.clear(); - lThick.push_back(pcbThick);lEle.push_back("PCB"); - lThick.push_back(airThick);lEle.push_back("Air"); - lThick.push_back(pcbThick);lEle.push_back("PCB"); - //added in layer 9 but after Si so belongs to layer10 here... - lThick.push_back(1.9*mm);lEle.push_back("Air"); - lThick.push_back(1*mm);lEle.push_back("Cu"); - lThick.push_back(1*mm);lEle.push_back("Air"); - lThick.push_back(35*mm);lEle.push_back("SSteel"); - lThick.push_back(6*mm);lEle.push_back("Cu"); - lThick.push_back(1*mm);lEle.push_back("SSteel"); - lThick.push_back(0.1*mm);lEle.push_back("Si"); - lThick.push_back(0.1*mm);lEle.push_back("Si"); - lThick.push_back(0.1*mm);lEle.push_back("Si"); - for(unsigned i=0; i<3; i++) { + lEle.clear(); + lThick.push_back(pcbThick); lEle.push_back("PCB"); + lThick.push_back(airThick); lEle.push_back("Air"); + lThick.push_back(pcbThick); lEle.push_back("PCB"); + lThick.push_back(1.9*mm); lEle.push_back("Air"); + lThick.push_back(1*mm); lEle.push_back("Cu"); + lThick.push_back(1*mm); lEle.push_back("Air"); + lThick.push_back(fhSSteelThick); lEle.push_back("SSteel"); + lThick.push_back(6*mm); lEle.push_back("Cu"); + lThick.push_back(1*mm); lEle.push_back("SSteel"); + lThick.push_back(0.1*mm); lEle.push_back("Si"); + lThick.push_back(0.1*mm); lEle.push_back("Si"); + lThick.push_back(0.1*mm); lEle.push_back("Si"); + do{ m_caloStruct.push_back( SamplingSection(lThick,lEle) ); - } - m_minEta.push_back(getEtaFromRZ(1325,3969.7));m_maxEta.push_back(m_maxEta0); - m_minEta.push_back(getEtaFromRZ(1325,4020.6));m_maxEta.push_back(m_maxEta0); - m_minEta.push_back(getEtaFromRZ(1225,4071.5));m_maxEta.push_back(m_maxEta0); - - //CE-H layers 13-24 - lThick[6] = 68*mm; - for(unsigned i=0; i<12; i++) { + curIdx=m_caloStruct.size()-1; + rLimit=1325; + if(Total_thick+m_z0pos>=4071.5) rLimit=1225; + m_minEta.push_back(getEtaFromRZ(rLimit,Total_thick+m_z0pos)); m_maxEta.push_back(m_maxEta0); + Total_thick += m_caloStruct[curIdx].getTotalThick(); + nmixedSiFH++; + }while(Total_thick<=lastFH_z0pos-m_z0pos); + cout << "Placed " << nmixedSiFH << " Si layers for FH" << endl + << "Last FH layer @ z=" << Total_thick+m_z0pos + << " covers [" << m_minEta[curIdx] << "," << m_maxEta[curIdx] << "] in eta" + << endl; + + //CE-H layers (13-24 in the TDR) + int nbhSiLayers(0); + lThick[6] = bhSSteelThick; + do{ m_caloStruct.push_back( SamplingSection(lThick,lEle) ); - } - m_minEta.push_back(getEtaFromRZ(1110,4122.4));m_maxEta.push_back(m_maxEta0); - m_minEta.push_back(getEtaFromRZ(1050,4206.3));m_maxEta.push_back(m_maxEta0); - m_minEta.push_back(getEtaFromRZ(950,4290.2));m_maxEta.push_back(m_maxEta0); - - m_minEta.push_back(getEtaFromRZ(900,4374.1));m_maxEta.push_back(m_maxEta0); - m_minEta.push_back(getEtaFromRZ(900,4458));m_maxEta.push_back(m_maxEta0); - m_minEta.push_back(getEtaFromRZ(900,4541.9));m_maxEta.push_back(m_maxEta0); - m_minEta.push_back(getEtaFromRZ(900,4625.8));m_maxEta.push_back(m_maxEta0); - m_minEta.push_back(getEtaFromRZ(900,4709.7));m_maxEta.push_back(m_maxEta0); - m_minEta.push_back(getEtaFromRZ(900,4793.6));m_maxEta.push_back(m_maxEta0); - m_minEta.push_back(getEtaFromRZ(900,4877.5));m_maxEta.push_back(m_maxEta0); - m_minEta.push_back(getEtaFromRZ(900,4961.4));m_maxEta.push_back(m_maxEta0); - m_minEta.push_back(getEtaFromRZ(900,5045.3));m_maxEta.push_back(m_maxEta0); - - - //end of last layer + curIdx=m_caloStruct.size()-1; + rLimit=1110; + if(Total_thick+m_z0pos>=4206.3) rLimit=1050; + if(Total_thick+m_z0pos>=4290.2) rLimit=950; + if(Total_thick+m_z0pos>=4374.1) rLimit=900; + m_minEta.push_back(getEtaFromRZ(rLimit,Total_thick+m_z0pos)); m_maxEta.push_back(m_maxEta0); + Total_thick += m_caloStruct[curIdx].getTotalThick(); + nbhSiLayers++; + }while(Total_thick<=lastBH_z0pos-m_z0pos); + cout << "Placed " << nbhSiLayers << " Si layers for BH" << endl + << "Last BH layer @ z=" << Total_thick+m_z0pos + << " covers [" << m_minEta[curIdx] << "," << m_maxEta[curIdx] << "] in eta" + << endl; + nbhLayers_=nbhSiLayers; + + //end of last layer + back disk lThick.clear(); lEle.clear(); - lThick.push_back(pcbThick);lEle.push_back("PCB"); - lThick.push_back(airThick);lEle.push_back("Air"); - lThick.push_back(pcbThick);lEle.push_back("PCB"); - lThick.push_back(1.9*mm);lEle.push_back("Air"); - lThick.push_back(1*mm);lEle.push_back("Cu"); - lThick.push_back(1*mm);lEle.push_back("Air"); - //back disk - lThick.push_back(93.9*mm);lEle.push_back("SSteel"); + lThick.push_back(pcbThick); lEle.push_back("PCB"); + lThick.push_back(airThick); lEle.push_back("Air"); + lThick.push_back(pcbThick); lEle.push_back("PCB"); + lThick.push_back(1.9*mm); lEle.push_back("Air"); + lThick.push_back(1*mm); lEle.push_back("Cu"); + lThick.push_back(1*mm); lEle.push_back("Air"); + lThick.push_back(93.9*mm); lEle.push_back("SSteel"); m_caloStruct.push_back( SamplingSection(lThick,lEle) ); - m_minEta.push_back(m_minEta0);m_maxEta.push_back(m_maxEta0); + m_minEta.push_back(m_minEta0); m_maxEta.push_back(m_maxEta0); + curIdx=m_caloStruct.size()-1; + Total_thick += m_caloStruct[curIdx].getTotalThick(); + + cout << "Finished Si section with a total of " << nbhSiLayers+nmixedSiFH+npureSi << " layers " + << "ending at z=" << Total_thick+m_z0pos << endl; } else { G4double airThick = 2*mm; @@ -901,64 +951,106 @@ void DetectorConstruction::buildHGCALBHE(const unsigned aVersion){ std::vector lThick; std::vector lEle; + std::vector phiSegmentationList={TMath::Pi()*2./360.,TMath::Pi()*2./288.}; + SetPhiSectorSegmentation(phiSegmentationList); + if (aVersion==8){ + SetFirstBHCAL2Layer(57); firstScintlayer_ = m_caloStruct.size(); G4double airThick = 1.5*mm; G4double pcbThick = 1.6*mm; - //back of layer 8+layer9 scint. + G4double fhSSteelThick = 35*mm; + G4double bhSSteelThick = 68*mm; + G4double m_z0pos(2980); + G4double lastFH_z0pos(4071.53); + if(version_==v_HGCAL_v80) { + fhSSteelThick = 53*mm; + bhSSteelThick = 53*mm; + SetFirstBHCAL2Layer(57); + } + if(version_==v_HGCAL_v81) { + fhSSteelThick = 60*mm; + bhSSteelThick = 97*mm; + SetFirstBHCAL2Layer(49); + } + if(version_==v_HGCAL_v82) { + fhSSteelThick = 76*mm; + bhSSteelThick = 76*mm; + SetFirstBHCAL2Layer(49); + } + if(version_==v_HGCAL_v83) { + fhSSteelThick = 25.3*mm; + bhSSteelThick = 54.9*mm; + SetFirstBHCAL2Layer(62); + } + + size_t curIdx(m_caloStruct.size()-1); + G4double Total_thick(0.); + for(size_t i=0; i= v_HGCAL_v80 && version_ <= v_HGCAL_v85)) m_z0pos = 2980; else if(version_ == v_HGCALBE_v8) m_z0pos=3920.7; if (doHF_){ m_z0HF=11100; @@ -1509,8 +1601,29 @@ void DetectorConstruction::buildSectorStack(const unsigned sectorNum, } }//loop on layers std::cout << " Z positions of sensitive layers: " << std::endl; + + std::cout << "****************** DetectorConstruction *************************" << endl; + std::cout << "std::vector sensZ={"; + for (size_t i=0; i etaMin={"; + for (size_t i=0; i etaMax={"; + for (size_t i=0; iGetUserDetectorConstruction())->GetMinEta(); double etamax = ((DetectorConstruction*)G4RunManager::GetRunManager()->GetUserDetectorConstruction())->GetMaxEta(); - geomConv_->initialiseSquareMap1(etamin,etamax,-1.*TMath::Pi(),TMath::Pi(),0.01745);//eta phi segmentation - geomConv_->initialiseSquareMap2(etamin,etamax,-1.*TMath::Pi(),TMath::Pi(),0.02182);//eta phi segmentation + std::vector phiSegmentationList=((DetectorConstruction*)G4RunManager::GetRunManager()->GetUserDetectorConstruction())->GetPhiSectorSegmentation(); + geomConv_->initialiseSquareMap1(etamin,etamax,-1.*TMath::Pi(),TMath::Pi(),phiSegmentationList[0]);//eta phi segmentation + geomConv_->initialiseSquareMap2(etamin,etamax,-1.*TMath::Pi(),TMath::Pi(),phiSegmentationList[1]); + //for the TDR geometry this is the first layer to use a coarser eta-phi segmentation + SetFirstBHCAL2Layer(((DetectorConstruction*)G4RunManager::GetRunManager()->GetUserDetectorConstruction())->GetFirstBHCAL2Layer()); + std::cout << "[EventAction] first BHCAL2 layer will be set to " << GetFirstBHCAL2Layer() << std::endl + << " phi segmentation in BHCAL1 set to " << phiSegmentationList[0] << std::endl + << " phi segmentation in BHCAL2 set to " << phiSegmentationList[1] << std::endl; tree_=new TTree("HGCSSTree","HGC Standalone simulation tree"); tree_->Branch("HGCSSEvent","HGCSSEvent",&event_); @@ -168,7 +174,7 @@ void EventAction::EndOfEventAction(const G4Event* g4evt) for (unsigned iSiHit(0); iSiHit<(*detector_)[i].getSiHitVec(idx).size();++iSiHit){ G4SiHit lSiHit = (*detector_)[i].getSiHitVec(idx)[iSiHit]; - HGCSSSimHit lHit(lSiHit,idx,is_scint? (i<57?geomConv_->squareMap1():geomConv_->squareMap2()): (shape_==4 ?geomConv_->squareMap() : shape_==2?geomConv_->diamondMap():shape_==3?geomConv_->triangleMap():geomConv_->hexagonMap()),CELL_SIZE_X,is_scint?true:false); + HGCSSSimHit lHit(lSiHit,idx,is_scint? (isquareMap1():geomConv_->squareMap2()): (shape_==4 ?geomConv_->squareMap() : shape_==2?geomConv_->diamondMap():shape_==3?geomConv_->triangleMap():geomConv_->hexagonMap()),CELL_SIZE_X,is_scint?true:false); isInserted = lHitMap.insert(std::pair(lHit.cellid(),lHit)); if (!isInserted.second) isInserted.first->second.Add(lSiHit); diff --git a/PFCalEE/userlib/include/HGCSSDetector.hh b/PFCalEE/userlib/include/HGCSSDetector.hh index f8b5c36..184149b 100644 --- a/PFCalEE/userlib/include/HGCSSDetector.hh +++ b/PFCalEE/userlib/include/HGCSSDetector.hh @@ -442,6 +442,84 @@ public: etaBoundary_[67] = 2.40832; etaBoundary_[68] = 2.42483; + + for(size_t i=0; i> %s\n'%(g4log)) scriptFile.write('ls * >> %s\n'%(g4log)) if len(opt.eos)>0: #scriptFile.write('grep "alias eos=" /afs/cern.ch/project/eos/installation/cms/etc/setup.sh | sed "s/alias /export my/" > eosenv.sh\n') #scriptFile.write('source eosenv.sh\n') scriptFile.write('eos mkdir -p %s\n'%eosDir) - scriptFile.write('eos cp $localdir/DigiPFcal.root %s/Digi%s_%s%s.root\n'%(eosDir,suffix,label,outTag)) + scriptFile.write('eos cp $localdir/DigiPFcal.root %s\n'%digiFile) scriptFile.write('if (( "$?" != "0" )); then\n') scriptFile.write('echo " --- Problem with copy of file DigiPFcal.root to EOS. Keeping locally." >> %s\n'%(g4log)) scriptFile.write('else\n') - scriptFile.write('eossize=`eos ls -l %s/Digi%s_%s%s.root | awk \'{print $5}\'`\n'%(eosDir,suffix,label,outTag)) + scriptFile.write('eossize=`eos ls -l %s | awk \'{print $5}\'`\n'%digiFile) scriptFile.write('localsize=`ls -l DigiPFcal.root | awk \'{print $5}\'`\n') scriptFile.write('if [ $eossize != $localsize ]; then\n') scriptFile.write('echo " --- Copy of digi file to eos failed. Localsize = $localsize, eossize = $eossize. Keeping locally..." >> %s\n'%(g4log)) scriptFile.write('else\n') scriptFile.write('echo " --- Size check done: Localsize = $localsize, eossize = $eossize" >> %s\n'%(g4log)) - scriptFile.write('echo " --- File DigiPFcal.root successfully copied to EOS: %s/Digi%s_%s%s.root" >> %s\n'%(eosDir,suffix,label,outTag,g4log)) + scriptFile.write('echo " --- File DigiPFcal.root successfully copied to EOS: %s" >> %s\n'%(digiFile,g4log)) scriptFile.write('rm DigiPFcal.root\n') scriptFile.write('fi\n') scriptFile.write('fi\n') @@ -274,5 +306,9 @@ if opt.nosubmit : os.system('echo bsub -q %s %s/runDigiJob%s.sh'%(myqueue,outDir,suffix)) else: os.system("bsub -q %s \'%s/runDigiJob%s.sh\'"%(myqueue,outDir,suffix)) - +missingFiles=set(missingFiles) +if len(missingFiles)>0: + print 'The following files are missing in action, jobs were not submitted' + for f in missingFiles: + print f diff --git a/README.md b/README.md deleted file mode 100644 index 949fc41..0000000 --- a/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# PFCal: standalone simulation studies - -Check https://twiki.cern.ch/twiki/bin/view/CMS/PFForwardCalorimeterStudies