]> jspc29.x-matter.uni-frankfurt.de Git - mimosis_chain.git/commitdiff
..
authorMaps <maps@ikf>
Mon, 25 Mar 2024 00:08:22 +0000 (01:08 +0100)
committerMaps <maps@ikf>
Mon, 25 Mar 2024 00:08:22 +0000 (01:08 +0100)
analysis/mbs/dabc/plugins/hadaq/hldprint.cxx
scripts/Mimosis.pm
scripts/cli/mimosis

index 16da414e9dc6e7e159520db0e92da2f875f6ba2e..ef6b4fd6d199bc215350fd7a5799a07e2576d3de 100644 (file)
 #include <cstdio>
 #include <cstring>
+#include <iostream>
+#include <fstream>
+#include <vector>
 #include "hadaq/api.h"
 
-int main(int argc, char* argv[]) {
 
+void await_params() {
+    std::string pipeName = "/tmp/scurveipipe";
+    FILE *iPipe = fopen(pipeName.c_str(), "r");
+
+    int buf;
+    std::string msg;
+    bool foundFrame = false;
+
+    if(iPipe == nullptr) {
+       std::printf("ERROR: Couldn't open file.\n");
+       std::exit(-1);
+    }
+
+    buf = fgetc(iPipe);
+    while(!foundFrame && buf != EOF) {
+       char c = static_cast<char>(buf);
+       msg += c;
+       auto startPos = msg.find("START");
+       auto endPos = msg.find("END");
+       if(startPos != std::string::npos && endPos != std::string::npos) {
+          foundFrame = true;
+          break;
+       }
+       buf = fgetc(iPipe);
+    }
+    std::cout << msg << '\n';
+    fclose(iPipe);
+}
+
+
+int send_ack() {
+    std::string pipeName = "/tmp/scurveapipe";
+    FILE *iPipe = fopen(pipeName.c_str(), "w");
+
+    if(iPipe == nullptr) {
+       std::printf("ERROR: Couldn't open file.\n");
+       std::exit(-1);
+    }
+
+    std::string msg("ACK");
+    fputs(msg.c_str(),iPipe);
+    fclose(iPipe);
+    return 0;
+}
+
+
+void fit(uint16_t vcasn)
+{
+   auto exec = [=]()
+   {
+      // std::ofstream fs;
+      // fs.open("params.csv");
+
+      // decltype(+SCurveRegionA) histP;
+      // switch(pulseRegion)
+      // {
+      //   case 0: histP = SCurveRegionA;
+      //   case 1: histP = SCurveRegionB;
+      //   case 2: histP = SCurveRegionC;
+      //   case 3: histP = SCurveRegionD;
+      // }
+
+      // for(int i = 1; i < 504; i++)
+      // {
+      //   for(int j = pulseColRegionLow; j<pulseColRegionHig; j++)
+      //   {
+      //     auto f1 = new TF1("f1","([0]*(1+TMath::Erf((x-[1])/(TMath::Sqrt2()*[2]))))",1,255, " ");
+      //     f1->SetParLimits(0,0,55000);
+      //     f1->SetParLimits(1,0,255);
+      //     f1->SetParameters(50000,100,10);
+      //     f1->SetParError(1, 0.1);
+
+      //     auto hist = static_cast<TH2*>(histP)->ProjectionX(" ",i*colsN+j,i*colsN+j);
+      //     int status = static_cast<TH1*>(hist)->Fit("f1","NQS");
+      //     fs << j << "\t" << i << "\t" << status << "\t" << f1->GetParameter(1) << "\t" << f1->GetParameter(2) << "\n";
+      //     std::cout << j << "\t" << i << "\t" << status << "\t" << f1->GetParameter(1) << "\t" << f1->GetParameter(2) << "\n";
+      //     delete hist;
+      //     delete f1;
+      //   }
+      // }
+      // fs.close();
+   };
+}
+
+
+int main(int argc, char* argv[])
+{
    std::string src = argv[1];
    hadaq::ReadoutHandle ref = hadaq::ReadoutHandle::Connect(src.c_str());
    if (ref.null()) return 1;
    hadaq::RawEvent *evnt = nullptr;
 
+   SCAN:
+   await_params();
+   send_ack();
+
    while (true) {
       evnt = ref.NextEvent(1.,-1);
       if (!evnt) continue;
       hadaq::RawSubevent* sub = nullptr;
 
       while ((sub = evnt->NextSubevent(sub)) != nullptr) {
-         // evnt->Dump();
-         // sub->PrintRawData();
+         unsigned headersNow = 0;
+         uint32_t pulseMsg = 0;
          unsigned size = sub->GetNrOfDataWords();
+
          for( unsigned i = 0; i<size; i++) {
-            std::printf("%u\t%x\n",size, sub->Data(i));
+            uint32_t data = static_cast<uint32_t>(sub->Data(i));
+
+            if((data & 0xFF000000) == 0xFE000000) {
+
+               headersNow++;
+
+               if(headersNow == 3) {
+                  pulseMsg = (data & 0xFF0000) >> 16;
+                  pulseMsg += (data & 0xFF) << 8;
+               } else if(headersNow == 4) {
+                  pulseMsg +=  data & 0xFF0000;
+                  pulseMsg += (data & 0xFF) << 24;
+
+                  if( ( ( 0x00c00000 & pulseMsg ) == 0x00c00000 ) ) {
+                     std::printf("Start region\n");
+                  } else if( ( 0x00c00000 & pulseMsg ) == 0x00400000 ) {
+                     std::printf("Start fit\n");
+                     fit(static_cast<uint16_t>(pulseMsg & 0xFF));
+                     goto SCAN;
+                  } else if( ( 0x00c00000 & pulseMsg ) == 0x00800000 ) {
+                     std::printf("Start next round\n");
+                     goto SCAN;
+                  } else if ( ( 0x00300000 & pulseMsg ) == 0x00300000 ){
+                     return 0;
+                  }
+               }
+            } else if((data & 0xFF000000) == 0xFF000000) {
+               headersNow = 0;
+            } else {
+            }
+            // std::printf("%u\t%x\n",size, sub->Data(i));
          }
       }
    }
-
    ref.Disconnect();
    return 0;
 }
index f28e0b6bf3034e0987b2c57e7d6bbe2f99137b83..cfb37205f698b85f97eb35090aefed310599eb8c 100755 (executable)
@@ -68,8 +68,8 @@ sub mimosis_i2c_command
 
 
 
-sub mimosis_register_write
-{
+sub mimosis_register_write{
+
     my ( $fpga, $mimosis_reg, $mimosis_data, $singleaccess ) = @_;
     my ( $addr, $cmd, $data );
 
@@ -162,8 +162,7 @@ sub mimosis_instr_write
 
 
 
-sub mimosis_load_file
-{
+sub mimosis_load_file {
     my %params = @_;
 
     my $fpga = $params{'fpga'};
@@ -183,7 +182,6 @@ sub mimosis_load_file
 
     @config = do $file;
 
-
     foreach my $i (@config)
     {
         if ( defined( @$i[1] ) )
@@ -211,8 +209,7 @@ sub mimosis_load_file
     }
 }
 
-sub mimosis_dacscan_initial_test
-{
+sub mimosis_dacscan_initial_test {
 
     my %odac = (
         1 => 0x0045,
@@ -320,20 +317,9 @@ array names2[4] = [\\"VRESET\\", \\"VPH\\", \\"VPL\\", \\"VPHF\\"];
 plot \\"good_range_vphf.txt\\" using 1:2:3 ls 4 w filledcu fc \\"grey\\", \\"good_range_odac.txt\\" using 1:2:3 ls 4 w filledcu fc \\"grey\\", for [i=0:3] \\"other_data.csv\\" using 2:3 index i with l title names2[i+1]";
 END_MESSAGE
     system $message_png;
-
-
 }
 
 
-#TOFO Implement grey area to guide eyes
-#Idea
-#f(x)=1100+0.9*x;
-#g(x)=1200+1.1*x;
-#xmax=255;
-#set xrange [0:xmax];
-#plot '+' using 1:(f($1)):(g($1)) with filledcurves closed;
-
-
 sub mimosis_dacscan
 {
     my %vdac = (
@@ -709,26 +695,56 @@ sub mimosis_dacscan_sf
 }
 
 
+
+sub send_params_scurve
+{
+    my ($yi, $rowTrain) = @_;
+    my $frameWr = "START-" . $yi . "-" . $rowTrain . "-END";
+    my $pipeNameWr = "/tmp/scurveipipe";
+    my $fdPipeWr = POSIX::open($pipeNameWr, &POSIX::O_WRONLY);
+    POSIX::write($fdPipeWr,$frameWr,length($frameWr));
+    POSIX::close($fdPipeWr);
+}
+
+
+
+sub await_ack
+{
+    my $pipeNameRd = "/tmp/scurveapipe";
+    my $fdPipeRd = POSIX::open($pipeNameRd);
+    my $frameRd;
+    my $reading = 1;
+    while($reading) {
+        my $buf;
+        my $bytes = POSIX::read($fdPipeRd,$buf,1);
+        $frameRd .= $buf;
+        if($frameRd =~ /ACK/) {
+            $reading = 0;
+        }
+    }
+    POSIX::close($fdPipeRd);
+    print "ACK received\n";
+}
+
+
+
 sub mimosis_scan_region
 {
     my %params = @_;
-
     my $fpga = $params{'fpga'};
     my $pulseonly = $params{'pulseonly'};
     my $region = $params{'region'};
-    my $firstRow = $params{'firstRow'};
-    my $lastRow = $params{'lastRow'};
-    my $rowDiv = $params{'rowDiv'};
-    my $firstset = $params{'firstset'};
-    my $lastset = $params{'lastset'};
-    my $setdiv = $params{'setdiv'};
-    my $settime = $params{'settime'};
+    my $ySta = $params{'firstrow'};
+    my $yEnd = $params{'lastrow'};
+    my $setSta = $params{'firstset'};
+    my $setEnd = $params{'lastset'};
+    my $setDiv = $params{'setdiv'};
+    my $setTime = $params{'settime'};
     my $slow = $params{'slow'};
     my $a = $params{'a'};
-    my $rowsatonce = $params{'rowsatonce'};
+    my $yTra = $params{'rowsatonce'};
     my $printset = $params{'printset'};
     my $printrow = $params{'printrow'};
-    my $printcol = $params{'printcol'};
     my $printall = $params{'printall'};
     my $analogAlimA = $params{'analogAlimA'};
     my $analogAlimB = $params{'analogAlimB'};
@@ -736,11 +752,9 @@ sub mimosis_scan_region
     my $analogDlimB = $params{'analogDlimB'};
     my $modpulse = $params{'modpulse'};
 
-
     defined $fpga or die "Mimosis::mimosis_scan_region: Must provide $fpga.";
     defined $region or die "Mimosis::mimosis_scan_region: Must provide $region.";
 
-
     my %collim = (
         'A' => [   0, 127 ],
         'B' => [ 128, 511 ],
@@ -748,37 +762,23 @@ sub mimosis_scan_region
         'D' => [ 896, 1023 ]
         );
 
-    my %rowAdd = (
-        'A' => 4,
-        'B' => 2,
-        'C' => 2,
-        'D' => 4
-        );
-
-    my %regBitHash = (
-        'A' => 0,
-        'B' => 1,
-        'C' => 2,
-        'D' => 3
-        );
+    %rowAdd     = ( 'A' => 4, 'B' => 2, 'C' => 2, 'D' => 4 );
 
+    %regBitHash = ( 'A' => 0, 'B' => 1, 'C' => 2, 'D' => 3 );
 
     my $regBit = $regBitHash{$region};
 
-
-    $firstRow = defined $firstRow ? $firstRow : 0;
-    $lastRow = defined $lastRow ? $lastRow : 504;
-    $rowDiv = defined $rowDiv ? $rowDiv : 1;
-    $firstset = defined $firstset ? $firstset : 0x0;
-    $lastset = defined $lastset ? $lastset : 0xff;
-    $setdiv = defined $setdiv ? $setdiv : 1;
-    $settime = defined $settime ? $settime : 1000;
+    $ySta = defined $ySta ? $ySta : 0;
+    $yEnd = defined $yEnd ? $yEnd : 504;
+    $setSta = defined $setSta ? $setSta : 0x0;
+    $setEnd = defined $setEnd ? $setEnd : 0xff;
+    $setDiv = defined $setDiv ? $setDiv : 1;
+    $setTime = defined $setTime ? $setTime : 1000;
     $slow = defined $slow ? $slow : 10000;
     $a = defined $a ? $a : 0;
-    $rowTrain = defined $rowTrain ? $rowTrain : $rowAdd{$region};
+    $yTra = defined $yTra ? $yTra : $rowAdd{$region};
     $printset = defined $printset ? 1 : 0;
     $printrow = defined $printrow ? 1 : 0;
-    $printcol = defined $printcol ? 1 : 0;
     $printall = defined $printall ? 1 : 0;
     $pixpulseA_A = defined $pixpulseA_A ? $pixpulseA_A : 25;
     $pixpulseA_B = defined $pixpulseA_B ? $pixpulseA_B : 75;
@@ -786,504 +786,73 @@ sub mimosis_scan_region
     $pixpulseD_B = defined $pixpulseD_B ? $pixpulseD_B : 0;
     $modpulse = defined $modpulse ? $modpulse : 3;
 
-
-    my $pixpulseA_A_msb = ( $pixpulseA_A & 0xff00 ) >> 8;
-    my $pixpulseA_A_lsb =   $pixpulseA_A & 0x00ff;
-    my $pixpulseA_B_msb = ( $pixpulseA_B & 0xff00 ) >> 8;
-    my $pixpulseA_B_lsb =   $pixpulseA_B & 0x00ff;
-    my $pixpulseD_A_msb = ( $pixpulseD_A & 0xff00 ) >> 8;
-    my $pixpulseD_A_lsb =   $pixpulseD_A & 0x00ff;
-    my $pixpulseD_B_msb = ( $pixpulseD_B & 0xff00 ) >> 8;
-    my $pixpulseD_B_lsb =   $pixpulseD_B & 0x00ff;
-
-
     Mimosis::mimosis_register_write( $fpga, 0x0020, 0x40, $a ); usleep($slow); #EN_PIXELMASK to 0 for pulse
     Mimosis::mimosis_instr_write( $fpga,  0x3f ); usleep($slow); #INSTR select all pixels
     Mimosis::mimosis_instr_write( $fpga,  0x04 ); usleep($slow); #INSTR reset mask
     Mimosis::mimosis_instr_write( $fpga,  0x3e ); usleep($slow); #INSTR unselect all pixels
-    Mimosis::mimosis_register_write( $fpga, 0x0066, $pixpulseA_A_lsb, $a ); usleep($slow); #analog pulsing pulse A, limit A
-    Mimosis::mimosis_register_write( $fpga, 0x0166, $pixpulseA_A_msb, $a ); usleep($slow);
-    Mimosis::mimosis_register_write( $fpga, 0x0076, $pixpulseA_B_lsb, $a ); usleep($slow); # analog pulsing pulse A, limit B
-    Mimosis::mimosis_register_write( $fpga, 0x0176, $pixpulseA_B_msb, $a ); usleep($slow);
-    Mimosis::mimosis_register_write( $fpga, 0x0067, $pixpulseD_A_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit A
-    Mimosis::mimosis_register_write( $fpga, 0x0167, $pixpulseD_A_msb, $a ); usleep($slow);
-    Mimosis::mimosis_register_write( $fpga, 0x0077, $pixpulseD_B_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit B
-    Mimosis::mimosis_register_write( $fpga, 0x0177, $pixpulseD_B_msb, $a ); usleep($slow);
+    Mimosis::mimosis_register_write( $fpga, 0x0066,   $pixpulseA_A & 0x00ff       , $a ); usleep($slow); #analog pulsing pulse A, limit A
+    Mimosis::mimosis_register_write( $fpga, 0x0166, ( $pixpulseA_A & 0xff00 ) >> 8, $a ); usleep($slow);
+    Mimosis::mimosis_register_write( $fpga, 0x0076,   $pixpulseA_B & 0x00ff       , $a ); usleep($slow); # analog pulsing pulse A, limit B
+    Mimosis::mimosis_register_write( $fpga, 0x0176, ( $pixpulseA_B & 0xff00 ) >> 8, $a ); usleep($slow);
+    Mimosis::mimosis_register_write( $fpga, 0x0067,   $pixpulseD_A & 0x00ff       , $a ); usleep($slow); # analog pulsing pulse D, limit A
+    Mimosis::mimosis_register_write( $fpga, 0x0167, ( $pixpulseD_A & 0xff00 ) >> 8, $a ); usleep($slow);
+    Mimosis::mimosis_register_write( $fpga, 0x0077,   $pixpulseD_B & 0x00ff       , $a ); usleep($slow); # analog pulsing pulse D, limit B
+    Mimosis::mimosis_register_write( $fpga, 0x0177, ( $pixpulseD_B & 0xff00 ) >> 8, $a ); usleep($slow);
     Mimosis::mimosis_register_write( $fpga, 0x007d, $modpulse, $a ); usleep($slow); #set modpulse. possible values: 1f/1, 1f/2, 1f/4, 1f/8, 1f/16, 1f/32, 1f/64, 1f/128
 
-    my $pipeNameWr = "/tmp/scurvepipewr";
-    my $pipeNameRd = "/tmp/scurvepiperd";
-    my $fdPipeWr = POSIX::open($pipeNameWr, &POSIX::O_WRONLY);
-
-    my $rowcounter = 0;
+    for ( my $yOff = $ySta;
+          $yOff <= $yEnd;
+          $yOff+=$yTra ) {
 
-    for ( my $yi = $firstRow;
-          $yi+$rowTrain-1 <= $lastRow;
-          $yi+=$rowTrain*$rowDiv ) {
-
-        for ( my $y = $yi;
-              $y < $yi+$rowTrain*$rowDiv;
+        my $y = $yOff;
+        for ( ;
+              $y < $yOff+$yTra && $y <= $yEnd;
               $y+=1 ) {
 
-            $rowcounter = $rowcounter + 1;
-            if( ($rowcounter-1)%$rowDiv != 0) { next; }
-
-            my $rAddrR = $y/8;
-            my $bitR   = $y%8;
-            my $add_regR = ( $rAddrR << 8 ) + 0x84;
-
             if( $printrow || $printall ) { printf("row: $y\n"); }
 
-            Mimosis::mimosis_register_write( $fpga, $add_regR, ( 0x1 << $bitR ), $a ); usleep($slow);
+            my $regAdd = $y/8;
+            my $regBit   = $y%8;
+            my $regWord = ( $regAdd << 8 ) + 0x84;
+            Mimosis::mimosis_register_write( $fpga, $regWord, ( 0x1 << $regBit ), $a ); usleep($slow);
             Mimosis::mimosis_instr_write( $fpga,  0x27 ); usleep($slow); #INSTR select all pixels
             Mimosis::mimosis_instr_write( $fpga,  0x05 ); usleep($slow); #INSTR set mask pulse
             Mimosis::mimosis_register_write( $fpga, 0x4087, 0x0, $a ); usleep($slow); #unselect all pixels (register wise)
             Mimosis::mimosis_instr_write( $fpga,  0x3e ); usleep($slow); #INSTR unselect all pixels
         }
 
-        my $frameWr = "START-" . $yi . "-" . $rowTrain . "-END";
-        POSIX::write($fdPipeWr,$frameWr,length($frameWr));
-
-        print "Data sent.\n";
-        print "Waiting for ACK\n";
-
-        my $fdPipeRd = POSIX::open($pipeNameRd);
-        my $frameRd;
-        my $reading = 1;
-        while($reading) {
-            my $buf;
-            my $bytes = POSIX::read($fdPipeRd,$buf,1);
-            $frameRd .= $buf;
-            if($frameRd =~ /ACK/) {
-                $reading = 0;
-            }
-        }
-        POSIX::close($fdPipeRd);
-
-        unless($pulseonly) {
-            my $setcounter = 0;
-            for my $set (reverse ($firstset .. $lastset) ) {
-              $setcounter = $setcounter + 1;
-              if( ($setcounter-1)%$setdiv != 0) { next; }
-
-              my $pulseNumber = ($set << 24) + 0x00c00000 + ($regBit << 20) + $yi;
-              trb_register_write_mem( $fpga, 0xa209, 0, [ $pulseNumber ], 1 ); usleep($slow);
-              Mimosis::mimosis_register_write( $fpga, 0x0046, $set, $a ); usleep($settime);
-
-              if( $printset || $printall ) { printf("set: $set\n"); }
-            }
-
-            Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow);
-            Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR set mask pulse
-            Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR set mask pulse
+        send_params_scurve($yOff, $yTra);
+        await_ack();
+
+        # unless($pulseonly)
+        # {
+        #     # my $setCnt = 0;
+        #     for my $set (reverse ($setSta .. $setEnd) )
+        #     {
+        #         # $setCnt = $setCnt + 1;
+        #         # if( ($setCnt-1)%$setDiv != 0) { next; }
+
+        #         my $pulseMsg = ($set << 24) + 0x00c00000;
+        #         trb_register_write_mem( $fpga, 0xa209, 0, [ $pulseMsg ], 1 ); usleep($slow);
+        #         Mimosis::mimosis_register_write( $fpga, 0x0046, $set, $a ); usleep($setTime);
+
+        #         if( $printset || $printall ) { printf("set: $set\n"); }
+        #     }
+
+        #     Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow);
+        #     Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR set mask pulse
+        #     Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR set mask pulse
+        # }
+        # indicate end of current rows
+        if($y == $yEnd) {
+            trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00800000 ], 1 ); usleep($slow);
+            print "check\n";
         }
     }
 }
 
 
 
-# sub mimosis_scan_region
-# {
-#     my %params = @_;
-
-#     my $fpga = $params{'fpga'};
-#     my $pulseonly = $params{'pulseonly'};
-#     my $region = $params{'region'};
-#     my $firstrow = $params{'firstrow'};
-#     my $lastrow = $params{'lastrow'};
-#     my $rowdiv = $params{'rowdiv'};
-#     my $firstcol = $params{'firstcol'};
-#     my $lastcol = $params{'lastcol'};
-#     my $coldiv = $params{'coldiv'};
-#     my $firstset = $params{'firstset'};
-#     my $lastset = $params{'lastset'};
-#     my $setdiv = $params{'setdiv'};
-#     my $settime = $params{'settime'};
-#     my $slow = $params{'slow'};
-#     my $a = $params{'a'};
-#     my $rowsatonce = $params{'rowsatonce'};
-#     my $printset = $params{'printset'};
-#     my $printrow = $params{'printrow'};
-#     my $printcol = $params{'printcol'};
-#     my $printall = $params{'printall'};
-#     my $analogAlimA = $params{'analogAlimA'};
-#     my $analogAlimB = $params{'analogAlimB'};
-#     my $analogDlimA = $params{'analogDlimA'};
-#     my $analogDlimB = $params{'analogDlimB'};
-#     my $modpulse = $params{'modpulse'};
-
-
-#     defined $fpga or die "Mimosis::mimosis_scan_region: Must provide $fpga.";
-#     defined $region or die "Mimosis::mimosis_scan_region: Must provide $region.";
-
-
-#     my %collim = (
-#         'A' => [   0, 127 ],
-#         'B' => [ 128, 511 ],
-#         'C' => [ 512, 895 ],
-#         'D' => [ 896, 1023 ]
-#         );
-
-#     my %rowAdd = (
-#         'A' => 4,
-#         'B' => 2,
-#         'C' => 2,
-#         'D' => 4
-#         );
-
-#     my %regBitHash = (
-#         'A' => 0,
-#         'B' => 1,
-#         'C' => 2,
-#         'D' => 3
-#         );
-
-
-#     my $regBit = $regBitHash{$region};
-
-
-#     $firstrow = defined $firstrow ? $firstrow : 0;
-#     $lastrow = defined $lastrow ? $lastrow : 504;
-#     $rowdiv = defined $rowdiv ? $rowdiv : 1;
-#     $firstcol = defined $firstcol ? $firstcol : $collim{$region}->[0];
-#     $lastcol = defined $lastcol ? $lastcol : $collim{$region}->[1];
-#     $coldiv = defined $coldiv ? $coldiv : 1;
-#     $firstset = defined $firstset ? $firstset : 0x0;
-#     $lastset = defined $lastset ? $lastset : 0xff;
-#     $setdiv = defined $setdiv ? $setdiv : 1;
-#     $settime = defined $settime ? $settime : 1000;
-#     $slow = defined $slow ? $slow : 10000;
-#     $a = defined $a ? $a : 0;
-#     $rowsatonce = defined $rowsatonce ? $rowsatonce : $rowAdd{$region};
-#     $printset = defined $printset ? 1 : 0;
-#     $printrow = defined $printrow ? 1 : 0;
-#     $printcol = defined $printcol ? 1 : 0;
-#     $printall = defined $printall ? 1 : 0;
-#     $pixpulseA_A = defined $pixpulseA_A ? $pixpulseA_A : 25;
-#     $pixpulseA_B = defined $pixpulseA_B ? $pixpulseA_B : 75;
-#     $pixpulseD_A = defined $pixpulseD_A ? $pixpulseD_A : 0;
-#     $pixpulseD_B = defined $pixpulseD_B ? $pixpulseD_B : 0;
-#     $modpulse = defined $modpulse ? $modpulse : 3;
-
-
-#     my $pixpulseA_A_msb = ( $pixpulseA_A & 0xff00 ) >> 8;
-#     my $pixpulseA_A_lsb =   $pixpulseA_A & 0x00ff;
-#     my $pixpulseA_B_msb = ( $pixpulseA_B & 0xff00 ) >> 8;
-#     my $pixpulseA_B_lsb =   $pixpulseA_B & 0x00ff;
-#     my $pixpulseD_A_msb = ( $pixpulseD_A & 0xff00 ) >> 8;
-#     my $pixpulseD_A_lsb =   $pixpulseD_A & 0x00ff;
-#     my $pixpulseD_B_msb = ( $pixpulseD_B & 0xff00 ) >> 8;
-#     my $pixpulseD_B_lsb =   $pixpulseD_B & 0x00ff;
-
-
-#     Mimosis::mimosis_register_write( $fpga, 0x0020, 0x40, $a ); usleep($slow); #EN_PIXELMASK to 0 for pulse
-#     Mimosis::mimosis_instr_write( $fpga,  0x3f ); usleep($slow); #INSTR select all pixels
-#     Mimosis::mimosis_instr_write( $fpga,  0x04 ); usleep($slow); #INSTR reset mask
-#     Mimosis::mimosis_instr_write( $fpga,  0x3e ); usleep($slow); #INSTR unselect all pixels
-#     Mimosis::mimosis_register_write( $fpga, 0x0066, $pixpulseA_A_lsb, $a ); usleep($slow); #analog pulsing pulse A, limit A
-#     Mimosis::mimosis_register_write( $fpga, 0x0166, $pixpulseA_A_msb, $a ); usleep($slow);
-#     Mimosis::mimosis_register_write( $fpga, 0x0076, $pixpulseA_B_lsb, $a ); usleep($slow); # analog pulsing pulse A, limit B
-#     Mimosis::mimosis_register_write( $fpga, 0x0176, $pixpulseA_B_msb, $a ); usleep($slow);
-#     Mimosis::mimosis_register_write( $fpga, 0x0067, $pixpulseD_A_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit A
-#     Mimosis::mimosis_register_write( $fpga, 0x0167, $pixpulseD_A_msb, $a ); usleep($slow);
-#     Mimosis::mimosis_register_write( $fpga, 0x0077, $pixpulseD_B_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit B
-#     Mimosis::mimosis_register_write( $fpga, 0x0177, $pixpulseD_B_msb, $a ); usleep($slow);
-#     Mimosis::mimosis_register_write( $fpga, 0x007d, $modpulse, $a ); usleep($slow); #set modpulse. possible values: 1f/1, 1f/2, 1f/4, 1f/8, 1f/16, 1f/32, 1f/64, 1f/128
-
-#     my $rowcounter = 0;
-
-#     for ( my $yi = $firstrow; $yi+$rowsatonce-1 <= $lastrow; $yi+=$rowsatonce*$rowdiv ) {
-
-#         for ( my $y = $yi; $y < $yi+$rowsatonce*$rowdiv; $y+=1 ) {
-
-#             $rowcounter = $rowcounter + 1;
-#             if( ($rowcounter-1)%$rowdiv != 0) { next; }
-
-#             my $rAddrR = $y/8;
-#             my $bitR   = $y%8;
-#             my $add_regR = ( $rAddrR << 8 ) + 0x84;
-
-#             if( $printrow || $printall ) { printf("row: $y\n"); }
-
-#             Mimosis::mimosis_register_write( $fpga, $add_regR, ( 0x1 << $bitR ), $a ); usleep($slow);
-#             Mimosis::mimosis_instr_write( $fpga,  0x27 ); usleep($slow); #INSTR select all pixels
-#             Mimosis::mimosis_instr_write( $fpga,  0x05 ); usleep($slow); #INSTR set mask pulse
-#             Mimosis::mimosis_register_write( $fpga, 0x4087, 0x0, $a ); usleep($slow); #unselect all pixels (register wise)
-#             Mimosis::mimosis_instr_write( $fpga,  0x3e ); usleep($slow); #INSTR unselect all pixels
-
-#             # my $colcounter = 0;
-
-#             # for( my $x = $firstcol; $x <= $lastcol; $x+=1 )
-#             # {
-#             #     $colcounter = $colcounter + 1;
-#             #     if( ($colcounter-1)%$coldiv != 0) { next; }
-
-#             #     my $rAddrC = $x/16;  #region address
-#             #     my $bitC   = ($x/2)%8;  #double column in region
-#             #     my $add_regC = ($rAddrC << 8);
-#             #     if    (($x%2 == 1)) { $add_regC += 0x82; }
-#             #     elsif (($x%2 == 0)) { $add_regC += 0x81; }
-
-#             #     Mimosis::mimosis_register_write( $fpga, $add_regC, ( 0x1 << $bitC ), $a ); usleep($slow);
-#             #     Mimosis::mimosis_register_write( $fpga, $add_regR, ( 0x1 << $bitR ), $a ); usleep($slow);
-#             #     Mimosis::mimosis_instr_write( $fpga,  0x05 ); usleep($slow); #INSTR set mask pulse
-#             #     Mimosis::mimosis_register_write( $fpga, 0x4087, 0x0, $a ); usleep($slow); #unselect all pixels (register wise)
-
-#             #     if( $printcol || $printall ) { printf("col: $x\n"); }
-#             # }
-#         }
-
-#         unless($pulseonly) {
-#             my $setcounter = 0;
-#             for my $set (reverse ($firstset .. $lastset) ) {
-#               $setcounter = $setcounter + 1;
-#               if( ($setcounter-1)%$setdiv != 0) { next; }
-
-#               my $pulseNumber = ($set << 24) + 0x00c00000 + ($regBit << 20) + $yi;
-#               trb_register_write_mem( $fpga, 0xa209, 0, [ $pulseNumber ], 1 ); usleep($slow);
-#               Mimosis::mimosis_register_write( $fpga, 0x0046, $set, $a ); usleep($settime);
-
-#               if( $printset || $printall ) { printf("set: $set\n"); }
-#             }
-
-#             Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow);
-#             Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR set mask pulse
-#             Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR set mask pulse
-#         }
-#     }
-# }
-
-
-
-sub mimosis_scan_pixel
-{
-    my %params = @_;
-    my $fpga = $params{'fpga'};
-    my $colpix = $params{'colpix'};
-    my $rowpix = $params{'rowpix'};
-    my $firstset = $params{'firstset'};
-    my $lastset = $params{'lastset'};
-    my $setdiv = $params{'setdiv'};
-    my $settime = $params{'settime'};
-    my $pulseonly = $params{'pulseonly'};
-    my $slow = $params{'slow'};
-    my $a = $params{'a'};
-    my $printset = $params{'printset'};
-    my $printall = $params{'printall'};
-    my $analogAlimA = $params{'analogAlimA'};
-    my $analogAlimB = $params{'analogAlimB'};
-    my $analogDlimA = $params{'analogDlimA'};
-    my $analogDlimB = $params{'analogDlimB'};
-    my $modpulse = $params{'modpulse'};
-
-    defined $fpga or die "Mimosis::mimosis_scan_pixel: Must provide $fpga.";
-    defined $colpix or die "Mimosis::mimosis_scan_pixel: Must provide $colpix.";
-    defined $rowpix or die "Mimosis::mimosis_scan_pixel: Must provide $rowpix.";
-
-    $firstset = defined $firstset ? $firstset : 0x0;
-    $lastset = defined $lastset ? $lastset : 0xff;
-    $setdiv = defined $setdiv ? $setdiv : 1;
-    $settime = defined $settime ? $settime : 1000;
-    $slow = defined $slow ? $slow : 10000;
-    $a = defined $a ? $a : 0;
-    $printset = defined $printset ? 1 : 0;
-    $printall = defined $printall ? 1 : 0;
-    $pixpulseA_A = defined $pixpulseA_A ? $pixpulseA_A : 25;
-    $pixpulseA_B = defined $pixpulseA_B ? $pixpulseA_B : 75;
-    $pixpulseD_A = defined $pixpulseD_A ? $pixpulseD_A : 0;
-    $pixpulseD_B = defined $pixpulseD_B ? $pixpulseD_B : 0;
-    $modpulse = defined $modpulse ? $modpulse : 3;
-
-    if( !( $colpix < 1024 && $rowpix < 503 ) )
-    {
-        print colored ( "Specified column/row values seem to be unlogic. Aborting.", 'red' ), "\n";
-        exit 1;
-    }
-
-    my $pixpulseA_A_msb = ( $pixpulseA_A & 0xff00 ) >> 8;
-    my $pixpulseA_A_lsb =   $pixpulseA_A & 0x00ff;
-    my $pixpulseA_B_msb = ( $pixpulseA_B & 0xff00 ) >> 8;
-    my $pixpulseA_B_lsb =   $pixpulseA_B & 0x00ff;
-    my $pixpulseD_A_msb = ( $pixpulseD_A & 0xff00 ) >> 8;
-    my $pixpulseD_A_lsb =   $pixpulseD_A & 0x00ff;
-    my $pixpulseD_B_msb = ( $pixpulseD_B & 0xff00 ) >> 8;
-    my $pixpulseD_B_lsb =   $pixpulseD_B & 0x00ff;
-
-    Mimosis::mimosis_register_write( $fpga, 0x0020, 0x40, $a ); usleep($slow); #EN_PIXELMASK to 0 for pulse
-    Mimosis::mimosis_instr_write( $fpga,  0x3f ); usleep($slow); #INSTR select all pixels
-    Mimosis::mimosis_instr_write( $fpga,  0x04 ); usleep($slow); #INSTR reset mask
-    Mimosis::mimosis_instr_write( $fpga,  0x3e ); usleep($slow); #INSTR unselect all pixels
-    Mimosis::mimosis_register_write( $fpga, 0x0066, $pixpulseA_A_lsb, $a ); usleep($slow); #analog pulsing pulse A, limit A
-    Mimosis::mimosis_register_write( $fpga, 0x0166, $pixpulseA_A_msb, $a ); usleep($slow);
-    Mimosis::mimosis_register_write( $fpga, 0x0076, $pixpulseA_B_lsb, $a ); usleep($slow); # analog pulsing pulse A, limit B
-    Mimosis::mimosis_register_write( $fpga, 0x0176, $pixpulseA_B_msb, $a ); usleep($slow);
-    Mimosis::mimosis_register_write( $fpga, 0x0067, $pixpulseD_A_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit A
-    Mimosis::mimosis_register_write( $fpga, 0x0167, $pixpulseD_A_msb, $a ); usleep($slow);
-    Mimosis::mimosis_register_write( $fpga, 0x0077, $pixpulseD_B_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit B
-    Mimosis::mimosis_register_write( $fpga, 0x0177, $pixpulseD_B_msb, $a ); usleep($slow);
-    Mimosis::mimosis_register_write( $fpga, 0x007d, $modpulse, $a ); usleep($slow); #set modpulse. possible values: 1f/1, 1f/2, 1f/4, 1f/8, 1f/16, 1f/32, 1f/64, 1f/128
-
-    my $rAddrC = $colpix/16;  #region address
-    my $bitC   = ($colpix/2)%8;  #double column in region
-    my $add_regC = $rAddrC << 8;
-    if    (($colpix%2 == 1)) { $add_regC += 0x82; }
-    elsif (($colpix%2 == 0)) { $add_regC += 0x81; }
-
-    my $rAddrR = $rowpix/8;
-    my $bitR   = $rowpix%8;
-    my $add_regR = ( $rAddrR << 8 ) + 0x84;
-
-    Mimosis::mimosis_register_write( $fpga, $add_regC, ( 0x1 << $bitC ), $a ); usleep($s);
-    Mimosis::mimosis_register_write( $fpga, $add_regR, ( 0x1 << $bitR ), $a ); usleep($s);
-    Mimosis::mimosis_instr_write( $fpga,  0x05 ); usleep($s); #INSTR set mask pulse
-    Mimosis::mimosis_register_write( $fpga, 0x4087, 0x0, $a ); usleep($s); #unselect all pixels (register wise)
-
-    if( defined $pulseonly ){ exit 0; }
-
-    my $setcounter = 0;
-    for my $set (reverse ($firstset .. $lastset) )
-    {
-      $setcounter = $setcounter + 1;
-      if( ($setcounter-1)%$setdiv != 0) { next; }
-
-      my $pulseNumber = ( $set << 24 ) + ( ( $colpix & 0x3ff ) << 12 ) + ( $rowpix & 0x1ff );
-      trb_register_write_mem( $fpga, 0xa209, 0, [ $pulseNumber ], 1 ); usleep($slow);
-      Mimosis::mimosis_register_write( $fpga, 0x0046, $set, $a ); usleep($settime);
-
-      if( $printset || $printall ) { printf("set: $set\n"); }
-    }
-
-    Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow);
-    Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR set mask pulse
-    Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR set mask pulse
-
-    trb_register_write_mem( $fpga, 0xa209, 0, [ 0 ], 1 );
-    exit 0;
-}
-
-
-
-sub mimosis_scan_line
-{
-    my %params = @_;
-
-    my $fpga = $params{'fpga'};
-    my $pulseonly = $params{'pulseonly'};
-    my $firstrow = $params{'firstrow'};
-    my $lastrow = $params{'lastrow'};
-    my $rowdiv = $params{'rowdiv'};
-    my $firstcol = $params{'firstcol'};
-    my $lastcol = $params{'lastcol'};
-    my $coldiv = $params{'coldiv'};
-    my $firstset = $params{'firstset'};
-    my $lastset = $params{'lastset'};
-    my $setdiv = $params{'setdiv'};
-    my $settime = $params{'settime'};
-    my $slow = $params{'slow'};
-    my $a = $params{'a'};
-    my $rowsatonce = $params{'rowsatonce'};
-    my $printset = $params{'printset'};
-    my $printrow = $params{'printrow'};
-    my $printcol = $params{'printcol'};
-    my $printall = $params{'printall'};
-    my $analogAlimA = $params{'analogAlimA'};
-    my $analogAlimB = $params{'analogAlimB'};
-    my $analogDlimA = $params{'analogDlimA'};
-    my $analogDlimB = $params{'analogDlimB'};
-    my $modpulse = $params{'modpulse'};
-
-    defined $fpga or die "Mimosis::mimosis_scan_line: Must provide $fpga.";
-
-    $firstrow = defined $firstrow ? $firstrow : 0;
-    $lastrow = defined $lastrow ? $lastrow : 504;
-    $rowdiv = defined $rowdiv ? $rowdiv : 1;
-    $firstcol = defined $firstcol ? $firstcol : 0;
-    $lastcol = defined $lastcol ? $lastcol : 1023;
-    $coldiv = defined $coldiv ? $coldiv : 1;
-    $firstset = defined $firstset ? $firstset : 0x0;
-    $lastset = defined $lastset ? $lastset : 0xff;
-    $setdiv = defined $setdiv ? $setdiv : 1;
-    $settime = defined $settime ? $settime : 1000;
-    $slow = defined $slow ? $slow : 10000;
-    $a = defined $a ? $a : 0;
-    $rowsatonce = defined $rowsatonce ? $rowsatonce : 1;
-    $printset = defined $printset ? 1 : 0;
-    $printrow = defined $printrow ? 1 : 0;
-    $printcol = defined $printcol ? 1 : 0;
-    $printall = defined $printall ? 1 : 0;
-    $pixpulseA_A = defined $pixpulseA_A ? $pixpulseA_A : 25;
-    $pixpulseA_B = defined $pixpulseA_B ? $pixpulseA_B : 75;
-    $pixpulseD_A = defined $pixpulseD_A ? $pixpulseD_A : 0;
-    $pixpulseD_B = defined $pixpulseD_B ? $pixpulseD_B : 0;
-    $modpulse = defined $modpulse ? $modpulse : 3;
-
-    my $pixpulseA_A_msb = ( $pixpulseA_A & 0xff00 ) >> 8;
-    my $pixpulseA_A_lsb =   $pixpulseA_A & 0x00ff;
-    my $pixpulseA_B_msb = ( $pixpulseA_B & 0xff00 ) >> 8;
-    my $pixpulseA_B_lsb =   $pixpulseA_B & 0x00ff;
-    my $pixpulseD_A_msb = ( $pixpulseD_A & 0xff00 ) >> 8;
-    my $pixpulseD_A_lsb =   $pixpulseD_A & 0x00ff;
-    my $pixpulseD_B_msb = ( $pixpulseD_B & 0xff00 ) >> 8;
-    my $pixpulseD_B_lsb =   $pixpulseD_B & 0x00ff;
-
-
-    Mimosis::mimosis_register_write( $fpga, 0x0020, 0x40, $a ); usleep($slow); #EN_PIXELMASK to 0 for pulse
-    Mimosis::mimosis_instr_write( $fpga,  0x3f ); usleep($slow); #INSTR select all pixels
-    Mimosis::mimosis_instr_write( $fpga,  0x04 ); usleep($slow); #INSTR reset mask
-    Mimosis::mimosis_instr_write( $fpga,  0x3e ); usleep($slow); #INSTR unselect all pixels
-    Mimosis::mimosis_register_write( $fpga, 0x0066, $pixpulseA_A_lsb, $a ); usleep($slow); #analog pulsing pulse A, limit A
-    Mimosis::mimosis_register_write( $fpga, 0x0166, $pixpulseA_A_msb, $a ); usleep($slow);
-    Mimosis::mimosis_register_write( $fpga, 0x0076, $pixpulseA_B_lsb, $a ); usleep($slow); # analog pulsing pulse A, limit B
-    Mimosis::mimosis_register_write( $fpga, 0x0176, $pixpulseA_B_msb, $a ); usleep($slow);
-    Mimosis::mimosis_register_write( $fpga, 0x0067, $pixpulseD_A_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit A
-    Mimosis::mimosis_register_write( $fpga, 0x0167, $pixpulseD_A_msb, $a ); usleep($slow);
-    Mimosis::mimosis_register_write( $fpga, 0x0077, $pixpulseD_B_lsb, $a ); usleep($slow); # analog pulsing pulse D, limit B
-    Mimosis::mimosis_register_write( $fpga, 0x0177, $pixpulseD_B_msb, $a ); usleep($slow);
-    Mimosis::mimosis_register_write( $fpga, 0x007d, $modpulse, $a ); usleep($slow); #set modpulse. possible values: 1f/1, 1f/2, 1f/4, 1f/8, 1f/16, 1f/32, 1f/64, 1f/128
-
-    for ( my $y = $firstrow; $y < $lastrow; $y+=$rowdiv )
-    {
-        my $rAddrR = $y/8;
-        my $bitR   = $y%8;
-        my $add_regR = ( $rAddrR << 8 ) + 0x84;
-
-        if( $printrow || $printall ) { printf("row: $y\n"); }
-
-        for( my $x = $firstcol; $x <= $lastcol; $x+=$coldiv )
-        {
-            my $rAddrC = $x/16;  #region address
-            my $bitC   = ($x/2)%8;  #double column in region
-            my $add_regC = ($rAddrC << 8);
-            if    (($x%2 == 1)) { $add_regC += 0x82; }
-            elsif (($x%2 == 0)) { $add_regC += 0x81; }
-
-            Mimosis::mimosis_register_write( $fpga, $add_regC, ( 0x1 << $bitC ), $a ); usleep($slow);
-            Mimosis::mimosis_register_write( $fpga, $add_regR, ( 0x1 << $bitR ), $a ); usleep($slow);
-            Mimosis::mimosis_instr_write( $fpga,  0x05 ); usleep($slow); #INSTR set mask pulse
-            Mimosis::mimosis_register_write( $fpga, 0x4087, 0x0, $a ); usleep($slow); #unselect all pixels (register wise)
-
-            if( $printcol || $printall ) { printf("col: $x\n"); }
-        }
-    }
-
-
-    for ( my $set = $lastset; $set >= $firstset; $set -= $setdiv )
-    {
-
-        my $pulseNumber = ($set << 24) + 0x00c00000 + ($regBit << 20) + $yi;
-        trb_register_write_mem( $fpga, 0xa209, 0, [ $pulseNumber ], 1 ); usleep($slow);
-        Mimosis::mimosis_register_write( $fpga, 0x0046, $set, $a ); usleep($settime);
-
-        if( $printset || $printall ) { printf("set: $set\n"); }
-    }
-
-    Mimosis::mimosis_instr_write( $fpga, 0x3f ); usleep($slow);
-    Mimosis::mimosis_instr_write( $fpga, 0x04 ); usleep($slow); #INSTR set mask pulse
-    Mimosis::mimosis_instr_write( $fpga, 0x3e ); usleep($slow); #INSTR set mask pulse
-}
-
-
-
 sub mimosis_mask
 {
     my %params = @_;
@@ -1590,7 +1159,6 @@ COMMAND OPTIONS are:
         --nrows N        ->  How many rows to pulse at once. Default depends on region. For A,D: N = 4, for B,D: N = 2.
         --printset       ->  Print the current VPH_FINE setting.
         --printrow       ->  Print current row to set.
-        --printcol       ->  Print current column to set.
     -p, --printall       ->  Print all informations available.
         --analogAlimA    ->  Not implemented yet.
         --analogAlimB    ->  Not implemented yet.
index 9dab756f8b50250e0721ff3bedf7ab13c09c6be8..2645c2f296e8f4175ddb839e2f4817e3ceda1b98 100755 (executable)
@@ -22,13 +22,13 @@ my ( $printall_load, $printwrong_load );
 my ( $ikf, $name, $imagefileonly, $cleanup_dacscan, $printall_dacscan );
 
 #scurves
-my ( $colpix_scurves,      $rowpix_scurves,      $pulseonly_scurves,   $region_scurves,
-     $firstrow_scurves,    $lastrow_scurves,     $rowdiv_scurves,      $firstcol_scurves,
-     $lastcol_scurves,     $coldiv_scurves,      $firstset_scurves,    $lastset_scurves,
-     $setdiv_scurves,      $vcasn_scurves,       $vcasnstart_scurves,  $vcasnstop_scurves,
-     $vcasnstep_scurves,   $settime_scurves,     $rowsatonce_scurves,  $printset_scurves,
-     $printrow_scurves,    $printcol_scurves,    $printall_scurves,    $analogAlimA_scurves,
-     $analogAlimB_scurves, $analogDlimA_scurves, $analogDlimB_scurves, $modpulse_scurves );
+my ( $colpix_scurves,      $rowpix_scurves,      $pulseOnlySc,   $regionSc,
+     $yStaSc,    $yEndSc,     $yStepSc,
+     $setStaSc,    $setEndSc,
+     $setStepSc,      $vcasnSc,       $vcasnStaSc,  $vcasnEndSc,
+     $vcasnStepSc,   $setTimeSc,     $yTraSc,  $printSetSc, $printDacSc,
+     $printRowSc,    $printAllSc,    $analogAlimASc,
+     $analogAlimBSc, $analogDlimASc, $analogDlimBSc, $modpulseSc );
 
 #mask
 my ( $region_mask,  $row_mask,       $col_mask,
@@ -73,32 +73,29 @@ my $res = GetOptions (
             options => {
                 "colpix=s"          => \$colpix_scurves,
                 "rowpix=s"          => \$rowpix_scurves,
-                "pulseonly"         => \$pulseonly_scurves,
-                "region|r=s"        => \$region_scurves,
-                "firstrow=s"        => \$firstrow_scurves,
-                "lastrow=s"         => \$lastrow_scurves,
-                "rowdiv=s"          => \$rowdiv_scurves,
-                "firstcol=s"        => \$firstcol_scurves,
-                "lastcol=s"         => \$lastcol_scurves,
-                "coldiv=s"          => \$coldiv_scurves,
-                "firstset=s"        => \$firstset_scurves,
-                "lastset=s"         => \$lastset_scurves,
-                "setdiv=s"          => \$setdiv_scurves,
-                "settime=s"         => \$settime_scurves,
-                "firstvcasn=s"      => \$vcasnstart_scurves,
-                "lastvcasn=s"       => \$vcasnstop_scurves,
-                "vcasndiv=s"        => \$vcasnstep_scurves,
-                "vcasn=s"           => \$vcasn_scurves,
-                "nrows=s"           => \$rowsatonce_scurves,
-                "printset"          => \$printset_scurves,
-                "printrow"          => \$printrow_scurves,
-                "printcol"          => \$printcol_scurves,
-                "printall|p"        => \$printall_scurves,
-                "analogAlimA=s"     => \$analogAlimA_scurves,
-                "analogAlimB=s"     => \$analogAlimB_scurves,
-                "analogDlimA=s"     => \$analogDlimA_scurves,
-                "analogDlimB=s"     => \$analogDlimB_scurves,
-                "modpulse=s"        => \$modpulse_scurves,
+                "pulseonly"         => \$pulseOnlySc,
+                "region|r=s"        => \$regionSc,
+                "firstrow=s"        => \$yStaSc,
+                "lastrow=s"         => \$yEndSc,
+                "rowdiv=s"          => \$yStepSc,
+                "firstset=s"        => \$setStaSc,
+                "lastset=s"         => \$setEndSc,
+                "setdiv=s"          => \$setStepSc,
+                "settime=s"         => \$setTimeSc,
+                "firstvcasn=s"      => \$vcasnStaSc,
+                "lastvcasn=s"       => \$vcasnEndSc,
+                "vcasndiv=s"        => \$vcasnStepSc,
+                "vcasn=s"           => \$vcasnSc,
+                "nrows=s"           => \$yTraSc,
+                "printdac"          => \$printDacSc,
+                "printset"          => \$printSetSc,
+                "printrow"          => \$printRowSc,
+                "printall|p"        => \$printAllSc,
+                "analogAlimA=s"     => \$analogAlimASc,
+                "analogAlimB=s"     => \$analogAlimBSc,
+                "analogDlimA=s"     => \$analogDlimASc,
+                "analogDlimB=s"     => \$analogDlimBSc,
+                "modpulse=s"        => \$modpulseSc,
                 'help|h'        => {
                     handler => \&Mimosis::help_scurves,
                 }
@@ -232,7 +229,8 @@ elsif( $res->{subcommand}[0] eq 'dacscan' )
 
 elsif( $res->{subcommand}[0] eq 'scurves' )
 {
-    %dacs = (
+
+    my %dacs = (
         IBIAS => 0x0040,
         ITHR  => 0x0041,
         IDB   => 0x0042,
@@ -250,91 +248,59 @@ elsif( $res->{subcommand}[0] eq 'scurves' )
         IBUFBIAS => 0x004e
         );
 
-    %region_to_vcasn = (
+    my %regCharToStr = (
         A => 'VCASNA',
         B => 'VCASNB',
         C => 'VCASNC',
         D => 'VCASND'
         );
 
-    if( defined $region_scurves )
+    if( defined $regionSc )
     {
-        $vcasn_scurves = defined $vcasn_scurves ? $vcasn_scurves : $region_scurves;
-        my $vcasnStr = $region_to_vcasn{$vcasn_scurves};
-        my $val = Mimosis::mimosis_register_read( $fpga, $dacs{$vcasnStr}, $a );
-        $vcasnstart_scurves = defined $vcasnstart_scurves ? $vcasnstart_scurves : $val;
-        $vcasnstop_scurves = defined $vcasnstop_scurves ? $vcasnstop_scurves : $val+1;
-        $vcasnstep_scurves = defined $vcasnstep_scurves ? $vcasnstep_scurves : 1;
-
-        for ( my $vcasnset = $vcasnstart_scurves; $vcasnset < $vcasnstop_scurves; $vcasnset += $vcasnstep_scurves )
-        {
-            Mimosis::mimosis_register_write( $fpga, $dacs{$vcasnStr}, $vcasnset, $a ); usleep($slow);
+        $vcasnSc = defined $vcasnSc ? $vcasnSc : $regionSc;
+        my $vcasnStr = $regCharToStr{$vcasnSc};
+        my $vcasnVal = Mimosis::mimosis_register_read( $fpga, $dacs{$vcasnStr}, $a );
+        $vcasnStaSc = defined $vcasnStaSc ? $vcasnStaSc : $vcasnVal;
+        $vcasnEndSc = defined $vcasnEndSc ? $vcasnEndSc : $vcasnStaSc;
+        $vcasnStepSc = defined $vcasnStepSc ? $vcasnStepSc : 1;
+
+        # system("/d/jspc37/mimosis/analysis/mbs/dabc/build/bin/hldprint mbss://localhost:36789 &");
+
+        for ( my $vcasnSet = $vcasnStaSc;
+              $vcasnSet <= $vcasnEndSc;
+              $vcasnSet += $vcasnStepSc ) {
+            #set vcasn
+            Mimosis::mimosis_register_write( $fpga, $dacs{$vcasnStr}, $vcasnSet, $a ); usleep($slow);
 
-            if( $printdac_scurves || $printall_scurves ) { printf("dac: $vcasnset\n"); }
+            if( $printDacSc || $printAllSc ) { printf("dac: $vcasnSet\n"); }
 
             Mimosis::mimosis_scan_region(
                 fpga        => $fpga,
                 slow        => $slow,
                 a           => $a,
-                pulseonly   => $pulseonly_scurves,
-                region      => $region_scurves,
-                firstrow    => $firstrow_scurves,
-                lastrow     => $lastrow_scurves,
-                rowdiv      => $rowdiv_scurves,
-                firstcol    => $firstcol_scurves,
-                lastcol     => $lastcol_scurves,
-                coldiv      => $coldiv_scurves,
-                firstset    => $firstset_scurves,
-                lastset     => $lastset_scurves,
-                setdiv      => $setdiv_scurves,
-                settime     => $settime_scurves,
-                rowsatonce  => $rowsatonce_scurves,
-                printset    => $printset_scurves,
-                printrow    => $printrow_scurves,
-                printcol    => $printcol_scurves,
-                printall    => $printall_scurves,
-                analogAlimA => $analogAlimA_scurves,
-                analogAlimB => $analogAlimB_scurves,
-                analogDlimA => $analogDlimA_scurves,
-                analogDlimB => $analogDlimB_scurves,
-                modpulse    => $modpulse_scurves,
-                );
-
-            unless($pulseonly_scurves)
-            {
-                my $run = 1;
-                my $statusF = "/d/jspc37/mimosis/analysis/scurve/STATUS";
-                open(FH, '>', $statusF);
-                print(FH "0");
-                close(FH);
-
-                print "send fit bit.\n";
-                trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00400000 ], 1 ); usleep($s);
-
-                my $printStatusOnce = 0;
-                do
-                {
-                    sleep(1);
-                    if(-e $statusF)
-                    {
-                        open(FH, '<', $statusF);
-                        my @lines = <FH>;
-                        if ( $lines[0] == "2" ) { $run = 0; }
-                        close(FH);
-                    }
-                    if(!$printStatusOnce)
-                    {
-                        print "inside loop\n";
-                        $printStatusOnce = 1;
-                    }
-                }
-                while($run);
-                print "outside loop\n";
-
-                copy( "/d/jspc37/mimosis/analysis/scurve/params.csv", $vcasnStr . "_" . $vcasnset . ".csv" ) or die "Copy failed: $!";
-            }
+                pulseonly   => $pulseOnlySc,
+                region      => $regionSc,
+                firstrow    => $yStaSc,
+                lastrow     => $yEndSc,
+                rowdiv      => $yStepSc,
+                rowsatonce  => $yTraSc,
+                firstset    => $setStaSc,
+                lastset     => $setEndSc,
+                setdiv      => $setStepSc,
+                settime     => $setTimeSc,
+                printset    => $printSetSc,
+                printrow    => $printRowSc,
+                printall    => $printAllSc,
+                analogAlimA => $analogAlimASc,
+                analogAlimB => $analogAlimBSc,
+                analogDlimA => $analogDlimASc,
+                analogDlimB => $analogDlimBSc,
+                modpulse    => $modpulseSc,
+            );
+            trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00400000 + ($vcasnSet & 0xFF) ], 1 ); usleep($slow);
         }
-            # trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00000000 ], 1 ); usleep($s);
+
+        trb_register_write_mem( $fpga, 0xa209, 0, [ 0x00300000 ], 1 ); usleep($s);
         exit 0;
     }
 }