Presentation is loading. Please wait.

Presentation is loading. Please wait.

Jose A. Hernando Trigger Gaudies Reconstruction Tools & Algorithms Inspectors MC & Data Algorithms Template preserved container Jose A. Hernando.

Similar presentations


Presentation on theme: "Jose A. Hernando Trigger Gaudies Reconstruction Tools & Algorithms Inspectors MC & Data Algorithms Template preserved container Jose A. Hernando."— Presentation transcript:

1 Jose A. Hernando Trigger Gaudies Reconstruction Tools & Algorithms Inspectors MC & Data Algorithms Template preserved container Jose A. Hernando

2 Reconstruction (access) The reconstruction algorithms share: – Access to the geometry (see geometry part) – Access to Hits We should define an interface (base) class. Solution: – The Reconstruction Tool/Alg should look for the data classes: – An algorithm at the initialization of the run that creates Geometry classes (calibration) – An algorithm that event by event create hits classes OLRecordsHits HitMaker event by event geocal geometry geocal Ini of run geocal Hits

3 Jose A. Hernando (status) RecAlg::execute() { vector ntracks; for seed in tracks new track* ntrack = NULL; if (rectool.reconstruct(seed,track)) ntracks.push_back(track); clone_killing(ntracks) }; Class RecTool: public ToolAlg { (status) reconstruct (const Track& seed, Track*& track) ; (status) reconstruct (const (TrackState)& state, Track*& track); }; Reconstruction (Tool & Algorithm) The reconstruction can be partial or complete – Partial: A collection of selected tracks, – Complete: all seed tracks, or with no input Solution – The reconstruction should be a Tool and an Alg – The Tool and Alg will require: – – The Tool will take a seed a reconstruct a track – The Alg will delegate in the tool to reconstruct – Property of RecAlg: Address of the input container Check for a flagged input ot not Tracks (3d)Tracks (VTT) VeloTTRecAlg geocal Hits Track VeloTT RecTool Track Hits geo VeloTT RecTool VeloTTRecAlg RecTool RecAlg

4 Jose A. Hernando Inspectors The reconstruction algorithms are inspected: – They accumulate data during the run Histograms, counters, timers – These run data can be made persistent (or simply printed out) Solution – The inspector are tools – the algorithms retrieve them and use them. – Any inspector should have user friendly methods. To book, fill histogram, ntuples To start, stop timers – The inspector should contain and manage the run data The user do not care of the data Ini of run IniInspectors Histos Ntuples Timers Counters end of run Summarize Counters

5 Jose A. Hernando Histos Histogram Inspector Histogram Inspector: – It server histograms between the user and HistoSvc of Gaudi – The user book and fill it as old Hbook Book(ID, n, x0, xf); Fill(ID,x); – The user do not have to keep the histograms pointers in their algorithm – The “key” of histogram can be (string) name, (int) ID – Properties of HistoInspector Persistency HBOOT/ROOT/etc Address. Class IHistoInspector: public ToolAlg { (status) book(key, n, x0, xf); (status) book(key, nx, x0, xf, ny, x0, xf); (status) fill(key, x, increment = 1); (status) fill(key, x, y, increment = 1); }; (status) VeloTTRecAlg::initialize() { histoInsp().book(“TTHits”,200,0,50); histoInsp().book(“TTXY”,50,-80,80,50,-80,80); } (status )VeloTTRecAlg: execute { … histoInsp().fill(“velo hits”, nhits,1.); histoInsp().fill(“xy velo hits”, x, y, 1.); } VeloTTRecAlg Use in Algorithms : Inspector header (some user friend methods)

6 Jose A. Hernando NTuples Ntuples Inspectors NTuples Inspector: – It server ntuples between the user and NTupSvc of Gaudi – The user book and fill ntuples similar as old Hbook Book(ID, name); Fill(ID,name,x); tup[name] = x; – The user do not have to keep the ntuples entries pointers in their algorithm – The ntuple will have an ID (int) and every entry an name (string) (int) NtupleID, (string) name – Properties of HistoInspector Persistency HBOOT/ROOT/etc Address. Class NtupleInspector: public ToolAlg { (status) create(id); (status) define(var_name); (status) fill(var_name, var); (double&) operator() [](varname); }; (status) VeloTTRecAlg::initialize() { NtupleInsp().create(10); NtupleInsp().define(“TTHits”); } (status) VeloTTRecAlg: execute { … (int) nhits = tthits.size(); NtupleInsp().fill(“TTHits”, nhits); } VeloTTRecAlg Use in Algorithms : Inspector header (some user friend methods)

7 Jose A. Hernando Timer Timer Inspectors Timer Inspector: – It store a histogram for user timer – The user start and stop the timer start(name); stop(name); The elapsed time is the entry of a 1D histogram – The information is printed or stores as histogram – Properties of TimerInspector Persistency HBOOT/ROOT/etc Address. Class NtupleInspector: public ToolAlg { (status) start(name); (status) stop(name); }; (status) VeloTTRecAlg: execute { TimerInsp().start(“VeloTTRECAlg_exe”); …. TimerInsp().sto(“VeloTTRecAlg_exe”); } VeloTTRecAlg Use in Algorithms : Inspector header (some user friend methods)

8 Jose A. Hernando Counter Counter Inspectors Counter Inspector: – It store counters – The user can increment a counter reset(name); increment(name, (int) val); – The information is printed at the end of the run. Class NtupleInspector: public ToolAlg { (status) reset(name); (status) increment(name, (int) val=1); }; (status) L1Decision: execute { CounterInsp().increment(“passingL1”); } VeloTTRecAlg Use in Algorithms : Inspector header (some user friend methods)

9 Jose A. Hernando MC & Data Algorithms How to check an algorithm with MC without been intrusive? – The Data Algorithm [DAlg] should not contain any track of MC – Who to test the code without duplication? Solution 1. A MC Algorithms that takes as input Data and MCData As other Algorithm but now takes also MCData. It can be use as checker of the output but not during the execution of the Dalg You add the MCAlg to the sequencer 2. A MC Algorithm inherits from the Data Algorithm The MCAlg overwrites DAlg methods, and add MC information. Doing the check you replace DAlg by MCAlg in the sequencer Tracks Hits Counter CheckRecEff Class MCAlg : public DAlg, public algorithm { (status) initialize(); (status) execute(); (status) finalize(); protected: Associator * m_astor; } (status) MCAlg : initialize() { DAlg::initialize(); HistoInsp().book(“track_mcw”,50,0,1); } (status) MCAlg::execute() { Create_cheating_mctracks(); Set_address_to_cheated_mctracks(); DAlg::execute(); // DAlg::matching(); Study_efficiency(); } In the header In the cpp

10 Jose A. Hernando MC & Data Algorithms (2) The Algorithms repeat some common task: – Go to the DataSvc and get the data (MC) – Go to the ToolSvc and get the tool Solution – We can write with an script (python): Input txt file ( ): –DataObjs address –Tool address –properties – It will write in the squeleton of header file 1. The member pointer and access to the data const L13dTracks& l13dtracks(); 2. The member pointer and access to the tools HistoInsp& histoInsp(); – It will write the squeleton of the cpp file The “nots” of Gaudi to get the data and the tools The “nots” of Gaudi to make the alg factory. Tracks Hits Histos CheckRecEff Class CheckRecEff : public algorithm { HistoInsp& histoInsp() {return *m_Hinsp;} Const L13dTracks& l13dtracks() const {return *m_l13dtracks;} protected: HistoInsp* m_HInsp; L13dTracks* m_l13dtracks; }; Static cont AlgFactory Const IAlgFactory& … (status) CheckRecEff : initialize() { Retrieve_run(); histoInsp().book(“ntracks”,50,0,50); } (status) CheckRecEff::execute() { Retrieve_event(); Int ntracks = l13dtracks().size(); histoInsp().fill(“ntracks”,ntracks); } (status) CheckRecEff::retrieve_event() { m_l13dtracks = SmartPtr L13dTracks(evtSvc(), m_address_l1trks); }

11 Jose A. Hernando Template preserved container How we can avoid to create new objects and delete them per event? – This is one of the most time consuming task! Solution: – Create our own template container Booked_vector hits(50); – The container (the pointer) should survive an event We can not use the eventSvc We can instanciate a new DataSvc in Gaudi for this porpose. (I.e. TgDataSvc) We will acces the data from these container from this DataSvc – The container has a fixed dimension at creation time This can be expanded dynamically. – The container can be reset and return the next empty element. – The elements should be reset(able) – The container can be smart and have keys or flags to access selected elements. Template class booked_vector { Booked_vector(int n); Reset(); (Int) size() const {}; T& next() {} (iterator)& begin() {} (iterator)& end() {} protected: Std::vector m_vector; } (status) HltXAlg ::execute() { (booked_vector ) hltHits().reset() HltHit* hit = hltHits().next(); // return first Fill_hit(hit); Int nhits = hltHits().size() ;// size now =1 } In the header In the cpp

12 Jose A. Hernando Conclusions The Gaudies: – It is code to help to create and use the (trigger) small algorithms – It is code to make Gaudi more user friendly – It is code to simplify our coding experience. Gaudies: – The Reconstruction Algorithm and Tool The Reconstruction Tool operates in one seed track The Reconstruction Algorithm operates (in a container of tracks) and uses the Tool – The Inspectors They are tools to store and manage a run-type data They have user friendly tools –Histos, Ntuples, Timer, Counter Inspectors – The MC and Data Algorithm A MCAlgorithm can check its DataAlgorithm without disturbing the DataAlg. The general code of accessing data/tools and other “nots” of Gaudi can be create automatically with an script (python) – A template preserved container Is is a container of fixed size to be changed dynamically It can be reset(), and ask for the next() empty element The container leaves in a DataSvc of Gaudi different than the eventSvs and survives during the run The Gaudis should be a package


Download ppt "Jose A. Hernando Trigger Gaudies Reconstruction Tools & Algorithms Inspectors MC & Data Algorithms Template preserved container Jose A. Hernando."

Similar presentations


Ads by Google