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 additiona BRs
*February 7th, 2008
[[%ATTACHURL%/ntp_v1.txt][ntp_v1.txt]]: Updated root tree format Version 1. Please have a look and put new versions with updates.
==========================================================================
==========================================================================
==========================================================================
Current Sharing of the work (7 February 2008)
Sean + Elizabeth:
Vtx (data)
L1Trigger
Hcal Hits/Calo Towers
Ecal stuff
Photons
Tracks
MET
Matteo:
Electrons
Muons
Jets
Tracks
MC (incl MC vtx?)
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