Ignore:
Timestamp:
05/18/12 23:16:43 (12 years ago)
Author:
neise
Message:
more comments and unimportant stuff
File:
1 edited

Legend:

Unmodified
Added
Removed
  • fact/tools/PyDimCtrl/service.py

    r13770 r13789  
    1 #!/usr/bin/python -tt
    2         from fpydim import *
     1#!/usr/bin/python -tti
     2#from fpydim import *
     3
     4
    35
    46def IsReadyForDataTaking( verbose = True ):
    5         drive = drive_control
    6         bias = bias_control
    7         fad = fad_control
    8        
    9         msg = MSG()
    10         msg.output = verbose
    11         msg("Checking if System isready for data taking... ")
    12 
    13         ok = True
    14         if not drive() == 7:
    15                 msg.warn( drive.state()[0] + "  NOT ok")
    16                 ok = False
    17         if not feedback() == 12:
    18                 msg.warn( feedback.state()[0] + "  NOT ok")
    19                 ok = False
    20         if not bias() == 9:
    21                 msg.warn( bias.state()[0] + "  NOT ok")
    22                 ok = False
    23         if not fad() == 4:
    24                 msg.warn( fad.state()[0] + "  NOT ok")
    25                 ok = False
    26        
    27         if ok:
    28                 msg.ok( " all ok " )
    29 
    30         return ok
     7    drive = drive_control
     8    bias = bias_control
     9    fad = fad_control
     10   
     11    msg = MSG()
     12    msg.output = verbose
     13    msg("Checking if System isready for data taking... ")
     14
     15    ok = True
     16    if not drive() == 7:
     17        msg.warn( drive.state()[0] + "  NOT ok")
     18        ok = False
     19    if not feedback() == 12:
     20        msg.warn( feedback.state()[0] + "  NOT ok")
     21        ok = False
     22    if not bias() == 9:
     23        msg.warn( bias.state()[0] + "  NOT ok")
     24        ok = False
     25    if not fad() == 4:
     26        msg.warn( fad.state()[0] + "  NOT ok")
     27        ok = False
     28   
     29    if ok:
     30        msg.ok( " all ok " )
     31
     32    return ok
    3133
    3234def StopTracking( verbose = True ):
    33         msg = MSG()
    34         msg.output = verbose
    35 
    36         # defining a shortcut
    37         drive = drive_control
    38 
    39         drive.stop()
    40         if not drive.wait(5, 10):
    41                 msg.warn("drive did not reach state 5 after 10 seconds")
    42                 msg.warn( drive.state()[0].rstrip('\x00') )
    43                 return False
    44 
    45         return True
     35    msg = MSG()
     36    msg.output = verbose
     37
     38    # defining a shortcut
     39    drive = drive_control
     40
     41    drive.stop()
     42    if not drive.wait(5, 10):
     43        msg.warn("drive did not reach state 5 after 10 seconds")
     44        msg.warn( drive.state()[0].rstrip('\x00') )
     45        return False
     46
     47    return True
    4648
    4749def TakeDataRun( verbose = True ):
    48         fad = fad_control       
    49         msg = MSG()
    50         msg.output = verbose
    51         if not IsReadyForDataTaking( verbose=False ):
    52                 msg.fail("System not Ready for DataTaking")
    53                 IsReadyForDataTaking( verbose=True )
    54                 return False
    55         mcp.start(300,-1,'data\0')
    56         if not fad.wait(8, 10):
    57                 msg.warn("FAD not in Writing Data after 10seconds")
    58                 return False
    59         msg("... taking data: 300 seconds - normal data run")
    60         if not fad.wait(4, 330):
    61                 msg.warn("FAD did not return to Connected, after 330 seconds")
    62                 return False
    63         return True
     50    fad = fad_control   
     51    msg = MSG()
     52    msg.output = verbose
     53    if not IsReadyForDataTaking( verbose=False ):
     54        msg.fail("System not Ready for DataTaking")
     55        IsReadyForDataTaking( verbose=True )
     56        return False
     57    mcp.start(300,-1,'data\0')
     58    if not fad.wait(8, 10):
     59        msg.warn("FAD not in Writing Data after 10seconds")
     60        return False
     61    msg("... taking data: 300 seconds - normal data run")
     62    if not fad.wait(4, 330):
     63        msg.warn("FAD did not return to Connected, after 330 seconds")
     64        return False
     65    return True
    6466
    6567def TrackSource( Shift=0.6, Angle=50, SrcName='Crab', verbose=True):
    66         drive = drive_control
    67        
    68         msg = MSG()
    69         msg.output = verbose
    70 
    71         if not drive.wait(5, 10):
    72                 msg.warn("drive not ready after 10sec")
    73                 msg.warn( drive.state()[0].rstrip('\x00') )
    74                 return False
    75 
    76         SrcName += '\0'
    77         drive.track_source( Shift, Angle, SrcName)
    78        
    79         return True
     68    drive = drive_control
     69   
     70    msg = MSG()
     71    msg.output = verbose
     72
     73    if not drive.wait(5, 10):
     74        msg.warn("drive not ready after 10sec")
     75        msg.warn( drive.state()[0].rstrip('\x00') )
     76        return False
     77
     78    SrcName += '\0'
     79    drive.track_source( Shift, Angle, SrcName)
     80   
     81    return True
    8082
    8183def WaitForTracking( CalmDownTime = 30, verbose = True):
    82         drive = drive_control
    83 
    84         msg = MSG()
    85         msg.output = verbose
    86 
    87         if not drive.wait(6, 10):
    88                 msg.warn("drive not in state moving after 10sec")
    89                 return False
    90 
    91         if not drive.wait(7, 10):
    92                 msg.warn("drive not in state Tracking after 10sec")
    93                 return False
    94 
    95         msg("waiting "+str(CalmDownTime)\
    96                         +"sec for drive to calm down and tracking to be stable")
    97         time.sleep(CalmDownTime)
    98         zoreturn True
     84    drive = drive_control
     85
     86    msg = MSG()
     87    msg.output = verbose
     88
     89    if not drive.wait(6, 10):
     90        msg.warn("drive not in state moving after 10sec")
     91        return False
     92
     93    if not drive.wait(7, 10):
     94        msg.warn("drive not in state Tracking after 10sec")
     95        return False
     96
     97    msg("waiting "+str(CalmDownTime)\
     98            +"sec for drive to calm down and tracking to be stable")
     99    time.sleep(CalmDownTime)
     100    return True
    99101
    100102def PrepareBias( verbose = True):
    101         msg = MSG()
    102         msg.output = verbose
    103         bias = bias_control
    104 
    105         if feedback() != 12:
    106                 msg.warn("feedback is not in Current Control")
    107                 return False
    108 
    109         bias.set_global_dac(1)
    110         if not bias.wait(9, 10):
    111                 msg.warn("bias not in Voltage ON after 10sec")
    112                 return False
    113         if not bias.wait(5, 10):
    114                 msg.warn("bias not Ramping after 10sec")
    115                 return False
    116         if not bias.wait(9, 30):
    117                 msg.warn("bias not fully ramped up after 30sec")
    118                 return False
    119 
    120         msg("waiting 45sec...")
    121         time.sleep(45)
    122         return True
     103    msg = MSG()
     104    msg.output = verbose
     105    bias = bias_control
     106
     107    if feedback() != 12:
     108        msg.warn("feedback is not in Current Control")
     109        return False
     110
     111    bias.set_global_dac(1)
     112    if not bias.wait(9, 10):
     113        msg.warn("bias not in Voltage ON after 10sec")
     114        return False
     115    if not bias.wait(5, 10):
     116        msg.warn("bias not Ramping after 10sec")
     117        return False
     118    if not bias.wait(9, 30):
     119        msg.warn("bias not fully ramped up after 30sec")
     120        return False
     121
     122    msg("waiting 45sec...")   
     123    time.sleep(45)
     124    return True
    123125
    124126def TakePedestalOnRun( verbose = True ):
    125         msg = MSG()
    126         msg.output = verbose
    127         if not IsReadyForDataTaking( verbose=False ):
    128                 msg.fail("System not Ready for DataTaking")
    129                 IsReadyForDataTaking( verbose=True )
    130                 return False
    131         mcp.start(-1,1000,'pedestal\0')
    132         if not fad.wait(8, 10):
    133                 msg.warn("FAD not in Writing Data after 10seconds")
    134                 return False
    135         msg("... taking ped: 1000evts @25Hz")
    136         if not fad.wait(4, 50):
    137                 msg.warn("FAD did not return to Connected, after 50 seconds")
    138                 return False
    139         return True
    140        
     127    msg = MSG()
     128    msg.output = verbose
     129    if not IsReadyForDataTaking( verbose=False ):
     130        msg.fail("System not Ready for DataTaking")
     131        IsReadyForDataTaking( verbose=True )
     132        return False
     133    mcp.start(-1,1000,'pedestal\0')
     134    if not fad.wait(8, 10):
     135        msg.warn("FAD not in Writing Data after 10seconds")
     136        return False
     137    msg("... taking ped: 1000evts @25Hz")
     138    if not fad.wait(4, 50):
     139        msg.warn("FAD did not return to Connected, after 50 seconds")
     140        return False
     141    return True
     142   
    141143def TakeExtLpRun( verbose = True ):
    142         msg = MSG()
    143         msg.output = verbose
    144         if not IsReadyForDataTaking( verbose=False ):
    145                 msg.fail("System not Ready for DataTaking")
    146                 IsReadyForDataTaking( verbose=True )
    147                 return False
    148         mcp.start(-1,1000,'light-pulser-ext\0')
    149         if not fad.wait(8, 10):
    150                 msg.warn("FAD not in Writing Data after 10seconds")
    151                 return False
    152         msg("... taking light-pulser-ext: 1000evts @25Hz")
    153         if not fad.wait(4, 50):
    154                 msg.warn("FAD did not return to Connected, after 50 seconds")
    155                 return False
    156         zoreturn True
     144    msg = MSG()
     145    msg.output = verbose
     146    if not IsReadyForDataTaking( verbose=False ):
     147        msg.fail("System not Ready for DataTaking")
     148        IsReadyForDataTaking( verbose=True )
     149        return False
     150    mcp.start(-1,1000,'light-pulser-ext\0')
     151    if not fad.wait(8, 10):
     152        msg.warn("FAD not in Writing Data after 10seconds")
     153        return False
     154    msg("... taking light-pulser-ext: 1000evts @25Hz")
     155    if not fad.wait(4, 50):
     156        msg.warn("FAD did not return to Connected, after 50 seconds")
     157        return False
     158    return True
    157159
    158160def TakeData( verbose = True):
    159         msg = MSG()
    160         msg.output = verbose
    161         TakePedestalOnRun()
    162         TakeExtLpRun()
    163         for i in range(4):
    164                 i +=1
    165                 msg("Taking Data Run "+str(i)+" of 4")
    166                 TakeDataRun()
     161    msg = MSG()
     162    msg.output = verbose
     163    TakePedestalOnRun()
     164    TakeExtLpRun()
     165    for i in range(4):
     166        i +=1
     167        msg("Taking Data Run "+str(i)+" of 4")
     168        TakeDataRun()
    167169
    168170def Take( time=0, events=0, runtype='drs-pedestal', verbose=True):
    169         msg = MSG()
    170         msg.output = verbose
    171         fad = fad_control
    172         runtype += '\0'
    173         if not fad.wait(4, 10):
    174                 msg.warn("fad not connected after 10sec")
    175                 return False
    176         mcp.start( time, events, runtype)
    177         if not fad.wait(8, 30):
    178                 msg.warn("fad not Writing Data after 30sec")
    179                 return False
    180         timeout = float('inf')
    181         if time != -1:
    182                 timeout = time*1.1
    183         if not fad.wait(4, timeout):
    184                 msg.warn("Data Writing not finished after "+str(timeout)+"sec")
    185                 return False
    186         return True
     171    msg = MSG()
     172    msg.output = verbose
     173    fad = fad_control
     174    runtype += '\0'
     175    if not fad.wait(4, 10):
     176        msg.warn("fad not connected after 10sec")
     177        return False
     178    mcp.start( time, events, runtype)
     179    if not fad.wait(8, 30):
     180        msg.warn("fad not Writing Data after 30sec")
     181        return False
     182    timeout = float('inf')
     183    if time != -1:
     184        timeout = time*1.1
     185    if not fad.wait(4, timeout):
     186        msg.warn("Data Writing not finished after "+str(timeout)+"sec")
     187        return False
     188    return True
    187189
    188190def TakeDrsCalibration( verbose = True):
    189         msg = MSG()
    190         msg.output = verbose
    191         bias = bias_control
    192         fad = fad_control
    193 
    194         bias.set_zero_voltage()
    195         if not bias.wait(7, 10):
    196                 msg.warn("bias has not switched of after 10sec")
    197                 return False
    198         fad.start_drs_calibration()
    199         Take( -1, 1000, 'drs-pedestal')
    200         Take( -1, 1000, 'drs-gain')
    201         Take( -1, 1000, 'drs-pedestal')
    202         fad.set_file_format(2)
    203         Take( -1, 1000, 'drs-pedestal')
    204         Take( -1, 1000, 'drs-time')
    205         Take( -1, 1000, 'drs-time-upshifted')
    206         fad.reset_secondary_drs_baseline()
    207         Take(-1, 1000, 'pedestal')
    208         fad.set_file_format(2)
    209         Take(-1, 1000, 'pedestal')
     191    msg = MSG()
     192    msg.output = verbose
     193    bias = bias_control
     194    fad = fad_control
     195
     196    bias.set_zero_voltage()
     197    if not bias.wait(7, 10):
     198        msg.warn("bias has not switched of after 10sec")
     199        return False
     200    fad.start_drs_calibration()
     201    Take( -1, 1000, 'drs-pedestal')
     202    Take( -1, 1000, 'drs-gain')
     203    Take( -1, 1000, 'drs-pedestal')
     204    fad.set_file_format(2)
     205    Take( -1, 1000, 'drs-pedestal')
     206    Take( -1, 1000, 'drs-time')
     207    Take( -1, 1000, 'drs-time-upshifted')
     208    fad.reset_secondary_drs_baseline()
     209    Take(-1, 1000, 'pedestal')
     210    fad.set_file_format(2)
     211    Take(-1, 1000, 'pedestal')
    210212
    211213def BlinkenLights(verbose = True):
    212         msg = MSG(verbose)
    213         fad = fad_control
    214 
    215         for i in range(10):
    216                 fad.set_file_format(2)
    217                 time.sleep(1)
    218                 fad.set_file_format(0)
    219                 time.sleep(1)
     214    msg = MSG(verbose)
     215    fad = fad_control
     216
     217    for i in range(10):
     218        fad.set_file_format(2)
     219        time.sleep(1)
     220        fad.set_file_format(0)
     221        time.sleep(1)
    220222
    221223def TakeAmplCalib( roi=1024, verbose=True):
    222         msg = MSG(verbose)
    223         bias = bias_control
    224         fad  = fad_control
    225         if (roi!=1024) and (roi!=300):
    226                 raise ValueError('roi must be 300 or 1024')
    227         # I do not understand, why the out put needs to be ENABLED??
    228         feedback.enable_output(0)
    229         bias.set_zero_voltage()
    230         bias.wait(7) # VoltageOff
    231         fad.start_drs_calibration
    232        
    233         Take(-1, 1000, 'drs-pedestal')
    234         Take(-1, 1000, 'drs-gain')
    235         if roi == 300:
    236                 Take(-1, 1000, 'pedestal')
    237         if roi == 1024:
    238                 Take(-1, 1000, 'drs-pedestal')
    239 
    240         fad.set_file_format(2)
    241         if roi == 300:
    242                 Take(-1, 1000, 'pedestal')
    243         if roi == 1024:
    244                 Take(-1, 1000, 'drs-pedestal')
     224    msg = MSG(verbose)
     225    bias = bias_control
     226    fad  = fad_control
     227    if (roi!=1024) and (roi!=300):
     228        raise ValueError('roi must be 300 or 1024')
     229    # I do not understand, why the out put needs to be ENABLED??
     230    feedback.enable_output(0)
     231    bias.set_zero_voltage()
     232    bias.wait(7) # VoltageOff
     233    fad.start_drs_calibration
     234   
     235    Take(-1, 1000, 'drs-pedestal')
     236    Take(-1, 1000, 'drs-gain')
     237    if roi == 300:
     238        Take(-1, 1000, 'pedestal')
     239    if roi == 1024:
     240        Take(-1, 1000, 'drs-pedestal')
     241
     242    fad.set_file_format(2)
     243    if roi == 300:
     244        Take(-1, 1000, 'pedestal')
     245    if roi == 1024:
     246        Take(-1, 1000, 'drs-pedestal')
    245247
    246248def TakeTimeCalib( verbose=True ):
    247         msg = MSG( verbose )
    248         feedback.enable_output(0)
    249         if bias() != 7:
    250                 bias.set_zero_voltage()
    251                 if not bias.wait(7, 10):
    252                         msg.warn("bias not ramped down after 10sec")
    253                         return False
    254         fad.set_file_format(2)
    255         Take(-1, 1000, 'drs-time')
    256         Take(-1, 1000, 'drs-time-upshifted')
     249    msg = MSG( verbose )
     250    feedback.enable_output(0)
     251    if bias() != 7:
     252        bias.set_zero_voltage()
     253        if not bias.wait(7, 10):
     254            msg.warn("bias not ramped down after 10sec")
     255            return False
     256    fad.set_file_format(2)
     257    Take(-1, 1000, 'drs-time')
     258    Take(-1, 1000, 'drs-time-upshifted')
     259
     260
     261# create introduction:
     262class INTRO(object):
     263    def __init__(self):
     264        # nothing to do
     265        pass
     266       
     267    def __repr__(self):
     268        print "welcome to PyDimCtrl V0.1:"
     269        print "--------------------------"
     270        print "If the hardware is ON but not all the software is connected try:"
     271        print "      Connect()"
     272        print "If all the programs are already up and running, you might want to"
     273        print "     TakeDrsAmplitudeCalibration(roi=1024) or "
     274        print "     TakeDrsAmplitudeCalibration(roi=300)"
     275        print "         i.e. ped, gain, trigger_offset + extra ped(for X-check)"
     276        print "     TakeDrsTimeCalibration( type='upshifted' ) or "
     277        print "     TakeDrsTimeCalibration( type='old' ) or "
     278        print "     "
     279        print "In case you would like to ramp up the Bias voltage try:"
     280        print "     VoltageOn( mode='temperature' ) or"
     281        print "     VoltageOn( mode='current' ) or"
     282        print "     VoltageOn( mode='light_pulser' )"
     283        print "Switch off with:"
     284        print "     VoltageOff()"
     285        print ""
     286        print "In case you would like a Watchdog to check, if the Voltage is up"
     287        print "and the BiasCrate is not disconnected, then try:"
     288        print "     VoltageOn( mode='--see above--', Watchdog=True )"
     289        print "PLEASE NOTE: The Watchdog will monitor the State of BIAS_CONTROL"
     290        print "and in case of a connection loss, it will: "
     291        print "     * print a warning"
     292        print "     * issue a the RECONNECT command"
     293        print "     * issue SET_ZERO_VOLTAGE - since this is the only way to get referenced"
     294        print "     * Ramp up again, using the same settings as before"
     295        print "     * possible OverCurrent situation will be treated as usual"
     296        print "The Watchdog will not react on any other state change, like OverCurrent or VoltageOff"
     297        print ""
     298        print ""
     299        return ""
     300       
     301
     302intro = INTRO()
    257303
    258304if __name__ == '__main__':
    259         IsReadyForDataTaking()
    260         TrackSource( Shift=0.6, Angle=50, SrcName='Crab', verbose=True)
    261         WaitForTracking( CalmDownTime = 30, verbose = True)
    262         TakeDataRun()
    263         StopTracking()
     305    print "welcome:"
     306    print " type: intro"
     307    print " for a short introduction"
     308
     309   
     310    #IsReadyForDataTaking()
     311    #TrackSource( Shift=0.6, Angle=50, SrcName='Crab', verbose=True)
     312    #WaitForTracking( CalmDownTime = 30, verbose = True)
     313    #TakeDataRun()
     314    #StopTracking()
Note: See TracChangeset for help on using the changeset viewer.