/[PAMELA software]/DarthVader/CalorimeterLevel2/src/CaloLevel0.cpp
ViewVC logotype

Diff of /DarthVader/CalorimeterLevel2/src/CaloLevel0.cpp

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

revision 1.30 by mocchiut, Fri Jan 29 05:49:24 2010 UTC revision 1.31 by mocchiut, Mon Apr 19 14:17:22 2010 UTC
# Line 1160  void CaloLevel0::FindBaseRaw(Int_t l, In Line 1160  void CaloLevel0::FindBaseRaw(Int_t l, In
1160          if ( strip6s < 4 && base[l][m][pre] > (-0.015*qp+sbase[l][m][pre]) && sbase[l][m][pre] > 0. ){          if ( strip6s < 4 && base[l][m][pre] > (-0.015*qp+sbase[l][m][pre]) && sbase[l][m][pre] > 0. ){
1161            if ( debug ) printf(" Suspicious calculated baseline: base %f sbase-0.02*qp %f strip6s %i \n",base[l][m][pre],(-qp*0.02+sbase[l][m][pre]),(Int_t)strip6s);            if ( debug ) printf(" Suspicious calculated baseline: base %f sbase-0.02*qp %f strip6s %i \n",base[l][m][pre],(-qp*0.02+sbase[l][m][pre]),(Int_t)strip6s);
1162            base[l][m][pre] = 31000.;                base[l][m][pre] = 31000.;    
1163              nst = 0; // 9RED BUG
1164              qp = 0.; // 9RED BUG
1165            for (Int_t e = pre*16; e < (pre+1)*16 ; e++){            for (Int_t e = pre*16; e < (pre+1)*16 ; e++){
1166              dexyc[l][m][e] = dexy[l][m][e];              dexyc[l][m][e] = dexy[l][m][e];
1167            };                  };      
1168          };          };
1169        } else {        } else {
1170            if ( debug ) printf(" reset baseline here if ! ( (strip6s >=2 && process == 2) || (strip6s >= 9 and process > 2) ) \n");
1171          base[l][m][pre] = 31000.;          base[l][m][pre] = 31000.;
1172            nst = 0; // 9RED BUG
1173            qp = 0.; // 9RED BUG
1174          for (Int_t e = pre*16; e < (pre+1)*16 ; e++){          for (Int_t e = pre*16; e < (pre+1)*16 ; e++){
1175            dexyc[l][m][e] = dexy[l][m][e];            dexyc[l][m][e] = dexy[l][m][e];
1176          };          };
1177        };        };
1178      } else {      } else {
1179          if ( debug ) printf(" reset baseline here if no minimum find\n");
1180          nst = 0; // 9RED BUG
1181          qp = 0.; // 9RED BUG
1182        process += 2;        process += 2;
1183        base[l][m][pre] = 31000.;        base[l][m][pre] = 31000.;
1184        for (Int_t e = pre*16; e < (pre+1)*16 ; e++){        for (Int_t e = pre*16; e < (pre+1)*16 ; e++){
# Line 1178  void CaloLevel0::FindBaseRaw(Int_t l, In Line 1186  void CaloLevel0::FindBaseRaw(Int_t l, In
1186        };        };
1187      };      };
1188    };    };
1189      if ( debug ) printf(" Baseline calculation: baseline for view %i plane %i pre %i is %f nst %i qp %f \n",l,m,pre,base[l][m][pre],nst,qp);
1190  }  }
1191    
1192  Int_t CaloLevel0::Calibrate(Int_t ei){  Int_t CaloLevel0::Calibrate(Int_t ei){
# Line 1388  Int_t CaloLevel0::Calibrate(Int_t ei){ Line 1397  Int_t CaloLevel0::Calibrate(Int_t ei){
1397              // no suitable new baseline, use old ones!              // no suitable new baseline, use old ones!
1398              //              //
1399              if ( !done ){              if ( !done ){
1400                  if ( debug ) printf(" l %i m %i pre %i ip[i] %i base %f base ip[i] %f sbase %f \n",l,m,pre,ip[i],base[l][m][pre],base[l][m][ip[i]],sbase[l][m][pre]);
1401                if ( (base[l][m][pre] == 31000. || base[l][m][pre] == 0.) ){                if ( (base[l][m][pre] == 31000. || base[l][m][pre] == 0.) ){
1402                  ck[l][m][pre] = 1;                  ck[l][m][pre] = 1;
1403                  if (pre%2 == 0) {                  if (pre%2 == 0) {
# Line 1454  Int_t CaloLevel0::Calibrate(Int_t ei){ Line 1464  Int_t CaloLevel0::Calibrate(Int_t ei){
1464                  //                  //
1465                  // OK, now in estrip we have the energy deposit in MIP of all the strips for this event (at the end of loops of course)                  // OK, now in estrip we have the energy deposit in MIP of all the strips for this event (at the end of loops of course)
1466                  //                  //
1467                    if ( debug && l==0 && (m==17 || m==18) ) printf(" view %i plane %i strip %i ener %f calped %f base0 %f base1 %f base2 %f mip %f ENERGIA %f \n",l,m,n,ener,calped[l][m][n],base0,base1,base2,mip[l][m][n],clevel1->estrip[n][m][l]);
1468                  if ( clevel1->estrip[n][m][l] > 0. ) qpre[l][m][pre] += clevel1->estrip[n][m][l];                  if ( clevel1->estrip[n][m][l] > 0. ) qpre[l][m][pre] += clevel1->estrip[n][m][l];
1469                  //                  //
1470                  //                  //
# Line 1498  Int_t CaloLevel0::Calibrate(Int_t ei){ Line 1509  Int_t CaloLevel0::Calibrate(Int_t ei){
1509          //          //
1510          // Cross-talk corrections            // Cross-talk corrections  
1511          //          //
1512          if ( crosst ){          if ( crosst ){  
1513            //            //
1514            // energy on silicon ladders            // energy on silicon ladders
1515            //            //
# Line 1515  Int_t CaloLevel0::Calibrate(Int_t ei){ Line 1526  Int_t CaloLevel0::Calibrate(Int_t ei){
1526              if ( noselfct ){              if ( noselfct ){
1527                for (Int_t j = ladder*32 ; j < (ladder+1)*32 ; j++){                for (Int_t j = ladder*32 ; j < (ladder+1)*32 ; j++){
1528                  ipre = j/16 ;                    ipre = j/16 ;  
1529                    if ( debug ) printf(" CT STEP1 %i %i %i estrip %f ctprecor %f \n",j,m,l,clevel1->estrip[j][m][l],ctprecor[l][m][ipre]);
1530                  if ( clevel1->estrip[j][m][l] != 0. ) clevel1->estrip[j][m][l] -=  clevel1->estrip[j][m][l] * ctprecor[l][m][ipre];                  if ( clevel1->estrip[j][m][l] != 0. ) clevel1->estrip[j][m][l] -=  clevel1->estrip[j][m][l] * ctprecor[l][m][ipre];
1531                    if ( debug ) printf(" CT STEP2 %i %i %i estrip %f ctprecor %f \n",j,m,l,clevel1->estrip[j][m][l],ctprecor[l][m][ipre]);
1532                };                };
1533              };              };
1534              //              //
# Line 1537  Int_t CaloLevel0::Calibrate(Int_t ei){ Line 1550  Int_t CaloLevel0::Calibrate(Int_t ei){
1550                //                //
1551                if ( debug ) printf(" CK1 Limit for while: 0.07 \n");                if ( debug ) printf(" CK1 Limit for while: 0.07 \n");
1552                for (Int_t j = ipre*16 ; j < (ipre+1)*16 ; j++){                for (Int_t j = ipre*16 ; j < (ipre+1)*16 ; j++){
1553                    if ( debug ) printf(" CT STEP3 %i %i %i estrip %f ctprecor %f \n",j,m,l,clevel1->estrip[j][m][l],ctprecor[l][m][ipp]);
1554                  if ( !ctground ){                  if ( !ctground ){
1555                    if ( clevel1->estrip[j][m][l] != 0. ) clevel1->estrip[j][m][l] += - qpre[l][m][ipp] * ctprecor[l][m][ipp];                    if ( clevel1->estrip[j][m][l] != 0. ) clevel1->estrip[j][m][l] += - qpre[l][m][ipp] * ctprecor[l][m][ipp];
1556                  } else {                  } else {
1557                    if ( clevel1->estrip[j][m][l] != 0. ) clevel1->estrip[j][m][l] += - qpre[l][m][ipp] * 0.00478;                    if ( clevel1->estrip[j][m][l] != 0. ) clevel1->estrip[j][m][l] += - qpre[l][m][ipp] * 0.00478;
1558                  };                  };
1559                  if ( clevel1->estrip[j][m][l] > 0. ) nqpre += clevel1->estrip[j][m][l] ;                  if ( clevel1->estrip[j][m][l] > 0. ) nqpre += clevel1->estrip[j][m][l] ;
1560                    if ( debug ) printf(" CT STEP4 %i %i %i estrip %f ctprecor %f \n",j,m,l,clevel1->estrip[j][m][l],ctprecor[l][m][ipp]);
1561                };                };
1562                qpre[l][m][ipre] = nqpre;                qpre[l][m][ipre] = nqpre;
1563                nqpre = 0.;                nqpre = 0.;
# Line 1553  Int_t CaloLevel0::Calibrate(Int_t ei){ Line 1568  Int_t CaloLevel0::Calibrate(Int_t ei){
1568                while ( it < 10 && deltaqpre > 0.07 ){                while ( it < 10 && deltaqpre > 0.07 ){
1569                  nqpre = 0.;                  nqpre = 0.;
1570                  for (Int_t j = ipre*16 ; j < (ipre+1)*16 ; j++){                  for (Int_t j = ipre*16 ; j < (ipre+1)*16 ; j++){
1571                      if ( debug ) printf(" CT STEP5 %i %i %i estrip %f ctprecor %f \n",j,m,l,clevel1->estrip[j][m][l],ctprecor[l][m][ipre]);
1572                    if ( !ctground ){                    if ( !ctground ){
1573                      if ( debug ) printf(" CK1 pre correction: iteration %i deltaqpre %f  ctprecor %f  TOTAL CORRECTION %f \n",it,deltaqpre,ctprecor[l][m][ipre],deltaqpre * ctprecor[l][m][ipre]);                      if ( debug ) printf(" CK1 pre correction: iteration %i deltaqpre %f  ctprecor %f  TOTAL CORRECTION %f \n",it,deltaqpre,ctprecor[l][m][ipre],deltaqpre * ctprecor[l][m][ipre]);
1574                      if ( clevel1->estrip[j][m][l] != 0. ) clevel1->estrip[j][m][l] += deltaqpre * ctprecor[l][m][ipre];                      if ( clevel1->estrip[j][m][l] != 0. ) clevel1->estrip[j][m][l] += deltaqpre * ctprecor[l][m][ipre];
# Line 1560  Int_t CaloLevel0::Calibrate(Int_t ei){ Line 1576  Int_t CaloLevel0::Calibrate(Int_t ei){
1576                      if ( clevel1->estrip[j][m][l] != 0. ) clevel1->estrip[j][m][l] += deltaqpre * 0.00478;                      if ( clevel1->estrip[j][m][l] != 0. ) clevel1->estrip[j][m][l] += deltaqpre * 0.00478;
1577                    };                    };
1578                    if ( clevel1->estrip[j][m][l] > 0. ) nqpre += clevel1->estrip[j][m][l] ;                    if ( clevel1->estrip[j][m][l] > 0. ) nqpre += clevel1->estrip[j][m][l] ;
1579                      if ( debug ) printf(" CT STEP6 %i %i %i estrip %f ctprecor %f \n",j,m,l,clevel1->estrip[j][m][l],ctprecor[l][m][ipre]);
1580                  };                  };
1581                  if ( ctground ) it = 100;                  if ( ctground ) it = 100;
1582                  it++;                  it++;
# Line 1666  Int_t CaloLevel0::Calibrate(Int_t ei){ Line 1683  Int_t CaloLevel0::Calibrate(Int_t ei){
1683                  nqpre[0] = 0.;                  nqpre[0] = 0.;
1684                  nqpre[1] = 0.;                  nqpre[1] = 0.;
1685                  for (Int_t j = ladder*32 ; j < (ladder+1)*32 ; j++){                  for (Int_t j = ladder*32 ; j < (ladder+1)*32 ; j++){
1686                      if ( debug ) printf(" CT STEP6 %i %i %i estrip %f ctprecor %f \n",j,m,l,clevel1->estrip[j][m][l],ctsicor[l][m][si2]);
1687                    ipre = 0;                    ipre = 0;
1688                    if ( j > (ladder*32)+15 ) ipre = 1;                    if ( j > (ladder*32)+15 ) ipre = 1;
1689                    jpre = j/16 ;                    jpre = j/16 ;
# Line 1681  Int_t CaloLevel0::Calibrate(Int_t ei){ Line 1699  Int_t CaloLevel0::Calibrate(Int_t ei){
1699                    };                    };
1700                    if ( clevel1->estrip[j][m][l] > 0. ) nqsi += clevel1->estrip[j][m][l] ;                    if ( clevel1->estrip[j][m][l] > 0. ) nqsi += clevel1->estrip[j][m][l] ;
1701                    if ( clevel1->estrip[j][m][l] > 0. ) nqpre[ipre] += clevel1->estrip[j][m][l] ;                    if ( clevel1->estrip[j][m][l] > 0. ) nqpre[ipre] += clevel1->estrip[j][m][l] ;
1702                      if ( debug ) printf(" CT STEP7 %i %i %i estrip %f ctprecor %f \n",j,m,l,clevel1->estrip[j][m][l],ctsicor[l][m][si2]);
1703                  };                        };      
1704                  if ( ctground ) it = 100;                  if ( ctground ) it = 100;
1705                  deltaqsi = nqsi-snqsi;                  deltaqsi = nqsi-snqsi;
                 snqsi = nqsi;  
                 it++;  
1706                  deltaqpre[0] = nqpre[0] - qpre[l][m][pre-1];                  deltaqpre[0] = nqpre[0] - qpre[l][m][pre-1];
1707                  deltaqpre[1] = nqpre[1] - qpre[l][m][pre];                  deltaqpre[1] = nqpre[1] - qpre[l][m][pre];
1708                    //
1709                    // Check for divergence and stop if it happens! [9RED bug noticed with plane 18X]
1710                    //
1711                    if ( deltaqpre[0] > qpre[l][m][pre-1] || deltaqpre[1] > qpre[l][m][pre] || deltaqsi >snqsi ){
1712                      if ( debug ) printf(" WARNING!! DIVERGING CORRECTION EXIT IMMEDIATLY FROM THE LOOP!! dqpre0 %f qpre0 %f // dqpre1 %f qpre1 %f // dqsi %f qsi %f \n",deltaqpre[0],qpre[l][m][pre-1],deltaqpre[1],qpre[l][m][pre],deltaqsi,snqsi);
1713                      it = 1000;
1714                    };
1715                    //
1716                    snqsi = nqsi;
1717                    it++;
1718                  if ( debug ) printf(" BEFORE: qpre 0 %f qpre 1 %f \n",qpre[l][m][pre-1],qpre[l][m][pre]);                    if ( debug ) printf(" BEFORE: qpre 0 %f qpre 1 %f \n",qpre[l][m][pre-1],qpre[l][m][pre]);  
1719                  qpre[l][m][pre-1] = nqpre[0];                  qpre[l][m][pre-1] = nqpre[0];
1720                  qpre[l][m][pre] = nqpre[1];                      qpre[l][m][pre] = nqpre[1];    
# Line 1723  Int_t CaloLevel0::Calibrate(Int_t ei){ Line 1750  Int_t CaloLevel0::Calibrate(Int_t ei){
1750          jjj++;          jjj++;
1751          j4++;          j4++;
1752          if ( j < 96 ) ene[j] = clevel1->estrip[j][m][l];          if ( j < 96 ) ene[j] = clevel1->estrip[j][m][l];
1753          if ( crosst ){          if ( crosst ){  
1754            //            //
1755            // "Real" crosstalk effect on the neighbour strips respect to the one which have seen the energy deposit            // "Real" crosstalk effect on the neighbour strips respect to the one which have seen the energy deposit
1756            //            //
# Line 1773  Int_t CaloLevel0::Calibrate(Int_t ei){ Line 1800  Int_t CaloLevel0::Calibrate(Int_t ei){
1800              };              };
1801              if ( debug ) printf(" HIT STRIP: view %i plane %i strip %i energy: %f \n",l,m,j4,clevel1->estrip[j4][m][l]);              if ( debug ) printf(" HIT STRIP: view %i plane %i strip %i energy: %f \n",l,m,j4,clevel1->estrip[j4][m][l]);
1802              //      if ( dexyc[l][m][j4] == 32767. ){              //      if ( dexyc[l][m][j4] == 32767. ){
1803              if ( dexyc[l][m][j4] > 32000. ){              if ( dexyc[l][m][j4] > 32000. || savel1 > 5000.){ // CaloLevel1 bug with plane 18X [9RED 14/04/2010]
1804                savel1 += 5000.;                if ( savel1 > 5000 ){
1805                    if ( debug ) printf(" Absurd plane 18X energy... resetting value to 1100 MIP \n");
1806                    savel1 = 1100.;            // CaloLevel1 bug with plane 18x [9RED 14/04/2010]
1807                  };
1808                  savel1 += 5000.;        
1809                clevel2->nsatstrip += 1.;                clevel2->nsatstrip += 1.;
1810              };              };
1811              //              //
# Line 1817  Int_t CaloLevel0::Calibrate(Int_t ei){ Line 1848  Int_t CaloLevel0::Calibrate(Int_t ei){
1848              } else {              } else {
1849                svstrip[istrip] = -(fbi*1000000000 + plo*10000000 + j4*100000 + cle);                svstrip[istrip] = -(fbi*1000000000 + plo*10000000 + j4*100000 + cle);
1850              };              };
1851                if ( debug ) printf(" svstrip[%i] = %i  fbi %i plo %i j4 %i cle %i \n",istrip,svstrip[istrip],fbi,plo,j4,cle);
1852              //              //
1853              istrip++;              istrip++;
1854            };            };

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

  ViewVC Help
Powered by ViewVC 1.1.23