ExclusiveDecayTools Package Nicolò Magini



Scaricare 51 Kb.
13.11.2018
Dimensione del file51 Kb.


ExclusiveDecayTools Package

  • Nicolò Magini

  • Firenze, 16 Gennaio 2003


Un po’ di storia

  • Sviluppato originariamente a Pisa da Zhen Xie

  • Modificato successivamente da V. Ciulli, R. Ranieri e N. Magini

  • Utilizzato per la mia tesi di laurea e per gli studi di B-Physics nel DAQ-TDR

  • Adesso disponibile come pacchetto in bTauAnalysis



A che serve?

  • Utilizzando come input oggetti ricostruiti con il consueto codice di ORCA, consente di ricostruire catene di decadimenti esclusivi

  • Nel caso di eventi MonteCarlo in formato HEPEVT effettua automaticamente l’associazione con la verità MonteCarlo



Classi per l’utente

  • Particle

  • Builder

  • Channel

  • UserCut



Particle



Builder

  • Classe astratta: deve essere implementata dall’utente una classe concreta che eredita da Builder. Prende come input gli oggetti ricostruiti (nel costruttore)

  • Il metodo BuildBasicObj restituisce un vettore di Particle

  • Effettua l’associazione con il MonteCarlo



Esempio concreto: TkBuilder

  • Costruita con un qualsiasi vettore di RecTrack (ad es. da CombinatorialTrackFinder, PixelLine, o come più vi aggrada)

  • Se passiamo nel costruttore anche un vettore di SimTrack viene effettuata l’associazione con la verità MonteCarlo (TDRTrackAssociatorByHits)

  • Ma ci si potrebbe sbizzarrire a produrre un MuBuilder, un CaloBuilder, ecc …



Channel

  • Si costruisce a partire da una stringa di testo con i nomi PDG della particella madre e dei prodotti di decadimento (fino a 6)

  • Esempio: Channel bdchannel("B0->pi+,pi-")

  • Il metodo Verify passando come argomento uno UserCut e un numero di vector
    * pari al numero di prodotti di decadimento ricostruisce tutte le possibili combinazioni compatibili con la particella madre



UserCut

  • Altra classe astratta -> l’utente deve implementare le classi derivate con i tagli utili alla sua analisi nel metodo Cut

  • Ad esempio è implementata la classe CutMass che ritorna true se la massa ricostruita è entro una opportuna finestra intorno alla massa vera



Come si usa il pacchetto?

  • bb  μ

  • Bs  Ds π

  •  π

  • K+ K-



Si parte passando al Builder i normali oggetti ricostruiti di ORCA

  • In questo caso, avendo effettuato una ricostruzione nel Tracker, si tratta di un vettore di RecTrack:

  • TkBuilder mytk(“BasicObj”, &GoodRecTracks, &GoodSimTracks)

  • vector
    * TKBasicObj = mytk.BuildBasicObj()

  • In questo caso passiamo anche un vettore di sim tracks perché ci interessa l’associazione con la verità MonteCarlo



Poi si effettua la prima identificazione delle particelle

  • Si può fare con la classe Channel se chiamiamo il costruttore con un canale di decadimento “ad un corpo”

  • CutdEdX cutdEdx;

  • Channel aPi(“pi+->BasicObj”);

  • vector
    * Pilist = aPi.Verify(&cutdEdX,TKBasicObj);

  • Channel aK(“K+->BasicObj”);

  • vector
    * Klist = aK.Verify(&cutdEdX,TKBasicObj);

  • Channel aMu(“mu+->BasicObj”);

  • vector
    * Mulist = aMu.Verify(&cutdEdX,TKBasicObj);

  • P.S. Qualora qualcuno se lo stia chiedendo, il taglio di dE/dx attualmente non fa assolutamente niente (return true), quindi si ottengono le stesse particelle in tutti e tre i casi, ma era solo per dare l’idea …



A questo punto ricostuiamo le combinazioni di massa invariante

  • Channel aPhi (“phi->K-,K+”,&mysimevt);

  • vector
    * Philist = aPhi.Verify(cutPhiMass,Klist,Klist);

  • Channel aDs (“D_s-->phi,pi-”,&mysimevt);

  • vector
    * Dslist = aDs.Verify(cutDsMass,Philist,Pilist);

  • Channel aBs (“B_s0->D-s-,pi+”,&mysimevt);

  • vector
    * Bslist = aBs.Verify(cutBsMass,Dslist,Klist);

  • 1) Ad ogni step viene verificato che non ci sia sovrapposizione fra i prodotti di decadimento

  • 2) Channel ricostruisce automaticamente anche il canale ottenuto per coniugazione di C

  • 3) In questo caso si passa nel costruttore anche il puntatore al RawHepEvent simulato per propagare la verità di MonteCarlo dai prodotti di decadimento alla madre



Se volessimo effettuare dei tagli topologici?

  • Possiamo costruire il Channel con un canale di decadimento “virtuale”

  • Channel Evchannel(“Event->Bs,mu”);

  • vector
    * Eventlist = Evchannel.Verify(&cut,Bslist,Mulist);

  • Poiché Event non è un nome di particella nelle tabelle PDG, Channel si limita a trovare le combinazioni dei prodotti senza assegnare proprietà fisiche alla madre



A questo punto ho i miei vettori di particelle ricostruite e posso inserirli nelle ntuple, ecc …

  • for (int i=0; isize(); i++){

  • Particle * bs = (*Bslist)[i];

  • cout « “Bs pt = “ « bs->perp() « endl;

  • Particle * ds = (*Bslist)[i]->getChild(0);

  • Particle * pi1 = (*Bslist)[i]->getChild(1);

  • ecc. ecc. ecc …

  • E BUON DIVERTIMENTO CON L’ANALISI !!!



E se mi facesse comodo accedere ai RecObj originali che hanno originato una certa Particle?

  • Nel nostro esempio, mi servono le RecTrack dei due K per ottenere le informazioni sul vertice di decadimento della 

  • template class ParticleBase

  • Semplicemente la Particle + il RecObj P

  • Il metodo baseObject() restituisce P



Stato del software

  • Disponibile su cvs nella head in bTauAnalysis/ExclusiveDecayTools

  • Testato con ORCA_6_3_0 su lxplus su eventi B0  π+π- e Bs  Ds π

  • Compila anche su Sun

  • Mancano i commenti alle classi



ToDoList

  • Risistemare e ottimizzare il codice

  • Aggiornare la documentazione (attualmente disponibile solo una CMS/IN DRAFT obsoleta sulla vecchia versione di Zhen)

  • Implementare altri Builder semplici (ad esempio L3MuBuilder come richiesto da Andrei)

  • Eventualmente in seguito, riorganizzare l’associazione con la MC Truth da un lato e i RecObj dall’altro





Condividi con i tuoi amici:


©astratto.info 2019
invia messaggio

    Pagina principale