/[PAMELA software]/calo/flight/CaloProfile/src/CaloProfile.cpp
ViewVC logotype

Diff of /calo/flight/CaloProfile/src/CaloProfile.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.8 by mocchiut, Tue Aug 11 14:23:09 2009 UTC revision 1.14 by mocchiut, Thu Sep 10 12:53:57 2009 UTC
# Line 4  ClassImp(CaloLat); Line 4  ClassImp(CaloLat);
4  ClassImp(CaloLong);  ClassImp(CaloLong);
5  ClassImp(Calo2D);  ClassImp(Calo2D);
6    
7    
8    int isempty(struct stack *s){
9      return (s->top == EMPTY) ? 1 : 0;
10    }
11    
12    void emptystack(struct stack* s){
13      s->top=EMPTY;
14      strcpy(s->data,"                                                 ");
15    }
16    
17    void push(struct stack* s,int item){
18      if(s->top == (MAX-1)){
19        printf("\n ERROR! STACK FULL (too many digits in SetLower/UpperLimit)\n");
20      } else {
21        s->data[++s->top]=(char)item;
22      };
23    }
24    
25    char pop(struct stack* s){
26      char ret=(char)EMPTY;
27      if(!isempty(s)){
28        ret= s->data[s->top--];
29      };
30      return ret;
31    }
32    
33    
34    int ipop(struct stack* s){
35      int ret=EMPTY;
36      if(s->top == EMPTY)
37        printf("\n ERROR! STACK EMPTY (too few digits in SetLower/UpperLimit)\n");
38      else {
39        ret= s->data[s->top--];
40      };
41      return ret;
42    }
43    
44    
45    void display(struct stack s){
46      int ss = s.top;
47      while(s.top != EMPTY){
48        printf("\n%d",s.data[s.top--]);
49      };
50      printf(" s.top %i \n",ss);
51    }
52    
53    int isoperator(char e){
54      if(e == '+' || e == '-' || e == '*' || e == '/' || e == '%')
55        return 1;
56      else
57        return 0;
58    }
59    
60    
61    int priority(char e){
62      int pri = 0;
63      if(e == '*' || e == '/' || e =='%')
64        pri = 2;
65      else {
66        if(e == '+' || e == '-') pri = 1;
67      };
68      return pri;
69    }
70    
71    void infix2postfix(char* infix, char * postfix, int insertspace){
72      char *i,*p;
73      struct stack X;
74      char n1;
75      emptystack(&X);
76      i = &infix[0];
77      p = &postfix[0];  
78      while(*i){
79        while(*i == ' ' || *i == '\t' ){
80          i++;
81        };    
82        TString c=i;
83        if( isdigit(*i) || isalpha(*i) || c.BeginsWith(".") ){
84          while( isdigit(*i) || isalpha(*i) ||  c.BeginsWith(".") ){
85            *p = *i;
86            p++;
87            i++;
88            c=i;
89          };
90          /*SPACE CODE*/
91          if(insertspace){
92            *p = ' ';
93            p++;
94          };
95          /*END SPACE CODE*/
96        };    
97        if( *i == '(' ){
98          push(&X,*i);
99          i++;
100        };
101        if( *i == ')'){
102          n1 = pop(&X);
103          while( n1 != '(' ){
104            *p = n1;
105            p++;
106            /*SPACE CODE*/
107            if(insertspace){
108              *p = ' ';
109              p++;
110            };
111            /*END SPACE CODE*/
112            n1 = pop(&X);
113          };
114          i++;
115        };    
116        if( isoperator(*i) ){
117          if(isempty(&X)){
118            push(&X,*i);
119          } else {
120            n1 = pop(&X);
121            while( priority(n1) >= priority(*i) ){
122              *p = n1;
123              p++;
124              /*SPACE CODE*/
125              if(insertspace){
126                *p = ' ';
127                p++;
128              };
129              /*END SPACE CODE*/
130              n1 = pop(&X);
131            };
132            push(&X,n1);
133            push(&X,*i);
134          };
135          i++;
136        };
137      };
138      while(!isempty(&X)){
139        n1 = pop(&X);
140        *p = n1;
141        p++;
142        /*SPACE CODE*/
143        if(insertspace){
144          *p = ' ';
145          p++;
146        };
147        /*END SPACE CODE*/
148      };
149      *p = '\0';
150    }
151    
152    
153    Float_t evaluate(char *postfix){
154      //
155      Float_t op1 = 0.;
156      Float_t op2 = 0.;
157      Float_t result = 0.;
158      //
159      TString e = postfix;
160      Float_t st[50];
161      memset(st,0,50*sizeof(Float_t));
162      TObjArray *ae = e.Tokenize(" ");
163      Int_t o = 0;
164      Int_t a = 0;    
165      Int_t ap = 0;    
166      //
167      while ( o < ae->GetEntries() ){
168        if (  ((TString)(((TObjString*)ae->At(o))->GetString())).IsFloat() ){
169          st[a] = (Float_t)((TString)(((TObjString*)ae->At(o))->GetString())).Atof();;
170          a++;
171        } else {      
172          ap = a-1;
173          op1 = st[ap--];
174          op2 = st[ap];
175          const char *p=((TString)(((TObjString*)ae->At(o))->GetString())).Data();
176          switch(*p){
177           case '+':
178            result = op2 + op1;
179            break;
180          case '-':
181            result = op2 - op1;
182            break;
183          case '/':
184            result = op2 / op1;
185            break;
186          case '*':
187            result = op2 * op1;
188            break;
189          case '%':
190            result = (Int_t)round(op2) % (Int_t)round(op1);
191            break;
192          default:
193            printf("\nInvalid Operator: %s \n",((TString)(((TObjString*)ae->At(o))->GetString())).Data());
194            return 0;
195          };
196          st[ap] = result;
197          a = ap+1;
198          //
199        };
200        o++;
201      };
202      return result;
203      //
204    }
205    
206    
207    
208  ////////////////////////////////////////////////////////////////////////              ////////////////////////////////////////////////////////////////////////            
209  /**  /**
210   * 1-dimension function describing lateral distribution of the   * 1-dimension function describing lateral distribution of the
# Line 80  CaloLat::CaloLat(PamLevel2 *l2p){   Line 281  CaloLat::CaloLat(PamLevel2 *l2p){  
281    PKT = 0;    PKT = 0;
282    atime = 0;    atime = 0;
283    //    //
284      suf = "";
285    debug = false;    debug = false;
286    //    //
287  };  };
# Line 96  Calo2D::Calo2D(PamLevel2 *l2p){   Line 298  Calo2D::Calo2D(PamLevel2 *l2p){  
298    PKT = 0;    PKT = 0;
299    atime = 0;    atime = 0;
300    //    //
301      suf = "";
302    debug = false;    debug = false;
303    //    //
304  };  };
# Line 174  void CaloLat::Draw(Int_t view,Int_t plan Line 377  void CaloLat::Draw(Int_t view,Int_t plan
377    //    //
378    for (Int_t v=minv; v<maxv;v++){    for (Int_t v=minv; v<maxv;v++){
379       for (Int_t p=minp; p<maxp;p++){       for (Int_t p=minp; p<maxp;p++){
380          TString hid = Form("clatv%ip%i",v,p);           TString hid = Form("clatv%ip%i%s",v,p,suf.Data());      
381          TCanvas *tc  = dynamic_cast<TCanvas*>(gDirectory->FindObject(hid));          TCanvas *tc  = dynamic_cast<TCanvas*>(gDirectory->FindObject(hid));
382          if ( tc ){          if ( tc ){
383  //       tc->Clear();  //       tc->Clear();
# Line 182  void CaloLat::Draw(Int_t view,Int_t plan Line 385  void CaloLat::Draw(Int_t view,Int_t plan
385           tc = new TCanvas(hid,hid);           tc = new TCanvas(hid,hid);
386          };          };
387          //          //
388          TString thid = Form("hlatv%ip%i",v,p);            TString thid = Form("hlatv%ip%i%s",v,p,suf.Data());    
389          TH1F *th  = dynamic_cast<TH1F*>(gDirectory->FindObject(thid));          TH1F *th  = dynamic_cast<TH1F*>(gDirectory->FindObject(thid));
390          if ( th ) th->Delete();          if ( th ) th->Delete();
391  //       th->Clear();  //       th->Clear();
# Line 225  void Calo2D::Draw(Int_t plane){ Line 428  void Calo2D::Draw(Int_t plane){
428    gStyle->SetNdivisions(510,"XY");    gStyle->SetNdivisions(510,"XY");
429    //    //
430    for (Int_t p=minp; p<maxp;p++){    for (Int_t p=minp; p<maxp;p++){
431      TString hid = Form("c2dp%i",p);          TString hid = Form("c2dp%i%s",p,suf.Data());        
432      TCanvas *tc  = dynamic_cast<TCanvas*>(gDirectory->FindObject(hid));      TCanvas *tc  = dynamic_cast<TCanvas*>(gDirectory->FindObject(hid));
433      if ( tc ){      if ( tc ){
434        //         tc->Clear();        //         tc->Clear();
# Line 233  void Calo2D::Draw(Int_t plane){ Line 436  void Calo2D::Draw(Int_t plane){
436        tc = new TCanvas(hid,hid);        tc = new TCanvas(hid,hid);
437      };      };
438      //      //
439      TString thid = Form("h2dp%i",p);          TString thid = Form("h2dp%i%s",p,suf.Data());      
440      TH2F *th  = dynamic_cast<TH2F*>(gDirectory->FindObject(thid));      TH2F *th  = dynamic_cast<TH2F*>(gDirectory->FindObject(thid));
441      if ( th ) th->Delete();      if ( th ) th->Delete();
442      //   th->Clear();      //   th->Clear();
# Line 466  CaloLong::CaloLong(PamLevel2 *l2p){   Line 669  CaloLong::CaloLong(PamLevel2 *l2p){  
669    maskYE = false;    maskYE = false;
670    maskYO = false;    maskYO = false;
671    //    //
672      lmax = 0.;
673      umax = 100.;
674      slmax = "";
675      sumax = "";
676      suf = "";
677      xyaverage = true;
678      //
679      letmax = -1;
680      heavytail = false;
681      lmipth = 100.;
682      //
683  };  };
684    
685  void CaloLong::MaskSection(TString sec){  void CaloLong::MaskSection(TString sec){
# Line 495  void CaloLong::Clear(){ Line 709  void CaloLong::Clear(){
709    chi2 = 0.;    chi2 = 0.;
710    ndf = 0.;    ndf = 0.;
711    E0 = 0.;    E0 = 0.;
712      defE0 = 0.;
713    a = 0.;    a = 0.;
714    b = 0.;    b = 0.;
715    errE0 = 0.;    errE0 = 0.;
# Line 520  void CaloLong::Print(){ Line 735  void CaloLong::Print(){
735    printf(" nchi2    :.. %f\n",chi2/ndf);    printf(" nchi2    :.. %f\n",chi2/ndf);
736    printf(" E0       :.. %f\n",E0);    printf(" E0       :.. %f\n",E0);
737    printf(" E0/260.  :.. %f\n",E0/260.);    printf(" E0/260.  :.. %f\n",E0/260.);
738      printf(" defE0    :.. %f\n",defE0);
739      printf(" lower    :.. %f\n",lmax);
740      printf(" upper    :.. %f\n",umax);
741      printf(" s lower  :.. %s\n",slmax.Data());
742      printf(" s upper  :.. %s\n",sumax.Data());
743    printf(" a        :.. %f\n",a);    printf(" a        :.. %f\n",a);
744    printf(" b        :.. %f\n",b);    printf(" b        :.. %f\n",b);
745    printf(" errE0    :.. %f\n",errE0);    printf(" errE0    :.. %f\n",errE0);
# Line 758  void CaloLong::SetEnergies(Float_t myene Line 978  void CaloLong::SetEnergies(Float_t myene
978    //    //
979    if ( vmax == 0 ) pmax++;    if ( vmax == 0 ) pmax++;
980    etmax = pmax * X0pl;    etmax = pmax * X0pl;
981      if ( letmax < 0. ) letmax = etmax;
982    //    //
983    if ( debug ) this->Print();    if ( debug ) this->Print();
984    if ( debug ) printf(" exit \n");    if ( debug ) printf(" exit \n");
# Line 782  void CaloLong::Fit(){ Line 1003  void CaloLong::Fit(){
1003    this->Fit(false);    this->Fit(false);
1004  };  };
1005    
1006    Float_t CaloLong::Evaluate(TString s, Float_t tmax, Float_t X0pl){
1007      /* SAMPLE OUTPUT:
1008         Enter Infix Expression : A + B + C / (E - F)
1009         Postfix Expression is : A B + C E F - / +  
1010      */  
1011      if ( !s.Contains("tmax") && !s.Contains("X0pl") ){
1012        printf(" ERROR, the input formula must contain \"t\"\n");
1013        return 0.;
1014      };
1015      if ( tmax != tmax ){
1016        printf(" ERROR, tmax is nan! \n");
1017        return 0.;
1018      };
1019      TString g=Form("%f",tmax);
1020      TString h=Form("%f",X0pl);
1021      TString *ts= new TString("");
1022      ts->Prepend(s.Data());
1023      ts->ReplaceAll("tmax",4,g.Data(),g.Capacity());
1024      ts->ReplaceAll("X0pl",4,h.Data(),h.Capacity());
1025      ts->Prepend("(");
1026      ts->Append(")");
1027      if ( debug )  printf(" ts %s tssize %i capac %i s %s g %s \n",ts->Data(),ts->Sizeof(),ts->Capacity(),s.Data(),g.Data());
1028      char in[50],post[50];  
1029      strcpy(&in[0],"                                                 ");
1030      strcpy(&in[0],ts->Data());
1031      strcpy(&post[0],"                                                 ");
1032      if ( debug ) printf("Infix Expression is : ##%s##\n",&in[0]);
1033      infix2postfix(&in[0],&post[0],1);
1034      if ( debug ) printf("Postfix Expression is : ##%s##\n",&post[0]);
1035      /* SAMPLE OUTPUT:
1036         Enter Postfix Expression : 3 5 + 2 /
1037         3 5 + 2 / EQUALS 4
1038      */
1039      Float_t res = evaluate(&post[0]);
1040      if ( debug ) printf("%s EQUALS %f\n",post,res);
1041      return res;
1042    }
1043    
1044  void CaloLong::Fit(Bool_t draw){  void CaloLong::Fit(Bool_t draw){
1045    //    //
1046    Process();    Process();
# Line 815  void CaloLong::Fit(Bool_t draw){ Line 1074  void CaloLong::Fit(Bool_t draw){
1074      gStyle->SetNdivisions(510,"XY");      gStyle->SetNdivisions(510,"XY");
1075    };    };
1076    //    //
1077    TString hid = Form("clongfit");          TString hid = Form("clongfit%s",suf.Data());  
1078    TCanvas *tc  = dynamic_cast<TCanvas*>(gDirectory->FindObject(hid));    TCanvas *tc  = dynamic_cast<TCanvas*>(gDirectory->FindObject(hid));
1079    //  if ( tc ) tc->Delete();    //  if ( tc ) tc->Delete();
1080    //  if ( tc ) tc->Close();    //  if ( tc ) tc->Close();
# Line 825  void CaloLong::Fit(Bool_t draw){ Line 1084  void CaloLong::Fit(Bool_t draw){
1084      if ( tc ) tc->cd();      if ( tc ) tc->cd();
1085    };    };
1086    //    //
1087    TString thid = Form("hlongfit");          TString thid = Form("hlongfit%s",suf.Data());
1088    TH1F *th  = dynamic_cast<TH1F*>(gDirectory->FindObject(thid));    TH2F *th  = dynamic_cast<TH2F*>(gDirectory->FindObject(thid));
1089    if ( th ) th->Delete();    if ( th ) th->Delete();
1090      //
1091      TString ghid = Form("glongfit%s",suf.Data());
1092      TGraphErrors *gh  = dynamic_cast<TGraphErrors*>(gDirectory->FindObject(ghid));
1093      if ( gh ) gh->Delete();
1094      //
1095    Float_t xpos = 0.;    Float_t xpos = 0.;
1096    Float_t enemip = 0.;    Float_t enemip = 0.;
1097    Float_t xmax = NC * X0pl + 0.2;    Float_t xmax = NC * X0pl + 0.2;
1098    //  th = new TH1F(thid,thid,int(NC*1.5),-0.2,xmax);    //
1099    th = new TH1F(thid,thid,100,-0.2,xmax);    Double_t xxx[50];
1100      Double_t exx[50];
1101      Double_t yyy[50];
1102      Double_t eyy[50];
1103      Int_t numpo = 0;
1104      memset(xxx,0,50*sizeof(Double_t));
1105      memset(exx,0,50*sizeof(Double_t));
1106      memset(yyy,0,50*sizeof(Double_t));
1107      memset(eyy,0,50*sizeof(Double_t));
1108    //    //
1109    // AGH, BUG!    // AGH, BUG!
1110    //    //
# Line 846  void CaloLong::Fit(Bool_t draw){ Line 1118  void CaloLong::Fit(Bool_t draw){
1118      mmax = NC;      mmax = NC;
1119    };    };
1120    //    //
1121      Float_t emax = 0.;
1122    Float_t qtotparz = 0.;    Float_t qtotparz = 0.;
1123    for (Int_t st=mmin;st<mmax+1;st++){    for (Int_t st=mmin;st<mmax+1;st++){
1124      enemip = 0.;      enemip = 0.;
1125      xpos = (st - mmin) * X0pl;      xpos = (st - mmin) * X0pl;
1126      if ( st > mmin && st < mmax ){            //
1127        if ( no18x && ( st == 18+1 || st == mask18b+1 )){      if ( xyaverage ){
1128          if ( !maskYO ){        //
1129            enemip = 2. * eplane[1][st];        if ( st > mmin && st < mmax ){      
1130            if ( no18x && ( st == 18+1 || st == mask18b+1 )){
1131              if ( !maskYO ){
1132                enemip = 2. * eplane[1][st];
1133              } else {
1134                enemip = eplane[1][st];
1135              };
1136          } else {          } else {
1137            enemip = eplane[1][st];            enemip = eplane[0][st-1] + eplane[1][st];
1138          };          };
1139        } else {        } else {
1140          enemip = eplane[0][st-1] + eplane[1][st];          if ( st == mmin ){
1141              if ( !maskYE ){
1142                enemip = 2. * eplane[1][st];
1143              } else {
1144                enemip = eplane[1][st];
1145              };
1146            };
1147            if ( st == mmax ){
1148              if ( !maskXE ){
1149                enemip = 2. * eplane[0][st-1];
1150              } else {
1151                enemip = eplane[0][st-1];
1152              };
1153            };
1154          };
1155          //
1156          qtotparz += enemip;
1157          if ( enemip > emax ) emax = enemip;
1158          if ( enemip > 0. ){
1159            xxx[numpo] = xpos;
1160            exx[numpo] = 0.1;
1161            yyy[numpo] = enemip;
1162            eyy[numpo] = sqrt(enemip*3.)+sqrt(5.);
1163            if ( xpos > letmax && enemip > lmipth && heavytail) eyy[numpo] = (sqrt(enemip*3.)+sqrt(5.))/numpo;
1164            numpo++;
1165            //      th->Fill(xpos,enemip);
1166            if ( debug ) printf(" AVE Filling: st %i xpos %f energy %f \n",st,xpos,enemip);
1167        };        };
1168      } else {      } else {
1169        if ( st == mmin ){        for (Int_t jj=0; jj<2; jj++){
1170          if ( !maskYE ){          if ( st > mmin && st < mmax ){
1171            enemip = 2. * eplane[1][st];            if ( jj == 0 && no18x && ( st == 18+1 || st == mask18b+1 )){
1172                enemip = eplane[1][st];
1173              } else {
1174                if ( jj == 0 ){
1175                  enemip = eplane[jj][st-1];
1176                } else {
1177                  enemip = eplane[jj][st];
1178                };        
1179              };
1180          } else {          } else {
1181            enemip = eplane[1][st];            if ( st == mmin && jj == 1 ){
1182                enemip = eplane[jj][st];
1183              };
1184              if ( st == mmax && jj == 0){
1185                enemip = eplane[jj][st-1];
1186              };
1187          };          };
1188        };          //
1189        if ( st == mmax ){          qtotparz += enemip;
1190          if ( !maskXE ){        if ( enemip > emax ) emax = enemip;
1191            enemip = 2. * eplane[0][st-1];          if ( enemip > 0. ){
1192          } else {            xxx[numpo] = xpos;
1193            enemip = eplane[0][st-1];            exx[numpo] = 0.1;
1194              yyy[numpo] = enemip;
1195              eyy[numpo] = sqrt(enemip*3.)+sqrt(5.);
1196            if ( xpos > letmax && enemip > lmipth && heavytail ) eyy[numpo] = (sqrt(enemip*3.)+sqrt(5.))/numpo;
1197              //      eyy[numpo] = sqrt(enemip)/(st*0.95);
1198              numpo++;
1199              //      th->Fill(xpos,enemip);
1200              if ( debug ) printf(" XY Filling: st %i xpos %f energy %f \n",st,xpos,enemip);
1201          };          };
1202        };        };        
     };  
     //  
     qtotparz += enemip;  
     if ( enemip > 0. ){  
       th->Fill(xpos,enemip);  
       if ( debug ) printf(" Filling: st %i xpos %f energy %f \n",st,xpos,enemip);  
1203      };      };
1204    
1205      //      //
1206      //    for (Int_t v=1; v>=0;v--)// {      //    for (Int_t v=1; v>=0;v--)// {
1207  //       //  //       //
# Line 907  void CaloLong::Fit(Bool_t draw){ Line 1227  void CaloLong::Fit(Bool_t draw){
1227  //     };  //     };
1228    };    };
1229    //    //
1230    TF1 *lfit = new TF1("lfit",ccurve,0.,xmax,3);    //  th = new TH2F(thid,thid,int(NC*1.5),-0.2,xmax);
1231      th = new TH2F(thid,thid,1000,-0.2,xmax,1000,0.,emax*1.2);
1232      gh = new TGraphErrors(numpo,xxx,yyy,exx,eyy);
1233      TString fnam=Form("lfit%s",suf.Data());
1234      TF1 *lfit  = dynamic_cast<TF1*>(gDirectory->FindObject(fnam));
1235      if ( lfit ) lfit->Delete();
1236      lfit = new TF1(fnam,ccurve,0.,xmax,3);
1237    if ( debug ) printf("qtot %f qtotparz %f \n",clp->qtot,qtotparz);    if ( debug ) printf("qtot %f qtotparz %f \n",clp->qtot,qtotparz);
1238    E0 = qtotparz;    E0 = qtotparz;
1239    //  E0 = clp->qtot;    //  E0 = clp->qtot;
# Line 918  void CaloLong::Fit(Bool_t draw){ Line 1244  void CaloLong::Fit(Bool_t draw){
1244    //  lfit->SetParLimits(0,0.,1000.);    //  lfit->SetParLimits(0,0.,1000.);
1245    //  lfit->SetParLimits(1,-1.,80.);    //  lfit->SetParLimits(1,-1.,80.);
1246    //  lfit->SetParLimits(2,-1.,10.);    //  lfit->SetParLimits(2,-1.,10.);
1247    TString optio;    // TString optio = "ROW"; // "RO"
1248      TString optio = "RO"; // "RO"
1249    if ( debug ){    if ( debug ){
1250      //    optio = "MERBOV";      optio += "NV";
1251      //    optio = "MEROV";      if ( draw ) optio += "V";
     //    optio = "EROV";  
     optio = "RNOV";  
     if ( draw ) optio = "ROV";  
1252    } else {    } else {
1253      //    optio = "MERNOQ";      optio += "NQ";
1254      //    optio = "ERNOQ";      if ( draw ) optio += "Q";
     optio = "RNOQ";  
     if ( draw ) optio = "ROQ";  
1255    };    };
1256    //    //
1257    if ( debug ) printf(" OK, start the fitting procedure...\n");    if ( debug ) printf(" OK, start the fitting procedure... options: %s \n",optio.Data());
1258    //    //
1259    fitresult = th->Fit("lfit",optio);    //  fitresult = th->Fit("lfit",optio);
1260      fitresult = gh->Fit("lfit",optio);
1261    //    //
1262    if ( debug ) printf(" the fit is done! result: %i \n",fitresult);    if ( debug ) printf(" the fit is done! result: %i \n",fitresult);
1263    //    //
# Line 953  void CaloLong::Fit(Bool_t draw){ Line 1276  void CaloLong::Fit(Bool_t draw){
1276    if ( fitresult != 0 ){    if ( fitresult != 0 ){
1277      if ( debug ) printf(" The fit failed, no integrals calculation and asymm is set to -1. \n");      if ( debug ) printf(" The fit failed, no integrals calculation and asymm is set to -1. \n");
1278      asymm = -1.;      asymm = -1.;
1279        defE0 = -1.;
1280    } else {    } else {
1281        if ( slmax.MaybeRegexp() ) lmax = this->Evaluate(slmax,tmax,X0pl);
1282        if ( sumax.MaybeRegexp() ) umax = this->Evaluate(sumax,tmax,X0pl);
1283      Int_t npp = 1000;      Int_t npp = 1000;
1284        double *xpp=new double[npp];
1285        double *wpp=new double[npp];
1286        lfit->CalcGaussLegendreSamplingPoints(npp,xpp,wpp,1e-12);
1287        defE0 = lfit->IntegralFast(npp,xpp,wpp,lmax,umax);
1288        //
1289      double *xp=new double[npp];      double *xp=new double[npp];
1290      double *wp=new double[npp];      double *wp=new double[npp];
1291      lfit->CalcGaussLegendreSamplingPoints(npp,xp,wp,1e-12);      lfit->CalcGaussLegendreSamplingPoints(npp,xp,wp,1e-12);
# Line 1003  void CaloLong::Fit(Bool_t draw){ Line 1334  void CaloLong::Fit(Bool_t draw){
1334      // axis titles      // axis titles
1335      th->SetXTitle("Depth [X0]");      th->SetXTitle("Depth [X0]");
1336      th->SetYTitle("Energy [MIP]");      th->SetYTitle("Energy [MIP]");
1337      th->DrawCopy("Perror");      //    th->DrawCopy("Perror");
1338        th->DrawCopy();
1339        gh->SetMarkerSize(1.);
1340        gh->SetMarkerStyle(21);
1341        //    gh->SetMarkerColor(kRed);
1342        gh->Draw("Psame");
1343      lfit->Draw("same");      lfit->Draw("same");
1344      tc->Modified();      tc->Modified();
1345      tc->Update();      tc->Update();
# Line 1015  void CaloLong::Fit(Bool_t draw){ Line 1351  void CaloLong::Fit(Bool_t draw){
1351      if ( th ) th->Delete();      if ( th ) th->Delete();
1352    };    };
1353    //    //
1354    delete lfit;    //  delete lfit;
1355    //    //
1356  };  };
1357    
# Line 1044  void CaloLong::Draw(Int_t view){ Line 1380  void CaloLong::Draw(Int_t view){
1380    //    //
1381    if ( maxv != -1 ){    if ( maxv != -1 ){
1382      for (Int_t v=minv; v<maxv;v++){      for (Int_t v=minv; v<maxv;v++){
1383        TString hid = Form("clongv%i",v);        TString hid = Form("clongv%i%s",v,suf.Data());    
1384        TCanvas *tc  = dynamic_cast<TCanvas*>(gDirectory->FindObject(hid));        TCanvas *tc  = dynamic_cast<TCanvas*>(gDirectory->FindObject(hid));
1385        if ( tc ){        if ( tc ){
1386          //       tc->Clear();          //       tc->Clear();
# Line 1052  void CaloLong::Draw(Int_t view){ Line 1388  void CaloLong::Draw(Int_t view){
1388          tc = new TCanvas(hid,hid);          tc = new TCanvas(hid,hid);
1389        };        };
1390        //        //
1391        TString thid = Form("hlongv%i",v);                TString thid = Form("hlongv%i%s",v,suf.Data());  
1392        TH1F *th  = dynamic_cast<TH1F*>(gDirectory->FindObject(thid));        TH1F *th  = dynamic_cast<TH1F*>(gDirectory->FindObject(thid));
1393        if ( th ) th->Delete();        if ( th ) th->Delete();
1394        //         th->Clear();        //         th->Clear();
# Line 1071  void CaloLong::Draw(Int_t view){ Line 1407  void CaloLong::Draw(Int_t view){
1407      };      };
1408    } else {    } else {
1409      //      //
1410      TString hid = Form("clongvyvx");          TString hid = Form("clongvyvx%s",suf.Data());      
1411      TCanvas *tc  = dynamic_cast<TCanvas*>(gDirectory->FindObject(hid));      TCanvas *tc  = dynamic_cast<TCanvas*>(gDirectory->FindObject(hid));
1412      if ( tc ){      if ( tc ){
1413      } else {      } else {
1414        tc = new TCanvas(hid,hid);        tc = new TCanvas(hid,hid);
1415      };      };
1416      //      //
1417      TString thid = Form("hlongvyvx");        TString thid = Form("hlongvyvx%s",suf.Data());      
1418      TH1F *th  = dynamic_cast<TH1F*>(gDirectory->FindObject(thid));      TH1F *th  = dynamic_cast<TH1F*>(gDirectory->FindObject(thid));
1419      if ( th ) th->Delete();      if ( th ) th->Delete();
1420      th = new TH1F(thid,thid,44,-0.5,43.5);      th = new TH1F(thid,thid,44,-0.5,43.5);
# Line 1106  void CaloLong::Delete(){ Line 1442  void CaloLong::Delete(){
1442    Clear();    Clear();
1443    //delete this;    //delete this;
1444  };  };
1445    
1446    
1447    
1448    
1449    
1450    
1451    
1452    
1453    
1454    
1455    
1456    
1457    
1458    
1459    
1460    
1461    
1462    
1463    
1464    

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.14

  ViewVC Help
Powered by ViewVC 1.1.23