/[PAMELA software]/chewbacca/Docs/README_14_Mar_2008.txt
ViewVC logotype

Annotation of /chewbacca/Docs/README_14_Mar_2008.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (download) (vendor branch)
Tue Sep 23 07:20:29 2008 UTC (16 years, 2 months ago) by mocchiut
Branch: v0r00, MAIN
CVS Tags: v1r02, v1r00, v1r01, start, v10RED, v9r00, v9r01, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
Imported sources, 23/09/2008

1 mocchiut 1.1 Fri Mar 14 12:49:51 CET 2008
2    
3     ########################## HOW TO COMPILE ####################################
4    
5     Il nome dell'eseguibile e' chewbacca
6    
7     Scompattare la cartella.
8     Andare nella cartella /PamelaSW e settare variabili d'ambiente utili.
9     [PamelaSW]$ . set_env.sh
10     In particolare servono le variabili utili per utilizzare le funzionalita' di ROOT ($ROOTSYS)
11    
12     Creare DB: yoda_db
13     user: yoda_user
14     pwd: yoda_pwd
15     Per creare le tabelle usare "/PamelaSW/DBScript/db.sql"
16    
17     Da PamelaSW e' possibile fare make per buildare tutto.
18     Tutti i Makefile sono stati riscritti.
19     Non serve piu' digitare "aclocal autoheader libtool automake autoconf configure" ne settare tutte le variabili d'ambiente necessarie a Yoda e Log4cxx.
20     Si utilizzano soltanto i Makefile nelle varie directory ed eventualmente si devono modificare i Make.def relativi.
21    
22     Nella cartella /PamelaSW/event/ c'e' la libreria Yoda (libyoda.so)
23     Si linka dinamicamente e quindi serve export LD_LIBRARY_PATH=$BASEDIR/event:$LD_LIBRARY_PATH
24     La libreria libyoda.so si puo buildare separatamente dalla cartella "/PamelaSW/event/".
25     Per informazioni aggiuntive su come buildare digitare: [PamelaSW/event]$ make help
26     Questa parte contiene le classi "Packet Event" come nella versione originale (yoda).
27     Le modifiche sono state volte principalmente alla sostituzione del sistema di logging e alla soluzione di alcuni bugs.
28     Inoltre la classe RunInfo e' stata sostituita da RunInfoYoda.
29    
30     Il sorgente dell'eseguibile "chewbacca" e' in /PamelaSW/PamOffLineSW.
31     Per informazioni aggiuntive su come buildare digitare: [PamelaSW/PamOffLineSW]$ make help
32     In questa parte si trovano tutte le classi nuove necessarie a parserare il file di input alla ricerca e identificazione di un pacchetto pamela.
33     Per ogni pacchetto trovato e' possibile determinare se puo' essere considerato consecutivo al precedente o meno e quindi creare un file di ROOT per ogni gruppo di pacchetti continui trovati.
34    
35     Nella sottocartella /PamelaSW/PamOffLineSW/forroutines/ viene creata la libreria libforrou.a linkata staticamente da chewbacca.
36     Questa sostanzialmente non e' stata modificata rispetto la versione originale.
37     Per informazioni aggiuntive su come buildare digitare: [PamelaSW/PamOffLineSW/forroutines]$ make help
38    
39     Nella sottocartella /PamelaSW/PamOffLineSW/physics/ viene creata la libreria libdevreaders.a linkata staticamente da chewbacca.
40     Le modifiche qui sono state principalmente relative alla sostituzione del sistema di logging.
41     Per informazioni aggiuntive su come buildare digitare: [PamelaSW/PamOffLineSW/physics]$ make help
42    
43     Nella sottocartella /PamelaSW/PamOffLineSW/techmodel/ viene creata la libreria libtechmodel.a linkata staticamente da chewbacca.
44     Questa parte contiene le classi "Packet Reader".
45     Evidentemente qui le modifiche sono state parecchie rispetto la versione originale di Yoda.
46     Nella vecchia versione c'era bisogno di un file di input (l'output del RawReader) che veniva parserato e di volta in volta chiamava il "reader" appropriato per il giusto tipo di pacchetto trovato.
47     Nella nuova versione il pacchetto e' gia stato correttemente evidenziato dal modulo precedente ed arriva come un buffer al modulo reader.
48     Questo implica che il modulo viene chiamato una volta per ogni pacchetto trovato, quindi e' stato necessario correggere tutte le parti di codice che portavano a memory leaks.
49     Sono stati risolti anche molti altri bugs e imprecisioni nelle varie classi.
50     Per informazioni aggiuntive su come buildare digitare: [PamelaSW/PamOffLineSW/techmodel]$ make help
51    
52     ###################### USAGE ####################################
53    
54     [PamelaSW/PamOffLineSW]$ ./chewbacca INPUT_FILE [OPTIONS]
55    
56     Le possibili opzioni e il modo di utilizzare l'eseguibile vengono mostrate digitando il seguente comando:
57     [PamelaSW/PamOffLineSW]$ ./chewbacca -help
58    
59     Esempio di utilizzo tipico:
60     [PamOffLineSW]$ ./chewbacca /PamelaSW/data/input/08152004.pam -outDir /PamelaSW/data/08152004/ -filelog /PamelaSW/data/08152004/logfile.txt -loglevel 3 -vrl -delta_counter 5
61    
62     Per cambiare i parametri relativi al DB si possono usare le seguenti opzioni:
63     -db_host set the host-name of the DataBase. [default = localhost]
64     -db_port set the port of the DataBase. [default = 3306]
65     -db_name set the name of the DataBase. [default = yoda_db]
66     -db_user set the user of the DataBase. [default = yoda_user]
67     -db_pwd set the user of the DataBase. [default = yoda_pwd]
68    
69     Se il file di input contiene dati simulati senza header VRL si deve usare l'opzione -simu.
70     Tale opzione e' utile anche se vuole utilizzare come input un file ottenuto come output del vecchio RawReader.
71    
72     Per variare la verbosita' dei messaggi salvati nel file di log e' possibile utilizzare l'opzione:
73     -loglevel set the log level. Values: [0,3](error,warning,info,all) [default:0]
74     Il valore suggerito e' loglevel = 2 (info)
75     Il nome del file di log e configurabile usando l'opzione:
76     -filelog set the log filename. [default: pamofflinesw.log]
77    
78     Per abilitare i check sulla continuita' dei pacchetti e' necessario utilizzare le opzioni:
79     -delta_counter set the allowed difference in the Packet Counter between two continuos packets. If 0 all packets are considered continuos. [default = 0]
80     -delta_obt set the allowed difference (ms) in the Packet Orbital Time between two continuos packets. If 0 all packets are considered continuos. [default = 0]
81    
82     I valori suggeriti sono delta_counter=5 delta_obt=0 (unused)
83    
84     Il DB viene utilizzato, come spiegato meglio in seguito, solo se vengono fatti controlli relativi alla discontinuita' e quindi solo se delta_counter (e/o delta_obt) e' diverso da zero.
85     I ROOT file finali conterranno in tal caso ognuno un set continuo di pacchetti.
86    
87     In caso contrario (delta_counter=delta_obt=0) chewbacca si comportera' come se avessi usato in serie il vecchio RawReader e Yoda, ossia creera' N file di ROOT uno per ogni download trovato nel file di input.
88    
89     Il nome del file di input deve essere del tipo nnnnnmmm.pam
90     Da questo vengono infatti estratti l'orbit number = nnnnn e il session number = mmm
91     In caso si usasse un file con nome diverso si possono usare le seguenti opzioni per settare tali valori:
92     -orbit_number Value of the orbital number. If 0 this is retrieved from the input file name. [default = 0]
93     -session_number Value of the session number. If 0 this is retrieved from the input file name. [default = 0]
94    
95     Evidentemente il file di input deve esistere.
96     L'informazione con il path completo del file di input viene salvato nel file di log e nel DB finale.
97    
98     Mentre leggo l'input ogni volta che identifico un nuovo download incremento una variabile che rappresenta il download_number.
99     Per ogni download all'interno di uno stesso downlink sicuramente ho un discontinuita', e quindi almeno un file di ROOT per ogni download.
100    
101     I ROOT file finali avranno nome del tipo: (root_name)_(orbit_number)_(session_number)_(download_number)_(N).root
102     dove root_name = parte iniziale del nome e' configurabile da riga di comando usando l'opzione:
103     -root_name set the root-name for the generated ROOT file(s). [default = yoda]
104     e N e' un contatore per il numero di discontinuita' trovate.
105    
106     Durante la lettura del file di input ogni cadre viene controllata se e' abilitata l'opzione -vrl.
107     Se la cadre e' "non buona" (ad esempio se il check del CRC fallisce) tutti i pacchetti che hanno una parte dei dati contenuti nella suddetta cadre vengono etichettati come pacchetti non buoni (BAD_PKT).
108    
109     Per ogni download viene ricavato il time_Offset necessario per calcolare il tempo assoluto.
110     Nel caso si conosca il time_Offset ed questi sia lo stesso per tutto il downlink si puo' usare l'opzione:
111     -time_Offset Value of the timeOffset. If 0 this is retrieved using the orbital number. [default = 0]
112    
113     Il timeOffset viene ottenuto attraverso una query al DB.
114     In particolare si legge dalla tabella yoda_db.GL_RESURS_OFFSET in modo analogo a quanto attualmente fa' YodaProfiler.
115    
116     Un pacchetto viene trovato se tra i dati di una o piu' cadres consecutive ci sono 16 bytes consecutivi che iniziano per "0xFA 0xFE 0xDE" e che passano il check sul CRC.
117    
118     Analizzando l'header del pacchetto vengono estratte le informazioni sul Packet Counter e OBT.
119     Comparando questi valori con i valori del pacchetto precedentemente utilizzato e' possibile stabilire se il pacchetto e' da considerarsi consecutivo rispetto al precedente o meno.
120    
121     Il ROOT file finale contiene un set continuo di pacchetti se il check sulla continuita' e' abilitato.
122     Ogni volta infatti che una discontinuita' viene trovata viene chiuso e salvato un file di ROOT contenente i pacchetti precedentemente arrivati e viene aperto un nuovo file di ROOT che conterra' il successivo set di pacchetti continui.
123    
124     Un pacchetto e' considerato consecutivo al precedente se la differenza tra il packet counter del pacchetto corrente e quello del pacchetto precedente DELTA_PC soddisfa la seguente condizione:
125     DELTA_PC < delta_counter (valore configurabile da linea di comando usando -delta_counter)
126     Nel caso il pacchetto passi il check di continuita' sul Packet Counter viene fatto un chek analgo utilizzando il Packet OBT
127    
128     Per ogni download se trovo un packetto di tipo RunHeader o RunTrailer ricavo i valori necessari al time sync ossia: OBT_TIME_SYNC e LAST_TIME_SYNC_INFO.
129     Utilizzando i valori dell' OBT iniziale e finale e il TIME_OFFSET puo' essere ricavato il tempo assoluto del primo e dell'ultimo pacchetto:
130     real_time_init= (obt_init/1000-obt_time_sync)+last_time_sync_info + timeOffset;
131     real_time_last= (obt_last/1000-obt_time_sync)+last_time_sync_info + timeOffset;
132    
133     In questo modo un set continuo di pacchetti puo' essere associato ad un determinato intervallo temporale.
134    
135     Ogni pacchetto viene passato al modulo "Packet Reader" nel quale a seconda del tipo di pacchetto viene analizzato utilizzando le appropriate classi.
136     In questo modulo sono definite piu tipi di eccezioni.
137     Nei casi in cui il pacchetto e' per qualche motivo da considerarsi "non buono', questi non viene utilizzato e aggiunto al ROOT file.
138     In alcuni casi invece il pacchetto viene utilizzato come se fosse un pacchetto buono a tutti gli effetti pur non avendo passato alcuni check, ad esempio check sul CRC dei sottopacchetti.
139     In questi casi viene loggato un warning nel file di log e il pacchetto e' etichettato come un pacchetto non buono (BAD_PKT_READ) ma comunque salvato nel file di ROOT.
140     I pacchetti di calibrazione che per qualche motivo vengono considerati non buoni seppur salvati nel ROOT file vengono etichettati come non buoni ma utilizzando una etichetta diversa BAD_PKT_CALREAD e loggando un messaggio di errore nel file di log.
141     Le informazioni relative ai file di calibrazione con errore vengono inoltre salvate sul DB nella tabella BAD_PKT_TABLE.
142     In questa tabella si salva il suo Packet_counter, l'OBT e il nome del ROOT file che lo contiene.
143    
144     Nella versione attuale tutti i pacchetti di calibrazione trovati vengono considerati non buoni.
145     Inoltre questi pacchetti vengono anche salvati su file in modo da poter essere controllati separatamente in seguito.
146     Il nome di questi file e'del tipo pkt12728_of_yoda_07790_001_002_0.pkt ossia numero del paccketto 12728 salvato nel ROOT file di nome "yoda_07790_001_002_0".
147     Questa funzionalita' verra' presto rimossa o abilitata facoltivamente utilizzando un apposita opzione.
148    
149     Quando un file di ROOT viene chiuso e salvato se il check sulla continuita' dei pacchetti e' stato abilitato vengono salvate sul DB tutte le informazioni relative al file di ROOT.
150    
151     In particolare se non e' stato possibile associare un tempo assoluto al gruppo di pacchetti in questione, e cio' accade se tra di essi non c'e' nessun pacchetto buono di tipo RunHeader o RunTrailer, il record viene salvato nella tabella ROOT_TABLE_BAD altrimenti nella tabella ROOT_TABLE.
152     In queste tabelle si salva il numero di pacchetti salvati,
153     il numero di pacchetti di calibrazione con errore BAD_PKT_CALREAD,
154     il numero di pacchetti con errore BAD_PKT_READ e quelli senza errore ma comunque provenienti da una o piu cadre che non hanno superato i check vrl BAD_PKT oltre alle informazioni relative al primo e l'ultimo pacchetto del gruppo.
155     Con queste informazioni e' possibile tentare di fare a posteriori una operazione di merge/clean tra piu file di ROOT che coprono intervalli temporali parzialmente sovrapponibili scegliendo ad esempio quelli che hanno un minor numero di pacchetti con errore.
156     Si e' scelto di separare il numero di pacchetti di calibrazione con errore dagli altri tipi di errore in quanto per una analisi corretta e' necessario che questi pacchetti siano affidabili.
157    
158     Se si vuole tentare la prima versione del Merging si puo' usare l'opzione:
159     -tryMerge if you want to try to Merge ROOT files
160    
161     In questo caso viene riempita la tabella ROOT_TABLE_ASS nel DB.
162     Cosi facendo per ogni file di ROOT che contenga almeno 2 pacchetti buoni si cercano tutti i file di ROOT (con almeno 2 pacchetti buoni) gia' presenti nel DB che coprano un intervallo temporale di interesse.
163     Nella tabella ROOT_TABLE_ASS per ogni record si salva l'ID relativo al ROOT file in questione e quello del ROOT file ad esso associato dalla tabella ROOT_TABLE e il tipo di associazione trovato.
164     In particolare i tipi di associazione sono espressi da interi:
165     0 =AFTER se temporalmente viene subito dopo il ROOT file associato
166     1 =AFTER2 se c'e' una sovrapposizione temporale parziale, inizia dopo l'inizio di quello associato e finisce dopo la sua fine
167     2 =BEFORE se temporalmente viene subito prima del ROOT file associato
168     3 =BEFORE2 se c'e' una sovrapposizione temporale parziale, ossia finisce prima della fine di quello associato ma inizia prima
169     4 =SMALLER se c'e' una sovrapposizione temporale parziale: e' contenuto nel ROOT file associato
170     5 =BIGGER se c'e' una sovrapposizione temporale parziale: contiene il ROOT file associato
171    
172     Per ogni record nel DB viene inoltre salvato un ID incrementale unico e il tempo in cui questo record e' stato insertito.
173    

  ViewVC Help
Powered by ViewVC 1.1.23