Skip to content
Snippets Groups Projects
Commit ca09fad9 authored by Miguel Arratia's avatar Miguel Arratia
Browse files

My branch

parent e39baba0
Branches
Tags
1 merge request!95My branch
...@@ -19,7 +19,7 @@ if [[ ! -n "${JUGGLER_N_EVENTS}" ]] ; then ...@@ -19,7 +19,7 @@ if [[ ! -n "${JUGGLER_N_EVENTS}" ]] ; then
fi fi
if [[ ! -n "${CB_EMCAL_SAMP_FRAC}" ]] ; then if [[ ! -n "${CB_EMCAL_SAMP_FRAC}" ]] ; then
export CB_EMCAL_SAMP_FRAC=0.014 export CB_EMCAL_SAMP_FRAC=1.0
fi fi
export JUGGLER_FILE_NAME_TAG="barrel_clusters" export JUGGLER_FILE_NAME_TAG="barrel_clusters"
...@@ -47,7 +47,7 @@ if [[ "$?" -ne "0" ]] ; then ...@@ -47,7 +47,7 @@ if [[ "$?" -ne "0" ]] ; then
fi fi
# Need to figure out how to pass file name to juggler from the commandline # Need to figure out how to pass file name to juggler from the commandline
gaudirun.py benchmarks/clustering/options/fullcalo_clustering.py gaudirun.py benchmarks/clustering/options/hcal_clustering.py
if [[ "$?" -ne "0" ]] ; then if [[ "$?" -ne "0" ]] ; then
echo "ERROR running juggler" echo "ERROR running juggler"
exit 1 exit 1
......
from Gaudi.Configuration import *
import os
from GaudiKernel.DataObjectHandleBase import DataObjectHandleBase
from Configurables import ApplicationMgr, EICDataSvc, PodioOutput, GeoSvc
from GaudiKernel import SystemOfUnits as units
detector_name = "topside"
if "JUGGLER_DETECTOR" in os.environ :
detector_name = str(os.environ["JUGGLER_DETECTOR"])
if "JUGGLER_DETECTOR_PATH" in os.environ :
detector_name = str(os.environ["JUGGLER_DETECTOR_PATH"]) + "/" + detector_name
# get sampling fraction from system environment variable, 1.0 by default
sf = 1.0
if "CB_EMCAL_SAMP_FRAC" in os.environ :
sf = str(os.environ["CB_EMCAL_SAMP_FRAC"])
# todo add checks
input_sim_file = str(os.environ["JUGGLER_SIM_FILE"])
output_rec_file = str(os.environ["JUGGLER_REC_FILE"])
n_events = str(os.environ["JUGGLER_N_EVENTS"])
geo_service = GeoSvc("GeoSvc", detectors=["{}.xml".format(detector_name)])
podioevent = EICDataSvc("EventDataSvc", inputs=[input_sim_file])
from Configurables import PodioInput
from Configurables import Jug__Base__InputCopier_dd4pod__Geant4ParticleCollection_dd4pod__Geant4ParticleCollection_ as MCCopier
from Configurables import Jug__Base__InputCopier_dd4pod__CalorimeterHitCollection_dd4pod__CalorimeterHitCollection_ as CalCopier
# from Configurables import Jug__Digi__HadronicCalDigi as HadCalorimeterDigi
from Configurables import Jug__Digi__CalorimeterHitDigi as HadCalorimeterDigi
from Configurables import Jug__Digi__EMCalorimeterDigi as EMCalorimeterDigi
from Configurables import Jug__Digi__CrystalEndcapsDigi as CrystalEndcapsDigi
from Configurables import Jug__Reco__CrystalEndcapsReco as CrystalEndcapsReco
from Configurables import Jug__Reco__EMCalReconstruction as EMCalReconstruction
# from Configurables import Jug__Reco__HCalReconstruction as HCalReconstruction
from Configurables import Jug__Reco__EcalTungstenSamplingReco as HCalReconstruction
# from Configurables import Jug__Reco__SimpleClustering as SimpleClustering
from Configurables import Jug__Reco__TopologicalCellCluster as TopoCluster
from Configurables import Jug__Reco__CalorimeterIslandCluster as IslandCluster
from Configurables import Jug__Reco__ClusterRecoCoG as RecoCoG
podioinput = PodioInput("PodioReader", collections=["mcparticles","HcalBarrelHits"], OutputLevel=DEBUG)
## copiers to get around input --> output copy bug. Note the "2" appended to the output collection.
copier = MCCopier("MCCopier",
inputCollection="mcparticles",
outputCollection="mcparticles2")
##raw hits
calcopier = CalCopier("CalCopier",
inputCollection="HcalBarrelHits",
outputCollection="HcalBarrelHits2")
#digitized hits
hcaldigi = HadCalorimeterDigi("hcal_barrel_digi",
inputHitCollection="HcalBarrelHits",
outputHitCollection="RawHcalBarrelHits",
inputEnergyUnit=units.GeV,
inputTimeUnit=units.ns,
energyResolutions=[0.07, 0., 0.],
dynamicRangeADC=2.*units.GeV,
capacityADC=32768,
pedestalMean=400,
pedestalSigma=10,
OutputLevel=DEBUG
)
#reconstructed hits
hcal_reco = HCalReconstruction("hcal_reco",
inputHitCollection="RawHcalBarrelHits",
outputHitCollection="RecHcalBarrelHits",
dynamicRangeADC=2.*units.GeV,
capacityADC=32768,
pedestalMean=400,
pedestalSigma=10,
thresholdFactor=5.0,
OutputLevel=DEBUG)
#clusters
#hcal_barrel_cluster = TopoCluster("hcal_barrel_cluster",
# inputHitCollection="RecHcalBarrelHits",
# outputClusterCollection="HcalBarrelClusters",
# adjLayerDiff=2,
# localRanges=[20.*units.mm, 20.*units.mm], # local x, y for hits at the same layer
# adjLayerRanges=[0.02, 0.02], # eta, phi for different layers, the same sector
# adjSectorDist=5.*units.cm, # different sector
# minClusterCenterEdep=10.*units.MeV,
# readoutClass="HcalBarrelHits", # readout class name to get layer/sector id
# layerField="layer",
# sectorField="module",
# OutputLevel=DEBUG
# )
hcal_barrel_cluster = IslandCluster("hcal_barrel_cluster",
inputHitCollection="RecHcalBarrelHits",
outputClusterCollection="HcalBarrelClusters",
minClusterCenterEdep=30*units.MeV,
groupRange=2.0,
OutputLevel=DEBUG)
# finalizing clustering (center-of-gravity step)
hcal_barrel_clusterreco = RecoCoG("hcal_barrel_clusterreco",
clusterCollection="HcalBarrelClusters",
logWeightBase=6.2,
samplingFraction=sf,
OutputLevel=DEBUG)
out = PodioOutput("out", filename=output_rec_file)
out.outputCommands = ["keep *"]
ApplicationMgr(
TopAlg = [podioinput, copier, calcopier,
hcaldigi,
hcal_reco,
hcal_barrel_cluster,
hcal_barrel_clusterreco,
out],
EvtSel = 'NONE',
EvtMax = n_events,
ExtSvc = [podioevent],
OutputLevel=DEBUG
)
#include "HepMC3/GenEvent.h"
#include "HepMC3/ReaderAscii.h"
#include "HepMC3/WriterAscii.h"
#include "HepMC3/Print.h"
#include <iostream>
#include<random>
#include<cmath>
#include <math.h>
#include <TMath.h>
using namespace HepMC3;
/** Generate electrons in the central region.
* This is for testing detectors in the "barrel" region.
*/
void gen_central_pions(int n_events = 100,
const char* out_fname = "central_pions.hepmc")
{
double cos_theta_min = std::cos( 60.0*(M_PI/180.0));
double cos_theta_max = std::cos(120.0*(M_PI/180.0));
WriterAscii hepmc_output(out_fname);
int events_parsed = 0;
GenEvent evt(Units::GEV, Units::MM);
// Random number generator
TRandom *r1 = new TRandom();
for (events_parsed = 0; events_parsed < n_events; events_parsed++) {
// FourVector(px,py,pz,e,pdgid,status)
// type 4 is beam
// pdgid 11 - electron
// pdgid 111 - pi0
// pdgid 2212 - proton
GenParticlePtr p1 =
std::make_shared<GenParticle>(FourVector(0.0, 0.0, 10.0, 10.0), 11, 4);
GenParticlePtr p2 = std::make_shared<GenParticle>(
FourVector(0.0, 0.0, 0.0, 0.938), 2212, 4);
// Define momentum
Double_t p = r1->Uniform(100.0, 100.1);
Double_t phi = r1->Uniform(0.0, 0.25 * M_PI);
Double_t costh = r1->Uniform(cos_theta_min, cos_theta_max);
Double_t th = std::acos(costh);
Double_t px = p * std::cos(phi) * std::sin(th);
Double_t py = p * std::sin(phi) * std::sin(th);
Double_t pz = p * std::cos(th);
// Generates random vectors, uniformly distributed over the surface of a
// sphere of given radius, in this case momentum.
// r1->Sphere(px, py, pz, p);
std::cout << std::sqrt(px*px + py*py + pz*pz) - p << " is zero? \n";
// type 1 is final state
// pdgid 11 - electron 0.510 MeV/c^2
GenParticlePtr p3 = std::make_shared<GenParticle>(FourVector(px, py, pz, sqrt(p * p + (0.139570 * 0.139570))), 211, 1);
GenVertexPtr v1 = std::make_shared<GenVertex>();
v1->add_particle_in(p1);
v1->add_particle_in(p2);
v1->add_particle_out(p3);
evt.add_vertex(v1);
if (events_parsed == 0) {
std::cout << "First event: " << std::endl;
Print::listing(evt);
}
hepmc_output.write_event(evt);
if (events_parsed % 10000 == 0) {
std::cout << "Event: " << events_parsed << std::endl;
}
evt.clear();
}
hepmc_output.close();
std::cout << "Events parsed and written: " << events_parsed << std::endl;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment