_HADES_CLASS_DESCRIPTION *-- AUTHOR : G. Kornakov HParticleT0Reco Reconstructor to recalulate the T0 form the reconstructed particle to increase the time resolution. By default T0 is calulated form all particles flagged as kIsUsed. The user has to take care that enough used particles are avalilable. As standard hadrons and leptons are flagged. As alternative all candidates with fitted inner/outer segment,RKchi2<1000,MetaHit and beta!=-1 can be used when setUseFlaggedCandidates(kFALSE) is used. It is assumed that metaQA normalization , momentum correction for systematics and path length correction is applied before (HParticleCandFiller). Particles with id 2, 3 ( e+, e-) (without ues of RICH/SHOWER) 5, 6 (mu+,mu-) 8, 9 (pi+,pi-) 11,12 (K+ , K-) 14 (p) 45 (d) 46 (t) 49 (he3) are identified by beta vs momentum and beta vs MDC dedx simultaniously. Each Track is tested for all hyposisis. The PID with smallest deviation from theoretical curves is chosen. beta vs mom is weighted higher of beta vs dedx. The procedure is performed in 2 steps. In the first iteration a rough temporay ID is performed to retrieve T0. After correction of TO in the second iteration the PIDs are asigned. Circular buffers for the mean and sigmas of the different START strips are filled to improve resolution and to take care of variation with time. Particle ID takes into account the errors of time measurement. USAGE: HParticleT0Reco t0Reco("apr12"); t0Reco.setUseFlaggedCandidates(kTRUE); // 2 possible ways : a. As Reconstructor add it to standard task list b. With HLoop : before eventLoop : t0Reco.init(); inside eventloop : t0Reco.execute();
HParticleT0Reco(const Text_t* name = "ParticleT0Reco", const Text_t* title = "ParticleT0Reco", const Text_t* beamtime = "apr12") | |
virtual | ~HParticleT0Reco() |
void | TObject::AbstractMethod(const char* method) const |
virtual void | TObject::AppendPad(Option_t* option = "") |
virtual void | HReconstructor::Browse(TBrowser* b) |
static TClass* | Class() |
virtual const char* | TObject::ClassName() const |
virtual void | TNamed::Clear(Option_t* option = "") |
virtual TObject* | TNamed::Clone(const char* newname = "") const |
virtual Int_t | TNamed::Compare(const TObject* obj) const |
virtual Bool_t | HReconstructor::connectTask(HTask* task, Int_t n = 0) |
virtual void | TNamed::Copy(TObject& named) const |
virtual void | TObject::Delete(Option_t* option = "")MENU |
virtual Int_t | TObject::DistancetoPrimitive(Int_t px, Int_t py) |
virtual void | TObject::Draw(Option_t* option = "") |
virtual void | TObject::DrawClass() constMENU |
virtual TObject* | TObject::DrawClone(Option_t* option = "") constMENU |
virtual void | TObject::Dump() constMENU |
virtual void | TObject::Error(const char* method, const char* msgfmt) const |
virtual Int_t | execute() |
virtual void | TObject::Execute(const char* method, const char* params, Int_t* error = 0) |
virtual void | TObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0) |
virtual void | TObject::ExecuteEvent(Int_t event, Int_t px, Int_t py) |
virtual void | TObject::Fatal(const char* method, const char* msgfmt) const |
virtual void | TNamed::FillBuffer(char*& buffer) |
virtual Bool_t | finalize() |
virtual TObject* | TObject::FindObject(const char* name) const |
virtual TObject* | TObject::FindObject(const TObject* obj) const |
virtual HTask* | HReconstructor::getComposite() |
virtual void | HReconstructor::getConnections() |
virtual Option_t* | TObject::GetDrawOption() const |
static Long_t | TObject::GetDtorOnly() |
virtual const char* | TObject::GetIconName() const |
virtual const char* | TNamed::GetName() const |
virtual char* | TObject::GetObjectInfo(Int_t px, Int_t py) const |
static Bool_t | TObject::GetObjectStat() |
virtual Option_t* | TObject::GetOption() const |
virtual HTask* | HTask::getOwner() |
TObjArray | HReconstructor::getTable() |
virtual HTask* | HReconstructor::getTask(const Char_t* name) |
virtual const char* | TNamed::GetTitle() const |
virtual UInt_t | TObject::GetUniqueID() const |
virtual Bool_t | TObject::HandleTimer(TTimer* timer) |
virtual ULong_t | TNamed::Hash() const |
virtual void | TObject::Info(const char* method, const char* msgfmt) const |
virtual Bool_t | TObject::InheritsFrom(const char* classname) const |
virtual Bool_t | TObject::InheritsFrom(const TClass* cl) const |
virtual Bool_t | init() |
virtual void | TObject::Inspect() constMENU |
void | TObject::InvertBit(UInt_t f) |
virtual TClass* | IsA() const |
virtual Bool_t | TObject::IsEqual(const TObject* obj) const |
virtual Bool_t | HReconstructor::IsFolder() const |
Bool_t | TObject::IsOnHeap() const |
virtual Bool_t | TNamed::IsSortable() const |
virtual void | HReconstructor::isTimed(Bool_t flag = kTRUE) |
Bool_t | TObject::IsZombie() const |
virtual void | TNamed::ls(Option_t* option = "") const |
void | TObject::MayNotUse(const char* method) const |
virtual HTask* | HReconstructor::next(Int_t& errCode) |
virtual Bool_t | TObject::Notify() |
void | TObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const |
static void | TObject::operator delete(void* ptr) |
static void | TObject::operator delete(void* ptr, void* vp) |
static void | TObject::operator delete[](void* ptr) |
static void | TObject::operator delete[](void* ptr, void* vp) |
void* | TObject::operator new(size_t sz) |
void* | TObject::operator new(size_t sz, void* vp) |
void* | TObject::operator new[](size_t sz) |
void* | TObject::operator new[](size_t sz, void* vp) |
HTask& | HTask::operator=(const HTask&) |
virtual void | TObject::Paint(Option_t* option = "") |
virtual void | TObject::Pop() |
virtual void | TNamed::Print(Option_t* option = "") const |
virtual void | HReconstructor::printTimer() |
virtual Int_t | TObject::Read(const char* name) |
virtual void | TObject::RecursiveRemove(TObject* obj) |
virtual Bool_t | HTask::reinit() |
void | TObject::ResetBit(UInt_t f) |
virtual void | HReconstructor::resetTimer() |
virtual void | TObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU |
virtual void | TObject::SavePrimitive(ostream& out, Option_t* option = "") |
void | HReconstructor::setActive(Bool_t state)MENU |
void | TObject::SetBit(UInt_t f) |
void | TObject::SetBit(UInt_t f, Bool_t set) |
virtual Bool_t | HTask::setConnections() |
virtual void | TObject::SetDrawOption(Option_t* option = "")MENU |
static void | TObject::SetDtorOnly(void* obj) |
void | HTask::setManual() |
virtual void | TNamed::SetName(const char* name)MENU |
virtual void | TNamed::SetNameTitle(const char* name, const char* title) |
static void | TObject::SetObjectStat(Bool_t stat) |
virtual void | HTask::setOwner(HTask* atask) |
virtual void | TNamed::SetTitle(const char* title = "")MENU |
virtual void | TObject::SetUniqueID(UInt_t uid) |
void | setUseFlaggedCandidates(Bool_t use = kTRUE) |
virtual void | ShowMembers(TMemberInspector&) |
virtual Int_t | TNamed::Sizeof() const |
virtual void | Streamer(TBuffer&) |
void | StreamerNVirtual(TBuffer& ClassDef_StreamerNVirtual_b) |
virtual void | TObject::SysError(const char* method, const char* msgfmt) const |
Bool_t | TObject::TestBit(UInt_t f) const |
Int_t | TObject::TestBits(UInt_t f) const |
virtual void | TObject::UseCurrentStyle() |
virtual void | TObject::Warning(const char* method, const char* msgfmt) const |
virtual Int_t | TObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) |
virtual Int_t | TObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const |
virtual void | TObject::DoError(int level, const char* location, const char* fmt, va_list va) const |
void | TObject::MakeZombie() |
void | calculateStartT0Cont() |
void | correctBeta() |
void | fill() |
void | fillBuffer() |
void | fillCorrections() |
void | fillMETA(Float_t t0, Float_t err, Int_t sys) |
Float_t | getBeta(HParticleCand* pCand) |
Float_t | getOnlineMeanQ(Int_t mod, Int_t strip) |
Float_t | getOnlineStripCorrection(Int_t mod, Int_t strip) |
Float_t | getT0(Int_t sys) |
Float_t | getT0Err(Int_t sys) |
void | initWalkHists() |
Bool_t | isEmbedded(HParticleCand* pCand) |
void | setPIDs() |
enum TObject::EStatusBits { | kCanDelete | |
kMustCleanup | ||
kObjInCanvas | ||
kIsReferenced | ||
kHasUUID | ||
kCannotPick | ||
kNoContextMenu | ||
kInvalidObject | ||
}; | ||
enum TObject::[unnamed] { | kIsOnHeap | |
kNotDeleted | ||
kZombie | ||
kBitMask | ||
kSingleKey | ||
kOverwrite | ||
kWriteDelete | ||
}; |
Bool_t | HReconstructor::fActive | Active flag |
TList* | HReconstructor::fHistograms | List of histograms generated by this reconstructor. |
Bool_t | HTask::fIsTimed | timer flag |
TString | TNamed::fName | object identifier |
TObjArray | HReconstructor::fOutputs | |
TStopwatch | HReconstructor::fTimer | Task timer |
TString | TNamed::fTitle | object title |
Bool_t | HTask::isConnected | |
Bool_t | HTask::isInitialised | |
Bool_t | HTask::manual | |
HTask* | HTask::owner |
HParticleT0Reco::buffers | buff | all circular buffers |
Double_t | c | speed of light |
HCategory* | candCat | |
HCategory* | catStart | |
HCategory* | catStartcal | |
HEnergyLossCorrPar* | eLoss | |
vector<tofvalues>* | eventMETA[2] | helper array to switch systems |
vector<tofvalues> | eventRPC | per event values of all candidates RPC |
vector<tofvalues> | eventTOF | per event values of all candidates TOF |
HEventHeader* | fEvHeader | |
Bool_t | fUseFlagged | use flagged kIsUsed candidates for t0 reco (default=kTRUE) |
Bool_t | fisEmbedding | embedding mode |
Bool_t | fisSimulation | for simulation START has to be treated different |
map<Int_t,Int_t> | mIdToIndex | all known ids |
map<Int_t,momCut> | mMomCut1Sys[2] | mom cuts iteration 1 per sys |
map<Int_t,momCut> | mMomCut2Sys[2] | mom cuts iteration 2 per sys |
TString | run | beamtime |
HParticleT0Reco::startvalues | start[2][16] | values per start module:strip |
Float_t | t0rpc | |
Float_t | t0startcont | |
Float_t | t0startconterr | |
Float_t | t0tof | |
vector<Int_t> | vparticle | all known ids |
This function fills the particle buffers for TOF and RPC. It suppose that the meta matching was already recalculated!!!!! It uses tracks with some minimum quality criteria. Also it does a mild cut on vertex : dist>(1./mom)*1200.+10.
Function which loops over candidates onces corrected by T0 and sets the best hypo just to the best traces.
hist are store as arrays: void readHistWalk(){ TFile* fileWC = new TFile("walk_par_histos3.root","READ"); TH1D* h [2][16]; TH1D* he[2][16]; TArrayD astartdt [2][16]; TArrayD astartsdt[2][16]; TArrayD astartdtback [2][16]; TArrayD astartsdtback[2][16]; for(Int_t i=0;i<2;i++) { for(Int_t j=0;j<16;j++) { h [i][j] = (TH1D*)fileWC->Get(Form("h_q_maxdt_mod%i_strip%i",i,j)); he[i][j] = (TH1D*)fileWC->Get(Form("h_q_sdt_mod%i_strip%i" ,i,j)); HHistConverter::fillArray(h [i][j],astartdt [i][j],Form("h_q_maxdt_mod%i_strip%i",i,j),10,10, kFALSE); HHistConverter::fillArray(he[i][j],astartsdt[i][j],Form("h_q_sdt_mod%i_strip%i" ,i,j),10,10, kFALSE); } } ofstream out; out.open("myhists.txt"); for(Int_t i=0;i<2;i++) { for(Int_t j=0;j<16;j++) { HHistConverter::writeArray(out,h [i][j]->GetName(),astartdt [i][j],10); } } for(Int_t i=0;i<2;i++) { for(Int_t j=0;j<16;j++) { HHistConverter::writeArray(out,he[i][j]->GetName(),astartsdt[i][j],10); } } out.close(); out.open("myhists_array.txt"); Int_t imax = 2; Int_t jmax = 16; Int_t kmax = astartdt[0][0].GetSize(); out<<Form("Double_t astartdt[%i][%i][%i]={ ",imax,jmax,kmax); for(Int_t i=0;i<imax;i++) { out<<"{ "; for(Int_t j=0;j<jmax;j++) { if(j>0)out<<endl; out<<"{ "; for(Int_t k=0;k<kmax;k++) { if(k<kmax-1) out<<astartdt[i][j][k]<<" , "; else out<<astartdt[i][j][k]; if(k>0&&k<kmax&&k%10==0) out<<endl; } if(j<jmax-1) out<<"} , "; else out<<"} "; } if(i<imax-1)out<<"} , "<<endl; else out<<"} "; } out<<"};"<<endl; out<<endl; out<<Form("Double_t astartsdt[%i][%i][%i]={ ",imax,jmax,kmax); for(Int_t i=0;i<imax;i++) { out<<"{ "; for(Int_t j=0;j<jmax;j++) { if(j>0)out<<endl; out<<"{ "; for(Int_t k=0;k<kmax;k++) { if(k<kmax-1) out<<astartsdt[i][j][k]<<" , "; else out<<astartsdt[i][j][k]; if(k>0&&k<kmax&&k%10==0) out<<endl; } if(j<jmax-1) out<<"} , "; else out<<"} "; } if(i<imax-1)out<<"} , "<<endl; else out<<"} "; } out<<"};"<<endl; out.close(); }