/[PAMELA software]/DarthVader/ToFLevel2/src/ToFCore.cpp
ViewVC logotype

Diff of /DarthVader/ToFLevel2/src/ToFCore.cpp

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

revision 1.31 by mocchiut, Thu Sep 4 15:46:20 2008 UTC revision 1.32 by mocchiut, Fri Nov 28 09:05:24 2008 UTC
# Line 3  Line 3 
3  //  //
4  #include <fstream>  #include <fstream>
5  #include <string.h>  #include <string.h>
6    #include <iomanip>
7  //  //
8  // ROOT headers  // ROOT headers
9  //  //
# Line 204  int ToFCore(UInt_t run, TFile *file, GL_ Line 205  int ToFCore(UInt_t run, TFile *file, GL_
205    extern struct ToFInput  tofinput_;    extern struct ToFInput  tofinput_;
206    extern struct ToFOutput tofoutput_;    extern struct ToFOutput tofoutput_;
207    //    //
208      // WM variables perform dE/dx II order corrections
209      //
210      Float_t dedx_corr_m[100][48],dedx_corr[48];
211      Double_t mtime[100],t1,t2,tm;
212      Float_t yhelp1,yhelp2,slope,inter,thelp1,thelp2;
213      Float_t xmean1,xwidth1;
214      Int_t ical,ii,wj,jj;
215      //
216    // Let's start!    // Let's start!
217    //    //
218    //    //
# Line 540  int ToFCore(UInt_t run, TFile *file, GL_ Line 549  int ToFCore(UInt_t run, TFile *file, GL_
549        //        //
550      };      };
551      //      //
552        // WM reading parameter file for dE/dx II order corrections
553        //
554        memset(dedx_corr_m,0,100*48*sizeof(Float_t));
555        memset(dedx_corr,0,48*sizeof(Float_t));
556        memset(mtime,0,100*sizeof(Double_t));
557        //
558        // Query the DB to get the file
559        //
560        Int_t error=glparam->Query_GL_PARAM(runinfo->RUNHEADER_TIME,203,dbc); // parameters stored in DB in GL_PRAM table
561        if ( error<0 ) {
562          code = error;
563          goto closeandexit;
564        };
565        //
566        if ( verbose ) printf(" Reading ToF dE/dx II order correction parameter file: %s \n",(glparam->PATH+glparam->NAME).Data());
567        //
568        ical=0;  // counter set to zero if first-time reading
569        //-----------------------------------------------------------
570        // Here I  read the dEdx_korr parameters
571        //-----------------------------------------------------------
572        jj=0;
573        ifstream fin((glparam->PATH+glparam->NAME).Data());
574        while ( !fin.eof() ){
575          fin>>t1>>tm>>t2;
576          if ( verbose ) cout << setiosflags(ios::fixed)  << setw(10) << setprecision(3) << tm << endl;
577          if ( tm >= (runinfo->RUNHEADER_TIME-100000) && tm <= (runinfo->RUNTRAILER_TIME+100000) ){
578            mtime[jj]=tm;
579          };
580          for (ii=0; ii<48;ii++){
581            fin>>wj>>xmean1>>xwidth1;
582            if ( tm >= (runinfo->RUNHEADER_TIME-100000) && tm <= (runinfo->RUNTRAILER_TIME+100000) ){
583              dedx_corr_m[jj][ii]=xmean1;
584            };
585          };
586          if ( tm >= (runinfo->RUNHEADER_TIME-100000) && tm <= (runinfo->RUNTRAILER_TIME+100000) ){
587            jj++;
588          };
589          if ( jj >= 100 ){
590            code = -318;
591            goto closeandexit;
592          };
593        };
594        //
595        fin.close();
596        Bool_t ff = false;
597        while ( runinfo->RUNHEADER_TIME > mtime[ical] && ical < 100 ) {
598          ical = ical+1;
599          ff = true;
600        };
601        if ( ff ) ical = ical-1;
602        if ( verbose ) cout<<"rh time "<<runinfo->RUNHEADER_TIME<<" rt time "<<runinfo->RUNTRAILER_TIME<<" limit low "<<mtime[ical]<<" limit up "<<mtime[ical+1]<<" ical "<<ical<< " jj " << jj<< endl;
603        if ( ical < 0 || ical >= 98 ){
604          code = -315;
605          goto closeandexit;
606        };
607        //
608      // run over all the events of the run      // run over all the events of the run
609      //      //
610      if ( verbose ) printf("\n Ready to start! \n\n Processed events: \n\n");      if ( verbose ) printf("\n Ready to start! \n\n Processed events: \n\n");
# Line 573  int ToFCore(UInt_t run, TFile *file, GL_ Line 638  int ToFCore(UInt_t run, TFile *file, GL_
638        //        //
639        // paranoid check        // paranoid check
640        //        //
641        if ( atime > runinfo->RUNTRAILER_TIME || atime < runinfo->RUNHEADER_TIME  ) {        if ( atime > (runinfo->RUNTRAILER_TIME+1) || atime < (runinfo->RUNHEADER_TIME-1)  ) {
642          if ( verbose ) printf(" TOF - WARNING: event at time outside the run time window, skipping it\n");          if ( verbose ) printf(" TOF - WARNING: event at time outside the run time window, skipping it\n");
643          jumped++;          jumped++;
644          goto jumpev;          goto jumpev;
# Line 606  int ToFCore(UInt_t run, TFile *file, GL_ Line 671  int ToFCore(UInt_t run, TFile *file, GL_
671        //        //
672        // start processing        // start processing
673        //        //
674          // dE/dx II order correction: check time limits and interpolate time correction
675          //==================================================================
676          //==  if time is outside time limits:
677          //==================================================================
678          if ( atime<mtime[ical] || atime>mtime[ical+1] ){
679            if ( verbose ) cout<<"Checking Time Limits!"<<endl;
680            ical=0;
681            while ( atime > mtime[ical] && ical < 100 ){
682              ical = ical+1;
683            }
684            ical = ical-1;
685            if ( ical < 0 || ical >= 98 ){
686              code = -317;
687              goto closeandexit;
688            };
689            if ( verbose ) cout<<"abs time "<<atime<<" limit low "<<mtime[ical]<<" limit up "<<mtime[ical+1]<<" ical "<<ical<<endl;
690          };
691          //==================================================================
692          //== interpolate betwen time limits
693          //==================================================================
694          thelp1 = mtime[ical];
695          thelp2 = mtime[ical+1];
696          for (ii=0; ii<48;ii++) {
697            yhelp1 = dedx_corr_m[ical][ii];
698            yhelp2 = dedx_corr_m[ical+1][ii];
699            slope  = (yhelp2-yhelp1)/(thelp2-thelp1);
700            inter  = yhelp1 - slope*thelp1;
701            dedx_corr[ii] = slope*atime + inter;    
702            if ( fabs(dedx_corr[ii]) <= 0.0000001 ){
703              code = -316;
704              goto closeandexit;
705            };
706          };
707          //================================================================
708          //================================================================
709        //        //
710        // Here we will use some procedure to calibrate our data and put some kind of informations in the cinput structure        // Here we will use some procedure to calibrate our data and put some kind of informations in the cinput structure
711          //
712        for (Int_t gg=0; gg<4;gg++){        for (Int_t gg=0; gg<4;gg++){
713          for (Int_t hh=0; hh<12;hh++){          for (Int_t hh=0; hh<12;hh++){
714            tofinput_.tdc[hh][gg]=tofEvent->tdc[gg][hh];                      tofinput_.tdc[hh][gg]=tofEvent->tdc[gg][hh];          
715            tofinput_.adc[hh][gg]=tofEvent->adc[gg][hh];            tofinput_.adc[hh][gg]=tofEvent->adc[gg][hh];
716          };                    };          
717        };        };
718          //
719        for (Int_t hh=0; hh<5;hh++){        for (Int_t hh=0; hh<5;hh++){
720          tofinput_.patterntrig[hh]=trig->patterntrig[hh];          tofinput_.patterntrig[hh]=trig->patterntrig[hh];
721        };                    };            
# Line 656  int ToFCore(UInt_t run, TFile *file, GL_ Line 756  int ToFCore(UInt_t run, TFile *file, GL_
756        for (Int_t hh=0; hh<12;hh++){        for (Int_t hh=0; hh<12;hh++){
757          for (Int_t kk=0; kk<4;kk++){          for (Int_t kk=0; kk<4;kk++){
758            if ( tofoutput_.adctof_c[hh][kk] < 1000 ){            if ( tofoutput_.adctof_c[hh][kk] < 1000 ){
             t_tof->dedx.AddAt(tofoutput_.adctof_c[hh][kk],t_tof->npmtadc);  
759              pmt_id = tof->GetPMTid(kk,hh);              pmt_id = tof->GetPMTid(kk,hh);
760                t_tof->dedx.AddAt((tofoutput_.adctof_c[hh][kk]*4./dedx_corr[pmt_id]),t_tof->npmtadc);
761              t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);              t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);
762              t_tof->adcflag.AddAt(tofoutput_.adcflagtof[hh][kk],t_tof->npmtadc); // gf: Jan 09/07              t_tof->adcflag.AddAt(tofoutput_.adcflagtof[hh][kk],t_tof->npmtadc); // gf: Jan 09/07
763              t_tof->npmtadc++;              t_tof->npmtadc++;
# Line 750  int ToFCore(UInt_t run, TFile *file, GL_ Line 850  int ToFCore(UInt_t run, TFile *file, GL_
850            for (Int_t hh=0; hh<12;hh++){            for (Int_t hh=0; hh<12;hh++){
851              for (Int_t kk=0; kk<4;kk++){              for (Int_t kk=0; kk<4;kk++){
852                if ( tofoutput_.adc_c[hh][kk] < 1000 ){                if ( tofoutput_.adc_c[hh][kk] < 1000 ){
                 t_tof->dedx.AddAt(tofoutput_.adc_c[hh][kk],t_tof->npmtadc);  
853                  pmt_id = tof->GetPMTid(kk,hh);                  pmt_id = tof->GetPMTid(kk,hh);
854                    t_tof->dedx.AddAt((tofoutput_.adc_c[hh][kk]*4./dedx_corr[pmt_id]),t_tof->npmtadc);
855                  t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);                  t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);
856                  t_tof->adcflag.AddAt(tofoutput_.adcflag[hh][kk],t_tof->npmtadc); // gf: Jan 09/07                  t_tof->adcflag.AddAt(tofoutput_.adcflag[hh][kk],t_tof->npmtadc); // gf: Jan 09/07
857                  t_tof->npmtadc++;                  t_tof->npmtadc++;

Legend:
Removed from v.1.31  
changed lines
  Added in v.1.32

  ViewVC Help
Powered by ViewVC 1.1.23