source: Sophya/trunk/FrEROS/AnaLC/nbsreadu_base.cc@ 3822

Last change on this file since 3822 was 3572, checked in by cmv, 17 years ago

char* -> const char* pour regler les problemes de deprecated string const... + comparaison unsigned signed + suppression EVOL_PLANCK rz+cmv 07/02/2009

  • Property svn:executable set to *
File size: 5.0 KB
Line 
1/*
2- Test des divers calcul de ligne de base pour la couleur 0
3 (la couleur 1 n'est pas traitee)
4*/
5#include "sopnamsp.h"
6#include "machdefs.h"
7#include <stdlib.h>
8#include <math.h>
9#include <stdio.h>
10#include <string.h>
11
12#include "fsvcache.h"
13#include "nbmath.h"
14#include "fmath.h"
15#include "filtccd.h"
16#include "fsvst.h"
17#include "nbsread.h"
18#include "nbgene.h"
19
20#include "ntuple.h"
21
22void FILL_USER(void);
23
24#define N 5
25
26float *TimeU,*FluxU,*FluxFlU,*eFluxU,*eFluxFlU,*FluxUnoA,*AmpliU;
27int_4 npt_;
28
29POutPersist *pos_ = NULL;
30NTuple *ntbase = NULL;
31
32/*==========================================================================*/
33void UINIT(void)
34{
35 pos_ = new POutPersist("nbsread_base.ppf");
36}
37
38/*===========================================================================*/
39#define NXNT 28
40void UINITCCD(void)
41{
42int_4 n;
43n = ( nmesure[0] > 0 ) ? nmesure[0] : 1 ;
44TimeU = (float*) malloc((size_t) n*sizeof(float));
45FluxU = (float*) malloc((size_t) n*sizeof(float));
46eFluxU = (float*) malloc((size_t) n*sizeof(float));
47FluxFlU = (float*) malloc((size_t) n*sizeof(float));
48eFluxFlU = (float*) malloc((size_t) n*sizeof(float));
49FluxUnoA = (float*) malloc((size_t) n*sizeof(float));
50AmpliU = (float*) malloc((size_t) n*sizeof(float));
51
52// Create NTuple
53const char *nament[NXNT] = {
54 "et","xref","flr","dm1","dm21","xp","yp","npt"
55 ,"mean","sig","sigi"
56 ,"meanB","sigB"
57 ,"meanS","sigS","rcS"
58 ,"meanSs","sigSs","rcSs"
59 ,"meanP","rcP"
60 ,"meanPs","rcPs"
61 ,"u0","t0","tau","a0","npta"
62};
63if(ntbase == NULL) delete ntbase;
64ntbase = new NTuple(NXNT,nament);
65
66}
67
68/*=========================================================================*/
69void UDATCLEAN(int coul)
70/* pour tuer une photo selon des criteres utilisateur, mettre date a GRAND2 */
71{
72int_4 ic = coul-1;
73if(nmes[ic]<=0) return;
74for(int i=0;i<nmes[ic];i++) {
75 if(date[ic][i]<0.) date[ic][i] = GRAND2;
76 if(timeu[ic][i].FgCalib<=0) date[ic][i] = GRAND2;
77}
78}
79
80/*=========================================================================*/
81void UEVT(void)
82{
83int i,n,rc,nptas;
84float mean,sigmaI,sigma,most;
85float xnt[NXNT];
86
87/* association rouge-bleu existante et correcte */
88if(staru[0].NumEt <= 0 ) return;
89if(staru[0].FluxRef<= 0.) return;
90for(i=0;i<NXNT;i++) xnt[i] = -9999.;
91
92FILL_USER();
93
94if( iet[0]%50 == 0 )
95 printf("UEVT: et=[%7d,%7d] pt nmesure=[%5d] npt=[%5d]\n"
96 ,iet[0],iet[1],nmesure[0],npt_);
97
98/* on remplit le ntuple de selection */
99xnt[0]= iet[0];
100xnt[1]= staru[0].XRef;
101xnt[2] = staru[0].FluxRef;
102xnt[3] = staru[0].DisMin;
103xnt[4] = staru[0].DisM2;
104xnt[5] = staru[0].XPos;
105xnt[6] = staru[0].YPos;
106xnt[7] = npt_;
107
108/****************** Filtre Median *******************************/
109n = npt_;
110rc = FiltMed(FluxU,eFluxU,FluxFlU,eFluxFlU,n);
111if(rc<0) for(i=0;i<npt_;i++) {FluxFlU[i]=FluxU[i]; eFluxFlU[i]=eFluxU[i];}
112
113/****************** Moyenne non amplifiee *******************************/
114n = npt_;
115rc = MeanLine(FluxUnoA,eFluxU,&n,2,4.,&mean,&sigma);
116if(rc==0) {
117 xnt[8] = mean;
118 xnt[9] = sigma;
119}
120
121/*********************** Calcul du sigma interne ***************************/
122nptas = 0;
123n = npt_;
124sigmaI = SigmaInt(TimeU,FluxU,eFluxU,&n,4.);
125if(sigmaI>0) {
126 xnt[10] = sigmaI;
127}
128if(sigmaI>0 && mean>0) {
129 for(i=0;i<npt_;i++) if(eFluxU[i]>0 && (AmpliU[i]-1.)*mean<sigmaI) nptas++;
130}
131
132/****************** Calcul de la base sur donnees filtrees ************/
133n = npt_; rc=-1;
134if(sigmaI>0) rc = BaseLine(FluxFlU,eFluxFlU,&n,4.,sigmaI,&mean,&sigma,&most);
135if(rc>=0) {
136 xnt[11] = most;
137 xnt[12] = sigma;
138}
139
140rc = BaseLineS(FluxU,eFluxU,npt_,N,&mean,&sigma);
141if(rc>0) {
142 xnt[13] = mean;
143 xnt[14] = sigma;
144 xnt[15] = rc;
145}
146
147rc = BaseLineS(FluxU,eFluxU,npt_,-N,&mean,&sigma);
148if(rc>0) {
149 xnt[16] = mean;
150 xnt[17] = sigma;
151 xnt[18] = rc;
152}
153
154rc = BaseLineP(FluxU,eFluxU,npt_,N,&mean);
155if(rc>0) {
156 xnt[19] = mean;
157 xnt[20] = rc;
158}
159
160rc = BaseLineP(FluxU,eFluxU,npt_,-N,&mean);
161if(rc>0) {
162 xnt[21] = mean;
163 xnt[22] = rc;
164}
165
166xnt[23] = mc.U0Sim;
167xnt[24] = mc.T0Sim;
168xnt[25] = mc.TauSim;
169xnt[26] = mc.A0Max;
170xnt[27] = nptas;
171
172ntbase->Fill(xnt);
173
174}
175
176/*=========================================================================*/
177void UENDCCD(void)
178{
179free(TimeU); free(FluxU); free(eFluxU); free(FluxUnoA);
180free(FluxFlU); free(eFluxFlU); free(AmpliU);
181
182if(ntbase->NEntry()>0) pos_->PutObject(*ntbase,"ntbase");
183if(ntbase!=NULL) delete ntbase; ntbase = NULL;
184}
185
186/*=========================================================================*/
187void UEND(void)
188{
189 if(pos_!=NULL) delete pos_; pos_ = NULL;
190}
191
192/*=========================================================================*/
193void FILL_USER(void)
194{
195int i,j;
196double Flux,FluxB,Xi2,ErrFlux;
197
198npt_=0;
199for(i=0;i<nmesure[0];i++) {
200 j = indexu[0][i];
201 FluxB = mesu[0][j].FluxB;
202 Flux = mesu[0][j].Flux;
203 ErrFlux = mesu[0][j].ErrFlux;
204 Xi2 = mesu[0][j].Xi2;
205 if( ErrFlux<0. ) ErrFlux *= -1.;
206 if( Xi2<=0. || ErrFlux==0. ) continue;
207 TimeU[npt_] = date[0][j];
208 FluxUnoA[npt_] = Flux;
209 if(mc.montecar > 0) Flux *= ampli[0][j];
210 AmpliU[npt_] = ampli[0][j];
211 FluxU[npt_] = Flux;
212 eFluxU[npt_] = ErrFlux;
213 npt_++;
214}
215
216}
Note: See TracBrowser for help on using the repository browser.