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

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

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

revision 1.19 by mocchiut, Mon Mar 3 09:51:02 2008 UTC revision 1.21 by mocchiut, Fri Apr 18 18:55:53 2008 UTC
# Line 3  Line 3 
3   * \author Gianfranca DeRosa, Wolfgang Menn   * \author Gianfranca DeRosa, Wolfgang Menn
4   */   */
5    
 #include <TObject.h>  
6  #include <ToFLevel2.h>  #include <ToFLevel2.h>
7  #include <iostream>  
8  using namespace std;  using namespace std;
9    
10  ClassImp(ToFPMT);  ClassImp(ToFPMT);
11  ClassImp(ToFTrkVar);  ClassImp(ToFTrkVar);
12  ClassImp(ToFLevel2);  ClassImp(ToFLevel2);
# Line 696  void ToFLevel2::GetPMTPaddle(Int_t pmt_i Line 696  void ToFLevel2::GetPMTPaddle(Int_t pmt_i
696  // gf Apr 07  // gf Apr 07
697    
698  void ToFLevel2::GetPaddlePMT(Int_t paddle, Int_t &pmtleft, Int_t &pmtright){  void ToFLevel2::GetPaddlePMT(Int_t paddle, Int_t &pmtleft, Int_t &pmtright){
699      pmtleft=paddle*2;
700    if(paddle==0){    pmtright= pmtleft+1;
     pmtleft=0;  
     pmtright=1;  
   }  
   
   if(paddle==1){  
     pmtleft=2;  
     pmtright=3;  
   }  
   
   if(paddle==2){  
     pmtleft=4;  
     pmtright=5;  
   }  
   
   if(paddle==3){  
     pmtleft=6;  
     pmtright=7;  
   }  
   
   if(paddle==4){  
     pmtleft=8;  
     pmtright=9;  
   }  
   
   if(paddle==5){  
     pmtleft=10;  
     pmtright=11;  
   }  
   
   if(paddle==6){  
     pmtleft=12;  
     pmtright=13;  
   }  
   
   if(paddle==7){  
     pmtleft=14;  
     pmtright=15;  
   }  
   
   if(paddle==8){  
     pmtleft=16;  
     pmtright=17;  
   }  
   
   if(paddle==9){  
     pmtleft=18;  
     pmtright=19;  
   }  
   
   if(paddle==10){  
     pmtleft=20;  
     pmtright=21;  
   }  
   
   if(paddle==11){  
     pmtleft=22;  
     pmtright=23;  
   }  
   
   if(paddle==12){  
     pmtleft=24;  
     pmtright=25;  
   }  
   
   if(paddle==13){  
     pmtleft=26;  
     pmtright=27;  
   }  
   
   if(paddle==14){  
     pmtleft=28;  
     pmtright=29;  
   }  
   
   if(paddle==15){  
     pmtleft=30;  
     pmtright=31;  
   }  
   
   if(paddle==16){  
     pmtleft=32;  
     pmtright=33;  
   }  
   
   if(paddle==17){  
     pmtleft=34;  
     pmtright=35;  
   }  
   
   if(paddle==18){  
     pmtleft=36;  
     pmtright=37;  
   }  
   
   if(paddle==19){  
     pmtleft=38;  
     pmtright=39;  
   }  
   
   if(paddle==20){  
     pmtleft=40;  
     pmtright=41;  
   }  
   
   if(paddle==21){  
     pmtleft=42;  
     pmtright=43;  
   }  
   
   if(paddle==22){  
     pmtleft=44;  
     pmtright=45;  
   }  
   
   if(paddle==23){  
     pmtleft=46;  
     pmtright=47;  
   }  
     
701    return;    return;
702  }  }
703    
# Line 930  void ToFLevel2::GetPaddleGeometry(Int_t Line 811  void ToFLevel2::GetPaddleGeometry(Int_t
811   */   */
812  Int_t ToFLevel2::GetPaddleid(Int_t plane, Int_t paddle)  Int_t ToFLevel2::GetPaddleid(Int_t plane, Int_t paddle)
813  {  {
   
814    Int_t padid=-1;    Int_t padid=-1;
815    Int_t pads11=8;    Int_t pads[6]={8,6,2,2,3,3};
   Int_t pads12=6;  
   Int_t pads21=2;  
   Int_t pads22=2;  
   Int_t pads31=3;  
   //  Int_t pads32=3;  
   
816    
817    if(plane == 0){    int somma=0;
818      padid=paddle;    int np=plane;
819      for(Int_t j=0; j<np; j++){
820        somma+=pads[j];
821    }    }
822      padid=paddle+somma;
   if(plane == 1){  
     padid=pads11+paddle;  
   }  
   
   if(plane == 2){  
     padid=pads11+pads12+paddle;  
   }  
   
   if(plane == 3){  
     padid=pads11+pads12+pads21+paddle;  
   }  
   
   if(plane == 4){  
     padid=pads11+pads12+pads21+pads22+paddle;  
   }  
   
   if(plane == 5){  
     padid=pads11+pads12+pads21+pads22+pads31+paddle;  
   }  
   
823    return padid;    return padid;
   
824  }  }
825    
826    
# Line 1049  Int_t ToFLevel2::GetNPaddle(Int_t plane) Line 904  Int_t ToFLevel2::GetNPaddle(Int_t plane)
904    
905  }  }
906    
   
   
907  /// wm feb 08  /// wm feb 08
908    
909  /**  /**
# Line 1197  Int_t ibot[12] = {4,5,4,5,4,5,4,5,2,3,2, Line 1050  Int_t ibot[12] = {4,5,4,5,4,5,4,5,2,3,2,
1050  ////////////////////////////////////////////////////  ////////////////////////////////////////////////////
1051    
1052    
1053    
1054  /**  /**
1055   * Fills a struct cToFLevel2 with values from a ToFLevel2 object (to put data into a F77 common).   * Fills a struct cToFLevel2 with values from a ToFLevel2 object (to put data into a F77 common).
1056   */   */
# Line 1243  void ToFLevel2::GetLevel2Struct(cToFLeve Line 1097  void ToFLevel2::GetLevel2Struct(cToFLeve
1097        }        }
1098    } //ELENA    } //ELENA
1099  }  }
1100    
1101    
1102    //
1103    // Reprocessing tool // Emiliano 08/04/07
1104    //
1105    Int_t ToFLevel2::Process(TrkLevel2 *trk, TrigLevel2 *trg, GL_RUN *run, OrbitalInfo *orb, Bool_t force){
1106      //
1107      // Copiare qui qualcosa di simile a calonuclei per evitare di riprocessare sempre tutto
1108      //
1109    
1110    
1111    
1112    
1113      //
1114      // structures to communicate with F77
1115      //
1116      extern struct ToFInput  tofinput_;
1117      extern struct ToFOutput tofoutput_;
1118      //
1119      // DB connection
1120      //
1121      TString host;
1122      TString user;
1123      TString psw;
1124      const char *pamdbhost=gSystem->Getenv("PAM_DBHOST");
1125      const char *pamdbuser=gSystem->Getenv("PAM_DBUSER");
1126      const char *pamdbpsw=gSystem->Getenv("PAM_DBPSW");
1127      if ( !pamdbhost ) pamdbhost = "";
1128      if ( !pamdbuser ) pamdbuser = "";
1129      if ( !pamdbpsw ) pamdbpsw = "";
1130      if ( strcmp(pamdbhost,"") ) host = pamdbhost;
1131      if ( strcmp(pamdbuser,"") ) user = pamdbuser;
1132      if ( strcmp(pamdbpsw,"") ) psw = pamdbpsw;
1133      //
1134      //
1135      TSQLServer *dbc = TSQLServer::Connect(host.Data(),user.Data(),psw.Data());
1136      if ( !dbc->IsConnected() ) return 1;
1137      stringstream myquery;
1138      myquery.str("");
1139      myquery << "SET time_zone='+0:00'";
1140      dbc->Query(myquery.str().c_str());
1141      GL_PARAM *glparam = new GL_PARAM();
1142      glparam->Query_GL_PARAM(1,1,dbc); // parameters stored in DB in GL_PRAM table
1143      trk->LoadField(glparam->PATH+glparam->NAME);
1144      //
1145      Bool_t defcal = true;
1146      Int_t error=glparam->Query_GL_PARAM(run->RUNHEADER_TIME,201,dbc); // parameters stored in DB in GL_PRAM table
1147      if ( error<0 ) {
1148        return(1);
1149      };
1150      printf(" Reading ToF parameter file: %s \n",(glparam->PATH+glparam->NAME).Data());
1151      if ( (UInt_t)glparam->TO_TIME != (UInt_t)4294967295UL ) defcal = false;
1152      //
1153      Int_t nlen = (Int_t)(glparam->PATH+glparam->NAME).Length();
1154      rdtofcal((char *)(glparam->PATH+glparam->NAME).Data(),&nlen);
1155      //
1156      Int_t adc[4][12];
1157      Int_t tdc[4][12];
1158      Float_t tdcc[4][12];
1159      //
1160      // process tof data
1161      //
1162      for (Int_t hh=0; hh<12;hh++){
1163        for (Int_t kk=0; kk<4;kk++){
1164               adc[kk][hh] = 4095;
1165               tdc[kk][hh] = 4095;
1166               tdcc[kk][hh] = 4095.;
1167               tofinput_.adc[hh][kk] = 4095;
1168               tofinput_.tdc[hh][kk] = 4095;
1169        };
1170      };
1171      Int_t ntrkentry = 0;
1172      Int_t npmtentry = 0;
1173      Int_t gg = 0;
1174      Int_t hh = 0;
1175      Int_t adcf[48];
1176      memset(adcf, 0, 48*sizeof(Int_t));
1177      Int_t tdcf[48];
1178      memset(tdcf, 0, 48*sizeof(Int_t));
1179      for (Int_t pm=0; pm < this->ntrk() ; pm++){
1180         ToFTrkVar *ttf = this->GetToFTrkVar(pm);
1181         for ( Int_t nc=0; nc < ttf->npmttdc; nc++){
1182                if ( (ttf->tdcflag).At(nc) != 0 ) tdcf[(ttf->pmttdc).At(nc)] = 1;
1183         };
1184         for ( Int_t nc=0; nc < ttf->npmtadc; nc++){
1185                if ( (ttf->adcflag).At(nc) != 0 ) adcf[(ttf->pmtadc).At(nc)] = 1;
1186         };
1187      };
1188      //
1189      for (Int_t pm=0; pm < this->npmt() ; pm++){
1190         ToFPMT *pmt = this->GetToFPMT(pm);
1191         this->GetPMTIndex(pmt->pmt_id, gg, hh);
1192         if ( adcf[pmt->pmt_id] == 0 ){
1193                 tofinput_.adc[gg][hh] = (int)pmt->adc;
1194                 adc[hh][gg] = (int)pmt->adc;
1195         };
1196         if ( tdcf[pmt->pmt_id] == 0 ){
1197                 tofinput_.tdc[gg][hh] = (int)pmt->tdc;
1198                 tdc[hh][gg] = (int)pmt->tdc;
1199         };
1200         tdcc[hh][gg] = (float)pmt->tdc_tw;
1201         // Int_t pppid = this->GetPMTid(hh,gg);
1202         //      printf(" pm %i pmt_id %i pppid %i hh %i gg %i tdcc %f tdc %f adc %f \n",pm,pmt->pmt_id,pppid,hh,gg,pmt->tdc_tw,pmt->tdc,pmt->adc);
1203      };
1204      //
1205      Int_t unpackError = this->unpackError;
1206      //
1207      for (Int_t hh=0; hh<5;hh++){
1208         tofinput_.patterntrig[hh]=trg->patterntrig[hh];
1209      };
1210      //
1211      this->Clear();
1212      //
1213          Int_t pmt_id = 0;
1214          ToFPMT *t_pmt = new ToFPMT();
1215          if(!(this->PMT)) this->PMT = new TClonesArray("ToFPMT",12); //ELENA
1216          TClonesArray &tpmt = *this->PMT;
1217          ToFTrkVar *t_tof = new ToFTrkVar();
1218          if(!(this->ToFTrk)) this->ToFTrk = new TClonesArray("ToFTrkVar",2); //ELENA
1219          TClonesArray &t = *this->ToFTrk;
1220          //
1221          //
1222          // Here we have calibrated data, ready to be passed to the FORTRAN routine which will extract common and track-related  variables.
1223          //
1224          npmtentry = 0;
1225          //
1226          ntrkentry = 0;
1227          //
1228          // Calculate tracks informations from ToF alone
1229          //
1230          tofl2com();
1231          //
1232          memcpy(this->tof_j_flag,tofoutput_.tof_j_flag,6*sizeof(Int_t));
1233          //
1234          t_tof->trkseqno = -1;
1235          //
1236          // and now we must copy from the output structure to the level2 class:
1237          //
1238          t_tof->npmttdc = 0;
1239          //
1240          for (Int_t hh=0; hh<12;hh++){
1241            for (Int_t kk=0; kk<4;kk++){
1242              if ( tofoutput_.tofmask[hh][kk] != 0 ){
1243                pmt_id = this->GetPMTid(kk,hh);
1244                t_tof->pmttdc.AddAt(pmt_id,t_tof->npmttdc);
1245                t_tof->tdcflag.AddAt(tofoutput_.tdcflagtof[hh][kk],t_tof->npmttdc); // gf: Jan 09/07
1246                t_tof->npmttdc++;
1247              };
1248            };
1249          };
1250          for (Int_t kk=0; kk<13;kk++){
1251            t_tof->beta[kk] = tofoutput_.betatof_a[kk];
1252          }
1253          //
1254          t_tof->npmtadc = 0;
1255          for (Int_t hh=0; hh<12;hh++){
1256            for (Int_t kk=0; kk<4;kk++){
1257              if ( tofoutput_.adctof_c[hh][kk] < 1000 ){
1258                t_tof->dedx.AddAt(tofoutput_.adctof_c[hh][kk],t_tof->npmtadc);
1259                pmt_id = this->GetPMTid(kk,hh);
1260                t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);
1261                t_tof->adcflag.AddAt(tofoutput_.adcflagtof[hh][kk],t_tof->npmtadc); // gf: Jan 09/07
1262                t_tof->npmtadc++;
1263              };
1264            };
1265          };
1266          //
1267          memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos));
1268          memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos));
1269          memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof));
1270          memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof));
1271          //
1272          new(t[ntrkentry]) ToFTrkVar(*t_tof);
1273          ntrkentry++;
1274          t_tof->Clear();
1275          //
1276          //
1277          //
1278          t_pmt->Clear();
1279          //
1280          for (Int_t hh=0; hh<12;hh++){
1281            for (Int_t kk=0; kk<4;kk++){
1282             // new WM
1283              if ( tofoutput_.tdc_c[hh][kk] < 4095 || adc[kk][hh] < 4095  || tdc[kk][hh] < 4095 ){
1284    //          if ( tdcc[kk][hh] < 4095. || adc[kk][hh] < 4095  || tdc[kk][hh] < 4095 ){
1285                //
1286                t_pmt->pmt_id = this->GetPMTid(kk,hh);
1287                t_pmt->tdc_tw = tofoutput_.tdc_c[hh][kk];
1288                t_pmt->adc = (Float_t)adc[kk][hh];
1289                t_pmt->tdc = (Float_t)tdc[kk][hh];
1290                //
1291                new(tpmt[npmtentry]) ToFPMT(*t_pmt);
1292                npmtentry++;
1293                t_pmt->Clear();
1294              };
1295            };
1296          };
1297          //
1298          // Calculate track-related variables
1299          //
1300          if ( trk->ntrk() > 0 ){
1301            //
1302            // We have at least one track
1303            //
1304            //
1305            // Run over tracks
1306            //
1307            for(Int_t nt=0; nt < trk->ntrk(); nt++){
1308              //
1309              TrkTrack *ptt = trk->GetStoredTrack(nt);
1310              //
1311              // Copy the alpha vector in the input structure
1312              //
1313              for (Int_t e = 0; e < 5 ; e++){
1314                tofinput_.al_pp[e] = ptt->al[e];
1315              };
1316              //
1317              // Get tracker related variables for this track
1318              //
1319              toftrk();
1320              //
1321              // Copy values in the class from the structure (we need to use a temporary class to store variables).
1322              //
1323              t_tof->npmttdc = 0;
1324              for (Int_t hh=0; hh<12;hh++){
1325                for (Int_t kk=0; kk<4;kk++){
1326                  if ( tofoutput_.tofmask[hh][kk] != 0 ){
1327                    pmt_id = this->GetPMTid(kk,hh);
1328                    t_tof->pmttdc.AddAt(pmt_id,t_tof->npmttdc);
1329                    t_tof->tdcflag.AddAt(tofoutput_.tdcflag[hh][kk],t_tof->npmttdc); // gf: Jan 09/07
1330                    t_tof->npmttdc++;
1331                  };
1332                };
1333              };
1334              for (Int_t kk=0; kk<13;kk++){
1335                t_tof->beta[kk] = tofoutput_.beta_a[kk];
1336              };
1337              //
1338              t_tof->npmtadc = 0;
1339              for (Int_t hh=0; hh<12;hh++){
1340                for (Int_t kk=0; kk<4;kk++){
1341                  if ( tofoutput_.adc_c[hh][kk] < 1000 ){
1342                    t_tof->dedx.AddAt(tofoutput_.adc_c[hh][kk],t_tof->npmtadc);
1343                    pmt_id = this->GetPMTid(kk,hh);
1344                    t_tof->pmtadc.AddAt(pmt_id,t_tof->npmtadc);
1345                    t_tof->adcflag.AddAt(tofoutput_.adcflag[hh][kk],t_tof->npmtadc); // gf: Jan 09/07
1346                    t_tof->npmtadc++;
1347                  };
1348                };
1349              };
1350              //
1351              memcpy(t_tof->xtofpos,tofoutput_.xtofpos,sizeof(t_tof->xtofpos));
1352              memcpy(t_tof->ytofpos,tofoutput_.ytofpos,sizeof(t_tof->ytofpos));
1353              memcpy(t_tof->xtr_tof,tofoutput_.xtr_tof,sizeof(t_tof->xtr_tof));
1354              memcpy(t_tof->ytr_tof,tofoutput_.ytr_tof,sizeof(t_tof->ytr_tof));
1355              //
1356              // Store the tracker track number in order to be sure to have shyncronized data during analysis
1357              //
1358              t_tof->trkseqno = nt;
1359              //
1360              // create a new object for this event with track-related variables
1361              //
1362              new(t[ntrkentry]) ToFTrkVar(*t_tof);
1363              ntrkentry++;
1364              t_tof->Clear();
1365              //
1366            }; // loop on all the tracks
1367          //
1368          this->unpackError = unpackError;
1369          if ( defcal ){
1370            this->default_calib = 1;
1371          } else {
1372            this->default_calib = 0;
1373          };
1374     };
1375    
1376    
1377    
1378      return(0);
1379    }

Legend:
Removed from v.1.19  
changed lines
  Added in v.1.21

  ViewVC Help
Powered by ViewVC 1.1.23