Working Plan (Please update it)
This page is now obsolete, please use: GlobeBoard and GlobeDoc
Still some of the things here must still be considered and moved to the new pages
Matteo: 12:18 CERN time
I fixed the parameter tree, the jet tracks and vertex tracks. I committed the code in San Diego and tagged it as V00-00-06. Now I'm going to run on a larger sample and try to read back the ntuple to check if it is filled correctly.
Sean: 14:58 SD time
I put the latest version of the code into the
UCSD CVS. I tagged it as V00-00-05, but it should be the same as the head. It seems Matteo already made the super clusters and basic clusters the way we decided in the meeting.
The super clusters are set up like this:
sc_varname[] is the array with hybrid in the barrel and island in the endcap.
There is a flag
sc_barrel[] = 1 means a hybrid barrel supercluster
sc_barrel[] = 0 means an island endcap supercluster
thene there is a separate array called sc_islbar_varname[] which is all of the island barrel superclusters.
I included the counts
sc_hybrid_n
sc_islend_n
sc_islbar_n
with sc_n = sc_hybrid_n + sc_islend_n
bc_hybrid_n
bc_islend_n
bc_islend_n
with bc_n = bc_hybrid_n + bc_islend_n + bc_islbar_n
Matteo: 21.15 CERN Time
I committed (but not tagged) Muons and Electrons: fixed momentum (Elizabeth you were right), added ID cut, added tkind to CTF tracks, added Stand Alone Muons (not in
GlobeAnalyzer? yet.
At home I'll take a look at the second tree to store the parameters.
Decision about SC and BC: I think
SC - one collection Hybrid Barrel + Island Endcap
- one collection with Island Barrel
sc_hybrid_n
sc_island_n
+ sc_type 1,2 + 3???
BC - only one collection Island Barrel, Island Endcap, Hybrid Barrel
bc_islbar_n
bc_islend_n
bc_hybbar_n
+ bc_type 3,2,1
Current CVS tag: V00-00-04
All variables in the root tree in lower case
The number of objects are:
gen_n
stk_n
svtx_n
mu_n
el_n
pho_n
sc_n
bc_n
jet_n
genjet_n
ct_n
hc_n
tk_n
vtx_n
...
Currently, Limits.h
#define VERSION 1
#define MAX_PARAMETERS 100
#define MAX_GENERATOR 10000
#define MAX_SIMTRACKS 500
#define MAX_SIMVERTICES 500
#define MAX_MUONS 100
#define MAX_ELECTRONS 100
#define MAX_PHOTONS 100
#define MAX_CONVERTEDPHOTONS 500
#define MAX_CONVERSIONS_PER_PHOTON 30
#define MAX_SUPERCLUSTERS 100
#define MAX_SUPERCLUSTER_BASICCLUSTERS 20
#define MAX_BASICCLUSTERS 500
#define MAX_JETS 100
#define MAX_JET_TOWERS 100
#define MAX_JET_TRACKS 100
#define MAX_GENJETS 100
#define MAX_VERTICES 100
#define MAX_VERTEX_TRACKS 100
#define MAX_CALOTOWERS 1000
#define MAX_HCALHITS 1000 // was 6912
#define MAX_L1 4
#define MAX_TRACKS 200
BLOCK GENERAL
Int_t event;
Int_t run;
Float_t pthat;
Float_t weight;
ADD Something like MC event type? For soups and so on, such as:
Int_t typ_ev;
BLOCK LEVEL 1
Ok for me
Muons sometimes have 5 I don't know why
Int_t l1emiso_n;
Int_t l1emnoniso_n;
Int_t l1cenjet_n;
Int_t l1forjet_n;
Int_t l1taujet_n;
Int_t l1mu_n;
Float_t l1emiso_et[MAX_L1]; //[l1emiso_n]
Float_t l1emnoniso_et[MAX_L1]; //[l1emnoniso_n]
Float_t l1cenjet_et[MAX_L1]; //[l1cenjet_n]
Float_t l1forjet_et[MAX_L1]; //[l1forjet_n]
Float_t l1taujet_et[MAX_L1]; //[l1taujet_n]
Float_t l1met_et;
Float_t l1mu_et[MAX_L1]; //[l1mu_n]
Float_t l1emiso_eta[MAX_L1]; //[l1emiso_n]
Float_t l1emnoniso_eta[MAX_L1]; //[l1emnoniso_n]
Float_t l1cenjet_eta[MAX_L1]; //[l1cenjet_n]
Float_t l1forjet_eta[MAX_L1]; //[l1forjet_n]
Float_t l1taujet_eta[MAX_L1]; //[l1taujet_n]
Float_t l1mu_eta[MAX_L1]; //[l1mu_n]
Float_t l1emiso_phi[MAX_L1]; //[l1emiso_n]
Float_t l1emnoniso_phi[MAX_L1]; //[l1emnoniso_n]
Float_t l1cenjet_phi[MAX_L1]; //[l1cenjet_n]
Float_t l1forjet_phi[MAX_L1]; //[l1forjet_n]
Float_t l1taujet_phi[MAX_L1]; //[l1taujet_n]
Float_t l1met_phi;
Float_t l1mu_phi[MAX_L1]; //[l1mu_n]
BLOCK GENERATOR
Int_t gen_n;
TClonesArray? *gen_p4;
Int_t gen_status[MAX_GENERATOR]; //[gen_n]
Int_t gen_pdgid[MAX_GENERATOR]; //[gen_n]
Int_t gen_mother[MAX_GENERATOR]; //[gen_n]
BLOCK GENJETS
Int_t genjet_it5_n;
TClonesArray? *genjet_it5_p4;
Float_t genjet_it5_em[MAX_GENJETS]; //[genjet_it5_n]
Float_t genjet_it5_had[MAX_GENJETS]; //[genjet_it5_n]
Float_t genjet_it5_inv[MAX_GENJETS]; //[genjet_it5_n]
Float_t genjet_it5_aux[MAX_GENJETS]; //[genjet_it5_n]
Int_t genjet_it7_n;
TClonesArray? *genjet_it7_p4;
Float_t genjet_it7_em[MAX_GENJETS]; //[genjet_it7_n]
Float_t genjet_it7_had[MAX_GENJETS]; //[genjet_it7_n]
Float_t genjet_it7_inv[MAX_GENJETS]; //[genjet_it7_n]
Float_t genjet_it7_aux[MAX_GENJETS]; //[genjet_it7_n]
Int_t genjet_mid_n;
TClonesArray? *genjet_mid_p4;
Float_t genjet_mid_em[MAX_GENJETS]; //[genjet_mid_n]
Float_t genjet_mid_had[MAX_GENJETS]; //[genjet_mid_n]
Float_t genjet_mid_inv[MAX_GENJETS]; //[genjet_mid_n]
Float_t genjet_mid_aux[MAX_GENJETS]; //[genjet_mid_n]
BLOCK SIMTRACKS
Put a sensible selection (electrons + photons in the tracker) maybe see what is does in CMSSW or add something else
Int_t stk_n;
TClonesArray? *stk_p4;
Int_t stk_genId[MAX_SIMTRACKS]; //[stk_n]
Int_t stk_type[MAX_SIMTRACKS]; //[stk_n]
Int_t stk_index[MAX_SIMTRACKS]; //[stk_n]
BLOCK SIMVERTICES
(primary vertex + vertices electrons + photons in the tracker) maybe see what is does in CMSSW or add something else
Int_t svtx_n;
TClonesArray? *svtx_p3;
Int_t svtx_mothIndex[MAX_SIMVERTICES]; //[svtx_n]
BLOCK TRACKS
Int_t tk_n;
TClonesArray? *tk_p4;
Int_t tk_nhits[MAX_TRACKS]; //[tk_n]
Int_t tk_charge[MAX_TRACKS]; //[tk_n]
Float_t tk_dof[MAX_TRACKS]; //[tk_n]
Int_t tk_nlosthit[MAX_TRACKS]; //[tk_n]
Float_t tk_d0[MAX_TRACKS]; //[tk_n]
Float_t tk_chi2[MAX_TRACKS]; //[tk_n]
Float_t tk_dz[MAX_TRACKS]; //[tk_n]
Float_t tk_qoverperr[MAX_TRACKS]; //[tk_n]
Float_t tk_d0err[MAX_TRACKS]; //[tk_n]
Float_t tk_dzerr[MAX_TRACKS]; //[tk_n]
BLOCK ECAL CLUSTERS
Here we must decide if splitting them or not
Maybe we can split the basicclusters or put a type
The type should be indicated together with the indices
Int_t islsc_n;
TClonesArray? *islsc_p4;
Float_t islsc_raw[MAX_SUPERCLUSTERS]; //[islsc_n]
Float_t islsc_pre[MAX_SUPERCLUSTERS]; //[islsc_n]
Int_t islsc_nbc[MAX_SUPERCLUSTERS]; //[islsc_n]
Int_t islsc_seed[MAX_SUPERCLUSTERS]; //[islsc_n]
Int_t islsc_bcseedind[MAX_SUPERCLUSTERS]; //[islsc_n]
Int_t islsc_bcind[MAX_SUPERCLUSTERS][MAX_SUPERCLUSTER_BASICCLUSTERS]; //[islsc_n]
Int_t sc_n;
TClonesArray? *sc_p4;
Float_t sc_raw[MAX_SUPERCLUSTERS]; //[sc_n]
Float_t sc_pre[MAX_SUPERCLUSTERS]; //[sc_n]
Int_t sc_nbc[MAX_SUPERCLUSTERS]; //[sc_n]
Int_t sc_seed[MAX_SUPERCLUSTERS]; //[sc_n]
Int_t sc_bcseedind[MAX_SUPERCLUSTERS]; //[sc_n]
Int_t sc_bcind[MAX_SUPERCLUSTERS][MAX_SUPERCLUSTER_BASICCLUSTERS]; //[sc_n]
Int_t bc_n;
TClonesArray? *bc_p4;
Int_t bc_nhits[MAX_BASICCLUSTERS]; //[bc_n]
Float_t bc_s1[MAX_BASICCLUSTERS]; //[bc_n]
Float_t bc_s9[MAX_BASICCLUSTERS]; //[bc_n]
Float_t bc_s25[MAX_BASICCLUSTERS]; //[bc_n]
Float_t bc_spp[MAX_BASICCLUSTERS]; //[bc_n]
Float_t bc_see[MAX_BASICCLUSTERS]; //[bc_n]
Float_t bc_sep[MAX_BASICCLUSTERS]; //[bc_n]
BLOCK JETS:
Int_t jet_it5_n;
TClonesArray? *jet_it5_p4;
Float_t jet_it5_emfrac[MAX_JETS]; //[jet_it5_n]
Float_t jet_it5_hadfrac[MAX_JETS]; //[jet_it5_n]
Int_t jet_it5_ntk[MAX_JETS]; //[jet_it5_n]
Int_t jet_it5_tkind[MAX_JETS][MAX_JET_TRACKS]; //[jet_it5_n]
Int_t jet_it5_ncalotw[MAX_JETS]; //[jet_it5_n]
Int_t jet_it5_calotwind[MAX_JETS][MAX_JET_TOWERS]; //[jet_it5_n]
Int_t jet_it7_n;
TClonesArray? *jet_it7_p4;
Float_t jet_it7_emfrac[MAX_JETS]; //[jet_it7_n]
Float_t jet_it7_hadfrac[MAX_JETS]; //[jet_it7_n]
Int_t jet_it7_ntk[MAX_JETS]; //[jet_it7_n]
Int_t jet_it7_tkind[MAX_JETS][MAX_JET_TRACKS]; //[jet_it7_n]
Int_t jet_it7_ncalotw[MAX_JETS]; //[jet_it7_n]
Int_t jet_it7_calotwind[MAX_JETS][MAX_JET_TOWERS]; //[jet_it7_n]
Int_t jet_mid_n;
TClonesArray? *jet_mid_p4;
Float_t jet_mid_emfrac[MAX_JETS]; //[jet_mid_n]
Float_t jet_mid_hadfrac[MAX_JETS]; //[jet_mid_n]
Int_t jet_mid_ntk[MAX_JETS]; //[jet_mid_n]
Int_t jet_mid_tkind[MAX_JETS][MAX_JET_TRACKS]; //[jet_mid_n]
Int_t jet_mid_ncalotw[MAX_JETS]; //[jet_mid_n]
Int_t jet_mid_calotwind[MAX_JETS][MAX_JET_TOWERS]; //[jet_mid_n]
BLOCK MET:
Perhaps I would add here HT + some corrected METs if we want
Float_t met_met;
Float_t met_phi;
BLOCK VERTEX
Int_t vtx_std_n;
TClonesArray? *vtx_std_xyz;
TClonesArray? *vtx_std_dxdydz;
Int_t vtx_std_ntks[MAX_VERTICES]; //[vtx_std_n]
Int_t vtx_std_tkind[MAX_VERTICES][MAX_VERTEX_TRACKS]; //[vtx_std_n]
Int_t vtx_pix_n;
TClonesArray? *vtx_pix_xyz;
TClonesArray? *vtx_pix_dxdydz;
Int_t vtx_pix_ntks[MAX_VERTICES]; //[vtx_pix_n]
Int_t vtx_pix_tkind[MAX_VERTICES][MAX_VERTEX_TRACKS]; //[vtx_pix_n]
ADD: tksumpt_pt vector sum of of tracks pt
ADD: tksumpt_phi its phi (useful for H->gamgam)
ADD: tksummodpt scalar sum of tracks pt
BLOCK CALOTOWERS
Int_t ct_n;
TClonesArray? *ct_p4;
Float_t ct_emEnergy[MAX_CALOTOWERS]; //[ct_n]
Float_t ct_hadEnergy[MAX_CALOTOWERS]; //[ct_n]
Float_t ct_outerEnergy[MAX_CALOTOWERS]; //[ct_n]
Int_t ct_emL1[MAX_CALOTOWERS]; //[ct_n]
Int_t ct_hadL1[MAX_CALOTOWERS]; //[ct_n]
Int_t ct_size[MAX_CALOTOWERS]; //[ct_n]
BLOCK HCAL
Check what the ET cut should be for the different parts
TClonesArray? *hc_p4;
Int_t hc_n;
Int_t hc_type[MAX_HCALHITS]; //[hc_n]
BLOCK PHOTON AND CONVERTED PHOTON
Int_t pho_n;
TClonesArray? *pho_p4;
Int_t pho_islscind[MAX_PHOTONS]; //[pho_n]
Float_t pho_islscdr[MAX_PHOTONS]; //[pho_n]
Int_t pho_barrel[MAX_PHOTONS]; //[pho_n]
Int_t pho_scind[MAX_PHOTONS]; //[pho_n]
Float_t pho_s1[MAX_PHOTONS]; //[pho_n]
Float_t pho_s9[MAX_PHOTONS]; //[pho_n]
Float_t pho_s25[MAX_PHOTONS]; //[pho_n]
Int_t pho_nconv[MAX_PHOTONS]; //[pho_n]
Int_t pho_convind[MAX_PHOTONS][30]; //[pho_n]
Int_t cpho_n;
TClonesArray? *cpho_vtxp4;
TClonesArray? *cpho_vtx;
TClonesArray? *cpho_tk1p3;
TClonesArray? *cpho_tk2p3;
Int_t cpho_ntracks[MAX_CONVERTEDPHOTONS]; //[cpho_n]
Int_t cpho_phoind[MAX_CONVERTEDPHOTONS]; //[cpho_n]
Int_t cpho_scind[MAX_CONVERTEDPHOTONS]; //[cpho_n]
Float_t cpho_trk_d0[MAX_CONVERTEDPHOTONS][2]; //[cpho_n]
Int_t cpho_trk_nhits[MAX_CONVERTEDPHOTONS][2]; //[cpho_n]
Float_t cpho_trk_chi2perdof[MAX_CONVERTEDPHOTONS][2]; //[cpho_n]
Float_t cpho_trk_dz[MAX_CONVERTEDPHOTONS][2]; //[cpho_n]
Float_t cpho_vtx_x[MAX_CONVERTEDPHOTONS]; //[cpho_n]
Float_t cpho_vtx_y[MAX_CONVERTEDPHOTONS]; //[cpho_n]
Float_t cpho_vtx_z[MAX_CONVERTEDPHOTONS]; //[cpho_n]
Float_t cpho_vtx_r[MAX_CONVERTEDPHOTONS]; //[cpho_n]
Float_t cpho_pairsep[MAX_CONVERTEDPHOTONS]; //[cpho_n]
Float_t cpho_pairptoveretsc[MAX_CONVERTEDPHOTONS]; //[cpho_n]
Float_t cpho_eoverp[MAX_CONVERTEDPHOTONS]; //[cpho_n]
BLOCK ELECTRON
GGE electron producer must be added in the path
Int_t el_std_n;
TClonesArray? *el_std_p4;
Int_t el_std_crack[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_eopin[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_eopout[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_pout[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_pin[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_fbrem[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_hoe[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_detain[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_dphiin[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_detaout[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_dphiout[MAX_ELECTRONS]; //[el_std_n]
Int_t el_std_class[MAX_ELECTRONS]; //[el_std_n]
Int_t el_std_scind[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_z0[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_d0[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_z0err[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_d0err[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_chi2[MAX_ELECTRONS]; //[el_std_n]
Float_t el_std_dof[MAX_ELECTRONS]; //[el_std_n]
Int_t el_std_charge[MAX_ELECTRONS]; //[el_std_n]
Int_t el_std_losthits[MAX_ELECTRONS]; //[el_std_n]
Int_t el_std_validhits[MAX_ELECTRONS]; //[el_std_n]
BLOCK MUONS
Standalone muon still missing (or partly missing)
Int_t mu_global_n;
TClonesArray? *mu_global_p4;
Int_t mu_global_nmatches[MAX_MUONS]; //[mu_global_n]
Float_t mu_global_em[MAX_MUONS]; //[mu_global_n]
Float_t mu_global_had[MAX_MUONS]; //[mu_global_n]
Float_t mu_global_ho[MAX_MUONS]; //[mu_global_n]
Float_t mu_global_emS9[MAX_MUONS]; //[mu_global_n]
Float_t mu_global_hadS9[MAX_MUONS]; //[mu_global_n]
Float_t mu_global_hoS9[MAX_MUONS]; //[mu_global_n]
Float_t mu_global_chi2[MAX_MUONS]; //[mu_global_n]
Float_t mu_global_dof[MAX_MUONS]; //[mu_global_n]
Int_t mu_global_tkind[MAX_MUONS]; //[mu_global_n]
Int_t mu_global_staind[MAX_MUONS]; //[mu_global_n]
Float_t mu_global_z0[MAX_MUONS]; //[mu_global_n]
Float_t mu_global_d0[MAX_MUONS]; //[mu_global_n]
Float_t mu_global_z0err[MAX_MUONS]; //[mu_global_n]
Float_t mu_global_d0err[MAX_MUONS]; //[mu_global_n]
Int_t mu_global_charge[MAX_MUONS]; //[mu_global_n]
Int_t mu_global_losthits[MAX_MUONS]; //[mu_global_n]
Int_t mu_global_validhits[MAX_MUONS]; //[mu_global_n]
Sometimes it has some problems finding the combined track - should be fixed
Int_t mu_tk_n;
TClonesArray? *mu_tk_p4;
Int_t mu_tk_nmatches[MAX_MUONS]; //[mu_tk_n]
Float_t mu_tk_em[MAX_MUONS]; //[mu_tk_n]
Float_t mu_tk_had[MAX_MUONS]; //[mu_tk_n]
Float_t mu_tk_ho[MAX_MUONS]; //[mu_tk_n]
Float_t mu_tk_emS9[MAX_MUONS]; //[mu_tk_n]
Float_t mu_tk_hadS9[MAX_MUONS]; //[mu_tk_n]
Float_t mu_tk_hoS9[MAX_MUONS]; //[mu_tk_n]
Float_t mu_tk_chi2[MAX_MUONS]; //[mu_tk_n]
Float_t mu_tk_dof[MAX_MUONS]; //[mu_tk_n]
Int_t mu_tk_tkind[MAX_MUONS]; //[mu_tk_n]
Int_t mu_tk_staind[MAX_MUONS]; //[mu_tk_n]
Float_t mu_tk_z0[MAX_MUONS]; //[mu_tk_n]
Float_t mu_tk_d0[MAX_MUONS]; //[mu_tk_n]
Float_t mu_tk_z0err[MAX_MUONS]; //[mu_tk_n]
Float_t mu_tk_d0err[MAX_MUONS]; //[mu_tk_n]
Int_t mu_tk_charge[MAX_MUONS]; //[mu_tk_n]
Int_t mu_tk_losthits[MAX_MUONS]; //[mu_tk_n]
Int_t mu_tk_validhits[MAX_MUONS]; //[mu_tk_n]
Elizabeth: 14 Feb 0:23 UCSD
Fixed some bugs, so the head runs without a seg fault (there was a problem in Generator). I didnt make a new tag. There are 3 lines in
GlobeSimTracks? .cc that I marked (near the bottom) that cause a seg fault if I uncomment them. I dont know why, and I am not very useful now. I corrected a bunch of small things that aren't important. Matt L. pointed out that we are using the wrong trackmomemtum for pout, but it is an easy fix and I will do it tomorrow. Sorry I didnt get this working
Matteo: 12 Feb 20.29 CERN time
Fixed a stupid bug in
GlobeEcalClusters? .cc code committed but not tagged. Now looking at Gen Particles.
Use the new tag V00-00-03, one bug was fixed
Marco: 12 Feb 7.00 pm CERN time
I have just put in cvs the latest version:
The tag is: V00-00-02
Please NEVER move tags, I is a waste of time
You should start from that for any new modifications.
There are some known problems/missing things mainly indicated with the word CHECK
There should be also some unknown bugs to be fixed.
Some I already observed are:
the param root tree may not work well, cannot be opened with TBrowser, can it be read by a program?
when you open the events root tree with TBrowser it complains of something
bc_p4 does not look filled properly
staMuon is not filled (I commented it out)
GlobeVertex? has some problems that I commented out
GlobeJets? has the tracks that don't work
Marco: 12 Feb 8.30 pm CERN time
Matteo and I did not completely finish but the main things are done.
Some of the variables of the ecal are not filled yet, such as the index of bc belonging ro sc + some variables are missing
The converted photons and pizero disc are not included, they should be with the photons as we had decided
The simtracks need also the simvertices together and I wrote in the class what I think should be put.
The code is attached to this page, you can put it in cvs if you want.
The collection names for many of the things matteo did are not there yet.
Grep everywhere CHECK and you will see some of the things that still need to be done
......
update from Sean
I just realized I didn't do converted photons. I will make that class first thing in the morning. I put lorentz vectors in instead of energy, et, eta, phi for the hcal hits, ecal clusters, calo towers, & photons. Sim tracks still need work, but I think Ryan will help with that soon.
tag V00-00-00 is now working with the photon and electron indices to superclusters. Also the superclusters are separated by hybrid and island. In the barrel, photons/electrons are matched to island super clusters by a delta-r minimization, and in the endcap by checking that the addresses of the super clusters are the same. Hybrid super clusters are matched by address in the barrel. if there is no match -1 is put in. There is similar matching for indices going the other way (super cluster --> photon/electron).
update Elizabeth I think the seg fault is fixed. came from replacing i with el_n in Electrons class, we should look more carefully, i guess. Sorry about that.
The variables I have in so far are:
HcalHits:
- energy, eta, phi (hcal hits don't have momentum so I didn't use a lorentz vector)
SimTracks
- energy, et, eta, phi, genId, type (not sure exactly what these last two are yet. also should put in a lorentz p4)
SuperClusters
- energy, et, eta, phi, seed energy, number of basic clusters, electron and photon indices, barrel (=0 or 1). Also raw and preshower energy will go in tomorrow(today)
BasicClusters
- energy, et, eta, phi, number of hits, index to super cluster to go in tomorrow (today).
CaloTowers
- energy, et, eta, phi, emEnergy, hadEnergy, outerEnergy, outerEt, emEt, hadEt, emL1, hadL1,size (these are available variables. need to be looked atbecause I don't know exactly what they are)
Photons
- energy, et, eta, phi, index to supercluster, s1, s9, s25 (and tranverse), barrel(0 or 1), p4
I haven't done converted photons yet. I am not sure if I should do it inside of
GlobePhoton? or make a separate class.
10 pm San Diego Elizabeth update
L1, MET, Vertex, Tracks are in and mostly filled. I did not get in the pointers to the tracks or the variable tkind (vertex class). I don't know what tkind is, and I could not find it in LXR. I also did not put in references to the simtracks or mc in the tracks class. Sorry about this, I just didn't have time to figure these things out. I will try to get to it on Tues if no one does it before then. For the MET, I could only find one MET collection. It is a caloMET. I will try to look in the CMS1 code to find out what they used and what they did to it early this week. Please let me know if you find problems.
DONE Another one:
ElecrtonColl? in consistently used as the config parameter names (mis-spelled)
Some more things:
GlobePhotons? .cc: pho_sc[i] should be pho_sc[pho_n] in two places
DONE GlobeElectrons? : [i] should be el_n everywhere
DONE, although there is no threshhold right now GlobeTracks? : [i] should be tk_n everywhere
GlobeEcalClusters? : if sc->energy() <
SCetCut? _ for some clusters, the index of the SC for photons and electrons is not correct anymore. Either we decide that we do not apply any cut on the SCs or the index has to be found in a different way or updated at the moment of storing the SC if we do electrons and photons first but we should tink about that
GlobeHcal? : put only a
TLorentzVector? and add an int hcal_type to say to which collection a hit belongs
End of some more things
Some comments by Marco on the current version Feb 9, 2007 10.45 pm CERN time:
Sorry but I did not look very well nor try much.
1) There should be parameters in the file.cfi such as:
bool doL1 = true
bool doElectrons =true
bool doPhotons =true
and so on
in Globeanalyzer the classes should not be called ehen the corresponding doX is false
2) _std_should not be in the names when there is only one type of objects, it must be there for electrons because there is std and gge or something like that
3) The sprintf with many lines does not look very useful to me, I find simpler to do
if (=="std") {
.... el_std_et...
...
}
else if ( ==gge) {
....
}
there are many less lines doing like this
For sure I don't think one should do sprintf when there is only one set of variables
4) for the variables please look, comment and and update the list of variables that I started to write below, for example I was proposing _p4 for the 4momentum and not _lv but it should be agreed
5) what is failedToGet() for? it seems to me that if the collection is not there
GetByLabel? gives an error and it will not get there
6) In all the loops for filling I have seen, the
TLorenzVector? is filled using for the index the variable i (new ..[i], ->At(i)) that is not the same as type_n when there is a threshold and I think it is wrong.
End of Marco's comments
Sean put the code in CVS. It is in UserCode/Simon/Analyzers/
19.16 Feb 8 CERN
I wrote some code but I will certainly finish it during the week-end anyway I do not commit anything till next Monday. (Matteo)
8pm PST Feb 7 UCSD :
Sean and Eliz. have Electron example working in CMSSW_168. Sean has added a working photon class. I have added a working L1 class. Neither are yet complete. Sean has started on the
SimTracks? . We plan to get the skeletons up for everything and then work on filling all the variables. The only real trouble I know of is with
L1EtMiss? , but I have not spent a long time on it. I will try to be in by 9 tomorrow if you want to talk about anything. We have not yet set up anything in CVS.
To put this as a twiki page:
rm ntptwiki_v1.txt; cat ntp_v1.txt | sed 's/$/
/' >ntptwiki_v1.txt
This is the same as the text file attached ntp_v1.txt, it only has BRs
*February 7th, 2008
ntp_v1.txt: Updated root tree format Version 1. Please have a look and put new versions with updates.
==========================================================================
==========================================================================
==========================================================================
Current Sharing of the work (8 February 2008)
Sean + Elizabeth:
Vtx (data)
L1Trigger?
Hcal Hits/Calo Towers
Ecal stuff
Photons
Tracks
MET
Matteo:
Electrons
Muons
Jets
GenJets? (maybe I can reuse the same class for jet the dataformat should be the same)
MC (incl MC vtx?)
Common Variables
Postponed for the moment:
HLT
SimTracks? (we may have this info, we will add it if we do) (NOT TO BE POSTPONED)
Preshower
==========================================================================
==========================================================================
==========================================================================
First prototype of the code for the electrons.
Some comments:
1) each class sets and fills the branches related to its own object
2) in the main class (
GlobeAnalyzer? ) there are two trees one ("event") contains the real events the other one will contain global info about the job we are running (parameter set, total events, total events selected, ....)
3) besides global parameters each class can have a set of specific parameters (look at globeanalyzer.cfi) to perform cuts on the objects and reduce the number of objects to store, the analyze method return a bool (false if no object pass the cuts)
4) each class should have defined a debug_level variable to activate the debug and in Limits.h the maximum number of object of that type to store
5) the names of the branches can be changed, they should be agreed upon
6) for some collections (like electrons, muons and jet where there are many types of algos) we pass a char to the class during constuction to choose which collection do we want to process. So for example in
GlobeAnalyzer? we will have two
GlobeElectrons? objects:
electrons1 = new
GlobeElectrons? ("std", pset); // process standard electrons
electrons2 = new
GlobeElectrons? ("gge", pset); // process global gsf electrons
7) in test there is a very simple root macro to read the rootple
8) each time we make a tag we have to change the VERSION variable in Limits.h which will be stored in the common_variables tree of the ntuple
9) if you have a better idea (and probably you have...) you can suggest new names for the classes and if you like we can define our own namespace (for example ucsd), I'm too lazy to think about that. For now we just chose to use the Globe prefix in honour of the big wood ball I can see from my windows ;-)
==========================================================================
==========================================================================
==========================================================================
Two root trees in the output file:
Event
Parameters
In the example there are:
MAX_ELECTRONS
MAX_PHOTONS
MAX_PHOTONS_CONVERTED
MAX_MUONS
MAX_JETS
MAX_GEN
.....
The variables in blocks are:
pho_name
mu_name
el_name
jet_name
gen_name
...
when there are different types possible (example pixmatch electrons and gge)
el_gge_name
el_pix_name (or std as Matteo said, but it may change one day)
For each block the number of objects is for example:
gen_n
pho_n
mu_n
el_n
The pointers are:
pho_scind
The block they point to should be clarified in case of doubt, for example Island or Hybrid sc
==========================================================================
==========================================================================
==========================================================================
BLOCKS and variables
==========================================================================
==========================================================================
==========================================================================
GENERAL:
Int_t run;
Int_t event;
Float_t pt_hat;
...
Something like MC event type? For soups and so on, such as:
Int_t typ_ev;
==========================================================================
==========================================================================
==========================================================================
BLOCK Generator info:
All generated particles
Int_t gen_n;
Int_t gen_status[];
Int_t gen_pdgid[];
Int_t gen_mother[];
TLorentzVector? gen_p4[];
REPLACES:
Float_t gen_energy[];
Float_t gen_et[];
Float_t gen_eta[];
Float_t gen_theta[];
Float_t gen_phi[];
==========================================================================
==========================================================================
==========================================================================
Simvertices+simtracks, someone should look because for now I am only guessing
I would first put electrons and photons in the tracker:
??????
Int_t simvtx_n
Float_t simvtx_x[]
Float_t simvtx_y[]
Float_t simvtx_z[]
Int_t simtk_n
Int_t simtk_pdgid[]
TLorentzVector? simtk_p4 []
Int_t simtk_vtxind[]
?????
==========================================================================
==========================================================================
==========================================================================
L1 TRIGGER
I thing one can use MAX_L1=4
I would put everything lowercase
No
TLorentzVector?
l1emiso
Int_t l1emiso_n;
Int_t l1emiso_rank[l1emiso_n]; //IF IT EXISTS, otherwise they are already in decreasing ET order
REMOVE Int_t l1emiso_energy[l1emiso_n]
Float_t l1emiso_et[l1emiso_n]; (I THINK IT IS FLOAT ENEN IF NOW IT HAS INTEGER VALUES)
Float_t l1emiso_eta[l1emiso_n];
Float_t l1emiso_phi[l1emiso_n];
l1emnoniso
-- same as above
l1jet
-- same as above
l1tau
-- same as above
l1muon
-- same as above
==========================================================================
==========================================================================
==========================================================================
Add HLT info to be added but probably later
bit
Candidates passing HLT for all relevant triggers
for em match candidates passing using SC
single e iso
single e non iso
double e iso
double e non iso
single pho iso
single pho non iso
double pho iso
double pho non iso
and so on
==========================================================================
==========================================================================
==========================================================================
Tracks
Int_t tk_n;
TlorontzVector? tk_p4[168]; //[tk_n]
Int_t tk_charge[168]; //[tk_n]
Float_t tk_d0[168]; //[tk_n]
Int_t tk_nhits[168]; //[tk_n]
Float_t tk_chi2[168]; //[tk_n]
Int_t tk_dof[168]; //[tk_n]
Float_t tk_dz[168]; //[tk_n]
Float_t tk_qoverpError[168]; //[tk_n]
+lost hits
+errors on d0, dz
Not full cov matrix
id mc match
reference to gen tracks, if not simtracks
==========================================================================
==========================================================================
==========================================================================
BLOCK MC Vertex info:
vtx_mc_n
Float_t vtx_mc_x[];
Float_t vtx_mc_y[];
Float_t vtx_mc_z[];
Or Point if it is easy.
==========================================================================
==========================================================================
==========================================================================
BLOCK Data Vertex info:
Or Point if it is easy.
vtx_data_n
Float_t vtx_data_x[];
Float_t vtx_data_y[];
Float_t vtx_data_z[];
Float_t vtx_data_dx[];
Float_t vtx_data_dy[];
Float_t vtx_data_dz[];
Int_t vtx_data_ntk[]
Float_t vtx_data_tksumptphi[] //redundant
Float_t vtx_data_tksumpt[] //redundant
Float_t vtx_data_tksumabspt[] //redundant
Pointers to the tracks
Int_t vtx_data_tkind[][MAX_VTDDATATKINDEX]
==========================================================================
==========================================================================
==========================================================================
HCAL BLOCK
all lowercase
Int_t hcalb_n;
Float_t hcalb_eta[5184];
Float_t hcalb_phi[5184];
Float_t hcalb_et[5184];
or
TLorentzVector?
Int_t hcalf_n;
Float_t hcalf_eta[1728];
Float_t hcalf_phi[1728];
Float_t hcalf_et[1728];
or
TLorentzVector?
add the other type (hcalo for outer???)
and put an energy threshold to store them(not et) to be evaluated in the different regions (eta and type)
~300
MeV?
==========================================================================
==========================================================================
==========================================================================
BLOCK Calotowers
This was put by Sean (check again)
Int_t caltow_n;
Float_t caltow_et[726]; //[caltow_n]
Float_t caltow_energy[726]; //[caltow_n]
Float_t caltow_eta[726]; //[caltow_n]
Float_t caltow_phi[726]; //[caltow_n]
replace th 4 above with
TLorentzVector? caltow_p4[]
Float_t caltow_emEnergy[726]; //[caltow_n]
Float_t caltow_hadEnergy[726]; //[caltow_n]
Float_t caltow_outerEnergy[726]; //[caltow_n]
Float_t caltow_outerEt[726]; //[caltow_n]
Float_t caltow_emEt[726]; //[caltow_n]
Float_t caltow_hadEt[726]; //[caltow_n]
Int_t caltow_emL1[726]; //[caltow_n]
Int_t caltow_hadL1[726]; //[caltow_n]
Int_t caltow_size[726]; //[caltow_n]
==========================================================================
==========================================================================
==========================================================================
BLOCK Electrons
two separate collections (standard + GGE)
add a flag con loose tight cuts for Elizabeth... (integer)
pointers to tracks + number of shared hits and so on
==========================================================================
==========================================================================
==========================================================================
BLOCK Muons
two collections (Global, trackingmuons)
pointers to track used
==========================================================================
==========================================================================
==========================================================================
BLOCK Jets:
4 o 5 types + gen jets
(no eta cut, no et cut)
Int_t jet_type_n
TlorentzVector? jet_type_p4
Corrected energy???
em fraction???
had fraction???
track energy (if tracks are used) ????
==========================================================================
==========================================================================
==========================================================================
BLOCK MET Missing et
Some different types if available
Missing et
Missing et phi
met_type_et
met_type_phi
Elizabeth should check it
==========================================================================
==========================================================================
==========================================================================
No taus for the moment
==========================================================================
==========================================================================
==========================================================================
No PFlow for the moment
==========================================================================
==========================================================================
==========================================================================
==========================================================================
==========================================================================
==========================================================================
BLOCK Photons + converted photons:
I am not sure
In future (CMSSW_2_0_0) the converted photon info will be added to the photons
We could do immediately and add to the photons n_convetracks +
all the track pairs prensent in the conv pho
Or leave it as it is now and have two separate blocks: pho and convpho with repeated photons
Perhaps I would do the first option
Must make sure that the vertex is at 0, 0, 0 as we want because we want to choose the vertex later
It would be:
Int_t pho_n;
TLorentzVector? pho_p4[]; //with corrected energy
Float_t pho_energyuncor[]; //SC Energy
Float_t pho_preshenergy[]; //SC Energy
Int_t pho_scind;
Int_t pho_barrel[] //barrel 1, endcaps 0 also needed to know to which collection of SC the previous points
Float_t pho_s1[MAX_PHOTONS]; //[pho_n]
Float_t pho_s9[MAX_PHOTONS]; //[pho_n]
Float_t pho_s25[MAX_PHOTONS]; //[pho_n]
also add: varetaeta, varphiphi, ...
Float_t pho_ecalr[MAX_PHOTONS]; //radius of the SC cog
Float_t pho_ecalz[MAX_PHOTONS]; //z of the SC cog
//pizero disc variables
Int_t pho_pizerotype[MAX_PHOTONS]; //[pho_n]
Float_t pho_pizeronn[MAX_PHOTONS]; //[pho_n]
maybe something like this: correction for leakage but we will have anyway to rivisit corrections as soon as the new sc corrections will be in
Float_t pho_bordercorr[MAX_PHOTONS]; //[pho_n]
OPTIONAL, MAYBE LATER, SOME ISOLATION VARIABLES
Int_t pho_ntk[MAX_PHOTONS]; //[pho_n]
Int_t pho_ntk030[MAX_PHOTONS]; //[pho_n]
Int_t pho_ntk025[MAX_PHOTONS]; //[pho_n]
Int_t pho_ntk035[MAX_PHOTONS]; //[pho_n]
Int_t pho_barrel[MAX_PHOTONS]; //[pho_n]
Int_t pho_gen[MAX_PHOTONS]; //[pho_n]
Float_t pho_drmatch[MAX_PHOTONS]; //[pho_n]
Float_t pho_hcal030[MAX_PHOTONS]; //[pho_n]
Float_t pho_hcal040[MAX_PHOTONS]; //[pho_n]
Float_t pho_hcal050[MAX_PHOTONS]; //[pho_n]
Float_t pho_ecal030[MAX_PHOTONS]; //[pho_n]
Float_t pho_ecal040[MAX_PHOTONS]; //[pho_n]
Float_t pho_ecal050[MAX_PHOTONS]; //[pho_n]
Float_t pho_ecal00MAX_PHOTONS035[MAX_PHOTONS]; //[pho_n]
Float_t pho_ecal00MAX_PHOTONS030[MAX_PHOTONS]; //[pho_n]
Float_t pho_ecal00MAX_PHOTONS040[MAX_PHOTONS]; //[pho_n]
Float_t pho_ecal008035[MAX_PHOTONS]; //[pho_n]
Float_t pho_ecal008030[MAX_PHOTONS]; //[pho_n]
Float_t pho_ecal008040[MAX_PHOTONS]; //[pho_n]
END OPTIONAL
Int_t pho_nconvtk[MAX_PHOTONS]; //[convpho_n]
Float_t pho_convtk_pt[MAX_PHOTONS][MAX_NPAIR][2]; //both tracks together
Float_t pho_convtk_eta[MAX_PHOTONS][MAX_NPAIR][2]; //both tracks together
Float_t pho_convtk_phi[MAX_PHOTONS][MAX_NPAIR][2]; //both tracks together
Float_t pho_convtk_d0[MAX_PHOTONS][MAX_NPAIR][2]; //both tracks together
Float_t pho_convtk_dz[MAX_PHOTONS][MAX_NPAIR][2]; //both tracks together
Int_t pho_convtk_nhits[MAX_PHOTONS][MAX_NPAIR][2]; //both tracks together
Float_t pho_convtk_chi2perDof[MAX_PHOTONS][MAX_NPAIR][2]; //both tracks together
Float_t pho_vtx_x[MAX_PHOTONS][MAX_NPAIR]; //[convpho_n]
Float_t pho_vtx_y[MAX_PHOTONS][MAX_NPAIR]; //[convpho_n]
Float_t pho_vtx_z[MAX_PHOTONS][MAX_NPAIR]; //[convpho_n]
Float_t pho_pairmass[MAX_PHOTONS][MAX_NPAIR]; //[convpho_n]
Float_t pho_pairsep[MAX_PHOTONS][MAX_NPAIR]; //[convpho_n]
Float_t pho_vtx_px[MAX_PHOTONS][MAX_NPAIR]; //[convpho_n]
Float_t pho_vtx_py[MAX_PHOTONS][MAX_NPAIR]; //[convpho_n]
Float_t pho_vtx_pz[MAX_PHOTONS][MAX_NPAIR]; //[convpho_n]
Float_t pho_vtx_pt[MAX_PHOTONS][MAX_NPAIR]; //[convpho_n]
Float_t pho_pairptoveretsc[MAX_PHOTONS][MAX_NPAIR]; //[convpho_n]
Float_t pho_eoverp[MAX_PHOTONS][MAX_NPAIR]; //[convpho_n]
extrapolation of the pair to the beam line
Float_t convpho_zbeamline[MAX_PHOTONS]; //[convpho_n]
==========================================================================
==========================================================================
==========================================================================
BLOCKS ECAL CLUSTERS
Decide how to link them (probably in both directions)
Also link the sc to the seed basic cluster
Probably put together barrel and endcaps
Int_t islbc_n;
TlorentzVector? islbc_p4[MAX_ISLANDBASICCLUSTERS]
Int_t islbc_barrel[MAX_ISLANDBASICCLUSTERS]; //1 barrel, 0 endcaps
Int_t islbc_scind[MAX_ISLANDBASICCLUSTERS];
Int_t islbc_ncry[MAX_ISLANDBASICCLUSTERS];
Int_t islsc_n;
TlorentzVector? islsc_p4[MAX_ISLANDSUPERCLUSTERS]
Int_t islsc_barrel[MAX_ISLANDSUPERCLUSTERS]; //1 barrel, 0 endcaps
Int_t islsc_scind[MAX_ISLANDSUPERCLUSTERS];
Float_t correction due to preshower in endcaps
list of indexes to basiclusters
Int_t hybsc_n;
TlorentzVector? hybsc_p4[MAX_HYBRIDSUPERCLUSTERS]
Int_t hybsc_barrel[MAX_HYBRIDSUPERCLUSTERS]; //1 barrel, 0 endcaps
Int_t hybsc_scind[MAX_HYBRIDSUPERCLUSTERS];
Check WELL if there is another collection of Hybrid Clusters
Maybe some shape variables in the super clusters
varetaeta, varphiphi, s1, s9, .....
Perhaps some shape variables in the basic clusters
Energy, raw energy, presh energy
==========================================================================
==========================================================================
==========================================================================
SOME MORE USELESS COMMENTS JUST FOR ME (MARCO) TO REMEMBER
EXAMPLE OF REDUNDANT INFO OPTIONAL OUR OWN VERTICES DONE BY HAND BUT WE WILL PUT IT LATER< FIRST WE NEED TO STUDY IT
Int_t vtx_n;
Float_t vtx_z[30]; //[vtx_n]
Int_t vtx_ntk[30]; //[vtx_n]
Float_t vtx_vecmom[30]; //[vtx_n]
Float_t vtx_vecmomphi[30]; //[vtx_n]
Float_t vtx_absmom[30]; //[vtx_n]
END OPTIONAL
PUT MAX objects +
check that we never write more than that
for two dimensions use fixed second [10]
For physics objects (e, gamma may add et threshold) think!!!!
OPTIONAL: REDUNDANT INFO
Some selected particles such as e, mu, gamma, tau? with ET thresholds
e, before and after photon emissiom
Int_t gen_mu_n;
Int_t gen_mu_status[];
Int_t gen_mu_pdgid[];
TLorentzVector? gen_mu_p4[];
END OPTIONAL
OLD TO LOOK AGAIN: Things to be done:
*February 6th, 2008
ntp.txt: New root tree format Version 0. Please have a look and put new versions with updates.
December 13th, 2007
CMSSW Analyzer
- Add 1 LorentzVector? or 3dvector (later maybe more) (IS THIS WORTH IT? MULTIPLE PHOTONS PER EVENT MEANS WE NEED AN ARRAY OF LORENTZ VECTORS)
- Replace all arrays into std::vector (ON HOLD)
- Get collections only once (DONE)
- Remove all duplicated variables (DONE)
- Allgen_p_eta (goes to very large numbers because of very large eta gen particles) (COMES FROM FIRST TWO PARTICLES (the protons). THEY HAVE ETA OF +-1e72. NOW SKIPPING THEM)
- remove p n i (DONE)
- check R9 larger than 1( r9 > 1 about ~1% of the time (26 in 2300 photons). Only about 20% (5/26) are at eta < 2. s9/s25 is always less than 1.
- review photon energy variables (NOT DONE YET)
- HCAL Info + verify how many HCAL Hits and what type ( E or Et cuts???)(DONE)HCAL RECHIT INFO(eta, phi, Et) FOR BARREL(5184) AND FORWARD(1728), NOT HCAL-OUTER
ALSO PUT IN CALOTOWER INFO SINCE I'VE SEEN THAT USED ELSEWHERE (i.e. HLT ANALYZER)
- Links to BasicClusters? (PHOTONS NOW HAVE AN ARRAY WITH INDICES TO ISLAND BASIC CLUSTERS)
- MC truth conversions(NOT SURE WHAT THIS MEANS ?? )(It means that we should put the simtracks of the converted photons and probably brem from electrons - not urgent)
- LV1 (Et, eta and phi are in for ISO, NONISO, JETS, TAUS, and MUONS)
- HLT (HLTHighLevel? ) (HLTAnalyzer - Pedrame Bargassa or Alessio Ghezzi)(NOT DONE YET. LOOKED INTO IT AND WASN"T ABLE TO DO IT QUICKLY)
- even muons and something else in gen_(NOT SURE WHAT THIS MEANS ??)
- Put more converted photon variables (such as track parameters) (TRACK PARAMETERS d0,nhits,Chi2/dof,dz DONE)(Also add pt, eta, phi)
- Put more converted track variables (hits, chi2, some errors...)(WHAT IS A CONVERTED TRACK ??)(Nothing, the same as the previous point)
- Add index to pho of convpho + number of convpho (INDEX TO PHOTON DONE)
- See cfg file to recompute conversions(DO WE WANT TO RECOMPUTE CONVERSIONS?)(Yes because there were some bugs in the official reconstruction that was carried out)
- Verify variables:
- not filled pho_: bcenergy nbc bordercorr cor (pho_nbc FILLED. PROBABLY DON'T NEED bcenergy SINCE WE HAVE INDICES TO BASIC CLUSTERS FOR EACH PHOTON)bordercorr?? cor?? Just not sure what these are yet
- Check the use of the Preshower(NOT DONE YET)
- Electrons-muons-jets-met(NOT SURE WHAT TO DO HERE??)(We should add electrons, muons, jets and met, we will get electrons from Matteo, the rest can be taken from CMS1 S and T)
- Add more track variables for selection (Matt: d0<1mm Chi2/dof<10, Hits >=8 Delta dz<5mm )
(DONE)
- Check status of twophoton BG production(NOT SURE WHAT THIS MEANS)(I have asked and I am waiting for a response)
- I think for all tracks we should also put at least the error on 1/pt
HAVEN'T DONE ANYTHING BELOW HERE(We will start soon doing these things)
- At some point organize disk space
- We made new TkIsol? function, to be improved
- Script to add new ityp and new reduction files (maybe only one type at a time, probably not)
- See well normalization + requirements on rejection
- Check well matching efficiency with MC thruth
- Match only to photons
- Isolation studies
- Energy scale and energy resolution studies
- ntp.txt: New root tree format Version 0