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