From: Maps Date: Mon, 25 Mar 2024 00:08:22 +0000 (+0100) Subject: .. X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=cc0ba2aca0dd1bd40aad1b59bce2ea084eb1f9b6;p=mimosis_chain.git .. --- diff --git a/analysis/mbs/dabc/plugins/hadaq/hldprint.cxx b/analysis/mbs/dabc/plugins/hadaq/hldprint.cxx index 16da414..ef6b4fd 100644 --- a/analysis/mbs/dabc/plugins/hadaq/hldprint.cxx +++ b/analysis/mbs/dabc/plugins/hadaq/hldprint.cxx @@ -1,29 +1,152 @@ #include #include +#include +#include +#include #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(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; jSetParLimits(0,0,55000); + // f1->SetParLimits(1,0,255); + // f1->SetParameters(50000,100,10); + // f1->SetParError(1, 0.1); + + // auto hist = static_cast(histP)->ProjectionX(" ",i*colsN+j,i*colsN+j); + // int status = static_cast(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; iData(i)); + uint32_t data = static_cast(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(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; } diff --git a/scripts/Mimosis.pm b/scripts/Mimosis.pm index f28e0b6..cfb3720 100755 --- a/scripts/Mimosis.pm +++ b/scripts/Mimosis.pm @@ -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. diff --git a/scripts/cli/mimosis b/scripts/cli/mimosis index 9dab756..2645c2f 100755 --- a/scripts/cli/mimosis +++ b/scripts/cli/mimosis @@ -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 = ; - 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; } }